diff --git a/assets/webui/index.html b/assets/webui/index.html index 2ec7cef..19c5cda 100644 --- a/assets/webui/index.html +++ b/assets/webui/index.html @@ -802,150 +802,142 @@ diff --git a/assets/webui/ofdgo.css b/assets/webui/ofdgo.css index 0ee553f..839a04e 100644 --- a/assets/webui/ofdgo.css +++ b/assets/webui/ofdgo.css @@ -1839,7 +1839,7 @@ body[data-hide-meta] .meta-panel { .search-results, .editor-toolbar, .document-list, -.meta-content { +.meta-panel { scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent; } @@ -1855,15 +1855,13 @@ body[data-hide-meta] .meta-panel { line-height: 1.5; } -.page-list-panel, -.meta-panel { +.page-list-panel { display: flex; flex-direction: column; overflow: hidden; } -.navigation-content, -.meta-content { +.navigation-content { flex: 1; min-height: 0; overflow: auto; @@ -1887,19 +1885,11 @@ body[data-hide-meta] .meta-panel { border-left: 1px solid var(--line); } -.meta-document-actions { - justify-content: flex-start; - margin-bottom: 12px; -} - -.meta-panel[data-empty="true"] #metaDocumentPanel, -.meta-panel[data-empty="true"] #metaSecurityPanel { +.meta-panel[data-empty="true"] #metaDocumentPanel { display: none; } -#metaFontsPanel > .doc-font-panel, -#metaFontsPanel > .doc-font-panel[hidden] + .font-panel, -#metaSecurityPanel > .security-panel { +.meta-panel[data-empty="true"] > .font-panel { margin-top: 0; padding-top: 0; border-top: 0; @@ -4588,7 +4578,7 @@ audio.page-media { } body[data-hide-meta] .meta-panel { - display: flex; + display: block; } body[data-hide-pages] .page-list-panel { diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 35ed0df..a741cb6 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -183,8 +183,6 @@ function createDocumentState() { encryptionChanged: false, showPages: !COMPACT_LAYOUT.matches, showMeta: !COMPACT_LAYOUT.matches, - metaTab: "document", - metaScroll: {document: 0, fonts: 0, security: 0}, }; } @@ -594,14 +592,6 @@ const el = { searchNext: document.querySelector("#searchNext"), searchResults: document.querySelector("#searchResults"), metaPanel: document.querySelector(".meta-panel"), - metaTabs: document.querySelector("#metaTabs"), - metaContent: document.querySelector("#metaContent"), - documentMetaTab: document.querySelector("#documentMetaTab"), - fontsMetaTab: document.querySelector("#fontsMetaTab"), - securityMetaTab: document.querySelector("#securityMetaTab"), - metaDocumentPanel: document.querySelector("#metaDocumentPanel"), - metaFontsPanel: document.querySelector("#metaFontsPanel"), - metaSecurityPanel: document.querySelector("#metaSecurityPanel"), renderVectorButton: document.querySelector("#renderVectorButton"), renderRasterButton: document.querySelector("#renderRasterButton"), refreshAppButton: document.querySelector("#refreshAppButton"), @@ -1746,23 +1736,17 @@ document.querySelector("#objectActionsButton").addEventListener("click", async ( }); el.outlinesTab.addEventListener("click", () => showNavigation(el.outlinesTab)); el.searchTab.addEventListener("click", focusSearch); -el.documentMetaTab.addEventListener("click", () => showMetaSection(el.documentMetaTab)); -el.fontsMetaTab.addEventListener("click", () => showMetaSection(el.fontsMetaTab)); -el.securityMetaTab.addEventListener("click", () => showMetaSection(el.securityMetaTab)); -for (const [container, buttons, show] of [ - [el.navigationTabs, [el.pagesTab, el.outlinesTab, el.annotationsTab, el.searchTab], showNavigation], - [el.metaTabs, [el.documentMetaTab, el.fontsMetaTab, el.securityMetaTab], showMetaSection], -]) container.addEventListener("keydown", (event) => { +el.navigationTabs.addEventListener("keydown", (event) => { if (event.isComposing || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) { return; } if (["ArrowLeft", "ArrowRight", "Home", "End"].includes(event.key)) { event.preventDefault(); - const tabs = buttons.filter((tab) => !tab.hidden); + const tabs = [el.pagesTab, el.outlinesTab, el.annotationsTab, el.searchTab].filter((tab) => !tab.hidden); const current = tabs.indexOf(event.target); const index = event.key === "Home" ? 0 : event.key === "End" ? tabs.length - 1 : (current + (event.key === "ArrowRight" ? 1 : -1) + tabs.length) % tabs.length; - show(tabs[index]); + showNavigation(tabs[index]); tabs[index].focus({ preventScroll: true }); } }); @@ -2798,9 +2782,8 @@ function detachDocumentView() { window.clearTimeout(wasmRecoveryTimer); wasmRecoveryTimer = 0; const selection = canvasEditor.selected; - state.metaScroll[state.metaTab] = el.metaContent.scrollTop; tab.view = { anchor: state.doc ? scaleAnchor() : null, navigation: el.navigationTabs.querySelector('[data-selected="true"]'), - navigationTop: el.navigationContent.scrollTop, tool: canvasEditor.tool, + navigationTop: el.navigationContent.scrollTop, metaTop: el.metaPanel.scrollTop, tool: canvasEditor.tool, selection: selection ? {index: selection.index, ids: (selection.items || [selection]).map(item => item.id)} : canvasEditor.pendingSelection, richClipboard: canvasEditor.richClipboard, search: el.searchInput.value }; tab.view.searchStatus = state.searchRunning ? "搜索已暂停" : el.searchStatus.textContent; @@ -2971,7 +2954,7 @@ async function mountDocumentTab(tab) { } renderFontList(); updateFontSummary(); - renderMetaSections(); + el.metaPanel.scrollTop = tab.view?.metaTop || 0; updateControls(); tab.controlsPending = false; setStatus(tab.status); @@ -6535,10 +6518,8 @@ async function openDocument(options = {}) { el.viewerPanel.scrollTop = 0; el.navigationContent.scrollLeft = 0; el.navigationContent.scrollTop = 0; - state.metaTab = "document"; - state.metaScroll = {document: 0, fonts: 0, security: 0}; - el.metaContent.scrollLeft = 0; - renderMetaSections(); + el.metaPanel.scrollLeft = 0; + el.metaPanel.scrollTop = 0; } applyFit(false); if (options.keepPreview) { @@ -11638,22 +11619,6 @@ function focusSearch() { el.searchInput.select(); } -function showMetaSection(selected) { - state.metaScroll[state.metaTab] = el.metaContent.scrollTop; - state.metaTab = selected === el.securityMetaTab ? "security" : selected === el.fontsMetaTab ? "fonts" : "document"; - renderMetaSections(); -} - -function renderMetaSections() { - for (const [tab, panel, name] of [[el.documentMetaTab, el.metaDocumentPanel, "document"], [el.fontsMetaTab, el.metaFontsPanel, "fonts"], [el.securityMetaTab, el.metaSecurityPanel, "security"]]) { - const active = name === state.metaTab; - panel.hidden = !active; - tab.setAttribute("data-selected", String(active)); - tab.tabIndex = active ? 0 : -1; - } - el.metaContent.scrollTop = state.metaScroll[state.metaTab]; -} - function showNavigation(selected) { const scrollTop = el.navigationContent.scrollTop; for (const [tab, panel] of [[el.pagesTab, el.pageList], [el.outlinesTab, el.outlineList], [el.annotationsTab, el.annotationsPanel], [el.searchTab, el.searchPanel]]) {