From 62f0cc338ee199bc5e955604df3409f6e62b9834 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 13 Nov 2014 16:33:13 +0000 Subject: [PATCH] Main submenu and explorer now disable eachother when clicked --- .../static/wagtailadmin/js/explorer-menu.js | 51 ++++++++++++------- .../static/wagtailadmin/js/submenu.js | 17 ++++--- .../wagtailadmin/js/vendor/jquery.dlmenu.js | 13 +++-- 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js index 9fc6ccc5bf..68861ab724 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js @@ -1,27 +1,44 @@ $(function(){ + var $explorer = $('#explorer'); + var $body = $('body'); + // Dynamically load menu on request. $(document).on('click', '.dl-trigger', function(){ var $this = $(this); - var $explorer = $('#explorer'); + + // Close any submenuss + $('.nav-main .submenu-active, .nav-wrapper').removeClass('submenu-active'); - $this.addClass('icon-spinner'); - - if(!$explorer.children().length){ - $explorer.load($this.data('explorer-menu-url'), function() { - $this.removeClass('icon-spinner'); - - $explorer.addClass('dl-menuwrapper').dlmenu({ - animationClasses : { - classin : 'dl-animate-in-2', - classout : 'dl-animate-out-2' - } - }); - $explorer.dlmenu('openMenu'); - }); + if($explorer.data('dlmenu') && $explorer.dlmenu('isOpen')){ + // if it's already open, allow the menu plugin to close it + return false; }else{ - $explorer.dlmenu('openMenu'); - } + $this.addClass('icon-spinner'); + if(!$explorer.children().length){ + $explorer.load($this.data('explorer-menu-url'), function() { + $this.removeClass('icon-spinner'); + + $explorer.addClass('dl-menuwrapper').dlmenu({ + animationClasses : { + classin : 'dl-animate-in-2', + classout : 'dl-animate-out-2' + } + }); + $explorer.dlmenu('openMenu'); + }); + }else{ + $explorer.dlmenu('openMenu'); + $this.removeClass('icon-spinner'); + } + } return false; }); + + // Close menu on ESC key + $(document).on('keydown click', function(e){ + if($explorer.data('dlmenu') && $explorer.dlmenu('isOpen') && (e.keyCode == 27 || !e.keyCode)){ + $explorer.dlmenu('closeMenu'); + } + }); }); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js index 19bf91836a..d273e3e677 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js @@ -1,18 +1,23 @@ $(function(){ + var $explorer = $('#explorer'); + $('.nav-main .submenu-trigger').on('click', function(){ if($(this).closest('li').find('.nav-submenu').length){ + + // Close explorer menu, although it may not be instantiated yet + if($explorer.data('dlmenu') && $explorer.dlmenu('isOpen')){ + $explorer.dlmenu('closeMenu'); + } + $(this).closest('li').toggleClass('submenu-active'); - $('.nav-wrapper').toggleClass('submenu-active') + $('.nav-wrapper').toggleClass('submenu-active'); return false } }); $(document).on('keydown click', function(e){ - if($('.nav-wrapper.submenu-active').length){ - if(e.keyCode == 27 || !e.keyCode){ - $('.nav-main .submenu-active').removeClass('submenu-active'); - $('.nav-wrapper').toggleClass('submenu-active') - } + if($('.nav-wrapper.submenu-active').length && (e.keyCode == 27 || !e.keyCode)){ + $('.nav-main .submenu-active, .nav-wrapper').removeClass('submenu-active'); } }); }); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.dlmenu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.dlmenu.js index 458e28c5b1..dbee6702c1 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.dlmenu.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.dlmenu.js @@ -84,7 +84,7 @@ else { self._openMenu(); } - return false; + return true; } ); @@ -163,6 +163,11 @@ } ); }, + + isOpen: function(){ + return this.open + }, + closeMenu : function() { if( this.open ) { this._closeMenu(); @@ -197,9 +202,9 @@ _openMenu : function() { var self = this; // clicking somewhere else makes the menu close - $body.off( 'click' ).on( 'click.dlmenu', function() { - self._closeMenu() ; - } ); + // $body.off( 'click' ).on( 'click.dlmenu', function() { + // self._closeMenu() ; + // } ); this.$menu.addClass( 'dl-menuopen dl-menu-toggle' ).on( this.transEndEventName, function() { $( this ).removeClass( 'dl-menu-toggle' ); } );