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.
- checksums.yaml +7 -0
- data/_config.yml +196 -0
- data/_data/base/announcement_schema.yml +49 -0
- data/_data/base/artwork_schema.yml +46 -0
- data/_data/base/backtotop_schema.yml +59 -0
- data/_data/base/bits.yml +96 -0
- data/_data/base/bits_schema.yml +185 -0
- data/_data/base/breadcrumb_schema.yml +27 -0
- data/_data/base/breakingnews_schema.yml +67 -0
- data/_data/base/card_schema.yml +146 -0
- data/_data/base/color.yml +1042 -0
- data/_data/base/color_schema.yml +1036 -0
- data/_data/base/configuration_variables_schema.yml +42 -0
- data/_data/base/content.yml +2 -0
- data/_data/base/content_schema.yml +26 -0
- data/_data/base/copyright.yml +12 -0
- data/_data/base/copyright_schema.yml +74 -0
- data/_data/base/copyvalue_schema.yml +49 -0
- data/_data/base/datatable_schema.yml +57 -0
- data/_data/base/event_schema.yml +130 -0
- data/_data/base/fontawesome_schema.yml +62 -0
- data/_data/base/footer.yml +9 -0
- data/_data/base/footer_schema.yml +55 -0
- data/_data/base/head_schema.yml +19 -0
- data/_data/base/heading_anchor.yml +2 -0
- data/_data/base/heading_anchor_schema.yml +37 -0
- data/_data/base/highlight_schema.yml +98 -0
- data/_data/base/image_schema.yml +34 -0
- data/_data/base/languages.yml +186 -0
- data/_data/base/link_schema.yml +187 -0
- data/_data/base/locales_schema.yml +158 -0
- data/_data/base/navbar.yml +20 -0
- data/_data/base/navbar_schema.yml +129 -0
- data/_data/base/navindex_schema.yml +67 -0
- data/_data/base/ogp.yml +24 -0
- data/_data/base/ogp_schema.yml +192 -0
- data/_data/base/project.yml +37 -0
- data/_data/base/project_schema.yml +124 -0
- data/_data/base/script_schema.yml +41 -0
- data/_data/base/shortcut_schema.yml +74 -0
- data/_data/base/social.yml +26 -0
- data/_data/base/social_schema.yml +57 -0
- data/_data/base/sponsors.yml +41 -0
- data/_data/base/sponsors_schema.yml +73 -0
- data/_data/base/title_schema.yml +49 -0
- data/_data/base/toc_schema.yml +114 -0
- data/_data/download/cards.yml +309 -0
- data/_data/download/navbar.yml +11 -0
- data/_includes/base/announcement.html.liquid +65 -0
- data/_includes/base/artwork.html.liquid +63 -0
- data/_includes/base/backtotop.html.liquid +73 -0
- data/_includes/base/bits.html.liquid +152 -0
- data/_includes/base/breadcrumb.html.liquid +77 -0
- data/_includes/base/breakingnews.html.liquid +90 -0
- data/_includes/base/card.html.liquid +110 -0
- data/_includes/base/color-table.html.liquid +33 -0
- data/_includes/base/configuration_variables-nested.html.liquid +98 -0
- data/_includes/base/configuration_variables.html.liquid +98 -0
- data/_includes/base/content.html.liquid +7 -0
- data/_includes/base/copyright.html.liquid +70 -0
- data/_includes/base/copyvalue.html.liquid +82 -0
- data/_includes/base/datatable.html.liquid +83 -0
- data/_includes/base/event.html.liquid +105 -0
- data/_includes/base/fontawesome.html.liquid +91 -0
- data/_includes/base/footer.html.liquid +69 -0
- data/_includes/base/head.html.liquid +135 -0
- data/_includes/base/heading_anchor.html.liquid +67 -0
- data/_includes/base/highlight.html.liquid +84 -0
- data/_includes/base/image.html.liquid +42 -0
- data/_includes/base/link.html.liquid +129 -0
- data/_includes/base/locales.html.liquid +78 -0
- data/_includes/base/navbar.html.liquid +121 -0
- data/_includes/base/navindex.html.liquid +200 -0
- data/_includes/base/ogp.html.liquid +144 -0
- data/_includes/base/project.html.liquid +104 -0
- data/_includes/base/shortcut.html.liquid +77 -0
- data/_includes/base/social.html.liquid +76 -0
- data/_includes/base/sponsors-cards.html.liquid +69 -0
- data/_includes/base/sponsors-carousel.html.liquid +91 -0
- data/_includes/base/title.html.liquid +65 -0
- data/_includes/base/toc-generator.html.liquid +189 -0
- data/_includes/base/toc.html.liquid +95 -0
- data/_includes/download/cards-body-commands.html +7 -0
- data/_includes/download/cards-body-convert.html +10 -0
- data/_includes/download/cards-body-doc.html +9 -0
- data/_includes/download/cards-body-documentation.html +11 -0
- data/_includes/download/cards-body-eol.html +16 -0
- data/_includes/download/cards-body-mirrors.html +8 -0
- data/_includes/download/cards-body-screenshot.html +26 -0
- data/_includes/download/cards-body-screenshots.html +32 -0
- data/_includes/download/cards-body.html +8 -0
- data/_includes/download/cards-footer.html +3 -0
- data/_includes/download/cards-header-commands.html +8 -0
- data/_includes/download/cards-header-convert.html +8 -0
- data/_includes/download/cards-header-doc.html +8 -0
- data/_includes/download/cards-header-documentation.html +8 -0
- data/_includes/download/cards-header-eol.html +8 -0
- data/_includes/download/cards-header-mirrors.html +13 -0
- data/_includes/download/cards-header-screenshot.html +8 -0
- data/_includes/download/cards-header-screenshots.html +8 -0
- data/_includes/download/cards-header.html +13 -0
- data/_includes/download/cards.html +120 -0
- data/_layouts/base/default.html +68 -0
- data/_layouts/download/cards.html +7 -0
- data/_layouts/download/default.html +7 -0
- data/_layouts/people/default.html +68 -0
- data/_sass/base/_customization.scss +331 -0
- data/_sass/base/_light-dark.scss +10 -0
- data/_sass/base/_maps.scss +104 -0
- data/_sass/base/_variables.scss +232 -0
- data/_sass/bootstrap/_accordion.scss +153 -0
- data/_sass/bootstrap/_alert.scss +68 -0
- data/_sass/bootstrap/_badge.scss +38 -0
- data/_sass/bootstrap/_breadcrumb.scss +40 -0
- data/_sass/bootstrap/_button-group.scss +147 -0
- data/_sass/bootstrap/_buttons.scss +216 -0
- data/_sass/bootstrap/_card.scss +238 -0
- data/_sass/bootstrap/_carousel.scss +226 -0
- data/_sass/bootstrap/_close.scss +66 -0
- data/_sass/bootstrap/_containers.scss +41 -0
- data/_sass/bootstrap/_dropdown.scss +250 -0
- data/_sass/bootstrap/_forms.scss +9 -0
- data/_sass/bootstrap/_functions.scss +302 -0
- data/_sass/bootstrap/_grid.scss +39 -0
- data/_sass/bootstrap/_helpers.scss +12 -0
- data/_sass/bootstrap/_images.scss +42 -0
- data/_sass/bootstrap/_list-group.scss +199 -0
- data/_sass/bootstrap/_maps.scss +174 -0
- data/_sass/bootstrap/_mixins.scss +42 -0
- data/_sass/bootstrap/_modal.scss +240 -0
- data/_sass/bootstrap/_nav.scss +197 -0
- data/_sass/bootstrap/_navbar.scss +289 -0
- data/_sass/bootstrap/_offcanvas.scss +147 -0
- data/_sass/bootstrap/_pagination.scss +109 -0
- data/_sass/bootstrap/_placeholders.scss +51 -0
- data/_sass/bootstrap/_popover.scss +196 -0
- data/_sass/bootstrap/_progress.scss +68 -0
- data/_sass/bootstrap/_reboot.scss +617 -0
- data/_sass/bootstrap/_root.scss +187 -0
- data/_sass/bootstrap/_spinners.scss +86 -0
- data/_sass/bootstrap/_tables.scss +171 -0
- data/_sass/bootstrap/_toasts.scss +73 -0
- data/_sass/bootstrap/_tooltip.scss +119 -0
- data/_sass/bootstrap/_transitions.scss +27 -0
- data/_sass/bootstrap/_type.scss +106 -0
- data/_sass/bootstrap/_utilities.scss +806 -0
- data/_sass/bootstrap/_variables-dark.scss +102 -0
- data/_sass/bootstrap/_variables.scss +1753 -0
- data/_sass/bootstrap/bootstrap-grid.scss +62 -0
- data/_sass/bootstrap/bootstrap-reboot.scss +10 -0
- data/_sass/bootstrap/bootstrap-utilities.scss +19 -0
- data/_sass/bootstrap/bootstrap.scss +52 -0
- data/_sass/bootstrap/forms/_floating-labels.scss +97 -0
- data/_sass/bootstrap/forms/_form-check.scss +189 -0
- data/_sass/bootstrap/forms/_form-control.scss +214 -0
- data/_sass/bootstrap/forms/_form-range.scss +91 -0
- data/_sass/bootstrap/forms/_form-select.scss +80 -0
- data/_sass/bootstrap/forms/_form-text.scss +11 -0
- data/_sass/bootstrap/forms/_input-group.scss +132 -0
- data/_sass/bootstrap/forms/_labels.scss +36 -0
- data/_sass/bootstrap/forms/_validation.scss +12 -0
- data/_sass/bootstrap/helpers/_clearfix.scss +3 -0
- data/_sass/bootstrap/helpers/_color-bg.scss +7 -0
- data/_sass/bootstrap/helpers/_colored-links.scss +30 -0
- data/_sass/bootstrap/helpers/_focus-ring.scss +5 -0
- data/_sass/bootstrap/helpers/_icon-link.scss +25 -0
- data/_sass/bootstrap/helpers/_position.scss +36 -0
- data/_sass/bootstrap/helpers/_ratio.scss +26 -0
- data/_sass/bootstrap/helpers/_stacks.scss +15 -0
- data/_sass/bootstrap/helpers/_stretched-link.scss +15 -0
- data/_sass/bootstrap/helpers/_text-truncation.scss +7 -0
- data/_sass/bootstrap/helpers/_visually-hidden.scss +8 -0
- data/_sass/bootstrap/helpers/_vr.scss +8 -0
- data/_sass/bootstrap/mixins/_alert.scss +18 -0
- data/_sass/bootstrap/mixins/_backdrop.scss +14 -0
- data/_sass/bootstrap/mixins/_banner.scss +7 -0
- data/_sass/bootstrap/mixins/_border-radius.scss +78 -0
- data/_sass/bootstrap/mixins/_box-shadow.scss +24 -0
- data/_sass/bootstrap/mixins/_breakpoints.scss +127 -0
- data/_sass/bootstrap/mixins/_buttons.scss +70 -0
- data/_sass/bootstrap/mixins/_caret.scss +69 -0
- data/_sass/bootstrap/mixins/_clearfix.scss +9 -0
- data/_sass/bootstrap/mixins/_color-mode.scss +21 -0
- data/_sass/bootstrap/mixins/_color-scheme.scss +7 -0
- data/_sass/bootstrap/mixins/_container.scss +11 -0
- data/_sass/bootstrap/mixins/_deprecate.scss +10 -0
- data/_sass/bootstrap/mixins/_forms.scss +163 -0
- data/_sass/bootstrap/mixins/_gradients.scss +47 -0
- data/_sass/bootstrap/mixins/_grid.scss +151 -0
- data/_sass/bootstrap/mixins/_image.scss +16 -0
- data/_sass/bootstrap/mixins/_list-group.scss +26 -0
- data/_sass/bootstrap/mixins/_lists.scss +7 -0
- data/_sass/bootstrap/mixins/_pagination.scss +10 -0
- data/_sass/bootstrap/mixins/_reset-text.scss +17 -0
- data/_sass/bootstrap/mixins/_resize.scss +6 -0
- data/_sass/bootstrap/mixins/_table-variants.scss +24 -0
- data/_sass/bootstrap/mixins/_text-truncate.scss +8 -0
- data/_sass/bootstrap/mixins/_transition.scss +26 -0
- data/_sass/bootstrap/mixins/_utilities.scss +97 -0
- data/_sass/bootstrap/mixins/_visually-hidden.scss +38 -0
- data/_sass/bootstrap/utilities/_api.scss +47 -0
- data/_sass/bootstrap/vendor/_rfs.scss +348 -0
- data/assets/css/base/stylesheet.min.scss +35 -0
- data/assets/icons/android-chrome-192.png +0 -0
- data/assets/icons/android-chrome-512.png +0 -0
- data/assets/icons/apple-touch-icon.png +0 -0
- data/assets/icons/favicon-16.png +0 -0
- data/assets/icons/favicon-32.png +0 -0
- data/assets/icons/favicon.ico +0 -0
- data/assets/icons/favicon.svg +1 -0
- data/assets/img/anaconda-symbolic.svg +1 -0
- data/assets/img/anaconda.svg +1 -0
- data/assets/img/base/centos-colors.gpl +55 -0
- data/assets/img/base/example-ogp-image.svg +297 -0
- data/assets/img/base/example-sponsors-design.svg +226 -0
- data/assets/img/base/example-sponsors-logo-1.svg +120 -0
- data/assets/img/base/example-sponsors-logo-2.svg +116 -0
- data/assets/img/base/example-sponsors-logo-3.svg +123 -0
- data/assets/img/base/example-sponsors-logo-4.svg +116 -0
- data/assets/img/base/example-sponsors-logo-5.svg +116 -0
- data/assets/img/base/example-sponsors-logo-6.svg +116 -0
- data/assets/img/base/example-sponsors-logo-7.svg +116 -0
- data/assets/img/base/example-sponsors-logo-8.svg +110 -0
- data/assets/img/base/page-layout-default.svg +1217 -0
- data/assets/img/base/page-with-alert.svg +383 -0
- data/assets/img/base/page-with-announcement.svg +956 -0
- data/assets/img/base/page-with-artwork.svg +1009 -0
- data/assets/img/base/page-with-backtotop.svg +1009 -0
- data/assets/img/base/page-with-bits.svg +891 -0
- data/assets/img/base/page-with-breadcrumb.svg +676 -0
- data/assets/img/base/page-with-breakingnews.svg +957 -0
- data/assets/img/base/page-with-color.svg +57 -0
- data/assets/img/base/page-with-copyright.svg +1018 -0
- data/assets/img/base/page-with-copyvalue.svg +57 -0
- data/assets/img/base/page-with-datatable.svg +857 -0
- data/assets/img/base/page-with-event.svg +518 -0
- data/assets/img/base/page-with-fontawesome.svg +147 -0
- data/assets/img/base/page-with-footer.svg +1018 -0
- data/assets/img/base/page-with-heading.svg +57 -0
- data/assets/img/base/page-with-highlight.svg +86 -0
- data/assets/img/base/page-with-image.svg +57 -0
- data/assets/img/base/page-with-link.svg +57 -0
- data/assets/img/base/page-with-locales.svg +1009 -0
- data/assets/img/base/page-with-navbar.svg +958 -0
- data/assets/img/base/page-with-navindex.svg +279 -0
- data/assets/img/base/page-with-ogp.svg +401 -0
- data/assets/img/base/page-with-project.svg +423 -0
- data/assets/img/base/page-with-shortcut.svg +937 -0
- data/assets/img/base/page-with-social.svg +937 -0
- data/assets/img/base/page-with-sponsors.svg +937 -0
- data/assets/img/base/page-with-title.svg +584 -0
- data/assets/img/base/page-with-toc.svg +399 -0
- data/assets/img/base/screenshot-1200x600.svg +114 -0
- data/assets/img/centos-dynamicmsg-logo.svg +1 -0
- data/assets/img/centos-dynamicmsg-type.svg +1 -0
- data/assets/img/centos-dynamicmsg-whitelogo.svg +1 -0
- data/assets/img/centos-dynamicmsg-whitetype.svg +1 -0
- data/assets/img/centos-gdm-whitelogo.svg +1 -0
- data/assets/img/centos-ipa-whiteheader.svg +1 -0
- data/assets/img/centos-logo-2bits.svg +1 -0
- data/assets/img/centos-logo.svg +1 -0
- data/assets/img/centos-message-logo.svg +1 -0
- data/assets/img/centos-motif.png +0 -0
- data/assets/img/centos-poweredby-logo.svg +1 -0
- data/assets/img/centos-social-share.png +0 -0
- data/assets/img/centos-symbol-2bits.svg +1 -0
- data/assets/img/centos-symbol.svg +1 -0
- data/assets/img/centos-type.svg +1 -0
- data/assets/img/centos-vertical-logo.svg +1 -0
- data/assets/img/centos-vertical-message-logo.svg +1 -0
- data/assets/img/centos-whitelogo.svg +1 -0
- data/assets/img/download/centos-linux-7-2009-screenshot-n.png +0 -0
- data/assets/img/download/centos-stream-8-screenshot-n.png +0 -0
- data/assets/img/download/centos-stream-9-screenshot-n.png +0 -0
- data/assets/img/download/distribution-release-screenshot-1.png +0 -0
- data/assets/img/download/distribution-release-screenshot-2.png +0 -0
- data/assets/img/download/distribution-release-screenshot-3.png +0 -0
- data/assets/img/download/distribution-release-screenshot-n.png +0 -0
- data/assets/img/download/distribution-release-screenshot-n.svg +134 -0
- data/assets/img/download/download.svg +421 -0
- data/assets/img/download/fig-the-downloads-cards-presentation-template.png +0 -0
- data/assets/img/people/page.svg +900 -0
- data/assets/img/people/page.webp +0 -0
- data/assets/img/people/username.webp +0 -0
- data/assets/js/base/backtotop.js +20 -0
- data/assets/js/base/copyvalue.js +145 -0
- data/assets/js/base/datatable.js +41 -0
- data/assets/js/base/heading-anchor.js +108 -0
- data/assets/js/base/highlight.js +12 -0
- data/assets/js/base/init-tooltips.js +12 -0
- data/assets/js/bootstrap.bundle.js +6312 -0
- data/assets/js/bootstrap.bundle.js.map +1 -0
- data/assets/js/bootstrap.bundle.min.js +7 -0
- data/assets/js/bootstrap.bundle.min.js.map +1 -0
- data/assets/js/bootstrap.esm.js +4447 -0
- data/assets/js/bootstrap.esm.js.map +1 -0
- data/assets/js/bootstrap.esm.min.js +7 -0
- data/assets/js/bootstrap.esm.min.js.map +1 -0
- data/assets/js/bootstrap.js +4494 -0
- data/assets/js/bootstrap.js.map +1 -0
- data/assets/js/bootstrap.min.js +7 -0
- data/assets/js/bootstrap.min.js.map +1 -0
- data/site.webmanifest +11 -0
- metadata +611 -0
|
@@ -0,0 +1,70 @@
|
|
|
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 with_copyright = include.with_copyright
|
|
35
|
+
| default: page.with_copyright
|
|
36
|
+
%}
|
|
37
|
+
|
|
38
|
+
{%- assign with_copyright_data = include.data
|
|
39
|
+
| default: page.with_copyright_data
|
|
40
|
+
| default: site.data.copyright
|
|
41
|
+
| default: site.data.base.copyright
|
|
42
|
+
%}
|
|
43
|
+
|
|
44
|
+
{%- assign with_copyright_schema = site.data.base.copyright_schema.properties.with_copyright_data.properties %}
|
|
45
|
+
|
|
46
|
+
{%- if with_copyright %}
|
|
47
|
+
|
|
48
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
49
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
50
|
+
{%- assign copyright_author = with_copyright_data.author | default: with_copyright_schema.author.default %}
|
|
51
|
+
{%- assign copyright_legals = with_copyright_data.legals | default: with_copyright_schema.legals.default %}
|
|
52
|
+
|
|
53
|
+
{%- capture copyright_links -%}
|
|
54
|
+
{%- for item in copyright_legals -%}
|
|
55
|
+
{%- 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" %}
|
|
56
|
+
{%- include base/link.html.liquid
|
|
57
|
+
class = copyright_link_class
|
|
58
|
+
name = item.name
|
|
59
|
+
link = item.link
|
|
60
|
+
color = item.color
|
|
61
|
+
role = item.role
|
|
62
|
+
icon = item.icon
|
|
63
|
+
icon_position = item.icon_position
|
|
64
|
+
-%}
|
|
65
|
+
{%- endfor -%}
|
|
66
|
+
{%- endcapture -%}
|
|
67
|
+
|
|
68
|
+
{%- comment %} --- HTML --- {% endcomment %}
|
|
69
|
+
<p class="my-1">Copyright © {{ site.time | date: "%Y" }} {{ copyright_author }} {{ copyright_links }}</p>
|
|
70
|
+
{%- endif -%}
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
<span role="button" 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
|
+
</span>
|
|
13
|
+
|
|
14
|
+
Strategic Design Logic:
|
|
15
|
+
- Armored implementation: handles escaped and unescaped values
|
|
16
|
+
- HTML entity detection: decodes ", &, ' 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 with_copyvalue = include.with_copyvalue
|
|
43
|
+
| default: page.with_copyvalue
|
|
44
|
+
%}
|
|
45
|
+
|
|
46
|
+
{%- assign with_copyvalue_data = include.data
|
|
47
|
+
| default: page.with_copyvalue_data
|
|
48
|
+
| default: site.data.copyvalue
|
|
49
|
+
| default: site.data.base.copyvalue
|
|
50
|
+
%}
|
|
51
|
+
|
|
52
|
+
{%- assign with_copyvalue_schema = site.data.base.copyvalue_schema.properties.with_copyvalue_data.properties %}
|
|
53
|
+
|
|
54
|
+
{%- if with_copyvalue %}
|
|
55
|
+
|
|
56
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
57
|
+
|
|
58
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
59
|
+
{%- assign copyvalue_reset_delay = with_copyvalue_data.reset_delay | default: with_copyvalue_schema.reset_delay.default %}
|
|
60
|
+
{%- assign copyvalue_checkmark_path = with_copyvalue_data.checkmark_path | default: with_copyvalue_schema.checkmark_path.default %}
|
|
61
|
+
{%- assign copyvalue_checkmark_viewbox = with_copyvalue_data.checkmark_viewbox | default: with_copyvalue_schema.checkmark_viewbox.default %}
|
|
62
|
+
{%- assign copyvalue_success_message = with_copyvalue_data.success_message | default: with_copyvalue_schema.success_message.default %}
|
|
63
|
+
|
|
64
|
+
{%- comment %} --- HTML --- {% endcomment %}
|
|
65
|
+
<!-- Load Copy Value functionality with configuration via data attributes -->
|
|
66
|
+
<script id="centos-copyvalue"
|
|
67
|
+
{%- if with_copyvalue_data.reset_delay %}
|
|
68
|
+
data-reset-delay="{{ copyvalue_reset_delay }}"
|
|
69
|
+
{%- endif %}
|
|
70
|
+
{%- if with_copyvalue_data.checkmark_path %}
|
|
71
|
+
data-checkmark-path="{{ copyvalue_checkmark_path }}"
|
|
72
|
+
{%- endif %}
|
|
73
|
+
{%- if with_copyvalue_data.checkmark_viewbox %}
|
|
74
|
+
data-checkmark-viewbox="{{ copyvalue_checkmark_viewbox }}"
|
|
75
|
+
{%- endif %}
|
|
76
|
+
{%- if with_copyvalue_data.success_message %}
|
|
77
|
+
data-success-message="{{ copyvalue_success_message }}"
|
|
78
|
+
{%- endif %}
|
|
79
|
+
src="{{ site.baseurl }}/assets/js/base/copyvalue.min.js"
|
|
80
|
+
defer></script>
|
|
81
|
+
|
|
82
|
+
{%- endif %}
|
|
@@ -0,0 +1,83 @@
|
|
|
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 with_datatable = include.with_datatable
|
|
33
|
+
| default: page.with_datatable
|
|
34
|
+
%}
|
|
35
|
+
|
|
36
|
+
{%- assign with_datatable_data = include.data
|
|
37
|
+
| default: page.with_datatable_data
|
|
38
|
+
| default: site.data.datatable
|
|
39
|
+
| default: site.data.base.datatable
|
|
40
|
+
%}
|
|
41
|
+
|
|
42
|
+
{%- assign with_datatable_schema = site.data.base.datatable_schema.properties.with_datatable_data.properties %}
|
|
43
|
+
|
|
44
|
+
{%- if with_datatable %}
|
|
45
|
+
|
|
46
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
47
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
48
|
+
{%- assign datatable_version = with_datatable_data.version | default: with_datatable_schema.version.default %}
|
|
49
|
+
{%- assign datatable_css_integrity = with_datatable_data.css_integrity | default: with_datatable_schema.css_integrity.default %}
|
|
50
|
+
{%- assign datatable_script_integrity = with_datatable_data.script_integrity | default: with_datatable_schema.script_integrity.default %}
|
|
51
|
+
{%- assign datatable_page_length = with_datatable_data.page_length | default: with_datatable_schema.page_length.default %}
|
|
52
|
+
{%- assign datatable_length_menu = with_datatable_data.length_menu | default: with_datatable_schema.length_menu.default %}
|
|
53
|
+
|
|
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" referrerpolicy="no-referrer" />
|
|
56
|
+
{%- endcapture %}
|
|
57
|
+
|
|
58
|
+
{%- capture html_datatable_script %}
|
|
59
|
+
<!-- DataTables Library -->
|
|
60
|
+
<script src="https://cdn.datatables.net/{{ datatable_version }}/datatables.min.js" integrity="{{ datatable_script_integrity }}" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
|
|
61
|
+
|
|
62
|
+
<!-- Initialize DataTables with configuration via data attributes -->
|
|
63
|
+
<script id="centos-datatable"
|
|
64
|
+
{%- if with_datatable_data.page_length %}
|
|
65
|
+
data-page-length="{{ datatable_page_length }}"
|
|
66
|
+
{%- endif %}
|
|
67
|
+
{%- if with_datatable_data.length_menu %}
|
|
68
|
+
data-length-menu='{{ datatable_length_menu | split: "," | jsonify }}'
|
|
69
|
+
{%- endif %}
|
|
70
|
+
src="{{ site.baseurl }}/assets/js/base/datatable.min.js"
|
|
71
|
+
defer></script>
|
|
72
|
+
{%- endcapture %}
|
|
73
|
+
|
|
74
|
+
{%- comment %} --- HTML --- {% endcomment %}
|
|
75
|
+
{%- assign type = include.type %}
|
|
76
|
+
{%- case type %}
|
|
77
|
+
{%- when "head" %}
|
|
78
|
+
{{ html_datatable_head }}
|
|
79
|
+
{%- when "script" %}
|
|
80
|
+
{{ html_datatable_script }}
|
|
81
|
+
{%- endcase %}
|
|
82
|
+
|
|
83
|
+
{%- endif %}
|
|
@@ -0,0 +1,105 @@
|
|
|
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 with_event = include.with_event
|
|
38
|
+
| default: page.with_event
|
|
39
|
+
%}
|
|
40
|
+
|
|
41
|
+
{%- assign with_event_data = include.data
|
|
42
|
+
| default: page.with_event_data
|
|
43
|
+
| default: site.data.event
|
|
44
|
+
| default: site.data.base.event
|
|
45
|
+
%}
|
|
46
|
+
|
|
47
|
+
{%- if with_event %}
|
|
48
|
+
|
|
49
|
+
{%- assign with_event_schema = site.data.base.event_schema.properties.with_event_data.items.properties %}
|
|
50
|
+
|
|
51
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
52
|
+
{%- if with_event_data.size > 0 %}
|
|
53
|
+
<div class="mb-3">
|
|
54
|
+
{%- for event in with_event_data %}
|
|
55
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
56
|
+
{%- assign event_address = event.address | default: with_event_schema.address.default %}
|
|
57
|
+
{%- assign event_city = event.city | default: with_event_schema.city.default %}
|
|
58
|
+
{%- assign event_color = event.color | default: with_event_schema.color.default %}
|
|
59
|
+
{%- assign event_location = event.location | default: with_event_schema.location.default %}
|
|
60
|
+
{%- assign event_date = event.date | default: with_event_schema.date.default %}
|
|
61
|
+
{%- assign event_description = event.description | default: with_event_schema.description.default %}
|
|
62
|
+
{%- assign event_icon = event.icon | default: with_event_schema.icon.default %}
|
|
63
|
+
{%- assign event_image_url = event.image_url | default: with_event_schema.image_url.default %}
|
|
64
|
+
{%- assign event_link = event.link | default: with_event_schema.link.default %}
|
|
65
|
+
{%- assign event_title = event.title | default: with_event_schema.title.default %}
|
|
66
|
+
|
|
67
|
+
{%- assign event_btn_class = "btn btn-sm text-nowrap btn-" | append: event_color %}
|
|
68
|
+
|
|
69
|
+
{%- comment %} --- HTML --- {% endcomment %}
|
|
70
|
+
<div class="alert alert-{{ event_color }} rounded mb-1" role="alert">
|
|
71
|
+
<div class="d-flex justify-content-between align-items-start">
|
|
72
|
+
{%- if event_icon != "" %}
|
|
73
|
+
<div class="h6 my-1 me-2"><i class="{{ event_icon }}"></i></div>
|
|
74
|
+
{%- endif %}
|
|
75
|
+
<div class="flex-fill text-start">
|
|
76
|
+
{%- if event_title != "" %}
|
|
77
|
+
<p class="ms-1 fw-bold mb-0">{{ event_title }}</p>
|
|
78
|
+
{%- endif %}
|
|
79
|
+
{%- if event_date != "" %}
|
|
80
|
+
<p class="ms-1 mb-0">{{ event_date }}{% if event_location != "" %} • {{ event_location }}{%- endif %}</p>
|
|
81
|
+
{%- endif %}
|
|
82
|
+
{%- if event_description != "" %}
|
|
83
|
+
<p class="ms-1 mb-0">{{ event_description }}</p>
|
|
84
|
+
{%- endif %}
|
|
85
|
+
</div>
|
|
86
|
+
{%- if event_link != "" %}
|
|
87
|
+
<div class="ms-1">
|
|
88
|
+
{% include base/link.html.liquid
|
|
89
|
+
name = "Know more"
|
|
90
|
+
icon = "fa-solid fa-arrow-right"
|
|
91
|
+
icon_position = "end"
|
|
92
|
+
role = "button"
|
|
93
|
+
class = event_btn_class
|
|
94
|
+
color = event_color
|
|
95
|
+
link = event_link
|
|
96
|
+
%}
|
|
97
|
+
</div>
|
|
98
|
+
{%- endif %}
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
{% endfor %}
|
|
102
|
+
</div>
|
|
103
|
+
{%- endif %}
|
|
104
|
+
|
|
105
|
+
{%- endif -%}
|
|
@@ -0,0 +1,91 @@
|
|
|
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
|
+
- Two loading modes: svg+js (default) and css
|
|
11
|
+
- svg+js: JavaScript bundle replaces <i> tags with inline SVGs via DOM mutation;
|
|
12
|
+
enables power transforms, layering, pseudo-element watching
|
|
13
|
+
- css: stylesheet + WOFF2 font files loaded on demand; lighter payload, no DOM cost
|
|
14
|
+
- Format switching: separate head (CSS link) and script (JS) includes; preload hints mode-aware
|
|
15
|
+
- Subresource Integrity (SRI): ensures file hasn't been tampered with
|
|
16
|
+
- Privacy-focused: referrerpolicy="no-referrer"
|
|
17
|
+
|
|
18
|
+
Optional Inputs:
|
|
19
|
+
- type: "preload" for resource hint, "head" for CSS link, "script" for JavaScript
|
|
20
|
+
- mode: "svg+js" (default) or "css" — controls which assets are emitted per type
|
|
21
|
+
- version: Font Awesome version (e.g., "7.0.1")
|
|
22
|
+
- cdn: CDN base URL (default: cdnjs.cloudflare.com)
|
|
23
|
+
- css_bundle_name, js_bundle_name: Bundle identifiers
|
|
24
|
+
- css_bundle_integrity, js_bundle_integrity: SRI hashes
|
|
25
|
+
- data: Font Awesome configuration object
|
|
26
|
+
|
|
27
|
+
Data Source Hierarchy (priority):
|
|
28
|
+
1. include.data
|
|
29
|
+
2. page.with_fontawesome_data
|
|
30
|
+
3. site.data.fontawesome
|
|
31
|
+
4. site.data.base.fontawesome
|
|
32
|
+
================================================================================
|
|
33
|
+
{% endcomment %}
|
|
34
|
+
|
|
35
|
+
{%- assign with_fontawesome = include.with_fontawesome
|
|
36
|
+
| default: page.with_fontawesome
|
|
37
|
+
%}
|
|
38
|
+
|
|
39
|
+
{%- assign with_fontawesome_data = include.data
|
|
40
|
+
| default: page.with_fontawesome_data
|
|
41
|
+
| default: site.data.fontawesome
|
|
42
|
+
| default: site.data.base.fontawesome
|
|
43
|
+
%}
|
|
44
|
+
|
|
45
|
+
{%- assign with_fontawesome_schema = site.data.base.fontawesome_schema.properties.with_fontawesome_data.properties %}
|
|
46
|
+
|
|
47
|
+
{%- if with_fontawesome %}
|
|
48
|
+
|
|
49
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
50
|
+
|
|
51
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
52
|
+
{%- assign fontawesome_version = with_fontawesome_data.version | default: with_fontawesome_schema.version.default %}
|
|
53
|
+
{%- assign fontawesome_cdn = with_fontawesome_data.cdn | default: with_fontawesome_schema.cdn.default %}
|
|
54
|
+
{%- assign fontawesome_css_bundle_name = with_fontawesome_data.css_bundle_name | default: with_fontawesome_schema.css_bundle_name.default %}
|
|
55
|
+
{%- assign fontawesome_css_bundle_integrity = with_fontawesome_data.css_bundle_integrity | default: with_fontawesome_schema.css_bundle_integrity.default %}
|
|
56
|
+
{%- assign fontawesome_js_bundle_name = with_fontawesome_data.js_bundle_name | default: with_fontawesome_schema.js_bundle_name.default %}
|
|
57
|
+
{%- assign fontawesome_js_bundle_integrity = with_fontawesome_data.js_bundle_integrity | default: with_fontawesome_schema.js_bundle_integrity.default %}
|
|
58
|
+
{%- assign fontawesome_mode = with_fontawesome_data.mode | default: with_fontawesome_schema.mode.default | default: "svg+js" %}
|
|
59
|
+
|
|
60
|
+
{%- capture html_fontawesome_preload %}
|
|
61
|
+
{%- if fontawesome_mode == "css" %}
|
|
62
|
+
<link rel="preload" href="{{ fontawesome_cdn }}/{{ fontawesome_version }}/css/{{ fontawesome_css_bundle_name }}.min.css" as="style" fetchpriority="high" crossorigin="anonymous" />
|
|
63
|
+
{%- else %}
|
|
64
|
+
<link rel="preload" href="{{ fontawesome_cdn }}/{{ fontawesome_version }}/js/{{ fontawesome_js_bundle_name }}.min.js" as="script" fetchpriority="high" crossorigin="anonymous" />
|
|
65
|
+
{%- endif %}
|
|
66
|
+
{%- endcapture %}
|
|
67
|
+
|
|
68
|
+
{%- capture html_fontawesome_head %}
|
|
69
|
+
{%- if fontawesome_mode == "css" %}
|
|
70
|
+
<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" />
|
|
71
|
+
{%- endif %}
|
|
72
|
+
{%- endcapture %}
|
|
73
|
+
|
|
74
|
+
{%- capture html_fontawesome_script %}
|
|
75
|
+
{%- if fontawesome_mode == "svg+js" %}
|
|
76
|
+
<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>
|
|
77
|
+
{%- endif %}
|
|
78
|
+
{%- endcapture %}
|
|
79
|
+
|
|
80
|
+
{%- comment %} --- HTML --- {% endcomment %}
|
|
81
|
+
{%- assign type = include.type %}
|
|
82
|
+
{%- case type %}
|
|
83
|
+
{%- when "preload" %}
|
|
84
|
+
{{ html_fontawesome_preload }}
|
|
85
|
+
{%- when "head" %}
|
|
86
|
+
{{ html_fontawesome_head }}
|
|
87
|
+
{%- when "script" %}
|
|
88
|
+
{{ html_fontawesome_script }}
|
|
89
|
+
{%- endcase %}
|
|
90
|
+
|
|
91
|
+
{% endif %}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{%- assign with_footer = include.with_footer
|
|
2
|
+
| default: page.with_footer
|
|
3
|
+
%}
|
|
4
|
+
|
|
5
|
+
{%- assign with_footer_data = include.data
|
|
6
|
+
| default: page.with_footer_data
|
|
7
|
+
| default: site.data.footer
|
|
8
|
+
| default: site.data.base.footer
|
|
9
|
+
%}
|
|
10
|
+
|
|
11
|
+
{%- if with_footer -%}
|
|
12
|
+
|
|
13
|
+
{%- assign with_footer_schema = site.data.base.footer_schema.properties.with_footer_data.properties %}
|
|
14
|
+
|
|
15
|
+
{%- assign footer_brand_image = with_footer_data.brand_image | default: with_footer_schema.brand_image.default %}
|
|
16
|
+
{%- assign footer_brand_image_class = with_footer_data.brand_image_class | default: with_footer_schema.brand_image_class.default %}
|
|
17
|
+
{%- assign footer_brand_image_height = with_footer_data.brand_image_height | default: with_footer_schema.brand_image_height.default %}
|
|
18
|
+
{%- assign footer_brand_manifestation = with_footer_data.brand_manifestation | default: with_footer_schema.brand_manifestation.default %}
|
|
19
|
+
{%- assign footer_brand_manifestation_class = with_footer_data.brand_manifestation_class | default: with_footer_schema.brand_manifestation_class.default %}
|
|
20
|
+
|
|
21
|
+
<div class="container">
|
|
22
|
+
<div class="row justify-content-between align-items-start gx-5">
|
|
23
|
+
<div class="col-sm-12 col-lg-4">
|
|
24
|
+
{%- if footer_brand_image != "" %}
|
|
25
|
+
<a class="navbar-brand" href="{{ site.baseurl }}/">
|
|
26
|
+
<img
|
|
27
|
+
class="d-inline-block align-text-middle me-2{% if footer_brand_image_class != "" %} {{ footer_brand_image_class }}{% endif %}"
|
|
28
|
+
src="{{ site.baseurl }}/assets/img/{{ footer_brand_image }}"
|
|
29
|
+
height="{{ footer_brand_image_height }}"
|
|
30
|
+
alt="{{ site.title }}" />
|
|
31
|
+
{%- if footer_brand_manifestation != "" %}
|
|
32
|
+
<span class="d-inline-block align-text-middle fs-6 border-start border-1 border-light opacity-75 ps-3{% if footer_brand_manifestation_class != "" %} {{ footer_brand_manifestation_class }}{% endif %}">{{ footer_brand_manifestation }}</span>
|
|
33
|
+
{%- endif %}
|
|
34
|
+
</a>
|
|
35
|
+
{%- endif %}
|
|
36
|
+
{% if site.description %}
|
|
37
|
+
<p class="mt-2 mb-5">{{ site.description }}</p>
|
|
38
|
+
{% endif %}
|
|
39
|
+
|
|
40
|
+
{% include base/sponsors-carousel.html.liquid -%}
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
{% if page.with_shortcut %}
|
|
44
|
+
<div class="col-sm-12 col-lg-5">
|
|
45
|
+
{% include base/shortcut.html.liquid %}
|
|
46
|
+
</div>
|
|
47
|
+
{% endif %}
|
|
48
|
+
|
|
49
|
+
{% if page.with_locales or page.with_social %}
|
|
50
|
+
<div class="col-sm-12 col-lg-3 pb-5">
|
|
51
|
+
{% include base/locales.html.liquid %}
|
|
52
|
+
{% include base/social.html.liquid %}
|
|
53
|
+
</div>
|
|
54
|
+
{% endif %}
|
|
55
|
+
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
{% if page.with_copyright %}
|
|
60
|
+
<div class="container">
|
|
61
|
+
<div class="row justify-content-between align-items-center py-3">
|
|
62
|
+
<div class="col">
|
|
63
|
+
{% include base/copyright.html.liquid %}
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
{% endif %}
|
|
68
|
+
|
|
69
|
+
{%- endif -%}
|
|
@@ -0,0 +1,135 @@
|
|
|
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, referrer policy, description, theme-color
|
|
10
|
+
- Dynamic title generation: page title + site title
|
|
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
|
+
- Breakingnews scroll offset: dynamic CSS calculation
|
|
14
|
+
- Conditional includes: OGP, Highlight.js, DataTables, FontAwesome (SVG+JS)
|
|
15
|
+
- CSS prioritization: custom stylesheet last for override
|
|
16
|
+
- Script loading: Bootstrap base first (defer), then optional extensions, then UI behaviors
|
|
17
|
+
- Bootstrap and FontAwesome preloaded (high-priority fetch); CDN origins preconnected + dns-prefetched per active component
|
|
18
|
+
|
|
19
|
+
Required Inputs:
|
|
20
|
+
- page.title: Current page title
|
|
21
|
+
- site.title: Site name/title
|
|
22
|
+
- site.baseurl: Base URL for asset paths
|
|
23
|
+
|
|
24
|
+
Optional Inputs:
|
|
25
|
+
- page.with_ogp, page.with_fontawesome: Include OGP/Font Awesome SVG+JS (boolean)
|
|
26
|
+
- page.with_breakingnews, page.with_highlight: Include breaking news/highlight
|
|
27
|
+
- page.with_datatable: Include DataTables (boolean)
|
|
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)
|
|
33
|
+
================================================================================
|
|
34
|
+
{% endcomment %}
|
|
35
|
+
|
|
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" />
|
|
40
|
+
{% if page.title == site.title -%}
|
|
41
|
+
<title>{{ page.title }}</title>
|
|
42
|
+
{% else -%}
|
|
43
|
+
<title>{{ page.title }} - {{ site.title }}</title>
|
|
44
|
+
{% endif -%}
|
|
45
|
+
<meta name="description" content="{{ page.description | default: page.excerpt | default: page.title_lead | default: site.description | strip_html | truncate: 160 }}" />
|
|
46
|
+
{% include base/ogp.html.liquid %}
|
|
47
|
+
<link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon-16.png" sizes="16x16" />
|
|
48
|
+
<link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon-32.png" sizes="32x32" />
|
|
49
|
+
<link rel="icon" href="{{ site.baseurl }}/assets/icons/favicon.svg" type="image/svg+xml" sizes="any" />
|
|
50
|
+
<link rel="apple-touch-icon" href="{{ site.baseurl }}/assets/icons/apple-touch-icon.png" sizes="180x180" />
|
|
51
|
+
<link rel="manifest" href="{{ site.baseurl }}/site.webmanifest" />
|
|
52
|
+
{%- assign head_theme_color = page.theme_color | default: site.theme_color | default: '#A54C93' %}
|
|
53
|
+
<meta name="theme-color" content="{{ head_theme_color }}" />
|
|
54
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
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
|
+
{%- include base/fontawesome.html.liquid type="preload" %}
|
|
72
|
+
<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'" />
|
|
73
|
+
<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>
|
|
74
|
+
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/base/stylesheet.min.css" />
|
|
75
|
+
{%- comment %}
|
|
76
|
+
Dynamic Breaking News Offset CSS
|
|
77
|
+
Adjust scroll-margin-top values based on the number of breaking news items.
|
|
78
|
+
Uses CSS custom properties for cleaner, more maintainable dynamic styling.
|
|
79
|
+
{%- endcomment %}
|
|
80
|
+
{%- assign breakingnews = page.with_breakingnews_data | default: site.data.breakingnews | default: site.data.base.breakingnews %}
|
|
81
|
+
{%- if page.with_breakingnews == true and breakingnews.size > 0 %}
|
|
82
|
+
{%- assign breakingnews_alert_height = site.data.base.breakingnews_schema.properties.breakingnews_alert_height.default %}
|
|
83
|
+
{%- assign navbar_height = site.data.base.navbar_schema.properties.navbar_height.default %}
|
|
84
|
+
{%- assign breakingnews_offset = 0 %}
|
|
85
|
+
{%- for item in breakingnews %}
|
|
86
|
+
{%- if forloop.first %}
|
|
87
|
+
{%- assign breakingnews_offset = breakingnews_alert_height | plus: navbar_height %}
|
|
88
|
+
{%- else %}
|
|
89
|
+
{%- assign breakingnews_offset = breakingnews_offset | plus: breakingnews_alert_height %}
|
|
90
|
+
{%- endif %}
|
|
91
|
+
{%- endfor %}
|
|
92
|
+
{%- assign heading_margin_px = 48 %}
|
|
93
|
+
{%- assign heading_scroll_margin_height = breakingnews_offset | plus: heading_margin_px %}
|
|
94
|
+
{%- assign accordion_scroll_margin_height = breakingnews_offset %}
|
|
95
|
+
<style>
|
|
96
|
+
:root {
|
|
97
|
+
--calculated-heading-offset: {{ heading_scroll_margin_height }}px;
|
|
98
|
+
--calculated-accordion-offset: {{ accordion_scroll_margin_height }}px;
|
|
99
|
+
}
|
|
100
|
+
main {
|
|
101
|
+
.content > h1,
|
|
102
|
+
.content > h2,
|
|
103
|
+
.content > h3,
|
|
104
|
+
.content > h4,
|
|
105
|
+
.content > h5,
|
|
106
|
+
.content > h6 {
|
|
107
|
+
scroll-margin-top: calc(var(--calculated-heading-offset) * 1.3) !important;
|
|
108
|
+
}
|
|
109
|
+
.content .accordion,
|
|
110
|
+
.content .accordion-item {
|
|
111
|
+
scroll-margin-top: calc(var(--calculated-accordion-offset) * 1.5) !important;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
</style>
|
|
115
|
+
{%- endif %}
|
|
116
|
+
|
|
117
|
+
{%- comment %} CSS dependencies {%- endcomment %}
|
|
118
|
+
{%- include base/fontawesome.html.liquid type="head" %}
|
|
119
|
+
{%- include base/highlight.html.liquid type="head" %}
|
|
120
|
+
{%- include base/datatable.html.liquid type="head" %}
|
|
121
|
+
|
|
122
|
+
{%- comment %} JavaScript base — Bootstrap must execute before all component scripts {%- endcomment %}
|
|
123
|
+
<script src="{{ site.baseurl }}/assets/js/bootstrap.bundle.min.js" defer></script>
|
|
124
|
+
<script src="{{ site.baseurl }}/assets/js/base/init-tooltips.min.js" defer></script>
|
|
125
|
+
|
|
126
|
+
{%- comment %} JavaScript optional library extensions {%- endcomment %}
|
|
127
|
+
{%- include base/fontawesome.html.liquid type="script" %}
|
|
128
|
+
{%- include base/highlight.html.liquid type="script" %}
|
|
129
|
+
{%- include base/datatable.html.liquid type="script" %}
|
|
130
|
+
|
|
131
|
+
{%- comment %} JavaScript UI behavior components — depend on Bootstrap and FontAwesome SVG+JS {%- endcomment %}
|
|
132
|
+
{%- include base/backtotop.html.liquid %}
|
|
133
|
+
{%- include base/copyvalue.html.liquid %}
|
|
134
|
+
{%- include base/heading_anchor.html.liquid %}
|
|
135
|
+
</head>
|