Spaces:
Sleeping
Sleeping
| /** | |
| * @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); | |
| } | |
| }; | |
| } | |