From 28592b4d9bff96a62cc2dcad7646103d64cc62d8 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 11 Aug 2014 21:06:32 +0100 Subject: [PATCH] Allow menu items to define their own javascript includes, and put the explorer menu js there rather than in core.js --- wagtail/wagtailadmin/menu.py | 10 ++++++- .../static/wagtailadmin/js/core.js | 26 ------------------ .../static/wagtailadmin/js/explorer-menu.js | 27 +++++++++++++++++++ .../templates/wagtailadmin/admin_base.html | 3 ++- .../templatetags/wagtailadmin_tags.py | 5 ++++ wagtail/wagtailadmin/wagtail_hooks.py | 7 ++++- 6 files changed, 49 insertions(+), 29 deletions(-) create mode 100644 wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js diff --git a/wagtail/wagtailadmin/menu.py b/wagtail/wagtailadmin/menu.py index 4aae05cd3..27afcda44 100644 --- a/wagtail/wagtailadmin/menu.py +++ b/wagtail/wagtailadmin/menu.py @@ -8,8 +8,9 @@ try: except ImportError: from django.forms.util import flatatt +from django.conf import settings from django.utils.text import slugify -from django.utils.html import format_html +from django.utils.html import format_html, format_html_join from wagtail.wagtailcore import hooks @@ -27,6 +28,13 @@ class MenuItem(object): else: self.attr_string = "" + js_files = [] + def render_js(self): + if self.js_files: + return format_html_join('\n', '', + ((settings.STATIC_URL, filename) for filename in self.js_files) + ) + def is_shown(self, request): return True diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js index 5ff1b5104..21966a3bf 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js @@ -21,32 +21,6 @@ $(function(){ } }); - // Dynamically load menu on request. - $(document).on('click', '.dl-trigger', function(){ - var $this = $(this); - var $explorer = $('#explorer'); - - $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'); - } - - return false; - }); - // Resize nav to fit height of window. This is an unimportant bell/whistle to make it look nice var fitNav = function(){ $('.nav-wrapper').css('min-height',$(window).height()); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js new file mode 100644 index 000000000..9fc6ccc5b --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/explorer-menu.js @@ -0,0 +1,27 @@ +$(function(){ + // Dynamically load menu on request. + $(document).on('click', '.dl-trigger', function(){ + var $this = $(this); + var $explorer = $('#explorer'); + + $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'); + } + + return false; + }); +}); diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html index 0cae459a2..a9664e011 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/skeleton.html" %} -{% load compress %} +{% load compress wagtailadmin_tags %} {% block css %} {% compress css %} @@ -22,6 +22,7 @@ + {% main_nav_js %} {% endcompress %} {% block extra_js %}{% endblock %} diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py index 94bc14dde..657a2570c 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py +++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py @@ -39,6 +39,11 @@ def main_nav(context): 'request': request, } +@register.simple_tag +def main_nav_js(): + js_snippets = [item.render_js() or '' for item in get_master_menu_item_list()] + return ''.join(js_snippets) + @register.filter("ellipsistrim") def ellipsistrim(value, max_length): diff --git a/wagtail/wagtailadmin/wagtail_hooks.py b/wagtail/wagtailadmin/wagtail_hooks.py index a529fb93c..8945154b8 100644 --- a/wagtail/wagtailadmin/wagtail_hooks.py +++ b/wagtail/wagtailadmin/wagtail_hooks.py @@ -5,9 +5,14 @@ from wagtail.wagtailcore import hooks from wagtail.wagtailadmin.menu import MenuItem +class ExplorerMenuItem(MenuItem): + js_files = [ + 'wagtailadmin/js/explorer-menu.js', + ] + @hooks.register('register_admin_menu_item') def register_explorer_menu_item(): - return MenuItem( + return ExplorerMenuItem( _('Explorer'), urlresolvers.reverse('wagtailadmin_explore_root'), classnames='icon icon-folder-open-inverse dl-trigger', attrs={'data-explorer-menu-url': urlresolvers.reverse('wagtailadmin_explorer_nav')},