jekyll-theme-centos 2.52.0.beta.4 → 2.52.0.beta.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 (315) hide show
  1. checksums.yaml +4 -4
  2. data/_data/base/announcement_schema.yml +50 -0
  3. data/_data/base/artwork_schema.yml +46 -0
  4. data/_data/base/backtotop_schema.yml +53 -0
  5. data/_data/base/bits.yml +96 -0
  6. data/_data/base/bits_schema.yml +183 -0
  7. data/_data/base/breadcrumb_schema.yml +14 -0
  8. data/_data/base/breakingnews_schema.yml +59 -0
  9. data/_data/base/color.yml +1042 -0
  10. data/_data/base/color_schema.yml +1036 -0
  11. data/_data/base/content.yml +2 -0
  12. data/_data/base/content_schema.yml +26 -0
  13. data/_data/base/converter_link_schema.yml +48 -0
  14. data/_data/base/copyright.yml +12 -0
  15. data/_data/base/copyright_schema.yml +34 -0
  16. data/_data/base/copyvalue_schema.yml +49 -0
  17. data/_data/base/datatable_schema.yml +57 -0
  18. data/_data/base/event_schema.yml +122 -0
  19. data/_data/base/fontawesome_schema.yml +49 -0
  20. data/_data/base/highlight_schema.yml +68 -0
  21. data/_data/base/languages.yml +186 -0
  22. data/_data/base/link_schema.yml +153 -0
  23. data/_data/base/locales_schema.yml +25 -0
  24. data/_data/base/navbar.yml +20 -0
  25. data/_data/base/navbar_schema.yml +121 -0
  26. data/_data/base/navindex_schema.yml +67 -0
  27. data/_data/base/ogp_schema.yml +186 -0
  28. data/_data/base/project.yml +37 -0
  29. data/_data/base/project_schema.yml +120 -0
  30. data/_data/base/shortcut_schema.yml +74 -0
  31. data/_data/base/social.yml +25 -0
  32. data/_data/base/social_schema.yml +53 -0
  33. data/_data/base/title_schema.yml +49 -0
  34. data/_data/base/toc_schema.yml +100 -0
  35. data/_data/download/cards.yml +309 -0
  36. data/_data/download/navbar.yml +11 -0
  37. data/_data/sponsors/carousel.yml +37 -0
  38. data/_data/sponsors/navbar.yml +6 -0
  39. data/_includes/base/announcement.html.liquid +51 -0
  40. data/_includes/base/artwork.html.liquid +49 -0
  41. data/_includes/base/backtotop.html.liquid +51 -0
  42. data/_includes/base/bits.html.liquid +135 -0
  43. data/_includes/base/breadcrumb.html.liquid +37 -0
  44. data/_includes/base/breakingnews.html.liquid +74 -0
  45. data/_includes/base/card.html.liquid +96 -0
  46. data/_includes/base/copyright.html.liquid +56 -0
  47. data/_includes/base/copyvalue.html.liquid +59 -0
  48. data/_includes/base/datatable.html.liquid +64 -0
  49. data/_includes/base/event.html.liquid +89 -0
  50. data/_includes/base/fontawesome.html.liquid +58 -0
  51. data/_includes/base/head.html.liquid +101 -0
  52. data/_includes/base/highlight.html.liquid +65 -0
  53. data/_includes/base/image.html.liquid +42 -0
  54. data/_includes/base/link.html.liquid +139 -0
  55. data/_includes/base/locales.html.liquid +41 -0
  56. data/_includes/base/navbar.html.liquid +106 -0
  57. data/_includes/base/navindex.html.liquid +162 -0
  58. data/_includes/base/ogp.html.liquid +118 -0
  59. data/_includes/base/project.html.liquid +90 -0
  60. data/_includes/base/script.html.liquid +59 -0
  61. data/_includes/base/shortcut.html.liquid +65 -0
  62. data/_includes/base/social.html.liquid +59 -0
  63. data/_includes/base/title.html.liquid +52 -0
  64. data/_includes/base/toc.html.liquid +91 -0
  65. data/_includes/base/toc_generator.html.liquid +189 -0
  66. data/_includes/download/cards-body-commands.html +7 -0
  67. data/_includes/download/cards-body-convert.html +10 -0
  68. data/_includes/download/cards-body-doc.html +9 -0
  69. data/_includes/download/cards-body-documentation.html +11 -0
  70. data/_includes/download/cards-body-eol.html +16 -0
  71. data/_includes/download/cards-body-mirrors.html +8 -0
  72. data/_includes/download/cards-body-screenshot.html +26 -0
  73. data/_includes/download/cards-body-screenshots.html +32 -0
  74. data/_includes/download/cards-body.html +8 -0
  75. data/_includes/download/cards-footer.html +3 -0
  76. data/_includes/download/cards-header-commands.html +8 -0
  77. data/_includes/download/cards-header-convert.html +8 -0
  78. data/_includes/download/cards-header-doc.html +8 -0
  79. data/_includes/download/cards-header-documentation.html +8 -0
  80. data/_includes/download/cards-header-eol.html +8 -0
  81. data/_includes/download/cards-header-mirrors.html +13 -0
  82. data/_includes/download/cards-header-screenshot.html +8 -0
  83. data/_includes/download/cards-header-screenshots.html +8 -0
  84. data/_includes/download/cards-header.html +13 -0
  85. data/_includes/download/cards.html +120 -0
  86. data/_includes/sponsors/cards.html +11 -0
  87. data/_includes/sponsors/carousel.html +24 -0
  88. data/_layouts/base/default.html +117 -0
  89. data/_layouts/download/cards.html +7 -0
  90. data/_layouts/download/default.html +7 -0
  91. data/_layouts/people/default.html +68 -0
  92. data/_sass/base/_customization.scss +251 -0
  93. data/_sass/base/_light-dark.scss +10 -0
  94. data/_sass/base/_maps.scss +104 -0
  95. data/_sass/base/_variables.scss +232 -0
  96. data/_sass/bootstrap/_accordion.scss +153 -0
  97. data/_sass/bootstrap/_alert.scss +68 -0
  98. data/_sass/bootstrap/_badge.scss +38 -0
  99. data/_sass/bootstrap/_breadcrumb.scss +40 -0
  100. data/_sass/bootstrap/_button-group.scss +147 -0
  101. data/_sass/bootstrap/_buttons.scss +216 -0
  102. data/_sass/bootstrap/_card.scss +238 -0
  103. data/_sass/bootstrap/_carousel.scss +226 -0
  104. data/_sass/bootstrap/_close.scss +66 -0
  105. data/_sass/bootstrap/_containers.scss +41 -0
  106. data/_sass/bootstrap/_dropdown.scss +250 -0
  107. data/_sass/bootstrap/_forms.scss +9 -0
  108. data/_sass/bootstrap/_functions.scss +302 -0
  109. data/_sass/bootstrap/_grid.scss +39 -0
  110. data/_sass/bootstrap/_helpers.scss +12 -0
  111. data/_sass/bootstrap/_images.scss +42 -0
  112. data/_sass/bootstrap/_list-group.scss +199 -0
  113. data/_sass/bootstrap/_maps.scss +174 -0
  114. data/_sass/bootstrap/_mixins.scss +42 -0
  115. data/_sass/bootstrap/_modal.scss +240 -0
  116. data/_sass/bootstrap/_nav.scss +197 -0
  117. data/_sass/bootstrap/_navbar.scss +289 -0
  118. data/_sass/bootstrap/_offcanvas.scss +147 -0
  119. data/_sass/bootstrap/_pagination.scss +109 -0
  120. data/_sass/bootstrap/_placeholders.scss +51 -0
  121. data/_sass/bootstrap/_popover.scss +196 -0
  122. data/_sass/bootstrap/_progress.scss +68 -0
  123. data/_sass/bootstrap/_reboot.scss +617 -0
  124. data/_sass/bootstrap/_root.scss +187 -0
  125. data/_sass/bootstrap/_spinners.scss +86 -0
  126. data/_sass/bootstrap/_tables.scss +171 -0
  127. data/_sass/bootstrap/_toasts.scss +73 -0
  128. data/_sass/bootstrap/_tooltip.scss +119 -0
  129. data/_sass/bootstrap/_transitions.scss +27 -0
  130. data/_sass/bootstrap/_type.scss +106 -0
  131. data/_sass/bootstrap/_utilities.scss +806 -0
  132. data/_sass/bootstrap/_variables-dark.scss +102 -0
  133. data/_sass/bootstrap/_variables.scss +1753 -0
  134. data/_sass/bootstrap/bootstrap-grid.scss +62 -0
  135. data/_sass/bootstrap/bootstrap-reboot.scss +10 -0
  136. data/_sass/bootstrap/bootstrap-utilities.scss +19 -0
  137. data/_sass/bootstrap/bootstrap.scss +52 -0
  138. data/_sass/bootstrap/forms/_floating-labels.scss +97 -0
  139. data/_sass/bootstrap/forms/_form-check.scss +189 -0
  140. data/_sass/bootstrap/forms/_form-control.scss +214 -0
  141. data/_sass/bootstrap/forms/_form-range.scss +91 -0
  142. data/_sass/bootstrap/forms/_form-select.scss +80 -0
  143. data/_sass/bootstrap/forms/_form-text.scss +11 -0
  144. data/_sass/bootstrap/forms/_input-group.scss +132 -0
  145. data/_sass/bootstrap/forms/_labels.scss +36 -0
  146. data/_sass/bootstrap/forms/_validation.scss +12 -0
  147. data/_sass/bootstrap/helpers/_clearfix.scss +3 -0
  148. data/_sass/bootstrap/helpers/_color-bg.scss +7 -0
  149. data/_sass/bootstrap/helpers/_colored-links.scss +30 -0
  150. data/_sass/bootstrap/helpers/_focus-ring.scss +5 -0
  151. data/_sass/bootstrap/helpers/_icon-link.scss +25 -0
  152. data/_sass/bootstrap/helpers/_position.scss +36 -0
  153. data/_sass/bootstrap/helpers/_ratio.scss +26 -0
  154. data/_sass/bootstrap/helpers/_stacks.scss +15 -0
  155. data/_sass/bootstrap/helpers/_stretched-link.scss +15 -0
  156. data/_sass/bootstrap/helpers/_text-truncation.scss +7 -0
  157. data/_sass/bootstrap/helpers/_visually-hidden.scss +8 -0
  158. data/_sass/bootstrap/helpers/_vr.scss +8 -0
  159. data/_sass/bootstrap/mixins/_alert.scss +18 -0
  160. data/_sass/bootstrap/mixins/_backdrop.scss +14 -0
  161. data/_sass/bootstrap/mixins/_banner.scss +7 -0
  162. data/_sass/bootstrap/mixins/_border-radius.scss +78 -0
  163. data/_sass/bootstrap/mixins/_box-shadow.scss +24 -0
  164. data/_sass/bootstrap/mixins/_breakpoints.scss +127 -0
  165. data/_sass/bootstrap/mixins/_buttons.scss +70 -0
  166. data/_sass/bootstrap/mixins/_caret.scss +69 -0
  167. data/_sass/bootstrap/mixins/_clearfix.scss +9 -0
  168. data/_sass/bootstrap/mixins/_color-mode.scss +21 -0
  169. data/_sass/bootstrap/mixins/_color-scheme.scss +7 -0
  170. data/_sass/bootstrap/mixins/_container.scss +11 -0
  171. data/_sass/bootstrap/mixins/_deprecate.scss +10 -0
  172. data/_sass/bootstrap/mixins/_forms.scss +163 -0
  173. data/_sass/bootstrap/mixins/_gradients.scss +47 -0
  174. data/_sass/bootstrap/mixins/_grid.scss +151 -0
  175. data/_sass/bootstrap/mixins/_image.scss +16 -0
  176. data/_sass/bootstrap/mixins/_list-group.scss +26 -0
  177. data/_sass/bootstrap/mixins/_lists.scss +7 -0
  178. data/_sass/bootstrap/mixins/_pagination.scss +10 -0
  179. data/_sass/bootstrap/mixins/_reset-text.scss +17 -0
  180. data/_sass/bootstrap/mixins/_resize.scss +6 -0
  181. data/_sass/bootstrap/mixins/_table-variants.scss +24 -0
  182. data/_sass/bootstrap/mixins/_text-truncate.scss +8 -0
  183. data/_sass/bootstrap/mixins/_transition.scss +26 -0
  184. data/_sass/bootstrap/mixins/_utilities.scss +97 -0
  185. data/_sass/bootstrap/mixins/_visually-hidden.scss +38 -0
  186. data/_sass/bootstrap/utilities/_api.scss +47 -0
  187. data/_sass/bootstrap/vendor/_rfs.scss +348 -0
  188. data/assets/css/base/stylesheet.min.scss +35 -0
  189. data/assets/icons/android-chrome-192.png +0 -0
  190. data/assets/icons/android-chrome-512.png +0 -0
  191. data/assets/icons/apple-touch-icon.png +0 -0
  192. data/assets/icons/favicon-16.png +0 -0
  193. data/assets/icons/favicon-32.png +0 -0
  194. data/assets/icons/favicon.ico +0 -0
  195. data/assets/icons/favicon.svg +1 -0
  196. data/assets/img/anaconda-symbolic.svg +1 -0
  197. data/assets/img/anaconda.svg +1 -0
  198. data/assets/img/base/centos-colors.gpl +55 -0
  199. data/assets/img/base/page-layout-default.png +0 -0
  200. data/assets/img/base/page-layout-default.svg +1158 -0
  201. data/assets/img/base/page-with-alert.png +0 -0
  202. data/assets/img/base/page-with-alert.svg +359 -0
  203. data/assets/img/base/page-with-announcement.png +0 -0
  204. data/assets/img/base/page-with-announcement.svg +499 -0
  205. data/assets/img/base/page-with-artwork.png +0 -0
  206. data/assets/img/base/page-with-artwork.svg +368 -0
  207. data/assets/img/base/page-with-backtotop.png +0 -0
  208. data/assets/img/base/page-with-backtotop.svg +275 -0
  209. data/assets/img/base/page-with-bits.png +0 -0
  210. data/assets/img/base/page-with-bits.svg +311 -0
  211. data/assets/img/base/page-with-breadcrumb.png +0 -0
  212. data/assets/img/base/page-with-breadcrumb.svg +676 -0
  213. data/assets/img/base/page-with-breakingnews.png +0 -0
  214. data/assets/img/base/page-with-breakingnews.svg +903 -0
  215. data/assets/img/base/page-with-color.png +0 -0
  216. data/assets/img/base/page-with-color.svg +57 -0
  217. data/assets/img/base/page-with-copyright.png +0 -0
  218. data/assets/img/base/page-with-copyright.svg +233 -0
  219. data/assets/img/base/page-with-copyvalue.png +0 -0
  220. data/assets/img/base/page-with-copyvalue.svg +57 -0
  221. data/assets/img/base/page-with-datatable.png +0 -0
  222. data/assets/img/base/page-with-datatable.svg +857 -0
  223. data/assets/img/base/page-with-event.png +0 -0
  224. data/assets/img/base/page-with-event.svg +522 -0
  225. data/assets/img/base/page-with-fontawesome.png +0 -0
  226. data/assets/img/base/page-with-fontawesome.svg +147 -0
  227. data/assets/img/base/page-with-heading.png +0 -0
  228. data/assets/img/base/page-with-heading.svg +57 -0
  229. data/assets/img/base/page-with-highlight.png +0 -0
  230. data/assets/img/base/page-with-highlight.svg +86 -0
  231. data/assets/img/base/page-with-link.png +0 -0
  232. data/assets/img/base/page-with-link.svg +395 -0
  233. data/assets/img/base/page-with-locales.png +0 -0
  234. data/assets/img/base/page-with-locales.svg +724 -0
  235. data/assets/img/base/page-with-navbar.png +0 -0
  236. data/assets/img/base/page-with-navbar.svg +438 -0
  237. data/assets/img/base/page-with-navindex.png +0 -0
  238. data/assets/img/base/page-with-navindex.svg +279 -0
  239. data/assets/img/base/page-with-ogp.png +0 -0
  240. data/assets/img/base/page-with-ogp.svg +368 -0
  241. data/assets/img/base/page-with-project.png +0 -0
  242. data/assets/img/base/page-with-project.svg +822 -0
  243. data/assets/img/base/page-with-shortcut.png +0 -0
  244. data/assets/img/base/page-with-shortcut.svg +233 -0
  245. data/assets/img/base/page-with-social.png +0 -0
  246. data/assets/img/base/page-with-social.svg +233 -0
  247. data/assets/img/base/page-with-title.png +0 -0
  248. data/assets/img/base/page-with-title.svg +584 -0
  249. data/assets/img/base/page-with-toc.png +0 -0
  250. data/assets/img/base/page-with-toc.svg +438 -0
  251. data/assets/img/base/screenshot-example-1200x600.png +0 -0
  252. data/assets/img/base/screenshot-example-1200x600.svg +114 -0
  253. data/assets/img/centos-dynamicmsg-logo.svg +1 -0
  254. data/assets/img/centos-dynamicmsg-type.svg +1 -0
  255. data/assets/img/centos-dynamicmsg-whitelogo.svg +1 -0
  256. data/assets/img/centos-dynamicmsg-whitetype.svg +1 -0
  257. data/assets/img/centos-gdm-whitelogo.svg +1 -0
  258. data/assets/img/centos-ipa-whiteheader.svg +1 -0
  259. data/assets/img/centos-logo-2bits.svg +1 -0
  260. data/assets/img/centos-logo.svg +1 -0
  261. data/assets/img/centos-message-logo.svg +1 -0
  262. data/assets/img/centos-motif.png +0 -0
  263. data/assets/img/centos-poweredby-logo.svg +1 -0
  264. data/assets/img/centos-social-share.png +0 -0
  265. data/assets/img/centos-symbol-2bits.svg +1 -0
  266. data/assets/img/centos-symbol.svg +1 -0
  267. data/assets/img/centos-type.svg +1 -0
  268. data/assets/img/centos-vertical-logo.svg +1 -0
  269. data/assets/img/centos-vertical-message-logo.svg +1 -0
  270. data/assets/img/centos-whitelogo.svg +1 -0
  271. data/assets/img/download/centos-linux-7-2009-screenshot-n.png +0 -0
  272. data/assets/img/download/centos-stream-8-screenshot-n.png +0 -0
  273. data/assets/img/download/centos-stream-9-screenshot-n.png +0 -0
  274. data/assets/img/download/distribution-release-screenshot-1.png +0 -0
  275. data/assets/img/download/distribution-release-screenshot-2.png +0 -0
  276. data/assets/img/download/distribution-release-screenshot-3.png +0 -0
  277. data/assets/img/download/distribution-release-screenshot-n.png +0 -0
  278. data/assets/img/download/distribution-release-screenshot-n.svg +134 -0
  279. data/assets/img/download/download.svg +421 -0
  280. data/assets/img/download/fig-the-downloads-cards-presentation-template.png +0 -0
  281. data/assets/img/people/page.svg +900 -0
  282. data/assets/img/people/page.webp +0 -0
  283. data/assets/img/people/username.webp +0 -0
  284. data/assets/img/sponsors/screenshot-sponsors-cards-layout.png +0 -0
  285. data/assets/img/sponsors/screenshot-sponsors-cards.png +0 -0
  286. data/assets/img/sponsors/screenshot-sponsors-carousel.png +0 -0
  287. data/assets/img/sponsors/screenshot-sponsors-default-layout.png +0 -0
  288. data/assets/img/sponsors/screenshot-sponsors-logo.png +0 -0
  289. data/assets/img/sponsors/sponsor-logo-1.png +0 -0
  290. data/assets/img/sponsors/sponsor-logo-2.png +0 -0
  291. data/assets/img/sponsors/sponsor-logo-3.png +0 -0
  292. data/assets/img/sponsors/sponsor-logo-4.png +0 -0
  293. data/assets/img/sponsors/sponsor-logo-5.png +0 -0
  294. data/assets/img/sponsors/sponsor-logo-6.png +0 -0
  295. data/assets/img/sponsors/sponsor-logo-7.png +0 -0
  296. data/assets/img/sponsors/sponsor-logo-8.png +0 -0
  297. data/assets/img/sponsors/sponsors-logo.svg +563 -0
  298. data/assets/js/base/backtotop.js +23 -0
  299. data/assets/js/base/copyvalue.js +251 -0
  300. data/assets/js/base/datatable.js +55 -0
  301. data/assets/js/base/highlight.js +6 -0
  302. data/assets/js/base/init-tooltips.js +5 -0
  303. data/assets/js/bootstrap.bundle.js +6312 -0
  304. data/assets/js/bootstrap.bundle.js.map +1 -0
  305. data/assets/js/bootstrap.bundle.min.js +7 -0
  306. data/assets/js/bootstrap.bundle.min.js.map +1 -0
  307. data/assets/js/bootstrap.esm.js +4447 -0
  308. data/assets/js/bootstrap.esm.js.map +1 -0
  309. data/assets/js/bootstrap.esm.min.js +7 -0
  310. data/assets/js/bootstrap.esm.min.js.map +1 -0
  311. data/assets/js/bootstrap.js +4494 -0
  312. data/assets/js/bootstrap.js.map +1 -0
  313. data/assets/js/bootstrap.min.js +7 -0
  314. data/assets/js/bootstrap.min.js.map +1 -0
  315. metadata +314 -1
@@ -0,0 +1,37 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Breadcrumb Navigation Component
4
+ Purpose: Renders hierarchical breadcrumb navigation showing page location
5
+ in the site's URL structure.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Automatic breadcrumb generation from page URL (no data config)
10
+ - Hierarchical path visualization using URL splitting
11
+ - Home link always appears first as root
12
+ - Current page title as active final item (non-clickable)
13
+ - URL reconstruction for intermediate links
14
+
15
+ Required Inputs:
16
+ - page.url: Current page URL path
17
+ - page.title: Display text for active breadcrumb
18
+
19
+ Data Sources:
20
+ - site.baseurl: Base URL prefix
21
+ - site.converter_link.default_link_classes: CSS classes
22
+ ================================================================================
23
+ {% endcomment %}
24
+
25
+ <nav aria-label="{{ include.arialabel | default: 'breadcrumb' }}">
26
+ <ol class="breadcrumb mb-0">
27
+ <li class="breadcrumb-item"><a class="{{ site.converter_link.default_link_classes }}" href="{{ site.baseurl }}/">Home</a></li>
28
+ {%- assign crumbs = page.url | remove:'/index.html' | split: '/' %}
29
+ {%- for crumb in crumbs offset: 1 %}
30
+ {%- if forloop.last %}
31
+ <li class="breadcrumb-item active">{{ page.title }}</li>
32
+ {%- else %}
33
+ <li class="breadcrumb-item"><a class="{{ site.converter_link.default_link_classes }}" href="{{ site.baseurl }}{% assign crumb_limit = forloop.index | plus: 1 %}{% for crumb in crumbs limit: crumb_limit %}{{ crumb | append: '/' | replace:'without-plugin/','without-plugins/' }}{% endfor %}">{{ crumb | replace:'-',' ' | remove:'.html' | capitalize }}</a></li>
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ </ol>
37
+ </nav>
@@ -0,0 +1,74 @@
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 breakingnews = include.data | default: page.with_breakingnews_data | default: site.data.breakingnews | default: site.data.base.breakingnews %}
33
+
34
+ {%- comment %} === Presentation === {% endcomment %}
35
+ {% assign breakingnews_alert_height = 38 %}
36
+ {% assign navbar_height = 42 %}
37
+
38
+ <div class="sticky-top sticky-top-breakingnews">
39
+ {% for item in breakingnews %}
40
+
41
+ {%- comment %} --- Defaults --- {% endcomment %}
42
+ {% if forloop.first %}
43
+ {% assign breakingnews_alerts_height = breakingnews_alert_height | plus: navbar_height %}
44
+ {% else %}
45
+ {% assign breakingnews_alerts_height = breakingnews_alerts_height | plus: breakingnews_alert_height %}
46
+ {% endif %}
47
+ {% assign breakingnews_color = item.color | default: "primary" %}
48
+ {% assign breakingnews_btn_class = "btn btn-sm text-nowrap btn-" | append: breakingnews_color %}
49
+ {% assign breakingnews_icon = item.icon | default: "fa-solid fa-bullhorn" %}
50
+
51
+ {%- comment %} --- HTML --- {% endcomment %}
52
+ <div class="breakingnews alert alert-{{ breakingnews_color }} p-2 rounded-0 m-0 border-start-0 border-end-0 shadow" role="alert">
53
+ <div class="container d-flex justify-content-between align-items-center">
54
+ <div class="me-3">
55
+ <div class="h6 mb-0"><i class="{{ breakingnews_icon }}"></i></div>
56
+ </div>
57
+ <div class="flex-fill text-start">{{ item.content }}</div>
58
+ {%- if item.link %}
59
+ <div>
60
+ {% include base/link.html.liquid
61
+ name = "Know more"
62
+ icon = "fa-solid fa-arrow-right"
63
+ icon_position = "end"
64
+ role = "button"
65
+ class = breakingnews_btn_class
66
+ color = breakingnews_color
67
+ link = item.link
68
+ %}
69
+ </div>
70
+ {%- endif %}
71
+ </div>
72
+ </div>
73
+ {% endfor %}
74
+ </div>
@@ -0,0 +1,96 @@
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 card_class = include.class | default: "flex-column align-items-start mb-3" %}
29
+ {%- assign card_color = include.color | default: "primary" %}
30
+ {%- assign card_image = include.image | default: "" %}
31
+ {%- assign card_image_class = include.image_class | default: "img-fluid mb-3 rounded" -%}
32
+ {%- assign card_image_style = include.image_style | default: "" -%}
33
+ {%- assign card_image_alt = include.image_alt | default: card_image %}
34
+ {%- assign card_icon = include.icon | default: "" %}
35
+ {%- assign card_icon_class = include.icon_class | default: "display-6 mb-3" %}
36
+ {%- assign card_name = include.name | default: "" %}
37
+ {%- assign card_name_class = include.name_class | default: "display-5 fw-bold mb-3" %}
38
+ {%- assign card_screenshot = include.screenshot | default: "" %}
39
+ {%- assign card_screenshot_class = include.screenshot_class | default: "img-fluid" %}
40
+ {%- assign card_screenshot_style = include.screenshot_style | default: "" %}
41
+ {%- assign card_screenshot_alt = include.screenshot_alt | default: card_screenshot %}
42
+ {%- assign card_description = include.description | default: "" %}
43
+ {%- assign card_description_class = include.description_class | default: "mb-3" %}
44
+ {%- assign card_actions = include.actions | default: "" %}
45
+ {%- assign card_actions_class = include.actions_class | default: "" %}
46
+ {%- assign card_actions_btn_class = include.actions_btn_class | default: "btn m-1 btn-" | append: card_color %}
47
+
48
+ {%- comment %} === Presentation === {% endcomment %}
49
+
50
+ {%- comment %} --- Defaults --- {% endcomment %}
51
+ {%- capture html_card_screenshot -%}
52
+ <div class="bg-{{ card_color }} rounded mb-3">
53
+ <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 }}">
54
+ </div>
55
+ {%- endcapture %}
56
+
57
+ {%- capture html_card_image -%}
58
+ <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 }}">
59
+ {%- endcapture %}
60
+
61
+ {%- capture html_card_icon -%}
62
+ <div class="{{ card_icon_class }}"><i class="{{ card_icon }}"></i></div>
63
+ {%- endcapture %}
64
+
65
+ {%- capture html_card_name -%}
66
+ <div class="{{ card_name_class }}">{{ card_name }}</div>
67
+ {%- endcapture %}
68
+
69
+ {%- capture html_card_description -%}
70
+ <div class="{{ card_description_class }}">{{ card_description }}</div>
71
+ {%- endcapture %}
72
+
73
+ {%- capture html_card_actions -%}
74
+ <div class="{{ card_actions_class }}">
75
+ {%- for action in card_actions %}
76
+ {% include base/link.html.liquid
77
+ class = card_actions_btn_class
78
+ role = "button"
79
+ name = action.name
80
+ url = action.url
81
+ icon = action.icon
82
+ icon_position = action.icon_position
83
+ %}
84
+ {% endfor %}
85
+ </div>
86
+ {%- endcapture %}
87
+
88
+ {%- comment %} --- HTML --- {% endcomment %}
89
+ <div class="d-flex{% if card_class != "" %} {{ card_class }}{% endif %}">
90
+ {%- if card_image != "" %}{{ html_card_image }}{% endif %}
91
+ {%- if card_icon != "" %}{{ html_card_icon }}{% endif %}
92
+ {%- if card_name != "" %}{{ html_card_name }}{% endif %}
93
+ {%- if card_description != "" %}{{ html_card_description }}{% endif %}
94
+ {%- if card_screenshot != "" %}{{ html_card_screenshot }}{% endif -%}
95
+ {%- if card_actions.size > 0 %}{{ html_card_actions }}{% endif %}
96
+ </div>
@@ -0,0 +1,56 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Copyright Footer Component
4
+ Purpose: Renders copyright notice with author name and optional legal links.
5
+ Shows dynamic year, author, and links to Terms of Service, Privacy Policy, etc.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Dynamic year: automatically uses current year from site.time
10
+ - Legal links looping: flexible number of links in footer
11
+ - Reusable link component: consistent styling
12
+ - Capture-based rendering: builds complex link string before output
13
+ - Border separator styling: visual dividers between links
14
+
15
+ Required Inputs:
16
+ - author: Copyright holder name (e.g., "The CentOS Project")
17
+
18
+ Optional Inputs:
19
+ - legals: Array of legal link objects
20
+ - name: Link text (e.g., "Terms of Service")
21
+ - link: URL for legal document
22
+ - color: Link color (defaults to light)
23
+ - icon: Icon class (optional)
24
+ - class: Custom CSS classes (optional)
25
+
26
+ Data Source Hierarchy (priority):
27
+ 1. include.data
28
+ 2. page.with_copyright_data
29
+ 3. site.data.copyright
30
+ 4. site.data.base.copyright
31
+ ================================================================================
32
+ {% endcomment %}
33
+
34
+ {%- assign copyright = include.data | default: page.with_copyright_data | default: site.data.copyright | default: site.data.base.copyright %}
35
+
36
+ {%- comment %} === Presentation === {% endcomment %}
37
+ {%- comment %} --- Defaults --- {% endcomment %}
38
+ {% assign copyright_author = copyright.author %}
39
+ {% assign copyright_legals = copyright.legals %}
40
+ {%- capture copyright_links -%}
41
+ {%- for item in copyright_legals -%}
42
+ {% assign copyright_link_class = item.class | default: "link link-offset-3 link-offset-3-hover link-underline-primary link-underline-opacity-0 link-underline-opacity-100-hover border-start ms-2 ps-2 link-light" %}
43
+ {%- include base/link.html.liquid
44
+ class = copyright_link_class
45
+ name = item.name
46
+ link = item.link
47
+ color = item.color
48
+ role = item.role
49
+ icon = item.icon
50
+ icon_position = item.icon_position
51
+ -%}
52
+ {%- endfor -%}
53
+ {%- endcapture -%}
54
+
55
+ {%- comment %} --- HTML --- {% endcomment %}
56
+ <div class="my-3 text-center">Copyright &copy; {{ site.time | date: "%Y" }} {{ copyright_author }} {{ copyright_links }}</div>
@@ -0,0 +1,59 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Copy Value Component
4
+ Purpose: Copy to clipboard with visual feedback (checkmark + tooltip).
5
+ Auto-detects and handles both escaped and unescaped values.
6
+ ================================================================================
7
+
8
+ Recommended Usage (in template):
9
+ <a class="copy-btn" data-copy-value="{{ command | escape }}"
10
+ data-bs-toggle="tooltip" data-bs-title="Copy command">
11
+ <span class="fa-regular fa-copy"></span>
12
+ </a>
13
+
14
+ Strategic Design Logic:
15
+ - Armored implementation: handles escaped and unescaped values
16
+ - HTML entity detection: decodes &quot;, &amp;, &#39; automatically
17
+ - Visual feedback: checkmark icon + success tooltip
18
+ - Auto-reset: returns to original state after delay
19
+ - Clipboard API: native browser copy functionality
20
+
21
+ Required Inputs (from HTML element):
22
+ - class="copy-btn": Element to attach handler
23
+ - data-copy-value: Text to copy to clipboard
24
+
25
+ Optional Inputs (from data objects):
26
+ - reset_delay: Milliseconds before reset (default varies by schema)
27
+ - checkmark_path: SVG path for success icon
28
+ - checkmark_viewbox: SVG viewBox for success icon
29
+ - success_message: Tooltip message on success
30
+
31
+ Data Source Hierarchy (in priority order):
32
+ 1. include.data - Explicitly passed configuration
33
+ 2. page.with_copyvalue_data - Page front matter
34
+ 3. site.data.copyvalue - Site configuration
35
+ 4. site.data.base.copyvalue - Theme defaults
36
+
37
+ Dependencies:
38
+ Bootstrap 5, FontAwesome 6+, Clipboard API (modern browsers)
39
+ ================================================================================
40
+ {% endcomment %}
41
+
42
+ {%- assign copyvalue = include.data | default: page.with_copyvalue_data | default: site.data.copyvalue | default: site.data.base.copyvalue %}
43
+
44
+ {%- comment %} === Presentation === {% endcomment %}
45
+
46
+ {%- comment %} --- Defaults --- {% endcomment %}
47
+ {%- assign copyvalue_reset_delay = copyvalue.reset_delay | default: site.data.base.copyvalue_schema.properties.with_copyvalue_data.properties.reset_delay.default %}
48
+ {%- assign copyvalue_checkmark_path = copyvalue.checkmark_path | default: site.data.base.copyvalue_schema.properties.with_copyvalue_data.properties.checkmark_path.default %}
49
+ {%- assign copyvalue_checkmark_viewbox = copyvalue.checkmark_viewbox | default: site.data.base.copyvalue_schema.properties.with_copyvalue_data.properties.checkmark_viewbox.default %}
50
+ {%- assign copyvalue_success_message = copyvalue.success_message | default: site.data.base.copyvalue_schema.properties.with_copyvalue_data.properties.success_message.default %}
51
+
52
+ {%- comment %} --- HTML --- {% endcomment %}
53
+ <!-- Load Copy Value functionality with configuration via data attributes -->
54
+ <script id="centos-copyvalue"
55
+ data-reset-delay="{{ copyvalue_reset_delay }}"
56
+ data-checkmark-path="{{ copyvalue_checkmark_path }}"
57
+ data-checkmark-viewbox="{{ copyvalue_checkmark_viewbox }}"
58
+ data-success-message="{{ copyvalue_success_message }}"
59
+ src="{{ site.baseurl }}/assets/js/base/copyvalue.min.js"></script>
@@ -0,0 +1,64 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: DataTables Library Initialization Component
4
+ Purpose: Loads DataTables jQuery plugin from CDN with SRI integrity checks.
5
+ Initializes DataTables on all .dataTable elements with responsive design,
6
+ pagination, searching, and sorting.
7
+ ================================================================================
8
+
9
+ Design Logic:
10
+ - CDN-based library loading with SRI integrity checks
11
+ - Responsive table design for mobile devices
12
+ - Smart pagination: only if table has >10 rows
13
+ - Automatic element detection: targets all .dataTable classes
14
+ - jQuery dependency: requires jQuery loaded first
15
+
16
+ Optional Inputs:
17
+ - type: "head" for CSS include, "script" for JavaScript
18
+ - version: DataTables version (e.g., "1.13.7")
19
+ - css_integrity, script_integrity: SRI integrity hashes
20
+ - page_length: Default rows per page (default: 10)
21
+ - length_menu: Pagination options
22
+ - data: DataTables configuration object
23
+
24
+ Data Source Hierarchy (priority):
25
+ 1. include.data
26
+ 2. page.with_datatable_data
27
+ 3. site.data.datatable
28
+ 4. site.data.base.datatable
29
+ ================================================================================
30
+ {% endcomment %}
31
+
32
+ {%- assign datatable = include.data | default: page.with_datatable_data | default: site.data.datatable | default: site.data.base.datatable %}
33
+
34
+ {%- comment %} === Presentation === {% endcomment %}
35
+ {%- comment %} --- Defaults --- {% endcomment %}
36
+ {%- assign datatable_version = datatable.version | default: site.data.base.datatable_schema.properties.with_datatable_data.properties.version.default %}
37
+ {%- assign datatable_css_integrity = datatable.css_integrity | default: site.data.base.datatable_schema.properties.with_datatable_data.properties.css_integrity.default %}
38
+ {%- assign datatable_script_integrity = datatable.script_integrity | default: site.data.base.datatable_schema.properties.with_datatable_data.properties.script_integrity.default %}
39
+ {%- assign datatable_page_length = datatable.page_length | default: site.data.base.datatable_schema.properties.with_datatable_data.properties.page_length.default %}
40
+ {%- assign datatable_length_menu = datatable.length_menu | default: site.data.base.datatable_schema.properties.with_datatable_data.properties.length_menu.default %}
41
+
42
+ {%- capture html_datatable_head %}
43
+ <link href="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.css" rel="stylesheet" integrity="{{ datatable_css_integrity }}" crossorigin="anonymous" />
44
+ {%- endcapture %}
45
+
46
+ {%- capture html_datatable_script %}
47
+ <!-- DataTables Library -->
48
+ <script src="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.js" integrity="{{ datatable_script_integrity }}" crossorigin="anonymous"></script>
49
+
50
+ <!-- Initialize DataTables with configuration via data attributes -->
51
+ <script id="centos-datatable"
52
+ data-page-length="{{ datatable_page_length }}"
53
+ data-length-menu='{{ datatable_length_menu | split: "," | jsonify }}'
54
+ src="{{ site.baseurl }}/assets/js/base/datatable.min.js"></script>
55
+ {%- endcapture %}
56
+
57
+ {%- comment %} --- HTML --- {% endcomment %}
58
+ {%- assign type = include.type %}
59
+ {%- case type %}
60
+ {%- when "head" %}
61
+ {{ html_datatable_head }}
62
+ {%- when "script" %}
63
+ {{ html_datatable_script }}
64
+ {%- endcase %}
@@ -0,0 +1,89 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Event Alerts Component
4
+ Purpose: Renders event announcements as styled alert boxes with date, location,
5
+ description, and optional action links.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Alert-based styling: consistent with Bootstrap alert components
10
+ - Icon support: visual identification of event type
11
+ - Color coding: color-based categorization
12
+ - Location details: address and city information optional
13
+ - Date/time display: with location suffix if available
14
+ - Optional action link: "Know more" button for details page
15
+ - Multi-event support: loops through event array
16
+
17
+ Required Inputs:
18
+ - title: Event name/title
19
+
20
+ Optional Inputs:
21
+ - description: Event description text
22
+ - date: Event date/time string
23
+ - location: Event location name
24
+ - color: Alert color scheme (default: "secondary")
25
+ - icon: Icon class (default: "fa-solid fa-calendar")
26
+ - link: URL to event details page (optional)
27
+ - data: Array of event objects
28
+
29
+ Data Source Hierarchy (priority):
30
+ 1. include.data
31
+ 2. page.with_event_data
32
+ 3. site.data.event
33
+ 4. site.data.base.event
34
+ ================================================================================
35
+ {% endcomment %}
36
+
37
+ {%- assign events = include.data | default: page.with_event_data | default: site.data.event | default: site.data.base.event %}
38
+
39
+ {%- comment %} === Presentation === {% endcomment %}
40
+ <div class="mb-3">
41
+ {% for event in events %}
42
+ {%- comment %} --- Defaults --- {% endcomment %}
43
+ {%- assign event_address = event.address | default: nil %}
44
+ {%- assign event_city = event.city | default: nil %}
45
+ {%- assign event_color = event.color | default: "secondary" %}
46
+ {%- assign event_location = event.location | default: nil %}
47
+ {%- assign event_date = event.date | default: nil %}
48
+ {%- assign event_description = event.description | default: nil %}
49
+ {%- assign event_icon = event.icon | default: "fa-solid fa-calendar" %}
50
+ {%- assign event_image_url = event.image_url | default: nil %}
51
+ {%- assign event_link = event.link | default: nil %}
52
+ {%- assign event_title = event.title | default: nil %}
53
+
54
+ {%- assign event_btn_class = "btn btn-sm text-nowrap btn-" | append: event_color %}
55
+
56
+ {%- comment %} --- HTML --- {% endcomment %}
57
+ <div class="alert alert-{{ event_color }} rounded mb-1" role="alert">
58
+ <div class="d-flex justify-content-between align-items-start">
59
+ {%- if event_icon != nil %}
60
+ <div class="h6 my-1 me-2"><i class="{{ event_icon }}"></i></div>
61
+ {%- endif %}
62
+ <div class="flex-fill text-start">
63
+ {%- if event_title != nil %}
64
+ <div class="ms-1 fw-bold">{{ event_title }}</div>
65
+ {%- endif %}
66
+ {%- if event_date != nil %}
67
+ <div class="ms-1">{{ event_date }}{% if event_location != nil %} • {{ event_location }}{%- endif %}</div>
68
+ {%- endif %}
69
+ {%- if event_description != nil %}
70
+ <div class="ms-1">{{ event_description }}</div>
71
+ {%- endif %}
72
+ </div>
73
+ {%- if event_link != nil %}
74
+ <div class="ms-1">
75
+ {% include base/link.html.liquid
76
+ name = "Know more"
77
+ icon = "fa-solid fa-arrow-right"
78
+ icon_position = "end"
79
+ role = "button"
80
+ class = event_btn_class
81
+ color = event_color
82
+ link = event_link
83
+ %}
84
+ </div>
85
+ {%- endif %}
86
+ </div>
87
+ </div>
88
+ {% endfor %}
89
+ </div>
@@ -0,0 +1,58 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Font Awesome Icon Library Component
4
+ Purpose: Loads Font Awesome icon library CSS and JavaScript from CDN
5
+ with integrity checks.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - CDN-based library loading with SRI integrity verification
10
+ - Format switching: separate head (CSS) and script (JS) includes
11
+ - CSS bundle: complete icon stylesheet (solid, regular, brands)
12
+ - Subresource Integrity (SRI): ensures file hasn't been tampered with
13
+ - Privacy-focused: referrerpolicy="no-referrer"
14
+
15
+ Optional Inputs:
16
+ - type: "head" for CSS, "script" for JavaScript
17
+ - version: Font Awesome version (e.g., "6.4.0")
18
+ - cdn: CDN base URL (default: unpkg.com)
19
+ - css_bundle_name, js_bundle_name: Bundle identifiers
20
+ - css_bundle_integrity, js_bundle_integrity: SRI hashes
21
+ - data: Font Awesome configuration object
22
+
23
+ Data Source Hierarchy (priority):
24
+ 1. include.data
25
+ 2. page.with_fontawesome_data
26
+ 3. site.data.fontawesome
27
+ 4. site.data.base.fontawesome
28
+ ================================================================================
29
+ {% endcomment %}
30
+
31
+ {%- assign fontawesome = include.data | default: page.with_fontawesome_data | default: site.data.fontawesome | default: site.data.base.fontawesome %}
32
+
33
+ {%- comment %} === Presentation === {% endcomment %}
34
+
35
+ {%- comment %} --- Defaults --- {% endcomment %}
36
+ {%- assign fontawesome_version = fontawesome.version | default: site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties.version.default %}
37
+ {%- assign fontawesome_cdn = fontawesome.cdn | default: site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties.cdn.default %}
38
+ {%- assign fontawesome_css_bundle_name = fontawesome.css_bundle_name | default: site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties.css_bundle_name.default %}
39
+ {%- assign fontawesome_css_bundle_integrity = fontawesome.css_bundle_integrity | default: site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties.css_bundle_integrity.default %}
40
+ {%- assign fontawesome_js_bundle_name = fontawesome.js_bundle_name | default: site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties.js_bundle_name.default %}
41
+ {%- assign fontawesome_js_bundle_integrity = fontawesome.js_bundle_integrity | default: site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties.js_bundle_integrity.default %}
42
+
43
+ {%- capture html_fontawesome_head %}
44
+ <link rel="stylesheet" href="{{ fontawesome_cdn }}/{{ fontawesome_version }}/css/{{ fontawesome_css_bundle_name }}.min.css" integrity="{{ fontawesome_css_bundle_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
45
+ {%- endcapture %}
46
+
47
+ {%- capture html_fontawesome_script %}
48
+ <script src="{{ fontawesome_cdn }}/{{ fontawesome_version }}/js/{{ fontawesome_js_bundle_name }}.min.js" integrity="{{ fontawesome_js_bundle_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
49
+ {%- endcapture %}
50
+
51
+ {%- comment %} --- HTML --- {% endcomment %}
52
+ {%- assign type = include.type %}
53
+ {%- case type %}
54
+ {%- when "head" %}
55
+ {{ html_fontawesome_head }}
56
+ {%- when "script" %}
57
+ {{ html_fontawesome_script }}
58
+ {%- endcase %}
@@ -0,0 +1,101 @@
1
+ {% comment %}
2
+ ================================================================================
3
+ Template: Page Head Section Component
4
+ Purpose: Generates complete HTML <head> section with meta tags, stylesheets,
5
+ icons, fonts, and conditional library includes.
6
+ ================================================================================
7
+
8
+ Design Logic:
9
+ - Comprehensive meta tags: charset, viewport, responsive design
10
+ - Dynamic title generation: page title + site title
11
+ - Favicon support: multiple formats (16x16, 32x32, SVG, Apple Touch)
12
+ - Google Fonts: Montserrat and Source Code Pro preloaded
13
+ - Breakingnews scroll offset: dynamic CSS calculation
14
+ - Conditional includes: OGP, Font Awesome, Highlight.js, DataTables
15
+ - CSS prioritization: custom stylesheet last for override
16
+
17
+ Required Inputs:
18
+ - page.title: Current page title
19
+ - site.title: Site name/title
20
+ - site.baseurl: Base URL for asset paths
21
+
22
+ Optional Inputs:
23
+ - page.with_ogp, page.with_fontawesome: Include OGP/Font Awesome (boolean)
24
+ - page.with_breakingnews, page.with_highlight: Include breaking news/highlight
25
+ - page.with_datatable: Include DataTables (boolean)
26
+ - page.with_breakingnews_data: Array of breaking news items
27
+ ================================================================================
28
+ {% endcomment %}
29
+
30
+ <head>
31
+ {% if page.title == site.title -%}
32
+ <title>{{ page.title }}</title>
33
+ {% else -%}
34
+ <title>{{ page.title }} - {{ site.title }}</title>
35
+ {% endif -%}
36
+ <meta charset="utf-8" />
37
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no" />
38
+ {%- if page.with_ogp == true -%}
39
+ {% include base/ogp.html.liquid %}
40
+ {%- endif %}
41
+ <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon-16.png" sizes="16x16" />
42
+ <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon-32.png" sizes="32x32" />
43
+ <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon.svg" sizes="any" />
44
+ <link rel="apple-touch-icon" href="{{ site.baseurl }}/assets/icons/apple-touch-icon.png" sizes="180x180" />
45
+ <link rel="manifest" href="{{ site.baseurl }}/site.webmanifest" />
46
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
47
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
48
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Source+Code+Pro:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap" />
49
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap" />
50
+ <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/base/stylesheet.min.css" />
51
+ {%- comment %}
52
+ Dynamic Breaking News Offset CSS
53
+ Adjust scroll-margin-top values based on the number of breaking news items.
54
+ Uses CSS custom properties for cleaner, more maintainable dynamic styling.
55
+ {%- endcomment %}
56
+ {%- assign breakingnews = page.with_breakingnews_data | default: site.data.breakingnews | default: site.data.base.breakingnews %}
57
+ {%- if page.with_breakingnews == true and breakingnews.size > 0 %}
58
+ {%- assign breakingnews_alert_height = 31 %}
59
+ {%- assign navbar_height = 42 %}
60
+ {%- assign breakingnews_offset = 0 %}
61
+ {%- for item in breakingnews %}
62
+ {%- if forloop.first %}
63
+ {%- assign breakingnews_offset = breakingnews_alert_height | plus: navbar_height %}
64
+ {%- else %}
65
+ {%- assign breakingnews_offset = breakingnews_offset | plus: breakingnews_alert_height %}
66
+ {%- endif %}
67
+ {%- endfor %}
68
+ {%- assign heading_margin_px = 48 %}
69
+ {%- assign heading_scroll_margin_height = breakingnews_offset | plus: heading_margin_px %}
70
+ {%- assign accordion_scroll_margin_height = breakingnews_offset %}
71
+ <style>
72
+ :root {
73
+ --calculated-heading-offset: {{ heading_scroll_margin_height }}px;
74
+ --calculated-accordion-offset: {{ accordion_scroll_margin_height }}px;
75
+ }
76
+ main {
77
+ .content > h1,
78
+ .content > h2,
79
+ .content > h3,
80
+ .content > h4,
81
+ .content > h5,
82
+ .content > h6 {
83
+ scroll-margin-top: calc(var(--calculated-heading-offset) * 1.3) !important;
84
+ }
85
+ .content .accordion,
86
+ .content .accordion-item {
87
+ scroll-margin-top: calc(var(--calculated-accordion-offset) * 1.5) !important;
88
+ }
89
+ }
90
+ </style>
91
+ {%- endif %}
92
+ {% if page.with_fontawesome %}
93
+ {% include base/fontawesome.html.liquid type="head" %}
94
+ {% endif %}
95
+ {% if page.with_highlight %}
96
+ {% include base/highlight.html.liquid type="head" %}
97
+ {% endif -%}
98
+ {% if page.with_datatable %}
99
+ {% include base/datatable.html.liquid type="head" %}
100
+ {% endif -%}
101
+ </head>