Skip to content

Commit 283d7f0

Browse files
committed
chore: add no-JS state for search button and refactor into a component
1 parent 3b91494 commit 283d7f0

2 files changed

Lines changed: 45 additions & 14 deletions

File tree

templates/v3/includes/_header_v3.html

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
Note: Subcomponents inherit the full parent context. Specifically:
1414
_header_nav_link.html uses: url, label, nav_id, is_unread, active_nav_item
15+
_header_search_bar.html uses: current_version
1516
_header_utilities.html uses: disable_theme_switcher, request, avatar_id, version_menu_id
1617

1718
Usage:
@@ -69,20 +70,7 @@
6970
</div>
7071

7172
{% comment %} Search — responsive: full bar on desktop, button on mobile {% endcomment %}
72-
<search class="header__search-bar">
73-
<button type="button"
74-
id="gecko-search-button"
75-
class="header__search-input-trigger"
76-
data-current-boost-version="{{ current_version.stripped_boost_url_slug }}"
77-
data-theme-mode="light"
78-
data-font-family="var(--font-sans)">
79-
<span class="header__search-icon" aria-hidden="true">
80-
{% include "includes/icon.html" with icon_name="search" icon_class="header__icon" icon_size=16 %}
81-
</span>
82-
Search
83-
</button>
84-
<span class="header__search-kbd" aria-hidden="true">CTRL+K</span>
85-
</search>
73+
{% include "v3/includes/header/_header_search_bar.html" %}
8674
{% comment %} Desktop & tablet utilities (hidden on mobile) {% endcomment %}
8775
<div class="header__right">
8876
{% include "v3/includes/header/_header_utilities.html" with avatar_id="desktop-user-menu" version_menu_id="desktop-version-menu" %}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{% comment %}
2+
Header Search Bar — Gecko-powered search trigger with JS-disabled fallback.
3+
4+
The search modal is imported from static/js/boost-gecko/.
5+
6+
When JavaScript is enabled, the button opens the Gecko search overlay (wired
7+
in static/js/search-shortcut.js; Ctrl/Cmd+K shortcut). When JavaScript is
8+
disabled, the button and keyboard hint are hidden via an inline <style> in
9+
<noscript>, and a non-interactive span explains that search is unavailable.
10+
11+
Variables:
12+
current_version (object, required) — current Boost release (from context processor)
13+
14+
Usage:
15+
{% include "v3/includes/header/_header_search_bar.html" %}
16+
{% endcomment %}
17+
<search class="header__search-bar">
18+
<button type="button"
19+
id="gecko-search-button"
20+
class="header__search-input-trigger"
21+
data-current-boost-version="{{ current_version.stripped_boost_url_slug }}"
22+
data-theme-mode="light"
23+
data-font-family="var(--font-sans)">
24+
<span class="header__search-icon" aria-hidden="true">
25+
{% include "includes/icon.html" with icon_name="search" icon_class="header__icon" icon_size=16 %}
26+
</span>
27+
Search
28+
</button>
29+
<span class="header__search-kbd" aria-hidden="true">CTRL+K</span>
30+
<noscript>
31+
<style>
32+
#gecko-search-button,
33+
.header__search-kbd { display: none; }
34+
.header__search-bar > noscript { display: contents; }
35+
</style>
36+
<span class="header__search-input-trigger" aria-disabled="true">
37+
<span class="header__search-icon" aria-hidden="true">
38+
{% include "includes/icon.html" with icon_name="search" icon_class="header__icon" icon_size=16 %}
39+
</span>
40+
Search is not available with JS disabled
41+
</span>
42+
</noscript>
43+
</search>

0 commit comments

Comments
 (0)