bc17c5f576
* neobook * add qs * fix * / * fix * expandURL -> resolveUrl * fix Agitoon * Update ranobelib.ts --------- Co-authored-by: nyagami <hoangquan05112002@gmail.com>
92 lines
2.2 KiB
JavaScript
92 lines
2.2 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,
|
|
};
|