Skip to content

Commit 3dab827

Browse files
committed
Add support for search on the responsive secondary bar
1 parent 3a50495 commit 3dab827

File tree

4 files changed

+48
-9
lines changed

4 files changed

+48
-9
lines changed

src/resources/projects/website/navigation/quarto-nav.scss

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,14 @@ nav .nav-item.compact .nav-link {
241241
margin-top: -6px;
242242
}
243243

244+
@include media-breakpoint-down(lg) {
245+
#quarto-sidebar {
246+
div.sidebar-header {
247+
padding-top: 0.2em;
248+
}
249+
}
250+
}
251+
244252
.sidebar-header-stacked .sidebar-title {
245253
margin-top: 0.6rem;
246254
}
@@ -345,6 +353,11 @@ $sidebar-section-bottom-margin: 0.2em;
345353
.quarto-secondary-nav {
346354
display: block;
347355

356+
button.quarto-search-button {
357+
padding-right: 0em;
358+
padding-left: 2em;
359+
}
360+
348361
button.quarto-btn-toggle {
349362
margin-left: -0.75rem;
350363
margin-right: 0.15rem;

src/resources/projects/website/search/quarto-search.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,20 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
8080
// the media query since we generate different HTML for sidebar overlays than we do
8181
// for sidebar input UI)
8282
const detachedMediaQuery =
83-
quartoSearchOptions.type === "overlay"
84-
? "all"
85-
: quartoSearchOptions.location === "navbar"
86-
? "(max-width: 991px)"
87-
: "none";
83+
quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)";
8884

8985
// If configured, include the analytics client to send insights
9086
const plugins = configurePlugins(quartoSearchOptions);
9187

9288
let lastState = null;
93-
const { setIsOpen } = autocomplete({
89+
const { setIsOpen, setQuery, setCollections } = autocomplete({
9490
container: searchEl,
9591
detachedMediaQuery: detachedMediaQuery,
9692
defaultActiveItemId: 0,
9793
panelContainer: "#quarto-search-results",
9894
panelPlacement: quartoSearchOptions["panel-placement"],
9995
debug: false,
96+
openOnFocus: true,
10097
plugins,
10198
classNames: {
10299
form: "d-flex",
@@ -299,9 +296,15 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
299296
},
300297
templates: {
301298
noResults({ createElement }) {
299+
const hasQuery = lastState.query;
300+
302301
return createElement(
303302
"div",
304-
{ class: "quarto-search-no-results" },
303+
{
304+
class: `quarto-search-no-results${
305+
hasQuery ? "" : " no-query"
306+
}`,
307+
},
305308
language["search-no-results-text"]
306309
);
307310
},
@@ -361,6 +364,12 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
361364
},
362365
});
363366

367+
window.quartoOpenSearch = () => {
368+
setIsOpen(false);
369+
setIsOpen(true);
370+
focusSearchInput();
371+
};
372+
364373
// Remove the labeleledby attribute since it is pointing
365374
// to a non-existent label
366375
if (quartoSearchOptions.type === "overlay") {

src/resources/projects/website/search/quarto-search.scss

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ $quarto-search-collapse-icon-size: 26px !default;
3838

3939
#quarto-sidebar {
4040
.sidebar-search {
41+
@include media-breakpoint-down(lg) {
42+
display: none;
43+
}
4144
.aa-Autocomplete {
4245
width: $quarto-sidebar-search-input-width;
4346
}
@@ -227,6 +230,18 @@ $quarto-search-collapse-icon-size: 26px !default;
227230
}
228231
}
229232

233+
.aa-PanelLayout:empty {
234+
display: none;
235+
}
236+
237+
.quarto-search-no-results.no-query {
238+
display: none;
239+
}
240+
241+
.aa-Source:has(.no-query) {
242+
display: none;
243+
}
244+
230245
#quarto-search-results .aa-Panel {
231246
border: solid $input-border-color $input-border-width;
232247
}

src/resources/projects/website/templates/nav-before-body.ejs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ const navbarToolsClass = (nav.navbar && nav.navbar.right) ? 'quarto-navbar-tools
5959
<h1 class="quarto-secondary-nav-title"></h1>
6060
<a class="flex-grow-1" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar,#quarto-sidebar-glass"
6161
aria-controls="quarto-sidebar" aria-expanded="false" aria-label="Toggle sidebar navigation"
62-
onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
63-
62+
onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
6463
</a>
64+
<button type="button" class="btn quarto-search-button" aria-label="Search" onclick="window.quartoOpenSearch();">
65+
<i class="bi bi-search"></i>
66+
</button>
6567
</div>
6668
</nav>
6769
<% } %>

0 commit comments

Comments
 (0)