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,152 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Bits Component (Upstream/Downstream Relationships)
4
+ Purpose: Renders hierarchical relationships between upstream and downstream
5
+ components. Displays upstream with preamble, card, finale, and up to 3 preview
6
+ cards of related downstream items.
7
+ ================================================================================
8
+
9
+ Strategic Design Logic:
10
+ - Hierarchical relationships: upstream parent, downstream children
11
+ - Card-based presentation: reuses card component for consistency
12
+ - Filtered display: shows max 3 downstream preview cards
13
+ - Optional sections: preamble, finale, "View All" link
14
+ - Relationship linking: downstream filtered by upstream name
15
+ - Customizable styling: per-element class overrides
16
+
17
+ Required Inputs (from data objects):
18
+ - type: 'upstream' or 'downstream' (required)
19
+ - name: Component name (required)
20
+ - relationship: For downstream, name of upstream parent
21
+
22
+ Optional Inputs (from data objects):
23
+ - description, screenshot, icon, image, actions, color
24
+ - preamble, finale: Text before/after card
25
+ - class, card_class, preamble_class, finale_class: Custom styling
26
+ - index_page_name, index_page_url: For "View All" link (shows if >3 items)
27
+
28
+ Data Source Hierarchy (in priority order):
29
+ 1. include.data - Explicitly passed array
30
+ 2. page.with_bits_data - Page front matter
31
+ 3. site.data.bits - Site data
32
+ 4. site.data.base.bits - Theme defaults
33
+
34
+ Component Layout:
35
+ - Outer loop: upstream bits (type='upstream')
36
+ - Preamble text (if present)
37
+ - Card component for upstream
38
+ - Finale section with optional "View All" link (if >3 downstream)
39
+ - Downstream preview grid (max 3 items, filtered by relationship)
40
+ ================================================================================
41
+ {% endcomment %}
42
+
43
+ {%- assign with_bits = include.with_bits
44
+ | default: page.with_bits
45
+ %}
46
+
47
+ {%- assign with_bits_data = include.data
48
+ | default: page.with_bits_data
49
+ | default: site.data.bits
50
+ | default: site.data.base.bits
51
+ %}
52
+
53
+ {%- assign with_bits_schema = site.data.base.bits_schema.properties.with_bits_data.items.properties %}
54
+
55
+ {%- if with_bits %}
56
+
57
+ {%- comment %} === Presentation === {% endcomment %}
58
+ {%- assign upstream_bits = with_bits_data | where: "type", "upstream" %}
59
+ {%- for upstream_bit in upstream_bits %}
60
+
61
+ {%- comment %} --- Upstream Defaults --- {% endcomment %}
62
+ {%- assign upstream_bit_id = upstream_bit.name | replace: " ", "" | capitalize %}
63
+ {%- assign upstream_bit_class = upstream_bit.class | default: with_bits_schema.class.default %}
64
+ {%- assign upstream_bit_card_class = upstream_bit.card_class | default: with_bits_schema.card_class.default %}
65
+ {%- assign upstream_bit_preamble_class = upstream_bit.preamble_class | default: with_bits_schema.preamble_class.default %}
66
+ {%- assign upstream_bit_finale_class = upstream_bit.finale_class | default: with_bits_schema.finale_class.default %}
67
+ {%- assign upstream_bit_color = upstream_bit.color | default: with_bits_schema.color.default %}
68
+ {%- assign upstream_bit_index_page_name = upstream_bit.index_page_name | default: with_bits_schema.index_page_name.default %}
69
+ {%- assign upstream_bit_index_page_url = upstream_bit.index_page_url | default: with_bits_schema.index_page_url.default %}
70
+ {%- assign upstream_bit_screenshot_class = upstream_bit.screenshot_class | default: with_bits_schema.screenshot_class.default %}
71
+ {%- assign upstream_bit_actions_class = upstream_bit.actions_class | default: with_bits_schema.actions_class.default %}
72
+ {%- assign upstream_bit_btn_class = "btn btn-sm m-1 btn-" | append: upstream_bit_color %}
73
+
74
+ <div class="d-flex flex-column{% if upstream_bit_class != "" %} {{ upstream_bit_class }}{% endif %}">
75
+
76
+ {%- comment %} --- Upstream Peamble --- {% endcomment %}
77
+ {%- if upstream_bit.preamble %}
78
+ <p{% if upstream_bit_preamble_class != "" %} class="{{ upstream_bit_preamble_class }}"{% endif %}>{{ upstream_bit.preamble }}</p>
79
+ {%- endif %}
80
+
81
+ {%- comment %} --- Upstream Card --- {% endcomment %}
82
+ {%- include base/card.html.liquid
83
+ class = upstream_bit_card_class
84
+ screenshot = upstream_bit.screenshot
85
+ screenshot_class = upstream_bit_screenshot_class
86
+ screenshot_style = upstream_bit.screenshot_style
87
+ screenshot_alt = upstream_bit.screenshot_alt
88
+ icon = upstream_bit.icon
89
+ icon_class = upstream_bit.icon_class
90
+ image = upstream_bit.image
91
+ image_class = upstream_bit.image_class
92
+ image_style = upstream_bit.image_style
93
+ image_alt = upstream_bit.image_alt
94
+ name = upstream_bit.name
95
+ name_class = upstream_bit.name_class
96
+ description = upstream_bit.description
97
+ description_class = upstream_bit.description_class
98
+ actions = upstream_bit.actions
99
+ actions_class = upstream_bit_actions_class
100
+ color = upstream_bit_color
101
+ %}
102
+
103
+ {%- comment %} --- Upstream Finale (Downstream Introduction) --- {% endcomment %}
104
+ {%- assign downstream_bits = with_bits_data | where: "type", "downstream" | where: "relationship", upstream_bit.name %}
105
+ {%- assign downstream_bit_total = downstream_bits | size %}
106
+ {%- assign downstream_bit_index_name = upstream_bit_index_page_name | append: " (" | append: downstream_bit_total | append: ")" %}
107
+
108
+ {%- if upstream_bit.finale %}
109
+ <div class="d-flex flex-row w-100 justify-content-between align-items-center my-3">
110
+ <p class="m-1{% if upstream_bit_finale_class != "" %} {{ upstream_bit_finale_class }}{% endif %}">{{ upstream_bit.finale }}</p>
111
+ {%- if downstream_bit_total > 3 %}
112
+ <div class="m-1">
113
+ {% include base/link.html.liquid
114
+ name = downstream_bit_index_name
115
+ class = ""
116
+ icon = "fa-solid fa-arrow-right"
117
+ icon_position = "end"
118
+ url = upstream_bit_index_page_url
119
+ %}
120
+ </div>
121
+ {% endif %}
122
+ </div>
123
+ {%- endif %}
124
+
125
+ {%- comment %} --- Downstream Cards --- {% endcomment %}
126
+ <div class="d-flex flex-row flex-wrap flex-lg-nowrap justify-content-between w-100 mb-3">
127
+ {%- for downstream_bit in downstream_bits | limit: 3 %}
128
+ <div class="card border-{{ upstream_bit_color }}-subtle m-1">
129
+ <div class="bg-{{ upstream_bit_color }} rounded-top">
130
+ <img src="{{ site.url }}{{ site.baseurl }}/assets/img/{{ downstream_bit.screenshot }}" class="card-img-top" alt="{{ downstream_bit.screenshot }}">
131
+ </div>
132
+ <div class="card-body">
133
+ <p class="h5 card-title">{{ downstream_bit.name }}</p>
134
+ <p class="card-text">{{ downstream_bit.description }}</p>
135
+ {% for action in downstream_bit.actions | limit: 1 %}
136
+ {% include base/link.html.liquid
137
+ name = action.name
138
+ url = action.link
139
+ class = upstream_bit_btn_class
140
+ icon = action.icon
141
+ icon_position = action.icon_position
142
+ %}
143
+ {% endfor %}
144
+ </div>
145
+ </div>
146
+ {%- endfor %}
147
+ </div>
148
+
149
+ </div>
150
+ {% endfor %}
151
+
152
+ {%- endif -%}
@@ -0,0 +1,77 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Breadcrumb Navigation Component
4
+ Purpose: Renders hierarchical breadcrumb navigation showing page location
5
+ in the site's URL structure. Excludes locale codes from the visible trail.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Automatic breadcrumb generation from page URL (no data config)
10
+ - Hierarchical path visualization using URL splitting
11
+ - Skips locale codes (e.g., /es/, /fr/) from visible breadcrumb
12
+ - Home link always appears first as root
13
+ - Current page title as active final item (non-clickable)
14
+ - URL reconstruction preserves locale prefix in links
15
+
16
+ Required Inputs:
17
+ - page.url: Current page URL path (may include locale prefix)
18
+ - page.original_url: URL without locale prefix (used for breadcrumb structure)
19
+ - page.title: Display text for active breadcrumb
20
+
21
+ Optional Inputs:
22
+ - with_breadcrumb_data.arialabel: aria-label for the <nav> element (default: "breadcrumb")
23
+
24
+ Data Source Hierarchy:
25
+ - with_breadcrumb: include.with_breadcrumb → page.with_breadcrumb
26
+ - with_breadcrumb_data: include.data → page.with_breadcrumb_data → site.data.breadcrumb → site.data.base.breadcrumb
27
+ ================================================================================
28
+ {% endcomment %}
29
+
30
+ {%- assign with_breadcrumb = include.with_breadcrumb
31
+ | default: page.with_breadcrumb
32
+ %}
33
+
34
+ {%- assign with_breadcrumb_data = include.data
35
+ | default: page.with_breadcrumb_data
36
+ | default: site.data.breadcrumb
37
+ | default: site.data.base.breadcrumb
38
+ %}
39
+
40
+ {%- if with_breadcrumb %}
41
+
42
+ {%- assign with_breadcrumb_schema = site.data.base.breadcrumb_schema.properties.with_breadcrumb_data.properties %}
43
+
44
+ {%- comment %} Use original_url if available (without locale), otherwise use full url {%- endcomment %}
45
+ {%- assign breadcrumb_url = page.original_url | default: page.url %}
46
+
47
+ {%- comment %} Use plugin-provided locale (set for localized pages, defaults to 'en') {%- endcomment %}
48
+ {%- assign detected_locale = page.locale | default: 'en' %}
49
+
50
+ <nav aria-label="{{ with_breadcrumb_data.arialabel | default: with_breadcrumb_schema.arialabel.default | default: 'breadcrumb' }}">
51
+ <ol class="breadcrumb mb-0">
52
+ {%- comment %} Home link - adjust for locale {%- endcomment %}
53
+ {%- if detected_locale == 'en' or detected_locale == '' %}
54
+ <li class="breadcrumb-item"><a class="{{ site.with_link_decorator_data.default_link_classes }}" href="{{ site.baseurl }}/">Home</a></li>
55
+ {%- else %}
56
+ <li class="breadcrumb-item"><a class="{{ site.with_link_decorator_data.default_link_classes }}" href="{{ site.baseurl }}/{{ detected_locale }}/">Home</a></li>
57
+ {%- endif %}
58
+
59
+ {%- assign crumbs = breadcrumb_url | remove:'/index.html' | split: '/' %}
60
+ {%- for crumb in crumbs offset: 1 %}
61
+ {%- if forloop.last %}
62
+ <li class="breadcrumb-item active">{{ page.title }}</li>
63
+ {%- else %}
64
+ {%- comment %} Build URL with locale prefix if not English {%- endcomment %}
65
+ {%- assign crumb_limit = forloop.index | plus: 1 %}
66
+ {%- if detected_locale == 'en' or detected_locale == '' %}
67
+ {%- assign crumb_prefix = '' %}
68
+ {%- else %}
69
+ {%- assign crumb_prefix = detected_locale | prepend: '/' %}
70
+ {%- endif %}
71
+ <li class="breadcrumb-item"><a class="{{ site.with_link_decorator_data.default_link_classes }}" href="{{ site.baseurl }}{{ crumb_prefix }}{% for crumb in crumbs limit: crumb_limit %}{{ crumb | append: '/' | replace:'without-plugin/','without-plugins/' }}{% endfor %}">{{ crumb | replace:'-',' ' | remove:'.html' | capitalize }}</a></li>
72
+ {%- endif %}
73
+ {%- endfor %}
74
+ </ol>
75
+ </nav>
76
+
77
+ {%- endif -%}
@@ -0,0 +1,90 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Breaking News Component
4
+ Purpose: Renders sticky alert banners for breaking news with multiple
5
+ stacked alerts, colors, icons, and optional action links.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Sticky positioning: stays visible during page scroll
10
+ - Stacking support: multiple alerts stack vertically
11
+ - Dynamic scroll offset calculation: prevents header hiding
12
+ - Icon and color support: visual categorization
13
+ - Optional action links: "Know more" button
14
+
15
+ Required Inputs:
16
+ - content: Alert message text/HTML
17
+
18
+ Optional Inputs:
19
+ - color: Alert color scheme (default: "primary")
20
+ - icon: Icon class for Font Awesome (default: "fa-solid fa-bullhorn")
21
+ - link: URL for "Know more" button (optional)
22
+ - data: Array of breaking news items
23
+
24
+ Data Source Hierarchy (priority):
25
+ 1. include.data
26
+ 2. page.with_breakingnews_data
27
+ 3. site.data.breakingnews
28
+ 4. site.data.base.breakingnews
29
+ ================================================================================
30
+ {% endcomment %}
31
+
32
+ {%- assign with_breakingnews = include.with_breakingnews
33
+ | default: page.with_breakingnews
34
+ %}
35
+
36
+ {%- assign with_breakingnews_data = include.data
37
+ | default: page.with_breakingnews_data
38
+ | default: site.data.breakingnews
39
+ | default: site.data.base.breakingnews
40
+ %}
41
+
42
+ {%- if with_breakingnews %}
43
+
44
+ {%- assign with_breakingnews_schema = site.data.base.breakingnews_schema.properties.with_breakingnews_data.items.properties %}
45
+
46
+ {%- comment %} === Presentation === {% endcomment %}
47
+ {%- assign breakingnews_alert_height = site.data.base.breakingnews_schema.properties.breakingnews_alert_height.default %}
48
+ {%- assign navbar_height = site.data.base.navbar_schema.properties.navbar_height.default %}
49
+
50
+ {%- if with_breakingnews_data.size > 0 %}
51
+ <div class="sticky-top sticky-top-breakingnews">
52
+ {% for item in with_breakingnews_data %}
53
+
54
+ {%- comment %} --- Defaults --- {% endcomment %}
55
+ {% if forloop.first %}
56
+ {% assign breakingnews_alerts_height = breakingnews_alert_height | plus: navbar_height %}
57
+ {% else %}
58
+ {% assign breakingnews_alerts_height = breakingnews_alerts_height | plus: breakingnews_alert_height %}
59
+ {% endif %}
60
+ {%- assign breakingnews_color = item.color | default: with_breakingnews_schema.color.default %}
61
+ {%- assign breakingnews_btn_class = "btn btn-sm text-nowrap btn-" | append: breakingnews_color %}
62
+ {%- assign breakingnews_icon = item.icon | default: with_breakingnews_schema.icon.default %}
63
+
64
+ {%- comment %} --- HTML --- {% endcomment %}
65
+ <div class="breakingnews alert alert-{{ breakingnews_color }} p-2 rounded-0 m-0 border-start-0 border-end-0 shadow" role="alert">
66
+ <div class="container d-flex justify-content-between align-items-center">
67
+ <div class="me-3">
68
+ <div class="h6 mb-0"><i class="{{ breakingnews_icon }}"></i></div>
69
+ </div>
70
+ <p class="flex-fill text-start mb-0">{{ item.content }}</p>
71
+ {%- if item.link %}
72
+ <div>
73
+ {% include base/link.html.liquid
74
+ name = "Know more"
75
+ icon = "fa-solid fa-arrow-right"
76
+ icon_position = "end"
77
+ role = "button"
78
+ class = breakingnews_btn_class
79
+ color = breakingnews_color
80
+ link = item.link
81
+ %}
82
+ </div>
83
+ {%- endif %}
84
+ </div>
85
+ </div>
86
+ {% endfor %}
87
+ </div>
88
+ {%- endif %}
89
+
90
+ {%- endif -%}
@@ -0,0 +1,110 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Flexible Card Component
4
+ Purpose: Renders highly configurable card layouts with optional image,
5
+ icon, title, description, and action buttons.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Modular design: each section is optional
10
+ - Capture-block approach: builds HTML fragments for reusability
11
+ - Conditional rendering: only renders sections with content
12
+ - Bootstrap flexbox-based layout for responsive design
13
+ - Reuses link component for action buttons
14
+
15
+ Optional Inputs:
16
+ - class: Card container CSS classes
17
+ - color: Color scheme for styling (default: "primary")
18
+ - image, icon, screenshot: Visual elements
19
+ - name, description: Text content
20
+ - actions: Array of action buttons [{name, url, icon}]
21
+ - All image/icon/name/description have customizable CSS classes
22
+
23
+ Data Source:
24
+ - Derived from include parameters only
25
+ ================================================================================
26
+ {% endcomment %}
27
+
28
+ {%- assign with_card_schema = site.data.base.card_schema.properties %}
29
+
30
+ {%- assign card_class = include.class | default: with_card_schema.class.default %}
31
+ {%- assign card_color = include.color | default: with_card_schema.color.default %}
32
+ {%- assign card_image = include.image | default: with_card_schema.image.default %}
33
+ {%- assign card_image_class = include.image_class | default: with_card_schema.image_class.default %}
34
+ {%- assign card_image_style = include.image_style | default: with_card_schema.image_style.default %}
35
+ {%- assign card_image_alt = include.image_alt | default: card_image %}
36
+ {%- assign card_icon = include.icon | default: with_card_schema.icon.default %}
37
+ {%- assign card_icon_class = include.icon_class | default: with_card_schema.icon_class.default %}
38
+ {%- assign card_name = include.name | default: with_card_schema.name.default %}
39
+ {%- assign card_name_class = include.name_class | default: with_card_schema.name_class.default %}
40
+ {%- assign card_screenshot = include.screenshot | default: with_card_schema.screenshot.default %}
41
+ {%- assign card_screenshot_class = include.screenshot_class | default: with_card_schema.screenshot_class.default %}
42
+ {%- assign card_screenshot_style = include.screenshot_style | default: with_card_schema.screenshot_style.default %}
43
+ {%- assign card_screenshot_alt = include.screenshot_alt | default: card_screenshot %}
44
+ {%- assign card_description = include.description | default: with_card_schema.description.default %}
45
+ {%- assign card_description_class = include.description_class | default: with_card_schema.description_class.default %}
46
+ {%- assign card_actions = include.actions | default: with_card_schema.actions.default %}
47
+ {%- assign card_actions_class = include.actions_class | default: with_card_schema.actions_class.default %}
48
+ {%- assign card_actions_btn_class = include.actions_btn_class | default: "btn m-1 btn-" | append: card_color %}
49
+
50
+ {%- comment %} === Presentation === {% endcomment %}
51
+
52
+ {%- comment %} --- Defaults --- {% endcomment %}
53
+ {%- capture html_card_screenshot -%}
54
+ {% if card_screenshot != "" %}
55
+ <div class="bg-{{ card_color }} rounded mb-3">
56
+ <img class="{{ card_screenshot_class }}"{% if card_screenshot_style != "" %} style="{{ card_screenshot_style }}"{% endif %} src="{{ site.baseurl }}/assets/img/{{ card_screenshot }}" alt="{{ card_screenshot_alt }}">
57
+ </div>
58
+ {% endif %}
59
+ {%- endcapture %}
60
+
61
+ {%- capture html_card_image -%}
62
+ {% if card_image != "" %}
63
+ <img class="{{ card_image_class }}"{% if card_image_style %} style="{{ card_image_style }}"{% endif %} src="{{ site.baseurl }}/assets/img/{{ card_image }}" alt="{{ card_image_alt }}">
64
+ {% endif %}
65
+ {%- endcapture %}
66
+
67
+ {%- capture html_card_icon -%}
68
+ {% if card_icon != "" %}
69
+ <div class="{{ card_icon_class }}"><i class="{{ card_icon }}"></i></div>
70
+ {% endif %}
71
+ {%- endcapture %}
72
+
73
+ {%- capture html_card_name -%}
74
+ {% if card_name != "" %}
75
+ <p class="{{ card_name_class }}">{{ card_name }}</p>
76
+ {% endif %}
77
+ {%- endcapture %}
78
+
79
+ {%- capture html_card_description -%}
80
+ {% if card_description != "" %}
81
+ <p class="{{ card_description_class }}">{{ card_description }}</p>
82
+ {% endif %}
83
+ {%- endcapture %}
84
+
85
+ {%- capture html_card_actions -%}
86
+ {%- if card_actions.size > 0 %}
87
+ <div class="{{ card_actions_class }}">
88
+ {%- for action in card_actions %}
89
+ {% include base/link.html.liquid
90
+ class = card_actions_btn_class
91
+ role = "button"
92
+ name = action.name
93
+ url = action.url
94
+ icon = action.icon
95
+ icon_position = action.icon_position
96
+ %}
97
+ {% endfor %}
98
+ </div>
99
+ {% endif %}
100
+ {%- endcapture %}
101
+
102
+ {%- comment %} --- HTML --- {% endcomment %}
103
+ <div class="d-flex{% if card_class != "" %} {{ card_class }}{% endif %}">
104
+ {{ html_card_image }}
105
+ {{ html_card_icon }}
106
+ {{ html_card_name }}
107
+ {{ html_card_description }}
108
+ {{ html_card_screenshot }}
109
+ {{ html_card_actions }}
110
+ </div>
@@ -0,0 +1,33 @@
1
+ <table class="table dataTable">
2
+ <thead class="table-light">
3
+ <tr>
4
+ <th>{{ include.name_label | default: "Color" }}</th>
5
+ <th class="text-nowrap">Hex</th>
6
+ <th class="text-nowrap">RGB</th>
7
+ <th class="text-nowrap">HSV</th>
8
+ <th>Text Color</th>
9
+ <th class="text-nowrap">Contrast Ratio</th>
10
+ <th class="text-nowrap">WCAG 2.2 AA</th>
11
+ <th class="text-nowrap">WCAG 2.2 AAA</th>
12
+ </tr>
13
+ </thead>
14
+ <tbody>
15
+ {%- for item in include.collection %}
16
+ {%- if include.name_field == "full_name" %}
17
+ {%- assign _item_name = item.full_name | remove: '$' %}
18
+ {%- else %}
19
+ {%- assign _item_name = item.name %}
20
+ {%- endif %}
21
+ <tr>
22
+ <td class="text-nowrap">{{ _item_name }}</td>
23
+ <td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy hex value" data-copy-value="{{ item.hex }}" aria-label="Copy hex value {{ item.hex }}"><span class="fa-regular fa-copy"></span> <i class="fas fa-circle fa-xl" style="color: {{ item.hex }}"></i> <code>{{ item.hex }}</code></span></td>
24
+ <td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy RGB value" data-copy-value="{{ item.rgb }}" aria-label="Copy RGB value {{ item.rgb }}"><span class="fa-regular fa-copy"></span> <code>{{ item.rgb }}</code></span></td>
25
+ <td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy HSV value" data-copy-value="{{ item.hsv }}" aria-label="Copy HSV value {{ item.hsv }}"><span class="fa-regular fa-copy"></span> <code>{{ item.hsv }}</code></span></td>
26
+ <td><span class="badge {{ item.text_badge }}">{{ item.text_color }}</span></td>
27
+ <td class="text-nowrap"><code>{{ item.contrast_ratio | remove: '`' }}</code> <a href="https://webaim.org/resources/contrastchecker/?fcolor={{ item.text_color_hex | remove: '#' | upcase }}&bcolor={{ item.hex | remove: '#' | upcase }}" target="_blank" class="text-decoration-none" data-bs-toggle="tooltip" title="Verify with WebAIM" aria-label="Verify contrast ratio with WebAIM"><i class="fas fa-external-link-alt"></i></a></td>
28
+ <td class="text-nowrap">{% if item.wcag_2_2_aa %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Exceeds WCAG 2.2 AA standard (4.5:1 minimum)"><i class="fas fa-circle-check text-success"></i></span>{% else %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Underperforms WCAG 2.2 AA standard (4.5:1 minimum)"><i class="fas fa-circle-xmark text-danger"></i></span>{% endif %} <code>{{ item.wcag_2_2_aa_margin | remove: '`' }}</code></td>
29
+ <td class="text-nowrap">{% if item.wcag_2_2_aaa %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Exceeds WCAG 2.2 AAA standard (7.0:1 minimum)"><i class="fas fa-circle-check text-success"></i></span>{% else %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Underperforms WCAG 2.2 AAA standard (7.0:1 minimum)"><i class="fas fa-circle-xmark text-danger"></i></span>{% endif %} <code>{{ item.wcag_2_2_aaa_margin | remove: '`' }}</code></td>
30
+ </tr>
31
+ {%- endfor %}
32
+ </tbody>
33
+ </table>
@@ -0,0 +1,98 @@
1
+ {% comment %}
2
+ Generates one separate table and then triggers subsequent recursion to produce
3
+ others. Requires two distinct loops for valid HTML structure.
4
+ {% endcomment %}
5
+
6
+ {% assign current_properties = include.properties %}
7
+ {% assign parent_name = include.parent_name %}
8
+ {% assign current_level = include.level | plus: 0 %}
9
+ {% assign type_desc = include.type_desc %}
10
+
11
+ {% assign col_name = include.col_name | default: "Name" %}
12
+ {% assign col_type = include.col_type | default: "Type" %}
13
+ {% assign col_default = include.col_default | default: "Default" %}
14
+ {% assign col_description = include.col_description | default: "Description" %}
15
+
16
+ {% assign columns = include.columns %}
17
+
18
+ {% if current_properties %}
19
+
20
+ {% comment %} 1. Calculate the property count for THIS specific set of data using | size. {% endcomment %}
21
+ {% assign current_property_count = current_properties | size %}
22
+
23
+ {% comment %} 2. Determine CSS classes and ID for THIS table {% endcomment %}
24
+ {% assign table_classes = "table dataTable" %}
25
+ {% assign table_id = parent_name | slugify | append: '-nested-' | append: current_level %}
26
+
27
+ {% comment %} 3. Render the current nested table (Loop 1: Rendering) {% endcomment %}
28
+ <p class="my-3">The <code>{{ parent_name }}</code> variable is a {{ type_desc }} with the following properties:</p>
29
+
30
+ <table id="{{ table_id }}" class="{{ table_classes }}">
31
+ <thead class="table-light">
32
+ <tr>
33
+ <th scope="col">{{ col_name }}</th>
34
+ {% if columns %}
35
+ {% for col in columns %}<th scope="col">{{ col.label }}</th>{% endfor %}
36
+ {% else %}
37
+ <th scope="col">{{ col_type }}</th>
38
+ <th scope="col">{{ col_default }}</th>
39
+ <th scope="col">{{ col_description }}</th>
40
+ {% endif %}
41
+ </tr>
42
+ </thead>
43
+ <tbody>
44
+ {% for property in current_properties -%}
45
+ {% assign prop_key = property[0] %}
46
+ {% assign prop_details = property[1] %}
47
+ {% assign default_value = prop_details.default | default: "—" %}
48
+
49
+ <tr>
50
+ <td><code>{{ prop_key }}</code></td>
51
+ {% if columns %}
52
+ {% for col in columns %}<td>{{ prop_details[col.key] | strip_newlines | markdownify | default: "—" }}</td>{% endfor %}
53
+ {% else %}
54
+ <td>{{ prop_details.type | strip_newlines | markdownify | default: "—" }}</td>
55
+ <td>{{ default_value | strip_newlines | markdownify | default: "—" }}</td>
56
+ <td>{{ prop_details.description | strip_newlines | markdownify | default: "—" }}</td>
57
+ {% endif %}
58
+ </tr>
59
+ {% endfor -%}
60
+ </tbody>
61
+ </table>
62
+
63
+ {% comment %} 4. Run recursion check (Loop 2: Initiation, must run AFTER </table>) {% endcomment %}
64
+ {% for property in current_properties %}
65
+ {% assign prop_key = property[0] %}
66
+ {% assign prop_details = property[1] %}
67
+
68
+ {% assign nested_properties = nil %}
69
+
70
+ {% comment %} Check if the current property requires further recursion {% endcomment %}
71
+ {% if prop_details.type == "object" and prop_details.properties %}
72
+ {% assign nested_properties = prop_details.properties %}
73
+ {% assign next_type_desc = "dictionary (map)" %}
74
+ {% elsif prop_details.type == "array" and prop_details.items.properties %}
75
+ {% assign nested_properties = prop_details.items.properties %}
76
+ {% assign next_type_desc = "list of dictionaries" %}
77
+ {% endif %}
78
+
79
+ {% if nested_properties %}
80
+ {% comment %} Found deeper nesting: Call the next level {% endcomment %}
81
+ {% assign next_parent_name = include.parent_name | append: "." | append: prop_key %}
82
+ {% assign next_level_val = current_level | plus: 1 %}
83
+
84
+ {% include base/configuration_variables-nested.html.liquid
85
+ properties=nested_properties
86
+ parent_name=next_parent_name
87
+ type_desc=next_type_desc
88
+ level=next_level_val
89
+ col_name=col_name
90
+ col_type=col_type
91
+ col_default=col_default
92
+ col_description=col_description
93
+ columns=columns
94
+ %}
95
+ {% endif %}
96
+ {% endfor %}
97
+
98
+ {% endif %}
@@ -0,0 +1,98 @@
1
+ {% comment %}
2
+ Generates the top-level property table and initiates the recursive generation
3
+ of separate, nested DataTables for complex properties.
4
+ {% endcomment %}
5
+
6
+ {% assign component = page.component.name %}
7
+ {% assign property_name = "with_" | append: component %}
8
+ {% assign property_name_schema = component | append: "_schema" %}
9
+ {% assign property_schema = include.schema | default: site.data[property_name_schema] | default: site.data.base[property_name_schema] %}
10
+
11
+ {% assign col_name = include.col_name | default: "Name" %}
12
+ {% assign col_type = include.col_type | default: "Type" %}
13
+ {% assign col_default = include.col_default | default: "Default" %}
14
+ {% assign col_description = include.col_description | default: "Description" %}
15
+
16
+ {% assign columns = include.columns | default: property_schema.columns %}
17
+
18
+ {% if property_schema.properties %}
19
+
20
+ {% comment %} 1. Calculate the property count for the top table using | size. {% endcomment %}
21
+ {% assign property_count = property_schema.properties | size %}
22
+
23
+ {% comment %} 2. Determine the CSS classes for the top-level table. {% endcomment %}
24
+ {% assign table_classes = "table dataTable" %}
25
+
26
+ <p>The <code>{{ page.component.name }}</code> {{ page.component.type }} understands the following configuration variables:</p>
27
+
28
+ {% comment %} 3. Render the top-level table completely {% endcomment %}
29
+ <table class="{{ table_classes }}">
30
+ <thead class="table-light">
31
+ <tr>
32
+ <th scope="col">{{ col_name }}</th>
33
+ {% if columns %}
34
+ {% for col in columns %}<th scope="col">{{ col.label }}</th>{% endfor %}
35
+ {% else %}
36
+ <th scope="col">{{ col_type }}</th>
37
+ <th scope="col">{{ col_default }}</th>
38
+ <th scope="col">{{ col_description }}</th>
39
+ {% endif %}
40
+ </tr>
41
+ </thead>
42
+ <tbody>
43
+ {% for property in property_schema.properties -%}
44
+ {% assign prop_key = property[0] %}
45
+ {% assign prop_details = property[1] %}
46
+ <tr>
47
+ <td><code>{{ prop_key }}</code></td>
48
+ {% if columns %}
49
+ {% for col in columns %}<td>{{ prop_details[col.key] | strip_newlines | markdownify | default: "—" }}</td>{% endfor %}
50
+ {% else %}
51
+ <td>{{ prop_details.type | strip_newlines | markdownify | default: "—" }}</td>
52
+ <td>{{ prop_details.default | strip_newlines | markdownify | default: "—" }}</td>
53
+ <td>{{ prop_details.description | strip_newlines | markdownify | default: "—" }}</td>
54
+ {% endif %}
55
+ </tr>
56
+ {% endfor -%}
57
+ </tbody>
58
+ </table>
59
+
60
+ {% comment %} 4. Initiate recursive nested table generation (separate loop) {% endcomment %}
61
+ {% for property in property_schema.properties -%}
62
+ {% assign prop_key = property[0] %}
63
+ {% assign prop_details = property[1] %}
64
+
65
+ {% assign nested_properties = nil %}
66
+ {% assign type_desc = "" %}
67
+
68
+ {% comment %} Check for nested structures in the top-level properties {% endcomment %}
69
+ {% if prop_details.type == "object" and prop_details.properties %}
70
+ {% assign nested_properties = prop_details.properties %}
71
+ {% assign type_desc = "dictionary (map)" %}
72
+ {% elsif prop_details.type == "array" and prop_details.items.properties %}
73
+ {% comment %} Handle array of objects {% endcomment %}
74
+ {% assign nested_properties = prop_details.items.properties %}
75
+ {% assign type_desc = "list of dictionaries" %}
76
+ {% endif %}
77
+
78
+ {% if nested_properties %}
79
+ {% assign initial_level = 1 %}
80
+
81
+ {% comment %} Call the recursive include for the first level of nested properties. {% endcomment %}
82
+ {% include base/configuration_variables-nested.html.liquid
83
+ properties=nested_properties
84
+ parent_name=prop_key
85
+ type_desc=type_desc
86
+ level=initial_level
87
+ col_name=col_name
88
+ col_type=col_type
89
+ col_default=col_default
90
+ col_description=col_description
91
+ columns=columns
92
+ %}
93
+ {% endif %}
94
+ {% endfor -%}
95
+
96
+ {% else %}
97
+ <p>The <code>{{ page.component.name }}</code> {{ page.component.type }} {{ pt }} doesn't have configuration variables.</p>
98
+ {% endif %}