diff --git a/wagtail/wagtailadmin/menu.py b/wagtail/wagtailadmin/menu.py
index fa974abd18..9eca44a5e0 100644
--- a/wagtail/wagtailadmin/menu.py
+++ b/wagtail/wagtailadmin/menu.py
@@ -95,7 +95,7 @@ class SubmenuMenuItem(MenuItem):
@property
def media(self):
- return self.menu.media
+ return Media(js=['wagtailadmin/js/submenu.js']) + self.menu.media
def is_shown(self, request):
# show the submenu if one or more of its children is shown
@@ -103,9 +103,9 @@ class SubmenuMenuItem(MenuItem):
def render_html(self, request):
return format_html(
- """
""",
self.name, self.classnames, self.attr_string, self.label, self.menu.render_html(request)
)
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js
new file mode 100644
index 0000000000..b9f823c2ba
--- /dev/null
+++ b/wagtail/wagtailadmin/static/wagtailadmin/js/submenu.js
@@ -0,0 +1,12 @@
+$(function(){
+ $('.nav-main li.submenu-trigger').each(function() {
+ var submenuUl = $(this).find('> ul.nav-submenu');
+ /* move submenuUl out of .nav-main */
+ $('.nav-wrapper').append(submenuUl);
+
+ $(this).find('> a').click(function() {
+ submenuUl.toggle();
+ return false;
+ });
+ });
+});
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
index d3ebdfe0d1..39ac29b116 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
@@ -257,6 +257,16 @@ body{
font-size:0.9em;
}
+ .nav-submenu {
+ display: none; /* prevent submenu showing before JS load */
+ position: absolute;
+ left: 99%;
+ z-index: 500;
+ width: 200px;
+ background-color: $color-grey-1;
+ }
+
+
.content-wrapper{
width:100%;
height:100%; /* this has no effect on desktop, but on mobile it helps aesthetics of menu popout action */
@@ -681,6 +691,11 @@ footer, .logo{
}
}
+ .submenu-items {
+ position: absolute;
+ left: 99%;
+ }
+
footer{
width:80%;
margin-left:50px;
@@ -711,6 +726,9 @@ footer, .logo{
.explorer {
z-index:$explorer-z-index;
}
+ .nav-submenu {
+ z-index:$explorer-z-index;
+ }
.nav-wrapper{
z-index:auto; /* allows overspill of messages banner onto left menu, but also explorer to spill over main content */
}