+
文档
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
- 文件名
+ - -
+
+
+
- 标题
+ - -
+
+
+
- 作者
+ - -
+
+
+
- 主题
+
+
+
+
- 摘要
+
+
+
+
- 关键词
+
+
+
+
文档属性
-
-
- 文件名
- - -
-
-
-
- 标题
- - -
-
-
-
- 作者
-
- -
+
+
- 创建日期
+
-
- 主题
-
+ - 修改日期
+
-
- 摘要
-
+ - 制作软件
+
-
- 关键词
-
+ - 软件版本
+
+
+
+
- 文档标识
+
+
+
+
- 文档用途
+
+
+
+
- 封面路径
+
-
文档属性
-
-
-
- 创建日期
-
-
-
-
- 修改日期
-
-
-
-
- 制作软件
-
-
-
-
- 软件版本
-
-
-
-
- 文档标识
-
-
-
-
- 文档用途
-
-
-
-
- 封面路径
-
-
-
-
-
扩展属性
-
格式信息
-
-
-
- 文档类型
- - -
-
-
-
- 格式版本
- - -
-
-
-
- 签名数量
- - 0
-
-
-
- 字体数量
- - 0
-
-
-
-
-
- 提示
-
-
-
-
+
+
+
+
+
+
可用字体
+
+ 0
+
+
+
+
+
+ 系统字体未授权
+
+
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]]) {