From 16bba9288306d8f00f2f876e578649a4486f4d55 Mon Sep 17 00:00:00 2001 From: andev0x Date: Fri, 29 Aug 2025 16:11:32 +0700 Subject: [PATCH] fix: display images and special characters --- client_ws.js | 39 +++++++++++++++++++++--- server.js | 10 +++++-- template.html | 59 +++++++++++++++++++++++++++++++++++- test_special_chars.md | 69 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 170 insertions(+), 7 deletions(-) create mode 100644 test_special_chars.md diff --git a/client_ws.js b/client_ws.js index da17bd8..cee904e 100644 --- a/client_ws.js +++ b/client_ws.js @@ -39,10 +39,13 @@ } }); - // add simple image zoom UI + // Enhanced image zoom UI with better error handling document.addEventListener("click", (e) => { const t = e.target; if (t && t.tagName === "IMG") { + e.preventDefault(); + e.stopPropagation(); + const overlayId = "mdview-img-overlay"; let overlay = document.getElementById(overlayId); if (!overlay) { @@ -56,16 +59,44 @@ overlay.style.display = "flex"; overlay.style.alignItems = "center"; overlay.style.justifyContent = "center"; - overlay.style.background = "rgba(0,0,0,0.8)"; + overlay.style.background = "rgba(0,0,0,0.9)"; overlay.style.zIndex = 99999; + overlay.style.cursor = "zoom-out"; + + // Close on overlay click or ESC key overlay.addEventListener("click", () => { overlay.remove(); }); + + document.addEventListener("keydown", function escHandler(e) { + if (e.key === "Escape") { + overlay.remove(); + document.removeEventListener("keydown", escHandler); + } + }); + document.body.appendChild(overlay); } + const clone = t.cloneNode(); - clone.style.maxHeight = "90%"; - clone.style.maxWidth = "90%"; + clone.style.maxHeight = "90vh"; + clone.style.maxWidth = "90vw"; + clone.style.objectFit = "contain"; + clone.style.borderRadius = "8px"; + clone.style.boxShadow = "0 4px 20px rgba(0,0,0,0.5)"; + + // Add error handling for broken images + clone.addEventListener("error", () => { + clone.style.display = "none"; + const errorDiv = document.createElement("div"); + errorDiv.style.color = "white"; + errorDiv.style.fontSize = "18px"; + errorDiv.style.textAlign = "center"; + errorDiv.innerHTML = "❌ Image failed to load
Click to close"; + overlay.innerHTML = ""; + overlay.appendChild(errorDiv); + }); + overlay.innerHTML = ""; overlay.appendChild(clone); } diff --git a/server.js b/server.js index 98197f8..1675735 100644 --- a/server.js +++ b/server.js @@ -31,11 +31,17 @@ function renderMarkdown() { MARKDOWN_FILE, "--template=" + templatePath, "-s", + "--mathjax", // Enable MathJax for mathematical expressions + "--standalone", + "--metadata", "title=MDView", "-o", "-" // output to stdout ]; - // spawn pandoc and capture stdout - const res = spawnSync("pandoc", args, { encoding: "utf8" }); + // spawn pandoc and capture stdout with proper encoding + const res = spawnSync("pandoc", args, { + encoding: "utf8", + maxBuffer: 1024 * 1024 * 10 // 10MB buffer for large files + }); if (res.error) { console.error("pandoc error:", res.error); return `
Error running pandoc: ${res.error}
`; diff --git a/template.html b/template.html index 6549205..ee618f7 100644 --- a/template.html +++ b/template.html @@ -4,7 +4,21 @@ MDView $endif$ + + + +