From 94ec3f45cefd30afae3d22599f83abd560432bb6 Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Thu, 23 Apr 2026 23:31:18 +0530 Subject: [PATCH] fix: show dynamic app version everywhere in UI - Add get-app-version IPC handler in main.js (returns app.getVersion()) - Expose electronAPI.getAppVersion() in preload.js - index.html: replace hardcoded v4.2.0 span with dynamic population from getAppVersion() in DOMContentLoaded - welcome.js: accept appVersion param instead of hardcoded 4.1.0 - renderer.js: pass live version to createWelcomeContent() - main.js about screen: use app.getVersion() instead of hardcoded 4.1.0 - Update stale @version 4.1.0 JSDoc comments to 4.3.0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/adapters/electron/fs.js | 2 +- src/adapters/types.js | 2 +- src/index.html | 2 +- src/main.js | 3 ++- src/preload.js | 6 ++++-- src/renderer.js | 13 ++++++++++--- src/utils/ModalManager.js | 2 +- src/welcome.js | 4 ++-- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/adapters/electron/fs.js b/src/adapters/electron/fs.js index 955d09f..14c9d34 100644 --- a/src/adapters/electron/fs.js +++ b/src/adapters/electron/fs.js @@ -4,7 +4,7 @@ * Implements file system operations for Electron using IPC. * This abstracts file operations to enable easier testing and migration. * - * @version 4.1.0 + * @version 4.3.0 */ /** diff --git a/src/adapters/types.js b/src/adapters/types.js index 5986b81..acd1f8d 100644 --- a/src/adapters/types.js +++ b/src/adapters/types.js @@ -5,7 +5,7 @@ * Adapters abstract file system, conversion, and system operations * to enable easier testing and future platform migration. * - * @version 4.1.0 + * @version 4.3.0 */ /** diff --git a/src/index.html b/src/index.html index b8a717e..2e8620b 100644 --- a/src/index.html +++ b/src/index.html @@ -31,7 +31,7 @@ MarkdownConverter
- v4.2.0 +
diff --git a/src/main.js b/src/main.js index 17e3045..f5de081 100644 --- a/src/main.js +++ b/src/main.js @@ -317,6 +317,7 @@ ipcMain.handle('plugin-settings:get', (_event, key) => { ipcMain.handle('plugin-settings:set', (_event, { key, value }) => { store.set(key, value); }); +ipcMain.handle('get-app-version', () => app.getVersion()); let mainWindow; let currentFile = null; // This will now represent the active tab's file @@ -1064,7 +1065,7 @@ function showAboutDialog() {

MarkdownConverter

-
Version 4.1.0
+
Version ${app.getVersion()}
by diff --git a/src/preload.js b/src/preload.js index 8217436..6b069f5 100644 --- a/src/preload.js +++ b/src/preload.js @@ -9,7 +9,7 @@ * - All IPC channels are explicitly whitelisted * - Prevents XSS from escalating to full system access * - * @version 4.1.0 + * @version 4.3.0 */ const { contextBridge, ipcRenderer } = require('electron'); @@ -433,7 +433,9 @@ contextBridge.exposeInMainWorld('electronAPI', { generators: { openAscii: () => ipcRenderer.send('open-ascii-generator'), openTable: () => ipcRenderer.send('open-table-generator') - } + }, + + getAppVersion: () => ipcRenderer.invoke('get-app-version') }); // Log successful preload initialization diff --git a/src/renderer.js b/src/renderer.js index 32ef3ca..6c0d320 100644 --- a/src/renderer.js +++ b/src/renderer.js @@ -1,6 +1,6 @@ /** * MarkdownConverter Renderer Process - * @version 4.1.0 + * @version 4.3.0 */ const { ipcRenderer } = require('electron'); @@ -1442,11 +1442,17 @@ class TabManager { let tabManager; let replPanel; -document.addEventListener('DOMContentLoaded', () => { +document.addEventListener('DOMContentLoaded', async () => { tabManager = new TabManager(); const ReplPanel = getReplPanel(); replPanel = new ReplPanel(); + // Populate app version from main process + window.electronAPI.getAppVersion().then((version) => { + const el = document.getElementById('app-version-display'); + if (el) el.textContent = `v${version}`; + }); + // Initialize ModalManager for all dialogs const findModal = new ModalManager('#find-dialog'); const exportModal = new ModalManager('#export-dialog'); @@ -1613,7 +1619,8 @@ document.addEventListener('DOMContentLoaded', () => { // Set welcome content in the first tab's preview const recentFiles = JSON.parse(localStorage.getItem('recentFiles') || '[]'); - const welcomeHtml = getCreateWelcomeContent()(recentFiles); + const appVersion = await window.electronAPI.getAppVersion().catch(() => ''); + const welcomeHtml = getCreateWelcomeContent()(recentFiles, appVersion); const tab = tabManager.tabs.get(tabManager.activeTabId); if (tab) { diff --git a/src/utils/ModalManager.js b/src/utils/ModalManager.js index 3dcd2a6..01952cc 100644 --- a/src/utils/ModalManager.js +++ b/src/utils/ModalManager.js @@ -1,6 +1,6 @@ /** * ModalManager - Unified modal system with accessibility support - * @version 4.1.0 + * @version 4.3.0 */ class ModalManager { #modal; diff --git a/src/welcome.js b/src/welcome.js index ffb7b30..8eeec66 100644 --- a/src/welcome.js +++ b/src/welcome.js @@ -1,4 +1,4 @@ -function createWelcomeContent(recentFiles = []) { +function createWelcomeContent(recentFiles = [], appVersion = '') { const recentHtml = recentFiles.length ? recentFiles.map(f => { const name = f.split(/[/\\]/).pop(); @@ -10,7 +10,7 @@ function createWelcomeContent(recentFiles = []) {

MarkdownConverter

-

Version 4.1.0

+

${appVersion ? `Version ${appVersion}` : ''}

Professional Markdown Editor & Universal Document Converter