Skip to content

Commit a529aa9

Browse files
committed
Modifications
1 parent d6554da commit a529aa9

9 files changed

Lines changed: 204 additions & 43 deletions

File tree

docs/website/app.js

Lines changed: 79 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,16 @@ const DocsData = (() => {
4141
const DocsState = {
4242
currentPage: document.body.dataset.page || "index.html",
4343
currentSection: document.body.dataset.defaultSection || "home",
44-
navOpen: false
44+
navOpen: false,
45+
navGroupFilter: "All",
46+
searchOpen: false
4547
};
4648

4749
const DocsElements = {
4850
body: document.body,
51+
topbarSearch: document.getElementById("topbar-search"),
4952
sidebar: document.getElementById("sidebar"),
53+
sidebarTabs: document.getElementById("sidebar-tabs"),
5054
sidebarNav: document.getElementById("sidebar-nav"),
5155
sidebarBackdrop: document.getElementById("sidebar-backdrop"),
5256
menuToggle: document.getElementById("menu-toggle"),
@@ -164,7 +168,9 @@ const Sidebar = (() => {
164168
}
165169

166170
function render() {
167-
DocsElements.sidebarNav.innerHTML = DocsData.groups.map(renderGroup).join("");
171+
renderTabs();
172+
const groups = DocsState.navGroupFilter === "All" ? DocsData.groups : [DocsState.navGroupFilter];
173+
DocsElements.sidebarNav.innerHTML = groups.map(renderGroup).join("");
168174

169175
DocsElements.sidebarNav.querySelectorAll(".nav-item").forEach((item) => {
170176
item.addEventListener("click", (event) => {
@@ -178,6 +184,36 @@ const Sidebar = (() => {
178184
syncActive();
179185
}
180186

187+
function renderTabs() {
188+
if (!DocsElements.sidebarTabs) {
189+
return;
190+
}
191+
192+
const tabs = ["All", ...DocsData.groups];
193+
DocsElements.sidebarTabs.innerHTML = tabs.map((group) => `
194+
<button type="button" class="sidebar-tab" data-group="${group}">${group}</button>
195+
`).join("");
196+
197+
DocsElements.sidebarTabs.querySelectorAll(".sidebar-tab").forEach((button) => {
198+
button.addEventListener("click", () => {
199+
DocsState.navGroupFilter = button.dataset.group || "All";
200+
render();
201+
});
202+
});
203+
204+
syncTabs();
205+
}
206+
207+
function syncTabs() {
208+
if (!DocsElements.sidebarTabs) {
209+
return;
210+
}
211+
212+
DocsElements.sidebarTabs.querySelectorAll(".sidebar-tab").forEach((button) => {
213+
button.classList.toggle("active", button.dataset.group === DocsState.navGroupFilter);
214+
});
215+
}
216+
181217
function syncActive() {
182218
const active = DocsHelpers.currentEntry();
183219

@@ -205,11 +241,23 @@ const Sidebar = (() => {
205241
})();
206242

207243
const Search = (() => {
244+
function setOpen(open) {
245+
DocsState.searchOpen = open;
246+
DocsElements.topbarSearch?.classList.toggle("open", open);
247+
if (!open && DocsElements.searchResults) {
248+
DocsElements.searchResults.innerHTML = "";
249+
}
250+
}
251+
208252
function renderResults(query = "") {
253+
if (!DocsElements.searchResults) {
254+
return;
255+
}
256+
209257
const needle = query.trim().toLowerCase();
210258
const results = DocsData.entries.filter((entry) => {
211259
if (needle.length === 0) {
212-
return DocsData.pages[entry.page]?.title === DocsData.pages[DocsState.currentPage]?.title;
260+
return true;
213261
}
214262

215263
return [
@@ -237,21 +285,38 @@ const Search = (() => {
237285
button.addEventListener("click", () => {
238286
const entry = DocsHelpers.findEntry(button.dataset.sectionId);
239287
Sidebar.setOpen(false);
288+
setOpen(false);
289+
DocsElements.searchInput?.blur();
240290
DocsHelpers.goToEntry(entry);
241291
});
242292
});
243293
}
244294

245295
function bind() {
246296
DocsElements.searchInput?.addEventListener("input", (event) => {
297+
setOpen(true);
247298
renderResults(event.target.value);
248299
});
249300
DocsElements.searchInput?.addEventListener("focus", () => {
301+
setOpen(true);
302+
renderResults(DocsElements.searchInput.value);
303+
});
304+
DocsElements.searchInput?.addEventListener("click", () => {
305+
setOpen(true);
250306
renderResults(DocsElements.searchInput.value);
251307
});
308+
document.addEventListener("click", (event) => {
309+
if (!DocsElements.topbarSearch) {
310+
return;
311+
}
312+
if (DocsElements.topbarSearch.contains(event.target)) {
313+
return;
314+
}
315+
setOpen(false);
316+
});
252317
}
253318

254-
return { bind, renderResults };
319+
return { bind, renderResults, setOpen };
255320
})();
256321

257322
const ContactPanel = (() => {
@@ -394,6 +459,8 @@ const App = (() => {
394459
if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === "k") {
395460
event.preventDefault();
396461
DocsElements.searchInput?.focus();
462+
Search.setOpen(true);
463+
Search.renderResults(DocsElements.searchInput?.value || "");
397464
return;
398465
}
399466

@@ -406,6 +473,8 @@ const App = (() => {
406473
if (!editable) {
407474
event.preventDefault();
408475
DocsElements.searchInput?.focus();
476+
Search.setOpen(true);
477+
Search.renderResults(DocsElements.searchInput?.value || "");
409478
}
410479
return;
411480
}
@@ -415,6 +484,11 @@ const App = (() => {
415484
ContactPanel.closeOpen();
416485
return;
417486
}
487+
if (DocsState.searchOpen) {
488+
Search.setOpen(false);
489+
DocsElements.searchInput?.blur();
490+
return;
491+
}
418492
if (DocsState.navOpen) {
419493
Sidebar.setOpen(false);
420494
} else if (DocsElements.searchInput && document.activeElement === DocsElements.searchInput) {
@@ -428,7 +502,7 @@ const App = (() => {
428502
DocsHelpers.syncCurrentSection();
429503
Sidebar.render();
430504
Search.bind();
431-
Search.renderResults("");
505+
Search.setOpen(false);
432506
bindHomeEasterEgg();
433507
bindGlobalEvents();
434508

docs/website/cli-reference.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
</div>
3939
</div>
4040
</div>
41+
<div id="topbar-search" class="topbar-search">
42+
<input id="docs-search-input" type="search" placeholder="Quick jump docs..." autocomplete="off">
43+
<div id="docs-search-results" class="topbar-search-results" aria-live="polite"></div>
44+
</div>
4145
<div id="topbar-actions">
4246
<button id="menu-toggle" class="topbar-action topbar-action-menu" type="button">Menu</button>
4347
</div>
@@ -50,13 +54,9 @@
5054
<nav id="sidebar" aria-label="Documentation navigation">
5155
<div class="sidebar-panel-head">
5256
<div class="sidebar-kicker">CLI</div>
53-
<label class="sidebar-search" for="docs-search-input">
54-
<span>Search Docs</span>
55-
<input id="docs-search-input" type="search" placeholder="Try scan, passive, flags, syntax..." autocomplete="off">
56-
</label>
57-
<div id="docs-search-results" class="sidebar-search-results" aria-live="polite"></div>
5857
<p class="sidebar-note">Commands, shared flags, and syntax patterns for everyday operator use.</p>
5958
</div>
59+
<div id="sidebar-tabs" class="sidebar-tabs" role="tablist" aria-label="Documentation groups"></div>
6060
<div id="sidebar-nav"></div>
6161
</nav>
6262
<button id="sidebar-backdrop" type="button" aria-label="Close navigation"></button>

docs/website/getting-started.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
</div>
3939
</div>
4040
</div>
41+
<div id="topbar-search" class="topbar-search">
42+
<input id="docs-search-input" type="search" placeholder="Quick jump docs..." autocomplete="off">
43+
<div id="docs-search-results" class="topbar-search-results" aria-live="polite"></div>
44+
</div>
4145
<div id="topbar-actions">
4246
<button id="menu-toggle" class="topbar-action topbar-action-menu" type="button">Menu</button>
4347
</div>
@@ -50,13 +54,9 @@
5054
<nav id="sidebar" aria-label="Documentation navigation">
5155
<div class="sidebar-panel-head">
5256
<div class="sidebar-kicker">Start Here</div>
53-
<label class="sidebar-search" for="docs-search-input">
54-
<span>Search Docs</span>
55-
<input id="docs-search-input" type="search" placeholder="Try install, quick start, testing..." autocomplete="off">
56-
</label>
57-
<div id="docs-search-results" class="sidebar-search-results" aria-live="polite"></div>
5857
<p class="sidebar-note">Install the framework, validate it, and follow a safe first-run path before touching a real authorized target.</p>
5958
</div>
59+
<div id="sidebar-tabs" class="sidebar-tabs" role="tablist" aria-label="Documentation groups"></div>
6060
<div id="sidebar-nav"></div>
6161
</nav>
6262
<button id="sidebar-backdrop" type="button" aria-label="Close navigation"></button>

docs/website/index.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@
4040
</div>
4141
</div>
4242
</div>
43+
<div id="topbar-search" class="topbar-search">
44+
<input id="docs-search-input" type="search" placeholder="Quick jump docs..." autocomplete="off">
45+
<div id="docs-search-results" class="topbar-search-results" aria-live="polite"></div>
46+
</div>
4347
<div id="topbar-actions">
4448
<button id="menu-toggle" class="topbar-action topbar-action-menu" type="button">Menu</button>
4549
</div>
@@ -54,13 +58,9 @@
5458
<nav id="sidebar" aria-label="Documentation navigation">
5559
<div class="sidebar-panel-head">
5660
<div class="sidebar-kicker">Docs Control</div>
57-
<label class="sidebar-search" for="docs-search-input">
58-
<span>Search Docs</span>
59-
<input id="docs-search-input" type="search" placeholder="Try install, pipeline, web, outputs, testing..." autocomplete="off">
60-
</label>
61-
<div id="docs-search-results" class="sidebar-search-results" aria-live="polite"></div>
6261
<p class="sidebar-note">A real multi-page docs shell for the framework, still a little handmade on purpose.</p>
6362
</div>
63+
<div id="sidebar-tabs" class="sidebar-tabs" role="tablist" aria-label="Documentation groups"></div>
6464
<div id="sidebar-nav"></div>
6565
</nav>
6666
<button id="sidebar-backdrop" type="button" aria-label="Close navigation"></button>

docs/website/modes.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
</div>
3939
</div>
4040
</div>
41+
<div id="topbar-search" class="topbar-search">
42+
<input id="docs-search-input" type="search" placeholder="Quick jump docs..." autocomplete="off">
43+
<div id="docs-search-results" class="topbar-search-results" aria-live="polite"></div>
44+
</div>
4145
<div id="topbar-actions">
4246
<button id="menu-toggle" class="topbar-action topbar-action-menu" type="button">Menu</button>
4347
</div>
@@ -50,13 +54,9 @@
5054
<nav id="sidebar" aria-label="Documentation navigation">
5155
<div class="sidebar-panel-head">
5256
<div class="sidebar-kicker">Modes</div>
53-
<label class="sidebar-search" for="docs-search-input">
54-
<span>Search Docs</span>
55-
<input id="docs-search-input" type="search" placeholder="Try web session, lab, examples..." autocomplete="off">
56-
</label>
57-
<div id="docs-search-results" class="sidebar-search-results" aria-live="polite"></div>
5857
<p class="sidebar-note">Console, browser control panel, wizard flow, lab mode, and example operator paths.</p>
5958
</div>
59+
<div id="sidebar-tabs" class="sidebar-tabs" role="tablist" aria-label="Documentation groups"></div>
6060
<div id="sidebar-nav"></div>
6161
</nav>
6262
<button id="sidebar-backdrop" type="button" aria-label="Close navigation"></button>

docs/website/project.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
</div>
3939
</div>
4040
</div>
41+
<div id="topbar-search" class="topbar-search">
42+
<input id="docs-search-input" type="search" placeholder="Quick jump docs..." autocomplete="off">
43+
<div id="docs-search-results" class="topbar-search-results" aria-live="polite"></div>
44+
</div>
4145
<div id="topbar-actions">
4246
<button id="menu-toggle" class="topbar-action topbar-action-menu" type="button">Menu</button>
4347
</div>
@@ -50,13 +54,9 @@
5054
<nav id="sidebar" aria-label="Documentation navigation">
5155
<div class="sidebar-panel-head">
5256
<div class="sidebar-kicker">Project</div>
53-
<label class="sidebar-search" for="docs-search-input">
54-
<span>Search Docs</span>
55-
<input id="docs-search-input" type="search" placeholder="Try project, reports, testing..." autocomplete="off">
56-
</label>
57-
<div id="docs-search-results" class="sidebar-search-results" aria-live="polite"></div>
5857
<p class="sidebar-note">Project identity, license context, and the main repository links in one short page.</p>
5958
</div>
59+
<div id="sidebar-tabs" class="sidebar-tabs" role="tablist" aria-label="Documentation groups"></div>
6060
<div id="sidebar-nav"></div>
6161
</nav>
6262
<button id="sidebar-backdrop" type="button" aria-label="Close navigation"></button>

docs/website/reporting.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
</div>
3939
</div>
4040
</div>
41+
<div id="topbar-search" class="topbar-search">
42+
<input id="docs-search-input" type="search" placeholder="Quick jump docs..." autocomplete="off">
43+
<div id="docs-search-results" class="topbar-search-results" aria-live="polite"></div>
44+
</div>
4145
<div id="topbar-actions">
4246
<button id="menu-toggle" class="topbar-action topbar-action-menu" type="button">Menu</button>
4347
</div>
@@ -50,13 +54,9 @@
5054
<nav id="sidebar" aria-label="Documentation navigation">
5155
<div class="sidebar-panel-head">
5256
<div class="sidebar-kicker">Reports</div>
53-
<label class="sidebar-search" for="docs-search-input">
54-
<span>Search Docs</span>
55-
<input id="docs-search-input" type="search" placeholder="Try outputs, config, storage, testing..." autocomplete="off">
56-
</label>
57-
<div id="docs-search-results" class="sidebar-search-results" aria-live="polite"></div>
5857
<p class="sidebar-note">Where the framework writes data, how formats differ, and how to verify the whole stack before publishing or use.</p>
5958
</div>
59+
<div id="sidebar-tabs" class="sidebar-tabs" role="tablist" aria-label="Documentation groups"></div>
6060
<div id="sidebar-nav"></div>
6161
</nav>
6262
<button id="sidebar-backdrop" type="button" aria-label="Close navigation"></button>

0 commit comments

Comments
 (0)