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')},