From b4c75649bab1a809cb0a697815f0890a05be5a56 Mon Sep 17 00:00:00 2001
From: Connor Turland <connorturland@gmail.com>
Date: Fri, 12 Aug 2016 04:04:18 +0000
Subject: [PATCH] all teh mobile things

---
 app/assets/images/menu-alt-256.png            | Bin 0 -> 2030 bytes
 app/assets/javascripts/application.js         |   1 +
 app/assets/javascripts/src/Metamaps.Header.js |   2 +-
 app/assets/javascripts/src/Metamaps.Map.js    |   3 +
 app/assets/javascripts/src/Metamaps.Mobile.js |  24 +++++
 app/assets/javascripts/src/Metamaps.Topic.js  |   3 +
 app/assets/stylesheets/application.css.erb    |   2 +-
 app/assets/stylesheets/clean.css.erb          |   1 +
 app/assets/stylesheets/mobile.css.erb         |  97 ++++++++++++++++++
 app/views/layouts/_head.html.erb              |   2 +-
 app/views/layouts/_mobilemenu.html.erb        |  51 +++++++++
 app/views/layouts/application.html.erb        |   8 +-
 app/views/layouts/doorkeeper.html.erb         |   9 +-
 app/views/main/home.html.erb                  |   1 +
 app/views/main/requestinvite.html.erb         |   3 +-
 app/views/maps/activemaps.html.erb            |   1 +
 app/views/maps/featuredmaps.html.erb          |   1 +
 app/views/maps/mymaps.html.erb                |   1 +
 app/views/maps/sharedmaps.html.erb            |   1 +
 app/views/maps/show.html.erb                  |   1 +
 app/views/maps/usermaps.html.erb              |   1 +
 app/views/users/edit.html.erb                 |   1 +
 app/views/users/passwords/edit.html.erb       |   1 +
 app/views/users/passwords/new.html.erb        |   1 +
 app/views/users/registrations/new.html.erb    |   1 +
 app/views/users/sessions/new.html.erb         |   1 +
 frontend/src/components/Header.js             |  86 ++++++++--------
 27 files changed, 253 insertions(+), 51 deletions(-)
 create mode 100644 app/assets/images/menu-alt-256.png
 create mode 100644 app/assets/javascripts/src/Metamaps.Mobile.js
 create mode 100644 app/assets/stylesheets/mobile.css.erb
 create mode 100644 app/views/layouts/_mobilemenu.html.erb

diff --git a/app/assets/images/menu-alt-256.png b/app/assets/images/menu-alt-256.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8d9912bfdf6f5d48e1a93b4d605854ff2318333
GIT binary patch
literal 2030
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
QP<zh*t6*Q@(dch~1NSbVtpET3

literal 0
HcmV?d00001

diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index cb22ab95..7b3f0713 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -40,6 +40,7 @@
 //= require ./src/Metamaps.Map
 //= require ./src/Metamaps.Account
 //= require ./src/Metamaps.Mapper
+//= require ./src/Metamaps.Mobile
 //= require ./src/Metamaps.Admin
 //= require ./src/Metamaps.Import
 //= require ./src/Metamaps.Header
diff --git a/app/assets/javascripts/src/Metamaps.Header.js b/app/assets/javascripts/src/Metamaps.Header.js
index 3693163b..e23ce07b 100644
--- a/app/assets/javascripts/src/Metamaps.Header.js
+++ b/app/assets/javascripts/src/Metamaps.Header.js
@@ -16,7 +16,7 @@ Metamaps.Header = {
   changeSection: function (signedIn, section, userAvatar, userName) {
     ReactDOM.render(
       React.createElement(Metamaps.ReactComponents.Header, { signedIn: signedIn, section: section, userAvatar: userAvatar, userName: userName }),
-      document.getElementById('exploreMapsHeader')
+      document.getElementById('headerMenuItems')
     );
   }
 }
diff --git a/app/assets/javascripts/src/Metamaps.Map.js b/app/assets/javascripts/src/Metamaps.Map.js
index ec3b946f..fc06ed68 100644
--- a/app/assets/javascripts/src/Metamaps.Map.js
+++ b/app/assets/javascripts/src/Metamaps.Map.js
@@ -109,6 +109,9 @@ Metamaps.Map = {
 
       Metamaps.Realtime.startActiveMap()
       Metamaps.Loading.hide()
+      
+      // for mobile
+      $('#header_content').html(map.get('name'))
     }
 
     $.ajax({
diff --git a/app/assets/javascripts/src/Metamaps.Mobile.js b/app/assets/javascripts/src/Metamaps.Mobile.js
new file mode 100644
index 00000000..21eb4902
--- /dev/null
+++ b/app/assets/javascripts/src/Metamaps.Mobile.js
@@ -0,0 +1,24 @@
+/* global Metamaps, $ */
+
+Metamaps.Mobile = {
+  init: function () {
+    var self = Metamaps.Mobile
+    
+    $('#menu_icon').click(self.toggleMenu)
+    $('#mobile_menu li a').click(self.liClick)
+    $('#header_content').click(self.titleClick)
+  },
+  liClick: function () {
+    var self = Metamaps.Mobile
+    $('#header_content').html($(this).text())
+    self.toggleMenu()
+  },
+  toggleMenu: function () {
+    $('#mobile_menu').toggle()
+  },
+  titleClick: function () {
+    if (Metamaps.Active.Map) {
+      Metamaps.Map.InfoBox.open()
+    }
+  }
+}
\ No newline at end of file
diff --git a/app/assets/javascripts/src/Metamaps.Topic.js b/app/assets/javascripts/src/Metamaps.Topic.js
index f0f68a92..da2e6be3 100644
--- a/app/assets/javascripts/src/Metamaps.Topic.js
+++ b/app/assets/javascripts/src/Metamaps.Topic.js
@@ -84,6 +84,9 @@ Metamaps.Topic = {
       Metamaps.Filter.checkMetacodes()
       Metamaps.Filter.checkSynapses()
       Metamaps.Filter.checkMappers()
+      
+      // for mobile
+      $('#header_content').html(Metamaps.Active.Topic.get('name'))
     }
 
     $.ajax({
diff --git a/app/assets/stylesheets/application.css.erb b/app/assets/stylesheets/application.css.erb
index d1f866bc..bf5079bb 100644
--- a/app/assets/stylesheets/application.css.erb
+++ b/app/assets/stylesheets/application.css.erb
@@ -1578,7 +1578,7 @@ h3.filterBox {
 .mapContributors {
     position: relative;
     height: 30px;
-    margin: 9px 0px 9px 56px;
+    margin: 9px 0px 9px 44px;
     padding: 0;
     width: 64px;
 }
diff --git a/app/assets/stylesheets/clean.css.erb b/app/assets/stylesheets/clean.css.erb
index 5d2fe78f..4fc87f06 100644
--- a/app/assets/stylesheets/clean.css.erb
+++ b/app/assets/stylesheets/clean.css.erb
@@ -27,6 +27,7 @@
 #yield {
   position: absolute;
   width: 100%;
+  height: 100%;
 }
 
 /*.animations {
diff --git a/app/assets/stylesheets/mobile.css.erb b/app/assets/stylesheets/mobile.css.erb
new file mode 100644
index 00000000..72a7b14c
--- /dev/null
+++ b/app/assets/stylesheets/mobile.css.erb
@@ -0,0 +1,97 @@
+#mobile_header {
+  display: none;
+}
+
+/* Smartphones (portrait and landscape) ----------- */
+@media only screen and (min-device-width : 320px) and (max-device-width : 480px) {
+  .upperLeftUI, .upperRightUI, .openCheatsheet, .mapInfoIcon, .uv-icon, .chat-box, #exploreMapsHeader {
+    display: none !important;
+  }
+  
+  #mobile_header {
+    display: block;
+  }
+  
+  .homeWrapper {
+    width: 96%;
+    padding: 0 2%;
+  }
+  .homeTitle {
+    text-align: left;
+  }
+  .homeIntro {
+    text-align: left;
+  }
+  .fullWidthWrapper.withVideo {
+    height: auto;
+  }
+  .homeVideo {
+    width: 100%;
+    height: auto;
+  }
+  .fullWidthWrapper.withPartners {
+    display: none;
+  }
+  .learnMoreCTA {
+    display: none !important;
+  }
+  
+  #yield {
+    margin-top: 50px;
+  }
+  
+  .wrapper div.mapInfoBox {
+    position: fixed;
+    top: 50px;
+    right: 0px;
+    bottom: auto;
+    width: 100%;
+    max-width: 360px;
+  }
+  
+  #wrapper .requestInvite {
+    width: 100%;
+    padding: 0;
+  }
+}
+
+#mobile_header {
+  height: 50px;
+  background: #EEE;
+  width: 100%;
+  box-shadow: 0px 3px 3px rgba(0,0,0,0.23), 0 3px 3px rgba(0,0,0,0.16);
+  position: fixed;
+}
+
+#menu_icon {
+  width: 50px;
+  height: 50px;
+  border-right: 1px solid #DDD;
+  position: absolute;
+  background: #EEE url('<%= asset_path('menu-alt-256.png') %>') no-repeat center center;
+  background-size: 30px;
+}
+
+#header_content {
+  position: absolute;
+  width: 100%;
+  overflow-x: scroll;
+  padding-left: 60px;
+  font-size: 24px;
+  line-height: 50px;
+}
+
+#mobile_menu {
+ display: none;
+  background: #EEE;
+  position: fixed;
+  top: 50px;
+  border-top: 1px solid #DDD;
+  padding: 10px;
+  width: 200px;
+  box-shadow: 3px 3px 3px rgba(0,0,0,0.23), 3px 3px 3px rgba(0,0,0,0.16);
+}
+
+#mobile_menu li {
+  padding: 10px;
+}
\ No newline at end of file
diff --git a/app/views/layouts/_head.html.erb b/app/views/layouts/_head.html.erb
index 3f0d506d..23a24c4a 100644
--- a/app/views/layouts/_head.html.erb
+++ b/app/views/layouts/_head.html.erb
@@ -12,7 +12,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-  <title><%=h yield(:title) %></title>
+  <title><%= yield(:title) %></title>
   <%= csrf_meta_tags %>
   <meta name="viewport" content="width=device-width, user-scalable=no">
 
diff --git a/app/views/layouts/_mobilemenu.html.erb b/app/views/layouts/_mobilemenu.html.erb
new file mode 100644
index 00000000..cba31af0
--- /dev/null
+++ b/app/views/layouts/_mobilemenu.html.erb
@@ -0,0 +1,51 @@
+<div id="mobile_header">
+  <div id="header_content">
+    <%= yield(:mobile_title) %>
+  </div>
+  <div id="menu_icon"></div>
+</div>
+<div id="mobile_menu">
+  <ul>
+    <% if not current_user %>
+      <li>
+        <%= link_to "Home", root_path, :data => { :bypass => 'true'} %>
+      </li>
+    <% end %>
+    <% if current_user %>
+      <!-- we should add a page where they can create a new map -->
+      <li>
+        Signed in as: <%= current_user.name %>
+      </li>
+      <li>
+        <%= link_to "My Maps", explore_mine_path %>
+      </li>
+      <li>
+        <%= link_to "Shared With Me", explore_shared_path %>
+      </li>
+    <% end %>
+    <li>
+      <%= link_to "Recently Active", explore_active_path %>
+    </li>
+    <% if not current_user %>
+      <li>
+        <%= link_to "Featured Maps", explore_featured_path %>
+      </li>
+    <% end %>
+    <% if not current_user %>
+      <li>
+        <%= link_to "Request Invite", request_path, :data => { :bypass => 'true'} %>
+      </li>
+      <li>
+        <%= link_to "Login", new_user_session_path, :data => { :bypass => 'true'} %>
+      </li>
+    <% end %>
+    <% if current_user %>
+      <li>
+        <%= link_to "Account", edit_user_url(current_user), :data => { :bypass => 'true'} %>
+      </li>
+      <li>
+        <%= link_to "Sign Out", "/logout", id: "Logout", :data => { :bypass => 'true'} %>
+      </li>
+    <% end %>
+  </ul>
+</div>
\ No newline at end of file
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index c36b412b..8c86eb22 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -45,8 +45,14 @@
             <%= render :partial => 'layouts/lowermapelements' %>
 
             <div id="exploreMaps"></div>
-            <div id="exploreMapsHeader"></div>
+            <div id="exploreMapsHeader">
+              <div className="exploreMapsBar exploreElement">
+                <div id="headerMenuItems" className="exploreMapsMenu">
+                </div>
+              </div>
+            </div>
             <div id="infovis"></div>
+            <%= render :partial => 'layouts/mobilemenu' %>
             <div id="instructions">
               <div class="addTopic">
                 Double-click to<br>add a topic!
diff --git a/app/views/layouts/doorkeeper.html.erb b/app/views/layouts/doorkeeper.html.erb
index 378ada04..16feb69d 100644
--- a/app/views/layouts/doorkeeper.html.erb
+++ b/app/views/layouts/doorkeeper.html.erb
@@ -33,7 +33,14 @@
             <% end %>
             <%= render :partial => 'layouts/lowermapelements' %>
 
-            <div id="exploreMapsHeader"></div>
+            <div id="exploreMapsHeader">
+              <div className="exploreMapsBar exploreElement">
+                <div className="exploreMapsMenu">
+                  <div id="headerMenuItems" className="exploreMapsCenter">
+                  </div>
+                </div>
+              </div>
+            </div>
             <div id="loading"></div>
         </div>
 
diff --git a/app/views/main/home.html.erb b/app/views/main/home.html.erb
index 3b083dab..3fc06f4f 100644
--- a/app/views/main/home.html.erb
+++ b/app/views/main/home.html.erb
@@ -6,6 +6,7 @@
 %>  
  
 <% content_for :title, "Home | Metamaps" %> 
+<% content_for :mobile_title, "Home" %> 
 <div id="yield">
   <div class="homeWrapper homeText">
     <div class="homeTitle">Make Sense with Metamaps</div>
diff --git a/app/views/main/requestinvite.html.erb b/app/views/main/requestinvite.html.erb
index 2b147db0..88a4977c 100644
--- a/app/views/main/requestinvite.html.erb
+++ b/app/views/main/requestinvite.html.erb
@@ -4,7 +4,8 @@
   # Shows a form where people can request an invite
   #%>
 
-<% content_for :title, "Request Invite | Metamaps" %>   
+<% content_for :title, "Request Invite | Metamaps" %>
+<% content_for :mobile_title, "Request Invite" %>
   
 <div id="yield">
 <iframe class="requestInvite" src="https://docs.google.com/forms/d/1lWoKPFHErsDfV5l7-SvcHxwX3vDi9nNNVW0rFMgJwgg/viewform?embedded=true" width="700" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
diff --git a/app/views/maps/activemaps.html.erb b/app/views/maps/activemaps.html.erb
index cfcbce27..a70cdcae 100644
--- a/app/views/maps/activemaps.html.erb
+++ b/app/views/maps/activemaps.html.erb
@@ -8,6 +8,7 @@
   Metamaps.Maps.Active = <%= @maps.to_json.html_safe %>;
   Metamaps.currentPage = "active";
   <% content_for :title, "Explore Active Maps | Metamaps" %>
+  <% content_for :mobile_title, "Recently Active" %>
 
   Metamaps.currentSection = "explore";
   Metamaps.GlobalUI.Search.open();
diff --git a/app/views/maps/featuredmaps.html.erb b/app/views/maps/featuredmaps.html.erb
index 2c438b49..cfe4a627 100644
--- a/app/views/maps/featuredmaps.html.erb
+++ b/app/views/maps/featuredmaps.html.erb
@@ -8,6 +8,7 @@
   Metamaps.Maps.Featured = <%= @maps.to_json.html_safe %>;
   Metamaps.currentPage = "featured";
   <% content_for :title, "Explore Featured Maps | Metamaps" %>
+  <% content_for :mobile_title, "Featured Maps" %>
 
   Metamaps.currentSection = "explore";
   Metamaps.GlobalUI.Search.open();
diff --git a/app/views/maps/mymaps.html.erb b/app/views/maps/mymaps.html.erb
index 60c69f68..17f715f9 100644
--- a/app/views/maps/mymaps.html.erb
+++ b/app/views/maps/mymaps.html.erb
@@ -8,6 +8,7 @@
   Metamaps.Maps.Mine = <%= @maps.to_json.html_safe %>;
   Metamaps.currentPage = "mine";
   <% content_for :title, "Explore My Maps | Metamaps" %>
+  <% content_for :mobile_title, "My Maps" %>
 
   Metamaps.currentSection = "explore";
   Metamaps.GlobalUI.Search.open();
diff --git a/app/views/maps/sharedmaps.html.erb b/app/views/maps/sharedmaps.html.erb
index 99c41828..fd02c810 100644
--- a/app/views/maps/sharedmaps.html.erb
+++ b/app/views/maps/sharedmaps.html.erb
@@ -8,6 +8,7 @@
   Metamaps.Maps.Shared = <%= @maps.to_json.html_safe %>;
   Metamaps.currentPage = "shared";
   <% content_for :title, "Explore Shared Maps | Metamaps" %>
+  <% content_for :mobile_title, "Shared With Me" %>
 
   Metamaps.currentSection = "explore";
   Metamaps.GlobalUI.Search.open();
diff --git a/app/views/maps/show.html.erb b/app/views/maps/show.html.erb
index 9a74b337..70c1189e 100644
--- a/app/views/maps/show.html.erb
+++ b/app/views/maps/show.html.erb
@@ -5,6 +5,7 @@
 #%>
 
 <% content_for :title, @map.name + " | Metamaps" %>
+<% content_for :mobile_title, @map.name %>
 <script>
 	Metamaps.currentSection = "map";
 	Metamaps.currentPage = <%= @map.id.to_s %>;
diff --git a/app/views/maps/usermaps.html.erb b/app/views/maps/usermaps.html.erb
index c0855329..8c5ecf89 100644
--- a/app/views/maps/usermaps.html.erb
+++ b/app/views/maps/usermaps.html.erb
@@ -11,6 +11,7 @@
   };
   Metamaps.currentPage = "mapper";
   <% content_for :title, @user.name + " | Metamaps" %>
+  <% content_for :mobile_title, @user.name %>
 
   Metamaps.currentSection = "explore";
   Metamaps.GlobalUI.Search.open();
diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb
index 969961ea..e269d3b9 100644
--- a/app/views/users/edit.html.erb
+++ b/app/views/users/edit.html.erb
@@ -5,6 +5,7 @@
   #%>
   
 <% content_for :title, @user.name + "'s Settings | Metamaps" %> 
+<% content_for :mobile_title, "Account Settings" %>
 <div id="yield">
 <%= form_for @user, url: user_url, :html =>{ :multipart => true, :class => "edit_user centerGreyForm"} do |form| %>
   <h3>Edit Account</h3>
diff --git a/app/views/users/passwords/edit.html.erb b/app/views/users/passwords/edit.html.erb
index 5eb51623..76e4c20d 100644
--- a/app/views/users/passwords/edit.html.erb
+++ b/app/views/users/passwords/edit.html.erb
@@ -1,4 +1,5 @@
 <% content_for :title, "Change Password | Metamaps" %>
+<% content_for :mobile_title, "Change Password" %>
 
 <div id="yield">
 <%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put, :class => "forgotPassword centerGreyForm forgotPasswordReset" }) do |f| %>
diff --git a/app/views/users/passwords/new.html.erb b/app/views/users/passwords/new.html.erb
index 8d1940a9..5b8fb902 100644
--- a/app/views/users/passwords/new.html.erb
+++ b/app/views/users/passwords/new.html.erb
@@ -1,4 +1,5 @@
 <% content_for :title, "Password Reset | Metamaps" %>
+<% content_for :mobile_title, "Password Reset" %>
 
 <div id="yield">
 <%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post, :class => "forgotPassword centerGreyForm" }) do |f| %>
diff --git a/app/views/users/registrations/new.html.erb b/app/views/users/registrations/new.html.erb
index 00e33cc3..80851e07 100644
--- a/app/views/users/registrations/new.html.erb
+++ b/app/views/users/registrations/new.html.erb
@@ -1,4 +1,5 @@
 <% content_for :title, "Sign Up | Metamaps" %>
+<% content_for :mobile_title, "Join" %>
 
 <div id="yield">
 <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :post, :class => "new_user centerGreyForm" }) do |f| %>
diff --git a/app/views/users/sessions/new.html.erb b/app/views/users/sessions/new.html.erb
index 16836175..4d9f298c 100644
--- a/app/views/users/sessions/new.html.erb
+++ b/app/views/users/sessions/new.html.erb
@@ -1,4 +1,5 @@
 <% content_for :title, "Sign In | Metamaps" %>
+<% content_for :mobile_title, "Login" %>
 
 <div id="yield">
 <%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :method => :post, :class => "centerGreyForm login" }) do |f| %>
diff --git a/frontend/src/components/Header.js b/frontend/src/components/Header.js
index 58bfb29e..5c0d492a 100644
--- a/frontend/src/components/Header.js
+++ b/frontend/src/components/Header.js
@@ -33,52 +33,48 @@ class Header extends Component {
     const apps = section == "registered" || section == "authorized"
 
     return (
-      <div className="exploreMapsBar exploreElement">
-        <div className="exploreMapsMenu">
-          <div className="exploreMapsCenter">
-            <MapLink show={signedIn && explore}
-              href="/explore/mine"
-              linkClass={activeClass("my")}
-              text="My Maps"
-            />
-            <MapLink show={signedIn && explore}
-              href="/explore/shared"
-              linkClass={activeClass("shared")}
-              text="Shared With Me"
-            />
-            <MapLink show={explore}
-              href={signedIn ? "/" : "/explore/active"}
-              linkClass={activeClass("active")}
-              text="Recently Active"
-            />
-            <MapLink show={!signedIn && explore}
-              href="/explore/featured"
-              linkClass={activeClass("featured")}
-              text="Featured Maps"
-            />
-
-            {mapper ? (
-              <div className='exploreMapsButton active mapperButton'>
-                <img className='exploreMapperImage' width='24' height='24' src={this.props.userAvatar} />
-                <div className='exploreMapperName'>{this.props.userName}&rsquo;s Maps</div>
-                <div className='clearfloat'></div>
-              </div>
-            ) : null }
-
-            <MapLink show={apps}
-              href="/oauth/applications"
-              linkClass={"activeMaps exploreMapsButton"  + (section == "registered" ? " active" : "")}
-              data-bypass="true"
-              text="Registered Apps"
-            />
-            <MapLink show={apps}
-              href="/oauth/applications"
-              linkClass={"activeMaps exploreMapsButton"  + (section == "authorized" ? " active" : "")}
-              data-bypass="true"
-              text="Authorized Apps"
-            />
+      <div className="exploreMapsCenter">
+        <MapLink show={signedIn && explore}
+          href="/explore/mine"
+          linkClass={activeClass("my")}
+          text="My Maps"
+        />
+        <MapLink show={signedIn && explore}
+          href="/explore/shared"
+          linkClass={activeClass("shared")}
+          text="Shared With Me"
+        />
+        <MapLink show={explore}
+          href={signedIn ? "/" : "/explore/active"}
+          linkClass={activeClass("active")}
+          text="Recently Active"
+        />
+        <MapLink show={!signedIn && explore}
+          href="/explore/featured"
+          linkClass={activeClass("featured")}
+          text="Featured Maps"
+        />
+  
+        {mapper ? (
+          <div className='exploreMapsButton active mapperButton'>
+            <img className='exploreMapperImage' width='24' height='24' src={this.props.userAvatar} />
+            <div className='exploreMapperName'>{this.props.userName}&rsquo;s Maps</div>
+            <div className='clearfloat'></div>
           </div>
-        </div>
+        ) : null }
+  
+        <MapLink show={apps}
+          href="/oauth/applications"
+          linkClass={"activeMaps exploreMapsButton"  + (section == "registered" ? " active" : "")}
+          data-bypass="true"
+          text="Registered Apps"
+        />
+        <MapLink show={apps}
+          href="/oauth/applications"
+          linkClass={"activeMaps exploreMapsButton"  + (section == "authorized" ? " active" : "")}
+          data-bypass="true"
+          text="Authorized Apps"
+        />
       </div>
     )
   }