aboutsummaryrefslogtreecommitdiff
path: root/page.js
diff options
context:
space:
mode:
authorRadu <radu@pml4t.net>2023-11-24 16:52:57 -0500
committerRadu <radu@pml4t.net>2023-11-24 22:17:59 -0500
commit290f849c64c9f198f09b592daa48ecdae957375f (patch)
treefab417d5837cde3cd9b4db54dd61d59ca098a69d /page.js
parentef17d1d29212f5dc0218bfca1c30709e5a35f7b2 (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.js98
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,
- });
-}