From a2d9bc342c44fb38cba0044eb07e6b3a1bf050c8 Mon Sep 17 00:00:00 2001 From: Alex Tideman Date: Thu, 27 Apr 2023 16:00:49 -0500 Subject: [PATCH 1/3] Add async, hardcode prism filename --- src/global.d.ts | 6 +- src/lib/holocene/code-block.svelte | 7 +- src/lib/vendor/prism/prism.cjs | 151 +++++++++++++++-------------- 3 files changed, 87 insertions(+), 77 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index 1cf9b810b..521c826bb 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -6,6 +6,10 @@ declare module '@sveltejs/svelte-virtual-list'; interface Window { Prism: { highlightAll: () => void; - highlightElement: (element: Element) => void; + highlightElement: ( + element: Element, + async?: boolean, + highlightCallback?: () => void, + ) => void; }; } diff --git a/src/lib/holocene/code-block.svelte b/src/lib/holocene/code-block.svelte index e8e053619..c6f0955c6 100644 --- a/src/lib/holocene/code-block.svelte +++ b/src/lib/holocene/code-block.svelte @@ -10,6 +10,7 @@ export let inline = false; export let language = 'json'; export let copyable = true; + export let async = true; let root: HTMLElement; $: isJSON = language === 'json'; @@ -37,7 +38,11 @@ root.classList.add(`language-${language}`); } - window.Prism.highlightElement(root); + try { + window.Prism.highlightElement(root, async); + } catch (e) { + console.error('Could not find Prism file to highlight'); + } } $: { diff --git a/src/lib/vendor/prism/prism.cjs b/src/lib/vendor/prism/prism.cjs index e5ff04c0f..9f17b8e33 100644 --- a/src/lib/vendor/prism/prism.cjs +++ b/src/lib/vendor/prism/prism.cjs @@ -3,10 +3,10 @@ /* PrismJS 1.25.0 https://prismjs.com/download.html#themes=prism-tomorrow&languages=json */ var _self = - 'undefined' != typeof window - ? window - : 'undefined' != typeof WorkerGlobalScope && - self instanceof WorkerGlobalScope + 'undefined' != typeof window + ? window + : 'undefined' != typeof WorkerGlobalScope && + self instanceof WorkerGlobalScope ? self : {}, Prism = (function (u) { @@ -22,8 +22,8 @@ var _self = return n instanceof W ? new W(n.type, e(n.content), n.alias) : Array.isArray(n) - ? n.map(e) - : n + ? n.map(e) + : n .replace(/&/g, '&') .replace(/' + - a.content + - '' - ); - }), - !u.document) + i = e.alias; + i && + (Array.isArray(i) + ? Array.prototype.push.apply(a.classes, i) + : a.classes.push(i)), + M.hooks.run('wrap', a); + var l = ''; + for (var o in a.attributes) + l += + ' ' + + o + + '="' + + (a.attributes[o] || '').replace(/"/g, '"') + + '"'; + return ( + '<' + + a.tag + + ' class="' + + a.classes.join(' ') + + '"' + + l + + '>' + + a.content + + '' + ); + }), + !u.document) ) return ( u.addEventListener && - (M.disableWorkerMessageHandler || - u.addEventListener( - 'message', - function (e) { - var n = JSON.parse(e.data), - t = n.language, - r = n.code, - a = n.immediateClose; - u.postMessage(M.highlight(r, M.languages[t], t)), - a && u.close(); - }, - !1, - )), + (M.disableWorkerMessageHandler || + u.addEventListener( + 'message', + function (e) { + var n = JSON.parse(e.data), + t = n.language, + r = n.code, + a = n.immediateClose; + u.postMessage(M.highlight(r, M.languages[t], t)), + a && u.close(); + }, + !1, + )), M ); var t = M.util.currentScript(); @@ -408,15 +409,15 @@ var _self = if ( (t && ((M.filename = t.src), - t.hasAttribute('data-manual') && (M.manual = !0)), - !M.manual) + t.hasAttribute('data-manual') && (M.manual = !0)), + !M.manual) ) { var a = document.readyState; 'loading' === a || ('interactive' === a && t && t.defer) ? document.addEventListener('DOMContentLoaded', r) : window.requestAnimationFrame - ? window.requestAnimationFrame(r) - : window.setTimeout(r, 16); + ? window.requestAnimationFrame(r) + : window.setTimeout(r, 16); } return M; })(_self); From 41d00b31b047fca80fa91ef5c6fda633d1259e2e Mon Sep 17 00:00:00 2001 From: Alex Tideman Date: Fri, 28 Apr 2023 14:37:49 -0500 Subject: [PATCH 2/3] Hardcode filename for prism : --- src/lib/vendor/prism/prism.cjs | 152 +++++++++++++++++---------------- 1 file changed, 77 insertions(+), 75 deletions(-) diff --git a/src/lib/vendor/prism/prism.cjs b/src/lib/vendor/prism/prism.cjs index 9f17b8e33..d092552d4 100644 --- a/src/lib/vendor/prism/prism.cjs +++ b/src/lib/vendor/prism/prism.cjs @@ -3,10 +3,10 @@ /* PrismJS 1.25.0 https://prismjs.com/download.html#themes=prism-tomorrow&languages=json */ var _self = - 'undefined' != typeof window - ? window - : 'undefined' != typeof WorkerGlobalScope && - self instanceof WorkerGlobalScope + 'undefined' != typeof window + ? window + : 'undefined' != typeof WorkerGlobalScope && + self instanceof WorkerGlobalScope ? self : {}, Prism = (function (u) { @@ -22,8 +22,8 @@ var _self = return n instanceof W ? new W(n.type, e(n.content), n.alias) : Array.isArray(n) - ? n.map(e) - : n + ? n.map(e) + : n .replace(/&/g, '&') .replace(/' + - a.content + - '' - ); - }), - !u.document) + i = e.alias; + i && + (Array.isArray(i) + ? Array.prototype.push.apply(a.classes, i) + : a.classes.push(i)), + M.hooks.run('wrap', a); + var l = ''; + for (var o in a.attributes) + l += + ' ' + + o + + '="' + + (a.attributes[o] || '').replace(/"/g, '"') + + '"'; + return ( + '<' + + a.tag + + ' class="' + + a.classes.join(' ') + + '"' + + l + + '>' + + a.content + + '' + ); + }), + !u.document) ) return ( u.addEventListener && - (M.disableWorkerMessageHandler || - u.addEventListener( - 'message', - function (e) { - var n = JSON.parse(e.data), - t = n.language, - r = n.code, - a = n.immediateClose; - u.postMessage(M.highlight(r, M.languages[t], t)), - a && u.close(); - }, - !1, - )), + (M.disableWorkerMessageHandler || + u.addEventListener( + 'message', + function (e) { + var n = JSON.parse(e.data), + t = n.language, + r = n.code, + a = n.immediateClose; + u.postMessage(M.highlight(r, M.languages[t], t)), + a && u.close(); + }, + !1, + )), M ); var t = M.util.currentScript(); @@ -409,15 +411,15 @@ var _self = if ( (t && ((M.filename = t.src), - t.hasAttribute('data-manual') && (M.manual = !0)), - !M.manual) + t.hasAttribute('data-manual') && (M.manual = !0)), + !M.manual) ) { var a = document.readyState; 'loading' === a || ('interactive' === a && t && t.defer) ? document.addEventListener('DOMContentLoaded', r) : window.requestAnimationFrame - ? window.requestAnimationFrame(r) - : window.setTimeout(r, 16); + ? window.requestAnimationFrame(r) + : window.setTimeout(r, 16); } return M; })(_self); From 8dd478ed85cba1ed71899d3e1ecf7eac69666b94 Mon Sep 17 00:00:00 2001 From: Alex Tideman Date: Mon, 1 May 2023 09:24:06 -0500 Subject: [PATCH 3/3] Onerror of web worker, highlight non-async --- src/lib/holocene/code-block.svelte | 6 +----- src/lib/vendor/prism/prism.cjs | 5 +++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/lib/holocene/code-block.svelte b/src/lib/holocene/code-block.svelte index c6f0955c6..dc71eac1e 100644 --- a/src/lib/holocene/code-block.svelte +++ b/src/lib/holocene/code-block.svelte @@ -38,11 +38,7 @@ root.classList.add(`language-${language}`); } - try { - window.Prism.highlightElement(root, async); - } catch (e) { - console.error('Could not find Prism file to highlight'); - } + window.Prism.highlightElement(root, async); } $: { diff --git a/src/lib/vendor/prism/prism.cjs b/src/lib/vendor/prism/prism.cjs index d092552d4..16c15c9f2 100644 --- a/src/lib/vendor/prism/prism.cjs +++ b/src/lib/vendor/prism/prism.cjs @@ -188,6 +188,11 @@ var _self = M.filename ?? `${window.location.origin}/src/lib/vendor/prism/prism.cjs`; var s = new Worker(filename); + + s.onerror = function () { + o(M.highlight(l.code, l.grammar, l.language)); + }; + (s.onmessage = function (e) { o(e.data); }),