"use strict"; import init, { render_schem, tags } from "/masm.js"; // import init, { render_map } from "https://apricotalliance.org/masm.js"; let tasks = []; init().then(() => { window.init = true; tasks.forEach((t) => t()); tasks = []; }); const template = `
`; function b64(buf) { const a = new Uint8Array(buf); let b = ""; for (let i = 0; i < a.byteLength; i++) { b += String.fromCharCode(a[i]); } return btoa(b); } function vis(el) { var rect = el.getBoundingClientRect(); return ( rect.top >= -100 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) + 200 ); } async function build(schems) { let jobs = 0; for (const schem of schems) { document .getElementById("grid") .insertAdjacentHTML("beforeend", template.replaceAll("{ID}", schem)); let p = async function () { jobs += 1; let data = await (await fetch(`/schems/files/${schem}`)).arrayBuffer(); let tagz; if (window.init) { tagz = tags(data); document.getElementById(`${schem}-title`).innerText = tagz["name"]; } else tasks.push(() => { tagz = tags(data); document.getElementById(`${schem}-title`).innerText = tagz["name"]; }); let flag = 0; let pic = document.getElementById(`${schem}-picture`); let f = () => { setTimeout(() => { if (vis(pic) && flag == 0) { flag = 1; // SLOW (~10ms) if (window.init) pic.src = render_schem(data); else tasks.push(() => (pic.src = render_schem(data))); removeEventListener(pic, f); } }, 100); }; addEventListener("scroll", f, false); f(); let download = () => { Object.assign(document.createElement("a"), { href: `/schems/files/${schem}`, download: schem, }).click(); }; let copy = () => navigator.clipboard.writeText(b64(data)); document.getElementById(`${schem}-info`).onclick = () => { document.getElementById("modal").className = ""; document.getElementById("modal-name").innerText = tagz["name"]; document.getElementById("modal-desc").innerText = tagz["description"]; document.getElementById("modal-pic").src = pic.src; document.getElementById("modal-download").onclick = download; document.getElementById("modal-copy").onclick = copy; document.getElementById("body").className = "modal-open"; fetch(`/schems/blame/${schem}`).then((x) => x.text().then((x) => { if (x != "plent") document.getElementById("modal-author").innerText = x; }) ); }; document.getElementById(`${schem}-download`).onclick = download; document.getElementById(`${schem}-copy`).onclick = copy; jobs -= 1; }; if (jobs < 20) p(); else await p(); } } async function get() { return await (await fetch("/schems/files")).json(); } get().then(build);