From ff78d55b8e958b3372c0545a9c965115e6271779 Mon Sep 17 00:00:00 2001 From: evilchili Date: Thu, 25 Dec 2025 12:09:32 -0800 Subject: [PATCH] add functioning TOC links --- src/ttfrog/themes/default/base.html | 4 +- src/ttfrog/themes/default/page.html | 2 +- src/ttfrog/themes/default/static/froghat.css | 53 ++++++++++++-------- src/ttfrog/themes/default/static/froghat.js | 27 +++++++--- 4 files changed, 54 insertions(+), 32 deletions(-) diff --git a/src/ttfrog/themes/default/base.html b/src/ttfrog/themes/default/base.html index c275b00..68d59fc 100644 --- a/src/ttfrog/themes/default/base.html +++ b/src/ttfrog/themes/default/base.html @@ -22,9 +22,9 @@
{% for message in g.messages %} -
+ {{ message }} -
+ {% endfor %} {% block content %}{% endblock %}
diff --git a/src/ttfrog/themes/default/page.html b/src/ttfrog/themes/default/page.html index 83126a3..08e0f73 100644 --- a/src/ttfrog/themes/default/page.html +++ b/src/ttfrog/themes/default/page.html @@ -4,7 +4,7 @@ {% endblock %} {% block content %} -
{{ page.body }}
+
{{ page.body }}
{% endblock %} diff --git a/src/ttfrog/themes/default/static/froghat.css b/src/ttfrog/themes/default/static/froghat.css index da9a44a..1ce75cc 100644 --- a/src/ttfrog/themes/default/static/froghat.css +++ b/src/ttfrog/themes/default/static/froghat.css @@ -279,7 +279,7 @@ div.macro { display: inline; } -div[data-macro-name="toc"] { +[data-macro-name="toc"] { display: inline; float: left; border-radius: 5px; @@ -290,43 +290,52 @@ div[data-macro-name="toc"] { padding: 0ch 2ch; } -div[data-macro-name="toc"] ul { +[data-macro-name="toc"] ul { box-sizing: border-box; list-style: none; - padding-left: 2ch; + padding-left: 0ch; font-weight: normal; margin-left: 0px; } -div[data-macro-name="toc"] > ul:first-child { - padding-left: 0ch; - margin-left: 0px; -} -div[data-macro-name="toc"] > ul:first-child > li { - padding-left: 0ch; - margin-left: 0px; -} -div[data-macro-name="toc"] > ul:first-child > li { - font-weight: bold; -} - -div[data-macro-name="toc"] > ul > li { - font-weight: bold; -} - -div[data-macro-name="toc"] > ul > li { +[data-macro-name="toc"] ul ul { padding-left: 2ch; } -div[data-macro-name="toc"] a { +[data-macro-name="toc"] > ul:first-child { + padding-left: 0ch; + margin-left: 0px; +} +[data-macro-name="toc"] > ul:first-child > li { + padding-left: 0ch; + margin-left: 0px; +} +[data-macro-name="toc"] > ul:first-child > li { + font-weight: bold; +} + +[data-macro-name="toc"] > ul > li { + font-weight: bold; +} + +[data-macro-name="toc"] > ul > li { + padding-left: 0ch; +} + +[data-macro-name="toc"] a { display: block; width: 100%; } -div[data-macro-name="toc"] a:hover { +[data-macro-name="toc"] a:hover { background: #CCC; } +[data-macro-name="toc"] .header { + font-size: var(--default-font-size); + width: fit-content; + margin: 2ch auto 0 auto; +} #froghat { display: none; diff --git a/src/ttfrog/themes/default/static/froghat.js b/src/ttfrog/themes/default/static/froghat.js index 1ff787f..9487020 100644 --- a/src/ttfrog/themes/default/static/froghat.js +++ b/src/ttfrog/themes/default/static/froghat.js @@ -243,9 +243,6 @@ class MacroPlugin extends FroghatPlugin { macros = { // image: {} - // toc {} - // widget {} - // style: { inline: false, toHTML: (token, node) => { @@ -272,9 +269,9 @@ class MacroPlugin extends FroghatPlugin { }, toc: { inline: true, - element: 'div', + element: 'aside', toHTML: (token, node) => { - return node + "
"; + return node + ""; }, postprocess: (html) => { const subList = (depth) => { @@ -284,9 +281,10 @@ class MacroPlugin extends FroghatPlugin { return li; }; + var tocIndex = 0; + const buf = document.createElement('div'); buf.innerHTML = html; - const tocElement = buf.querySelectorAll('[data-macro-name="toc"]').forEach(tocElement => { var params = { @@ -296,6 +294,11 @@ class MacroPlugin extends FroghatPlugin { const headings = buf.querySelectorAll("h2, h3, h4, h5, h6"); + var header = document.createElement("h2"); + header.className = 'header'; + header.textContent = 'Table of Contents'; + tocElement.prepend(header); + const toc = document.createElement("ul"); toc.setAttribute('role', 'list'); @@ -311,7 +314,8 @@ class MacroPlugin extends FroghatPlugin { } var index = document.createElement("li"); - index.innerHTML = '' + heading.innerHTML + ""; + var ref = camelCase(heading.textContent).join(""); + index.innerHTML = `${heading.textContent}`; var list = null; if (depth > lastDepth) { @@ -441,6 +445,15 @@ class MacroPlugin extends FroghatPlugin { const plugin = this; this.editor.marked.use({ + extensions: [ + { + name: 'heading', + renderer(token) { + var ref = camelCase(token.text).join(""); + return `${token.text}`; + } + }, + ], hooks: { preprocess: (source) => { const matched = source.matchAll(plugin.multilinePattern);