From 556b1983c013980592141a2ce2ebf586e5f2fe63 Mon Sep 17 00:00:00 2001 From: itznan <113649889+itznan@users.noreply.github.com> Date: Sat, 10 Oct 2026 20:42:36 +0530 Subject: [PATCH 01/15] feat(settings): add visual library settings panel, store, and UI wiring --- desktop-app/prepare.js | 25 ++- desktop-app/resources/index.html | 89 +++++++++ desktop-app/resources/js/script.js | 187 ++++++++++++++++++ .../resources/js/visual-settings-store.js | 183 +++++++++++++++++ desktop-app/resources/styles.css | 155 +++++++++++++++ index.html | 89 +++++++++ script.js | 187 ++++++++++++++++++ styles.css | 155 +++++++++++++++ tests/helpers/static-build-check.mjs | 16 +- tests/unit/visual-settings-store.test.mjs | 112 +++++++++++ visual-settings-store.js | 183 +++++++++++++++++ 11 files changed, 1377 insertions(+), 4 deletions(-) create mode 100644 desktop-app/resources/js/visual-settings-store.js create mode 100644 tests/unit/visual-settings-store.test.mjs create mode 100644 visual-settings-store.js diff --git a/desktop-app/prepare.js b/desktop-app/prepare.js index b265bf44..5df657f9 100644 --- a/desktop-app/prepare.js +++ b/desktop-app/prepare.js @@ -49,6 +49,15 @@ console.log("✓ Copied script.js → resources/js/script.js"); fs.copyFileSync(path.join(ROOT_DIR, "workspace-storage.js"), path.join(jsDest, "workspace-storage.js")); console.log("✓ Copied workspace-storage.js → resources/js/workspace-storage.js"); +if (fs.existsSync(path.join(ROOT_DIR, "visual-settings-store.js"))) { + fs.copyFileSync(path.join(ROOT_DIR, "visual-settings-store.js"), path.join(jsDest, "visual-settings-store.js")); + console.log("✓ Copied visual-settings-store.js → resources/js/visual-settings-store.js"); +} +if (fs.existsSync(path.join(ROOT_DIR, "visual-settings-adapters.js"))) { + fs.copyFileSync(path.join(ROOT_DIR, "visual-settings-adapters.js"), path.join(jsDest, "visual-settings-adapters.js")); + console.log("✓ Copied visual-settings-adapters.js → resources/js/visual-settings-adapters.js"); +} + fs.copyFileSync(path.join(ROOT_DIR, "preview-worker.js"), path.join(jsDest, "preview-worker.js")); console.log("Copied preview-worker.js to resources/js/preview-worker.js"); @@ -320,6 +329,8 @@ async function prepareOfflineDependencies() { html = html.replace(/href="assets\//g, 'href="/assets/'); html = html.replace(/href="styles\.css"/g, 'href="/styles.css"'); html = html.replace(/href="workspace-storage\.js"/g, 'href="/js/workspace-storage.js"'); + html = html.replace(/href="visual-settings-adapters\.js"/g, 'href="/js/visual-settings-adapters.js"'); + html = html.replace(/href="visual-settings-store\.js"/g, 'href="/js/visual-settings-store.js"'); html = html.replace(/href="script\.js"/g, 'href="/js/script.js"'); // PERF-034: Strip web-specific SEO tags, canonical, hreflang, preconnect, manifest and JSON-LD structured data for desktop build @@ -333,8 +344,18 @@ async function prepareOfflineDependencies() { // Inject Neutralino script tags html = html.replace( - /]*><\/script>\s*]*><\/script>/i, - '\n \n \n ', + /]*><\/script>(?:\s*]*><\/script>)?(?:\s*]*><\/script>)?\s*]*><\/script>/i, + (match) => { + let tags = '\n \n '; + if (match.includes('visual-settings-adapters.js')) { + tags += '\n '; + } + if (match.includes('visual-settings-store.js')) { + tags += '\n '; + } + tags += '\n '; + return tags; + } ); // Inject app-info element diff --git a/desktop-app/resources/index.html b/desktop-app/resources/index.html index e4192e2f..f366daf8 100644 --- a/desktop-app/resources/index.html +++ b/desktop-app/resources/index.html @@ -7,6 +7,7 @@ + @@ -121,6 +122,10 @@

Markdown Viewer - Online Markd + +