mirror of
https://github.com/quartz-community/utils.git
synced 2026-07-22 02:50:27 +00:00
63 lines
1.7 KiB
JavaScript
63 lines
1.7 KiB
JavaScript
// src/dom.ts
|
|
function removeAllChildren(el) {
|
|
while (el.firstChild) {
|
|
el.removeChild(el.firstChild);
|
|
}
|
|
}
|
|
function registerEscapeHandler(outsideContainer, onEscape) {
|
|
if (!outsideContainer) return () => {};
|
|
const onClick = (e) => {
|
|
if (!outsideContainer.classList.contains("active")) {
|
|
return;
|
|
}
|
|
if (e.target === outsideContainer) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
onEscape();
|
|
}
|
|
};
|
|
const onKeydown = (e) => {
|
|
if (!outsideContainer.classList.contains("active")) {
|
|
return;
|
|
}
|
|
if (e.key === "Escape") {
|
|
e.preventDefault();
|
|
onEscape();
|
|
}
|
|
};
|
|
outsideContainer.addEventListener("click", onClick);
|
|
document.addEventListener("keydown", onKeydown);
|
|
return () => {
|
|
outsideContainer.removeEventListener("click", onClick);
|
|
document.removeEventListener("keydown", onKeydown);
|
|
};
|
|
}
|
|
function normalizeRelativeURLs(html, baseUrl) {
|
|
const elements = html.querySelectorAll("[src], [href]");
|
|
for (const el of Array.from(elements)) {
|
|
const attr = el.hasAttribute("href") ? "href" : "src";
|
|
const val = el.getAttribute(attr);
|
|
if (!val) continue;
|
|
if (
|
|
val.startsWith("http://") ||
|
|
val.startsWith("https://") ||
|
|
val.startsWith("mailto:") ||
|
|
val.startsWith("tel:") ||
|
|
val.startsWith("#") ||
|
|
val.startsWith("/") ||
|
|
val.startsWith("data:")
|
|
) {
|
|
continue;
|
|
}
|
|
try {
|
|
const normalized = new URL(val, baseUrl).toString();
|
|
el.setAttribute(attr, normalized);
|
|
} catch {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
export { normalizeRelativeURLs, registerEscapeHandler, removeAllChildren };
|
|
//# sourceMappingURL=dom.js.map
|
|
//# sourceMappingURL=dom.js.map
|