diff options
author | Radu <radu@pml4t.net> | 2023-11-24 16:52:57 -0500 |
---|---|---|
committer | Radu <radu@pml4t.net> | 2023-11-24 22:17:59 -0500 |
commit | 290f849c64c9f198f09b592daa48ecdae957375f (patch) | |
tree | fab417d5837cde3cd9b4db54dd61d59ca098a69d /page.js | |
parent | ef17d1d29212f5dc0218bfca1c30709e5a35f7b2 (diff) |
Support GFM using `remarked` and fix some bugs
- This avoids edge cases in the primitive parser I wrote.
- Add KaTeX stylesheet (cause of rendering issues, not Pronto).
- Bundle with Webpack.
Diffstat (limited to 'page.js')
-rw-r--r-- | page.js | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/page.js b/page.js deleted file mode 100644 index 404a0da..0000000 --- a/page.js +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only - -"use strict"; - -console.log("ASAP: Loaded"); - -const msgListCb = new MutationObserver(handleMsgList); -msgListCb.observe(document.body, { - childList: true, - subtree: true, -}); -handleMsgList(); - -function handleMsgList() { - const list = document.querySelector(".message-list"); - if (list) { - console.log("ASAP: Found message list"); - msgListCb.disconnect(); - const msgCb = new MutationObserver(handleMsg); - msgCb.observe(list, { childList: true, subtree: true }); - handleMsg(); - } -} - -function handleMsg() { - const texts = document.querySelectorAll(".message-parts-container:not(.zbyffrly-done), .parent-text:not(.zbyffrly-done)") - texts.forEach((text) => { - text.classList.add("zbyffrly-done"); - - // Split up between text and code bits - const blockBits = text.firstChild.textContent.split(/(?:^|\n)```/); - const msgOut = document.createElement("div"); - for (let i = 0; i < blockBits.length; i++) { - let block = blockBits[i]; - if (i & 1) { - const newlineIdx = block.indexOf("\n"); - const lang = block.slice(0, newlineIdx); - const code = block.slice(newlineIdx + 1); - - const preEl = document.createElement("pre"); - preEl.classList.add("code-block"); - const codeEl = document.createElement("code"); - if (lang) codeEl.classList.add("language-" + lang); - codeEl.appendChild(document.createTextNode(code)); - hljs.highlightElement(codeEl); - preEl.appendChild(codeEl); - - msgOut.appendChild(preEl); - } else { - block = block[0] == "\n" ? block.slice(1) : block; - const inlineBits = block.split("`"); - for (let i = 0; i < inlineBits.length; i++) { - let inlineEl; - if (i & 1) { - inlineEl = document.createElement("code"); - inlineEl.innerText = inlineBits[i]; - if (inlineBits[i + 1]?.startsWith("{:.")) { - const closingBrace = inlineBits[i + 1].indexOf("}"); - if (closingBrace !== -1) { - const lang = inlineBits[i + 1].slice(3, closingBrace); - inlineBits[i + 1] = inlineBits[i + 1].slice(closingBrace + 1); - inlineEl.classList.add("language-" + lang); - } - } - hljs.highlightElement(inlineEl); - } else { - if (inlineBits[i] === "\xa0") continue; - inlineEl = document.createElement("span"); - inlineEl.innerText = inlineBits[i]; - renderTex(inlineEl); - } - msgOut.appendChild(inlineEl); - } - } - } - - if (msgOut.children.length > 1) text.replaceChild(msgOut, text.firstChild); - else renderTex(text); - }); -} - -function renderTex(el) { - renderMathInElement(el, { - output: "mathml", // HTML output is broken in Pronto - delimiters: [ - { left: "$$", right: "$$", display: true }, - { left: "$", right: "$", display: false }, - { left: "\\(", right: "\\)", display: false }, - { left: "\\begin{equation}", right: "\\end{equation}", display: true }, - { left: "\\begin{align}", right: "\\end{align}", display: true }, - { left: "\\begin{alignat}", right: "\\end{alignat}", display: true }, - { left: "\\begin{gather}", right: "\\end{gather}", display: true }, - { left: "\\begin{CD}", right: "\\end{CD}", display: true }, - { left: "\\[", right: "\\]", display: true } - ], - throwOnError: false, - }); -} |