jekyll-theme-centos 2.52.0.beta.56 → 2.52.0.beta.57

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/_config.yml +1 -1
  3. data/_data/base/backtotop_schema.yml +6 -0
  4. data/_data/base/datatable_schema.yml +3 -3
  5. data/_data/base/head_schema.yml +19 -0
  6. data/_data/base/heading_anchor.yml +1 -3
  7. data/_data/base/heading_anchor_schema.yml +1 -1
  8. data/_data/base/highlight_schema.yml +30 -0
  9. data/_data/base/ogp.yml +23 -0
  10. data/_data/base/ogp_schema.yml +14 -22
  11. data/_includes/base/backtotop.html.liquid +10 -2
  12. data/_includes/base/copyvalue.html.liquid +10 -1
  13. data/_includes/base/datatable.html.liquid +8 -3
  14. data/_includes/base/fontawesome.html.liquid +2 -2
  15. data/_includes/base/{partials/footer.html.liquid → footer.html.liquid} +2 -2
  16. data/_includes/base/{partials/head.html.liquid → head.html.liquid} +54 -14
  17. data/_includes/base/heading_anchor.html.liquid +8 -3
  18. data/_includes/base/highlight.html.liquid +14 -9
  19. data/_includes/base/{partials/navbar.html.liquid → navbar.html.liquid} +3 -3
  20. data/_includes/base/navindex.html.liquid +2 -2
  21. data/_includes/base/ogp.html.liquid +58 -56
  22. data/_layouts/base/default.html +7 -10
  23. data/_sass/base/_customization.scss +27 -13
  24. data/assets/img/base/example-ogp-image.png +0 -0
  25. data/assets/img/base/example-ogp-image.svg +297 -0
  26. data/assets/img/base/page-layout-default.png +0 -0
  27. data/assets/img/base/page-layout-default.svg +4 -4
  28. data/assets/img/base/page-with-ogp.png +0 -0
  29. data/assets/img/base/page-with-ogp.svg +333 -300
  30. data/assets/img/centos-social-share.png +0 -0
  31. data/assets/js/base/backtotop.js +7 -10
  32. data/assets/js/base/copyvalue.js +96 -94
  33. data/assets/js/base/datatable.js +28 -42
  34. data/assets/js/base/heading-anchor.js +53 -53
  35. data/assets/js/base/highlight.js +9 -3
  36. data/assets/js/base/init-tooltips.js +10 -4
  37. metadata +15 -13
  38. data/_data/base/partials/head_schema.yml +0 -47
  39. data/_includes/base/partials/script.html.liquid +0 -47
  40. /data/_data/base/{partials/content.yml → content.yml} +0 -0
  41. /data/_data/base/{partials/content_schema.yml → content_schema.yml} +0 -0
  42. /data/_data/base/{partials/footer.yml → footer.yml} +0 -0
  43. /data/_data/base/{partials/footer_schema.yml → footer_schema.yml} +0 -0
  44. /data/_data/base/{partials/navbar.yml → navbar.yml} +0 -0
  45. /data/_data/base/{partials/navbar_schema.yml → navbar_schema.yml} +0 -0
  46. /data/_data/base/{partials/script_schema.yml → script_schema.yml} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 03d8ff8dc07628a4cbbc99b17a7a423953e243a9534b892aa7f36b9f8e8ab694
4
- data.tar.gz: a5bdb40ae9427b116c33d8cc357037ad2275ba31ed2247e2125580a7283324d5
3
+ metadata.gz: 29e3de8f157f7b87508708bbdb18de63f8bd44871d0feca1c8f867a299e9aa46
4
+ data.tar.gz: 2012b819f38f4ebcf5e3bd300be8a3faea9f0b46916b2a94f289b1ace45b7583
5
5
  SHA512:
6
- metadata.gz: 4880a671668b3bc46413dbd45d42e30b8c61ab5dcacfef7ad012e258afb319f121f7039f3edb4ca37e50270d34edb0513d7b233365619c5e8ac242ae17142153
7
- data.tar.gz: 0dfd22a3c555b0769aae9c880b96894df152b6493e932fc9d3d274cca1dad6ed9b467cb912f616e3ffd4a23c64e59e59eee936fcd8ae9a705f72ce2c4fb4905c
6
+ metadata.gz: 0e3fed1004fc6820dac94c797fd5a4cebd99d967a088797e2f59fd328be508c382fee93d30c5dd66a6f17d953204b8ed344d68c300f25289e67c3bb1a90dd1ae
7
+ data.tar.gz: 741b4f8ad83b80b1ebc127834e4a19d2051191a21c8af6b074b7f8cf5e7cca028feda26631818bcb923e085835e9908d6f161fac7b3aaad5e82d1a0f9d368faf
data/_config.yml CHANGED
@@ -161,7 +161,7 @@ with_link_decorator_data:
161
161
 
162
162
  with_heading_anchor: true
163
163
  with_heading_anchor_data:
164
- icon: "fa-solid fa-link"
164
+ icon: "fa-solid fa-hashtag"
165
165
  copy_success_message: "Copied!"
166
166
  reset_delay: 2000
167
167
 
@@ -29,6 +29,12 @@ properties:
29
29
  description: >-
30
30
  Specifies the version of the Back to Top addon to load from the CDN
31
31
  (e.g., `7.2.1`).
32
+ script_integrity:
33
+ type: string
34
+ default: "sha384-vPjvei7c1a3IpCr0kkDEOMRmlCHcv8REJw1B2eKJM55swier62xiYRVistfMKEUj"
35
+ description: >-
36
+ SRI hash for the vanilla-back-to-top script loaded from the CDN.
37
+ Must be updated when `version` changes.
32
38
  diameter:
33
39
  type: string
34
40
  default: "56"
@@ -18,21 +18,21 @@ properties:
18
18
  properties:
19
19
  version:
20
20
  type: string
21
- default: "v/bs5/jq-3.7.0/dt-2.3.5"
21
+ default: "v/bs5/jq-3.7.0/dt-2.3.8"
22
22
  description: >-
23
23
  The specific version and dependencies string for the compressed
24
24
  and minified DataTables distribution (e.g., `v/bs5/jq-3.7.0/dt-2.3.5`).
25
25
  This value is sourced from the DataTables [download page](https://datatables.net/download/).
26
26
  css_integrity:
27
27
  type: string
28
- default: "sha384-X4ObCG8fB8SK+9d3GgWfrrKjO7nk3Q2PrwyEKa4Nx78Su/v2xEBtCnJ9kRP+gHhi"
28
+ default: "sha384-nD9P196GmYuiIASpxI7+7/0LqD6BBA74CfgIOSQUo7brmKKeph8lSEMm2sGgSAvK"
29
29
  description: >-
30
30
  The Subresource Integrity (SRI) CSS checksum (`sha384-...`) for the
31
31
  specific DataTables version used. This is essential for ensuring the integrity
32
32
  of the loaded CSS resource.
33
33
  script_integrity:
34
34
  type: string
35
- default: "sha384-nhDlWXAURrLQOkCo8hXDhpFWZjzFzX/udlaGLd8PDMKvv67k6YMfex2pZjLU6o2U"
35
+ default: "sha384-pszF7QvU8ChuuhQBJGIvzVEcojfpYqQOVG2PaXES4M4Mcn+1CqfQ4r1b/mpdtn/6"
36
36
  description: >-
37
37
  The Subresource Integrity (SRI) JavaScript checksum (`sha384-...`)
38
38
  for the specific DataTables version used. This ensures the integrity of
@@ -0,0 +1,19 @@
1
+ title: Head Component Configuration
2
+ description: >-
3
+ Schema for the head component. The head component is a layout coordinator
4
+ that assembles the HTML <head> section by conditionally including
5
+ sub-components (OGP, Font Awesome, Highlight.js, DataTables, Breaking News,
6
+ Back to Top, Copy Value, Heading Anchor). Each sub-component is configured
7
+ through its own schema. Only properties exclusive to the head component
8
+ itself are defined here.
9
+ type: object
10
+ properties:
11
+ theme_color:
12
+ type: string
13
+ default: "#A54C93"
14
+ description: >-
15
+ Browser chrome color for mobile browsers (Chrome on Android, Safari on iOS).
16
+ Used by the `<meta name="theme-color">` tag. Should match `theme_color`
17
+ in the site's `site.webmanifest`. Resolved from `page.theme_color` first,
18
+ then `site.theme_color`, then this default.
19
+ additionalProperties: false
@@ -1,4 +1,2 @@
1
1
  ---
2
- icon: "fa-solid fa-link"
3
- copy_success_message: "Copied!"
4
- reset_delay: 2000
2
+ icon: "fa-solid fa-hashtag"
@@ -17,7 +17,7 @@ properties:
17
17
  icon:
18
18
  type: string
19
19
  description: Font Awesome icon classes applied to the anchor icon element.
20
- default: "fa-solid fa-link"
20
+ default: "fa-solid fa-hashtag"
21
21
  icon_size:
22
22
  type: string
23
23
  description: Font Awesome size modifier appended after the icon classes.
@@ -30,6 +30,36 @@ properties:
30
30
  description: >-
31
31
  The specific version of the Highlight.js library being loaded
32
32
  (e.g., `11.11.1`).
33
+ css_integrity:
34
+ type: string
35
+ default: "sha384-4Y0nObtF3CbKnh+lpzmAVdAMtQXl+ganWiiv73RcGVdRdfVIya8Cao1C8ZsVRRDz"
36
+ description: >-
37
+ SRI hash for the Highlight.js theme CSS loaded from cdnjs. Must be
38
+ updated when `version` or `theme` changes.
39
+ script_integrity:
40
+ type: string
41
+ default: "sha384-RH2xi4eIQ/gjtbs9fUXM68sLSi99C7ZWBRX1vDrVv6GQXRibxXLbwO2NGZB74MbU"
42
+ description: >-
43
+ Subresource Integrity (SRI) hash for the Highlight.js script loaded
44
+ from cdnjs. Must be updated when `version` changes.
45
+ copy_version:
46
+ type: string
47
+ default: "1.0.6"
48
+ description: >-
49
+ Version of the highlightjs-copy plugin loaded from unpkg
50
+ (e.g., `1.0.6`).
51
+ copy_script_integrity:
52
+ type: string
53
+ default: "sha384-0/jh9+ifwJ5mqtDZ+DWdwgFjZ8I4HIfXqaWJi2mdeAwy8aUPlw5dTYNsqAqNE4yD"
54
+ description: >-
55
+ SRI hash for the highlightjs-copy plugin script. Must be updated
56
+ when `copy_version` changes.
57
+ copy_css_integrity:
58
+ type: string
59
+ default: "sha384-jx4j2QNE8PcYHQikjfTfY6TM0sYVodTr0OGqUfAR6bKYJBgW91lTieqkghTu9+Kk"
60
+ description: >-
61
+ SRI hash for the highlightjs-copy plugin stylesheet. Must be updated
62
+ when `copy_version` changes.
33
63
  copy_button_icons:
34
64
  type: object
35
65
  description: >-
@@ -0,0 +1,23 @@
1
+ ---
2
+ locale: en_US
3
+ og:
4
+ type: website
5
+ title: true
6
+ url: true
7
+ description: true
8
+ image:
9
+ url: true
10
+ alt: The CentOS Project
11
+ type: image/png
12
+ width: 1200
13
+ height: 630
14
+ twitter:
15
+ card: summary_large_image
16
+ site: "@CentOS"
17
+ creator: "@CentOS"
18
+ title: true
19
+ url: true
20
+ description: true
21
+ image:
22
+ url: true
23
+ alt: The CentOS Project
@@ -59,7 +59,7 @@ properties:
59
59
  description: The height of the image in pixels via the `og:image:height` tag.
60
60
  alt:
61
61
  type: string
62
- default: "centos-social-share.png"
62
+ default: "The CentOS Project"
63
63
  description: A description of the image for accessibility via the `og:image:alt` tag.
64
64
  required:
65
65
  - url
@@ -126,27 +126,13 @@ properties:
126
126
  default: summary_large_image
127
127
  description: Defines the Twitter Card type via the `twitter:card` tag (e.g., `summary`, `summary_large_image`).
128
128
  site:
129
- type: object
130
- description: The Twitter account of the website via the `twitter:site` tag.
131
- properties:
132
- id:
133
- type: string
134
- default: "@CentOS"
135
- description: The site's Twitter handle (e.g., `@CentOS`).
136
- required:
137
- - id
138
- additionalProperties: false
129
+ type: string
130
+ default: "@CentOS"
131
+ description: The website's Twitter handle via the `twitter:site` tag (e.g., `@CentOS`).
139
132
  creator:
140
- type: object
141
- description: The Twitter account of the content creator via the `twitter:creator` tag.
142
- properties:
143
- id:
144
- type: string
145
- default: "@CentOS"
146
- description: The creator's Twitter handle (e.g., `@CentOS`).
147
- required:
148
- - id
149
- additionalProperties: false
133
+ type: string
134
+ default: "@CentOS"
135
+ description: The content creator's Twitter handle via the `twitter:creator` tag (e.g., `@CentOS`).
150
136
  image:
151
137
  type: object
152
138
  description: Configuration for the main image used in the Twitter Card (`twitter:image`).
@@ -175,7 +161,7 @@ properties:
175
161
  description: The height of the image in pixels.
176
162
  alt:
177
163
  type: string
178
- default: "centos-social-share.png"
164
+ default: "The CentOS Project"
179
165
  description: The image description for accessibility.
180
166
  required:
181
167
  - url
@@ -183,4 +169,10 @@ properties:
183
169
  - height
184
170
  additionalProperties: false
185
171
  additionalProperties: false
172
+ locale:
173
+ type: string
174
+ default: "en_US"
175
+ description: >-
176
+ Locale of the content in language_TERRITORY format (e.g., `en_US`, `es_ES`).
177
+ Used by the `og:locale` tag. Should match the site's primary language.
186
178
  additionalProperties: false
@@ -47,19 +47,27 @@ Data Source Hierarchy (priority):
47
47
  {%- comment %} --- Defaults --- {% endcomment %}
48
48
  {%- assign backtotop_cdn = with_backtotop_data.cdn | default: with_backtotop_schema.cdn.default %}
49
49
  {%- assign backtotop_version = with_backtotop_data.version | default: with_backtotop_schema.version.default %}
50
+ {%- assign backtotop_script_integrity = with_backtotop_data.script_integrity | default: with_backtotop_schema.script_integrity.default %}
50
51
  {%- assign backtotop_diameter = with_backtotop_data.diameter | default: with_backtotop_schema.diameter.default %}
51
52
  {%- assign backtotop_background_color = with_backtotop_data.background_color | default: with_backtotop_schema.background_color.default %}
52
53
  {%- assign backtotop_text_color = with_backtotop_data.text_color | default: with_backtotop_schema.text_color.default %}
53
54
 
54
55
  {%- comment %} --- HTML --- {% endcomment %}
55
56
  <!-- Load vanilla-back-to-top library from CDN -->
56
- <script src="{{ backtotop_cdn }}/vanilla-back-to-top@{{ backtotop_version }}/dist/vanilla-back-to-top.min.js"></script>
57
+ <script src="{{ backtotop_cdn }}/vanilla-back-to-top@{{ backtotop_version }}/dist/vanilla-back-to-top.min.js" integrity="{{ backtotop_script_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
57
58
 
58
59
  <!-- Initialize back-to-top button with configuration via data attributes -->
59
60
  <script id="centos-backtop"
61
+ {%- if with_backtotop_data.diameter %}
60
62
  data-diameter="{{ backtotop_diameter }}"
63
+ {%- endif %}
64
+ {%- if with_backtotop_data.background_color %}
61
65
  data-background-color="{{ backtotop_background_color }}"
66
+ {%- endif %}
67
+ {%- if with_backtotop_data.text_color %}
62
68
  data-text-color="{{ backtotop_text_color }}"
63
- src="{{ site.baseurl }}/assets/js/base/backtotop.min.js"></script>
69
+ {%- endif %}
70
+ src="{{ site.baseurl }}/assets/js/base/backtotop.min.js"
71
+ defer></script>
64
72
 
65
73
  {%- endif %}
@@ -64,10 +64,19 @@ Bootstrap 5, FontAwesome 6+, Clipboard API (modern browsers)
64
64
  {%- comment %} --- HTML --- {% endcomment %}
65
65
  <!-- Load Copy Value functionality with configuration via data attributes -->
66
66
  <script id="centos-copyvalue"
67
+ {%- if with_copyvalue_data.reset_delay %}
67
68
  data-reset-delay="{{ copyvalue_reset_delay }}"
69
+ {%- endif %}
70
+ {%- if with_copyvalue_data.checkmark_path %}
68
71
  data-checkmark-path="{{ copyvalue_checkmark_path }}"
72
+ {%- endif %}
73
+ {%- if with_copyvalue_data.checkmark_viewbox %}
69
74
  data-checkmark-viewbox="{{ copyvalue_checkmark_viewbox }}"
75
+ {%- endif %}
76
+ {%- if with_copyvalue_data.success_message %}
70
77
  data-success-message="{{ copyvalue_success_message }}"
71
- src="{{ site.baseurl }}/assets/js/base/copyvalue.min.js"></script>
78
+ {%- endif %}
79
+ src="{{ site.baseurl }}/assets/js/base/copyvalue.min.js"
80
+ defer></script>
72
81
 
73
82
  {%- endif %}
@@ -52,18 +52,23 @@ Data Source Hierarchy (priority):
52
52
  {%- assign datatable_length_menu = with_datatable_data.length_menu | default: with_datatable_schema.length_menu.default %}
53
53
 
54
54
  {%- capture html_datatable_head %}
55
- <link href="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.css" rel="stylesheet" integrity="{{ datatable_css_integrity }}" crossorigin="anonymous" />
55
+ <link href="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.css" rel="stylesheet" integrity="{{ datatable_css_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
56
56
  {%- endcapture %}
57
57
 
58
58
  {%- capture html_datatable_script %}
59
59
  <!-- DataTables Library -->
60
- <script src="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.js" integrity="{{ datatable_script_integrity }}" crossorigin="anonymous"></script>
60
+ <script src="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.js" integrity="{{ datatable_script_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
61
61
 
62
62
  <!-- Initialize DataTables with configuration via data attributes -->
63
63
  <script id="centos-datatable"
64
+ {%- if with_datatable_data.page_length %}
64
65
  data-page-length="{{ datatable_page_length }}"
66
+ {%- endif %}
67
+ {%- if with_datatable_data.length_menu %}
65
68
  data-length-menu='{{ datatable_length_menu | split: "," | jsonify }}'
66
- src="{{ site.baseurl }}/assets/js/base/datatable.min.js"></script>
69
+ {%- endif %}
70
+ src="{{ site.baseurl }}/assets/js/base/datatable.min.js"
71
+ defer></script>
67
72
  {%- endcapture %}
68
73
 
69
74
  {%- comment %} --- HTML --- {% endcomment %}
@@ -15,7 +15,7 @@ Design Logic:
15
15
  Optional Inputs:
16
16
  - type: "head" for CSS, "script" for JavaScript
17
17
  - version: Font Awesome version (e.g., "6.4.0")
18
- - cdn: CDN base URL (default: unpkg.com)
18
+ - cdn: CDN base URL (default: cdnjs.cloudflare.com)
19
19
  - css_bundle_name, js_bundle_name: Bundle identifiers
20
20
  - css_bundle_integrity, js_bundle_integrity: SRI hashes
21
21
  - data: Font Awesome configuration object
@@ -57,7 +57,7 @@ Data Source Hierarchy (priority):
57
57
  {%- endcapture %}
58
58
 
59
59
  {%- capture html_fontawesome_script %}
60
- <script src="{{ fontawesome_cdn }}/{{ fontawesome_version }}/js/{{ fontawesome_js_bundle_name }}.min.js" integrity="{{ fontawesome_js_bundle_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
60
+ <script src="{{ fontawesome_cdn }}/{{ fontawesome_version }}/js/{{ fontawesome_js_bundle_name }}.min.js" integrity="{{ fontawesome_js_bundle_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
61
61
  {%- endcapture %}
62
62
 
63
63
  {%- comment %} --- HTML --- {% endcomment %}
@@ -5,10 +5,10 @@
5
5
  {%- assign with_footer_data = include.data
6
6
  | default: page.with_footer_data
7
7
  | default: site.data.footer
8
- | default: site.data.base.partials.footer
8
+ | default: site.data.base.footer
9
9
  %}
10
10
 
11
- {%- assign with_footer_schema = site.data.base.partials.footer_schema.properties.with_footer_data.properties %}
11
+ {%- assign with_footer_schema = site.data.base.footer_schema.properties.with_footer_data.properties %}
12
12
 
13
13
  {%- assign footer_brand_image = with_footer_data.brand_image | default: with_footer_schema.brand_image.default %}
14
14
  {%- assign footer_brand_image_class = with_footer_data.brand_image_class | default: with_footer_schema.brand_image_class.default %}
@@ -6,13 +6,15 @@ icons, fonts, and conditional library includes.
6
6
  ================================================================================
7
7
 
8
8
  Design Logic:
9
- - Comprehensive meta tags: charset, viewport, responsive design
9
+ - Comprehensive meta tags: charset, viewport, referrer policy, description, theme-color
10
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
11
+ - Favicon support: multiple formats (16x16, 32x32, SVG with type, Apple Touch)
12
+ - Google Fonts: Montserrat (5 weights) and Source Code Pro (2 weights) via async stylesheet
13
13
  - Breakingnews scroll offset: dynamic CSS calculation
14
- - Conditional includes: OGP, Font Awesome, Highlight.js, DataTables
14
+ - Conditional includes: OGP, Highlight.js, DataTables, FontAwesome (SVG+JS)
15
15
  - CSS prioritization: custom stylesheet last for override
16
+ - Script loading: Bootstrap base first (defer), then optional extensions, then UI behaviors
17
+ - Bootstrap preloaded (high-priority fetch); CDN origins preconnected + dns-prefetched per active component
16
18
 
17
19
  Required Inputs:
18
20
  - page.title: Current page title
@@ -20,31 +22,54 @@ Required Inputs:
20
22
  - site.baseurl: Base URL for asset paths
21
23
 
22
24
  Optional Inputs:
23
- - page.with_ogp, page.with_fontawesome: Include OGP/Font Awesome (boolean)
25
+ - page.with_ogp, page.with_fontawesome: Include OGP/Font Awesome SVG+JS (boolean)
24
26
  - page.with_breakingnews, page.with_highlight: Include breaking news/highlight
25
27
  - page.with_datatable: Include DataTables (boolean)
26
28
  - page.with_breakingnews_data: Array of breaking news items
29
+ - page.with_backtotop: Include back-to-top button (boolean)
30
+ - page.with_copyvalue: Include copy-to-clipboard behavior (boolean)
31
+ - page.with_heading_anchor: Include heading anchor copy behavior (boolean)
32
+ - page.theme_color, site.theme_color: Override browser chrome color (default: #A54C93)
27
33
  ================================================================================
28
34
  {% endcomment %}
29
35
 
30
36
  <head>
37
+ <meta charset="utf-8" />
38
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
39
+ <meta name="referrer" content="strict-origin-when-cross-origin" />
31
40
  {% if page.title == site.title -%}
32
41
  <title>{{ page.title }}</title>
33
42
  {% else -%}
34
43
  <title>{{ page.title }} - {{ site.title }}</title>
35
44
  {% endif -%}
36
- <meta charset="utf-8" />
37
- <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no" />
45
+ <meta name="description" content="{{ page.description | default: page.excerpt | default: page.title_lead | default: site.description | strip_html | truncate: 160 }}" />
38
46
  {% include base/ogp.html.liquid %}
39
47
  <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon-16.png" sizes="16x16" />
40
48
  <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon-32.png" sizes="32x32" />
41
- <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon.svg" sizes="any" />
49
+ <link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon.svg" type="image/svg+xml" sizes="any" />
42
50
  <link rel="apple-touch-icon" href="{{ site.baseurl }}/assets/icons/apple-touch-icon.png" sizes="180x180" />
43
51
  <link rel="manifest" href="{{ site.baseurl }}/site.webmanifest" />
44
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
52
+ {%- assign head_theme_color = page.theme_color | default: site.theme_color | default: '#A54C93' %}
53
+ <meta name="theme-color" content="{{ head_theme_color }}" />
45
54
  <link rel="preconnect" href="https://fonts.googleapis.com" />
46
- <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" />
47
- <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" />
55
+ <link rel="dns-prefetch" href="https://fonts.googleapis.com" />
56
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
57
+ <link rel="dns-prefetch" href="https://fonts.gstatic.com" />
58
+ {%- if page.with_fontawesome or page.with_highlight %}
59
+ <link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin />
60
+ <link rel="dns-prefetch" href="https://cdnjs.cloudflare.com" />
61
+ {%- endif %}
62
+ {%- if page.with_highlight or page.with_backtotop %}
63
+ <link rel="preconnect" href="https://unpkg.com" crossorigin />
64
+ <link rel="dns-prefetch" href="https://unpkg.com" />
65
+ {%- endif %}
66
+ {%- if page.with_datatable %}
67
+ <link rel="preconnect" href="https://cdn.datatables.net" crossorigin />
68
+ <link rel="dns-prefetch" href="https://cdn.datatables.net" />
69
+ {%- endif %}
70
+ <link rel="preload" href="{{ site.baseurl }}/assets/js/bootstrap.bundle.min.js" as="script" fetchpriority="high" />
71
+ <link rel="preload" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&family=Source+Code+Pro:ital,wght@0,400;0,700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'" />
72
+ <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&family=Source+Code+Pro:ital,wght@0,400;0,700&display=swap" /></noscript>
48
73
  <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/base/stylesheet.min.css" />
49
74
  {%- comment %}
50
75
  Dynamic Breaking News Offset CSS
@@ -87,7 +112,22 @@ Uses CSS custom properties for cleaner, more maintainable dynamic styling.
87
112
  }
88
113
  </style>
89
114
  {%- endif %}
90
- {% include base/fontawesome.html.liquid type="head" %}
91
- {% include base/highlight.html.liquid type="head" %}
92
- {% include base/datatable.html.liquid type="head" %}
115
+
116
+ {%- comment %} CSS dependencies {%- endcomment %}
117
+ {%- include base/highlight.html.liquid type="head" %}
118
+ {%- include base/datatable.html.liquid type="head" %}
119
+
120
+ {%- comment %} JavaScript base — Bootstrap must execute before all component scripts {%- endcomment %}
121
+ <script src="{{ site.baseurl }}/assets/js/bootstrap.bundle.min.js" defer></script>
122
+ <script src="{{ site.baseurl }}/assets/js/base/init-tooltips.min.js" defer></script>
123
+
124
+ {%- comment %} JavaScript optional library extensions {%- endcomment %}
125
+ {%- include base/fontawesome.html.liquid type="script" %}
126
+ {%- include base/highlight.html.liquid type="script" %}
127
+ {%- include base/datatable.html.liquid type="script" %}
128
+
129
+ {%- comment %} JavaScript UI behavior components — depend on Bootstrap and FontAwesome SVG+JS {%- endcomment %}
130
+ {%- include base/backtotop.html.liquid %}
131
+ {%- include base/copyvalue.html.liquid %}
132
+ {%- include base/heading_anchor.html.liquid %}
93
133
  </head>
@@ -6,8 +6,8 @@ icons that jekyll-link-decorator injects inside h1–h6 elements. Clicking an
6
6
  anchor icon copies the full page URL (origin + pathname + fragment) to the
7
7
  clipboard, with a transient fa-check icon as visual feedback.
8
8
 
9
- Recommended Usage (in partials/script.html.liquid or layout):
10
- {% include heading_anchor.html.liquid %}
9
+ Recommended Usage (in head.html.liquid):
10
+ {%- include base/heading_anchor.html.liquid %}
11
11
 
12
12
  The heading anchor icons themselves are injected by the jekyll-link-decorator
13
13
  Ruby plugin. This include only loads the JavaScript that powers copy behaviour.
@@ -55,8 +55,13 @@ jekyll-link-decorator gem, FontAwesome 6+, Clipboard API (modern browsers)
55
55
  {%- comment %} --- HTML --- {% endcomment %}
56
56
  <!-- Load Heading Anchor functionality with configuration via data attributes -->
57
57
  <script id="centos-heading-anchor"
58
+ {%- if with_heading_anchor_data.reset_delay %}
58
59
  data-reset-delay="{{ heading_anchor_reset_delay }}"
60
+ {%- endif %}
61
+ {%- if with_heading_anchor_data.copy_success_message %}
59
62
  data-success-message="{{ heading_anchor_success_message }}"
60
- src="{{ site.baseurl }}/assets/js/base/heading-anchor.min.js"></script>
63
+ {%- endif %}
64
+ src="{{ site.baseurl }}/assets/js/base/heading-anchor.min.js"
65
+ defer></script>
61
66
 
62
67
  {%- endif -%}
@@ -41,14 +41,19 @@ Data Source Hierarchy (priority):
41
41
 
42
42
  {%- if with_highlight %}
43
43
 
44
- {%- assign highlight_theme = with_highlight_data.theme | default: with_highlight_schema.theme.default %}
45
- {%- assign highlight_version = with_highlight_data.version | default: with_highlight_schema.version.default %}
46
- {%- assign copy_icon_svg = with_highlight_data.copy_button_icons.copy.svg | default: with_highlight_schema.copy_button_icons.properties.copy.properties.svg.default %}
47
- {%- assign success_icon_svg = with_highlight_data.copy_button_icons.success.svg | default: with_highlight_schema.copy_button_icons.properties.success.properties.svg.default %}
44
+ {%- assign highlight_theme = with_highlight_data.theme | default: with_highlight_schema.theme.default %}
45
+ {%- assign highlight_version = with_highlight_data.version | default: with_highlight_schema.version.default %}
46
+ {%- assign highlight_css_sri = with_highlight_data.css_integrity | default: with_highlight_schema.css_integrity.default %}
47
+ {%- assign highlight_script_sri = with_highlight_data.script_integrity | default: with_highlight_schema.script_integrity.default %}
48
+ {%- assign copy_version = with_highlight_data.copy_version | default: with_highlight_schema.copy_version.default %}
49
+ {%- assign copy_script_sri = with_highlight_data.copy_script_integrity | default: with_highlight_schema.copy_script_integrity.default %}
50
+ {%- assign copy_css_sri = with_highlight_data.copy_css_integrity | default: with_highlight_schema.copy_css_integrity.default %}
51
+ {%- assign copy_icon_svg = with_highlight_data.copy_button_icons.copy.svg | default: with_highlight_schema.copy_button_icons.properties.copy.properties.svg.default %}
52
+ {%- assign success_icon_svg = with_highlight_data.copy_button_icons.success.svg | default: with_highlight_schema.copy_button_icons.properties.success.properties.svg.default %}
48
53
 
49
54
  {%- capture html_highlight_head %}
50
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/styles/{{ highlight_theme | replace_first: 'base16-', 'base16/' | default: 'default' }}.min.css" />
51
- <link rel="stylesheet" href="https://unpkg.com/highlightjs-copy@1.0.6/dist/highlightjs-copy.min.css" />
55
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/styles/{{ highlight_theme | replace_first: 'base16-', 'base16/' | default: 'default' }}.min.css" integrity="{{ highlight_css_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
56
+ <link rel="stylesheet" href="https://unpkg.com/highlightjs-copy@{{ copy_version }}/dist/highlightjs-copy.min.css" integrity="{{ copy_css_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" />
52
57
  <!-- Highlight.js Copy Button Icon Customization (from schema) -->
53
58
  <style>
54
59
  .hljs-copy-button:not([data-copied="true"])::before {
@@ -62,10 +67,10 @@ Data Source Hierarchy (priority):
62
67
 
63
68
  {%- capture html_highlight_script %}
64
69
  <!-- Highlight.js Library and Copy Plugin -->
65
- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/highlight.min.js"></script>
66
- <script src="https://unpkg.com/highlightjs-copy@1.0.6/dist/highlightjs-copy.min.js"></script>
70
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/highlight.min.js" integrity="{{ highlight_script_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
71
+ <script src="https://unpkg.com/highlightjs-copy@{{ copy_version }}/dist/highlightjs-copy.min.js" integrity="{{ copy_script_sri }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
67
72
  <!-- Initialize Highlight.js -->
68
- <script src="{{ site.baseurl }}/assets/js/base/highlight.min.js"></script>
73
+ <script src="{{ site.baseurl }}/assets/js/base/highlight.min.js" defer></script>
69
74
  {%- endcapture %}
70
75
 
71
76
  {%- assign type = include.type %}
@@ -26,7 +26,7 @@ Data Source Hierarchy (priority):
26
26
  1. include.data
27
27
  2. page.with_navbar_data
28
28
  3. site.data.navbar
29
- 4. site.data.base.partials.navbar
29
+ 4. site.data.base.navbar
30
30
  ================================================================================
31
31
  {% endcomment %}
32
32
 
@@ -37,10 +37,10 @@ Data Source Hierarchy (priority):
37
37
  {%- assign with_navbar_data = include.data
38
38
  | default: page.with_navbar_data
39
39
  | default: site.data.navbar
40
- | default: site.data.base.partials.navbar
40
+ | default: site.data.base.navbar
41
41
  %}
42
42
 
43
- {%- assign with_navbar_schema = site.data.base.partials.navbar_schema.properties.with_navbar_data.properties %}
43
+ {%- assign with_navbar_schema = site.data.base.navbar_schema.properties.with_navbar_data.properties %}
44
44
 
45
45
  {%- if with_navbar %}
46
46
 
@@ -166,14 +166,14 @@ Data Object Properties:
166
166
  {%- for item in data %}
167
167
  {% comment %} Get component status from site configuration file {% endcomment %}
168
168
  {%- assign status_name = "with_" | append: item.component.name %}
169
- {%- assign status = site.defaults[0].values[status_name] %}
169
+ {%- assign status = site.defaults[1].values[status_name] %}
170
170
  {% comment %} Render component status {% endcomment %}
171
171
  {%- if status == true %}
172
172
  {%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is enabled globally and can be used on all site pages. It can be disabled either globally or at a page level."><i class="fa-solid fa-circle-check text-success"></i> Enabled</span>' %}
173
173
  {%- elsif status == false %}
174
174
  {%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is disabled globally and cannot be used in site pages. It can be enabled either globally or at a page level."><i class="fa-solid fa-circle-minus text-danger"></i> Disabled</span>' %}
175
175
  {%- else %}
176
- {%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is enabled globally and can be used on all site pages. It cannot be disabled."><i class="fa-solid fa-circle-dot text-warning"></i> Internal</span>' %}
176
+ {%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is enabled globally and can be used on all site pages. It cannot be disabled."><i class="fa-solid fa-gear"></i> Internal</span>' %}
177
177
  {%- endif %}
178
178
  {% comment %} Render table rows {% endcomment %}
179
179
  <tr>