File size: 11,591 Bytes
41abe6f c787815 faea044 41abe6f f0e4f4e 41abe6f 4d75b2f 41abe6f fc4bb8e fc53af8 41abe6f 4d75b2f 41abe6f 4d75b2f 09b8269 41abe6f f0e4f4e 41abe6f f0e4f4e 4d75b2f 41abe6f f0e4f4e 41abe6f 4d75b2f 41abe6f 4d75b2f 41abe6f 491be64 41abe6f fc53af8 41abe6f 4d75b2f 41abe6f 4d75b2f f0e4f4e 41abe6f 4d75b2f 41abe6f 4f96538 41abe6f a69a7bc 41abe6f 4f96538 a8a49bb f61071a a8a49bb 4f96538 41abe6f 4f96538 41abe6f a69a7bc a134179 41abe6f 353a17d 41abe6f 323f21e 41abe6f 4d75b2f 41abe6f 4d75b2f 41abe6f f0e4f4e 41abe6f 4d75b2f 52b728f f0e4f4e 41abe6f 08e78fb 1143003 281e432 1143003 f0e4f4e 41abe6f 9150073 7ceca57 41abe6f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | <!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>VOMEBOOK Search</title>
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#1a1c1e">
<link rel="apple-touch-icon" href="/icons/icon-192.png">
<link rel="icon" type="image/png" sizes="192x192" href="/icons/icon-192.png">
<link rel="icon" type="image/png" sizes="512x512" href="/icons/icon-512.png">
<script>fetch("/api/ping", { cache: "no-store" }).catch(() => {});</script>
<link rel="stylesheet" href="/static/style.css?v=phrases-4">
</head>
<body class="dark">
<header id="header">
<div class="header-left">
<button id="hamburger-btn" class="icon-btn" aria-label="打开数据包导航" aria-controls="left-sidebar" aria-expanded="true"><span class="ui-icon ui-icon-menu" aria-hidden="true"></span></button>
<a id="header-logo" class="header-logo" href="https://huggingface.co/VOMEBOOK" title="VOMEBOOK">
<span id="header-title">VOMEBOOK</span>
</a>
</div>
<div class="header-center">
<div class="search-box">
<span class="search-icon"><span class="ui-icon ui-icon-search" aria-hidden="true"></span></span>
<input type="search" id="search-input" class="search-input" aria-label="搜索 TXT 文件和正文" aria-controls="search-history-dropdown" aria-expanded="false" placeholder="全文搜索 TXT 正文..." autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
<kbd class="search-kbd">/</kbd>
<div id="search-history-dropdown" class="search-history-dropdown" role="region" aria-label="搜索历史" style="display:none"></div>
</div>
</div>
<div class="header-right">
<button id="settings-btn" class="icon-btn" aria-label="打开搜索过滤" aria-controls="right-sidebar" aria-expanded="false"><span class="ui-icon ui-icon-sliders" aria-hidden="true"></span></button>
<button id="mobile-toggle-btn" class="icon-btn" aria-label="切换手机或电脑模式" aria-pressed="false" title="手机/电脑模式切换"><span id="mobile-toggle-icon" class="ui-icon ui-icon-devices" aria-hidden="true"></span></button>
<button id="theme-btn" class="icon-btn" aria-label="切换到白天模式" title="白天模式"><svg class="theme-icon-svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M20 15.5A8 8 0 1 1 8.5 4 6.5 6.5 0 0 0 20 15.5Z"/></svg></button>
</div>
</header>
<div id="app-body" class="app-body">
<aside id="left-sidebar" class="sidebar left-sidebar" aria-labelledby="sidebar-title">
<div class="sidebar-header"><span id="sidebar-title">数据包</span><button id="sidebar-expand-btn" class="icon-btn-sm" aria-label="展开数据包导航" aria-expanded="false" title="展开/收起侧边栏" style="display:none">↔</button></div>
<div id="sidebar-content" class="sidebar-content"><div class="sidebar-loading">加载中...</div></div>
</aside>
<main id="main-content" class="main-content">
<div id="status-bar" class="status-bar">
<div class="status-left">
<span id="result-count" class="result-count" role="status"></span>
<label class="multi-toggle" id="multi-toggle-label" style="display:none"><input type="checkbox" id="multi-select-toggle"><span>多选</span></label>
</div>
<div class="status-right">
<button id="clear-filters-btn" class="text-btn" style="display:none">清空筛选</button>
<div class="sort-group">
<span class="sort-label">排序:</span>
<select id="sort-select" class="sort-select" aria-label="排序方式">
<option value="relevance">相关度</option>
<option value="name">文件名</option>
<option value="size">文件大小</option>
</select>
</div>
</div>
</div>
<div id="multi-action-bar" class="multi-action-bar" style="display:none">
<button id="multi-select-all" class="multi-action-btn">全选</button>
<button id="multi-deselect" class="multi-action-btn">取消选择</button>
<button id="multi-batch-download" class="multi-action-btn primary">批量下载</button>
<button id="multi-zip-download" class="multi-action-btn primary">合并下载</button>
<span id="multi-selected-count" class="multi-selected-count" role="status" aria-live="polite" aria-atomic="true"></span>
</div>
<div id="results-container" class="results-container" aria-busy="false" role="region" aria-label="搜索结果">
<div id="results-list" class="results-list" role="list"></div>
<div id="results-loading" class="loading-spinner" style="display:none"><div class="spinner"></div></div>
<div id="empty-state" class="empty-state" style="display:none">
<div class="empty-title">没有找到结果</div>
<div id="empty-desc" class="empty-desc">试试其他关键词</div>
<button id="empty-random-btn" class="random-big-btn">随机来一篇</button>
</div>
</div>
<div id="load-info" class="load-info" role="status" aria-live="polite" aria-atomic="true" style="display:none">已加载 <span id="loaded-count">0</span> / <span id="total-count">0</span> 条</div>
<div id="preview-panel" class="preview-panel" role="dialog" aria-modal="true" aria-label="文件预览" tabindex="-1" hidden style="display:none"></div>
</main>
<aside id="right-sidebar" class="sidebar right-sidebar" aria-label="搜索过滤">
<div class="sidebar-header"><span>搜索过滤</span><button id="close-filters-btn" class="icon-btn-sm" aria-label="关闭搜索过滤">×</button></div>
<div class="sidebar-content">
<div class="filter-section" id="fulltext-toggle-section">
<label class="toggle-row">
<span class="toggle-label">全文搜索</span>
<input type="checkbox" id="fulltext-toggle" checked>
<span class="toggle-switch"></span>
</label>
</div>
<div class="filter-section" id="search-paths-toggle-section">
<label class="toggle-row">
<span class="toggle-label">搜索文件夹名</span>
<input type="checkbox" id="search-paths-toggle" checked>
<span class="toggle-switch"></span>
</label>
</div>
<div class="filter-section" id="history-toggle-section">
<label class="toggle-row">
<span class="toggle-label">记录搜索历史</span>
<input type="checkbox" id="history-toggle" checked>
<span class="toggle-switch"></span>
</label>
</div>
<div class="filter-section" id="exact-search-section">
<label class="toggle-row">
<span class="toggle-label">精准搜索</span>
<input type="checkbox" id="exact-search-toggle" checked>
<span class="toggle-switch"></span>
</label>
</div>
<div id="filter-source-section" class="filter-section">
<div class="filter-section-title"><span class="filter-title-leading"><span>数据包过滤</span><button id="source-filter-cancel" class="text-btn-sm" hidden>取消</button></span></div>
<div id="filter-source-list" class="filter-checkbox-list"></div>
</div>
<div id="filter-folder-section" class="filter-section">
<div class="filter-section-title"><span class="filter-title-leading"><span>路径过滤</span><button id="folder-filter-cancel" class="text-btn-sm" hidden>取消</button></span><span class="filter-actions"><button type="button" id="folder-toggle-all" class="text-btn-sm" aria-label="展开所有子目录" title="展开所有子目录" aria-controls="filter-folder-tree" aria-expanded="false" disabled>展开</button><button id="folder-select-all" class="text-btn-sm">全选</button><button id="folder-deselect-all" class="text-btn-sm">反选</button></span></div>
<div id="filter-folder-tree" class="filter-folder-tree"></div>
</div>
<div class="filter-section">
<div class="filter-section-title">文件大小</div>
<div class="filter-size-row">
<input type="number" id="filter-min-size" class="size-input" aria-label="最小文件大小" placeholder="最小" min="0" step="0.1">
<select id="filter-min-unit" class="size-unit" aria-label="最小文件大小单位"><option value="B">B</option><option value="KB">KB</option><option value="MB" selected>MB</option><option value="GB">GB</option></select>
<span class="size-sep">—</span>
<input type="number" id="filter-max-size" class="size-input" aria-label="最大文件大小" placeholder="最大" min="0" step="0.1">
<select id="filter-max-unit" class="size-unit" aria-label="最大文件大小单位"><option value="B">B</option><option value="KB">KB</option><option value="MB" selected>MB</option><option value="GB">GB</option></select>
</div>
</div>
</div>
</aside>
</div>
<footer id="footer" class="footer">
<div class="hitokoto"></div>
<button id="random-book-btn" class="random-book-btn" title="随机来一篇">
<span class="ui-icon ui-icon-book" aria-hidden="true"></span>
<span>随机来一篇</span>
</button>
</footer>
<div id="overlay" class="overlay" style="display:none"></div>
<div id="toast" class="toast" role="status" aria-live="polite" style="display:none"></div>
<section id="speech-panel" class="speech-panel" aria-label="朗读设置" hidden>
<div class="speech-heading"><span id="speech-title">朗读</span><button type="button" id="speech-collapse" class="icon-btn-sm" aria-label="收起设置,继续播放" title="收起,继续播放"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.7" aria-hidden="true"><path d="M5 12h14"/></svg></button><button type="button" id="speech-stop" class="icon-btn-sm" aria-label="停止朗读" title="停止朗读">×</button></div>
<p id="speech-status" class="speech-note" role="status">从当前阅读位置开始</p>
<label class="speech-setting" for="speech-pitch"><span>音高</span><input id="speech-pitch" type="range" min="-3" max="3" step="1" value="0"><output id="speech-pitch-value">0</output></label>
<label class="speech-setting" for="speech-speed"><span>语速</span><input id="speech-speed" type="range" min="0.5" max="2" step="0.05" value="1"><output id="speech-speed-value">1.0×</output></label>
<label class="speech-setting" for="speech-timer"><span>睡眠定时</span><select id="speech-timer"><option value="off">关闭</option><option value="clip">读完当前句</option><option value="5">5 分钟</option><option value="15">15 分钟</option><option value="30">30 分钟</option><option value="60">60 分钟</option></select></label>
<div class="speech-transport"><button type="button" id="speech-previous" class="text-btn" aria-label="上一句">上一句</button><button type="button" id="speech-play" class="speech-play">暂停</button><button type="button" id="speech-next" class="text-btn" aria-label="下一句">下一句</button></div>
<div class="speech-links"><button type="button" id="speech-visible" class="text-btn">从当前阅读位置开始</button><button type="button" id="speech-locate" class="text-btn">回到播放位置</button></div>
</section>
<script>if ("serviceWorker" in navigator) { navigator.serviceWorker.register("/sw.js", { scope: "/" }); }</script>
<script src="/static/tts-client.js?v=clips-11"></script>
<script src="/static/app.js?v=result-path-1"></script>
</body>
</html>
|