]> BookStack Code Mirror - bookstack/blobdiff - resources/js/components/header-mobile-toggle.js
Opensearch: Fixed XML declaration when php short tags enabled
[bookstack] / resources / js / components / header-mobile-toggle.js
index eccd4b8f0a6b25e722b1754cd6c611db1ed3ac64..f94f897f617e5cfae3b39ddb3aaf7db073426d56 100644 (file)
@@ -1,31 +1,40 @@
+import {Component} from './component';
 
-class HeaderMobileToggle {
+export class HeaderMobileToggle extends Component {
 
-    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) {
-            window.addEventListener('click', this.onWindowClick)
+            this.elem.addEventListener('keydown', this.onKeyDown);
+            window.addEventListener('click', this.onWindowClick);
         } else {
-            window.removeEventListener('click', this.onWindowClick)
+            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