+/**
+ * Dropdown
+ * Provides some simple logic to create simple dropdown menus.
+ */
+class DropDown {
+
+ constructor(elem) {
+ this.container = elem;
+ this.menu = elem.querySelector('ul');
+ this.toggle = elem.querySelector('[dropdown-toggle]');
+ this.setupListeners();
+ }
+
+ show() {
+ this.menu.style.display = 'block';
+ this.menu.classList.add('anim', 'menuIn');
+ this.container.addEventListener('mouseleave', this.hide.bind(this));
+
+ // Focus on first input if existing
+ let input = this.menu.querySelector('input');
+ if (input !== null) input.focus();
+ }
+
+ hide() {
+ this.menu.style.display = 'none';
+ this.menu.classList.remove('anim', 'menuIn');
+ }
+
+ setupListeners() {
+ // Hide menu on option click
+ this.container.addEventListener('click', event => {
+ let possibleChildren = Array.from(this.menu.querySelectorAll('a'));
+ if (possibleChildren.indexOf(event.target) !== -1) this.hide();
+ });
+ // Show dropdown on toggle click
+ this.toggle.addEventListener('click', this.show.bind(this));
+ // Hide menu on enter press
+ this.container.addEventListener('keypress', event => {
+ if (event.keyCode !== 13) return true;
+ event.preventDefault();
+ this.hide();
+ return false;
+ });
+ }
+
+}
+
+module.exports = DropDown;
\ No newline at end of file