jekyll-theme-zer0 1.29.0 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +886 -2
- data/_data/README.md +2 -0
- data/_data/ai.yml +5 -3
- data/_data/ai_pricing.yml +36 -0
- data/_data/backlog.yml +196 -22
- data/_data/consumers.yml +147 -5
- data/_data/features.yml +147 -21
- data/_data/feedback_types.yml +17 -12
- data/_data/landing.yml +5 -2
- data/_data/navigation/quickstart.yml +4 -0
- data/_data/site_builder.yml +874 -0
- data/_data/theme-manifest.yml +132 -122
- data/_data/ui-text.yml +19 -0
- data/_includes/README.md +11 -1
- data/_includes/analytics/posthog.html +30 -11
- data/_includes/components/README.md +1 -1
- data/_includes/components/admin-links.html +2 -2
- data/_includes/components/admin-tabs.html +2 -2
- data/_includes/components/ai-chat.html +14 -11
- data/_includes/components/analytics-dashboard.html +8 -8
- data/_includes/components/author-bio.html +1 -1
- data/_includes/components/author-card.html +10 -2
- data/_includes/components/author-eeat.html +4 -4
- data/_includes/components/background-customizer.html +8 -8
- data/_includes/components/background-image.html +120 -0
- data/_includes/components/background-settings.html +28 -15
- data/_includes/components/collection-manager.html +5 -5
- data/_includes/components/component-showcase.html +13 -13
- data/_includes/components/config-editor.html +12 -12
- data/_includes/components/config-viewer.html +8 -8
- data/_includes/components/cookie-consent.html +41 -41
- data/_includes/components/cta-button.html +7 -2
- data/_includes/components/dev-shortcuts.html +7 -7
- data/_includes/components/env-dashboard.html +8 -8
- data/_includes/components/env-switcher.html +9 -9
- data/_includes/components/feature-card.html +2 -2
- data/_includes/components/halfmoon.html +2 -2
- data/_includes/components/info-section.html +36 -36
- data/_includes/components/js-cdn.html +15 -15
- data/_includes/components/language-toggle.html +4 -4
- data/_includes/components/mermaid.html +79 -435
- data/_includes/components/nanobar.html +5 -5
- data/_includes/components/nav-editor.html +2 -2
- data/_includes/components/nav-export.html +2 -2
- data/_includes/components/nav-overview.html +2 -2
- data/_includes/components/page-feedback.html +45 -30
- data/_includes/components/page-views-init.html +1 -1
- data/_includes/components/post-card.html +22 -22
- data/_includes/components/post-type-badge.html +2 -2
- data/_includes/components/powered-by.html +2 -2
- data/_includes/components/preview-image.html +28 -3
- data/_includes/components/quick-index.html +2 -2
- data/_includes/components/search-modal.html +27 -2
- data/_includes/components/searchbar.html +2 -2
- data/_includes/components/svg-background.html +2 -2
- data/_includes/components/theme-customizer.html +2 -2
- data/_includes/components/theme-info.html +6 -6
- data/_includes/components/theme-preview-gallery.html +23 -23
- data/_includes/content/giscus.html +2 -2
- data/_includes/content/intro.html +15 -8
- data/_includes/content/jsonld-faq.html +2 -2
- data/_includes/content/jsonld-software.html +2 -2
- data/_includes/content/seo.html +12 -4
- data/_includes/content/sitemap.html +247 -290
- data/_includes/content/toc.html +183 -183
- data/_includes/core/branding.html +13 -20
- data/_includes/core/console-capture.html +32 -74
- data/_includes/core/favicon.html +49 -7
- data/_includes/core/footer-fabs.html +17 -3
- data/_includes/core/footer.html +31 -18
- data/_includes/core/head.html +128 -92
- data/_includes/core/header.html +85 -54
- data/_includes/core/tokens-inline.html +16 -1
- data/_includes/docs/bootstrap-docs.html +8 -8
- data/_includes/landing/landing-install-cards.html +2 -2
- data/_includes/landing/landing-quick-links.html +1 -1
- data/_includes/navigation/admin-nav.html +2 -2
- data/_includes/navigation/nav-tree.html +8 -8
- data/_includes/navigation/navbar.html +21 -18
- data/_includes/navigation/section-sidebar.html +16 -16
- data/_includes/navigation/sidebar-config.html +36 -2
- data/_includes/navigation/sidebar-left.html +15 -15
- data/_includes/navigation/sidebar-right.html +6 -6
- data/_includes/obsidian/full-graph.html +2 -2
- data/_includes/setup/claude-session.html +72 -0
- data/_includes/setup/prereq-checklist.html +90 -0
- data/_includes/setup/wizard.html +910 -291
- data/_includes/stats/stats-categories.html +8 -8
- data/_includes/stats/stats-header.html +14 -14
- data/_includes/stats/stats-metrics.html +12 -12
- data/_includes/stats/stats-no-data.html +12 -12
- data/_includes/stats/stats-overview.html +6 -6
- data/_includes/stats/stats-tags.html +8 -8
- data/_layouts/404.html +38 -24
- data/_layouts/admin.html +22 -22
- data/_layouts/article.html +54 -37
- data/_layouts/author.html +20 -20
- data/_layouts/authors.html +2 -2
- data/_layouts/book-abc.html +12 -12
- data/_layouts/book-story.html +15 -15
- data/_layouts/book.html +12 -12
- data/_layouts/collection.html +33 -33
- data/_layouts/cookbook.html +12 -12
- data/_layouts/default.html +27 -24
- data/_layouts/home.html +36 -24
- data/_layouts/index.html +10 -10
- data/_layouts/landing.html +17 -17
- data/_layouts/news.html +44 -44
- data/_layouts/note.html +40 -39
- data/_layouts/notebook.html +36 -35
- data/_layouts/recipe.html +24 -24
- data/_layouts/root.html +95 -55
- data/_layouts/section.html +23 -23
- data/_layouts/setup.html +3 -3
- data/_layouts/sitemap-collection.html +49 -49
- data/_layouts/stats.html +40 -40
- data/_layouts/tag.html +12 -12
- data/_layouts/welcome.html +21 -21
- data/_sass/components/_cookie-banner.scss +48 -0
- data/_sass/components/_mermaid.scss +375 -0
- data/_sass/components/_setup-wizard.scss +588 -41
- data/_sass/components/_ui-enhancements.scss +11 -0
- data/_sass/core/_navbar.scss +147 -100
- data/_sass/core/_sidebar-extras.scss +2 -14
- data/_sass/core/code-copy.scss +27 -8
- data/_sass/layouts/_navbar-extras.scss +14 -4
- data/assets/css/extension-points-demo.css +27 -0
- data/assets/css/main.scss +1 -0
- data/assets/data/wiki-index.json +19 -0
- data/assets/js/ai-chat.js +47 -5
- data/assets/js/auto-hide-nav.js +53 -13
- data/assets/js/code-copy.js +72 -1
- data/assets/js/extension-points-demo.js +48 -0
- data/assets/js/fleet-feedback-capture.js +124 -0
- data/assets/js/fleet-feedback.js +853 -0
- data/assets/js/mermaid-diagrams.js +1373 -0
- data/assets/js/modules/navigation/config.js +9 -6
- data/assets/js/modules/navigation/scroll-spy.js +315 -80
- data/assets/js/modules/theme/appearance.js +8 -2
- data/assets/js/obsidian-local-graph.js +27 -5
- data/assets/js/obsidian-wiki-links.js +8 -3
- data/assets/js/page-feedback.js +125 -192
- data/assets/js/search-modal.js +26 -0
- data/assets/js/setup-wizard.js +2119 -363
- data/assets/js/site-builder.js +1834 -0
- data/assets/js/ui-enhancements.js +11 -3
- data/scripts/README.md +15 -0
- data/scripts/ai/README.md +38 -0
- data/scripts/ai/api_call.rb +124 -0
- data/scripts/ai/usage.rb +314 -0
- data/scripts/ai/usage_report.rb +225 -0
- data/scripts/ci/test_visual_evidence_autogen.py +403 -0
- data/scripts/ci/visual_evidence_autogen.py +1070 -0
- data/scripts/content-review.rb +20 -1
- data/scripts/features/install-preview-generator +1 -1
- data/scripts/lib/README.md +12 -0
- data/scripts/lib/preview_generator.py +2 -2
- data/scripts/test/integration/mermaid +22 -8
- data/scripts/test/lib/run_tests.sh +1 -0
- data/scripts/test/lib/test_visual_evidence_autogen.sh +24 -0
- data/scripts/translate.rb +23 -1
- metadata +21 -2
data/_includes/core/header.html
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% comment %} Feature: ZER0-011 {% endcomment %}
|
|
2
|
-
|
|
2
|
+
{% comment %}
|
|
3
3
|
===================================================================
|
|
4
4
|
HEADER - Main Navigation and Site Header
|
|
5
5
|
===================================================================
|
|
@@ -36,48 +36,67 @@
|
|
|
36
36
|
- When `position: navbar`, the bar mounts inside `#top-progress-target` below
|
|
37
37
|
- Otherwise it floats fixed to the viewport (top or bottom)
|
|
38
38
|
===================================================================
|
|
39
|
-
|
|
39
|
+
{% endcomment %}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
{% comment %} ================================ {% endcomment %}
|
|
42
|
+
{% comment %} SKIP TO CONTENT LINK {% endcomment %}
|
|
43
|
+
{% comment %} ================================ {% endcomment %}
|
|
44
|
+
{% comment %} UI strings resolve per page language (core/i18n.html sets `ui`) {% endcomment %}
|
|
45
45
|
{%- include core/i18n.html -%}
|
|
46
|
-
|
|
46
|
+
{% comment %} Accessibility: allows keyboard users to skip navigation {% endcomment %}
|
|
47
47
|
<a href="#main-content" class="visually-hidden-focusable position-absolute top-0 start-0 z-3 m-3 btn btn-primary">
|
|
48
48
|
{{ ui.skip_main_content | default: "Skip to main content" }}
|
|
49
49
|
</a>
|
|
50
50
|
|
|
51
51
|
<header id="navbar" class="container-fluid text-center fixed-top" role="banner">
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
{% comment %} ================================ {% endcomment %}
|
|
54
|
+
{% comment %} TOP NAVIGATION BAR {% endcomment %}
|
|
55
|
+
{% comment %} ================================ {% endcomment %}
|
|
56
56
|
<div class="navbar navbar-expand-lg bg-body-tertiary flex-nowrap w-100 bottom-shadow">
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
{% comment %} ========================== {% endcomment %}
|
|
59
|
+
{% comment %} MAIN NAVIGATION CONTAINER {% endcomment %}
|
|
60
|
+
{% comment %} ========================== {% endcomment %}
|
|
61
61
|
<nav class="container-fluid order-2 order-lg-1 d-flex align-items-center gap-1 flex-nowrap navbar-main w-100" aria-label="Primary navigation">
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
{% comment %} Leading cluster: sidebar toggle + brand + titles (grid column 1 on lg+) {% endcomment %}
|
|
64
64
|
<div class="navbar-main-start d-flex align-items-center gap-1 gap-lg-2 min-w-0 flex-shrink-1 flex-grow-1">
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
{% comment %} ========================== {% endcomment %}
|
|
67
|
+
{% comment %} MOBILE MENU CONTROLS {% endcomment %}
|
|
68
|
+
{% comment %} ========================== {% endcomment %}
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
{% comment %} Left Sidebar Toggle - Mobile view only. Uses the shared
|
|
71
71
|
resolver (navigation/sidebar-config.html) so this gate can
|
|
72
|
-
never drift from the default layout's aside.
|
|
72
|
+
never drift from the default layout's aside. {% endcomment %}
|
|
73
73
|
{% include navigation/sidebar-config.html %}
|
|
74
74
|
|
|
75
|
-
{
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
{%- comment -%}
|
|
76
|
+
Two conditions, and BOTH are required (issue #373).
|
|
77
|
+
|
|
78
|
+
`sidebar_has_content` asks "is there nav content to show". It is
|
|
79
|
+
not enough on its own: this include is pulled in by
|
|
80
|
+
_layouts/root.html, so it renders on EVERY layout, while
|
|
81
|
+
`#bdSidebar` is emitted by _layouts/default.html alone. On a
|
|
82
|
+
layout that inherits root directly — admin, stats, 404, section,
|
|
83
|
+
home … — the toggle rendered pointing at an offcanvas that was
|
|
84
|
+
never in the document: a dead control, and aria-controls
|
|
85
|
+
dangling into nothing for assistive tech. Measured before the
|
|
86
|
+
fix: 37 of 415 built pages.
|
|
87
|
+
|
|
88
|
+
The unified drawer is exempt because #zer0UnifiedDrawer IS
|
|
89
|
+
emitted from root.html, so it exists on every layout — that
|
|
90
|
+
target is always real and the toggle is always live.
|
|
91
|
+
{%- endcomment -%}
|
|
92
|
+
{% if sidebar_has_content and site.navigation.unified_mobile_drawer %}
|
|
93
|
+
{%- assign _sidebar_toggle_ok = true -%}
|
|
94
|
+
{% elsif sidebar_has_content and sidebar_offcanvas_rendered %}
|
|
95
|
+
{%- assign _sidebar_toggle_ok = true -%}
|
|
96
|
+
{% else %}
|
|
97
|
+
{%- assign _sidebar_toggle_ok = false -%}
|
|
98
|
+
{% endif %}
|
|
99
|
+
{% if _sidebar_toggle_ok %}
|
|
81
100
|
{%- if site.navigation.unified_mobile_drawer -%}
|
|
82
101
|
{%- assign _sidebar_target = "#zer0UnifiedDrawer" -%}
|
|
83
102
|
{%- assign _sidebar_controls = "zer0UnifiedDrawer" -%}
|
|
@@ -98,11 +117,11 @@
|
|
|
98
117
|
</div>
|
|
99
118
|
{% endif %}
|
|
100
119
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
120
|
+
{% comment %} ========================== {% endcomment %}
|
|
121
|
+
{% comment %} BRAND AND HOME NAVIGATION {% endcomment %}
|
|
122
|
+
{% comment %} ========================== {% endcomment %}
|
|
104
123
|
<div class="navbar-brand-group d-inline-flex align-items-center gap-2">
|
|
105
|
-
|
|
124
|
+
{% comment %} Home Navigation Button (Desktop only) {% endcomment %}
|
|
106
125
|
<div class="navbar-home-links d-none" role="navigation" aria-label="Quick navigation">
|
|
107
126
|
{%- assign nav_home = site.data.navigation.home -%}
|
|
108
127
|
{%- if nav_home and nav_home.size > 0 -%}
|
|
@@ -118,18 +137,18 @@
|
|
|
118
137
|
{%- endif -%}
|
|
119
138
|
</div>
|
|
120
139
|
|
|
121
|
-
|
|
122
|
-
|
|
140
|
+
{% comment %} Brand Logo Link to Root {% endcomment %}
|
|
141
|
+
{% comment %} Logo path configured in _config.yml {% endcomment %}
|
|
123
142
|
{% capture logo_path %}{{ site.logo }}{% endcapture %}
|
|
124
143
|
<a class="navbar-brand" href="{{ site.baseurl }}/" aria-label="Home - {{ site.title }}" {% if page.url == '/' %}aria-current="page"{% endif %}>
|
|
125
144
|
<img src="{{ logo_path | relative_url }}" alt="{{ site.title }} logo" width="30" height="30">
|
|
126
145
|
</a>
|
|
127
146
|
</div>
|
|
128
147
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
148
|
+
{% comment %} ========================== {% endcomment %}
|
|
149
|
+
{% comment %} SITE BRANDING SECTION {% endcomment %}
|
|
150
|
+
{% comment %} ========================== {% endcomment %}
|
|
151
|
+
{% comment %} Site title and subtitle display {% endcomment %}
|
|
133
152
|
{% include core/branding.html %}
|
|
134
153
|
|
|
135
154
|
</div>
|
|
@@ -141,21 +160,21 @@
|
|
|
141
160
|
{%- endcomment -%}
|
|
142
161
|
{% include navigation/navbar-mobile-quicklinks.html %}
|
|
143
162
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
163
|
+
{% comment %} ========================== {% endcomment %}
|
|
164
|
+
{% comment %} MAIN NAVIGATION MENU {% endcomment %}
|
|
165
|
+
{% comment %} ========================== {% endcomment %}
|
|
166
|
+
{% comment %} Primary navigation items from _data/navigation.yml {% endcomment %}
|
|
148
167
|
{% include navigation/navbar.html %}
|
|
149
168
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
{% comment %} ========================== {% endcomment %}
|
|
170
|
+
{% comment %} UTILITY CONTROLS {% endcomment %}
|
|
171
|
+
{% comment %} ========================== {% endcomment %}
|
|
153
172
|
<div class="navbar-utility-controls d-flex align-items-center flex-shrink-0" role="group" aria-label="Utility controls">
|
|
154
|
-
|
|
173
|
+
{% comment %} Language selection lives in the Settings offcanvas
|
|
155
174
|
(components/info-section.html, Appearance tab) so the bar
|
|
156
|
-
keeps its width for the main navigation items.
|
|
175
|
+
keeps its width for the main navigation items. {% endcomment %}
|
|
157
176
|
|
|
158
|
-
|
|
177
|
+
{% comment %} Search Modal Toggle {% endcomment %}
|
|
159
178
|
<button
|
|
160
179
|
class="btn nav-search-button"
|
|
161
180
|
type="button"
|
|
@@ -170,7 +189,7 @@
|
|
|
170
189
|
<kbd class="nav-search-kbd d-none d-xl-inline-flex" aria-hidden="true">/</kbd>
|
|
171
190
|
</button>
|
|
172
191
|
|
|
173
|
-
|
|
192
|
+
{% comment %} Settings Offcanvas Toggle {% endcomment %}
|
|
174
193
|
<button
|
|
175
194
|
class="btn nav-settings-button d-none d-lg-inline-flex"
|
|
176
195
|
type="button"
|
|
@@ -183,7 +202,7 @@
|
|
|
183
202
|
<i class="{{site.default_icon}} bi-gear" aria-hidden="true"></i>
|
|
184
203
|
</button>
|
|
185
204
|
|
|
186
|
-
|
|
205
|
+
{% comment %} Navigation Menu Toggle - Mobile view {% endcomment %}
|
|
187
206
|
{%- if site.navigation.unified_mobile_drawer -%}
|
|
188
207
|
{%- assign _menu_target = "#zer0UnifiedDrawer" -%}
|
|
189
208
|
{%- assign _menu_controls = "zer0UnifiedDrawer" -%}
|
|
@@ -191,27 +210,39 @@
|
|
|
191
210
|
{%- assign _menu_target = "#bdNavbar" -%}
|
|
192
211
|
{%- assign _menu_controls = "bdNavbar" -%}
|
|
193
212
|
{%- endif -%}
|
|
213
|
+
{% comment %} Below lg this is a LABELLED control, not a bare glyph (#405).
|
|
214
|
+
Two toggles coexist here — the sidebar hamburger and this one — and
|
|
215
|
+
three-dots vs. list gave no clue which opened what. The gear is
|
|
216
|
+
`d-lg-none`-excluded above (desktop only; on mobile its contents are
|
|
217
|
+
reached through the drawer), so labelling this one is what makes the
|
|
218
|
+
pair unambiguous.
|
|
219
|
+
aria-label matches the visible "Menu" text verbatim (rather than the
|
|
220
|
+
older, more descriptive "Toggle main navigation") so the accessible
|
|
221
|
+
name CONTAINS the visible label in every locale — WCAG 2.5.3 Label in
|
|
222
|
+
Name — instead of only coincidentally in English. {% endcomment %}
|
|
223
|
+
{%- assign _menu_toggle_label = ui.nav_menu_toggle_label | default: "Menu" -%}
|
|
194
224
|
<div class="bd-navbar-toggle d-lg-none">
|
|
195
|
-
<button class="navbar-toggler p-2"
|
|
225
|
+
<button class="navbar-toggler navbar-toggler-labeled p-2"
|
|
196
226
|
type="button"
|
|
197
227
|
data-bs-toggle="offcanvas"
|
|
198
228
|
data-bs-target="{{ _menu_target }}"
|
|
199
229
|
aria-controls="{{ _menu_controls }}"
|
|
200
|
-
aria-label="
|
|
230
|
+
aria-label="{{ _menu_toggle_label }}"
|
|
201
231
|
aria-expanded="false">
|
|
202
232
|
<span class="bi bi-three-dots" aria-hidden="true"></span>
|
|
233
|
+
<span class="navbar-toggler-text">{{ _menu_toggle_label }}</span>
|
|
203
234
|
</button>
|
|
204
235
|
</div>
|
|
205
236
|
</div>
|
|
206
237
|
</nav>
|
|
207
238
|
</div>
|
|
208
239
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
240
|
+
{% comment %} ========================== {% endcomment %}
|
|
241
|
+
{% comment %} PROGRESS BAR MOUNT POINT {% endcomment %}
|
|
242
|
+
{% comment %} ========================== {% endcomment %}
|
|
243
|
+
{% comment %} Nanobar mounts here when site.nanobar.position == "navbar" so the bar
|
|
213
244
|
renders as a thin strip directly under the header. For "top" / "bottom"
|
|
214
|
-
the bar floats fixed to the viewport and no mount is needed.
|
|
245
|
+
the bar floats fixed to the viewport and no mount is needed. {% endcomment %}
|
|
215
246
|
{%- assign _nb_pos = site.nanobar.position | default: "top" -%}
|
|
216
247
|
{%- if site.nanobar.enabled != false and _nb_pos == "navbar" -%}
|
|
217
248
|
<div id="top-progress-target" class="nanobar-mount" aria-hidden="true"></div>
|
|
@@ -16,21 +16,36 @@
|
|
|
16
16
|
|
|
17
17
|
Only emits a key if the config value is present, so the default cascade
|
|
18
18
|
remains intact when consumers omit `theme_color` from _config.yml.
|
|
19
|
+
|
|
20
|
+
Precedence (T-048 / #459): the active skin beats `theme_color`.
|
|
21
|
+
The skin palettes in _sass/theme/_skins.scss set --zer0-color-primary,
|
|
22
|
+
--zer0-color-link and --zer0-color-accent together with --bs-primary.
|
|
23
|
+
So the config values for those three tokens are only emitted when no
|
|
24
|
+
palette skin is active. Otherwise this block would win on source order,
|
|
25
|
+
because `:root` and `[data-theme-skin]` have the same specificity, and the
|
|
26
|
+
theme layer would disagree with Bootstrap. `palette_skins` must list every
|
|
27
|
+
skin that _skins.scss gives a palette; test/visual/features/appearance.spec.js
|
|
28
|
+
checks that.
|
|
19
29
|
===================================================================
|
|
20
30
|
{%- endcomment -%}
|
|
21
31
|
{%- assign tc = site.theme_color -%}
|
|
32
|
+
{%- assign palette_skins = "air,aqua,dirt,neon,mint,plum,sunrise" | split: "," -%}
|
|
22
33
|
{%- if tc -%}
|
|
23
34
|
<style id="zer0-tokens-inline">
|
|
24
35
|
:root {
|
|
25
|
-
{%- if tc.main %} --zer0-color-primary: {{ tc.main }};{%- endif %}
|
|
26
36
|
{%- if tc.secondary %} --zer0-color-secondary: {{ tc.secondary }};{%- endif %}
|
|
27
37
|
{%- if tc.red %} --zer0-color-danger: {{ tc.red }};{%- endif %}
|
|
28
38
|
{%- if tc.yellow %} --zer0-color-warning: {{ tc.yellow }};{%- endif %}
|
|
29
39
|
{%- if tc.green %} --zer0-color-success: {{ tc.green }};{%- endif %}
|
|
30
40
|
{%- if tc.teal %} --zer0-color-info: {{ tc.teal }};{%- endif %}
|
|
41
|
+
}
|
|
42
|
+
{%- if tc.main or tc.blue or tc.purple %}
|
|
43
|
+
:root{% for s in palette_skins %}:not([data-theme-skin="{{ s }}"]){% endfor %} {
|
|
44
|
+
{%- if tc.main %} --zer0-color-primary: {{ tc.main }};{%- endif %}
|
|
31
45
|
{%- if tc.blue %} --zer0-color-link: {{ tc.blue }};{%- endif %}
|
|
32
46
|
{%- if tc.purple %} --zer0-color-accent: {{ tc.purple }};{%- endif %}
|
|
33
47
|
}
|
|
48
|
+
{%- endif %}
|
|
34
49
|
</style>
|
|
35
50
|
{%- endif -%}
|
|
36
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
{% comment %} Style.html
|
|
2
2
|
_includes/style.html
|
|
3
|
-
|
|
3
|
+
{% endcomment %}
|
|
4
4
|
|
|
5
5
|
<div class="bd-cheatsheet container-fluid">
|
|
6
6
|
<section id="content">
|
|
@@ -933,7 +933,7 @@
|
|
|
933
933
|
<li><a class="dropdown-item" href="#">Another action</a></li>
|
|
934
934
|
<li><a class="dropdown-item" href="#">Something else here</a></li>
|
|
935
935
|
</ul>
|
|
936
|
-
</div
|
|
936
|
+
</div>{% comment %} /btn-group {% endcomment %}
|
|
937
937
|
<div class="btn-group">
|
|
938
938
|
<button type="button" class="btn btn-secondary">Secondary</button>
|
|
939
939
|
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
|
@@ -944,7 +944,7 @@
|
|
|
944
944
|
<li><a class="dropdown-item" href="#">Another action</a></li>
|
|
945
945
|
<li><a class="dropdown-item" href="#">Something else here</a></li>
|
|
946
946
|
</ul>
|
|
947
|
-
</div
|
|
947
|
+
</div>{% comment %} /btn-group {% endcomment %}
|
|
948
948
|
<div class="btn-group">
|
|
949
949
|
<button type="button" class="btn btn-success">Success</button>
|
|
950
950
|
<button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
|
@@ -955,7 +955,7 @@
|
|
|
955
955
|
<li><a class="dropdown-item" href="#">Another action</a></li>
|
|
956
956
|
<li><a class="dropdown-item" href="#">Something else here</a></li>
|
|
957
957
|
</ul>
|
|
958
|
-
</div
|
|
958
|
+
</div>{% comment %} /btn-group {% endcomment %}example-divider
|
|
959
959
|
<div class="btn-group">
|
|
960
960
|
<button type="button" class="btn btn-info">Info</button>
|
|
961
961
|
<button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
|
@@ -966,7 +966,7 @@
|
|
|
966
966
|
<li><a class="dropdown-item" href="#">Another action</a></li>
|
|
967
967
|
<li><a class="dropdown-item" href="#">Something else here</a></li>
|
|
968
968
|
</ul>
|
|
969
|
-
</div
|
|
969
|
+
</div>{% comment %} /btn-group {% endcomment %}
|
|
970
970
|
<div class="btn-group">
|
|
971
971
|
<button type="button" class="btn btn-warning">Warning</button>
|
|
972
972
|
<button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
|
@@ -977,7 +977,7 @@
|
|
|
977
977
|
<li><a class="dropdown-item" href="#">Another action</a></li>
|
|
978
978
|
<li><a class="dropdown-item" href="#">Something else here</a></li>
|
|
979
979
|
</ul>
|
|
980
|
-
</div
|
|
980
|
+
</div>{% comment %} /btn-group {% endcomment %}
|
|
981
981
|
<div class="btn-group">
|
|
982
982
|
<button type="button" class="btn btn-danger">Danger</button>
|
|
983
983
|
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
|
@@ -988,7 +988,7 @@
|
|
|
988
988
|
<li><a class="dropdown-item" href="#">Another action</a></li>
|
|
989
989
|
<li><a class="dropdown-item" href="#">Something else here</a></li>
|
|
990
990
|
</ul>
|
|
991
|
-
</div
|
|
991
|
+
</div>{% comment %} /btn-group {% endcomment %}
|
|
992
992
|
</div></div>
|
|
993
993
|
<div class="bd-example-snippet bd-code-snippet"><div class="bd-example">
|
|
994
994
|
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
{% comment %} Installation method cards; uses site.resources.* and environment where helpful {% endcomment %}
|
|
2
2
|
<div class="row g-4 justify-content-center">
|
|
3
3
|
<div class="col-12 col-sm-10 col-md-6 col-lg-4">
|
|
4
4
|
<div class="card h-100 border-0 shadow-sm">
|
|
@@ -55,7 +55,7 @@ cd <you>.github.io
|
|
|
55
55
|
</div>
|
|
56
56
|
</div>
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
{% comment %} Contributing guide call-to-action placed below all cards {% endcomment %}
|
|
59
59
|
<div class="text-center mt-4">
|
|
60
60
|
<a class="btn btn-outline-secondary" href="{{ site.resources.contributing | default: '' | join: '' | default: '#' }}" target="_blank" rel="noopener">
|
|
61
61
|
<i class="bi bi-journal-text me-2"></i>Read the Contributing Guide
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
{% comment %} Quick Links bar for landing page; uses site.resources config {% endcomment %}
|
|
2
2
|
<div class="bg-dark text-white py-3">
|
|
3
3
|
<div class="container-xl px-4 px-md-5">
|
|
4
4
|
<div class="row g-3 justify-content-center text-center align-items-center">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% comment %} Feature: ZER0-050 {% endcomment %}
|
|
2
|
-
|
|
2
|
+
{% comment %}
|
|
3
3
|
===================================================================
|
|
4
4
|
ADMIN NAV — Data-driven sidebar navigation for admin/settings pages
|
|
5
5
|
===================================================================
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
_data/navigation/admin.yml
|
|
16
16
|
Used by: _layouts/admin.html
|
|
17
17
|
===================================================================
|
|
18
|
-
|
|
18
|
+
{% endcomment %}
|
|
19
19
|
|
|
20
20
|
{% assign current_path = page.url %}
|
|
21
21
|
{% assign admin_items = site.data.navigation.admin %}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
{% comment %}
|
|
2
2
|
===================================================================
|
|
3
3
|
NAV TREE - Flat YAML Navigation Renderer
|
|
4
4
|
===================================================================
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
Usage:
|
|
29
29
|
include navigation/nav-tree.html nav="docs"
|
|
30
30
|
===================================================================
|
|
31
|
-
|
|
31
|
+
{% endcomment %}
|
|
32
32
|
|
|
33
33
|
{% assign navigation = site.data.navigation[include.nav] %}
|
|
34
34
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
<li class="mb-1 nav-tree-item" data-depth="0">
|
|
44
44
|
{% if has_children %}
|
|
45
|
-
|
|
45
|
+
{% comment %} Parent item with children - collapsible {% endcomment %}
|
|
46
46
|
<div class="d-flex align-items-center">
|
|
47
47
|
{% if item.url %}
|
|
48
48
|
<a href="{{ item.url | relative_url }}"
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
{% endif %}
|
|
74
74
|
</div>
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
{% comment %} Children container (Level 1) {% endcomment %}
|
|
77
77
|
<div class="collapse{% if is_expanded %} show{% endif %}" id="{{ item_id }}">
|
|
78
78
|
<ul class="list-unstyled fw-normal ps-3 nav-tree-children">
|
|
79
79
|
{% for child in item.children %}
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
|
|
85
85
|
<li class="mb-1 nav-tree-item" data-depth="1">
|
|
86
86
|
{% if child_has_children %}
|
|
87
|
-
|
|
87
|
+
{% comment %} Level 1 parent with children {% endcomment %}
|
|
88
88
|
<div class="d-flex align-items-center">
|
|
89
89
|
{% if child.url %}
|
|
90
90
|
<a href="{{ child.url | relative_url }}"
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
{% endif %}
|
|
115
115
|
</div>
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
{% comment %} Children container (Level 2) {% endcomment %}
|
|
118
118
|
<div class="collapse{% if child_expanded %} show{% endif %}" id="{{ child_id }}">
|
|
119
119
|
<ul class="list-unstyled fw-normal ps-3 nav-tree-children">
|
|
120
120
|
{% for grandchild in child.children %}
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
</ul>
|
|
138
138
|
</div>
|
|
139
139
|
{% else %}
|
|
140
|
-
|
|
140
|
+
{% comment %} Level 1 leaf item {% endcomment %}
|
|
141
141
|
{% if child.url %}
|
|
142
142
|
<a href="{{ child.url | relative_url }}"
|
|
143
143
|
class="nav-tree-link d-inline-flex align-items-center rounded py-1 px-2 text-decoration-none{% if child_active %} active{% endif %}">
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
</ul>
|
|
157
157
|
</div>
|
|
158
158
|
{% else %}
|
|
159
|
-
|
|
159
|
+
{% comment %} Root level leaf item {% endcomment %}
|
|
160
160
|
{% if item.url %}
|
|
161
161
|
<a href="{{ item.url | relative_url }}"
|
|
162
162
|
class="nav-tree-link d-inline-flex align-items-center rounded py-1 px-2 text-decoration-none{% if is_active %} active{% endif %}">
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{% comment %} Features: ZER0-049, ZER0-055 {% endcomment %}
|
|
2
|
-
|
|
2
|
+
{% comment %}
|
|
3
3
|
file: navbar.html
|
|
4
4
|
path: /includes/navbar.html
|
|
5
5
|
includes:
|
|
6
6
|
purpose: Offcanvas main navigation following Bootstrap 5 best practices
|
|
7
7
|
with hover-activated dropdowns for desktop and accessible interactions
|
|
8
|
-
|
|
8
|
+
{% endcomment %}
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
{% comment %} Navigation Links - Responsive Offcanvas (inline at lg+, offcanvas below) {% endcomment %}
|
|
11
11
|
{%- include core/i18n.html -%}
|
|
12
12
|
<div class="offcanvas-lg offcanvas-end" tabindex="-1" id="bdNavbar" aria-labelledby="mainNavOffcanvasLabel">
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
{% comment %} Main Navigation Header - Offcanvas {% endcomment %}
|
|
15
15
|
<div class="offcanvas-header border-bottom">
|
|
16
16
|
<h2 class="offcanvas-title h5 mb-0" id="mainNavOffcanvasLabel">{{ ui.main_nav_label | default: "Main Navigation" }}</h2>
|
|
17
17
|
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close navigation menu" data-bs-target="#bdNavbar"></button>
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
{% comment %} Main Navigation Body - Offcanvas {% endcomment %}
|
|
21
21
|
<div class="offcanvas-body">
|
|
22
|
-
|
|
22
|
+
{% comment %} Desktop: width is the grid middle track; labels ellipsis or icon-only via container query {% endcomment %}
|
|
23
23
|
<div class="bd-navbar-nav-viewport">
|
|
24
24
|
<ul class="navbar-nav justify-content-lg-center text-start flex-grow-1">
|
|
25
25
|
<li class="nav-item d-lg-none">
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
|
|
45
45
|
{%- if has_children -%}
|
|
46
46
|
<li class="nav-item dropdown d-flex align-items-center nav-hover-dropdown">
|
|
47
|
-
|
|
47
|
+
{% comment %} Parent link navigates directly {% endcomment %}
|
|
48
48
|
<a
|
|
49
49
|
class="nav-link"
|
|
50
50
|
href="{{ link.url | relative_url }}"
|
|
51
51
|
aria-label="{{ link.title }}"
|
|
52
|
-
{
|
|
52
|
+
{% if link.url == page.url %}aria-current="page"{% endif %}
|
|
53
53
|
title="{{ link.title }}"
|
|
54
54
|
>
|
|
55
55
|
{%- if link.icon -%}
|
|
@@ -58,11 +58,15 @@
|
|
|
58
58
|
<span class="nav-link-text">{{ link.title }}</span>
|
|
59
59
|
</a>
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
to avoid Bootstrap's native handler conflicting with our toggle logic
|
|
61
|
+
{% comment %} Split toggle opens the dropdown (click on mobile, hover on desktop) {% endcomment %}
|
|
62
|
+
{% comment %} Note: No data-bs-toggle="dropdown" — custom JS handles all interactions
|
|
63
|
+
to avoid Bootstrap's native handler conflicting with our toggle logic {% endcomment %}
|
|
64
|
+
{% comment %} No `ms-1`: at lg+ the chevron is absolutely positioned over the
|
|
65
|
+
parent link's reserved padding (_navbar.scss), so a left margin would
|
|
66
|
+
re-open the dead zone between label and chevron that #405 closed. Below
|
|
67
|
+
lg the offcanvas layout keeps them as ordinary siblings. {% endcomment %}
|
|
64
68
|
<button
|
|
65
|
-
class="nav-link dropdown-toggle dropdown-toggle-split
|
|
69
|
+
class="nav-link dropdown-toggle dropdown-toggle-split"
|
|
66
70
|
type="button"
|
|
67
71
|
id="dropdown-{{ link.title | slugify }}"
|
|
68
72
|
aria-expanded="false"
|
|
@@ -78,8 +82,7 @@
|
|
|
78
82
|
<a
|
|
79
83
|
class="dropdown-item"
|
|
80
84
|
href="{{ child.url | relative_url }}"
|
|
81
|
-
|
|
82
|
-
{%- if child.url == page.url -%} aria-current="page"{%- endif -%}
|
|
85
|
+
{% if child.url == page.url %}aria-current="page"{% endif %}
|
|
83
86
|
>
|
|
84
87
|
{%- if child.icon -%}
|
|
85
88
|
<i class="{{site.default_icon}} {{ child.icon }} me-2" aria-hidden="true"></i>
|
|
@@ -96,7 +99,7 @@
|
|
|
96
99
|
class="nav-link"
|
|
97
100
|
href="{{ link.url | relative_url }}"
|
|
98
101
|
aria-label="{{ link.title }}"
|
|
99
|
-
{
|
|
102
|
+
{% if link.url == page.url %}aria-current="page"{% endif %}
|
|
100
103
|
title="{{ link.title }}"
|
|
101
104
|
>
|
|
102
105
|
{%- if link.icon -%}
|
|
@@ -125,7 +128,7 @@
|
|
|
125
128
|
href="{{ col_url | relative_url }}"
|
|
126
129
|
aria-label="{{ col_title }}"
|
|
127
130
|
title="{{ col_title }}"
|
|
128
|
-
{
|
|
131
|
+
{% if page.collection == collection.label %}aria-current="page"{% endif %}
|
|
129
132
|
>
|
|
130
133
|
<span class="nav-link-text">{{ col_title }}</span>
|
|
131
134
|
</a>
|
|
@@ -165,8 +168,8 @@
|
|
|
165
168
|
</div>
|
|
166
169
|
</div>
|
|
167
170
|
|
|
168
|
-
|
|
171
|
+
{% comment %}
|
|
169
172
|
Navigation styles are now in _sass/core/_navbar.scss
|
|
170
173
|
Navigation scripts are now in assets/js/navigation.js
|
|
171
174
|
These are loaded automatically via the theme's asset pipeline
|
|
172
|
-
|
|
175
|
+
{% endcomment %}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
{% comment %}
|
|
2
2
|
===================================================================
|
|
3
3
|
SECTION SIDEBAR - Fixed Topic Navigation
|
|
4
4
|
===================================================================
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
- Bootstrap 5 offcanvas component
|
|
29
29
|
- Bootstrap Icons
|
|
30
30
|
===================================================================
|
|
31
|
-
|
|
31
|
+
{% endcomment %}
|
|
32
32
|
|
|
33
33
|
{% assign sidebar_id = include.sidebar_id | default: "sectionSidebar" %}
|
|
34
34
|
{% assign section_posts = include.section_posts %}
|
|
@@ -71,13 +71,13 @@
|
|
|
71
71
|
{% endfor %}
|
|
72
72
|
{% endif %}
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
{% comment %} ================================ {% endcomment %}
|
|
75
|
+
{% comment %} DESKTOP SIDEBAR (Fixed Sticky) {% endcomment %}
|
|
76
|
+
{% comment %} ================================ {% endcomment %}
|
|
77
77
|
<aside class="section-sidebar-desktop d-none d-lg-block w-100">
|
|
78
78
|
<div class="position-sticky" style="top: 80px;">
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
{% comment %} Topics Card {% endcomment %}
|
|
81
81
|
<div class="card border-0 shadow-sm">
|
|
82
82
|
<div class="card-header bg-primary text-white d-flex justify-content-between align-items-center">
|
|
83
83
|
<h5 class="mb-0">
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
{% endif %}
|
|
135
135
|
</div>
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
{% comment %} Section Stats {% endcomment %}
|
|
138
138
|
<div class="card border-0 shadow-sm mt-3">
|
|
139
139
|
<div class="card-body">
|
|
140
140
|
<h6 class="text-muted mb-3">
|
|
@@ -158,9 +158,9 @@
|
|
|
158
158
|
</div>
|
|
159
159
|
</aside>
|
|
160
160
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
161
|
+
{% comment %} ================================ {% endcomment %}
|
|
162
|
+
{% comment %} MOBILE OFFCANVAS SIDEBAR {% endcomment %}
|
|
163
|
+
{% comment %} ================================ {% endcomment %}
|
|
164
164
|
<div class="offcanvas offcanvas-start" tabindex="-1" id="{{ sidebar_id }}" aria-labelledby="{{ sidebar_id }}Label">
|
|
165
165
|
<div class="offcanvas-header bg-primary text-white">
|
|
166
166
|
<h2 class="offcanvas-title h5" id="{{ sidebar_id }}Label">
|
|
@@ -208,9 +208,9 @@
|
|
|
208
208
|
</div>
|
|
209
209
|
</div>
|
|
210
210
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
211
|
+
{% comment %} ================================ {% endcomment %}
|
|
212
|
+
{% comment %} SIDEBAR STYLES {% endcomment %}
|
|
213
|
+
{% comment %} ================================ {% endcomment %}
|
|
214
214
|
<style>
|
|
215
215
|
/* Sidebar Navigation */
|
|
216
216
|
.sidebar-nav .nav-link {
|
|
@@ -258,9 +258,9 @@
|
|
|
258
258
|
}
|
|
259
259
|
</style>
|
|
260
260
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
261
|
+
{% comment %} ================================ {% endcomment %}
|
|
262
|
+
{% comment %} SIDEBAR JAVASCRIPT {% endcomment %}
|
|
263
|
+
{% comment %} ================================ {% endcomment %}
|
|
264
264
|
<script>
|
|
265
265
|
(function() {
|
|
266
266
|
// Smooth scroll for sidebar links
|