thefoldwithin-earth/public/app.js

38 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-11-08 11:29:40 -06:00
let INDEX, CURRENT_PATH = null, PATH_TO_EL = new Map();
const treeEl = document.getElementById("tree");
const mdView = document.getElementById("mdView");
const htmlView = document.getElementById("htmlView");
const metaLine = document.getElementById("meta");
const sortSel = document.getElementById("sort");
const filterSel = document.getElementById("filter");
const searchBox = document.getElementById("search");
const prevBtn = document.getElementById("prev");
const nextBtn = document.getElementById("next");
2025-11-08 11:57:17 -06:00
const sidebar = document.querySelector(".sidebar");
2025-11-08 12:10:39 -06:00
const navToggle = document.getElementById("navToggle");
const overlay = document.querySelector(".overlay");
navToggle.addEventListener("click", () => sidebar.classList.toggle("open"));
overlay.addEventListener("click", () => sidebar.classList.remove("open"));
// ... (rest same as v2.2.1 up to renderMarkdown)
2025-11-08 11:23:44 -06:00
2025-11-08 11:29:40 -06:00
async function renderMarkdown(path) {
2025-11-08 11:57:17 -06:00
mdView.style.display = "none";
2025-11-08 11:29:40 -06:00
const res = await fetch("/" + path);
2025-11-08 11:57:17 -06:00
if (!res.ok) { mdView.innerHTML = "<p>File not found: " + path + "</p>"; requestAnimationFrame(() => mdView.style.display = "block"); return; }
2025-11-08 11:29:40 -06:00
const text = await res.text();
2025-11-08 12:10:39 -06:00
let html = text.replace(/&/g, '&amp;').replace(/</g, '&lt;'); // Default fallback
let usedFallback = true;
if (window.marked) {
html = window.marked.parse(text);
usedFallback = false;
}
let safe = html;
if (window.DOMPurify) safe = window.DOMPurify.sanitize(html);
2025-11-08 11:31:02 -06:00
mdView.innerHTML = safe;
2025-11-08 11:57:17 -06:00
requestAnimationFrame(() => { mdView.style.display = "block"; htmlView.style.display = "none"; });
2025-11-08 12:10:39 -06:00
if (usedFallback) console.warn("Markdown rendered as plain text: marked.js not loaded. Check CDN/SRI.");
2025-11-08 11:31:02 -06:00
}
2025-11-08 12:10:39 -06:00
// ... (rest same)