mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 09:37:26 +08:00
This commit is contained in:
1 parent
2a022ba73e
commit
aa860a1402
2 files changed
+36
-12
No files matched your search
@@ -11,6 +11,7 @@
|
|||||||
<header class="toolbar app-bar">
|
<header class="toolbar app-bar">
|
||||||
<input id="ofdInput" class="file-input" type="file" accept=".ofd">
|
<input id="ofdInput" class="file-input" type="file" accept=".ofd">
|
||||||
<input id="fontInput" class="file-input" type="file" accept=".ttf,.otf,.ttc,font/*" multiple>
|
<input id="fontInput" class="file-input" type="file" accept=".ttf,.otf,.ttc,font/*" multiple>
|
||||||
|
<input id="fontDirectoryInput" class="file-input" type="file" webkitdirectory multiple>
|
||||||
<div class="tool-group">
|
<div class="tool-group">
|
||||||
<button id="ofdButton" class="button primary" type="button" data-short="打开" aria-label="打开">打开</button>
|
<button id="ofdButton" class="button primary" type="button" data-short="打开" aria-label="打开">打开</button>
|
||||||
<button id="togglePagesButton" class="icon-button" type="button" title="页面栏" aria-label="页面栏" aria-pressed="true">☰</button>
|
<button id="togglePagesButton" class="icon-button" type="button" title="页面栏" aria-label="页面栏" aria-pressed="true">☰</button>
|
||||||
@@ -116,6 +117,7 @@
|
|||||||
<span id="availableFontSummary" class="count-pill">0</span>
|
<span id="availableFontSummary" class="count-pill">0</span>
|
||||||
<button id="localFontButton" class="small-button" type="button">系统字体</button>
|
<button id="localFontButton" class="small-button" type="button">系统字体</button>
|
||||||
<button id="fontAddButton" class="small-button" type="button">添加</button>
|
<button id="fontAddButton" class="small-button" type="button">添加</button>
|
||||||
|
<button id="fontDirectoryButton" class="small-button" type="button" title="添加字体目录" aria-label="添加字体目录">目录</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="fontPermissionHint" class="font-permission-hint" hidden>需授权读取系统字体</div>
|
<div id="fontPermissionHint" class="font-permission-hint" hidden>需授权读取系统字体</div>
|
||||||
|
|||||||
+34
-12
@@ -83,9 +83,11 @@ const el = {
|
|||||||
ofdInput: document.querySelector("#ofdInput"),
|
ofdInput: document.querySelector("#ofdInput"),
|
||||||
ofdButton: document.querySelector("#ofdButton"),
|
ofdButton: document.querySelector("#ofdButton"),
|
||||||
fontInput: document.querySelector("#fontInput"),
|
fontInput: document.querySelector("#fontInput"),
|
||||||
|
fontDirectoryInput: document.querySelector("#fontDirectoryInput"),
|
||||||
togglePagesButton: document.querySelector("#togglePagesButton"),
|
togglePagesButton: document.querySelector("#togglePagesButton"),
|
||||||
toggleMetaButton: document.querySelector("#toggleMetaButton"),
|
toggleMetaButton: document.querySelector("#toggleMetaButton"),
|
||||||
fontAddButton: document.querySelector("#fontAddButton"),
|
fontAddButton: document.querySelector("#fontAddButton"),
|
||||||
|
fontDirectoryButton: document.querySelector("#fontDirectoryButton"),
|
||||||
localFontButton: document.querySelector("#localFontButton"),
|
localFontButton: document.querySelector("#localFontButton"),
|
||||||
prevButton: document.querySelector("#prevButton"),
|
prevButton: document.querySelector("#prevButton"),
|
||||||
nextButton: document.querySelector("#nextButton"),
|
nextButton: document.querySelector("#nextButton"),
|
||||||
@@ -131,10 +133,12 @@ const el = {
|
|||||||
el.ofdButton.addEventListener("click", openOFDFile);
|
el.ofdButton.addEventListener("click", openOFDFile);
|
||||||
el.togglePagesButton.addEventListener("click", () => toggleSidebar("pages"));
|
el.togglePagesButton.addEventListener("click", () => toggleSidebar("pages"));
|
||||||
el.toggleMetaButton.addEventListener("click", () => toggleSidebar("meta"));
|
el.toggleMetaButton.addEventListener("click", () => toggleSidebar("meta"));
|
||||||
el.fontAddButton.addEventListener("click", openFontFile);
|
el.fontAddButton.addEventListener("click", () => openFontFile(el.fontInput));
|
||||||
|
el.fontDirectoryButton.addEventListener("click", () => openFontFile(el.fontDirectoryInput));
|
||||||
el.localFontButton.addEventListener("click", loadLocalFonts);
|
el.localFontButton.addEventListener("click", loadLocalFonts);
|
||||||
el.ofdInput.addEventListener("change", openSelectedOFD);
|
el.ofdInput.addEventListener("change", openSelectedOFD);
|
||||||
el.fontInput.addEventListener("change", openSelectedFonts);
|
el.fontInput.addEventListener("change", openSelectedFonts);
|
||||||
|
el.fontDirectoryInput.addEventListener("change", openSelectedFonts);
|
||||||
el.prevButton.addEventListener("click", () => renderPage(state.pageIndex - 1));
|
el.prevButton.addEventListener("click", () => renderPage(state.pageIndex - 1));
|
||||||
el.nextButton.addEventListener("click", () => renderPage(state.pageIndex + 1));
|
el.nextButton.addEventListener("click", () => renderPage(state.pageIndex + 1));
|
||||||
el.zoomOutButton.addEventListener("click", () => setScale(state.scale - 0.1));
|
el.zoomOutButton.addEventListener("click", () => setScale(state.scale - 0.1));
|
||||||
@@ -158,6 +162,7 @@ el.viewerPanel.addEventListener("scroll", () => {
|
|||||||
});
|
});
|
||||||
el.viewerPanel.addEventListener("dblclick", openOFDFromViewer);
|
el.viewerPanel.addEventListener("dblclick", openOFDFromViewer);
|
||||||
|
|
||||||
|
el.fontDirectoryButton.disabled = !("webkitdirectory" in el.fontDirectoryInput);
|
||||||
updateSidebarState();
|
updateSidebarState();
|
||||||
boot();
|
boot();
|
||||||
|
|
||||||
@@ -177,9 +182,9 @@ async function openOFDFromViewer() {
|
|||||||
await openOFDFile();
|
await openOFDFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
function openFontFile() {
|
function openFontFile(input) {
|
||||||
el.fontInput.value = "";
|
input.value = "";
|
||||||
el.fontInput.click();
|
input.click();
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleSidebar(side) {
|
function toggleSidebar(side) {
|
||||||
@@ -400,17 +405,34 @@ function isOFDFile(file) {
|
|||||||
return /\.ofd$/i.test(file.name || "");
|
return /\.ofd$/i.test(file.name || "");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function openSelectedFonts() {
|
async function openSelectedFonts(event) {
|
||||||
const files = Array.from(el.fontInput.files || []);
|
const input = event.currentTarget;
|
||||||
|
const files = Array.from(input.files || []).filter((file) => (
|
||||||
|
!input.webkitdirectory || /\.(ttf|otf|ttc)$/i.test(file.name)
|
||||||
|
));
|
||||||
|
input.value = "";
|
||||||
if (!files.length) {
|
if (!files.length) {
|
||||||
|
setStatus("未发现字体文件");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const fonts = await Promise.all(files.map(async (file) => (
|
setBusy(true, "正在读取字体", 10, STATUS.fonts);
|
||||||
createFontRecord(file.name, new Uint8Array(await file.arrayBuffer()), "upload")
|
try {
|
||||||
)));
|
const fonts = [];
|
||||||
state.userFonts.push(...fonts);
|
for (let i = 0; i < files.length; i += 1) {
|
||||||
el.fontInput.value = "";
|
setProgress(`正在读取字体 ${i + 1}/${files.length}`, 10 + Math.round(i / files.length * 60));
|
||||||
await applyFontChange();
|
const file = files[i];
|
||||||
|
fonts.push(createFontRecord(file.name, new Uint8Array(await file.arrayBuffer()), "upload"));
|
||||||
|
}
|
||||||
|
state.userFonts.push(...fonts);
|
||||||
|
await applyFontChange();
|
||||||
|
if (!state.doc) {
|
||||||
|
setStatus(`已添加 ${fonts.length} 个字体`);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
showError(err, false);
|
||||||
|
} finally {
|
||||||
|
setBusy(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadLocalFonts() {
|
async function loadLocalFonts() {
|
||||||
|
|||||||
Reference in new issue
Block a user