diff options
Diffstat (limited to 'src/utils/modify-dom.ts')
| -rw-r--r-- | src/utils/modify-dom.ts | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/src/utils/modify-dom.ts b/src/utils/modify-dom.ts index da0944b..f08f7d9 100644 --- a/src/utils/modify-dom.ts +++ b/src/utils/modify-dom.ts @@ -1,41 +1,35 @@ import { observeDOM } from "@/utils/observe-dom"; -type Replacements = { - [key: string]: string | null +type DOMReplacements = { + innerHTML?: string; + [key: string]: string | undefined | null; }; -export class DOMModifier { - selector: string; - attributes: Replacements; - constructor(selector: string, attributes: Replacements) { - this.selector = selector; - this.attributes = attributes; - } -} +type DOMModificaitonRule = readonly [string, DOMReplacements]; -export const modifyDOM = (elements: (DOMModifier | null)[]) => { +export const modifyDOM = (modificationRules: (DOMModificaitonRule | null)[]) => { let count = 0; observeDOM(() => { - for (let i = 0; i < elements.length; i++) { - if (elements[i]) { - const element = document.querySelector(elements[i]!.selector) as HTMLElement | null; + for (let i = 0; i < modificationRules.length; i++) { + if (modificationRules[i]) { + const element = document.querySelector(modificationRules[i]![0]) as HTMLElement | null; if (element) { - const attributes = elements[i]!.attributes as any; + const attributes = modificationRules[i]![1] as DOMReplacements; if (attributes.innerHTML) { - element.innerHTML = attributes.innerHTML; + element.innerHTML = attributes.innerHTML as string; } delete attributes.innerHTML; for (const attribute in attributes) { if (attributes[attribute] === null) { element.removeAttribute(attribute); } else { - element.setAttribute(attribute, attributes[attribute]); + element.setAttribute(attribute, attributes[attribute] as string); } } - elements[i] = null; + modificationRules[i] = null; count++; - if (count >= elements.length) { + if (count >= modificationRules.length) { return true; } } |
