mirror of
https://github.com/arfct/itty-bitty.git
synced 2026-03-11 08:54:33 +00:00
52 lines
No EOL
1.7 KiB
JavaScript
52 lines
No EOL
1.7 KiB
JavaScript
window.el = function (tagName, attrs, ...children) {
|
|
let l = document.createElement(tagName);
|
|
Object.entries(attrs).forEach(([k,v]) => l[k] = v);
|
|
children.forEach((c) => l.appendChild(typeof c == "string" ? document.createTextNode(c) : c));
|
|
return l;
|
|
}
|
|
|
|
function loadScript(src, callback) {
|
|
let script = el("script", { src });
|
|
script.addEventListener('load', function(e) {
|
|
console.debug("Loaded script", src);
|
|
if (callback) callback(e);
|
|
});
|
|
document.head.appendChild(script);
|
|
}
|
|
|
|
function async(u, c) {
|
|
var d = document, t = 'script',
|
|
o = d.createElement(t),
|
|
s = d.getElementsByTagName(t)[0];
|
|
o.src = '//' + u;
|
|
if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
|
|
s.parentNode.insertBefore(o, s);
|
|
}
|
|
|
|
function loadSyle(href, callback) {
|
|
let promise = new Promise((resolve, reject) => {
|
|
document.head.appendChild(el("link", { type: "text/css", rel: "stylesheet", href, onload:resolve}));
|
|
})
|
|
return callback ? promise.then(callback) : promise;
|
|
}
|
|
|
|
|
|
function renderScriptContent(data, origin) {
|
|
var base = el('base', {href: data});
|
|
document.head.appendChild(base);
|
|
window.params = data;
|
|
window.params.origin = origin;
|
|
console.log("Rendering with", data.script, data)
|
|
loadScript(data.script);
|
|
}
|
|
|
|
window.addEventListener("message", function(e) {
|
|
renderScriptContent(e.data, e.origin);
|
|
}, false);
|
|
|
|
function QRCodeURL(url, options) {
|
|
let size = options?.size ?? 547;
|
|
let errorCorrection = options?.correction ?? 'L';
|
|
let margin = options?.margin?.toString() || "1";
|
|
return `https://chart.googleapis.com/chart?cht=qr&chs=${size}x${size}&chld=${errorCorrection}|${margin}&choe=UTF-8&chl=${encodeURIComponent(url || location.href)}`;
|
|
} |