Choices/src/scripts/components/dropdown.js

50 lines
1.1 KiB
JavaScript
Raw Normal View History

export default class Dropdown {
2018-05-21 18:01:03 +02:00
constructor({ element, type, classNames }) {
Object.assign(this, { element, type, classNames });
this.isActive = false;
}
2017-08-29 13:56:54 +02:00
/**
* Bottom position of dropdown in viewport coordinates
* @type {number} Vertical position
2017-08-29 13:56:54 +02:00
*/
get distanceFromTopWindow() {
return this.element.getBoundingClientRect().bottom;
}
2017-08-29 13:56:54 +02:00
/**
* Find element that matches passed selector
* @return {HTMLElement}
*/
getChild(selector) {
return this.element.querySelector(selector);
}
/**
* Show dropdown to user by adding active state class
* @return {Object} Class instance
* @public
*/
show() {
2017-08-16 14:01:17 +02:00
this.element.classList.add(this.classNames.activeState);
this.element.setAttribute('aria-expanded', 'true');
this.isActive = true;
2018-05-21 18:01:03 +02:00
return this;
}
/**
* Hide dropdown from user
* @return {Object} Class instance
* @public
*/
hide() {
2017-08-16 14:01:17 +02:00
this.element.classList.remove(this.classNames.activeState);
this.element.setAttribute('aria-expanded', 'false');
this.isActive = false;
2018-05-21 18:01:03 +02:00
return this;
}
}