jekyll-theme-zer0 1.24.0 → 1.25.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 +94 -0
- data/README.md +3 -3
- data/_data/authors.yml +1 -0
- data/_data/features.yml +37 -2
- data/_data/navigation/README.md +15 -5
- data/_data/navigation/main.yml +0 -8
- data/_data/roadmap.yml +1 -0
- data/_includes/README.md +10 -7
- data/_includes/analytics/google-analytics.html +1 -0
- data/_includes/analytics/google-tag-manager-body.html +1 -0
- data/_includes/analytics/google-tag-manager-head.html +1 -0
- data/_includes/analytics/posthog.html +1 -0
- data/_includes/components/README.md +2 -1
- data/_includes/components/admin-links.html +63 -0
- data/_includes/components/admin-tabs.html +1 -0
- data/_includes/components/ai-chat.html +27 -5
- data/_includes/components/author-eeat.html +1 -0
- data/_includes/components/background-customizer.html +1 -0
- data/_includes/components/background-settings.html +36 -37
- data/_includes/components/component-showcase.html +1 -0
- data/_includes/components/cookie-consent.html +1 -0
- data/_includes/components/dev-shortcuts.html +1 -8
- data/_includes/components/env-switcher.html +90 -138
- data/_includes/components/feature-card.html +1 -1
- data/_includes/components/halfmoon.html +22 -41
- data/_includes/components/info-section.html +127 -130
- data/_includes/components/mermaid.html +1 -0
- data/_includes/components/nanobar.html +1 -0
- data/_includes/components/post-type-badge.html +1 -0
- data/_includes/components/preview-image.html +1 -0
- data/_includes/components/search-modal.html +1 -0
- data/_includes/components/searchbar.html +1 -0
- data/_includes/components/shortcuts-modal.html +1 -0
- data/_includes/components/theme-info.html +21 -30
- data/_includes/components/theme-preview-gallery.html +1 -0
- data/_includes/content/backlinks.html +1 -0
- data/_includes/content/giscus.html +1 -0
- data/_includes/content/jsonld-faq.html +1 -0
- data/_includes/content/seo.html +1 -0
- data/_includes/content/sitemap.html +1 -0
- data/_includes/content/toc.html +1 -0
- data/_includes/core/color-mode-init.html +1 -0
- data/_includes/core/footer.html +1 -0
- data/_includes/core/head.html +1 -0
- data/_includes/core/header.html +5 -15
- data/_includes/navigation/admin-nav.html +1 -0
- data/_includes/navigation/breadcrumbs.html +1 -0
- data/_includes/navigation/local-graph-fab.html +3 -9
- data/_includes/navigation/local-graph.html +4 -9
- data/_includes/navigation/navbar.html +1 -0
- data/_includes/navigation/sidebar-categories.html +56 -14
- data/_includes/navigation/sidebar-config.html +115 -0
- data/_includes/navigation/sidebar-folders.html +168 -62
- data/_includes/navigation/sidebar-left.html +29 -52
- data/_includes/navigation/sidebar-nav.html +30 -0
- data/_includes/navigation/sidebar-right.html +1 -0
- data/_includes/navigation/toc-fab.html +3 -9
- data/_includes/navigation/unified-drawer.html +7 -14
- data/_includes/obsidian/full-graph.html +1 -0
- data/_includes/setup/wizard.html +1 -0
- data/_includes/stats/stats-categories.html +1 -0
- data/_includes/stats/stats-header.html +1 -0
- data/_includes/stats/stats-metrics.html +1 -0
- data/_includes/stats/stats-overview.html +1 -0
- data/_includes/stats/stats-tags.html +1 -0
- data/_layouts/admin.html +1 -0
- data/_layouts/article.html +1 -0
- data/_layouts/author.html +1 -0
- data/_layouts/authors.html +1 -0
- data/_layouts/collection.html +1 -0
- data/_layouts/default.html +14 -37
- data/_layouts/home.html +1 -0
- data/_layouts/index.html +1 -0
- data/_layouts/landing.html +1 -0
- data/_layouts/news.html +1 -0
- data/_layouts/note.html +1 -0
- data/_layouts/notebook.html +1 -0
- data/_layouts/root.html +3 -2
- data/_layouts/search.html +1 -0
- data/_layouts/section.html +1 -0
- data/_layouts/setup.html +1 -0
- data/_layouts/sitemap-collection.html +1 -0
- data/_layouts/stats.html +1 -0
- data/_layouts/tag.html +1 -0
- data/_layouts/welcome.html +1 -0
- data/_plugins/author_pages_generator.rb +1 -0
- data/_plugins/obsidian_links.rb +1 -0
- data/_plugins/preview_image_generator.rb +1 -0
- data/_plugins/search_and_sitemap_generator.rb +1 -0
- data/_plugins/theme_version.rb +1 -0
- data/_sass/components/_author.scss +12 -1
- data/_sass/components/_footer.scss +22 -0
- data/_sass/components/_ui-enhancements.scss +9 -0
- data/_sass/core/_docs-layout.scss +1 -0
- data/_sass/core/_navbar.scss +10 -27
- data/_sass/core/_obsidian.scss +2 -2
- data/_sass/core/code-copy.scss +10 -0
- data/_sass/custom.scss +1 -0
- data/_sass/notebooks.scss +1 -0
- data/_sass/theme/_backgrounds.scss +7 -2
- data/_sass/utilities/_layout.scss +11 -0
- data/assets/css/main.scss +2 -1
- data/assets/js/ai-chat.js +1 -0
- data/assets/js/author-profile.js +1 -0
- data/assets/js/auto-hide-nav.js +1 -0
- data/assets/js/back-to-top.js +1 -0
- data/assets/js/background-customizer.js +1 -0
- data/assets/js/code-copy.js +1 -0
- data/assets/js/halfmoon.js +23 -22
- data/assets/js/modules/navigation/gestures.js +1 -0
- data/assets/js/modules/navigation/keyboard.js +1 -0
- data/assets/js/modules/navigation/scroll-spy.js +1 -0
- data/assets/js/modules/navigation/sidebar-state.js +1 -0
- data/assets/js/modules/navigation/sidebar-visibility.js +1 -0
- data/assets/js/modules/navigation/smooth-scroll.js +1 -0
- data/assets/js/modules/theme/appearance.js +52 -16
- data/assets/js/nanobar-init.js +1 -0
- data/assets/js/navigation.js +1 -0
- data/assets/js/obsidian-graph.js +1 -0
- data/assets/js/obsidian-wiki-links.js +1 -0
- data/assets/js/palette-generator.js +1 -0
- data/assets/js/particles-source.js +1 -0
- data/assets/js/search-modal.js +1 -0
- data/assets/js/setup-wizard.js +1 -0
- data/assets/js/share-actions.js +1 -0
- data/assets/js/skin-editor.js +1 -0
- data/assets/js/table-copy.js +1 -0
- data/assets/js/theme-customizer.js +1 -0
- data/scripts/analyze-commits.sh +1 -0
- data/scripts/bin/giscus-discussions +1 -0
- data/scripts/bin/install +1 -0
- data/scripts/bin/validate +1 -0
- data/scripts/build +1 -0
- data/scripts/content-review.rb +1 -0
- data/scripts/convert-notebooks.sh +4 -3
- data/scripts/fix-markdown-format.sh +1 -0
- data/scripts/generate-preview-images.sh +1 -0
- data/scripts/generate-roadmap.sh +1 -0
- data/scripts/install-preview-generator.sh +1 -0
- data/scripts/release +1 -0
- data/scripts/requirements.txt +11 -0
- data/scripts/setup.sh +1 -0
- data/scripts/tag-features +136 -0
- data/scripts/validate-features.rb +7 -0
- data/scripts/vendor-install.sh +1 -0
- metadata +8 -3
- data/_plugins/admin_page_urls.rb +0 -16
|
@@ -1,20 +1,35 @@
|
|
|
1
|
+
{% comment %} Feature: ZER0-046 {% endcomment %}
|
|
1
2
|
<!--
|
|
2
3
|
===================================================================
|
|
3
4
|
INFO SECTION - Settings Offcanvas with Tabbed Interface
|
|
4
5
|
===================================================================
|
|
5
|
-
|
|
6
|
+
|
|
6
7
|
File: info-section.html
|
|
7
8
|
Path: _includes/components/info-section.html
|
|
8
|
-
Purpose: Unified settings offcanvas panel with tabs
|
|
9
|
-
|
|
9
|
+
Purpose: Unified settings offcanvas panel with three tabs —
|
|
10
|
+
Appearance (color mode, skin, backgrounds, primary color),
|
|
11
|
+
Site (environment, theme & build info, admin links) and
|
|
12
|
+
Developer (page location, metadata, source shortcuts).
|
|
13
|
+
|
|
10
14
|
Dependencies:
|
|
11
15
|
- Bootstrap 5 Offcanvas, Tabs
|
|
16
|
+
- _includes/components/env-detect.html (sets is_production/build_env)
|
|
17
|
+
- _includes/components/halfmoon.html (color-mode segmented control)
|
|
18
|
+
- _includes/components/background-settings.html (skin + backgrounds)
|
|
12
19
|
- _includes/components/env-switcher.html
|
|
13
20
|
- _includes/components/theme-info.html
|
|
21
|
+
- _includes/components/admin-links.html (cached admin quick links)
|
|
14
22
|
- _includes/components/dev-shortcuts.html
|
|
15
|
-
- _includes/components/halfmoon.html
|
|
16
23
|
- _includes/navigation/breadcrumbs.html
|
|
17
|
-
|
|
24
|
+
- assets/js/modules/theme/appearance.js mounts the primary-color
|
|
25
|
+
picker into #zer0AppearanceSlot when site.appearance_panel is on
|
|
26
|
+
|
|
27
|
+
Notes:
|
|
28
|
+
- #info-section and the three pane ids are a public surface: the
|
|
29
|
+
header, navbar, footer, unified drawer and Playwright suites all
|
|
30
|
+
target them. Rename with care.
|
|
31
|
+
- Appearance preferences persist in localStorage only (no cookies).
|
|
32
|
+
|
|
18
33
|
References:
|
|
19
34
|
- https://getbootstrap.com/docs/5.3/components/offcanvas/
|
|
20
35
|
- https://getbootstrap.com/docs/5.3/components/navs-tabs/
|
|
@@ -22,38 +37,29 @@
|
|
|
22
37
|
-->
|
|
23
38
|
|
|
24
39
|
{% include components/env-detect.html %}
|
|
25
|
-
|
|
26
|
-
Admin page URL lookup string is computed once per build by the
|
|
27
|
-
_plugins/admin_page_urls.rb :pre_render hook and exposed as
|
|
28
|
-
site.data.admin_page_urls. This avoids re-running
|
|
29
|
-
`site.html_pages | where_exp | map | join` on every page render
|
|
30
|
-
(150+ renders → 1 plugin call per build).
|
|
31
|
-
{%- endcomment -%}
|
|
32
|
-
{%- assign _admin_page_urls = site.data.admin_page_urls | default: "" -%}
|
|
40
|
+
|
|
33
41
|
<!-- Settings Offcanvas -->
|
|
34
42
|
<div class="offcanvas offcanvas-end" tabindex="-1" id="info-section" aria-labelledby="infoSectionLabel">
|
|
35
|
-
|
|
43
|
+
|
|
36
44
|
<!-- Offcanvas Header -->
|
|
37
45
|
<div class="offcanvas-header border-bottom pb-0 d-block">
|
|
38
46
|
<div class="d-flex align-items-center justify-content-between mb-2">
|
|
39
47
|
<h5 class="offcanvas-title" id="infoSectionLabel">
|
|
40
|
-
<i class="bi bi-gear-wide-connected me-2"></i>Settings
|
|
48
|
+
<i class="bi bi-gear-wide-connected me-2" aria-hidden="true"></i>Settings
|
|
41
49
|
</h5>
|
|
42
50
|
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
|
43
51
|
</div>
|
|
44
|
-
|
|
52
|
+
|
|
45
53
|
<!-- Tab Navigation -->
|
|
46
|
-
<ul class="nav nav-tabs" id="infoTabs" role="tablist">
|
|
54
|
+
<ul class="nav nav-tabs nav-fill" id="infoTabs" role="tablist">
|
|
47
55
|
<li class="nav-item" role="presentation">
|
|
48
|
-
<button class="nav-link active" id="
|
|
49
|
-
<i class="bi bi-
|
|
50
|
-
<span class="d-none d-sm-inline">Settings</span>
|
|
56
|
+
<button class="nav-link active" id="appearance-tab" data-bs-toggle="tab" data-bs-target="#appearance-pane" type="button" role="tab" aria-controls="appearance-pane" aria-selected="true">
|
|
57
|
+
<i class="bi bi-palette me-1" aria-hidden="true"></i>Appearance
|
|
51
58
|
</button>
|
|
52
59
|
</li>
|
|
53
60
|
<li class="nav-item" role="presentation">
|
|
54
|
-
<button class="nav-link" id="
|
|
55
|
-
<i class="bi bi-
|
|
56
|
-
<span class="d-none d-sm-inline">Environment</span>
|
|
61
|
+
<button class="nav-link" id="site-tab" data-bs-toggle="tab" data-bs-target="#site-pane" type="button" role="tab" aria-controls="site-pane" aria-selected="false">
|
|
62
|
+
<i class="bi bi-globe2 me-1" aria-hidden="true"></i>Site
|
|
57
63
|
{% if is_production %}
|
|
58
64
|
<span class="badge bg-success ms-1 d-none d-md-inline-block">Prod</span>
|
|
59
65
|
{% else %}
|
|
@@ -63,139 +69,87 @@
|
|
|
63
69
|
</li>
|
|
64
70
|
<li class="nav-item" role="presentation">
|
|
65
71
|
<button class="nav-link" id="developer-tab" data-bs-toggle="tab" data-bs-target="#developer-pane" type="button" role="tab" aria-controls="developer-pane" aria-selected="false">
|
|
66
|
-
<i class="bi bi-code-slash me-1"></i>
|
|
67
|
-
<span class="d-none d-sm-inline">Developer</span>
|
|
68
|
-
</button>
|
|
69
|
-
</li>
|
|
70
|
-
<li class="nav-item" role="presentation">
|
|
71
|
-
<button class="nav-link" id="background-tab" data-bs-toggle="tab" data-bs-target="#background-pane" type="button" role="tab" aria-controls="background-pane" aria-selected="false">
|
|
72
|
-
<i class="bi bi-palette2 me-1"></i>
|
|
73
|
-
<span class="d-none d-sm-inline">Background</span>
|
|
72
|
+
<i class="bi bi-code-slash me-1" aria-hidden="true"></i>Developer
|
|
74
73
|
</button>
|
|
75
74
|
</li>
|
|
76
75
|
</ul>
|
|
77
76
|
</div>
|
|
78
|
-
|
|
77
|
+
|
|
79
78
|
<!-- Offcanvas Body with Tab Content -->
|
|
80
79
|
<div class="offcanvas-body">
|
|
81
80
|
<div class="tab-content" id="infoTabContent">
|
|
82
|
-
|
|
83
|
-
<!--
|
|
84
|
-
<div class="tab-pane fade show active" id="
|
|
85
|
-
|
|
86
|
-
<!--
|
|
81
|
+
|
|
82
|
+
<!-- Appearance Tab — everything that changes how the site looks -->
|
|
83
|
+
<div class="tab-pane fade show active" id="appearance-pane" role="tabpanel" aria-labelledby="appearance-tab" tabindex="0">
|
|
84
|
+
|
|
85
|
+
<!-- Color Mode -->
|
|
87
86
|
<div class="mb-4">
|
|
88
87
|
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
89
|
-
<i class="bi bi-
|
|
88
|
+
<i class="bi bi-moon-stars me-1" aria-hidden="true"></i>Color Mode
|
|
90
89
|
</h6>
|
|
91
|
-
{% include components/
|
|
90
|
+
{% include components/halfmoon.html class="w-100" %}
|
|
92
91
|
</div>
|
|
93
|
-
|
|
94
|
-
<!-- Theme
|
|
92
|
+
|
|
93
|
+
<!-- Theme skin + SVG backgrounds (skin buttons, toggle, opacity) -->
|
|
94
|
+
{% include_cached components/background-settings.html %}
|
|
95
|
+
|
|
96
|
+
<!-- Primary color picker mounts here (appearance.js, optional) -->
|
|
97
|
+
<div id="zer0AppearanceSlot"></div>
|
|
98
|
+
|
|
99
|
+
<p class="text-body-secondary small mb-0 mt-4">
|
|
100
|
+
<i class="bi bi-device-hdd me-1" aria-hidden="true"></i>
|
|
101
|
+
Appearance preferences are saved in this browser only.
|
|
102
|
+
</p>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<!-- Site Tab — where the site runs and what it is built from -->
|
|
106
|
+
<div class="tab-pane fade" id="site-pane" role="tabpanel" aria-labelledby="site-tab" tabindex="0">
|
|
107
|
+
|
|
108
|
+
<!-- Environment -->
|
|
95
109
|
<div class="mb-4">
|
|
96
110
|
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
97
|
-
<i class="bi bi-
|
|
98
|
-
</h6>
|
|
99
|
-
<div class="d-flex align-items-center justify-content-between p-3 bg-body-tertiary rounded">
|
|
100
|
-
<span>Theme Mode</span>
|
|
101
|
-
{% include components/halfmoon.html %}
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<!-- Theme Info (Collapsible) -->
|
|
106
|
-
<div class="mb-3">
|
|
107
|
-
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
108
|
-
<i class="bi bi-info-circle me-1"></i>About
|
|
111
|
+
<i class="bi bi-hdd-network me-1" aria-hidden="true"></i>Environment
|
|
109
112
|
</h6>
|
|
110
|
-
|
|
111
|
-
<span>Theme & Build Info</span>
|
|
112
|
-
<i class="bi bi-chevron-down"></i>
|
|
113
|
-
</button>
|
|
114
|
-
<div class="collapse mt-2" id="themeInfoCollapse">
|
|
115
|
-
{% include components/theme-info.html %}
|
|
116
|
-
</div>
|
|
113
|
+
{% include components/env-switcher.html %}
|
|
117
114
|
</div>
|
|
118
115
|
|
|
119
|
-
<!--
|
|
120
|
-
|
|
121
|
-
that haven't created the admin pages). -->
|
|
122
|
-
{% assign _cfg_page = false %}
|
|
123
|
-
{% assign _theme_page = false %}
|
|
124
|
-
{% assign _nav_page = false %}
|
|
125
|
-
{% if _admin_page_urls contains "|/about/config/|" %}{% assign _cfg_page = true %}{% endif %}
|
|
126
|
-
{% if _admin_page_urls contains "|/about/settings/theme/|" %}{% assign _theme_page = true %}{% endif %}
|
|
127
|
-
{% if _admin_page_urls contains "|/about/settings/navigation/|" %}{% assign _nav_page = true %}{% endif %}
|
|
128
|
-
{% if _cfg_page or _theme_page or _nav_page %}
|
|
129
|
-
<div class="mb-3">
|
|
116
|
+
<!-- Theme & Build -->
|
|
117
|
+
<div class="mb-4">
|
|
130
118
|
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
131
|
-
<i class="bi bi-
|
|
119
|
+
<i class="bi bi-info-circle me-1" aria-hidden="true"></i>Theme & Build
|
|
132
120
|
</h6>
|
|
133
|
-
|
|
134
|
-
{% if _cfg_page %}
|
|
135
|
-
<a href="{{ '/about/config/' | relative_url }}" class="list-group-item list-group-item-action d-flex align-items-center px-0">
|
|
136
|
-
<i class="bi bi-gear me-2 text-body-secondary"></i>Configuration
|
|
137
|
-
</a>
|
|
138
|
-
{% endif %}
|
|
139
|
-
{% if _theme_page %}
|
|
140
|
-
<a href="{{ '/about/settings/theme/' | relative_url }}" class="list-group-item list-group-item-action d-flex align-items-center px-0">
|
|
141
|
-
<i class="bi bi-palette me-2 text-body-secondary"></i>Theme Customizer
|
|
142
|
-
</a>
|
|
143
|
-
{% endif %}
|
|
144
|
-
{% if _nav_page %}
|
|
145
|
-
<a href="{{ '/about/settings/navigation/' | relative_url }}" class="list-group-item list-group-item-action d-flex align-items-center px-0">
|
|
146
|
-
<i class="bi bi-signpost-2 me-2 text-body-secondary"></i>Navigation Editor
|
|
147
|
-
</a>
|
|
148
|
-
{% endif %}
|
|
149
|
-
</div>
|
|
121
|
+
{% include components/theme-info.html %}
|
|
150
122
|
</div>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
<div class="tab-pane fade" id="environment-pane" role="tabpanel" aria-labelledby="environment-tab" tabindex="0">
|
|
156
|
-
{% include components/env-switcher.html %}
|
|
157
|
-
|
|
158
|
-
<!-- Admin Link — only when target page exists -->
|
|
159
|
-
{% assign _env_page = false %}
|
|
160
|
-
{% if _admin_page_urls contains "|/about/settings/environment/|" %}{% assign _env_page = true %}{% endif %}
|
|
161
|
-
{% if _env_page %}
|
|
162
|
-
<div class="mt-4 pt-3 border-top">
|
|
163
|
-
<a href="{{ '/about/settings/environment/' | relative_url }}" class="btn btn-outline-secondary btn-sm w-100">
|
|
164
|
-
<i class="bi bi-box-arrow-up-right me-1"></i>Full Environment & Build Info
|
|
165
|
-
</a>
|
|
166
|
-
</div>
|
|
167
|
-
{% endif %}
|
|
123
|
+
|
|
124
|
+
<!-- Admin quick links — cached include; renders only links to pages
|
|
125
|
+
that exist in the build (see components/admin-links.html) -->
|
|
126
|
+
{% include_cached components/admin-links.html %}
|
|
168
127
|
</div>
|
|
169
|
-
|
|
170
|
-
<!-- Developer Tab -->
|
|
128
|
+
|
|
129
|
+
<!-- Developer Tab — tools scoped to the current page -->
|
|
171
130
|
<div class="tab-pane fade" id="developer-pane" role="tabpanel" aria-labelledby="developer-tab" tabindex="0">
|
|
172
|
-
|
|
173
|
-
<!-- Page Location
|
|
131
|
+
|
|
132
|
+
<!-- Page Location — breadcrumbs render nothing on the homepage or
|
|
133
|
+
when site.breadcrumbs is off, so the section mirrors that gate -->
|
|
134
|
+
{% if page.url != "/" and site.breadcrumbs %}
|
|
174
135
|
<div class="mb-4">
|
|
175
136
|
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
176
|
-
<i class="bi bi-signpost-split me-1"></i>Page Location
|
|
137
|
+
<i class="bi bi-signpost-split me-1" aria-hidden="true"></i>Page Location
|
|
177
138
|
</h6>
|
|
178
139
|
{% include navigation/breadcrumbs.html %}
|
|
179
140
|
</div>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
<div class="mb-4">
|
|
183
|
-
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
184
|
-
<i class="bi bi-code-square me-1"></i>Source Code
|
|
185
|
-
</h6>
|
|
186
|
-
{% include components/dev-shortcuts.html %}
|
|
187
|
-
</div>
|
|
188
|
-
|
|
141
|
+
{% endif %}
|
|
142
|
+
|
|
189
143
|
<!-- Page Metadata -->
|
|
190
|
-
<div class="mb-
|
|
144
|
+
<div class="mb-4">
|
|
191
145
|
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
192
|
-
<i class="bi bi-file-earmark-code me-1"></i>Page Info
|
|
146
|
+
<i class="bi bi-file-earmark-code me-1" aria-hidden="true"></i>Page Info
|
|
193
147
|
</h6>
|
|
194
148
|
<div class="table-responsive">
|
|
195
149
|
<table class="table table-sm table-hover mb-0 small">
|
|
196
150
|
<tbody>
|
|
197
151
|
<tr>
|
|
198
|
-
<td class="text-body-secondary
|
|
152
|
+
<td class="text-body-secondary w-25">Layout</td>
|
|
199
153
|
<td><code>{{ page.layout | default: "none" }}</code></td>
|
|
200
154
|
</tr>
|
|
201
155
|
<tr>
|
|
@@ -220,14 +174,57 @@
|
|
|
220
174
|
</table>
|
|
221
175
|
</div>
|
|
222
176
|
</div>
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
177
|
+
|
|
178
|
+
<!-- Source Code Shortcuts -->
|
|
179
|
+
<div class="mb-3">
|
|
180
|
+
<h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
|
|
181
|
+
<i class="bi bi-code-square me-1" aria-hidden="true"></i>Source Code
|
|
182
|
+
</h6>
|
|
183
|
+
{% include components/dev-shortcuts.html %}
|
|
184
|
+
</div>
|
|
228
185
|
</div>
|
|
229
186
|
|
|
230
187
|
</div>
|
|
231
188
|
</div>
|
|
232
|
-
|
|
233
|
-
</div>
|
|
189
|
+
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<!-- Copy-to-clipboard for the panel's URL fields (event delegation; no
|
|
193
|
+
inline handlers). Buttons declare data-zer0-copy="<text>" or
|
|
194
|
+
data-zer0-copy-target="#input-id". -->
|
|
195
|
+
<script>
|
|
196
|
+
document.addEventListener("click", function (e) {
|
|
197
|
+
var btn = e.target.closest("[data-zer0-copy], [data-zer0-copy-target]");
|
|
198
|
+
if (!btn) return;
|
|
199
|
+
var text = btn.getAttribute("data-zer0-copy") || "";
|
|
200
|
+
var targetSel = btn.getAttribute("data-zer0-copy-target");
|
|
201
|
+
if (!text && targetSel) {
|
|
202
|
+
// Guard the selector lookup — a missing/invalid value must not throw
|
|
203
|
+
// inside a document-level click listener.
|
|
204
|
+
try {
|
|
205
|
+
var target = document.querySelector(targetSel);
|
|
206
|
+
text = target && "value" in target ? target.value : "";
|
|
207
|
+
} catch (err) {
|
|
208
|
+
text = "";
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (!text || !navigator.clipboard) return;
|
|
212
|
+
navigator.clipboard.writeText(text).then(function () {
|
|
213
|
+
zer0CopyFeedback(btn, true);
|
|
214
|
+
}).catch(function () {
|
|
215
|
+
zer0CopyFeedback(btn, false);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
function zer0CopyFeedback(btn, success) {
|
|
220
|
+
var original = btn.innerHTML;
|
|
221
|
+
btn.innerHTML = success ? '<i class="bi bi-check2"></i>' : '<i class="bi bi-x"></i>';
|
|
222
|
+
btn.classList.add(success ? "btn-success" : "btn-danger");
|
|
223
|
+
btn.classList.remove("btn-outline-secondary");
|
|
224
|
+
setTimeout(function () {
|
|
225
|
+
btn.innerHTML = original;
|
|
226
|
+
btn.classList.remove("btn-success", "btn-danger");
|
|
227
|
+
btn.classList.add("btn-outline-secondary");
|
|
228
|
+
}, 1500);
|
|
229
|
+
}
|
|
230
|
+
</script>
|
|
@@ -1,26 +1,30 @@
|
|
|
1
|
+
{% comment %} Feature: ZER0-021 {% endcomment %}
|
|
1
2
|
<!--
|
|
2
3
|
===================================================================
|
|
3
4
|
THEME INFO - Compact Theme and Build Information
|
|
4
5
|
===================================================================
|
|
5
|
-
|
|
6
|
+
|
|
6
7
|
File: theme-info.html
|
|
7
8
|
Path: _includes/components/theme-info.html
|
|
8
9
|
Purpose: Display compact theme version and system information
|
|
9
|
-
|
|
10
|
+
|
|
10
11
|
Dependencies:
|
|
11
12
|
- site.remote_theme or site.theme configuration
|
|
12
13
|
- Jekyll's site.github metadata
|
|
14
|
+
|
|
15
|
+
Note: environment (Prod/Dev) is shown by env-switcher.html in the
|
|
16
|
+
same Site tab — not duplicated here.
|
|
13
17
|
===================================================================
|
|
14
18
|
-->
|
|
15
19
|
|
|
16
20
|
<div class="theme-info-compact">
|
|
17
21
|
<div class="row g-2">
|
|
18
|
-
|
|
22
|
+
|
|
19
23
|
<!-- Theme -->
|
|
20
24
|
<div class="col-12">
|
|
21
25
|
<div class="d-flex align-items-center justify-content-between p-2 bg-body-tertiary rounded">
|
|
22
26
|
<div class="d-flex align-items-center">
|
|
23
|
-
<i class="bi bi-palette text-primary me-2"></i>
|
|
27
|
+
<i class="bi bi-palette text-primary me-2" aria-hidden="true"></i>
|
|
24
28
|
<span class="fw-medium small">Theme</span>
|
|
25
29
|
</div>
|
|
26
30
|
<div>
|
|
@@ -28,7 +32,7 @@
|
|
|
28
32
|
{% assign theme_parts = site.remote_theme | split: "/" %}
|
|
29
33
|
<a href="https://github.com/{{ site.remote_theme }}" target="_blank" rel="noopener" class="text-decoration-none">
|
|
30
34
|
<code class="text-info">{{ theme_parts[1] }}</code>
|
|
31
|
-
<i class="bi bi-box-arrow-up-right ms-1 small"></i>
|
|
35
|
+
<i class="bi bi-box-arrow-up-right ms-1 small" aria-hidden="true"></i>
|
|
32
36
|
</a>
|
|
33
37
|
{% elsif site.theme %}
|
|
34
38
|
<code>{{ site.theme }}</code>
|
|
@@ -39,8 +43,8 @@
|
|
|
39
43
|
</div>
|
|
40
44
|
</div>
|
|
41
45
|
</div>
|
|
42
|
-
|
|
43
|
-
<!-- Jekyll &
|
|
46
|
+
|
|
47
|
+
<!-- Jekyll & Last Build -->
|
|
44
48
|
<div class="col-6">
|
|
45
49
|
<div class="p-2 bg-body-tertiary rounded text-center">
|
|
46
50
|
<small class="text-body-secondary d-block">Jekyll</small>
|
|
@@ -49,56 +53,43 @@
|
|
|
49
53
|
</div>
|
|
50
54
|
<div class="col-6">
|
|
51
55
|
<div class="p-2 bg-body-tertiary rounded text-center">
|
|
52
|
-
<small class="text-body-secondary d-block">
|
|
53
|
-
<
|
|
54
|
-
{{ jekyll.environment | capitalize }}
|
|
55
|
-
</span>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
|
|
59
|
-
<!-- Build Time -->
|
|
60
|
-
<div class="col-12">
|
|
61
|
-
<div class="d-flex align-items-center justify-content-between p-2 bg-body-tertiary rounded">
|
|
62
|
-
<div class="d-flex align-items-center">
|
|
63
|
-
<i class="bi bi-clock-history text-secondary me-2"></i>
|
|
64
|
-
<span class="small text-body-secondary">Last Build</span>
|
|
65
|
-
</div>
|
|
66
|
-
<code class="small">{{ site.time | date: "%Y-%m-%d %H:%M %Z" }}</code>
|
|
56
|
+
<small class="text-body-secondary d-block">Last Build</small>
|
|
57
|
+
<code class="small">{{ site.time | date: "%b %d, %H:%M" }}</code>
|
|
67
58
|
</div>
|
|
68
59
|
</div>
|
|
69
|
-
|
|
60
|
+
|
|
70
61
|
{% if site.repository %}
|
|
71
62
|
<!-- Repository -->
|
|
72
63
|
<div class="col-12">
|
|
73
64
|
<div class="d-flex align-items-center justify-content-between p-2 bg-body-tertiary rounded">
|
|
74
65
|
<div class="d-flex align-items-center">
|
|
75
|
-
<i class="bi bi-git text-danger me-2"></i>
|
|
66
|
+
<i class="bi bi-git text-danger me-2" aria-hidden="true"></i>
|
|
76
67
|
<span class="small text-body-secondary">Repository</span>
|
|
77
68
|
</div>
|
|
78
69
|
<a href="https://github.com/{{ site.repository }}" target="_blank" rel="noopener" class="text-decoration-none small">
|
|
79
70
|
{{ site.repository }}
|
|
80
|
-
<i class="bi bi-box-arrow-up-right ms-1"></i>
|
|
71
|
+
<i class="bi bi-box-arrow-up-right ms-1" aria-hidden="true"></i>
|
|
81
72
|
</a>
|
|
82
73
|
</div>
|
|
83
74
|
</div>
|
|
84
75
|
{% endif %}
|
|
85
|
-
|
|
76
|
+
|
|
86
77
|
<!-- Quick Links -->
|
|
87
78
|
<div class="col-12 mt-2">
|
|
88
79
|
<div class="d-flex flex-wrap gap-2 justify-content-center">
|
|
89
80
|
{% if site.remote_theme %}
|
|
90
81
|
<a href="https://github.com/{{ site.remote_theme }}/blob/main/CHANGELOG.md" target="_blank" rel="noopener" class="btn btn-sm btn-outline-secondary">
|
|
91
|
-
<i class="bi bi-journal-text me-1"></i>Changelog
|
|
82
|
+
<i class="bi bi-journal-text me-1" aria-hidden="true"></i>Changelog
|
|
92
83
|
</a>
|
|
93
84
|
<a href="https://github.com/{{ site.remote_theme }}#readme" target="_blank" rel="noopener" class="btn btn-sm btn-outline-secondary">
|
|
94
|
-
<i class="bi bi-book me-1"></i>Docs
|
|
85
|
+
<i class="bi bi-book me-1" aria-hidden="true"></i>Docs
|
|
95
86
|
</a>
|
|
96
87
|
{% endif %}
|
|
97
88
|
<a href="https://jekyllrb.com/docs/" target="_blank" rel="noopener" class="btn btn-sm btn-outline-secondary">
|
|
98
|
-
<i class="bi bi-gem me-1"></i>Jekyll
|
|
89
|
+
<i class="bi bi-gem me-1" aria-hidden="true"></i>Jekyll
|
|
99
90
|
</a>
|
|
100
91
|
</div>
|
|
101
92
|
</div>
|
|
102
|
-
|
|
93
|
+
|
|
103
94
|
</div>
|
|
104
95
|
</div>
|
data/_includes/content/seo.html
CHANGED
data/_includes/content/toc.html
CHANGED
data/_includes/core/footer.html
CHANGED
data/_includes/core/head.html
CHANGED
data/_includes/core/header.html
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
{% comment %} Feature: ZER0-011 {% endcomment %}
|
|
1
2
|
<!--
|
|
2
3
|
===================================================================
|
|
3
4
|
HEADER - Main Navigation and Site Header
|
|
@@ -64,21 +65,10 @@
|
|
|
64
65
|
<!-- MOBILE MENU CONTROLS -->
|
|
65
66
|
<!-- ========================== -->
|
|
66
67
|
|
|
67
|
-
<!-- Left Sidebar Toggle - Mobile view only
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
{% assign sidebar_nav = page.sidebar.nav %}
|
|
72
|
-
{% endif %}
|
|
73
|
-
{% endif %}
|
|
74
|
-
{% assign sidebar_has_content = false %}
|
|
75
|
-
{% if sidebar_nav %}
|
|
76
|
-
{% if sidebar_nav == "auto" or sidebar_nav == "categories" %}
|
|
77
|
-
{% assign sidebar_has_content = true %}
|
|
78
|
-
{% elsif site.data.navigation[sidebar_nav] %}
|
|
79
|
-
{% assign sidebar_has_content = true %}
|
|
80
|
-
{% endif %}
|
|
81
|
-
{% endif %}
|
|
68
|
+
<!-- Left Sidebar Toggle - Mobile view only. Uses the shared
|
|
69
|
+
resolver (navigation/sidebar-config.html) so this gate can
|
|
70
|
+
never drift from the default layout's aside. -->
|
|
71
|
+
{% include navigation/sidebar-config.html %}
|
|
82
72
|
|
|
83
73
|
{% if sidebar_has_content %}
|
|
84
74
|
{%- comment -%}
|
|
@@ -2,15 +2,9 @@
|
|
|
2
2
|
Local graph FAB trigger — rendered from footer.html so the fixed button
|
|
3
3
|
stays above the footer band. Pair with navigation/local-graph.html (panel).
|
|
4
4
|
{%- endcomment -%}
|
|
5
|
-
{%-
|
|
6
|
-
{%-
|
|
7
|
-
|
|
8
|
-
{%- assign _effective_sidebar = false -%}
|
|
9
|
-
{%- else -%}
|
|
10
|
-
{%- assign _effective_sidebar = true -%}
|
|
11
|
-
{%- endif -%}
|
|
12
|
-
{%- endif -%}
|
|
13
|
-
{%- if page.local_graph != false and _effective_sidebar != false -%}
|
|
5
|
+
{%- comment -%} Shared visibility resolver — sets sidebar_enabled {%- endcomment -%}
|
|
6
|
+
{%- include navigation/sidebar-config.html -%}
|
|
7
|
+
{%- if page.local_graph != false and sidebar_enabled -%}
|
|
14
8
|
<div id="obsidianLocalGraphFab" class="obsidian-local-graph-fab d-print-none" data-obsidian-local-graph-toggle hidden>
|
|
15
9
|
<button class="btn btn-primary rounded-circle shadow-lg p-0 obsidian-local-graph-toggle"
|
|
16
10
|
type="button"
|