jekyll-theme-centos 0.0.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.
Files changed (304) hide show
  1. checksums.yaml +7 -0
  2. data/_config.yml +196 -0
  3. data/_data/base/announcement_schema.yml +49 -0
  4. data/_data/base/artwork_schema.yml +46 -0
  5. data/_data/base/backtotop_schema.yml +59 -0
  6. data/_data/base/bits.yml +96 -0
  7. data/_data/base/bits_schema.yml +185 -0
  8. data/_data/base/breadcrumb_schema.yml +27 -0
  9. data/_data/base/breakingnews_schema.yml +67 -0
  10. data/_data/base/card_schema.yml +146 -0
  11. data/_data/base/color.yml +1042 -0
  12. data/_data/base/color_schema.yml +1036 -0
  13. data/_data/base/configuration_variables_schema.yml +42 -0
  14. data/_data/base/content.yml +2 -0
  15. data/_data/base/content_schema.yml +26 -0
  16. data/_data/base/copyright.yml +12 -0
  17. data/_data/base/copyright_schema.yml +74 -0
  18. data/_data/base/copyvalue_schema.yml +49 -0
  19. data/_data/base/datatable_schema.yml +57 -0
  20. data/_data/base/event_schema.yml +130 -0
  21. data/_data/base/fontawesome_schema.yml +62 -0
  22. data/_data/base/footer.yml +9 -0
  23. data/_data/base/footer_schema.yml +55 -0
  24. data/_data/base/head_schema.yml +19 -0
  25. data/_data/base/heading_anchor.yml +2 -0
  26. data/_data/base/heading_anchor_schema.yml +37 -0
  27. data/_data/base/highlight_schema.yml +98 -0
  28. data/_data/base/image_schema.yml +34 -0
  29. data/_data/base/languages.yml +186 -0
  30. data/_data/base/link_schema.yml +187 -0
  31. data/_data/base/locales_schema.yml +158 -0
  32. data/_data/base/navbar.yml +20 -0
  33. data/_data/base/navbar_schema.yml +129 -0
  34. data/_data/base/navindex_schema.yml +67 -0
  35. data/_data/base/ogp.yml +24 -0
  36. data/_data/base/ogp_schema.yml +192 -0
  37. data/_data/base/project.yml +37 -0
  38. data/_data/base/project_schema.yml +124 -0
  39. data/_data/base/script_schema.yml +41 -0
  40. data/_data/base/shortcut_schema.yml +74 -0
  41. data/_data/base/social.yml +26 -0
  42. data/_data/base/social_schema.yml +57 -0
  43. data/_data/base/sponsors.yml +41 -0
  44. data/_data/base/sponsors_schema.yml +73 -0
  45. data/_data/base/title_schema.yml +49 -0
  46. data/_data/base/toc_schema.yml +114 -0
  47. data/_data/download/cards.yml +309 -0
  48. data/_data/download/navbar.yml +11 -0
  49. data/_includes/base/announcement.html.liquid +65 -0
  50. data/_includes/base/artwork.html.liquid +63 -0
  51. data/_includes/base/backtotop.html.liquid +73 -0
  52. data/_includes/base/bits.html.liquid +152 -0
  53. data/_includes/base/breadcrumb.html.liquid +77 -0
  54. data/_includes/base/breakingnews.html.liquid +90 -0
  55. data/_includes/base/card.html.liquid +110 -0
  56. data/_includes/base/color-table.html.liquid +33 -0
  57. data/_includes/base/configuration_variables-nested.html.liquid +98 -0
  58. data/_includes/base/configuration_variables.html.liquid +98 -0
  59. data/_includes/base/content.html.liquid +7 -0
  60. data/_includes/base/copyright.html.liquid +70 -0
  61. data/_includes/base/copyvalue.html.liquid +82 -0
  62. data/_includes/base/datatable.html.liquid +83 -0
  63. data/_includes/base/event.html.liquid +105 -0
  64. data/_includes/base/fontawesome.html.liquid +91 -0
  65. data/_includes/base/footer.html.liquid +69 -0
  66. data/_includes/base/head.html.liquid +135 -0
  67. data/_includes/base/heading_anchor.html.liquid +67 -0
  68. data/_includes/base/highlight.html.liquid +84 -0
  69. data/_includes/base/image.html.liquid +42 -0
  70. data/_includes/base/link.html.liquid +129 -0
  71. data/_includes/base/locales.html.liquid +78 -0
  72. data/_includes/base/navbar.html.liquid +121 -0
  73. data/_includes/base/navindex.html.liquid +200 -0
  74. data/_includes/base/ogp.html.liquid +144 -0
  75. data/_includes/base/project.html.liquid +104 -0
  76. data/_includes/base/shortcut.html.liquid +77 -0
  77. data/_includes/base/social.html.liquid +76 -0
  78. data/_includes/base/sponsors-cards.html.liquid +69 -0
  79. data/_includes/base/sponsors-carousel.html.liquid +91 -0
  80. data/_includes/base/title.html.liquid +65 -0
  81. data/_includes/base/toc-generator.html.liquid +189 -0
  82. data/_includes/base/toc.html.liquid +95 -0
  83. data/_includes/download/cards-body-commands.html +7 -0
  84. data/_includes/download/cards-body-convert.html +10 -0
  85. data/_includes/download/cards-body-doc.html +9 -0
  86. data/_includes/download/cards-body-documentation.html +11 -0
  87. data/_includes/download/cards-body-eol.html +16 -0
  88. data/_includes/download/cards-body-mirrors.html +8 -0
  89. data/_includes/download/cards-body-screenshot.html +26 -0
  90. data/_includes/download/cards-body-screenshots.html +32 -0
  91. data/_includes/download/cards-body.html +8 -0
  92. data/_includes/download/cards-footer.html +3 -0
  93. data/_includes/download/cards-header-commands.html +8 -0
  94. data/_includes/download/cards-header-convert.html +8 -0
  95. data/_includes/download/cards-header-doc.html +8 -0
  96. data/_includes/download/cards-header-documentation.html +8 -0
  97. data/_includes/download/cards-header-eol.html +8 -0
  98. data/_includes/download/cards-header-mirrors.html +13 -0
  99. data/_includes/download/cards-header-screenshot.html +8 -0
  100. data/_includes/download/cards-header-screenshots.html +8 -0
  101. data/_includes/download/cards-header.html +13 -0
  102. data/_includes/download/cards.html +120 -0
  103. data/_layouts/base/default.html +68 -0
  104. data/_layouts/download/cards.html +7 -0
  105. data/_layouts/download/default.html +7 -0
  106. data/_layouts/people/default.html +68 -0
  107. data/_sass/base/_customization.scss +331 -0
  108. data/_sass/base/_light-dark.scss +10 -0
  109. data/_sass/base/_maps.scss +104 -0
  110. data/_sass/base/_variables.scss +232 -0
  111. data/_sass/bootstrap/_accordion.scss +153 -0
  112. data/_sass/bootstrap/_alert.scss +68 -0
  113. data/_sass/bootstrap/_badge.scss +38 -0
  114. data/_sass/bootstrap/_breadcrumb.scss +40 -0
  115. data/_sass/bootstrap/_button-group.scss +147 -0
  116. data/_sass/bootstrap/_buttons.scss +216 -0
  117. data/_sass/bootstrap/_card.scss +238 -0
  118. data/_sass/bootstrap/_carousel.scss +226 -0
  119. data/_sass/bootstrap/_close.scss +66 -0
  120. data/_sass/bootstrap/_containers.scss +41 -0
  121. data/_sass/bootstrap/_dropdown.scss +250 -0
  122. data/_sass/bootstrap/_forms.scss +9 -0
  123. data/_sass/bootstrap/_functions.scss +302 -0
  124. data/_sass/bootstrap/_grid.scss +39 -0
  125. data/_sass/bootstrap/_helpers.scss +12 -0
  126. data/_sass/bootstrap/_images.scss +42 -0
  127. data/_sass/bootstrap/_list-group.scss +199 -0
  128. data/_sass/bootstrap/_maps.scss +174 -0
  129. data/_sass/bootstrap/_mixins.scss +42 -0
  130. data/_sass/bootstrap/_modal.scss +240 -0
  131. data/_sass/bootstrap/_nav.scss +197 -0
  132. data/_sass/bootstrap/_navbar.scss +289 -0
  133. data/_sass/bootstrap/_offcanvas.scss +147 -0
  134. data/_sass/bootstrap/_pagination.scss +109 -0
  135. data/_sass/bootstrap/_placeholders.scss +51 -0
  136. data/_sass/bootstrap/_popover.scss +196 -0
  137. data/_sass/bootstrap/_progress.scss +68 -0
  138. data/_sass/bootstrap/_reboot.scss +617 -0
  139. data/_sass/bootstrap/_root.scss +187 -0
  140. data/_sass/bootstrap/_spinners.scss +86 -0
  141. data/_sass/bootstrap/_tables.scss +171 -0
  142. data/_sass/bootstrap/_toasts.scss +73 -0
  143. data/_sass/bootstrap/_tooltip.scss +119 -0
  144. data/_sass/bootstrap/_transitions.scss +27 -0
  145. data/_sass/bootstrap/_type.scss +106 -0
  146. data/_sass/bootstrap/_utilities.scss +806 -0
  147. data/_sass/bootstrap/_variables-dark.scss +102 -0
  148. data/_sass/bootstrap/_variables.scss +1753 -0
  149. data/_sass/bootstrap/bootstrap-grid.scss +62 -0
  150. data/_sass/bootstrap/bootstrap-reboot.scss +10 -0
  151. data/_sass/bootstrap/bootstrap-utilities.scss +19 -0
  152. data/_sass/bootstrap/bootstrap.scss +52 -0
  153. data/_sass/bootstrap/forms/_floating-labels.scss +97 -0
  154. data/_sass/bootstrap/forms/_form-check.scss +189 -0
  155. data/_sass/bootstrap/forms/_form-control.scss +214 -0
  156. data/_sass/bootstrap/forms/_form-range.scss +91 -0
  157. data/_sass/bootstrap/forms/_form-select.scss +80 -0
  158. data/_sass/bootstrap/forms/_form-text.scss +11 -0
  159. data/_sass/bootstrap/forms/_input-group.scss +132 -0
  160. data/_sass/bootstrap/forms/_labels.scss +36 -0
  161. data/_sass/bootstrap/forms/_validation.scss +12 -0
  162. data/_sass/bootstrap/helpers/_clearfix.scss +3 -0
  163. data/_sass/bootstrap/helpers/_color-bg.scss +7 -0
  164. data/_sass/bootstrap/helpers/_colored-links.scss +30 -0
  165. data/_sass/bootstrap/helpers/_focus-ring.scss +5 -0
  166. data/_sass/bootstrap/helpers/_icon-link.scss +25 -0
  167. data/_sass/bootstrap/helpers/_position.scss +36 -0
  168. data/_sass/bootstrap/helpers/_ratio.scss +26 -0
  169. data/_sass/bootstrap/helpers/_stacks.scss +15 -0
  170. data/_sass/bootstrap/helpers/_stretched-link.scss +15 -0
  171. data/_sass/bootstrap/helpers/_text-truncation.scss +7 -0
  172. data/_sass/bootstrap/helpers/_visually-hidden.scss +8 -0
  173. data/_sass/bootstrap/helpers/_vr.scss +8 -0
  174. data/_sass/bootstrap/mixins/_alert.scss +18 -0
  175. data/_sass/bootstrap/mixins/_backdrop.scss +14 -0
  176. data/_sass/bootstrap/mixins/_banner.scss +7 -0
  177. data/_sass/bootstrap/mixins/_border-radius.scss +78 -0
  178. data/_sass/bootstrap/mixins/_box-shadow.scss +24 -0
  179. data/_sass/bootstrap/mixins/_breakpoints.scss +127 -0
  180. data/_sass/bootstrap/mixins/_buttons.scss +70 -0
  181. data/_sass/bootstrap/mixins/_caret.scss +69 -0
  182. data/_sass/bootstrap/mixins/_clearfix.scss +9 -0
  183. data/_sass/bootstrap/mixins/_color-mode.scss +21 -0
  184. data/_sass/bootstrap/mixins/_color-scheme.scss +7 -0
  185. data/_sass/bootstrap/mixins/_container.scss +11 -0
  186. data/_sass/bootstrap/mixins/_deprecate.scss +10 -0
  187. data/_sass/bootstrap/mixins/_forms.scss +163 -0
  188. data/_sass/bootstrap/mixins/_gradients.scss +47 -0
  189. data/_sass/bootstrap/mixins/_grid.scss +151 -0
  190. data/_sass/bootstrap/mixins/_image.scss +16 -0
  191. data/_sass/bootstrap/mixins/_list-group.scss +26 -0
  192. data/_sass/bootstrap/mixins/_lists.scss +7 -0
  193. data/_sass/bootstrap/mixins/_pagination.scss +10 -0
  194. data/_sass/bootstrap/mixins/_reset-text.scss +17 -0
  195. data/_sass/bootstrap/mixins/_resize.scss +6 -0
  196. data/_sass/bootstrap/mixins/_table-variants.scss +24 -0
  197. data/_sass/bootstrap/mixins/_text-truncate.scss +8 -0
  198. data/_sass/bootstrap/mixins/_transition.scss +26 -0
  199. data/_sass/bootstrap/mixins/_utilities.scss +97 -0
  200. data/_sass/bootstrap/mixins/_visually-hidden.scss +38 -0
  201. data/_sass/bootstrap/utilities/_api.scss +47 -0
  202. data/_sass/bootstrap/vendor/_rfs.scss +348 -0
  203. data/assets/css/base/stylesheet.min.scss +35 -0
  204. data/assets/icons/android-chrome-192.png +0 -0
  205. data/assets/icons/android-chrome-512.png +0 -0
  206. data/assets/icons/apple-touch-icon.png +0 -0
  207. data/assets/icons/favicon-16.png +0 -0
  208. data/assets/icons/favicon-32.png +0 -0
  209. data/assets/icons/favicon.ico +0 -0
  210. data/assets/icons/favicon.svg +1 -0
  211. data/assets/img/anaconda-symbolic.svg +1 -0
  212. data/assets/img/anaconda.svg +1 -0
  213. data/assets/img/base/centos-colors.gpl +55 -0
  214. data/assets/img/base/example-ogp-image.svg +297 -0
  215. data/assets/img/base/example-sponsors-design.svg +226 -0
  216. data/assets/img/base/example-sponsors-logo-1.svg +120 -0
  217. data/assets/img/base/example-sponsors-logo-2.svg +116 -0
  218. data/assets/img/base/example-sponsors-logo-3.svg +123 -0
  219. data/assets/img/base/example-sponsors-logo-4.svg +116 -0
  220. data/assets/img/base/example-sponsors-logo-5.svg +116 -0
  221. data/assets/img/base/example-sponsors-logo-6.svg +116 -0
  222. data/assets/img/base/example-sponsors-logo-7.svg +116 -0
  223. data/assets/img/base/example-sponsors-logo-8.svg +110 -0
  224. data/assets/img/base/page-layout-default.svg +1217 -0
  225. data/assets/img/base/page-with-alert.svg +383 -0
  226. data/assets/img/base/page-with-announcement.svg +956 -0
  227. data/assets/img/base/page-with-artwork.svg +1009 -0
  228. data/assets/img/base/page-with-backtotop.svg +1009 -0
  229. data/assets/img/base/page-with-bits.svg +891 -0
  230. data/assets/img/base/page-with-breadcrumb.svg +676 -0
  231. data/assets/img/base/page-with-breakingnews.svg +957 -0
  232. data/assets/img/base/page-with-color.svg +57 -0
  233. data/assets/img/base/page-with-copyright.svg +1018 -0
  234. data/assets/img/base/page-with-copyvalue.svg +57 -0
  235. data/assets/img/base/page-with-datatable.svg +857 -0
  236. data/assets/img/base/page-with-event.svg +518 -0
  237. data/assets/img/base/page-with-fontawesome.svg +147 -0
  238. data/assets/img/base/page-with-footer.svg +1018 -0
  239. data/assets/img/base/page-with-heading.svg +57 -0
  240. data/assets/img/base/page-with-highlight.svg +86 -0
  241. data/assets/img/base/page-with-image.svg +57 -0
  242. data/assets/img/base/page-with-link.svg +57 -0
  243. data/assets/img/base/page-with-locales.svg +1009 -0
  244. data/assets/img/base/page-with-navbar.svg +958 -0
  245. data/assets/img/base/page-with-navindex.svg +279 -0
  246. data/assets/img/base/page-with-ogp.svg +401 -0
  247. data/assets/img/base/page-with-project.svg +423 -0
  248. data/assets/img/base/page-with-shortcut.svg +937 -0
  249. data/assets/img/base/page-with-social.svg +937 -0
  250. data/assets/img/base/page-with-sponsors.svg +937 -0
  251. data/assets/img/base/page-with-title.svg +584 -0
  252. data/assets/img/base/page-with-toc.svg +399 -0
  253. data/assets/img/base/screenshot-1200x600.svg +114 -0
  254. data/assets/img/centos-dynamicmsg-logo.svg +1 -0
  255. data/assets/img/centos-dynamicmsg-type.svg +1 -0
  256. data/assets/img/centos-dynamicmsg-whitelogo.svg +1 -0
  257. data/assets/img/centos-dynamicmsg-whitetype.svg +1 -0
  258. data/assets/img/centos-gdm-whitelogo.svg +1 -0
  259. data/assets/img/centos-ipa-whiteheader.svg +1 -0
  260. data/assets/img/centos-logo-2bits.svg +1 -0
  261. data/assets/img/centos-logo.svg +1 -0
  262. data/assets/img/centos-message-logo.svg +1 -0
  263. data/assets/img/centos-motif.png +0 -0
  264. data/assets/img/centos-poweredby-logo.svg +1 -0
  265. data/assets/img/centos-social-share.png +0 -0
  266. data/assets/img/centos-symbol-2bits.svg +1 -0
  267. data/assets/img/centos-symbol.svg +1 -0
  268. data/assets/img/centos-type.svg +1 -0
  269. data/assets/img/centos-vertical-logo.svg +1 -0
  270. data/assets/img/centos-vertical-message-logo.svg +1 -0
  271. data/assets/img/centos-whitelogo.svg +1 -0
  272. data/assets/img/download/centos-linux-7-2009-screenshot-n.png +0 -0
  273. data/assets/img/download/centos-stream-8-screenshot-n.png +0 -0
  274. data/assets/img/download/centos-stream-9-screenshot-n.png +0 -0
  275. data/assets/img/download/distribution-release-screenshot-1.png +0 -0
  276. data/assets/img/download/distribution-release-screenshot-2.png +0 -0
  277. data/assets/img/download/distribution-release-screenshot-3.png +0 -0
  278. data/assets/img/download/distribution-release-screenshot-n.png +0 -0
  279. data/assets/img/download/distribution-release-screenshot-n.svg +134 -0
  280. data/assets/img/download/download.svg +421 -0
  281. data/assets/img/download/fig-the-downloads-cards-presentation-template.png +0 -0
  282. data/assets/img/people/page.svg +900 -0
  283. data/assets/img/people/page.webp +0 -0
  284. data/assets/img/people/username.webp +0 -0
  285. data/assets/js/base/backtotop.js +20 -0
  286. data/assets/js/base/copyvalue.js +145 -0
  287. data/assets/js/base/datatable.js +41 -0
  288. data/assets/js/base/heading-anchor.js +108 -0
  289. data/assets/js/base/highlight.js +12 -0
  290. data/assets/js/base/init-tooltips.js +12 -0
  291. data/assets/js/bootstrap.bundle.js +6312 -0
  292. data/assets/js/bootstrap.bundle.js.map +1 -0
  293. data/assets/js/bootstrap.bundle.min.js +7 -0
  294. data/assets/js/bootstrap.bundle.min.js.map +1 -0
  295. data/assets/js/bootstrap.esm.js +4447 -0
  296. data/assets/js/bootstrap.esm.js.map +1 -0
  297. data/assets/js/bootstrap.esm.min.js +7 -0
  298. data/assets/js/bootstrap.esm.min.js.map +1 -0
  299. data/assets/js/bootstrap.js +4494 -0
  300. data/assets/js/bootstrap.js.map +1 -0
  301. data/assets/js/bootstrap.min.js +7 -0
  302. data/assets/js/bootstrap.min.js.map +1 -0
  303. data/site.webmanifest +11 -0
  304. metadata +611 -0
@@ -0,0 +1,67 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Heading Anchor Component
4
+ Purpose: Loads heading-anchor.js which wires click-to-copy behaviour on anchor
5
+ icons that jekyll-link-decorator injects inside h1–h6 elements. Clicking an
6
+ anchor icon copies the full page URL (origin + pathname + fragment) to the
7
+ clipboard, with a transient fa-check icon as visual feedback.
8
+
9
+ Recommended Usage (in head.html.liquid):
10
+ {%- include base/heading_anchor.html.liquid %}
11
+
12
+ The heading anchor icons themselves are injected by the jekyll-link-decorator
13
+ Ruby plugin. This include only loads the JavaScript that powers copy behaviour.
14
+
15
+ Required Inputs (from HTML elements produced by the plugin):
16
+ - class="heading-anchor" : Selector used to attach click handlers
17
+ - data-copy-anchor="#id" : Fragment to append to the current page URL
18
+
19
+ Optional Inputs (from data objects):
20
+ - reset_delay : Milliseconds before icon resets (default from schema)
21
+ - copy_success_message : Not consumed by JS directly; available for reference
22
+
23
+ Data Source Hierarchy (in priority order):
24
+ 1. include.data - Explicitly passed configuration
25
+ 2. page.with_heading_anchor_data - Page front matter
26
+ 3. site.data.heading_anchor - Site configuration
27
+ 4. site.data.base.heading_anchor - Theme defaults
28
+
29
+ Dependencies:
30
+ jekyll-link-decorator gem, FontAwesome 6+, Clipboard API (modern browsers)
31
+ ================================================================================
32
+ {% endcomment %}
33
+
34
+ {%- assign with_heading_anchor = include.with_heading_anchor
35
+ | default: page.with_heading_anchor
36
+ | default: site.with_heading_anchor
37
+ -%}
38
+
39
+ {%- assign with_heading_anchor_data = include.data
40
+ | default: page.with_heading_anchor_data
41
+ | default: site.data.heading_anchor
42
+ | default: site.data.base.heading_anchor
43
+ -%}
44
+
45
+ {%- assign with_heading_anchor_schema = site.data.base.heading_anchor_schema.properties.with_heading_anchor_data.properties -%}
46
+
47
+ {%- if with_heading_anchor -%}
48
+
49
+ {%- comment %} === Presentation === {% endcomment %}
50
+
51
+ {%- comment %} --- Defaults --- {% endcomment %}
52
+ {%- assign heading_anchor_reset_delay = with_heading_anchor_data.reset_delay | default: with_heading_anchor_schema.reset_delay.default -%}
53
+ {%- assign heading_anchor_success_message = with_heading_anchor_data.copy_success_message | default: with_heading_anchor_schema.copy_success_message.default -%}
54
+
55
+ {%- comment %} --- HTML --- {% endcomment %}
56
+ <!-- Load Heading Anchor functionality with configuration via data attributes -->
57
+ <script id="centos-heading-anchor"
58
+ {%- if with_heading_anchor_data.reset_delay %}
59
+ data-reset-delay="{{ heading_anchor_reset_delay }}"
60
+ {%- endif %}
61
+ {%- if with_heading_anchor_data.copy_success_message %}
62
+ data-success-message="{{ heading_anchor_success_message }}"
63
+ {%- endif %}
64
+ src="{{ site.baseurl }}/assets/js/base/heading-anchor.min.js"
65
+ defer></script>
66
+
67
+ {%- endif -%}
@@ -0,0 +1,84 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Highlight.js Code Syntax Highlighting Component
4
+ Purpose: Loads Highlight.js library CSS and JavaScript from CDN with
5
+ copy-to-clipboard functionality for code blocks.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - CDN-based library: Highlight.js from cdnjs
10
+ - Copy plugin: additional plugin for code clipboard functionality
11
+ - Format switching: separate head (CSS) and script (JS) includes
12
+ - Automatic initialization: on document load
13
+ - Configurable theme: different color schemes available
14
+ - 190+ languages supported
15
+
16
+ Optional Inputs:
17
+ - type: "head" for CSS, "script" for JavaScript
18
+ - theme: Syntax highlighting theme (default: "default")
19
+ - version: Highlight.js version (e.g., "11.9.0")
20
+ - data: Highlight.js configuration object
21
+
22
+ Data Source Hierarchy (priority):
23
+ 1. include.data
24
+ 2. page.with_highlight_data
25
+ 3. site.data.highlight
26
+ 4. site.data.base.highlight
27
+ ================================================================================
28
+ {% endcomment %}
29
+
30
+ {%- assign with_highlight = include.with_highlight
31
+ | default: page.with_highlight
32
+ %}
33
+
34
+ {%- assign with_highlight_data = include.data
35
+ | default: page.with_highlight_data
36
+ | default: site.data.highlight
37
+ | default: site.data.base.highlight
38
+ %}
39
+
40
+ {%- assign with_highlight_schema = site.data.base.highlight_schema.properties.with_highlight_data.properties %}
41
+
42
+ {%- if with_highlight %}
43
+
44
+ {%- assign highlight_theme = with_highlight_data.theme | default: with_highlight_schema.theme.default %}
45
+ {%- assign highlight_version = with_highlight_data.version | default: with_highlight_schema.version.default %}
46
+ {%- assign highlight_css_sri = with_highlight_data.css_integrity | default: with_highlight_schema.css_integrity.default %}
47
+ {%- assign highlight_script_sri = with_highlight_data.script_integrity | default: with_highlight_schema.script_integrity.default %}
48
+ {%- assign copy_version = with_highlight_data.copy_version | default: with_highlight_schema.copy_version.default %}
49
+ {%- assign copy_script_sri = with_highlight_data.copy_script_integrity | default: with_highlight_schema.copy_script_integrity.default %}
50
+ {%- assign copy_css_sri = with_highlight_data.copy_css_integrity | default: with_highlight_schema.copy_css_integrity.default %}
51
+ {%- assign copy_icon_svg = with_highlight_data.copy_button_icons.copy.svg | default: with_highlight_schema.copy_button_icons.properties.copy.properties.svg.default %}
52
+ {%- assign success_icon_svg = with_highlight_data.copy_button_icons.success.svg | default: with_highlight_schema.copy_button_icons.properties.success.properties.svg.default %}
53
+
54
+ {%- capture html_highlight_head %}
55
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/styles/{{ highlight_theme | replace_first: 'base16-', 'base16/' | default: 'default' }}.min.css" integrity="{{ highlight_css_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
56
+ <link rel="stylesheet" href="https://unpkg.com/highlightjs-copy@{{ copy_version }}/dist/highlightjs-copy.min.css" integrity="{{ copy_css_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
57
+ <!-- Highlight.js Copy Button Icon Customization (from schema) -->
58
+ <style>
59
+ .hljs-copy-button:not([data-copied="true"])::before {
60
+ mask: url('data:image/svg+xml;utf-8,{{ copy_icon_svg }}');
61
+ }
62
+ .hljs-copy-button[data-copied='true']::after {
63
+ background-image: url('data:image/svg+xml;utf-8,{{ success_icon_svg }}');
64
+ }
65
+ </style>
66
+ {%- endcapture %}
67
+
68
+ {%- capture html_highlight_script %}
69
+ <!-- Highlight.js Library and Copy Plugin -->
70
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/highlight.min.js" integrity="{{ highlight_script_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
71
+ <script src="https://unpkg.com/highlightjs-copy@{{ copy_version }}/dist/highlightjs-copy.min.js" integrity="{{ copy_script_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
72
+ <!-- Initialize Highlight.js -->
73
+ <script src="{{ site.baseurl }}/assets/js/base/highlight.min.js" defer></script>
74
+ {%- endcapture %}
75
+
76
+ {%- assign type = include.type %}
77
+ {%- case type %}
78
+ {%- when "head" %}
79
+ {{ html_highlight_head }}
80
+ {%- when "script" %}
81
+ {{ html_highlight_script }}
82
+ {%- endcase %}
83
+
84
+ {%- endif %}
@@ -0,0 +1,42 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Figure Image Component
4
+ Purpose: Renders responsive images in semantic HTML figure elements
5
+ with optional links and captions.
6
+ ================================================================================
7
+
8
+ Required Inputs:
9
+ - file: Image filename (relative to /assets/img/)
10
+ - alt: Alt text for accessibility
11
+
12
+ Optional Inputs:
13
+ - link: URL to wrap image in a link
14
+ - caption: Caption text for <figcaption>
15
+ - extraclasses: Additional CSS classes for image element
16
+
17
+ Features:
18
+ - Semantic HTML with <figure> and <figcaption> elements
19
+ - Responsive images with img-fluid Bootstrap class
20
+ - Figure ID generated from alt text (slugified)
21
+ - Lazy loading enabled by default
22
+ ================================================================================
23
+ {% endcomment %}
24
+
25
+ {% if include.alt %}
26
+ {% assign figid = include.alt %}
27
+ {% else %}
28
+ {% assign figid = include.file %}
29
+ {% endif %}
30
+
31
+ <figure id="fig-{{ figid | slugify }}" class="figure">
32
+ {% if include.link %}
33
+ <a href="{{ include.link }}">
34
+ <img loading="lazy" src="{{ site.baseurl }}/assets/img/{{ include.file }}" class="figure-img img-fluid rounded{% if include.extraclasses %} {{ include.extraclasses }}{% endif %}" alt="{{ include.alt }}"/>
35
+ </a>
36
+ {% else %}
37
+ <img loading="lazy" src="{{ site.baseurl }}/assets/img/{{ include.file }}" class="figure-img img-fluid rounded{% if include.extraclasses %} {{ include.extraclasses }}{% endif %}" alt="{{ include.alt }}"/>
38
+ {% endif %}
39
+ {% if include.caption %}
40
+ <figcaption class="figure-caption text-center">{{ include.caption }}</figcaption>
41
+ {% endif %}
42
+ </figure>
@@ -0,0 +1,129 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Link Component
4
+ Purpose: Renders HTML anchor tags with icons, styling, and accessibility.
5
+ Handles internal/external links and anchor navigation.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Flexible link resolution for internal and external URLs
10
+ - Optional icon integration with positioning control
11
+ - Customizable styling through color schemes or CSS classes
12
+ - Built-in accessibility support via ARIA attributes
13
+ - Anchor generation from link name when no URL provided
14
+
15
+ Required Inputs:
16
+ - name: Display text for the link
17
+
18
+ Optional Inputs:
19
+ - link: URL (internal/external). Omit to generate anchor from name.
20
+ - target: Link target (default: unset). Use '_blank' for new window.
21
+ - color: Color scheme (default: 'primary')
22
+ - icon: Icon class (Font Awesome or similar)
23
+ - icon_position: Icon placement: 'start' (default) or 'end'
24
+ - class: Custom CSS classes to override default styling
25
+ - aria_label: Accessible label for screen readers
26
+ - role: ARIA role attribute
27
+ - data_bs_toggle: Bootstrap toggle ('tooltip' or 'popover')
28
+ - data_bs_title: Bootstrap tooltip/popover text content
29
+ - data_bs_content: Bootstrap popover body text (required when data_bs_toggle is 'popover')
30
+ - data_bs_placement: Bootstrap tooltip/popover placement ('top', 'bottom', 'start', 'end')
31
+ - data_bs_trigger: Bootstrap tooltip/popover trigger events
32
+ - data_bs_delay: Bootstrap tooltip/popover show/hide delay (number or JSON)
33
+ - data_bs_html: Allow HTML in tooltip/popover content ('true' or 'false')
34
+ - data_bs_custom_class: Custom CSS class for tooltip/popover element
35
+ - data_bs_offset: Tooltip/popover position offset (comma-separated pair)
36
+
37
+ Security & External Links:
38
+ - target="_blank" automatically adds rel="noopener noreferrer"
39
+ - External link icon injection is handled by jekyll-link-decorator
40
+ ================================================================================
41
+ {% endcomment %}
42
+
43
+ {%- if page.with_link -%}
44
+ {%- capture html_link -%}
45
+ {%- comment %} === Data source selection === {% endcomment %}
46
+ {%- assign link = include.link | default: nil %}
47
+ {%- assign name = include.name | default: nil %}
48
+ {%- assign target = include.target | default: nil %}
49
+ {%- assign color = include.color | default: "primary" %}
50
+ {%- assign role = include.role | default: nil %}
51
+ {%- assign icon = include.icon | default: nil %}
52
+ {%- assign icon_position = include.icon_position | default: "start" %}
53
+ {%- assign class = include.class | default: nil %}
54
+ {%- assign aria_label = include.aria_label | default: nil %}
55
+ {%- assign data_bs_toggle = include.data_bs_toggle | default: nil %}
56
+ {%- assign data_bs_title = include.data_bs_title | default: nil %}
57
+ {%- assign data_bs_content = include.data_bs_content | default: nil %}
58
+ {%- assign data_bs_placement = include.data_bs_placement | default: nil %}
59
+ {%- assign data_bs_trigger = include.data_bs_trigger | default: nil %}
60
+ {%- assign data_bs_delay = include.data_bs_delay | default: nil %}
61
+ {%- assign data_bs_html = include.data_bs_html | default: nil %}
62
+ {%- assign data_bs_custom_class = include.data_bs_custom_class | default: nil %}
63
+ {%- assign data_bs_offset = include.data_bs_offset | default: nil %}
64
+ {%- assign anchor = nil %}
65
+ {%- assign rel_attr = nil %}
66
+
67
+ {%- comment %} === Data processing === {% endcomment %}
68
+ {%- if link != nil -%}
69
+ {%- assign link_char1 = link | slice: 0, 1 -%}
70
+ {%- assign link_char2 = link | slice: 0, 2 -%}
71
+ {%- if link contains "://" or link contains "mailto:" or link contains "tel:" or link_char1 == "#" or link_char2 == "//" -%}
72
+ {%- assign href_value = link %}
73
+ {%- else -%}
74
+ {%- assign href_value = site.baseurl | append: link %}
75
+ {%- endif -%}
76
+ {%- else -%}
77
+ {%- assign href_value = site.baseurl %}
78
+ {%- assign anchor = name | strip | replace: ' ', '-' | remove: '"' | remove: "'" | remove: '?' | remove: '&' | remove: '#' | remove: '/' | downcase %}
79
+ {%- endif -%}
80
+
81
+ {%- if class != nil -%}
82
+ {%- assign link_class = class %}
83
+ {%- else -%}
84
+ {%- capture link_class -%}link link-{{ color }} link-offset-3 link-offset-3-hover link-underline-{{ color }} link-underline-opacity-0 link-underline-opacity-100-hover{%- endcapture -%}
85
+ {%- endif -%}
86
+
87
+ {%- comment %} --- Security attributes for external links --- {% endcomment %}
88
+ {%- if target == "_blank" -%}
89
+ {%- assign rel_attr = "noopener noreferrer" %}
90
+ {%- endif -%}
91
+
92
+ {%- comment %} --- Link name with optional icon --- {% endcomment %}
93
+ {%- assign final_icon = icon %}
94
+ {%- capture link_name -%}
95
+ {%- if final_icon != nil -%}
96
+ {%- if name != nil and icon_position == "end" -%}
97
+ {{ name }}<i class="{{ final_icon }} ms-1" aria-hidden="true"></i>
98
+ {%- elsif name != nil and icon_position == "start" -%}
99
+ <i class="{{ final_icon }} me-1" aria-hidden="true"></i>{{ name }}
100
+ {%- else -%}
101
+ <i class="{{ final_icon }}" aria-hidden="true"></i>
102
+ {%- endif -%}
103
+ {%- else -%}
104
+ {{ name }}
105
+ {%- endif -%}
106
+ {%- endcapture -%}
107
+
108
+ {%- comment %} --- HTML: Anchor tag with attributes --- {% endcomment %}
109
+ <a
110
+ href="{{ href_value }}{% if anchor != nil and anchor != "" %}#{{ anchor }}{% endif %}"
111
+ class="{{ link_class }}"
112
+ {%- if target != nil %} target="{{ target }}"{% endif %}
113
+ {%- if rel_attr != nil %} rel="{{ rel_attr }}"{% endif %}
114
+ {%- if role != nil %} role="{{ role }}"{% endif %}
115
+ {%- if aria_label != nil %} aria-label="{{ aria_label }}"{% endif %}
116
+ {%- if data_bs_toggle != nil %} data-bs-toggle="{{ data_bs_toggle }}"{% endif %}
117
+ {%- if data_bs_title != nil %} data-bs-title="{{ data_bs_title }}"{% endif %}
118
+ {%- if data_bs_content != nil %} data-bs-content="{{ data_bs_content }}"{% endif %}
119
+ {%- if data_bs_placement != nil %} data-bs-placement="{{ data_bs_placement }}"{% endif %}
120
+ {%- if data_bs_trigger != nil %} data-bs-trigger="{{ data_bs_trigger }}"{% endif %}
121
+ {%- if data_bs_delay != nil %} data-bs-delay="{{ data_bs_delay }}"{% endif %}
122
+ {%- if data_bs_html != nil %} data-bs-html="{{ data_bs_html }}"{% endif %}
123
+ {%- if data_bs_custom_class != nil %} data-bs-custom-class="{{ data_bs_custom_class }}"{% endif %}
124
+ {%- if data_bs_offset != nil %} data-bs-offset="{{ data_bs_offset }}"{% endif %}>
125
+ {{- link_name | strip_newlines | strip -}}
126
+ </a>
127
+ {%- endcapture -%}
128
+ {{- html_link }}
129
+ {%- endif -%}
@@ -0,0 +1,78 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Language Selector (Locales Dropdown)
4
+ Purpose: Renders dropdown menu for language/locale selection with current
5
+ language detection and visual indicators. Generates links to same page in
6
+ different language versions.
7
+ ================================================================================
8
+
9
+ Configuration: Reads from unified `with_locales_data` schema via Jekyll defaults.
10
+ - Enable with: with_locales: true in _config.yml defaults or page front matter
11
+ - Locales defined in: with_locales_data.locales
12
+ - Uses site.data.base.languages for language name lookups
13
+ - Automatically detects current page locale and highlights in menu
14
+ - Always includes English (en) even if not in locales list
15
+
16
+ Features:
17
+ - Displays current language name in button with locale code
18
+ - Shows all available languages in dropdown (including English)
19
+ - Shows checkmark next to current language in dropdown
20
+ - Marks current language link with active class
21
+ - Displays language code in parentheses (e.g., "Español (es)")
22
+
23
+ Locale Detection:
24
+ - page.data['locale'] is set by localization_gettext.rb plugin in LocalizedPage.setup_localized_data()
25
+ - Set for each localized page variant (e.g., /es/ pages have locale='es')
26
+ - Defaults to 'en' if not set (English/canonical pages)
27
+ ================================================================================
28
+ {% endcomment %}
29
+
30
+ {%- assign with_locales = include.with_locales
31
+ | default: page.with_locales
32
+ %}
33
+
34
+ {%- assign with_locales_data = include.data
35
+ | default: page.with_locales_data
36
+ | default: site.data.locales
37
+ | default: site.data.base.locales
38
+ %}
39
+
40
+ {%- assign with_locales_schema = site.data.base.locales_schema.properties.with_locales_data.properties %}
41
+
42
+ {%- if with_locales %}
43
+
44
+ {%- comment %} Build array of all available locales (always include English) {%- endcomment %}
45
+ {%- assign all_locales = with_locales_data.locales | default: with_locales_schema.locales.default %}
46
+ {%- unless all_locales contains "en" %}
47
+ {%- assign all_locales = all_locales | unshift: "en" %}
48
+ {%- endunless %}
49
+
50
+ {%- comment %} Detect current page locale from URL: /es/..., /fr/..., etc. {%- endcomment %}
51
+ {%- assign url_parts = page.url | split: "/" %}
52
+ {%- assign current_locale = "en" %}
53
+ {%- if url_parts[1] and all_locales contains url_parts[1] %}
54
+ {%- assign current_locale = url_parts[1] %}
55
+ {%- endif %}
56
+
57
+ <p class="mb-2">Change page language:</p>
58
+ <div class="dropdown mb-4">
59
+ <button class="btn btn-sm btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Languages">
60
+ <i class="fa-solid fa-language me-1"></i> {{ site.data.base.languages[current_locale] }} ({{ current_locale }})
61
+ </button>
62
+ <ul class="dropdown-menu">
63
+ {%- for locale in all_locales %}
64
+ {%- comment %} DEBUG: page.url={{ page.url }}, current_locale={{ current_locale }}, target_locale={{ locale }} {%- endcomment %}
65
+ {%- assign locale_url = page.url | switch_locale_url: locale %}
66
+
67
+ {%- if locale == current_locale %}
68
+ <li class="small"><a class="dropdown-item active" href="{{ site.baseurl }}{{ locale_url }}" aria-current="true">
69
+ {{ site.data.base.languages[locale] }} ({{ locale }}) <i class="fa-solid fa-check ms-3"></i>
70
+ </a></li>
71
+ {%- else %}
72
+ <li class="small"><a class="dropdown-item" href="{{ site.baseurl }}{{ locale_url }}">{{ site.data.base.languages[locale] }} ({{ locale }})</a></li>
73
+ {%- endif %}
74
+ {%- endfor %}
75
+ </ul>
76
+ </div>
77
+
78
+ {%- endif %}
@@ -0,0 +1,121 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Navigation Bar Component
4
+ Purpose: Renders fixed-top navigation bar with branding, responsive toggle,
5
+ and hierarchical menu items with dropdown support.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Fixed top positioning: always visible during scroll
10
+ - Responsive hamburger menu: collapses on mobile
11
+ - Dropdown menus: multi-level navigation
12
+ - Brand image and manifestation text support
13
+ - Filtered navitems by visible_on='navbar'
14
+
15
+ Required Inputs:
16
+ - brand_image: Logo image filename
17
+ - navitems: Array of navigation items
18
+
19
+ Optional Inputs:
20
+ - brand_image_class, brand_image_height: Logo styling
21
+ - brand_manifestation: Tagline/subtitle text
22
+ - class: Container CSS classes
23
+ - navitems[].menu: Submenu array for dropdowns
24
+
25
+ Data Source Hierarchy (priority):
26
+ 1. include.data
27
+ 2. page.with_navbar_data
28
+ 3. site.data.navbar
29
+ 4. site.data.base.navbar
30
+ ================================================================================
31
+ {% endcomment %}
32
+
33
+ {%- assign with_navbar = include.with_navbar
34
+ | default: page.with_navbar
35
+ %}
36
+
37
+ {%- assign with_navbar_data = include.data
38
+ | default: page.with_navbar_data
39
+ | default: site.data.navbar
40
+ | default: site.data.base.navbar
41
+ %}
42
+
43
+ {%- if with_navbar %}
44
+
45
+ {%- assign with_navbar_schema = site.data.base.navbar_schema.properties.with_navbar_data.properties %}
46
+
47
+ {%- assign navbar_class = with_navbar_data.class | default: with_navbar_schema.class.default %}
48
+ {%- assign navbar_brand_image = with_navbar_data.brand_image | default: with_navbar_schema.brand_image.default %}
49
+ {%- assign navbar_brand_image_class = with_navbar_data.brand_image_class | default: with_navbar_schema.brand_image_class.default %}
50
+ {%- assign navbar_brand_image_height = with_navbar_data.brand_image_height | default: with_navbar_schema.brand_image_height.default %}
51
+ {%- assign navbar_brand_manifestation = with_navbar_data.brand_manifestation | default: with_navbar_schema.brand_manifestation.default %}
52
+ {%- assign navbar_brand_manifestation_class = with_navbar_data.brand_manifestation_class | default: with_navbar_schema.brand_manifestation_class.default %}
53
+ {%- assign navbar_navitems = with_navbar_data.navitems | where: "visible_on", "navbar" | default: with_navbar_schema.navitems.default %}
54
+
55
+ <nav class="navbar bg-dark fixed-top navbar-expand-lg shadow{% if navbar_class != "" %} {{ navbar_class }}{% endif %}" aria-label="{{ include.arialable | default: 'navbar'}}" data-bs-theme="dark">
56
+ <div class="container">
57
+
58
+ {%- if navbar_brand_image != "" %}
59
+ {%- assign navbar_brand_link = "/" | locale_url: page.locale %}
60
+ <a class="navbar-brand" href="{{ site.baseurl }}{{ navbar_brand_link }}">
61
+
62
+ <img
63
+ class="d-inline-block align-text-middle me-2{% if navbar_brand_image_class != "" %} {{ navbar_brand_image_class }}{% endif %}"
64
+ src="{{ site.baseurl }}/assets/img/{{ navbar_brand_image }}"
65
+ height="{{ navbar_brand_image_height }}"
66
+ alt="{{ site.title }}" />
67
+
68
+ {%- if navbar_brand_manifestation != "" %}
69
+ <span class="d-inline-block align-text-middle fs-6 border-start border-1 border-light opacity-75 ps-3{% if navbar_brand_manifestation_class != "" %} {{ navbar_brand_manifestation_class }}{% endif %}">{{ navbar_brand_manifestation }}</span>
70
+ {%- endif %}
71
+
72
+ </a>
73
+ {%- endif %}
74
+
75
+ {% if navbar_navitems.size > 0 %}
76
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
77
+ <span class="navbar-toggler-icon"></span>
78
+ </button>
79
+
80
+ <div class="collapse navbar-collapse" id="navbarContent">
81
+ <ul class="navbar-nav ms-auto">
82
+ {%- for navitem in navbar_navitems %}
83
+ {%- assign navitem_link = navitem.link | locale_url: page.locale %}
84
+ {%- if navitem.menu.size == 0 %}
85
+ <li class="nav-item">
86
+ {%- include base/link.html.liquid
87
+ class = "nav-link"
88
+ name = navitem.name
89
+ link = navitem_link
90
+ role = "presentation"
91
+ icon = navitem.icon
92
+ %}
93
+ </li>
94
+ {%- else %}
95
+ <li class="nav-item dropdown">
96
+ <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown-{{ forloop.index }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
97
+ <i class="{{ navitem.icon }} me-1" aria-hidden="true"></i>{{ navitem.name }}
98
+ </a>
99
+ <ul class="dropdown-menu dropdown-menu-dark shadow">
100
+ {%- for dropdownitem in navitem.menu %}
101
+ {%- assign dropdownitem_link = dropdownitem.link | locale_url: page.locale %}
102
+ <li>
103
+ {%- include base/link.html.liquid
104
+ class = "dropdown-item"
105
+ name = dropdownitem.name
106
+ link = dropdownitem_link
107
+ role = "presentation"
108
+ %}
109
+ </li>
110
+ {%- endfor %}
111
+ </ul>
112
+ </li>
113
+ {%- endif %}
114
+ {%- endfor %}
115
+ </ul>
116
+ </div>
117
+ {% endif %}
118
+
119
+ </div>
120
+ </nav>
121
+ {%- endif -%}