Current section
Files
Jump to
Current section
Files
priv/static/phoenix_live_head.esm.js
// js/phoenix_live_head/index.ts
window.addEventListener("phx:hd", (event) => {
const CLASS_ATTR = "class";
const ATTR = { "c": CLASS_ATTR, "h": "href" };
const QUERY = { "f": "link[rel*='icon']" };
function kebabToCamelCase(s) {
return s.replace(/-./g, (x) => x[1].toUpperCase());
}
function camelToKebabCase(s) {
return s.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
}
function origValueKey(attr) {
return kebabToCamelCase(`orig-${camelToKebabCase(attr)}`);
}
function isPreserved(el, attr) {
return el.dataset[origValueKey(attr)] !== void 0;
}
function preserveAttrValue(el, attr) {
const value = el.getAttribute(kebabToCamelCase(attr));
if (value == null) {
el.dataset[origValueKey(attr)] = void 0;
} else {
el.dataset[origValueKey(attr)] = value;
}
}
function restoreAttrValue(el, attr) {
const value = el.dataset[origValueKey(attr)];
if (value !== void 0) {
attr === CLASS_ATTR ? el.className = value : el.setAttribute(attr, value);
} else {
throw "Could not restore value: value undefined";
}
}
function setDynamicAttribute(el, attr, value) {
var _a;
const dynAttr = kebabToCamelCase(`dynamic-${attr}`);
const dynParts = (_a = el.dataset[dynAttr]) == null ? void 0 : _a.split("{dynamic}", 2);
if (!dynParts) {
throw "No dynamic scheme set";
}
if (dynParts.length == 1) {
const [prefix] = dynParts;
el.setAttribute(attr, `${prefix}${value}`);
} else if (dynParts.length === 2) {
const [prefix, suffix] = dynParts;
el.setAttribute(attr, `${prefix}${value}${suffix}`);
}
}
function resetElement(el) {
Object.keys(el.dataset).filter((k) => k.includes("orig")).forEach((k) => {
const attr = camelToKebabCase(k).replace("orig-", "");
restoreAttrValue(el, attr);
});
}
function applyToElement(el, changes) {
changes.forEach(function(change) {
const [action, attr_input, value] = change;
if (action === "i" && typeof attr_input === "undefined") {
resetElement(el);
return;
}
const attr = ATTR[attr_input] || attr_input;
if (!isPreserved(el, attr)) {
preserveAttrValue(el, attr);
}
if (attr === CLASS_ATTR) {
switch (action) {
case "s":
el.className = value;
break;
case "a":
el.classList.add(value);
break;
case "r":
el.classList.remove(value);
break;
case "t":
el.classList.toggle(value);
break;
case "i":
restoreAttrValue(el, attr);
break;
default:
null;
}
} else {
switch (action) {
case "s":
el.setAttribute(attr, value);
break;
case "r":
el.removeAttribute(attr);
break;
case "i":
restoreAttrValue(el, attr);
break;
case "d":
setDynamicAttribute(el, attr, value);
break;
default:
null;
}
}
});
}
;
function main(event2) {
const detail = event2.detail;
for (const [query_input, changes] of Object.entries(detail)) {
const query = QUERY[query_input] || query_input;
const elements = document.querySelectorAll(query);
elements.forEach((el) => {
changes === "i" ? resetElement(el) : applyToElement(el, changes);
});
}
}
main(event);
});
//# sourceMappingURL=phoenix_live_head.esm.js.map