File size: 8,528 Bytes
41abe6f
 
 
 
 
 
 
 
 
 
 
c787815
41abe6f
 
 
f0e4f4e
41abe6f
 
fc4bb8e
41abe6f
 
 
 
 
 
fc4bb8e
a69a7bc
41abe6f
 
 
 
 
fc4bb8e
 
09b8269
41abe6f
 
f0e4f4e
41abe6f
f0e4f4e
41abe6f
dc2b7ea
41abe6f
f0e4f4e
41abe6f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
491be64
41abe6f
 
 
 
 
08e78fb
41abe6f
 
 
 
 
 
 
 
 
 
f0e4f4e
41abe6f
 
 
 
 
4f96538
41abe6f
 
a69a7bc
41abe6f
 
 
4f96538
a8a49bb
f61071a
a8a49bb
 
 
 
4f96538
41abe6f
 
 
 
 
 
4f96538
41abe6f
a69a7bc
a134179
41abe6f
 
 
 
353a17d
41abe6f
 
 
353a17d
41abe6f
 
 
 
 
 
 
 
 
 
 
 
 
f0e4f4e
41abe6f
 
 
52b728f
 
 
 
 
 
 
f0e4f4e
41abe6f
08e78fb
f0e4f4e
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
<!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">
</head>
<body class="dark">

<header id="header">
  <div class="header-left">
    <button id="hamburger-btn" class="icon-btn" aria-label="菜单"><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" placeholder="全文搜索 TXT 正文..." autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
      <kbd class="search-kbd">/</kbd>
      <div id="search-history-dropdown" class="search-history-dropdown" style="display:none"></div>
    </div>
  </div>
  <div class="header-right">
    <button id="settings-btn" class="icon-btn" aria-label="搜索设置"><span class="ui-icon ui-icon-sliders" aria-hidden="true"></span></button>
    <button id="mobile-toggle-btn" class="icon-btn" aria-label="切换手机或电脑模式" 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">
    <div class="sidebar-header"><span id="sidebar-title">数据包</span><button id="sidebar-expand-btn" class="icon-btn-sm" 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"></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">
            <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"></span>
    </div>
    <div id="results-container" class="results-container" aria-busy="false">
      <div id="results-list" class="results-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" style="display:none">已加载 <span id="loaded-count">0</span> / <span id="total-count">0</span></div>
    <div id="preview-panel" class="preview-panel" style="display:none"></div>

  </main>

  <aside id="right-sidebar" class="sidebar right-sidebar">
    <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 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" placeholder="最小" min="0" step="0.1">
          <select id="filter-min-unit" class="size-unit"><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" placeholder="最大" min="0" step="0.1">
          <select id="filter-max-unit" class="size-unit"><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 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>

<script>if ("serviceWorker" in navigator) { navigator.serviceWorker.register("/sw.js", { scope: "/" }); }</script>
<script src="/static/app.js"></script>
</body>
</html>