changeset 272:72c522ba2da6

Change to a vertical left-side menu.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 25 Sep 2014 10:55:42 -0700
parents cf313f55a3ab
children 8e45a4f7f265
files wikked/assets/css/wikked/main.less wikked/assets/css/wikked/nav.less wikked/assets/js/wikked/views.js wikked/assets/tpl/nav.html
diffstat 4 files changed, 114 insertions(+), 113 deletions(-) [+]
line wrap: on
line diff
--- a/wikked/assets/css/wikked/main.less	Thu Sep 25 10:54:55 2014 -0700
+++ b/wikked/assets/css/wikked/main.less	Thu Sep 25 10:55:42 2014 -0700
@@ -68,3 +68,20 @@
     }
 }
 
+// Allow free links and forms in menus.
+.pure-menu .pure-menu-link,
+.pure-menu .pure-menu-form {
+    display: inline-block;
+    vertical-align: middle;
+    position: relative;
+}
+
+@media (min-width: 48em) {
+    // Place right-aligned menu items to, well, to the right.
+    .pure-menu .pure-menu-horizontal-right {
+        float: right;
+    }
+    .pure-menu-horizontal:after {
+        clear: both;
+    }
+}
--- a/wikked/assets/css/wikked/nav.less	Thu Sep 25 10:54:55 2014 -0700
+++ b/wikked/assets/css/wikked/nav.less	Thu Sep 25 10:55:42 2014 -0700
@@ -1,74 +1,41 @@
-
-// Extending Pure's horizontal menu.
-
-// Allow free links and forms in menus.
-.pure-menu .pure-menu-link,
-.pure-menu .pure-menu-form {
-    display: inline-block;
-    vertical-align: middle;
-    position: relative;
-}
-
-// Make menu forms tighter.
-.pure-menu-form fieldset {
-    padding: 0;
-}
-
-@media (min-width: 48em) {
-    // Place right-aligned menu items to, well, to the right.
-    .pure-menu .pure-menu-horizontal-right {
-        float: right;
-    }
-    .pure-menu-horizontal:after {
-        clear: both;
-    }
-}
-
 
 // Navigation menu
-@wiki-menu-height: 4.5em;
-@wiki-shortcut-width: 4em;
-@wiki-shortcut-height: 3em;
+@wiki-menu-width: 12em;
+@wiki-menu-width-ext: 36em;
+@wiki-shortcut-height: 3.9em;
 
-body {
-    padding-top: @wiki-shortcut-height;
-    transition: padding 200ms ease-in-out 0s,
-                margin 200ms ease-in-out 0s;
+.wrapper {
+    transition: padding 200ms ease-in-out 0s;
+}
+.wrapper.wiki-menu-active {
+    padding-left: @wiki-menu-width !important;
+}
+.wrapper.wiki-menu-inactive {
+    padding-left: 0 !important;
 }
 
 .wiki-menu-a {
-    color: @color-gray-dark;
+    color: @color-gray-light;
 }
 .wiki-menu-a-hover {
     background: @color-green-light;
     text-decoration: none;
 }
 
-.wiki-menu-scrolling {
-    box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.3);
-}
-
-.wiki-menu-active {
-    top: 0 !important;
-}
-
-.wiki-menu-inactive {
-    top: -2*@wiki-menu-height !important;
-}
-
 #wiki-menu {
     position: fixed !important;
-    top: -2*@wiki-menu-height;
-    left: 0;
-    width: 100%;
+    top: 0;
+    bottom: 0;
+    left: -@wiki-menu-width;
+    width: @wiki-menu-width;
+    padding-top: @wiki-shortcut-height;
+    border: none;
     z-index: 10;
-    padding-left: @wiki-shortcut-width;
+    overflow-y: auto;
     color: @color-gray-dark;
-    background-color: @body-bg;
-    border-bottom: none;
-    transition: box-shadow 200ms ease-in-out 0s,
-                border-bottom 200ms ease-in-out 0s,
-                top 200ms ease-in-out 0s,
+    background-color: @color-gray-dark;
+    transition: left 200ms ease-in-out 0s,
+                width 200ms ease-in-out 0s,
                 !important;
     a {
         padding: 1em;
@@ -80,6 +47,19 @@
     a:hover, a:focus {
         .wiki-menu-a-hover();
     }
+
+    ul {
+        border-top: 1px solid @color-gray-medium;
+    }
+}
+#wiki-menu.wiki-menu-active {
+    left: 0 !important;
+}
+#wiki-menu.wiki-menu-inactive {
+    left: -@wiki-menu-width !important;
+}
+#wiki-menu.wiki-menu-ext {
+    width: @wiki-menu-width-ext !important;
 }
 
 #wiki-menu-shortcut {
@@ -98,26 +78,41 @@
 @media (min-width: 48em) {
     // Hide the shortcut and move the horizontal menu down.
     #wiki-menu {
-        top: 0;
+        //left: 0;
     }
-    body {
-        padding-top: @wiki-menu-height;
+    .wrapper {
+        //padding-left: @wiki-menu-width;
     }
 }
 
 // Search
-form#search button {
-    background: none;
-    padding: 0.5em;
-    &:hover { color: @link-hover-color; }
+.search-result-hover {
+    background: @color-gray-light;
+}
+
+b.match {
+    color: @color-orange;
+    background: @color-gray-light;
 }
+
+form#search {
+    width: 100%;
+    padding: 0.2em 1em;
+
+    button {
+        background: none;
+        padding: 0.5em;
+        &:hover { color: @link-hover-color; }
+    }
+}
+
 ul#search-preview {
     position: absolute;
     list-style: none;
     margin: 0;
     padding: 0;
     top: auto;
-    left: 0;
+    left: 1em;
     z-index: 12;
     visibility: visible;
     background: #FFF;
@@ -126,27 +121,31 @@
     box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.3);
 
     li {
-        border-bottom: 1px solid #EEE;
+        border-bottom: 1px solid @color-gray-light;
         margin: 0;
         padding: 0;
         width: 100%;
-
-        &:hover, &:focus {
-        }
     }
     a {
         margin: 0;
         padding: 0.5em;
         display: inline-block;
         width: 100%;
+        color: @color-gray-dark;
+
+        &:link, &:active, &:visited {
+            color: @color-gray-dark;
+        }
+        &:hover, &:focus {
+            color: @color-gray-dark;
+            .search-result-hover();
+        }
     }
 }
+
 ul.search-results {
     list-style: none;
 }
-b.match {
-    background: #ffeb84;
-}
 
 // Footer
 .footer-wrapper {
--- a/wikked/assets/js/wikked/views.js	Thu Sep 25 10:54:55 2014 -0700
+++ b/wikked/assets/js/wikked/views.js	Thu Sep 25 10:55:42 2014 -0700
@@ -186,12 +186,9 @@
             this.searchPreviewList.hide();
             this.activeResultIndex = -1;
 
-            // Add a pretty shadow on the menu when scrolling down.
-            $(window).scroll(this, this._onWindowScroll);
-
             this.wikiMenu = $('#wiki-menu');
-            this.isScrolled = ($(window).scrollTop() > 0);
-            this.isMenuActive = (this.wikiMenu.css('top') == '0px');
+            this.wrapperAndWikiMenu = $('.wrapper, #wiki-menu');
+            this.isMenuActive = (this.wikiMenu.css('left') == '0px');
             this.isMenuActiveLocked = false;
 
             return this;
@@ -209,42 +206,33 @@
             "focus #search-query": "_searchQueryFocused",
             "blur #search-query": "_searchQueryBlurred"
         },
-        _onWindowScroll: function(e) {
-            var scrollTop = $(window).scrollTop();
-            if (scrollTop > 0 && !e.data.isScrolled) {
-                e.data.wikiMenu.addClass('wiki-menu-scrolling');
-                e.data.isScrolled = true;
-            } else if (scrollTop === 0 && e.data.isScrolled) {
-                e.data.wikiMenu.removeClass('wiki-menu-scrolling');
-                e.data.isScrolled = false;
-            }
-        },
         _onMenuShortcutClick: function(e) {
             this.isMenuActive = !this.isMenuActive;
         },
         _onMenuShortcutHover: function(e) {
-            if (this.isMenuActive || this.isMenuActiveLocked)
-                return;
-            this.wikiMenu.toggleClass('wiki-menu-inactive', false);
-            this.wikiMenu.toggleClass('wiki-menu-active', true);
+            if (!this.isMenuActive && !this.isMenuActiveLocked)
+                this._toggleWikiMenu(true);
         },
         _onMenuShortcutLeave: function(e) {
-            if (this.isMenuActive || this.isMenuActiveLocked)
-                return;
-            this.wikiMenu.toggleClass('wiki-menu-active', false);
-            this.wikiMenu.toggleClass('wiki-menu-inactive', true);
+            if (!this.isMenuActive && !this.isMenuActiveLocked)
+                this._toggleWikiMenu(false);
         },
         _onMenuHover: function(e) {
-            if (this.isMenuActive || this.isMenuActiveLocked)
-                return;
-            this.wikiMenu.toggleClass('wiki-menu-inactive', false);
-            this.wikiMenu.toggleClass('wiki-menu-active', true);
+            if (!this.isMenuActive && !this.isMenuActiveLocked)
+                this._toggleWikiMenu(true);
         },
         _onMenuLeave: function(e) {
-            if (this.isMenuActive || this.isMenuActiveLocked)
-                return;
-            this.wikiMenu.toggleClass('wiki-menu-active', false);
-            this.wikiMenu.toggleClass('wiki-menu-inactive', true);
+            if (!this.isMenuActive && !this.isMenuActiveLocked)
+                this._toggleWikiMenu(false);
+        },
+        _toggleWikiMenu: function(onOff) {
+            if (onOff) {
+                this.wrapperAndWikiMenu.toggleClass('wiki-menu-inactive', false);
+                this.wrapperAndWikiMenu.toggleClass('wiki-menu-active', true);
+            } else {
+                this.wrapperAndWikiMenu.toggleClass('wiki-menu-active', false);
+                this.wrapperAndWikiMenu.toggleClass('wiki-menu-inactive', true);
+            }
         },
         _submitSearch: function(e) {
             e.preventDefault();
@@ -307,17 +295,19 @@
         },
         _updateActiveResult: function() {
             var entries = this.searchPreviewList.children();
-            entries.toggleClass('wiki-menu-a-hover', false);
+            entries.toggleClass('search-result-hover', false);
             if (this.activeResultIndex >= 0)
-                $(entries[this.activeResultIndex]).toggleClass('wiki-menu-a-hover', true);
+                $(entries[this.activeResultIndex]).toggleClass('search-result-hover', true);
         },
         _searchQueryFocused: function(e) {
             this.isMenuActiveLocked = true;
+            this.wikiMenu.toggleClass('wiki-menu-ext', true);
         },
         _searchQueryBlurred: function(e) {
             $(e.currentTarget).val('').trigger('input');
+            this.wikiMenu.toggleClass('wiki-menu-ext', false);
             this.isMenuActiveLocked = false;
-            if (!this.wikiMenu.is(':focus'))
+            if ($(document.activeElement).parents('#wiki-menu').length === 0)
                 this._onMenuLeave(e);
         }
     });
--- a/wikked/assets/tpl/nav.html	Thu Sep 25 10:54:55 2014 -0700
+++ b/wikked/assets/tpl/nav.html	Thu Sep 25 10:55:42 2014 -0700
@@ -1,12 +1,7 @@
 <a id="wiki-menu-shortcut" class="wiki-logo">
     <span>W</span>
 </a>
-<nav id="wiki-menu" role="navigation" class="pure-menu pure-menu-open pure-menu-horizontal pure-menu-fixed">
-    <!--form id="newpage" class="pure-form pure-menu-form">
-        <fieldset>
-            <button type="submit" class="pure-button">New Page</button>
-        </fieldset>
-    </form-->
+<nav id="wiki-menu" role="navigation" class="pure-menu pure-menu-open">
     <ul class="">
         <li><a href="/"><span class="glyphicon glyphicon-home"></span> Home</a></li>
         <li><a href="/#/create/"><span class="glyphicon glyphicon-file"></span> New Page</a></li>
@@ -16,12 +11,12 @@
     </ul>
     <form role="search" id="search" class="pure-form pure-menu-form">
         <fieldset>
-            <input type="text" name="q" id="search-query" class="form-control input-sm" placeholder="Search..." autocomplete="off"></input>
+            <button type="submit" class="pure-button"><span class="glyphicon glyphicon-search"></span></button>
+            <input type="text" name="q" id="search-query" class="pure-input-1" placeholder="Search..." autocomplete="off"></input>
             <ul id="search-preview"></ul>
-            <button type="submit" class="pure-button"><span class="glyphicon glyphicon-search"></span></button>
         </fieldset>
     </form>
-    <ul class="pure-menu-horizontal-right">
+    <ul class="">
         {{#if user}}
         <li><a href="{{url_profile}}"><span class="glyphicon glyphicon-cog"></span> {{user.username}}</a></li>
         <li><a href="{{url_logout}}"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>