X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/1ee3e779e4b9b0a92f701a72f21a72c83cb1ce68..refs/pull/2868/head:/resources/js/components/header-mobile-toggle.js diff --git a/resources/js/components/header-mobile-toggle.js b/resources/js/components/header-mobile-toggle.js index eccd4b8f0..99737bfb8 100644 --- a/resources/js/components/header-mobile-toggle.js +++ b/resources/js/components/header-mobile-toggle.js @@ -1,31 +1,41 @@ class HeaderMobileToggle { - constructor(elem) { - this.elem = elem; - this.toggleButton = elem.querySelector('.mobile-menu-toggle'); - this.menu = elem.querySelector('.header-links'); - this.open = false; + setup() { + this.elem = this.$el; + this.toggleButton = this.$refs.toggle; + this.menu = this.$refs.menu; + this.open = false; this.toggleButton.addEventListener('click', this.onToggle.bind(this)); this.onWindowClick = this.onWindowClick.bind(this); + this.onKeyDown = this.onKeyDown.bind(this); } onToggle(event) { this.open = !this.open; this.menu.classList.toggle('show', this.open); + this.toggleButton.setAttribute('aria-expanded', this.open ? 'true' : 'false'); if (this.open) { + this.elem.addEventListener('keydown', this.onKeyDown); window.addEventListener('click', this.onWindowClick) } else { + this.elem.removeEventListener('keydown', this.onKeyDown); window.removeEventListener('click', this.onWindowClick) } event.stopPropagation(); } + onKeyDown(event) { + if (event.code === 'Escape') { + this.onToggle(event); + } + } + onWindowClick(event) { this.onToggle(event); } } -module.exports = HeaderMobileToggle; \ No newline at end of file +export default HeaderMobileToggle; \ No newline at end of file