57 lines
1.2 KiB
JavaScript
57 lines
1.2 KiB
JavaScript
/**
|
|
* @typedef { string | string[] | Record<string, boolean> } ClassList
|
|
*/
|
|
|
|
/**
|
|
* @param { HTMLElement } element
|
|
* @param { ClassList } classList
|
|
* @param { string[] } requiredClasses
|
|
*/
|
|
export function applyClasses(element, classList, ...requiredClasses) {
|
|
classList ??= "";
|
|
|
|
let str;
|
|
if (typeof classList === "string") {
|
|
str = classList;
|
|
} else if (classList instanceof Array) {
|
|
str = classList.join(" ");
|
|
} else {
|
|
str = Object.entries(classList).reduce((p, c) => {
|
|
if (c[1]) {
|
|
p += (p.length ? " " : "") + c[0];
|
|
}
|
|
return p;
|
|
}, "");
|
|
}
|
|
element.className = str;
|
|
if (requiredClasses) {
|
|
element.classList.add(...requiredClasses);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param { HTMLElement } element
|
|
* @param { { onHide?: (el: HTMLElement) => void, onShow?: (el: HTMLElement, value) => void } } [param1]
|
|
* @returns
|
|
*/
|
|
export function toggleElement(element, { onHide, onShow } = {}) {
|
|
let placeholder;
|
|
let hidden;
|
|
return (value) => {
|
|
if (value) {
|
|
if (hidden) {
|
|
hidden = false;
|
|
placeholder.replaceWith(element);
|
|
}
|
|
onShow?.(element, value);
|
|
} else {
|
|
if (!placeholder) {
|
|
placeholder = document.createComment("");
|
|
}
|
|
hidden = true;
|
|
element.replaceWith(placeholder);
|
|
onHide?.(element);
|
|
}
|
|
};
|
|
}
|