From 8b35161169760e0bc4e945aa6deb55e2c6bdab6a Mon Sep 17 00:00:00 2001 From: ninglg Date: Mon, 1 Jun 2026 13:26:01 +0800 Subject: [PATCH] feat: lazy render hidden mindmaps, update FAB text & toolbar --- main.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/main.js b/main.js index 5c7afce..1f0bb7c 100644 --- a/main.js +++ b/main.js @@ -181,6 +181,13 @@ class LightMindMapPlugin extends obsidian.Plugin { continue; } overlay.dataset.file = file.path; + if (overlay.classList.contains('lmm-hidden')) { + overlay._lmmNeedsRerender = true; + overlay._lmmStaleContent = content; + overlay._lmmStaleFm = fm; + overlay._lmmStaleName = file.basename; + continue; + } try { this._render(overlay, content, fm, file.basename, view, file); } catch (e) { @@ -389,13 +396,18 @@ class LightMindMapPlugin extends obsidian.Plugin { if (!view || !view.contentEl) return; let fab = view.contentEl.querySelector(':scope > .lmm-fab'); if (fab) return; - fab = view.contentEl.createEl('button', { cls: 'lmm-fab', text: 'Show Mindmap' }); + fab = view.contentEl.createEl('button', { cls: 'lmm-fab', text: 'Light Mindmap' }); fab.onclick = () => { overlay.classList.remove('lmm-hidden'); fab.remove(); - const canvas = overlay.querySelector(':scope > .lmm-canvas'); - const inner = canvas && canvas.querySelector(':scope > .lmm-inner'); - if (canvas && inner) this._fitTo(canvas, inner); + if (overlay._lmmNeedsRerender) { + overlay._lmmNeedsRerender = false; + this._render(overlay, overlay._lmmStaleContent, overlay._lmmStaleFm, overlay._lmmStaleName, view, view.file); + } else { + const canvas = overlay.querySelector(':scope > .lmm-canvas'); + const inner = canvas && canvas.querySelector(':scope > .lmm-inner'); + if (canvas && inner) this._fitTo(canvas, inner); + } }; } @@ -575,7 +587,7 @@ class LightMindMapPlugin extends obsidian.Plugin { const zoomInBtn = zoomGroup.createEl('button', { cls: 'lmm-btn', text: '+' }); const zoomOutBtn = zoomGroup.createEl('button', { cls: 'lmm-btn', text: '−' }); - const right = toolbar.createDiv({ cls: 'lmm-toolbar-group lmm-toolbar-right' }); + const right = toolbar.createDiv({ cls: 'lmm-toolbar-group' }); const exportBtn = right.createEl('button', { cls: 'lmm-btn', text: 'Export PNG' }); exportBtn.onclick = () => this._exportPNG(overlay); const editBtn = right.createEl('button', { cls: 'lmm-btn lmm-btn-ghost', text: 'Edit Markdown' });