- Created a new devcontainer.json file for an Alpine-based development environment. - Added a Dependabot configuration file to automate dependency updates for devcontainers.
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
// style controllers
|
|
|
|
const controllerStyle = (accordionController, isActive) => {
|
|
const rotateAbleLine = accordionController.querySelectorAll("span")[1];
|
|
|
|
if (rotateAbleLine) {
|
|
rotateAbleLine.style.transform = !isActive
|
|
? "rotate(0deg)"
|
|
: "rotate(90deg)";
|
|
}
|
|
};
|
|
|
|
// accordion hide and show
|
|
const toggleAccordion = (accordion, isActive, currentIndex, index) => {
|
|
const parentContent = accordion.closest(".accordion-content");
|
|
const content = accordion.querySelector(".accordion-content");
|
|
const contentWrapper = accordion.querySelector(".content-wrapper");
|
|
const contentHeight = contentWrapper.offsetHeight;
|
|
|
|
let contenStyleHeight = content.style.height;
|
|
if (contenStyleHeight === "auto") {
|
|
content.style.height = `${contentHeight}px`;
|
|
}
|
|
|
|
setTimeout(() => {
|
|
content.style.height = !isActive ? `${contentHeight}px` : 0;
|
|
}, 1);
|
|
if (!isActive) {
|
|
setTimeout(() => {
|
|
if (!parentContent) {
|
|
content.style.height = `auto`;
|
|
}
|
|
}, 500);
|
|
}
|
|
};
|
|
|
|
// get accordion controller and listen click event
|
|
const accordionController = (accordionContainer) => {
|
|
const groupOfAccordion = accordionContainer.querySelectorAll(".accordion");
|
|
|
|
groupOfAccordion.forEach((accordion, idx) => {
|
|
const accordionController = accordion.querySelector(
|
|
".accordion-controller"
|
|
);
|
|
const isInitialyActive = accordion.classList.contains("active");
|
|
|
|
if (isInitialyActive) {
|
|
const contents = accordion.querySelector(".accordion-content");
|
|
const contentHeight = contents.children[0].offsetHeight;
|
|
if (contentHeight) {
|
|
contents.style.height = `${contentHeight}px`;
|
|
}
|
|
}
|
|
|
|
if (accordionController) {
|
|
accordionController.addEventListener("click", function () {
|
|
const currentAccordion = this.closest(".accordion");
|
|
|
|
const isActive = currentAccordion.classList.contains("active");
|
|
let waitForDblClick = setTimeout(() => {
|
|
groupOfAccordion.forEach((accordion, idx1) => {
|
|
const isAccordionController = accordion.querySelector(
|
|
".accordion-controller"
|
|
);
|
|
|
|
if (isAccordionController) {
|
|
accordion.classList.remove("active");
|
|
const accordionController = accordion.querySelector(
|
|
".accordion-controller"
|
|
);
|
|
controllerStyle(accordionController, true);
|
|
toggleAccordion(accordion, true, idx, idx1);
|
|
}
|
|
});
|
|
if (!isActive) {
|
|
currentAccordion.classList.add("active");
|
|
controllerStyle(accordionController, false);
|
|
toggleAccordion(currentAccordion, false);
|
|
}
|
|
}, 10);
|
|
accordionController.addEventListener("dblclick", function () {
|
|
clearTimeout(waitForDblClick);
|
|
});
|
|
});
|
|
}
|
|
});
|
|
};
|
|
const accordions = () => {
|
|
const accordionContainers = document.querySelectorAll(".accordion-container");
|
|
|
|
if (!accordionContainers.length) {
|
|
return;
|
|
}
|
|
accordionContainers.forEach((accordionContainer) => {
|
|
accordionController(accordionContainer);
|
|
});
|
|
};
|