jekyll-theme-zer0 0.21.2 → 0.22.5

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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +103 -0
  3. data/README.md +86 -46
  4. data/_data/authors.yml +12 -3
  5. data/_data/features.yml +1 -1
  6. data/_data/glossary.yml +101 -0
  7. data/_data/navigation/docs.yml +12 -0
  8. data/_data/navigation/home.yml +2 -2
  9. data/_data/navigation/main.yml +2 -8
  10. data/_data/prompts.yml +184 -0
  11. data/_includes/components/author-eeat.html +133 -0
  12. data/_includes/components/cookie-consent.html +9 -9
  13. data/_includes/components/dev-shortcuts.html +36 -27
  14. data/_includes/components/env-detect.html +14 -0
  15. data/_includes/components/env-switcher.html +38 -16
  16. data/_includes/components/halfmoon.html +31 -20
  17. data/_includes/components/info-section.html +4 -3
  18. data/_includes/components/js-cdn.html +8 -15
  19. data/_includes/components/mermaid.html +13 -9
  20. data/_includes/components/powered-by.html +5 -3
  21. data/_includes/content/intro.html +64 -4
  22. data/_includes/content/jsonld-faq.html +47 -0
  23. data/_includes/content/jsonld-software.html +121 -0
  24. data/_includes/content/sitemap.html +2 -2
  25. data/_includes/core/branding.html +9 -7
  26. data/_includes/core/footer.html +12 -9
  27. data/_includes/core/head.html +17 -14
  28. data/_includes/core/header.html +33 -21
  29. data/_includes/navigation/navbar.html +130 -124
  30. data/_includes/navigation/sidebar-left.html +3 -3
  31. data/_includes/navigation/sidebar-right.html +4 -8
  32. data/_includes/search-data.json +1 -2
  33. data/_layouts/landing.html +30 -11
  34. data/_layouts/root.html +4 -4
  35. data/_layouts/sitemap-collection.html +20 -10
  36. data/_sass/core/_docs-layout.scss +756 -0
  37. data/_sass/core/_navbar.scss +522 -69
  38. data/_sass/core/_offcanvas-panels.scss +48 -0
  39. data/_sass/core/_syntax.scss +1 -51
  40. data/_sass/core/_theme.scss +2 -249
  41. data/_sass/core/_variables.scss +1 -54
  42. data/_sass/core/code-copy.scss +6 -6
  43. data/_sass/custom.scss +141 -133
  44. data/_sass/theme/_color-modes.scss +3 -0
  45. data/_sass/theme/_css-variables.scss +29 -0
  46. data/_sass/theme/_wizard-mode.scss +31 -0
  47. data/assets/css/custom.css +5 -120
  48. data/assets/css/main.scss +6 -2
  49. data/assets/css/stats.css +3 -0
  50. data/assets/css/theme-npm-entry.scss +6 -0
  51. data/assets/css/vendor/.gitkeep +0 -0
  52. data/assets/images/authors/bamr87.png +0 -0
  53. data/assets/js/auto-hide-nav.js +71 -20
  54. data/assets/js/color-modes.js +8 -2
  55. data/assets/js/halfmoon.js +8 -2
  56. data/assets/js/myScript.js +4 -12
  57. data/assets/js/navigation.js +174 -19
  58. data/assets/js/search-modal.js +50 -7
  59. data/assets/js/ui-enhancements.js +13 -0
  60. data/assets/vendor/bootstrap/css/bootstrap.min.css +5 -0
  61. data/assets/vendor/bootstrap/js/bootstrap.bundle.min.js +6 -0
  62. data/assets/vendor/bootstrap-icons/font/bootstrap-icons.css +2018 -0
  63. data/assets/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff +0 -0
  64. data/assets/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff2 +0 -0
  65. data/assets/vendor/font-awesome/css/all.min.css +9 -0
  66. data/assets/vendor/font-awesome/webfonts/fa-brands-400.ttf +0 -0
  67. data/assets/vendor/font-awesome/webfonts/fa-brands-400.woff2 +0 -0
  68. data/assets/vendor/font-awesome/webfonts/fa-regular-400.ttf +0 -0
  69. data/assets/vendor/font-awesome/webfonts/fa-regular-400.woff2 +0 -0
  70. data/assets/vendor/font-awesome/webfonts/fa-solid-900.ttf +0 -0
  71. data/assets/vendor/font-awesome/webfonts/fa-solid-900.woff2 +0 -0
  72. data/assets/vendor/font-awesome/webfonts/fa-v4compatibility.ttf +0 -0
  73. data/assets/vendor/font-awesome/webfonts/fa-v4compatibility.woff2 +0 -0
  74. data/assets/vendor/github-calendar/github-calendar-responsive.css +231 -0
  75. data/assets/vendor/github-calendar/github-calendar.min.js +240 -0
  76. data/assets/vendor/jquery/jquery-3.7.1.min.js +2 -0
  77. data/assets/vendor/mathjax/es5/adaptors/liteDOM.js +1 -0
  78. data/assets/vendor/mathjax/es5/core.js +1 -0
  79. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_AMS-Regular.woff +0 -0
  80. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Bold.woff +0 -0
  81. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Regular.woff +0 -0
  82. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Bold.woff +0 -0
  83. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Regular.woff +0 -0
  84. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Main-Bold.woff +0 -0
  85. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Main-Italic.woff +0 -0
  86. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff +0 -0
  87. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Math-BoldItalic.woff +0 -0
  88. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff +0 -0
  89. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Math-Regular.woff +0 -0
  90. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Bold.woff +0 -0
  91. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Italic.woff +0 -0
  92. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Regular.woff +0 -0
  93. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Script-Regular.woff +0 -0
  94. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size1-Regular.woff +0 -0
  95. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff +0 -0
  96. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff +0 -0
  97. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size4-Regular.woff +0 -0
  98. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Typewriter-Regular.woff +0 -0
  99. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Bold.woff +0 -0
  100. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Regular.woff +0 -0
  101. data/assets/vendor/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Zero.woff +0 -0
  102. data/assets/vendor/mathjax/es5/startup.js +1 -0
  103. data/assets/vendor/mathjax/es5/tex-mml-chtml.js +1 -0
  104. data/assets/vendor/mermaid/mermaid.min.js +2029 -0
  105. data/scripts/bin/build +12 -2
  106. data/scripts/lib/version.sh +41 -0
  107. data/scripts/test/integration/mermaid +1 -1
  108. data/scripts/vendor-install.sh +196 -0
  109. metadata +62 -3
  110. data/_sass/core/_docs.scss +0 -3219
@@ -1,35 +1,46 @@
1
1
  <!--
2
2
  file: halfmoon.html
3
3
  path: _includes/halfmoon.html
4
- description: This is the snippet for the dark mode switch.
4
+ description: Dark / light / auto theme switcher for the settings modal (Bootstrap dropdown).
5
5
  -->
6
6
 
7
- <div class="justify-content-end">
8
- <i class="btn dropdown-toggle" id="bd-theme" type="button" aria-expanded="true" data-bs-toggle="dropdown" data-bs-display="static" aria-label="Toggle theme (dark)">
9
- <i class="bi bi-circle-half theme-icon-active"><use href="#moon-stars-fill"></use></i>
10
- <span class="d-none ms-2" id="bd-theme-text">Toggle theme</span>
11
- </i>
12
- <ul class="dropdown-menu" aria-labelledby="bd-theme-text" data-bs-popper="static">
7
+ <div class="dropdown bd-theme-dropdown">
8
+ <button
9
+ type="button"
10
+ class="btn btn-outline-secondary dropdown-toggle d-flex align-items-center justify-content-center px-2 py-2"
11
+ id="bd-theme"
12
+ data-bs-toggle="dropdown"
13
+ data-bs-popper-config='{"strategy":"fixed"}'
14
+ aria-expanded="false"
15
+ aria-haspopup="true"
16
+ aria-label="Toggle theme (dark)"
17
+ >
18
+ <svg class="bi theme-icon-active flex-shrink-0" width="1.15em" height="1.15em" fill="currentColor" aria-hidden="true">
19
+ <use href="#moon-stars-fill"></use>
20
+ </svg>
21
+ <span class="visually-hidden" id="bd-theme-text">Toggle theme</span>
22
+ </button>
23
+ <ul class="dropdown-menu dropdown-menu-end shadow-sm bd-theme-menu py-1" aria-labelledby="bd-theme">
13
24
  <li>
14
- <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false">
15
- <svg class="bi me-2 opacity-50"><use href="#sun-fill"></use></svg>
16
- Light
17
- <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
25
+ <button type="button" class="dropdown-item d-flex align-items-center gap-2" data-bs-theme-value="light" aria-pressed="false">
26
+ <svg class="bi flex-shrink-0 opacity-50" width="1em" height="1em" fill="currentColor" aria-hidden="true"><use href="#sun-fill"></use></svg>
27
+ <span>Light</span>
28
+ <svg class="bi ms-auto flex-shrink-0 d-none" width="1em" height="1em" fill="currentColor" aria-hidden="true"><use href="#check2"></use></svg>
18
29
  </button>
19
30
  </li>
20
31
  <li>
21
- <button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="dark" aria-pressed="true">
22
- <svg class="bi me-2 opacity-50"><use href="#moon-stars-fill"></use></svg>
23
- Dark
24
- <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
32
+ <button type="button" class="dropdown-item d-flex align-items-center gap-2 active" data-bs-theme-value="dark" aria-pressed="true">
33
+ <svg class="bi flex-shrink-0 opacity-50" width="1em" height="1em" fill="currentColor" aria-hidden="true"><use href="#moon-stars-fill"></use></svg>
34
+ <span>Dark</span>
35
+ <svg class="bi ms-auto flex-shrink-0 d-none" width="1em" height="1em" fill="currentColor" aria-hidden="true"><use href="#check2"></use></svg>
25
36
  </button>
26
37
  </li>
27
38
  <li>
28
- <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="false">
29
- <svg class="bi me-2 opacity-50"><use href="#circle-half"></use></svg>
30
- Auto
31
- <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
39
+ <button type="button" class="dropdown-item d-flex align-items-center gap-2" data-bs-theme-value="auto" aria-pressed="false">
40
+ <svg class="bi flex-shrink-0 opacity-50" width="1em" height="1em" fill="currentColor" aria-hidden="true"><use href="#circle-half"></use></svg>
41
+ <span>Auto</span>
42
+ <svg class="bi ms-auto flex-shrink-0 d-none" width="1em" height="1em" fill="currentColor" aria-hidden="true"><use href="#check2"></use></svg>
32
43
  </button>
33
44
  </li>
34
45
  </ul>
35
- </div>
46
+ </div>
@@ -21,6 +21,7 @@
21
21
  ===================================================================
22
22
  -->
23
23
 
24
+ {% include components/env-detect.html %}
24
25
  <!-- Settings Modal -->
25
26
  <div class="modal fade" id="info-section" tabindex="-1" aria-labelledby="infoSectionLabel" aria-hidden="true">
26
27
  <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
@@ -48,10 +49,10 @@
48
49
  <button class="nav-link" id="environment-tab" data-bs-toggle="tab" data-bs-target="#environment-pane" type="button" role="tab" aria-controls="environment-pane" aria-selected="false">
49
50
  <i class="bi bi-hdd-network me-1"></i>
50
51
  <span class="d-none d-sm-inline">Environment</span>
51
- {% if jekyll.environment == "development" %}
52
- <span class="badge bg-warning text-dark ms-1 d-none d-md-inline-block">Dev</span>
53
- {% else %}
52
+ {% if is_production %}
54
53
  <span class="badge bg-success ms-1 d-none d-md-inline-block">Prod</span>
54
+ {% else %}
55
+ <span class="badge bg-warning text-dark ms-1 d-none d-md-inline-block">Dev</span>
55
56
  {% endif %}
56
57
  </button>
57
58
  </li>
@@ -1,35 +1,28 @@
1
1
  <!--
2
2
  ===================================================================
3
- JAVASCRIPT CDN - External JavaScript Library Loading
3
+ JAVASCRIPT - Local vendor libraries
4
4
  ===================================================================
5
5
 
6
6
  File: js-cdn.html
7
7
  Path: _includes/components/js-cdn.html
8
- Purpose: Load JavaScript libraries from CDN for site functionality
8
+ Purpose: Load jQuery and Bootstrap from assets/vendor (no runtime CDN).
9
9
 
10
10
  Libraries:
11
- - jQuery 3.7.1 - DOM manipulation and AJAX
12
- - Bootstrap 5.3.3 Bundle - UI components (includes Popper.js)
11
+ - jQuery 3.7.1
12
+ - Bootstrap 5.3.3 bundle (includes Popper.js)
13
13
 
14
- Note: Bootstrap 5 bundle includes Popper.js, so separate Popper
15
- loading is not needed and can cause conflicts.
16
-
17
- Source: https://getbootstrap.com/docs/5.3/getting-started/contents/
14
+ Refresh: ./scripts/vendor-install.sh (see vendor-manifest.json)
18
15
  ===================================================================
19
16
  -->
20
17
 
21
18
  <!-- jQuery 3.7.1 -->
22
- <script src="https://code.jquery.com/jquery-3.7.1.min.js"
23
- integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
24
- crossorigin="anonymous"></script>
19
+ <script src="{{ '/assets/vendor/jquery/jquery-3.7.1.min.js' | relative_url }}"></script>
25
20
 
26
21
  <!-- Bootstrap 5.3.3 Bundle (includes Popper.js) -->
27
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
28
- integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
29
- crossorigin="anonymous"></script>
22
+ <script src="{{ '/assets/vendor/bootstrap/js/bootstrap.bundle.min.js' | relative_url }}"></script>
30
23
 
31
24
  <!-- Navigation scripts - Offcanvas, dropdowns, mobile interactions -->
32
- <script src="{{ '/assets/js/navigation.js' | relative_url }}"></script>
25
+ <script src="{{ '/assets/js/navigation.js' | relative_url }}?t={{ site.time | date: '%s' }}"></script>
33
26
 
34
27
  <!-- Navigation ES6 Modules - Enhanced sidebar, scroll spy, keyboard shortcuts, gestures -->
35
28
  <script type="module" src="{{ '/assets/js/modules/navigation/index.js' | relative_url }}"></script>
@@ -26,7 +26,7 @@
26
26
  - Supports all Mermaid diagram types (flowcharts, sequence, gantt, etc.)
27
27
 
28
28
  Configuration:
29
- - Mermaid v10 via CDN (latest stable)
29
+ - Mermaid v10 bundled locally (_config.yml mermaid.src)
30
30
  - Forest theme for dark mode compatibility
31
31
  - Client-side code block conversion for GitHub Pages compatibility
32
32
 
@@ -41,8 +41,8 @@
41
41
  ===================================================================
42
42
  -->
43
43
 
44
- <!-- Load Mermaid.js from CDN (latest stable version) -->
45
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
44
+ <!-- Load Mermaid.js (bundled locally) -->
45
+ <script type="text/javascript" src="{{ site.mermaid.src | relative_url }}"></script>
46
46
 
47
47
  <!-- Initialize Mermaid with custom configuration -->
48
48
  <script>
@@ -53,8 +53,11 @@
53
53
  function getBootstrapTheme() {
54
54
  // Check data-bs-theme attribute on html element
55
55
  var htmlTheme = document.documentElement.getAttribute('data-bs-theme');
56
- if (htmlTheme === 'dark' || htmlTheme === 'light') {
57
- return htmlTheme;
56
+ if (htmlTheme === 'dark' || htmlTheme === 'wizard') {
57
+ return 'dark';
58
+ }
59
+ if (htmlTheme === 'light') {
60
+ return 'light';
58
61
  }
59
62
  // Fallback to prefers-color-scheme
60
63
  if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
@@ -200,7 +203,8 @@
200
203
  themeVariables: mermaidThemeConfig.themeVariables,
201
204
  flowchart: {
202
205
  useMaxWidth: true,
203
- htmlLabels: true,
206
+ // SVG labels avoid foreignObject clipping/position bugs with theme CSS
207
+ htmlLabels: false,
204
208
  curve: 'basis'
205
209
  },
206
210
  sequence: {
@@ -260,7 +264,7 @@
260
264
  themeVariables: newMermaidConfig.themeVariables,
261
265
  flowchart: {
262
266
  useMaxWidth: true,
263
- htmlLabels: true,
267
+ htmlLabels: false,
264
268
  curve: 'basis'
265
269
  },
266
270
  sequence: {
@@ -316,8 +320,8 @@
316
320
  });
317
321
  </script>
318
322
 
319
- <!-- FontAwesome for Mermaid icon support (optional) -->
320
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" crossorigin="anonymous">
323
+ <!-- Font Awesome for Mermaid icon support (bundled) -->
324
+ <link rel="stylesheet" href="{{ '/assets/vendor/font-awesome/css/all.min.css' | relative_url }}">
321
325
 
322
326
  <!-- Custom CSS for Mermaid diagrams -->
323
327
  <style>
@@ -11,10 +11,12 @@
11
11
  <div class="card-body d-flex align-items-start">
12
12
  <div>
13
13
  <h5 class="card-title">{{ power.name }}</h5>
14
- <p class="card-text">Version: {{ power.version }}</p>
15
- <a href="{{ power.url }}" class="btn btn-primary" rel="nofollow">Go to site</a>
14
+ {% if power.version %}
15
+ <p class="card-text small text-body-secondary mb-2">Version {{ power.version }}</p>
16
+ {% endif %}
17
+ <a href="{{ power.url }}" class="btn btn-primary btn-sm" rel="nofollow">Go to site</a>
16
18
  </div>
17
- <i class="{{ power.icon }} fs-1 ms-auto"></i>
19
+ <i class="{{ site.default_icon }} {{ power.icon }} fs-1 ms-auto text-primary" aria-hidden="true"></i>
18
20
  </div>
19
21
  </div>
20
22
  </div>
@@ -1,9 +1,13 @@
1
1
  <!--
2
- file: _includes/intro.html
3
- description: Enhanced intro section with improved share functionality and better button alignment
4
- path: _includes/intro.html
2
+ file: _includes/content/intro.html
3
+ description: Enhanced intro section with share, edit, and Copilot agent session buttons
4
+ path: _includes/content/intro.html
5
5
  features:
6
6
  - Responsive share dropdown with multiple social platforms
7
+ - Edit on GitHub quick link
8
+ - Copilot Agent dropdown: select a prompt template to pre-fill a GitHub issue
9
+ - Issue body includes prompt template + page context + environment details
10
+ - Prompts sourced from _data/prompts.yml
7
11
  - Properly aligned action buttons at bottom right
8
12
  - Improved accessibility with icons and labels
9
13
  - Clean button grouping with consistent spacing
@@ -35,6 +39,14 @@
35
39
  {% assign preview_path = preview_image | relative_url %}
36
40
  {% endif %}
37
41
 
42
+ {% comment %}
43
+ Build the file path, branch, and repo owner for action buttons.
44
+ {% endcomment %}
45
+ {% assign repo_branch = site.branch | default: "main" %}
46
+ {% assign file_path = page_dir | append: "/" | append: page.path %}
47
+ {% assign repo_parts = site.repository | split: "/" %}
48
+ {% assign repo_owner = repo_parts[0] %}
49
+
38
50
  <div class="bd-intro pt-5 ps-lg-2 position-relative" style="
39
51
  background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('{{ preview_path | relative_url }}') no-repeat center center / cover;
40
52
  color: #fff;">
@@ -77,8 +89,56 @@
77
89
  </ul>
78
90
  </div>
79
91
 
92
+ <!-- Copilot Agent Prompt Dropdown -->
93
+ <div class="dropdown">
94
+ <button class="btn btn-success dropdown-toggle" type="button" id="copilotAgentDropdown" data-bs-toggle="dropdown" aria-expanded="false" title="Open a GitHub issue with a Copilot prompt for this page">
95
+ <i class="bi bi-robot"></i>
96
+ <span class="d-none d-sm-inline ms-1">Copilot Agent</span>
97
+ </button>
98
+ <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="copilotAgentDropdown">
99
+ {% for prompt in site.data.prompts %}
100
+ {% capture issue_title %}[{{ prompt.label }}] {{ page.title }}{% endcapture %}
101
+ {% capture issue_body %}{{ prompt.body }}
102
+ ---
103
+
104
+ ## 📄 Page Context
105
+
106
+ | Field | Value |
107
+ |---|---|
108
+ | **Title** | {{ page.title }} |
109
+ | **URL** | {{ site.url }}{{ page.url }} |
110
+ | **File** | `{{ file_path }}` |
111
+ | **Branch** | `{{ repo_branch }}` |
112
+ | **Layout** | `{{ page.layout }}` |
113
+ | **Collection** | `{{ page.collection }}` |
114
+ | **Author** | {{ page.author | default: site.author.name }} |
115
+ | **Date** | {{ page.date }} |
116
+ | **Last Modified** | {{ page.lastmod }} |
117
+ | **Tags** | {{ page.tags | join: ", " }} |
118
+ | **Categories** | {{ page.categories | join: ", " }} |
119
+
120
+ ## 🔧 Environment
121
+
122
+ | Field | Value |
123
+ |---|---|
124
+ | **Repository** | `{{ site.repository }}` |
125
+ | **Site URL** | {{ site.url }} |
126
+ | **Jekyll Env** | `{{ jekyll.environment }}` |
127
+ | **Theme** | `{{ site.theme | default: site.remote_theme }}` |
128
+ | **Base URL** | `{{ site.baseurl }}` |
129
+ {% endcapture %}
130
+ <li>
131
+ <a class="dropdown-item" href="https://github.com/{{ site.repository }}/issues/new?assignees=copilot&labels=ai-agent&title={{ issue_title | url_encode }}&body={{ issue_body | url_encode }}" target="_blank" rel="noopener noreferrer">
132
+ <i class="bi {{ prompt.icon }} me-2"></i>{{ prompt.label }}
133
+ {% if prompt.description %}<small class="text-muted d-block">{{ prompt.description }}</small>{% endif %}
134
+ </a>
135
+ </li>
136
+ {% endfor %}
137
+ </ul>
138
+ </div>
139
+
80
140
  <!-- Edit on Github Button -->
81
- <a href="https://github.com/{{ site.repository }}/blob/master/{{ page_dir }}/{{ page.path }}" class="btn btn-dark">
141
+ <a href="https://github.com/{{ site.repository }}/blob/{{ repo_branch }}/{{ file_path }}" class="btn btn-dark">
82
142
  <i class="bi bi-github"></i>
83
143
  <span class="d-none d-sm-inline ms-1">Edit on GitHub</span>
84
144
  </a>
@@ -0,0 +1,47 @@
1
+ <!--
2
+ ===================================================================
3
+ JSON-LD FAQ SCHEMA - FAQPage Structured Data
4
+ ===================================================================
5
+
6
+ File: jsonld-faq.html
7
+ Path: _includes/content/jsonld-faq.html
8
+ Purpose: Renders FAQPage schema from page.faq_items front matter
9
+ for rich search results and AI citation injection.
10
+
11
+ Parameters:
12
+ - Reads page.faq_items array from front matter
13
+ - Each item needs: question, answer
14
+
15
+ Usage:
16
+ In page front matter:
17
+ faq_items:
18
+ - question: "What is zer0-mistakes?"
19
+ answer: "A Jekyll theme..."
20
+ In layout/page:
21
+ include content/jsonld-faq.html
22
+
23
+ Dependencies:
24
+ - Page front matter with faq_items array
25
+ ===================================================================
26
+ -->
27
+
28
+ {% if page.faq_items and page.faq_items.size > 0 %}
29
+ <script type="application/ld+json">
30
+ {
31
+ "@context": "https://schema.org",
32
+ "@type": "FAQPage",
33
+ "mainEntity": [
34
+ {% for item in page.faq_items %}
35
+ {
36
+ "@type": "Question",
37
+ "name": {{ item.question | jsonify }},
38
+ "acceptedAnswer": {
39
+ "@type": "Answer",
40
+ "text": {{ item.answer | jsonify }}
41
+ }
42
+ }{% unless forloop.last %},{% endunless %}
43
+ {% endfor %}
44
+ ]
45
+ }
46
+ </script>
47
+ {% endif %}
@@ -0,0 +1,121 @@
1
+ <!--
2
+ ===================================================================
3
+ JSON-LD STRUCTURED DATA - SoftwareApplication + WebPage Schema
4
+ ===================================================================
5
+
6
+ File: jsonld-software.html
7
+ Path: _includes/content/jsonld-software.html
8
+ Purpose: Provides rich structured data for AI engines and search
9
+ engines to accurately cite and describe the zer0-mistakes
10
+ Jekyll theme as a SoftwareApplication entity.
11
+
12
+ Template Logic:
13
+ - Renders SoftwareApplication schema on the homepage only
14
+ - Links to a WebPage wrapper via @id references
15
+ - Pulls version, author, and description from site config
16
+
17
+ Dependencies:
18
+ - _config.yml: site.url, site.title, site.description, site.author
19
+ - lib/jekyll-theme-zer0/version.rb (version referenced in config)
20
+
21
+ Usage:
22
+ - Included automatically in _includes/core/head.html
23
+ - Conditional: only renders when page.permalink == "/"
24
+ ===================================================================
25
+ -->
26
+
27
+ {% if page.permalink == "/" or page.url == "/" %}
28
+ <script type="application/ld+json">
29
+ {
30
+ "@context": "https://schema.org",
31
+ "@graph": [
32
+ {
33
+ "@type": "WebPage",
34
+ "@id": "{{ site.url }}/#webpage",
35
+ "url": "{{ site.url }}/",
36
+ "name": "{{ site.title }} — {{ page.description | default: site.description | strip_html | strip_newlines | escape }}",
37
+ "isPartOf": {
38
+ "@id": "{{ site.url }}/#website"
39
+ },
40
+ "about": {
41
+ "@id": "{{ site.url }}/#software"
42
+ },
43
+ "datePublished": "{{ page.created | default: '2024-02-10' }}",
44
+ "dateModified": "{{ page.lastmod | default: site.time | date: '%Y-%m-%d' }}",
45
+ "description": "{{ page.description | default: site.description | strip_html | strip_newlines | escape }}",
46
+ "inLanguage": "{{ site.locale | default: 'en-US' }}"
47
+ },
48
+ {
49
+ "@type": "WebSite",
50
+ "@id": "{{ site.url }}/#website",
51
+ "url": "{{ site.url }}/",
52
+ "name": "{{ site.title }}",
53
+ "publisher": {
54
+ "@id": "{{ site.url }}/#author"
55
+ },
56
+ "inLanguage": "{{ site.locale | default: 'en-US' }}"
57
+ },
58
+ {
59
+ "@type": "SoftwareApplication",
60
+ "@id": "{{ site.url }}/#software",
61
+ "name": "{{ site.title }}",
62
+ "alternateName": "jekyll-theme-zer0",
63
+ "description": "GitHub Pages compatible Jekyll theme with Bootstrap 5.3, featuring Docker-first development, automated installation, and comprehensive documentation.",
64
+ "applicationCategory": "DeveloperApplication",
65
+ "operatingSystem": "Cross-platform (macOS, Linux, Windows via Docker)",
66
+ "url": "{{ site.url }}/",
67
+ "downloadUrl": "https://rubygems.org/gems/jekyll-theme-zer0",
68
+ "installUrl": "https://github.com/bamr87/zer0-mistakes#-quick-start",
69
+ "softwareVersion": "{{ page.version | default: site.version | default: '0.21.2' }}",
70
+ "datePublished": "2024-02-10",
71
+ "dateModified": "{{ site.time | date: '%Y-%m-%d' }}",
72
+ "license": "https://opensource.org/licenses/MIT",
73
+ "isAccessibleForFree": true,
74
+ "offers": {
75
+ "@type": "Offer",
76
+ "price": "0",
77
+ "priceCurrency": "USD"
78
+ },
79
+ "author": {
80
+ "@id": "{{ site.url }}/#author"
81
+ },
82
+ "publisher": {
83
+ "@id": "{{ site.url }}/#author"
84
+ },
85
+ "codeRepository": "https://github.com/bamr87/zer0-mistakes",
86
+ "programmingLanguage": ["Ruby", "Liquid", "HTML", "SCSS", "JavaScript"],
87
+ "runtimePlatform": "Jekyll",
88
+ "featureList": [
89
+ "Bootstrap 5.3.3 responsive UI framework",
90
+ "Docker-first cross-platform development",
91
+ "AI-powered self-healing installation",
92
+ "GitHub Pages native compatibility",
93
+ "Privacy-compliant PostHog analytics",
94
+ "Mermaid diagram rendering",
95
+ "MathJax mathematical notation",
96
+ "Automated semantic versioning and release pipeline",
97
+ "Client-side search functionality",
98
+ "Cookie consent (GDPR/CCPA compliant)",
99
+ "Progressive Web App support",
100
+ "43 documented features with comprehensive tests"
101
+ ],
102
+ "screenshot": "{{ site.url }}/assets/images/wizard-on-journey.png",
103
+ "softwareRequirements": "Docker Desktop or Ruby >= 2.7 with Bundler"
104
+ },
105
+ {
106
+ "@type": "Person",
107
+ "@id": "{{ site.url }}/#author",
108
+ "name": "{{ site.founder | default: 'Amr Abdel-Motaleb' }}",
109
+ "alternateName": "bamr87",
110
+ "url": "https://github.com/bamr87",
111
+ "sameAs": [
112
+ "https://github.com/bamr87",
113
+ "https://twitter.com/bamr87"
114
+ ],
115
+ "jobTitle": "Software Developer",
116
+ "knowsAbout": ["Jekyll", "Docker", "Bootstrap", "GitHub Pages", "Static Site Generation"]
117
+ }
118
+ ]
119
+ }
120
+ </script>
121
+ {% endif %}
@@ -211,8 +211,8 @@
211
211
  {% assign total_pages = 0 %}
212
212
  {% assign collections_data = '' %}
213
213
 
214
- {% comment %} Include regular pages {% endcomment %}
215
- {% for page in site.pages %}
214
+ {% comment %}Loose Jekyll pages (site.pages in Liquid is the "pages" collection, not these files){% endcomment %}
215
+ {% for page in site.html_pages %}
216
216
  {% unless page.sitemap == false %}
217
217
  {% assign total_pages = total_pages | plus: 1 %}
218
218
  <tr data-collection="pages"
@@ -32,13 +32,15 @@
32
32
 
33
33
  <!-- Title Section -->
34
34
 
35
- <div class="navbar-brand site-title">
36
- <a class="nav-link" href="{{ '/' | relative_url }}">
37
- <i class="d-none d-md-inline {{ site.default_icon }} {{ site.default_icon }}-{{ site.title_icon | default: 'house' }}" aria-hidden="true"></i>
38
- <!-- Always show the title on mobile; truncate if space is tight -->
39
- <span class="site-title-text">
40
- {{ site.title }}
41
- </span>
35
+ <div class="navbar-brand site-title mb-0 py-0 me-0 min-w-0">
36
+ <a
37
+ class="nav-link text-body d-inline-flex align-items-center gap-1 min-w-0 p-0 text-decoration-none"
38
+ href="{{ '/' | relative_url }}"
39
+ aria-label="{{ site.title }} — Home"
40
+ >
41
+ <i class="d-none d-md-inline flex-shrink-0 {{ site.default_icon }} {{ site.default_icon }}-{{ site.title_icon | default: 'house' }}" aria-hidden="true"></i>
42
+ <!-- Hidden below md: logo + aria-label carry the brand; md+ shows title (ellipsis from custom.scss) -->
43
+ <span class="site-title-text d-none d-md-inline-block">{{ site.title }}</span>
42
44
  </a>
43
45
  </div>
44
46
 
@@ -39,7 +39,7 @@
39
39
  </span>
40
40
  {% for power in site.powered_by %}
41
41
  <li class="btn align-items-end">
42
- {% capture icon_classes %}{{ site.default_icon }} {{ power.icon | default: site.powered_by.default }}{% endcapture %}
42
+ {% capture icon_classes %}{{ site.default_icon }} {{ power.icon | default: "bi-question-circle" }}{% endcapture %}
43
43
  {% if power.url %}
44
44
  <a href="{{ power.url }}" rel="nofollow">
45
45
  <i class="{{ icon_classes }}" aria-hidden="true"></i>
@@ -86,10 +86,10 @@
86
86
  <h5 class="text-uppercase mb-3">Quick Links</h5>
87
87
  <ul class="list-unstyled" aria-label="Footer quick links">
88
88
  <li><a href="{{ '/' | relative_url }}" class="text-light text-decoration-none">Home</a></li>
89
- <li><a href="{{ '/about' | relative_url }}" class="text-light text-decoration-none">About</a></li>
90
- <li><a href="{{ '/services' | relative_url }}" class="text-light text-decoration-none">Services</a></li>
91
- <li><a href="{{ '/blog' | relative_url }}" class="text-light text-decoration-none">Blog</a></li>
92
- <li><a href="{{ '/contact' | relative_url }}" class="text-light text-decoration-none">Contact</a></li>
89
+ <li><a href="{{ '/about/' | relative_url }}" class="text-light text-decoration-none">About</a></li>
90
+ <li><a href="{{ '/services/' | relative_url }}" class="text-light text-decoration-none">Services</a></li>
91
+ <li><a href="{{ '/news/' | relative_url }}" class="text-light text-decoration-none">News</a></li>
92
+ <li><a href="{{ '/contact/' | relative_url }}" class="text-light text-decoration-none">Contact</a></li>
93
93
  <li><a href="{{ '/sitemap.xml' | relative_url }}" class="text-light text-decoration-none">Sitemap (XML)</a></li>
94
94
  </ul>
95
95
  </div>
@@ -116,7 +116,7 @@
116
116
  {% for link in site.links %}
117
117
  {% if link.url %}
118
118
  <li class="list-inline-item">
119
- {% capture link_icon_classes %}{{ site.default_icon }} {{ link.icon | default: site.links.default }}{% endcapture %}
119
+ {% capture link_icon_classes %}{{ site.default_icon }} {{ link.icon | default: "bi-link-45deg" }}{% endcapture %}
120
120
  <a href="{{ link.url }}" rel="nofollow" class="text-light text-decoration-none">
121
121
  <i class="{{ link_icon_classes }}" aria-hidden="true"></i>
122
122
  <span class="d-none d-md-inline">{{ link.label }}</span>
@@ -137,13 +137,16 @@
137
137
  <!-- Middle: Subscribe + Policies -->
138
138
  <div class="row mb-4 align-items-center g-2">
139
139
  <div class="col-md-8">
140
- <form action="/subscribe" method="post" class="row g-2" aria-label="Subscribe form">
140
+ <form class="row g-2" aria-label="Newsletter signup" onsubmit="return false;">
141
141
  <div class="col-md-8">
142
142
  <label for="footer-email" class="visually-hidden">Email</label>
143
- <input type="email" name="email" id="footer-email" class="form-control" placeholder="Enter your email" required>
143
+ <input type="email" name="email" id="footer-email" class="form-control" placeholder="Enter your email" autocomplete="email" disabled aria-describedby="footer-subscribe-hint">
144
144
  </div>
145
145
  <div class="col-md-4">
146
- <button type="submit" class="btn btn-primary w-100">Subscribe</button>
146
+ <button type="button" class="btn btn-primary w-100" disabled title="Configure a newsletter endpoint in your site config">Subscribe</button>
147
+ </div>
148
+ <div class="col-12">
149
+ <p id="footer-subscribe-hint" class="small text-white-50 mb-0">Newsletter is a placeholder until you connect a provider.</p>
147
150
  </div>
148
151
  </form>
149
152
  </div>