Files
lnreader-plugins/test_web/static/js/accordion.js
T
nyagami 5f9a067ab9 Prettier (#852)
* add prettier

* lint-staged

* prettier

* upgrade husky
2024-03-23 22:00:29 +07:00

92 lines
2.0 KiB
JavaScript

/** @ts-check */
class AccordionContent extends HTMLElement {
constructor() {
super();
this.gridElement = document.createElement('div');
}
get content() {
return this.gridElement;
}
connectedCallback() {
// create a div that'll animate the collapsing
this.gridElement.append(...Array.from(this.childNodes));
this.gridElement.classList.add('accordion-animation-content');
this.innerHTML = '';
this.append(this.gridElement);
}
}
class AccordionHeader extends HTMLElement {
constructor() {
super();
console.log('contructor?');
this.btn = document.createElement('button');
}
get html() {
return this.btn.innerHTML;
}
set html(val) {
this.btn.innerHTML = val;
}
get text() {
return this.btn.innerText;
}
set text(val) {
this.btn.innerText = val;
}
get parentBox() {
return this.parentElement;
}
connectedCallback() {
const childNodes = Array.from(this.childNodes);
this.innerHTML = '';
this.btn.append(...childNodes);
this.append(this.btn);
this.btn.addEventListener('click', this._btnClicked.bind(this));
}
_btnClicked() {
this.parentBox?.toggle();
}
}
class AccordionBox extends HTMLElement {
constructor() {
super();
}
get collapsed() {
return this.hasAttribute('collapsed');
}
set collapsed(val) {
if (val) {
this.setAttribute('collapsed', '');
} else {
this.removeAttribute('collapsed');
}
}
toggle() {
this.collapsed = !this.collapsed;
}
}
class Accordion extends HTMLElement {
constructor() {
super();
}
}
window.customElements.define('main-accordion', Accordion);
window.customElements.define('accordion-box', AccordionBox);
window.customElements.define('accordion-header', AccordionHeader);
window.customElements.define('accordion-content', AccordionContent);
// Export types for use in index.js
const module = {};
module.exports = {
AccordionBox,
Accordion,
AccordionContent,
AccordionHeader,
};