Upload 3 files
Browse files- static/app.js +9 -0
- static/index.html +9 -0
- static/style.css +47 -0
static/app.js
CHANGED
|
@@ -86,6 +86,7 @@ const STATE = {
|
|
| 86 |
isDark: true,
|
| 87 |
isLoading: false,
|
| 88 |
hasMore: false,
|
|
|
|
| 89 |
browserPath: "",
|
| 90 |
repoList: [],
|
| 91 |
extensionList: [],
|
|
@@ -147,6 +148,7 @@ function cacheDOM() {
|
|
| 147 |
DOM.extSelectAll = $("#ext-select-all");
|
| 148 |
DOM.extDeselectAll = $("#ext-deselect-all");
|
| 149 |
DOM.sidebarExpandBtn = $("#sidebar-expand-btn");
|
|
|
|
| 150 |
}
|
| 151 |
|
| 152 |
/* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -212,6 +214,7 @@ const API = {
|
|
| 212 |
query.set("folders", STATE.filterFolders.join(","));
|
| 213 |
if (STATE.filterMinSize !== null) query.set("min_size", STATE.filterMinSize);
|
| 214 |
if (STATE.filterMaxSize !== null) query.set("max_size", STATE.filterMaxSize);
|
|
|
|
| 215 |
const resp = await fetch(`${base}?${query.toString()}`);
|
| 216 |
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
|
| 217 |
return resp.json();
|
|
@@ -876,6 +879,12 @@ async function init() {
|
|
| 876 |
DOM.themeBtn.addEventListener("click", toggleTheme);
|
| 877 |
DOM.mobileToggleBtn.addEventListener("click", toggleMobile);
|
| 878 |
DOM.clearFiltersBtn.addEventListener("click", clearAllFilters);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 879 |
DOM.sortSelect.addEventListener("change", () => {
|
| 880 |
if (DOM.sortSelect.value === "relevance") { STATE.page = 1; STATE.results = []; doSearch(); }
|
| 881 |
else if (DOM.sortSelect.value === "name") { STATE.results.sort((a, b) => (a.File || "").localeCompare(b.File || "", "zh")); renderResults(); }
|
|
|
|
| 86 |
isDark: true,
|
| 87 |
isLoading: false,
|
| 88 |
hasMore: false,
|
| 89 |
+
searchFolders: true,
|
| 90 |
browserPath: "",
|
| 91 |
repoList: [],
|
| 92 |
extensionList: [],
|
|
|
|
| 148 |
DOM.extSelectAll = $("#ext-select-all");
|
| 149 |
DOM.extDeselectAll = $("#ext-deselect-all");
|
| 150 |
DOM.sidebarExpandBtn = $("#sidebar-expand-btn");
|
| 151 |
+
DOM.searchFoldersToggle = $("#search-folders-toggle");
|
| 152 |
}
|
| 153 |
|
| 154 |
/* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
|
|
| 214 |
query.set("folders", STATE.filterFolders.join(","));
|
| 215 |
if (STATE.filterMinSize !== null) query.set("min_size", STATE.filterMinSize);
|
| 216 |
if (STATE.filterMaxSize !== null) query.set("max_size", STATE.filterMaxSize);
|
| 217 |
+
query.set("search_folders", STATE.searchFolders ? "true" : "false");
|
| 218 |
const resp = await fetch(`${base}?${query.toString()}`);
|
| 219 |
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
|
| 220 |
return resp.json();
|
|
|
|
| 879 |
DOM.themeBtn.addEventListener("click", toggleTheme);
|
| 880 |
DOM.mobileToggleBtn.addEventListener("click", toggleMobile);
|
| 881 |
DOM.clearFiltersBtn.addEventListener("click", clearAllFilters);
|
| 882 |
+
DOM.searchFoldersToggle.addEventListener("change", () => {
|
| 883 |
+
STATE.searchFolders = DOM.searchFoldersToggle.checked;
|
| 884 |
+
STATE.page = 1;
|
| 885 |
+
STATE.results = [];
|
| 886 |
+
doSearch();
|
| 887 |
+
});
|
| 888 |
DOM.sortSelect.addEventListener("change", () => {
|
| 889 |
if (DOM.sortSelect.value === "relevance") { STATE.page = 1; STATE.results = []; doSearch(); }
|
| 890 |
else if (DOM.sortSelect.value === "name") { STATE.results.sort((a, b) => (a.File || "").localeCompare(b.File || "", "zh")); renderResults(); }
|
static/index.html
CHANGED
|
@@ -151,6 +151,15 @@
|
|
| 151 |
<button id="close-filters-btn" class="icon-btn-sm" aria-label="ε
³ιθΏζ»€">×</button>
|
| 152 |
</div>
|
| 153 |
<div class="sidebar-content">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
<!-- Repo Filter -->
|
| 155 |
<div id="filter-repo-section" class="filter-section">
|
| 156 |
<div class="filter-section-title">δ»εΊθΏζ»€</div>
|
|
|
|
| 151 |
<button id="close-filters-btn" class="icon-btn-sm" aria-label="ε
³ιθΏζ»€">×</button>
|
| 152 |
</div>
|
| 153 |
<div class="sidebar-content">
|
| 154 |
+
<!-- ζη΄’ζδ»Άε€ΉεεΌε
³ -->
|
| 155 |
+
<div class="filter-section" id="search-folders-section">
|
| 156 |
+
<label class="toggle-row">
|
| 157 |
+
<span class="toggle-label">ζη΄’ζδ»Άε€Ήε</span>
|
| 158 |
+
<input type="checkbox" id="search-folders-toggle" checked>
|
| 159 |
+
<span class="toggle-switch"></span>
|
| 160 |
+
</label>
|
| 161 |
+
</div>
|
| 162 |
+
|
| 163 |
<!-- Repo Filter -->
|
| 164 |
<div id="filter-repo-section" class="filter-section">
|
| 165 |
<div class="filter-section-title">δ»εΊθΏζ»€</div>
|
static/style.css
CHANGED
|
@@ -1232,4 +1232,51 @@ body.mobile .result-actions {
|
|
| 1232 |
overflow: hidden;
|
| 1233 |
text-overflow: ellipsis;
|
| 1234 |
white-space: nowrap;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1235 |
}
|
|
|
|
| 1232 |
overflow: hidden;
|
| 1233 |
text-overflow: ellipsis;
|
| 1234 |
white-space: nowrap;
|
| 1235 |
+
}
|
| 1236 |
+
|
| 1237 |
+
/* ββ Toggle Switch ββββββββββββββββββββββββββββββββββββ */
|
| 1238 |
+
.toggle-row {
|
| 1239 |
+
display: flex;
|
| 1240 |
+
align-items: center;
|
| 1241 |
+
justify-content: space-between;
|
| 1242 |
+
cursor: pointer;
|
| 1243 |
+
}
|
| 1244 |
+
|
| 1245 |
+
.toggle-label {
|
| 1246 |
+
font-size: 13px;
|
| 1247 |
+
color: var(--on-surface);
|
| 1248 |
+
}
|
| 1249 |
+
|
| 1250 |
+
.toggle-row input[type="checkbox"] {
|
| 1251 |
+
display: none;
|
| 1252 |
+
}
|
| 1253 |
+
|
| 1254 |
+
.toggle-switch {
|
| 1255 |
+
position: relative;
|
| 1256 |
+
width: 40px;
|
| 1257 |
+
height: 22px;
|
| 1258 |
+
background: var(--outline-variant);
|
| 1259 |
+
border-radius: 11px;
|
| 1260 |
+
transition: background var(--transition);
|
| 1261 |
+
flex-shrink: 0;
|
| 1262 |
+
}
|
| 1263 |
+
|
| 1264 |
+
.toggle-switch::after {
|
| 1265 |
+
content: "";
|
| 1266 |
+
position: absolute;
|
| 1267 |
+
top: 2px;
|
| 1268 |
+
left: 2px;
|
| 1269 |
+
width: 18px;
|
| 1270 |
+
height: 18px;
|
| 1271 |
+
background: var(--surface);
|
| 1272 |
+
border-radius: 50%;
|
| 1273 |
+
transition: transform var(--transition);
|
| 1274 |
+
}
|
| 1275 |
+
|
| 1276 |
+
.toggle-row input:checked + .toggle-switch {
|
| 1277 |
+
background: var(--primary);
|
| 1278 |
+
}
|
| 1279 |
+
|
| 1280 |
+
.toggle-row input:checked + .toggle-switch::after {
|
| 1281 |
+
transform: translateX(18px);
|
| 1282 |
}
|