jekyll-theme-zer0 1.29.0 → 1.30.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 +715 -2
- data/_data/README.md +2 -0
- data/_data/ai.yml +5 -3
- data/_data/ai_pricing.yml +36 -0
- data/_data/backlog.yml +169 -18
- data/_data/consumers.yml +48 -5
- data/_data/features.yml +146 -20
- 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 +122 -114
- data/_data/ui-text.yml +18 -0
- data/_includes/README.md +11 -1
- data/_includes/analytics/posthog.html +2 -2
- 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 +114 -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 +11 -11
- 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 +72 -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 +6 -0
- 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 +22 -22
- data/_includes/content/giscus.html +2 -2
- data/_includes/content/intro.html +8 -8
- data/_includes/content/jsonld-faq.html +2 -2
- data/_includes/content/jsonld-software.html +2 -2
- data/_includes/content/seo.html +4 -4
- data/_includes/content/sitemap.html +27 -27
- data/_includes/content/toc.html +183 -183
- data/_includes/core/branding.html +6 -6
- 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 +102 -90
- data/_includes/core/header.html +71 -52
- 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 +12 -12
- 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 +906 -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 +39 -34
- 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 +23 -23
- data/_layouts/index.html +10 -10
- data/_layouts/landing.html +17 -17
- data/_layouts/news.html +44 -44
- data/_layouts/note.html +38 -38
- data/_layouts/notebook.html +34 -34
- data/_layouts/recipe.html +24 -24
- data/_layouts/root.html +73 -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/_mermaid.scss +375 -0
- data/_sass/components/_setup-wizard.scss +569 -40
- data/_sass/core/_navbar.scss +11 -31
- data/_sass/layouts/_navbar-extras.scss +14 -4
- data/assets/css/main.scss +1 -0
- data/assets/js/ai-chat.js +47 -5
- data/assets/js/fleet-feedback-capture.js +124 -0
- data/assets/js/fleet-feedback.js +853 -0
- data/assets/js/mermaid-diagrams.js +1267 -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-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 +2112 -361
- 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 +341 -0
- data/scripts/ci/visual_evidence_autogen.py +1060 -0
- data/scripts/content-review.rb +20 -1
- 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 +19 -2
data/scripts/content-review.rb
CHANGED
|
@@ -348,7 +348,26 @@ def check_quality(body, quality)
|
|
|
348
348
|
|
|
349
349
|
# Bare URLs.
|
|
350
350
|
if quality['flag_bare_urls']
|
|
351
|
-
|
|
351
|
+
# Two sources of false positives this guards against:
|
|
352
|
+
# [http://x](http://x) — a CORRECT markdown link whose text is the URL.
|
|
353
|
+
# The lookbehind must exclude `[` too, or the link text is counted.
|
|
354
|
+
# <script>/<style> blocks and HTML attributes — pages that embed a config
|
|
355
|
+
# generator carry URLs in JS strings and markup, which are code, not prose.
|
|
356
|
+
# <code>http://…</code> — inline code in HTML syntax, which the markdown
|
|
357
|
+
# backtick form is already exempt from; the two should agree.
|
|
358
|
+
# Stripping markup in ONE pass leaves split or nested tags behind (CodeQL:
|
|
359
|
+
# incomplete multi-character sanitization). This is prose extraction for
|
|
360
|
+
# counting, never sanitization for output, but iterate to a fixpoint anyway
|
|
361
|
+
# so the result is exact. Each pass strictly shortens the string, so it
|
|
362
|
+
# terminates.
|
|
363
|
+
prose = strip_code_fences(body)
|
|
364
|
+
loop do
|
|
365
|
+
before = prose
|
|
366
|
+
prose = prose.gsub(%r{<(script|style|code|pre)\b[^>]*>.*?</\1\s*>}mi, ' ')
|
|
367
|
+
.gsub(/<[^<>]*>/, ' ')
|
|
368
|
+
break if prose == before
|
|
369
|
+
end
|
|
370
|
+
bare = prose.scan(%r{(?<![("<\[\]])\bhttps?://[^\s)>\]]+}).reject { |u| u.include?('](') }
|
|
352
371
|
issues << Issue.new('info', 'quality', "#{bare.length} bare URL(s) — wrap as [text](url)") unless bare.empty?
|
|
353
372
|
end
|
|
354
373
|
issues
|
|
@@ -142,15 +142,16 @@ test_mermaid_init() {
|
|
|
142
142
|
local url="$1"
|
|
143
143
|
local description="$2"
|
|
144
144
|
|
|
145
|
-
run_test "$description" "curl -s '$url' | grep -q 'mermaid.
|
|
145
|
+
run_test "$description" "curl -s '$url' | grep -q 'mermaid-diagrams.js'"
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
# Test diagram
|
|
148
|
+
# Test diagram presence (a ```mermaid fence is served as code.language-mermaid;
|
|
149
|
+
# the deferred script turns it into a figure in the browser)
|
|
149
150
|
test_diagram_rendering() {
|
|
150
151
|
local url="$1"
|
|
151
152
|
local description="$2"
|
|
152
|
-
|
|
153
|
-
run_test "$description" "curl -s '$url' | grep -q '
|
|
153
|
+
|
|
154
|
+
run_test "$description" "curl -s '$url' | grep -q 'language-mermaid'"
|
|
154
155
|
}
|
|
155
156
|
|
|
156
157
|
# Main test execution
|
|
@@ -179,16 +180,29 @@ main() {
|
|
|
179
180
|
# Mermaid include file tests
|
|
180
181
|
log_info "Testing Mermaid include file..."
|
|
181
182
|
|
|
182
|
-
test_file_content "_includes/components/mermaid.html" "
|
|
183
|
-
test_file_content "_includes/components/mermaid.html" "
|
|
184
|
-
test_file_content "_includes/components/mermaid.html" "
|
|
185
|
-
test_file_content "_includes/components/mermaid.html" "
|
|
183
|
+
test_file_content "_includes/components/mermaid.html" "mm.src" "Mermaid script from _config (local vendor path)"
|
|
184
|
+
test_file_content "_includes/components/mermaid.html" "mermaidConfig" "Diagram config block emitted for the behaviour script"
|
|
185
|
+
test_file_content "_includes/components/mermaid.html" "mermaid-diagrams.js" "Behaviour script loaded after the vendor bundle"
|
|
186
|
+
test_file_content "_includes/components/mermaid.html" "defer" "Scripts are deferred (never block parsing)"
|
|
187
|
+
|
|
188
|
+
# Behaviour script (assets/js/mermaid-diagrams.js)
|
|
189
|
+
log_info "Testing diagram behaviour script..."
|
|
190
|
+
|
|
191
|
+
test_file_exists "assets/js/mermaid-diagrams.js" "Diagram behaviour script exists"
|
|
192
|
+
test_file_content "assets/js/mermaid-diagrams.js" "mermaid.initialize" "Mermaid initialization"
|
|
193
|
+
test_file_content "assets/js/mermaid-diagrams.js" "data-bs-theme" "Colour-mode change observed for re-render"
|
|
194
|
+
test_file_content "assets/js/mermaid-diagrams.js" "data-theme-skin" "Skin change observed for re-render"
|
|
195
|
+
test_file_content "assets/js/mermaid-diagrams.js" "themeVariables" "Palette derived into Mermaid theme variables"
|
|
196
|
+
test_file_content "assets/js/mermaid-diagrams.js" "zer0Mermaid" "Public API exposed"
|
|
197
|
+
test_file_exists "_sass/components/_mermaid.scss" "Diagram figure styles exist"
|
|
198
|
+
test_file_content "assets/css/main.scss" "components/mermaid" "Diagram styles imported by the stylesheet manifest"
|
|
186
199
|
|
|
187
200
|
# Documentation tests
|
|
188
201
|
log_info "Testing documentation..."
|
|
189
202
|
|
|
190
203
|
test_file_content "pages/_docs/features/mermaid-diagrams.md" "mermaid: true" "Main docs have front matter"
|
|
191
204
|
test_file_content "pages/_docs/features/mermaid-diagrams.md" "graph TD" "Main docs have examples"
|
|
205
|
+
test_file_content "pages/_docs/features/mermaid-diagrams.md" "accTitle" "Main docs cover accessible captions"
|
|
192
206
|
|
|
193
207
|
# Server tests (if not quick mode)
|
|
194
208
|
if [ "$QUICK" = false ]; then
|
|
@@ -132,6 +132,7 @@ main() {
|
|
|
132
132
|
source "$TEST_DIR/test_pixelate_images.sh"
|
|
133
133
|
source "$TEST_DIR/test_content_review.sh"
|
|
134
134
|
source "$TEST_DIR/test_agent_review_result.sh"
|
|
135
|
+
source "$TEST_DIR/test_visual_evidence_autogen.sh"
|
|
135
136
|
|
|
136
137
|
# Summary
|
|
137
138
|
echo -e "\n${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Bridge for scripts/ci/test_visual_evidence_autogen.py (ZER0-085).
|
|
4
|
+
#
|
|
5
|
+
# The planner/decider behind visual-evidence-autogen.yml lives in
|
|
6
|
+
# scripts/ci/visual_evidence_autogen.py, next to the other CI helpers, and its
|
|
7
|
+
# tests are Python beside it. This wrapper puts them on the CI path: run_tests.sh
|
|
8
|
+
# sources this file, and ./scripts/bin/test runs run_tests.sh on every PR — the
|
|
9
|
+
# same arrangement as test_agent_review_result.sh, for the same reason (a test
|
|
10
|
+
# suite no runner invokes rots silently).
|
|
11
|
+
|
|
12
|
+
VEA_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
|
13
|
+
|
|
14
|
+
print_suite_header "Visual-evidence autogen planner (scripts/ci/visual_evidence_autogen.py)"
|
|
15
|
+
|
|
16
|
+
if command -v python3 >/dev/null 2>&1; then
|
|
17
|
+
vea_output="$(python3 "$VEA_ROOT/scripts/ci/test_visual_evidence_autogen.py" 2>&1)"
|
|
18
|
+
vea_status=$?
|
|
19
|
+
echo "$vea_output"
|
|
20
|
+
assert_equals "0" "$vea_status" \
|
|
21
|
+
"scripts/ci/test_visual_evidence_autogen.py passes (plan/decide/contract guards)"
|
|
22
|
+
else
|
|
23
|
+
echo "python3 not available — skipping the visual-evidence autogen tests"
|
|
24
|
+
fi
|
data/scripts/translate.rb
CHANGED
|
@@ -170,8 +170,30 @@ module Zer0Translate
|
|
|
170
170
|
masked
|
|
171
171
|
end
|
|
172
172
|
|
|
173
|
+
# A masked span can carry a placeholder minted by an earlier pattern: a
|
|
174
|
+
# Liquid expression inside a link destination (`](⟦3⟧)`), or inside an
|
|
175
|
+
# inline code span (`` `⟦8⟧` ``). `gsub` never rescans its own replacement
|
|
176
|
+
# text, so one pass restores the outer span and strands the inner token as
|
|
177
|
+
# a literal ⟦N⟧ in the published page. Substitute until the text stops
|
|
178
|
+
# changing — nesting can only run as deep as the pattern list is long — and
|
|
179
|
+
# refuse to hand back anything still holding a placeholder, so a corrupt
|
|
180
|
+
# page fails its job instead of shipping.
|
|
173
181
|
def unmask(text)
|
|
174
|
-
|
|
182
|
+
result = text
|
|
183
|
+
(INLINE_PATTERNS.length + 1).times do
|
|
184
|
+
expanded = result.gsub(PLACEHOLDER_RE) { |token| @map.fetch(token, token) }
|
|
185
|
+
break if expanded == result
|
|
186
|
+
|
|
187
|
+
result = expanded
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
leftover = result.scan(PLACEHOLDER_RE).uniq
|
|
191
|
+
unless leftover.empty?
|
|
192
|
+
raise Translator::TranslationError,
|
|
193
|
+
"unresolved placeholder(s) #{leftover.join(', ')} after unmasking"
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
result
|
|
175
197
|
end
|
|
176
198
|
end
|
|
177
199
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-theme-zer0
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.30.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amr Abdel
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-09-
|
|
11
|
+
date: 2026-09-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|
|
@@ -79,6 +79,7 @@ files:
|
|
|
79
79
|
- README.md
|
|
80
80
|
- _data/README.md
|
|
81
81
|
- _data/ai.yml
|
|
82
|
+
- _data/ai_pricing.yml
|
|
82
83
|
- _data/authors.yml
|
|
83
84
|
- _data/backlog.yml
|
|
84
85
|
- _data/consumers.yml
|
|
@@ -109,6 +110,7 @@ files:
|
|
|
109
110
|
- _data/roadmap_plan.yml
|
|
110
111
|
- _data/routing.yml
|
|
111
112
|
- _data/series.yml
|
|
113
|
+
- _data/site_builder.yml
|
|
112
114
|
- _data/statistics_config.yml
|
|
113
115
|
- _data/theme-manifest.yml
|
|
114
116
|
- _data/theme_backgrounds.yml
|
|
@@ -131,6 +133,7 @@ files:
|
|
|
131
133
|
- _includes/components/author-card.html
|
|
132
134
|
- _includes/components/author-eeat.html
|
|
133
135
|
- _includes/components/background-customizer.html
|
|
136
|
+
- _includes/components/background-image.html
|
|
134
137
|
- _includes/components/background-settings.html
|
|
135
138
|
- _includes/components/book-card.html
|
|
136
139
|
- _includes/components/book-nav.html
|
|
@@ -242,6 +245,8 @@ files:
|
|
|
242
245
|
- _includes/navigation/unified-drawer.html
|
|
243
246
|
- _includes/obsidian/full-graph.html
|
|
244
247
|
- _includes/search-data.json
|
|
248
|
+
- _includes/setup/claude-session.html
|
|
249
|
+
- _includes/setup/prereq-checklist.html
|
|
245
250
|
- _includes/setup/wizard.html
|
|
246
251
|
- _includes/stats/README.md
|
|
247
252
|
- _includes/stats/stats-categories.html
|
|
@@ -290,6 +295,7 @@ files:
|
|
|
290
295
|
- _sass/components/_content-tables.scss
|
|
291
296
|
- _sass/components/_cookie-banner.scss
|
|
292
297
|
- _sass/components/_footer.scss
|
|
298
|
+
- _sass/components/_mermaid.scss
|
|
293
299
|
- _sass/components/_notes-index.scss
|
|
294
300
|
- _sass/components/_notes.scss
|
|
295
301
|
- _sass/components/_page-feedback.scss
|
|
@@ -356,7 +362,10 @@ files:
|
|
|
356
362
|
- assets/js/code-copy.js
|
|
357
363
|
- assets/js/config-utility.js
|
|
358
364
|
- assets/js/docs.min.js
|
|
365
|
+
- assets/js/fleet-feedback-capture.js
|
|
366
|
+
- assets/js/fleet-feedback.js
|
|
359
367
|
- assets/js/halfmoon.js
|
|
368
|
+
- assets/js/mermaid-diagrams.js
|
|
360
369
|
- assets/js/modules/navigation/config.js
|
|
361
370
|
- assets/js/modules/navigation/focus.js
|
|
362
371
|
- assets/js/modules/navigation/gestures.js
|
|
@@ -388,6 +397,7 @@ files:
|
|
|
388
397
|
- assets/js/setup-wizard.js
|
|
389
398
|
- assets/js/share-actions.js
|
|
390
399
|
- assets/js/side-bar-folders.js
|
|
400
|
+
- assets/js/site-builder.js
|
|
391
401
|
- assets/js/skin-editor.js
|
|
392
402
|
- assets/js/stats.js
|
|
393
403
|
- assets/js/table-copy.js
|
|
@@ -433,6 +443,10 @@ files:
|
|
|
433
443
|
- assets/vendor/mathjax/es5/tex-mml-chtml.js
|
|
434
444
|
- assets/vendor/mermaid/mermaid.min.js
|
|
435
445
|
- scripts/README.md
|
|
446
|
+
- scripts/ai/README.md
|
|
447
|
+
- scripts/ai/api_call.rb
|
|
448
|
+
- scripts/ai/usage.rb
|
|
449
|
+
- scripts/ai/usage_report.rb
|
|
436
450
|
- scripts/analyze-commits.sh
|
|
437
451
|
- scripts/bin/audit-consumer
|
|
438
452
|
- scripts/bin/build
|
|
@@ -447,6 +461,8 @@ files:
|
|
|
447
461
|
- scripts/ci/agent_review_result.py
|
|
448
462
|
- scripts/ci/classify_changes.py
|
|
449
463
|
- scripts/ci/test_agent_review_result.py
|
|
464
|
+
- scripts/ci/test_visual_evidence_autogen.py
|
|
465
|
+
- scripts/ci/visual_evidence_autogen.py
|
|
450
466
|
- scripts/content-review.rb
|
|
451
467
|
- scripts/convert-notebooks.sh
|
|
452
468
|
- scripts/design-system-check.rb
|
|
@@ -588,6 +604,7 @@ files:
|
|
|
588
604
|
- scripts/test/lib/test_pixelate_images.sh
|
|
589
605
|
- scripts/test/lib/test_validation.sh
|
|
590
606
|
- scripts/test/lib/test_version.sh
|
|
607
|
+
- scripts/test/lib/test_visual_evidence_autogen.sh
|
|
591
608
|
- scripts/test/theme/validate
|
|
592
609
|
- scripts/translate.rb
|
|
593
610
|
- scripts/update-preview-paths.sh
|