@roots/bud-client
Version:
Client scripts for @roots/bud
34 lines (31 loc) • 1.13 kB
text/typescript
type Target = HTMLAnchorElement | HTMLFormElement | HTMLLinkElement
type ElementTuple = [HTMLCollectionOf<Target>, any]
const intercept = (...args: [string, string]) => {
args.every(arg => typeof arg === `string`) &&
setInterval(
() =>
[
[document.getElementsByTagName(`a`), `href`],
[document.getElementsByTagName(`link`), `href`],
]
.map(
([elements, attribute]: ElementTuple): [
Array<Target>,
any,
] => [Array.from(elements), attribute],
)
.forEach(([elements, attribute]: [Array<Target>, any]) =>
elements
.filter(el => el.hasAttribute(attribute))
.filter(el => !el.hasAttribute(`__bud_processed`))
.filter(el => el.getAttribute(attribute).startsWith(args[0]))
.map(el => {
const value = el.getAttribute(attribute).replace(...args)
el.setAttribute(attribute, value)
el.toggleAttribute(`__bud_processed`)
}),
),
1000,
)
}
export default intercept