jekyll-theme-zer0 0.22.0 → 0.22.19
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 +236 -0
- data/README.md +66 -19
- data/_data/navigation/admin.yml +53 -0
- data/_data/theme_backgrounds.yml +121 -0
- data/_includes/components/admin-tabs.html +59 -0
- data/_includes/components/analytics-dashboard.html +232 -0
- data/_includes/components/background-customizer.html +159 -0
- data/_includes/components/background-settings.html +137 -0
- data/_includes/components/collection-manager.html +151 -0
- data/_includes/components/component-showcase.html +452 -0
- data/_includes/components/config-editor.html +207 -0
- data/_includes/components/config-viewer.html +479 -0
- data/_includes/components/env-dashboard.html +154 -0
- data/_includes/components/feature-card.html +94 -0
- data/_includes/components/info-section.html +172 -149
- data/_includes/components/js-cdn.html +4 -1
- data/_includes/components/nav-editor.html +99 -0
- data/_includes/components/setup-banner.html +28 -0
- data/_includes/components/setup-check.html +53 -0
- data/_includes/components/svg-background.html +42 -0
- data/_includes/components/theme-customizer.html +46 -0
- data/_includes/content/seo.html +68 -135
- data/_includes/core/footer.html +1 -1
- data/_includes/core/head.html +3 -2
- data/_includes/core/header.html +14 -7
- data/_includes/landing/landing-install-cards.html +18 -7
- data/_includes/navigation/admin-nav.html +95 -0
- data/_includes/navigation/navbar.html +43 -5
- data/_includes/navigation/sidebar-left.html +1 -1
- data/_includes/setup/wizard.html +330 -0
- data/_layouts/admin.html +166 -0
- data/_layouts/landing.html +23 -9
- data/_layouts/root.html +12 -6
- data/_layouts/setup.html +73 -0
- data/_plugins/preview_image_generator.rb +26 -12
- data/_sass/core/_navbar.scss +2 -2
- data/_sass/custom.scss +28 -6
- data/_sass/theme/_background-mixins.scss +95 -0
- data/_sass/theme/_backgrounds.scss +156 -0
- data/_sass/theme/_color-modes.scss +2 -1
- data/assets/backgrounds/gradients/air.svg +15 -0
- data/assets/backgrounds/gradients/aqua.svg +15 -0
- data/assets/backgrounds/gradients/contrast.svg +15 -0
- data/assets/backgrounds/gradients/dark.svg +15 -0
- data/assets/backgrounds/gradients/dirt.svg +15 -0
- data/assets/backgrounds/gradients/mint.svg +15 -0
- data/assets/backgrounds/gradients/neon.svg +15 -0
- data/assets/backgrounds/gradients/plum.svg +15 -0
- data/assets/backgrounds/gradients/sunrise.svg +15 -0
- data/assets/backgrounds/noise/air.svg +8 -0
- data/assets/backgrounds/noise/aqua.svg +8 -0
- data/assets/backgrounds/noise/contrast.svg +8 -0
- data/assets/backgrounds/noise/dark.svg +8 -0
- data/assets/backgrounds/noise/dirt.svg +8 -0
- data/assets/backgrounds/noise/mint.svg +8 -0
- data/assets/backgrounds/noise/neon.svg +8 -0
- data/assets/backgrounds/noise/plum.svg +8 -0
- data/assets/backgrounds/noise/sunrise.svg +8 -0
- data/assets/backgrounds/patterns/air.svg +7 -0
- data/assets/backgrounds/patterns/aqua.svg +7 -0
- data/assets/backgrounds/patterns/contrast.svg +4 -0
- data/assets/backgrounds/patterns/dark.svg +5 -0
- data/assets/backgrounds/patterns/dirt.svg +5 -0
- data/assets/backgrounds/patterns/mint.svg +6 -0
- data/assets/backgrounds/patterns/neon.svg +6 -0
- data/assets/backgrounds/patterns/plum.svg +6 -0
- data/assets/backgrounds/patterns/sunrise.svg +5 -0
- data/assets/js/background-customizer.js +73 -0
- data/assets/js/code-copy.js +18 -47
- data/assets/js/config-utility.js +307 -0
- data/assets/js/nav-editor.js +39 -0
- data/assets/js/palette-generator.js +415 -0
- data/assets/js/search-modal.js +31 -11
- data/assets/js/setup-wizard.js +306 -0
- data/assets/js/skin-editor.js +645 -0
- data/assets/js/theme-customizer.js +102 -0
- data/assets/js/ui-enhancements.js +15 -24
- data/assets/vendor/bootstrap/css/bootstrap.min.css +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.bundle.min.js +1 -0
- data/scripts/README.md +45 -0
- data/scripts/features/generate-preview-images +297 -7
- data/scripts/features/install-preview-generator +51 -33
- data/scripts/fork-cleanup.sh +92 -19
- data/scripts/github-setup.sh +284 -0
- data/scripts/init_setup.sh +0 -1
- data/scripts/lib/frontmatter.sh +543 -0
- data/scripts/lib/migrate.sh +265 -0
- data/scripts/lib/preview_generator.py +607 -32
- data/scripts/lint-pages +505 -0
- data/scripts/migrate.sh +201 -0
- data/scripts/platform/setup-linux.sh +244 -0
- data/scripts/platform/setup-macos.sh +187 -0
- data/scripts/platform/setup-wsl.sh +196 -0
- metadata +71 -6
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
===================================================================
|
|
3
|
+
CONFIG VIEWER — Accordion-based live configuration browser
|
|
4
|
+
===================================================================
|
|
5
|
+
|
|
6
|
+
File: config-viewer.html
|
|
7
|
+
Path: _includes/components/config-viewer.html
|
|
8
|
+
Purpose: Renders the current _config.yml values in organised,
|
|
9
|
+
browsable accordion sections with copy-per-value buttons,
|
|
10
|
+
search/filter, and section-copy support.
|
|
11
|
+
|
|
12
|
+
Dependencies: Bootstrap 5.3, assets/js/config-utility.js
|
|
13
|
+
Data source: site.* variables (Liquid at build time)
|
|
14
|
+
===================================================================
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
<!-- ── Search bar ─────────────────────────────────────────────────── -->
|
|
18
|
+
<div class="input-group mb-3">
|
|
19
|
+
<span class="input-group-text"><i class="bi bi-search"></i></span>
|
|
20
|
+
<input type="text" class="form-control" id="cfg-search"
|
|
21
|
+
placeholder="Search config keys or values…" aria-label="Search configuration">
|
|
22
|
+
<button class="btn btn-outline-secondary" type="button" id="cfg-search-clear" title="Clear search">
|
|
23
|
+
<i class="bi bi-x-lg"></i>
|
|
24
|
+
</button>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<!-- ── Toolbar ─────────────────────────────────────────────────────── -->
|
|
28
|
+
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
29
|
+
<div class="btn-group btn-group-sm" role="group">
|
|
30
|
+
<button class="btn btn-outline-secondary" id="cfg-expand-all" title="Expand all sections">
|
|
31
|
+
<i class="bi bi-arrows-expand"></i> Expand All
|
|
32
|
+
</button>
|
|
33
|
+
<button class="btn btn-outline-secondary" id="cfg-collapse-all" title="Collapse all sections">
|
|
34
|
+
<i class="bi bi-arrows-collapse"></i> Collapse All
|
|
35
|
+
</button>
|
|
36
|
+
</div>
|
|
37
|
+
<button class="btn btn-sm btn-outline-primary" id="cfg-copy-full" title="Copy full config">
|
|
38
|
+
<i class="bi bi-clipboard"></i> Copy Full Config
|
|
39
|
+
</button>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- ── Accordion ───────────────────────────────────────────────────── -->
|
|
43
|
+
<div class="accordion" id="configAccordion">
|
|
44
|
+
|
|
45
|
+
{% comment %} ──────────── Section: Site Identity ──────────── {% endcomment %}
|
|
46
|
+
<div class="accordion-item cfg-section">
|
|
47
|
+
<h2 class="accordion-header">
|
|
48
|
+
<button class="accordion-button" type="button"
|
|
49
|
+
data-bs-toggle="collapse" data-bs-target="#cfgSiteIdentity"
|
|
50
|
+
aria-expanded="true">
|
|
51
|
+
<i class="bi bi-person-badge me-2"></i> Site Identity
|
|
52
|
+
</button>
|
|
53
|
+
</h2>
|
|
54
|
+
<div id="cfgSiteIdentity" class="accordion-collapse collapse show" data-bs-parent="#configAccordion">
|
|
55
|
+
<div class="accordion-body p-0">
|
|
56
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
57
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgSiteIdentity" title="Copy section">
|
|
58
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
59
|
+
</button>
|
|
60
|
+
</div>
|
|
61
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
62
|
+
<tbody>
|
|
63
|
+
{% assign identity_keys = "title,founder,email,description,name,level,locale" | split: "," %}
|
|
64
|
+
{% for k in identity_keys %}
|
|
65
|
+
{% assign v = site[k] %}
|
|
66
|
+
{% if v %}
|
|
67
|
+
<tr class="cfg-row" data-key="{{ k }}" data-value="{{ v | escape }}">
|
|
68
|
+
<td class="ps-3 text-nowrap fw-semibold" style="width:30%"><code>{{ k }}</code></td>
|
|
69
|
+
<td class="text-break small">{{ v | escape }}</td>
|
|
70
|
+
<td style="width:50px" class="text-end pe-3">
|
|
71
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ v | escape }}" title="Copy value">
|
|
72
|
+
<i class="bi bi-clipboard"></i>
|
|
73
|
+
</button>
|
|
74
|
+
</td>
|
|
75
|
+
</tr>
|
|
76
|
+
{% endif %}
|
|
77
|
+
{% endfor %}
|
|
78
|
+
</tbody>
|
|
79
|
+
</table>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
{% comment %} ──────────── Section: GitHub ──────────── {% endcomment %}
|
|
85
|
+
<div class="accordion-item cfg-section">
|
|
86
|
+
<h2 class="accordion-header">
|
|
87
|
+
<button class="accordion-button collapsed" type="button"
|
|
88
|
+
data-bs-toggle="collapse" data-bs-target="#cfgGitHub">
|
|
89
|
+
<i class="bi bi-github me-2"></i> GitHub
|
|
90
|
+
</button>
|
|
91
|
+
</h2>
|
|
92
|
+
<div id="cfgGitHub" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
93
|
+
<div class="accordion-body p-0">
|
|
94
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
95
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgGitHub" title="Copy section">
|
|
96
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
97
|
+
</button>
|
|
98
|
+
</div>
|
|
99
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
100
|
+
<tbody>
|
|
101
|
+
{% assign gh_keys = "github_user,repository_name,branch,local_repo,repo_map" | split: "," %}
|
|
102
|
+
{% for k in gh_keys %}
|
|
103
|
+
{% assign v = site[k] %}
|
|
104
|
+
{% if v %}
|
|
105
|
+
<tr class="cfg-row" data-key="{{ k }}" data-value="{{ v | escape }}">
|
|
106
|
+
<td class="ps-3 text-nowrap fw-semibold" style="width:30%"><code>{{ k }}</code></td>
|
|
107
|
+
<td class="text-break small">{{ v | escape }}</td>
|
|
108
|
+
<td style="width:50px" class="text-end pe-3">
|
|
109
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ v | escape }}" title="Copy value">
|
|
110
|
+
<i class="bi bi-clipboard"></i>
|
|
111
|
+
</button>
|
|
112
|
+
</td>
|
|
113
|
+
</tr>
|
|
114
|
+
{% endif %}
|
|
115
|
+
{% endfor %}
|
|
116
|
+
</tbody>
|
|
117
|
+
</table>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
{% comment %} ──────────── Section: URLs & Deployment ──────────── {% endcomment %}
|
|
123
|
+
<div class="accordion-item cfg-section">
|
|
124
|
+
<h2 class="accordion-header">
|
|
125
|
+
<button class="accordion-button collapsed" type="button"
|
|
126
|
+
data-bs-toggle="collapse" data-bs-target="#cfgURLs">
|
|
127
|
+
<i class="bi bi-link-45deg me-2"></i> URLs & Deployment
|
|
128
|
+
</button>
|
|
129
|
+
</h2>
|
|
130
|
+
<div id="cfgURLs" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
131
|
+
<div class="accordion-body p-0">
|
|
132
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
133
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgURLs" title="Copy section">
|
|
134
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
135
|
+
</button>
|
|
136
|
+
</div>
|
|
137
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
138
|
+
<tbody>
|
|
139
|
+
{% assign url_keys = "url,baseurl,remote_theme,port,permalink,public_folder" | split: "," %}
|
|
140
|
+
{% for k in url_keys %}
|
|
141
|
+
{% assign v = site[k] %}
|
|
142
|
+
{% unless v == nil %}
|
|
143
|
+
<tr class="cfg-row" data-key="{{ k }}" data-value="{{ v | escape }}">
|
|
144
|
+
<td class="ps-3 text-nowrap fw-semibold" style="width:30%"><code>{{ k }}</code></td>
|
|
145
|
+
<td class="text-break small">{{ v | escape }}</td>
|
|
146
|
+
<td style="width:50px" class="text-end pe-3">
|
|
147
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ v | escape }}" title="Copy value">
|
|
148
|
+
<i class="bi bi-clipboard"></i>
|
|
149
|
+
</button>
|
|
150
|
+
</td>
|
|
151
|
+
</tr>
|
|
152
|
+
{% endunless %}
|
|
153
|
+
{% endfor %}
|
|
154
|
+
</tbody>
|
|
155
|
+
</table>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
{% comment %} ──────────── Section: Personalization ──────────── {% endcomment %}
|
|
161
|
+
<div class="accordion-item cfg-section">
|
|
162
|
+
<h2 class="accordion-header">
|
|
163
|
+
<button class="accordion-button collapsed" type="button"
|
|
164
|
+
data-bs-toggle="collapse" data-bs-target="#cfgPersonal">
|
|
165
|
+
<i class="bi bi-palette me-2"></i> Personalization
|
|
166
|
+
</button>
|
|
167
|
+
</h2>
|
|
168
|
+
<div id="cfgPersonal" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
169
|
+
<div class="accordion-body p-0">
|
|
170
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
171
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgPersonal" title="Copy section">
|
|
172
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
173
|
+
</button>
|
|
174
|
+
</div>
|
|
175
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
176
|
+
<tbody>
|
|
177
|
+
{% assign personal_keys = "locale,logo,teaser,og_image,theme_skin,breadcrumbs,words_per_minute" | split: "," %}
|
|
178
|
+
{% for k in personal_keys %}
|
|
179
|
+
{% assign v = site[k] %}
|
|
180
|
+
{% if v %}
|
|
181
|
+
<tr class="cfg-row" data-key="{{ k }}" data-value="{{ v | escape }}">
|
|
182
|
+
<td class="ps-3 text-nowrap fw-semibold" style="width:30%"><code>{{ k }}</code></td>
|
|
183
|
+
<td class="text-break small">{{ v | escape }}</td>
|
|
184
|
+
<td style="width:50px" class="text-end pe-3">
|
|
185
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ v | escape }}" title="Copy value">
|
|
186
|
+
<i class="bi bi-clipboard"></i>
|
|
187
|
+
</button>
|
|
188
|
+
</td>
|
|
189
|
+
</tr>
|
|
190
|
+
{% endif %}
|
|
191
|
+
{% endfor %}
|
|
192
|
+
</tbody>
|
|
193
|
+
</table>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
{% comment %} ──────────── Section: Analytics ──────────── {% endcomment %}
|
|
199
|
+
<div class="accordion-item cfg-section">
|
|
200
|
+
<h2 class="accordion-header">
|
|
201
|
+
<button class="accordion-button collapsed" type="button"
|
|
202
|
+
data-bs-toggle="collapse" data-bs-target="#cfgAnalytics">
|
|
203
|
+
<i class="bi bi-graph-up me-2"></i> Analytics
|
|
204
|
+
</button>
|
|
205
|
+
</h2>
|
|
206
|
+
<div id="cfgAnalytics" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
207
|
+
<div class="accordion-body p-0">
|
|
208
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
209
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgAnalytics" title="Copy section">
|
|
210
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
211
|
+
</button>
|
|
212
|
+
</div>
|
|
213
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
214
|
+
<tbody>
|
|
215
|
+
<tr class="cfg-row" data-key="google_analytics" data-value="{{ site.google_analytics }}">
|
|
216
|
+
<td class="ps-3 text-nowrap fw-semibold" style="width:30%"><code>google_analytics</code></td>
|
|
217
|
+
<td class="text-break small">{{ site.google_analytics | escape }}</td>
|
|
218
|
+
<td style="width:50px" class="text-end pe-3">
|
|
219
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.google_analytics | escape }}" title="Copy value">
|
|
220
|
+
<i class="bi bi-clipboard"></i>
|
|
221
|
+
</button>
|
|
222
|
+
</td>
|
|
223
|
+
</tr>
|
|
224
|
+
{% if site.posthog %}
|
|
225
|
+
<tr class="cfg-row" data-key="posthog.enabled" data-value="{{ site.posthog.enabled }}">
|
|
226
|
+
<td class="ps-3 text-nowrap fw-semibold"><code>posthog.enabled</code></td>
|
|
227
|
+
<td class="small">
|
|
228
|
+
{% if site.posthog.enabled %}
|
|
229
|
+
<span class="badge bg-success">true</span>
|
|
230
|
+
{% else %}
|
|
231
|
+
<span class="badge bg-secondary">false</span>
|
|
232
|
+
{% endif %}
|
|
233
|
+
</td>
|
|
234
|
+
<td style="width:50px" class="text-end pe-3">
|
|
235
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.posthog.enabled }}" title="Copy value">
|
|
236
|
+
<i class="bi bi-clipboard"></i>
|
|
237
|
+
</button>
|
|
238
|
+
</td>
|
|
239
|
+
</tr>
|
|
240
|
+
<tr class="cfg-row" data-key="posthog.api_host" data-value="{{ site.posthog.api_host }}">
|
|
241
|
+
<td class="ps-3 text-nowrap fw-semibold"><code>posthog.api_host</code></td>
|
|
242
|
+
<td class="text-break small">{{ site.posthog.api_host | escape }}</td>
|
|
243
|
+
<td style="width:50px" class="text-end pe-3">
|
|
244
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.posthog.api_host | escape }}" title="Copy value">
|
|
245
|
+
<i class="bi bi-clipboard"></i>
|
|
246
|
+
</button>
|
|
247
|
+
</td>
|
|
248
|
+
</tr>
|
|
249
|
+
<tr class="cfg-row" data-key="posthog.respect_dnt" data-value="{{ site.posthog.respect_dnt }}">
|
|
250
|
+
<td class="ps-3 text-nowrap fw-semibold"><code>posthog.respect_dnt</code></td>
|
|
251
|
+
<td class="small">
|
|
252
|
+
{% if site.posthog.respect_dnt %}
|
|
253
|
+
<span class="badge bg-success">true</span>
|
|
254
|
+
{% else %}
|
|
255
|
+
<span class="badge bg-secondary">false</span>
|
|
256
|
+
{% endif %}
|
|
257
|
+
</td>
|
|
258
|
+
<td style="width:50px" class="text-end pe-3">
|
|
259
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.posthog.respect_dnt }}" title="Copy value">
|
|
260
|
+
<i class="bi bi-clipboard"></i>
|
|
261
|
+
</button>
|
|
262
|
+
</td>
|
|
263
|
+
</tr>
|
|
264
|
+
<tr class="cfg-row" data-key="posthog.session_recording" data-value="{{ site.posthog.session_recording }}">
|
|
265
|
+
<td class="ps-3 text-nowrap fw-semibold"><code>posthog.session_recording</code></td>
|
|
266
|
+
<td class="small">
|
|
267
|
+
{% if site.posthog.session_recording %}
|
|
268
|
+
<span class="badge bg-success">true</span>
|
|
269
|
+
{% else %}
|
|
270
|
+
<span class="badge bg-secondary">false</span>
|
|
271
|
+
{% endif %}
|
|
272
|
+
</td>
|
|
273
|
+
<td style="width:50px" class="text-end pe-3">
|
|
274
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.posthog.session_recording }}" title="Copy value">
|
|
275
|
+
<i class="bi bi-clipboard"></i>
|
|
276
|
+
</button>
|
|
277
|
+
</td>
|
|
278
|
+
</tr>
|
|
279
|
+
{% endif %}
|
|
280
|
+
</tbody>
|
|
281
|
+
</table>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
{% comment %} ──────────── Section: Collections ──────────── {% endcomment %}
|
|
287
|
+
<div class="accordion-item cfg-section">
|
|
288
|
+
<h2 class="accordion-header">
|
|
289
|
+
<button class="accordion-button collapsed" type="button"
|
|
290
|
+
data-bs-toggle="collapse" data-bs-target="#cfgCollections">
|
|
291
|
+
<i class="bi bi-collection me-2"></i> Collections
|
|
292
|
+
</button>
|
|
293
|
+
</h2>
|
|
294
|
+
<div id="cfgCollections" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
295
|
+
<div class="accordion-body p-0">
|
|
296
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
297
|
+
<thead class="table-light">
|
|
298
|
+
<tr>
|
|
299
|
+
<th class="ps-3">Collection</th>
|
|
300
|
+
<th>Output</th>
|
|
301
|
+
<th>Items</th>
|
|
302
|
+
</tr>
|
|
303
|
+
</thead>
|
|
304
|
+
<tbody>
|
|
305
|
+
{% for collection in site.collections %}
|
|
306
|
+
<tr class="cfg-row" data-key="collections.{{ collection.label }}" data-value="{{ collection.label }}">
|
|
307
|
+
<td class="ps-3 fw-semibold"><code>{{ collection.label }}</code></td>
|
|
308
|
+
<td>
|
|
309
|
+
{% if collection.output %}
|
|
310
|
+
<span class="badge bg-success">yes</span>
|
|
311
|
+
{% else %}
|
|
312
|
+
<span class="badge bg-secondary">no</span>
|
|
313
|
+
{% endif %}
|
|
314
|
+
</td>
|
|
315
|
+
<td><span class="badge bg-primary">{{ collection.docs.size }}</span></td>
|
|
316
|
+
</tr>
|
|
317
|
+
{% endfor %}
|
|
318
|
+
</tbody>
|
|
319
|
+
</table>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
{% comment %} ──────────── Section: Plugins ──────────── {% endcomment %}
|
|
325
|
+
<div class="accordion-item cfg-section">
|
|
326
|
+
<h2 class="accordion-header">
|
|
327
|
+
<button class="accordion-button collapsed" type="button"
|
|
328
|
+
data-bs-toggle="collapse" data-bs-target="#cfgPlugins">
|
|
329
|
+
<i class="bi bi-plug me-2"></i> Plugins
|
|
330
|
+
</button>
|
|
331
|
+
</h2>
|
|
332
|
+
<div id="cfgPlugins" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
333
|
+
<div class="accordion-body p-0">
|
|
334
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
335
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgPlugins" title="Copy section">
|
|
336
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
337
|
+
</button>
|
|
338
|
+
</div>
|
|
339
|
+
<ul class="list-group list-group-flush">
|
|
340
|
+
{% for plugin in site.plugins %}
|
|
341
|
+
<li class="list-group-item cfg-row d-flex justify-content-between align-items-center" data-key="plugins" data-value="{{ plugin }}">
|
|
342
|
+
<code>{{ plugin }}</code>
|
|
343
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ plugin }}" title="Copy plugin name">
|
|
344
|
+
<i class="bi bi-clipboard"></i>
|
|
345
|
+
</button>
|
|
346
|
+
</li>
|
|
347
|
+
{% endfor %}
|
|
348
|
+
</ul>
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
|
|
353
|
+
{% comment %} ──────────── Section: Build & Markdown ──────────── {% endcomment %}
|
|
354
|
+
<div class="accordion-item cfg-section">
|
|
355
|
+
<h2 class="accordion-header">
|
|
356
|
+
<button class="accordion-button collapsed" type="button"
|
|
357
|
+
data-bs-toggle="collapse" data-bs-target="#cfgBuild">
|
|
358
|
+
<i class="bi bi-hammer me-2"></i> Build & Markdown
|
|
359
|
+
</button>
|
|
360
|
+
</h2>
|
|
361
|
+
<div id="cfgBuild" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
362
|
+
<div class="accordion-body p-0">
|
|
363
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
364
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgBuild" title="Copy section">
|
|
365
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
366
|
+
</button>
|
|
367
|
+
</div>
|
|
368
|
+
<table class="table table-hover table-sm mb-0 align-middle">
|
|
369
|
+
<tbody>
|
|
370
|
+
{% assign build_keys = "markdown,collections_dir,paginate,paginate_path" | split: "," %}
|
|
371
|
+
{% for k in build_keys %}
|
|
372
|
+
{% assign v = site[k] %}
|
|
373
|
+
{% unless v == nil %}
|
|
374
|
+
<tr class="cfg-row" data-key="{{ k }}" data-value="{{ v | escape }}">
|
|
375
|
+
<td class="ps-3 text-nowrap fw-semibold" style="width:30%"><code>{{ k }}</code></td>
|
|
376
|
+
<td class="text-break small">{{ v | escape }}</td>
|
|
377
|
+
<td style="width:50px" class="text-end pe-3">
|
|
378
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ v | escape }}" title="Copy value">
|
|
379
|
+
<i class="bi bi-clipboard"></i>
|
|
380
|
+
</button>
|
|
381
|
+
</td>
|
|
382
|
+
</tr>
|
|
383
|
+
{% endunless %}
|
|
384
|
+
{% endfor %}
|
|
385
|
+
{% if site.kramdown %}
|
|
386
|
+
<tr class="cfg-row" data-key="kramdown.input" data-value="{{ site.kramdown.input }}">
|
|
387
|
+
<td class="ps-3 text-nowrap fw-semibold"><code>kramdown.input</code></td>
|
|
388
|
+
<td class="text-break small">{{ site.kramdown.input | escape }}</td>
|
|
389
|
+
<td style="width:50px" class="text-end pe-3">
|
|
390
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.kramdown.input | escape }}" title="Copy value">
|
|
391
|
+
<i class="bi bi-clipboard"></i>
|
|
392
|
+
</button>
|
|
393
|
+
</td>
|
|
394
|
+
</tr>
|
|
395
|
+
<tr class="cfg-row" data-key="kramdown.toc_levels" data-value="{{ site.kramdown.toc_levels }}">
|
|
396
|
+
<td class="ps-3 text-nowrap fw-semibold"><code>kramdown.toc_levels</code></td>
|
|
397
|
+
<td class="text-break small">{{ site.kramdown.toc_levels | escape }}</td>
|
|
398
|
+
<td style="width:50px" class="text-end pe-3">
|
|
399
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-val py-0 px-1" data-value="{{ site.kramdown.toc_levels | escape }}" title="Copy value">
|
|
400
|
+
<i class="bi bi-clipboard"></i>
|
|
401
|
+
</button>
|
|
402
|
+
</td>
|
|
403
|
+
</tr>
|
|
404
|
+
{% endif %}
|
|
405
|
+
</tbody>
|
|
406
|
+
</table>
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
</div>
|
|
410
|
+
|
|
411
|
+
{% comment %} ──────────── Section: Theme Colors ──────────── {% endcomment %}
|
|
412
|
+
{% if site.theme_color %}
|
|
413
|
+
<div class="accordion-item cfg-section">
|
|
414
|
+
<h2 class="accordion-header">
|
|
415
|
+
<button class="accordion-button collapsed" type="button"
|
|
416
|
+
data-bs-toggle="collapse" data-bs-target="#cfgColors">
|
|
417
|
+
<i class="bi bi-paint-bucket me-2"></i> Theme Colors
|
|
418
|
+
</button>
|
|
419
|
+
</h2>
|
|
420
|
+
<div id="cfgColors" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
421
|
+
<div class="accordion-body p-0">
|
|
422
|
+
<div class="d-flex justify-content-end p-2 border-bottom">
|
|
423
|
+
<button class="btn btn-sm btn-outline-secondary cfg-copy-section" data-section="cfgColors" title="Copy section">
|
|
424
|
+
<i class="bi bi-clipboard"></i> Copy Section
|
|
425
|
+
</button>
|
|
426
|
+
</div>
|
|
427
|
+
<div class="row g-2 p-3">
|
|
428
|
+
{% for color in site.theme_color %}
|
|
429
|
+
<div class="col-6 col-md-4 col-lg-3 cfg-row" data-key="theme_color.{{ color[0] }}" data-value="{{ color[1] }}">
|
|
430
|
+
<div class="d-flex align-items-center p-2 border rounded">
|
|
431
|
+
<span class="d-inline-block rounded me-2" style="width:24px;height:24px;background:{{ color[1] }};border:1px solid rgba(0,0,0,.15)"></span>
|
|
432
|
+
<div class="small">
|
|
433
|
+
<div class="fw-semibold">{{ color[0] }}</div>
|
|
434
|
+
<code class="text-muted" style="font-size:.75rem">{{ color[1] }}</code>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
</div>
|
|
438
|
+
{% endfor %}
|
|
439
|
+
</div>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
</div>
|
|
443
|
+
{% endif %}
|
|
444
|
+
|
|
445
|
+
{% comment %} ──────────── Section: Powered By ──────────── {% endcomment %}
|
|
446
|
+
{% if site.powered_by %}
|
|
447
|
+
<div class="accordion-item cfg-section">
|
|
448
|
+
<h2 class="accordion-header">
|
|
449
|
+
<button class="accordion-button collapsed" type="button"
|
|
450
|
+
data-bs-toggle="collapse" data-bs-target="#cfgPoweredBy">
|
|
451
|
+
<i class="bi bi-lightning-charge me-2"></i> Powered By
|
|
452
|
+
</button>
|
|
453
|
+
</h2>
|
|
454
|
+
<div id="cfgPoweredBy" class="accordion-collapse collapse" data-bs-parent="#configAccordion">
|
|
455
|
+
<div class="accordion-body p-0">
|
|
456
|
+
<div class="row g-2 p-3">
|
|
457
|
+
{% for tech in site.powered_by %}
|
|
458
|
+
<div class="col-6 col-md-4 cfg-row" data-key="powered_by" data-value="{{ tech.name }}">
|
|
459
|
+
<div class="d-flex align-items-center p-2 border rounded">
|
|
460
|
+
<i class="{{ site.default_icon | default: 'bi' }} {{ tech.icon | default: 'bi-box' }} me-2 fs-5"></i>
|
|
461
|
+
<div class="small">
|
|
462
|
+
<a href="{{ tech.url }}" target="_blank" rel="noopener" class="fw-semibold text-decoration-none">
|
|
463
|
+
{{ tech.name }}
|
|
464
|
+
</a>
|
|
465
|
+
{% if tech.version %}<span class="text-muted ms-1">v{{ tech.version }}</span>{% endif %}
|
|
466
|
+
</div>
|
|
467
|
+
</div>
|
|
468
|
+
</div>
|
|
469
|
+
{% endfor %}
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
</div>
|
|
473
|
+
</div>
|
|
474
|
+
{% endif %}
|
|
475
|
+
|
|
476
|
+
</div><!-- /configAccordion -->
|
|
477
|
+
|
|
478
|
+
<!-- ── Hidden full YAML for copy-all (populated by parent page) ──── -->
|
|
479
|
+
<!-- The parent page must render: <pre id="cfg-full-yaml" class="d-none">…</pre> -->
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
===================================================================
|
|
3
|
+
ENV DASHBOARD — Full environment and build information
|
|
4
|
+
===================================================================
|
|
5
|
+
|
|
6
|
+
File: env-dashboard.html
|
|
7
|
+
Path: _includes/components/env-dashboard.html
|
|
8
|
+
Purpose: Consolidates environment, build, theme, and plugin info
|
|
9
|
+
into a full admin page. Extends the data shown in the
|
|
10
|
+
gear modal's Environment tab.
|
|
11
|
+
|
|
12
|
+
Dependencies: Bootstrap 5 card/table, Jekyll variables
|
|
13
|
+
Used by: pages/_about/settings/environment.md
|
|
14
|
+
===================================================================
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
<!-- Environment Overview Cards -->
|
|
18
|
+
<div class="row g-3 mb-4">
|
|
19
|
+
<div class="col-6 col-lg-3">
|
|
20
|
+
<div class="card text-center h-100 border-primary">
|
|
21
|
+
<div class="card-body py-3">
|
|
22
|
+
<i class="bi bi-diamond fs-3 text-primary"></i>
|
|
23
|
+
<div class="fw-semibold mt-1">Jekyll {{ jekyll.version | default: "?" }}</div>
|
|
24
|
+
<small class="text-body-secondary">Jekyll Version</small>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="col-6 col-lg-3">
|
|
29
|
+
<div class="card text-center h-100 border-primary">
|
|
30
|
+
<div class="card-body py-3">
|
|
31
|
+
<i class="bi bi-gem fs-3 text-primary"></i>
|
|
32
|
+
<div class="fw-semibold mt-1">{{ site.ruby_version | default: "?" }}</div>
|
|
33
|
+
<small class="text-body-secondary">Ruby Version</small>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="col-6 col-lg-3">
|
|
38
|
+
<div class="card text-center h-100 {% if jekyll.environment == 'production' %}border-success{% else %}border-warning{% endif %}">
|
|
39
|
+
<div class="card-body py-3">
|
|
40
|
+
<i class="bi bi-lightning-charge fs-3 {% if jekyll.environment == 'production' %}text-success{% else %}text-warning{% endif %}"></i>
|
|
41
|
+
<div class="fw-semibold mt-1 text-capitalize">{{ jekyll.environment }}</div>
|
|
42
|
+
<small class="text-body-secondary">Environment</small>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="col-6 col-lg-3">
|
|
47
|
+
<div class="card text-center h-100 border-primary">
|
|
48
|
+
<div class="card-body py-3">
|
|
49
|
+
<i class="bi bi-clock-history fs-3 text-primary"></i>
|
|
50
|
+
<div class="fw-semibold mt-1">{{ site.time | date: "%b %d, %Y" }}</div>
|
|
51
|
+
<small class="text-body-secondary">Build Time</small>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<div class="row g-4">
|
|
58
|
+
|
|
59
|
+
<!-- Site Configuration -->
|
|
60
|
+
<div class="col-lg-6">
|
|
61
|
+
<div class="card h-100">
|
|
62
|
+
<div class="card-header"><i class="bi bi-globe me-1"></i> Site Configuration</div>
|
|
63
|
+
<div class="card-body p-0">
|
|
64
|
+
<table class="table table-sm mb-0">
|
|
65
|
+
<tbody>
|
|
66
|
+
<tr><td class="fw-semibold">Title</td><td>{{ site.title | escape }}</td></tr>
|
|
67
|
+
<tr><td class="fw-semibold">URL</td><td><code class="small">{{ site.url }}</code></td></tr>
|
|
68
|
+
<tr><td class="fw-semibold">Base URL</td><td><code class="small">{{ site.baseurl | default: "/" }}</code></td></tr>
|
|
69
|
+
<tr><td class="fw-semibold">Description</td><td class="small">{{ site.description | truncate: 80 | escape }}</td></tr>
|
|
70
|
+
<tr><td class="fw-semibold">Locale</td><td>{{ site.locale | default: "en_US" }}</td></tr>
|
|
71
|
+
<tr><td class="fw-semibold">Markdown</td><td><code class="small">{{ site.markdown | default: "kramdown" }}</code></td></tr>
|
|
72
|
+
<tr><td class="fw-semibold">Theme Skin</td><td>{{ site.theme_skin | default: "dark" }}</td></tr>
|
|
73
|
+
</tbody>
|
|
74
|
+
</table>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<!-- Theme & Repository Info -->
|
|
80
|
+
<div class="col-lg-6">
|
|
81
|
+
<div class="card h-100">
|
|
82
|
+
<div class="card-header"><i class="bi bi-palette me-1"></i> Theme & Repository</div>
|
|
83
|
+
<div class="card-body p-0">
|
|
84
|
+
<table class="table table-sm mb-0">
|
|
85
|
+
<tbody>
|
|
86
|
+
<tr>
|
|
87
|
+
<td class="fw-semibold">Theme</td>
|
|
88
|
+
<td>{{ site.theme | default: "remote" }} {% if site.remote_theme %}<span class="badge bg-info">remote</span>{% endif %}</td>
|
|
89
|
+
</tr>
|
|
90
|
+
{% if site.remote_theme %}
|
|
91
|
+
<tr><td class="fw-semibold">Remote Theme</td><td><code class="small">{{ site.remote_theme }}</code></td></tr>
|
|
92
|
+
{% endif %}
|
|
93
|
+
<tr><td class="fw-semibold">GitHub User</td><td>{{ site.github_user | escape }}</td></tr>
|
|
94
|
+
<tr><td class="fw-semibold">Repository</td><td><code class="small">{{ site.repository_name }}</code></td></tr>
|
|
95
|
+
<tr><td class="fw-semibold">Local Repo</td><td><code class="small">{{ site.local_repo | default: "n/a" }}</code></td></tr>
|
|
96
|
+
<tr>
|
|
97
|
+
<td class="fw-semibold">Collections Dir</td>
|
|
98
|
+
<td><code class="small">{{ site.collections_dir | default: "." }}</code></td>
|
|
99
|
+
</tr>
|
|
100
|
+
<tr><td class="fw-semibold">Build Time</td><td><code class="small">{{ site.time | date: "%Y-%m-%d %H:%M:%S %Z" }}</code></td></tr>
|
|
101
|
+
</tbody>
|
|
102
|
+
</table>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<!-- Plugins List -->
|
|
109
|
+
<h5 class="mt-4 mb-3"><i class="bi bi-plug me-1"></i> Active Plugins</h5>
|
|
110
|
+
{% if site.plugins %}
|
|
111
|
+
<div class="row g-2">
|
|
112
|
+
{% for plugin in site.plugins %}
|
|
113
|
+
<div class="col-6 col-md-4 col-lg-3">
|
|
114
|
+
<div class="card">
|
|
115
|
+
<div class="card-body py-2 px-3">
|
|
116
|
+
<i class="bi bi-puzzle me-1 text-primary"></i>
|
|
117
|
+
<span class="small fw-semibold">{{ plugin }}</span>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
{% endfor %}
|
|
122
|
+
</div>
|
|
123
|
+
{% else %}
|
|
124
|
+
<p class="text-body-secondary">No plugins configured.</p>
|
|
125
|
+
{% endif %}
|
|
126
|
+
|
|
127
|
+
<!-- URL Comparison (Dev vs Production) -->
|
|
128
|
+
<h5 class="mt-4 mb-3"><i class="bi bi-link-45deg me-1"></i> URL Configuration</h5>
|
|
129
|
+
<div class="table-responsive">
|
|
130
|
+
<table class="table table-sm">
|
|
131
|
+
<thead class="table-dark">
|
|
132
|
+
<tr>
|
|
133
|
+
<th>Setting</th>
|
|
134
|
+
<th>Current Value</th>
|
|
135
|
+
</tr>
|
|
136
|
+
</thead>
|
|
137
|
+
<tbody>
|
|
138
|
+
<tr><td class="fw-semibold">site.url</td><td><code>{{ site.url }}</code></td></tr>
|
|
139
|
+
<tr><td class="fw-semibold">site.baseurl</td><td><code>{{ site.baseurl | default: '""' }}</code></td></tr>
|
|
140
|
+
<tr><td class="fw-semibold">jekyll.environment</td><td><code>{{ jekyll.environment }}</code></td></tr>
|
|
141
|
+
<tr><td class="fw-semibold">Full base path</td><td><code>{{ site.url }}{{ site.baseurl }}</code></td></tr>
|
|
142
|
+
</tbody>
|
|
143
|
+
</table>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<!-- Quick links back to admin -->
|
|
147
|
+
<div class="mt-4">
|
|
148
|
+
<a href="{{ '/about/config/' | relative_url }}" class="btn btn-outline-secondary btn-sm me-2">
|
|
149
|
+
<i class="bi bi-gear me-1"></i> Full Configuration
|
|
150
|
+
</a>
|
|
151
|
+
<a href="{{ '/about/settings/analytics/' | relative_url }}" class="btn btn-outline-secondary btn-sm">
|
|
152
|
+
<i class="bi bi-graph-up me-1"></i> Analytics Dashboard
|
|
153
|
+
</a>
|
|
154
|
+
</div>
|