Refactor submenu JS to remove jquery dep and move to wagtail-client (#5254)

pull/5402/head
Jonny Scholes 2019-06-19 21:30:39 +10:00 zatwierdzone przez Thibaud Colas
rodzic 722321c3ff
commit 4ef9919240
7 zmienionych plików z 63 dodań i 33 usunięć

Wyświetl plik

@ -0,0 +1,50 @@
/**
* Initialises the Submenus within the primary Wagtail menu (excluding the Explorer menu)
*/
const initSubmenus = () => {
const primaryNavContainer = document.querySelector('[data-nav-primary]');
if (!primaryNavContainer) {
return;
}
const subMenuTriggers = document.querySelectorAll(
'[data-nav-primary-submenu-trigger]'
);
const activeClass = 'submenu-active';
[...subMenuTriggers].forEach(subMenuTrigger => {
subMenuTrigger.addEventListener('click', clickEvent => {
const submenuContainer = subMenuTrigger.parentNode;
primaryNavContainer.classList.remove(activeClass);
[...subMenuTriggers].forEach(sm => sm.classList.remove(activeClass));
primaryNavContainer.classList.toggle(activeClass);
submenuContainer.classList.toggle(activeClass);
document.addEventListener('mousedown', e => {
if (
!submenuContainer.contains(e.target) &&
subMenuTrigger !== e.target
) {
primaryNavContainer.classList.remove(activeClass);
submenuContainer.classList.remove(activeClass);
}
});
document.addEventListener('keydown', e => {
// IE11 uses "Esc" instead of "Escape"
if (e.key === 'Escape' || e.key === 'Esc') {
primaryNavContainer.classList.remove(activeClass);
submenuContainer.classList.remove(activeClass);
}
});
clickEvent.preventDefault();
});
});
};
export { initSubmenus };

Wyświetl plik

@ -9,11 +9,9 @@ import PublicationStatus from './components/PublicationStatus/PublicationStatus'
import LoadingSpinner from './components/LoadingSpinner/LoadingSpinner';
import Portal from './components/Portal/Portal';
import Transition from './components/Transition/Transition';
import Explorer, {
ExplorerToggle,
initExplorer,
} from './components/Explorer';
import Explorer, { ExplorerToggle, initExplorer } from './components/Explorer';
import { initFocusOutline } from './utils/focus';
import { initSubmenus } from './includes/initSubmenus';
export {
Button,
@ -26,4 +24,5 @@ export {
ExplorerToggle,
initExplorer,
initFocusOutline,
initSubmenus,
};

Wyświetl plik

@ -1,7 +1,6 @@
from django.forms import Media, MediaDefiningClass
from django.forms.utils import flatatt
from django.template.loader import render_to_string
from django.templatetags.static import static
from django.utils.safestring import mark_safe
from django.utils.text import slugify
@ -101,10 +100,6 @@ class SubmenuMenuItem(MenuItem):
self.menu = menu
super().__init__(label, '#', **kwargs)
@property
def media(self):
return Media(js=[static('wagtailadmin/js/submenu.js')]) + self.menu.media
def is_shown(self, request):
# show the submenu if one or more of its children is shown
return bool(self.menu.menu_items_for_request(request))

Wyświetl plik

@ -1,6 +1,12 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { initExplorer, Icon, Portal, initFocusOutline } from 'wagtail-client';
import {
initExplorer,
Icon,
Portal,
initFocusOutline,
initSubmenus
} from 'wagtail-client';
if (process.env.NODE_ENV === 'development') {
// Run react-axe in development only, so it does not affect performance
@ -28,4 +34,5 @@ document.addEventListener('DOMContentLoaded', () => {
}
initFocusOutline();
initSubmenus();
});

Wyświetl plik

@ -1,21 +0,0 @@
$(function() {
$('.nav-main .submenu-trigger').on('click', function() {
if ($(this).closest('li').find('.nav-submenu').length) {
// Close other active submenus first, if any
if ($('.nav-wrapper.submenu-active').length && !$(this).closest('li').hasClass('submenu-active')) {
$('.nav-main .submenu-active, .nav-wrapper').removeClass('submenu-active');
}
$(this).closest('li').toggleClass('submenu-active');
$('.nav-wrapper').toggleClass('submenu-active');
return false;
}
});
$(document).on('keydown click', function(e) {
if ($('.nav-wrapper.submenu-active').length && (e.keyCode == 27 || !e.keyCode)) {
$('.nav-main .submenu-active, .nav-wrapper').removeClass('submenu-active');
}
});
});

Wyświetl plik

@ -2,7 +2,7 @@
{% load wagtailadmin_tags wagtailcore_tags static i18n %}
{% block furniture %}
<aside class="nav-wrapper">
<aside class="nav-wrapper" data-nav-primary>
<div class="inner">
<a href="{% url 'wagtailadmin_home' %}" class="logo" aria-label="{% trans 'Dashboard' %}">
{% block branding_logo %}

Wyświetl plik

@ -1,5 +1,5 @@
<li class="menu-item{% if active %} menu-active{% endif %}">
<a href="#" class="submenu-trigger {{ classnames }}"{{ attr_string }}>{{ label }}</a>
<a href="#" data-nav-primary-submenu-trigger class="submenu-trigger {{ classnames }}"{{ attr_string }}>{{ label }}</a>
<div class="nav-submenu">
<h2 id="nav-submenu-{{ name }}-title" class="{{ classnames }}">{{ label }}</h2>
<ul aria-labelledby="nav-submenu-{{ name }}-title">{{ menu_html }}