Add delegate recursion and reinscription UI
This commit is contained in:
1 parent
9f27897967
commit
5d1a1ae866
10 files changed
+327
-31
No files matched your search
@@ -0,0 +1 @@
|
||||
<!doctype html><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'nonce-local-ord-preview'; worker-src blob:; style-src 'unsafe-inline'; connect-src 'none'; img-src data:; form-action 'none'; base-uri 'none'"><div id="markup"></div><pre id="recursive-output"></pre><script nonce="local-ord-preview" src="/recursive-preview.js"></script>
|
||||
@@ -0,0 +1,16 @@
|
||||
// Trusted renderer only. Inscription JavaScript runs exclusively in the worker.
|
||||
addEventListener('message', function start(event) {
|
||||
if (event.source !== parent || event.data?.type !== 'local-ord' || !event.ports[0]) return;
|
||||
removeEventListener('message', start);
|
||||
const port = event.ports[0];
|
||||
document.getElementById('markup').innerHTML = event.data.markup;
|
||||
const url = URL.createObjectURL(new Blob([event.data.worker], { type: 'text/javascript' }));
|
||||
const worker = new Worker(url);
|
||||
worker.onmessage = ({ data }) => {
|
||||
if (data.type === 'render') document.getElementById('recursive-output').textContent = String(data.text).slice(0, 65536);
|
||||
else if (data.type === 'fetch') port.postMessage(data);
|
||||
};
|
||||
worker.onerror = () => { document.getElementById('recursive-output').textContent = 'Recursive script failed.'; };
|
||||
port.onmessage = ({ data }) => worker.postMessage(data);
|
||||
addEventListener('pagehide', () => { worker.terminate(); port.close(); URL.revokeObjectURL(url); }, { once: true });
|
||||
});
|
||||
Reference in new issue
Block a user