-import {onSelect} from "../services/dom";
-import {KeyboardNavigationHandler} from "../services/keyboard-navigation";
+import {onSelect} from '../services/dom';
+import {KeyboardNavigationHandler} from '../services/keyboard-navigation';
+import {Component} from './component';
/**
* Dropdown
* Provides some simple logic to create simple dropdown menus.
- * @extends {Component}
*/
-class DropDown {
+export class Dropdown extends Component {
setup() {
this.container = this.$el;
this.menu.style.position = 'fixed';
this.menu.style.width = `${menuOriginalRect.width}px`;
this.menu.style.left = `${menuOriginalRect.left}px`;
- heightOffset = dropUpwards ? (window.innerHeight - menuOriginalRect.top - toggleHeight / 2) : menuOriginalRect.top;
+ if (dropUpwards) {
+ heightOffset = (window.innerHeight - menuOriginalRect.top - toggleHeight / 2);
+ } else {
+ heightOffset = menuOriginalRect.top;
+ }
}
// Adjust menu to display upwards if near the bottom of the screen
// Set listener to hide on mouse leave or window click
this.menu.addEventListener('mouseleave', this.hide);
- window.addEventListener('click', event => {
- if (!this.menu.contains(event.target)) {
+ window.addEventListener('click', clickEvent => {
+ if (!this.menu.contains(clickEvent.target)) {
this.hide();
}
});
}
hideAll() {
- for (let dropdown of window.components.dropdown) {
+ for (const dropdown of window.$components.get('dropdown')) {
dropdown.hide();
}
}
}
setupListeners() {
- const keyboardNavHandler = new KeyboardNavigationHandler(this.container, (event) => {
+ const keyboardNavHandler = new KeyboardNavigationHandler(this.container, event => {
this.hide();
this.toggle.focus();
if (!this.bubbleEscapes) {
event.stopPropagation();
}
- }, (event) => {
+ }, event => {
if (event.target.nodeName === 'INPUT') {
event.preventDefault();
event.stopPropagation();
// Hide menu on option click
this.container.addEventListener('click', event => {
- const possibleChildren = Array.from(this.menu.querySelectorAll('a'));
- if (possibleChildren.includes(event.target)) {
- this.hide();
- }
+ const possibleChildren = Array.from(this.menu.querySelectorAll('a'));
+ if (possibleChildren.includes(event.target)) {
+ this.hide();
+ }
});
onSelect(this.toggle, event => {
}
}
-
-export default DropDown;
\ No newline at end of file