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