in authorization/authorization_code_pkce/public/app.js [158:187]
function renderTemplate(targetId, templateId, data = null) {
const template = document.getElementById(templateId);
const clone = template.content.cloneNode(true);
const elements = clone.querySelectorAll("*");
elements.forEach(ele => {
const bindingAttrs = [...ele.attributes].filter(a => a.name.startsWith("data-bind"));
bindingAttrs.forEach(attr => {
const target = attr.name.replace(/data-bind-/, "").replace(/data-bind/, "");
const targetType = target.startsWith("onclick") ? "HANDLER" : "PROPERTY";
const targetProp = target === "" ? "innerHTML" : target;
const prefix = targetType === "PROPERTY" ? "data." : "";
const expression = prefix + attr.value.replace(/;\n\r\n/g, "");
// Maybe use a framework with more validation here ;)
try {
ele[targetProp] = targetType === "PROPERTY" ? eval(expression) : () => { eval(expression) };
ele.removeAttribute(attr.name);
} catch (ex) {
console.error(`Error binding ${expression} to ${targetProp}`, ex);
}
});
});
const target = document.getElementById(targetId);
target.innerHTML = "";
target.appendChild(clone);
}