From 841f21e8f36646a6842b0a995b49f81ac896c330 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 16 Oct 2024 23:25:33 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/11916 --- app/src/layout/Wnd.ts | 13 +++++++++++-- app/src/layout/util.ts | 13 ++++++++++++- app/src/window/init.ts | 1 - 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/layout/Wnd.ts b/app/src/layout/Wnd.ts index ffb9d7748..e9473435b 100644 --- a/app/src/layout/Wnd.ts +++ b/app/src/layout/Wnd.ts @@ -416,6 +416,7 @@ export class Wnd { public switchTab(target: HTMLElement, pushBack = false, update = true, resize = true, isSaveLayout = true) { let currentTab: Tab; + let isInitActive = false this.children.forEach((item) => { if (target === item.headElement) { if (item.headElement && item.headElement.classList.contains("fn__none")) { @@ -423,7 +424,12 @@ export class Wnd { } else { if (item.headElement) { item.headElement.classList.add("item--focus"); - item.headElement.setAttribute("data-activetime", (new Date()).getTime().toString()); + if (item.headElement.getAttribute("data-init-active") === "true") { + item.headElement.removeAttribute("data-init-active"); + isInitActive = true; + } else { + item.headElement.setAttribute("data-activetime", (new Date()).getTime().toString()); + } } item.panelElement.classList.remove("fn__none"); } @@ -436,7 +442,10 @@ export class Wnd { } } }); - setPanelFocus(this.headersElement.parentElement.parentElement); + // 在 JSONToLayout 中进行 focus + if (!isInitActive) { + setPanelFocus(this.headersElement.parentElement.parentElement); + } if (currentTab && currentTab.headElement) { const initData = currentTab.headElement.getAttribute("data-initdata"); if (initData) { diff --git a/app/src/layout/util.ts b/app/src/layout/util.ts index 2b97cff47..92c483ce3 100644 --- a/app/src/layout/util.ts +++ b/app/src/layout/util.ts @@ -54,6 +54,7 @@ export const setPanelFocus = (element: Element) => { if (element.getAttribute("data-type") === "wnd") { element.classList.add("layout__wnd--active"); element.querySelector(".layout-tab-bar .item--focus")?.setAttribute("data-activetime", (new Date()).getTime().toString()); + saveLayout(); } else { element.classList.add("layout__tab--active"); Array.from(element.classList).find(item => { @@ -492,11 +493,21 @@ export const JSONToLayout = (app: App, isStart: boolean) => { zoomIn: idZoomIn.isZoomIn }); } else { + let latestTabHeaderElement:HTMLElement document.querySelectorAll('li[data-type="tab-header"][data-init-active="true"]').forEach((item: HTMLElement) => { - item.removeAttribute("data-init-active"); + if (!latestTabHeaderElement) { + latestTabHeaderElement = item + } else { + if (item.dataset.activetime > latestTabHeaderElement.dataset.activetime) { + latestTabHeaderElement = item + } + } const tab = getInstanceById(item.getAttribute("data-id")) as Tab; tab.parent.switchTab(item, false, false, true, false); }); + if (latestTabHeaderElement) { + setPanelFocus(latestTabHeaderElement.parentElement.parentElement.parentElement); + } } // 需放在 tab.parent.switchTab 后,否则当前 tab 永远为最后一个 app.plugins.forEach(item => { diff --git a/app/src/window/init.ts b/app/src/window/init.ts index f5bf55001..d4a5269dd 100644 --- a/app/src/window/init.ts +++ b/app/src/window/init.ts @@ -65,7 +65,6 @@ const afterLayout = (app: App) => { afterLoadPlugin(item); }); document.querySelectorAll('li[data-type="tab-header"][data-init-active="true"]').forEach((item: HTMLElement) => { - item.removeAttribute("data-init-active"); const tab = getInstanceById(item.getAttribute("data-id")) as Tab; tab.parent.switchTab(item, false, false); });