37 lines
795 B
JavaScript
37 lines
795 B
JavaScript
|
/**
|
||
|
* Collapsible
|
||
|
* Provides some simple logic to allow collapsible sections.
|
||
|
*/
|
||
|
class Collapsible {
|
||
|
|
||
|
constructor(elem) {
|
||
|
this.elem = elem;
|
||
|
this.trigger = elem.querySelector('[collapsible-trigger]');
|
||
|
this.content = elem.querySelector('[collapsible-content]');
|
||
|
|
||
|
if (!this.trigger) return;
|
||
|
|
||
|
this.trigger.addEventListener('click', this.toggle.bind(this));
|
||
|
}
|
||
|
|
||
|
open() {
|
||
|
this.elem.classList.add('open');
|
||
|
$(this.content).slideDown(400);
|
||
|
}
|
||
|
|
||
|
close() {
|
||
|
this.elem.classList.remove('open');
|
||
|
$(this.content).slideUp(400);
|
||
|
}
|
||
|
|
||
|
toggle() {
|
||
|
if (this.elem.classList.contains('open')) {
|
||
|
this.close();
|
||
|
} else {
|
||
|
this.open();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
module.exports = Collapsible;
|