Files
-----/tools/epub_review_editor/static/index.html
T
2026-07-06 21:28:45 +08:00

226 lines
8.8 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>双语 EPUB 审校编辑器</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<header class="topbar">
<div class="brandBlock">
<h1>双语 EPUB 审校编辑器</h1>
<p id="sessionMeta">正在载入……</p>
</div>
<div class="modeTabs" role="tablist" aria-label="审校模式">
<button id="readingModeBtn" class="modeButton active" type="button">阅读模式</button>
<button id="polishModeBtn" class="modeButton" type="button">精修模式</button>
</div>
<div class="toolbar">
<button id="openLibraryBtn" type="button">打开 EPUB</button>
<button id="showTouchedBtn" type="button">仅看已记录</button>
<button id="feedbackBtn" type="button">生成反馈</button>
<button id="applyBtn" type="button">写回 EPUB 内容</button>
<button id="exportBtn" type="button">导出审校 EPUB</button>
</div>
</header>
<main class="startScreen" id="startScreen" hidden>
<section class="startPanel">
<div class="startHeader">
<div>
<h2>打开中日双语 EPUB</h2>
<p>上传一个“日文灰字 + 中文译文紧随其后”的双语 EPUB,审校记录会保存在本机或服务器的审校目录中。</p>
</div>
<button id="refreshSessionsBtn" type="button">刷新会话</button>
</div>
<form class="uploadBox" id="uploadForm">
<label class="fileDrop" for="epubFileInput">
<span class="fileDropTitle">选择 EPUB 文件</span>
<span class="fileDropName" id="selectedFileName">尚未选择文件</span>
<input id="epubFileInput" type="file" accept=".epub,application/epub+zip">
</label>
<button id="uploadBtn" class="primary" type="submit">上传并开始审校</button>
</form>
<section class="sessionBrowser">
<div class="sectionTitle compactTitle">
<h2>已有审校会话</h2>
<span id="sessionListMeta"></span>
</div>
<div class="sessionList" id="sessionList"></div>
</section>
</section>
</main>
<main class="layout" id="reviewLayout" hidden>
<aside class="sidebar">
<div class="searchbox">
<input id="searchInput" type="search" placeholder="搜索原文、译文、备注">
</div>
<div class="stats" id="stats"></div>
<nav class="toc" id="toc" aria-label="章节目录"></nav>
<div class="rowList" id="rowList"></div>
</aside>
<section class="readerPane" id="readerPane">
<div class="readerHeader">
<div>
<div class="chapterKicker" id="chapterKicker">目录</div>
<h2 id="readerTitle">选择章节开始阅读</h2>
</div>
<div class="readerTools">
<button id="prevPartBtn" type="button">上一章</button>
<button id="nextPartBtn" type="button">下一章</button>
</div>
</div>
<article class="readingFlow" id="readingFlow"></article>
</section>
<section class="editorPane" id="editorPane" hidden>
<div class="emptyState" id="emptyState">选择左侧段落开始审校。</div>
<article class="editorCard" id="editorCard" hidden>
<div class="rowHeader">
<div>
<div class="rowId" id="rowId"></div>
<div class="rowPath" id="rowPath"></div>
</div>
<label class="markToggle">
<input id="markedInput" type="checkbox">
标记为翻译问题
</label>
</div>
<section class="pair">
<h2>日文原文</h2>
<div class="sourceText" id="jpText"></div>
</section>
<section class="pair">
<div class="sectionTitle">
<h2>中文译文</h2>
<div class="inlineTools">
<button id="markSelectionBtn" type="button">标记选中文本</button>
<button id="clearMarksBtn" type="button">清除本段标记</button>
<button id="resetTextBtn" type="button">恢复本段初始译文</button>
</div>
</div>
<div id="cnEditor" class="cnEditor" contenteditable="true" spellcheck="false"></div>
</section>
<section class="reviewFields">
<label>
问题类型
<select id="issueTypeInput">
<option value="">未选择</option>
<option value="误译">误译</option>
<option value="漏译">漏译</option>
<option value="术语不一致">术语不一致</option>
<option value="人名/地名问题">人名/地名问题</option>
<option value="翻译腔">翻译腔</option>
<option value="角色口吻不对">角色口吻不对</option>
<option value="语序不顺">语序不顺</option>
<option value="标点/格式">标点/格式</option>
<option value="其他">其他</option>
</select>
</label>
<label>
严重程度
<select id="severityInput">
<option value="">未选择</option>
<option value="轻微">轻微</option>
<option value="中等">中等</option>
<option value="严重">严重</option>
</select>
</label>
<label>
标签
<input id="tagsInput" type="text" placeholder="例:术语, 对话, 阿格里皮娜">
</label>
</section>
<section class="notes">
<label>
问题备注
<textarea id="commentInput" rows="4" placeholder="写下哪里翻得不好,或你希望我之后怎么处理类似句子。"></textarea>
</label>
<label>
可沉淀为长期规则
<textarea id="learnNoteInput" rows="3" placeholder="例:Falchion 固定译为大砍刀,不要译成偃月刀。"></textarea>
</label>
</section>
<div class="actions">
<button id="prevBtn" type="button">上一段</button>
<button id="saveBtn" type="button">保存本段记录</button>
<button id="nextBtn" type="button">下一段</button>
</div>
</article>
</section>
</main>
<aside class="quickEditor" id="quickEditor" hidden aria-label="快速审校面板">
<div class="quickHeader">
<div>
<div class="rowId" id="quickRowId"></div>
<div class="rowPath" id="quickRowPath"></div>
</div>
<button id="closeQuickEditorBtn" type="button" aria-label="关闭快速审校">关闭</button>
</div>
<details class="quickSourceWrap" open>
<summary>日文原文</summary>
<section class="quickSource" id="quickJpText"></section>
</details>
<label class="quickField">
中文译文
<div id="quickCnEditor" class="cnEditor quickCnEditor" contenteditable="true" spellcheck="false"></div>
</label>
<div class="quickControls">
<label class="markToggle">
<input id="quickMarkedInput" type="checkbox">
标记问题
</label>
<select id="quickIssueTypeInput">
<option value="">问题类型</option>
<option value="误译">误译</option>
<option value="漏译">漏译</option>
<option value="术语不一致">术语不一致</option>
<option value="人名/地名问题">人名/地名问题</option>
<option value="翻译腔">翻译腔</option>
<option value="角色口吻不对">角色口吻不对</option>
<option value="语序不顺">语序不顺</option>
<option value="标点/格式">标点/格式</option>
<option value="其他">其他</option>
</select>
<select id="quickSeverityInput">
<option value="">严重程度</option>
<option value="轻微">轻微</option>
<option value="中等">中等</option>
<option value="严重">严重</option>
</select>
</div>
<label class="quickField">
标签
<input id="quickTagsInput" type="text" placeholder="例:术语, 对话">
</label>
<label class="quickField">
问题备注
<textarea id="quickCommentInput" rows="3" placeholder="哪里翻得不好,或应该如何改。"></textarea>
</label>
<label class="quickField">
可沉淀为长期规则
<textarea id="quickLearnNoteInput" rows="2" placeholder="可复用的翻译偏好或禁忌。"></textarea>
</label>
<div class="quickActions">
<button id="quickMarkSelectionBtn" type="button">标记选中文本</button>
<button id="quickSaveBtn" type="button">保存</button>
<button id="quickOpenFullBtn" type="button">进入精修</button>
</div>
</aside>
<div class="toast" id="toast" hidden></div>
<script src="/static/app.js"></script>
</body>
</html>