Skip to content

Commit

Permalink
refactor autonav show/hide in application view
Browse files Browse the repository at this point in the history
no issue
- converts the nav-menu from a partial to its own view
- converts (most) of the jQuery events to ember actions
- removes unnecessary regex in application controller for nav showing in favor of session.isAuthenticated
  • Loading branch information
acburdine committed May 22, 2015
1 parent 27569b0 commit cdb2dce
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 117 deletions.
6 changes: 6 additions & 0 deletions core/client/app/controllers/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ var ApplicationController = Ember.Controller.extend({
showGlobalMobileNav: false,
showSettingsMenu: false,

autoNavClass: '',

userImage: Ember.computed('session.user.image', function () {
return this.get('session.user.image') || this.get('ghostPaths.url').asset('/shared/img/user-image.png');
}),
Expand All @@ -25,6 +27,10 @@ var ApplicationController = Ember.Controller.extend({
actions: {
topNotificationChange: function (count) {
this.set('topNotificationCount', count);
},
toggleAutoNav: function () {
var navClass = (this.get('autoNavClass')) ? '' : 'gh-autonav';
this.set('autoNavClass', navClass);
}
}
});
Expand Down
66 changes: 0 additions & 66 deletions core/client/app/templates/-nav-menu.hbs

This file was deleted.

2 changes: 1 addition & 1 deletion core/client/app/templates/application.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

{{gh-alerts notify="topNotificationChange"}}

<div class="gh-viewport">
<div class="gh-viewport {{autoNavClass}}">

{{#unless signedOut}}
{{partial "nav-menu"}}
Expand Down
64 changes: 64 additions & 0 deletions core/client/app/templates/nav-menu.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{{#gh-dropdown-button tagName="header" class="gh-nav-menu" dropdownName="user-menu"}}
<div class="gh-nav-menu-icon" style="background-image: url(https://s3.amazonaws.com/f.cl.ly/items/3I0g431b2b3q00253K1V/d16dc430c9c4f5c09d6ca09be3e5c72fdb21c1ac.png)"></div>
<div class="gh-nav-menu-details">
<div class="gh-nav-menu-details-blog">{{config.blogTitle}}</div>
<div class="gh-nav-menu-details-user">{{session.user.name}}</div>
</div>
<i class="icon-arrow"></i>
{{/gh-dropdown-button}}
{{#gh-dropdown tagName="div" classNames="dropdown" name="user-menu" closeOnClick="true"}}
<ul class="dropdown-menu dropdown-triangle-top js-user-menu-dropdown-menu" role="menu" style="right:-50%;left:auto;margin-right:40px">
<li role="presentation">{{#link-to "settings.about" classNames="gh-nav-menu-about dropdown-item js-nav-item" role="menuitem" tabindex="-1"}}<i class="icon-gh"></i> About Ghost{{/link-to}}</li>
<li class="divider"></li>
<li role="presentation">{{#link-to "settings.users.user" session.user.slug classNames="dropdown-item user-menu-profile js-nav-item" role="menuitem" tabindex="-1"}}<i class="icon-user"></i> Your Profile{{/link-to}}</li>
<li class="divider"></li>
<li role="presentation">{{#link-to "signout" classNames="dropdown-item user-menu-signout" role="menuitem" tabindex="-1"}}<i class="icon-signout"></i> Sign Out{{/link-to}}</li>
</ul>
{{/gh-dropdown}}
<section class="gh-nav-body">
<section class="gh-nav-search">
<input class="gh-nav-search-input gh-input" type="text" placeholder="Search">
<button class="gh-nav-search-button"><i class="icon-search"></i><span class="sr-only">Search</span></button>
</section>
<ul class="gh-nav-list gh-nav-main">
{{!<li><i class="icon-dash"></i>Dashboard</li>}}
<li>{{#link-to "editor.new" classNames="gh-nav-main-editor"}}<i class="icon-pen"></i>New Post{{/link-to}}</li>
<li>{{#link-to "posts" classNames="gh-nav-main-content"}}<i class="icon-content"></i>Content{{/link-to}}</li>
{{!<li><a href="#"><i class="icon-user"></i>My Posts</a></li>}}
<li>{{#link-to "settings.users" classNames="gh-nav-main-users"}}<i class="icon-team"></i>Team{{/link-to}}</li>
{{!<li><a href="#"><i class="icon-idea"></i>Ideas</a></li>}}
</ul>
<ul class="gh-nav-list gh-nav-settings">
<li class="gh-nav-list-h">Settings</li>
<li>{{#link-to "settings.general" classNames="gh-nav-settings-general"}}<i class="icon-settings"></i>General{{/link-to}}</li>
{{!<li><i class="icon-design"></i>Themes</li>}}
<li>{{#link-to "settings.navigation" classNames="gh-nav-settings-navigation"}}<i class="icon-compass"></i>Navigation{{/link-to}}</li>
<li>{{#link-to "settings.tags" classNames="gh-nav-settings-tags"}}<i class="icon-tag"></i>Tags{{/link-to}}</li>
<li>{{#link-to "settings.code-injection" classNames="gh-nav-settings-code-injection"}}<i class="icon-code"></i>Code Injection{{/link-to}}</li>
<li>{{#link-to "settings.labs" classNames="gh-nav-settings-labs"}}<i class="icon-apps"></i>Labs{{/link-to}}</li>
</ul>
</section>
<footer class="gh-nav-footer">
<div class="gh-autonav-toggle" {{action "toggleNav" target="view"}}>
<i class="{{view.iconClass}}"></i>
</div>
<a class="gh-nav-footer-sitelink" href="{{config.blogUrl}}/" target="_blank">View blog <i class="icon-external"></i></a>
<div class="gh-help-menu">
{{#gh-dropdown-button dropdownName="help-menu" tagName="div"}}
<div class="gh-help-button">
<i class="icon-question"><span class="hidden">Help</span></i>
</div>
{{/gh-dropdown-button}}
{{#gh-dropdown tagName="div" classNames="dropdown" name="help-menu" closeOnClick="true"}}
<ul class="dropdown-menu dropdown-triangle-bottom" role="menu">
<li role="presentation"><a class="dropdown-item help-menu-support" role="menuitem" tabindex="-1" href="http://support.ghost.org/" target="_blank"><i class="icon-ambulance"></i> Support Center</a></li>
<li role="presentation"><a class="dropdown-item help-menu-tweet" role="menuitem" tabindex="-1" href="https://twitter.com/intent/tweet?text=%40TryGhost+Hi%21+Can+you+help+me+with+&related=TryGhost" target="_blank" onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;"><i class="icon-twitter"></i> Tweet @TryGhost!</a></li>
<li class="divider"></li>
<li role="presentation"><a class="dropdown-item help-menu-how-to" role="menuitem" tabindex="-1" href="http://support.ghost.org/how-to-use-ghost/" target="_blank"><i class="icon-book"></i> How to Use Ghost</a></li>
<li role="presentation"><a class="dropdown-item help-menu-markdown" role="menuitem" tabindex="-1" href="" {{action "openModal" "markdown"}}><i class="icon-markdown"></i> Markdown Help</a></li>
<li class="divider"></li>
<li role="presentation"><a class="dropdown-item help-menu-wishlist" role="menuitem" tabindex="-1" href="http://ideas.ghost.org/" target="_blank"><i class="icon-idea"></i> Wishlist</a></li>
</ul>
{{/gh-dropdown}}
</div>{{! .help-menu }}
</footer>
50 changes: 0 additions & 50 deletions core/client/app/views/application.js
Original file line number Diff line number Diff line change
@@ -1,53 +1,8 @@
import Ember from 'ember';
import mobileQuery from 'ghost/utils/mobile';

var ApplicationView = Ember.View.extend({
classNames: 'gh-app',

didInsertElement: function () {
// #### Navigating within the sidebar closes it.
var self = this;

$('body').on('click tap', '.js-nav-item', function () {
Ember.run(function () {
if (mobileQuery.matches) {
self.set('controller.showGlobalMobileNav', false);
}
});
});

// #### Close the nav if mobile and clicking outside of the nav or not the burger toggle
$('.js-nav-cover').on('click tap', function () {
Ember.run(function () {
var isOpen = self.get('controller.showGlobalMobileNav');

if (isOpen) {
self.set('controller.showGlobalMobileNav', false);
}
});
});

// TODO: ABOVE - All of this can be removed
// TODO: BELOW - John wrote this, reimplement in a not-shit way

// #### Toggle nav between fixed and auto
$('.gh-autonav-toggle').on('click tap', function () {
$('.gh-viewport').toggleClass('gh-autonav');
$('.gh-autonav-toggle i').toggleClass('icon-minimise').toggleClass('icon-maximise');
$('.gh-nav').removeClass('open');
});

// #### Open and close the nav on hover
$('.gh-nav').mouseenter(function () {
$('.gh-nav').addClass('open');
});
$('.gh-main').mouseenter(function () {
$('.gh-nav').removeClass('open');
});

mobileQuery.addListener(this.get('closeGlobalMobileNavOnDesktop'));
},

showGlobalMobileNavObserver: function () {
if (this.get('controller.showGlobalMobileNav')) {
$('body').addClass('global-nav-expanded');
Expand All @@ -56,11 +11,6 @@ var ApplicationView = Ember.View.extend({
}
}.observes('controller.showGlobalMobileNav'),

willDestroyElement: function () {
mobileQuery.removeListener(this.get('closeGlobalMobileNavOnDesktop'));
mobileQuery.removeListener(this.get('swapUserMenuDropdownTriangleClasses'));
},

toggleSettingsMenuBodyClass: function () {
$('body').toggleClass('settings-menu-expanded', this.get('controller.showSettingsMenu'));
}.observes('controller.showSettingsMenu')
Expand Down
43 changes: 43 additions & 0 deletions core/client/app/views/nav-menu.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import Ember from 'ember';

export default Ember.View.extend(Ember.TargetActionSupport, {
tagName: 'nav',
classNames: 'gh-nav',
classNameBindings: ['open'],
templateName: 'nav-menu',

open: true,
isCollapsed: false,

didInsertElement: function () {
var self = this;

// This needs to die at some point
Ember.$('.gh-main').mouseenter(function () {
self.send('collapseNav');
});
},

iconClass: Ember.computed('isCollapsed', function () {
var type = (this.get('isCollapsed')) ? 'maximise' : 'minimise';
return 'icon-' + type;
}),

mouseEnter: function () {
this.set('open', true);
},

actions: {
toggleNav: function () {
this.set('isCollapsed', !(this.get('isCollapsed')));
this.set('open', false);
this.triggerAction({
action: 'toggleAutoNav',
target: this.get('controller')
});
},
collapseNav: function () {
this.set('open', false);
}
}
});

0 comments on commit cdb2dce

Please sign in to comment.