From 2e9517029691f2bcf16877161e95fa8e11074735 Mon Sep 17 00:00:00 2001 From: SimoneMariaRomeo <180769497+SimoneMariaRomeo@users.noreply.github.com> Date: Fri, 15 May 2026 17:30:10 +0700 Subject: [PATCH] Refresh sheet embeds after edits --- src/main.ts | 13 +++++-- src/post-processor/markdownPostProcessor.ts | 40 +++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index 09f52db..6660279 100644 --- a/src/main.ts +++ b/src/main.ts @@ -40,6 +40,7 @@ import { ExcelProSettingTab } from './settingTab' import { initializeMarkdownPostProcessor, markdownPostProcessor, + refreshEmbeddedSheet, } from './post-processor/markdownPostProcessor' import type { FontInfo } from './services/fontManager' import { FontManager } from './services/fontManager' @@ -137,6 +138,13 @@ export default class ExcelProPlugin extends Plugin { } }), ) + this.registerEvent( + this.app.vault.on('modify', async (file) => { + if (file instanceof TFile && this.isExcelFile(file)) { + await refreshEmbeddedSheet(file) + } + }), + ) } private switchToExcelAfterLoad() { @@ -387,10 +395,11 @@ export default class ExcelProPlugin extends Plugin { if (location === 'new-tab') leaf = this.app.workspace.getLeaf('tab') + if (location === 'new-pane') + leaf = this.app.workspace.getLeaf('split') + if (!leaf) { leaf = this.app.workspace.getLeaf(false) - if (leaf.view.getViewType() !== 'empty' && location === 'new-pane') - leaf = this.app.workspace.getMostRecentLeaf() } leaf diff --git a/src/post-processor/markdownPostProcessor.ts b/src/post-processor/markdownPostProcessor.ts index a923a8c..bca61b2 100644 --- a/src/post-processor/markdownPostProcessor.ts +++ b/src/post-processor/markdownPostProcessor.ts @@ -14,12 +14,51 @@ let plugin: ExcelProPlugin let vault: Vault let metadataCache: MetadataCache +interface RenderedEmbed { + el: HTMLDivElement + src: string + alt: string + file: TFile +} + +const renderedEmbeds = new Map>() + export function initializeMarkdownPostProcessor(p: ExcelProPlugin) { plugin = p vault = p.app.vault metadataCache = p.app.metadataCache } +export async function refreshEmbeddedSheet(file: TFile) { + const renders = renderedEmbeds.get(file.path) + if (!renders?.size) + return + + const data = await vault.read(file) + const existing = Array.from(renders) + for (const render of existing) { + renders.delete(render) + if (!render.el.isConnected) + continue + + const next = await createEmbedLinkDiv(render.src, render.alt, file, data) + render.el.replaceWith(next) + } + + if (renders.size === 0) + renderedEmbeds.delete(file.path) +} + +function trackRenderedEmbed(file: TFile, el: HTMLDivElement, src: string, alt: string) { + let renders = renderedEmbeds.get(file.path) + if (!renders) { + renders = new Set() + renderedEmbeds.set(file.path, renders) + } + + renders.add({ el, src, alt, file }) +} + /** * markdown 文本处理 * 在 markdown 中出输入 ![[*.univer.md]] 链接,就会触发此方法 @@ -212,6 +251,7 @@ async function createEmbedLinkDiv(src: string, alt: string, file: TFile, data: s } const embedLinkDiv = createDiv() + trackRenderedEmbed(file, embedLinkDiv, src, alt) if (plugin.settings.showSheetButton === 'true') { const fileEmbed = embedLinkDiv.createDiv({