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,200 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Navigation Index Component
|
|
4
|
+
Purpose: Renders a collection of pages or components in multiple display formats.
|
|
5
|
+
Provides flexible list/card/table views for indexes and inventories.
|
|
6
|
+
Automatically filters data by current page locale to avoid duplicates.
|
|
7
|
+
================================================================================
|
|
8
|
+
|
|
9
|
+
Design Logic:
|
|
10
|
+
- Multi-format output: card, text, list, table, component_table (default: list)
|
|
11
|
+
- Filters data by locale: shows canonical pages for English, localized variants for other locales
|
|
12
|
+
- Filters out current page from results (prevents self-linking)
|
|
13
|
+
- Reusable link component for consistent styling
|
|
14
|
+
- Optional filename display using page name (with .md stripped)
|
|
15
|
+
- Component table with status indicators from site.defaults
|
|
16
|
+
- DataTables integration for searchable/sortable table output
|
|
17
|
+
|
|
18
|
+
Required Inputs:
|
|
19
|
+
- data: Array of page or component objects to display
|
|
20
|
+
|
|
21
|
+
Optional Inputs:
|
|
22
|
+
- format: Output format: 'card' | 'text' | 'list' | 'table' | 'component_table'
|
|
23
|
+
- show_page_filename: Display page filename instead of title (true/false)
|
|
24
|
+
|
|
25
|
+
Data Object Properties:
|
|
26
|
+
- name, title, url, title_lead: Common properties
|
|
27
|
+
- component.name: Component identifier (for component_table format)
|
|
28
|
+
- locale: Locale code for localized pages (set by localization plugin)
|
|
29
|
+
================================================================================
|
|
30
|
+
{% endcomment %}
|
|
31
|
+
|
|
32
|
+
{%- assign with_navindex = include.with_navindex
|
|
33
|
+
| default: page.with_navindex
|
|
34
|
+
%}
|
|
35
|
+
|
|
36
|
+
{%- assign with_navindex_data = include.data
|
|
37
|
+
| default: page.with_navindex_data
|
|
38
|
+
| default: site.data.navindex
|
|
39
|
+
| default: site.data.base.navindex
|
|
40
|
+
%}
|
|
41
|
+
|
|
42
|
+
{%- assign with_navindex_schema = site.data.base.navindex_schema.properties.with_navindex_data.properties %}
|
|
43
|
+
|
|
44
|
+
{% assign data = include.data | default: with_navindex_schema.data.default %}
|
|
45
|
+
{% assign format = include.format | default: with_navindex_schema.format.default %}
|
|
46
|
+
|
|
47
|
+
{%- comment %} Filter data by locale to show only matching language pages {%- endcomment %}
|
|
48
|
+
{%- assign current_locale = page.locale | default: 'en' %}
|
|
49
|
+
{%- assign filtered_data = '' | split: '' %}
|
|
50
|
+
|
|
51
|
+
{%- for item in data %}
|
|
52
|
+
{%- assign item_locale = item.locale | default: 'en' %}
|
|
53
|
+
|
|
54
|
+
{%- if current_locale == 'en' %}
|
|
55
|
+
{%- comment %} For English pages, show only canonical pages (not localized variants) {%- endcomment %}
|
|
56
|
+
{%- if item.localized != true %}
|
|
57
|
+
{%- assign filtered_data = filtered_data | push: item %}
|
|
58
|
+
{%- endif %}
|
|
59
|
+
{%- else %}
|
|
60
|
+
{%- comment %} For localized pages, show only pages matching current locale {%- endcomment %}
|
|
61
|
+
{%- if item_locale == current_locale %}
|
|
62
|
+
{%- assign filtered_data = filtered_data | push: item %}
|
|
63
|
+
{%- endif %}
|
|
64
|
+
{%- endif %}
|
|
65
|
+
{%- endfor %}
|
|
66
|
+
|
|
67
|
+
{%- comment %} Use filtered data for rendering {%- endcomment %}
|
|
68
|
+
{%- assign data = filtered_data %}
|
|
69
|
+
|
|
70
|
+
{% capture card %}
|
|
71
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
72
|
+
<div class="row g-3 mb-3 pt-1">
|
|
73
|
+
{%- for item in data %}
|
|
74
|
+
{%- if item.title != page.title %}
|
|
75
|
+
<div class="col-12 col-md-6">
|
|
76
|
+
<div class="p-3 pb-1 bg-light border rounded">
|
|
77
|
+
<div class="h5">
|
|
78
|
+
{%- if show_page_filename == "true" %}
|
|
79
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
80
|
+
{%- include base/link.html.liquid name=item_name link=item.url %}
|
|
81
|
+
{%- else %}
|
|
82
|
+
{%- include base/link.html.liquid name=item.title link=item.url %}
|
|
83
|
+
{%- endif %}
|
|
84
|
+
</div>
|
|
85
|
+
{%- if item.title_lead %}
|
|
86
|
+
<p class="mb-3">{{ item.title_lead }}</p>
|
|
87
|
+
{%- endif %}
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
{%- endif %}
|
|
91
|
+
{%- endfor %}
|
|
92
|
+
</div>
|
|
93
|
+
{%- endcapture %}
|
|
94
|
+
|
|
95
|
+
{%- capture text %}
|
|
96
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
97
|
+
<div class="row g-3 mb-3 pt-1">
|
|
98
|
+
{%- for item in data %}
|
|
99
|
+
{%- if item.title != page.title %}
|
|
100
|
+
<div class="col-12 col-md-6">
|
|
101
|
+
{%- if show_page_filename == "true" %}
|
|
102
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
103
|
+
{%- include base/link.html.liquid name=item_name link=item.url %}
|
|
104
|
+
{%- else %}
|
|
105
|
+
{%- include base/link.html.liquid name=item.title link=item.url %}
|
|
106
|
+
{%- endif %}
|
|
107
|
+
</div>
|
|
108
|
+
{%- endif %}
|
|
109
|
+
{%- endfor %}
|
|
110
|
+
</div>
|
|
111
|
+
{%- endcapture %}
|
|
112
|
+
|
|
113
|
+
{%- capture list %}
|
|
114
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
115
|
+
<ul>
|
|
116
|
+
{%- for item in data %}
|
|
117
|
+
{%- if item.title != page.title %}
|
|
118
|
+
{%- if show_page_filename == "true" %}
|
|
119
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
120
|
+
<li>{% include base/link.html.liquid name=item_name link=item.url %}{% if item.title_lead != nil %} — {{ item.title_lead }}{% endif %}</li>
|
|
121
|
+
{%- else %}
|
|
122
|
+
<li>{% include base/link.html.liquid name=item.title link=item.url %}{% if item.title_lead != nil %} — {{ item.title_lead }}{% endif %}</li>
|
|
123
|
+
{%- endif %}
|
|
124
|
+
{%- endif %}
|
|
125
|
+
{%- endfor %}
|
|
126
|
+
</ul>
|
|
127
|
+
{%- endcapture %}
|
|
128
|
+
|
|
129
|
+
{% capture table %}
|
|
130
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
131
|
+
<table class="table dataTable">
|
|
132
|
+
<thead class="table-light">
|
|
133
|
+
<tr>
|
|
134
|
+
<th>Name</th>
|
|
135
|
+
<th>Description</th>
|
|
136
|
+
</tr>
|
|
137
|
+
</thead>
|
|
138
|
+
<tbody>
|
|
139
|
+
{%- for item in data %}
|
|
140
|
+
<tr>
|
|
141
|
+
{%- if item.title != page.title %}
|
|
142
|
+
{%- if show_page_filename == "true" %}
|
|
143
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
144
|
+
<td>{% include base/link.html.liquid name=item_name link=item.url %}</td>
|
|
145
|
+
{%- else %}
|
|
146
|
+
<td>{% include base/link.html.liquid name=item.title link=item.url %}</td>
|
|
147
|
+
{%- endif %}
|
|
148
|
+
{%- endif %}
|
|
149
|
+
<td>{{ item.title_lead }}</td>
|
|
150
|
+
</tr>
|
|
151
|
+
{%- endfor %}
|
|
152
|
+
</tbody>
|
|
153
|
+
</table>
|
|
154
|
+
{%- endcapture %}
|
|
155
|
+
|
|
156
|
+
{% capture component_table %}
|
|
157
|
+
<table class="table dataTable">
|
|
158
|
+
<thead class="table-light">
|
|
159
|
+
<tr>
|
|
160
|
+
<th>Name</th>
|
|
161
|
+
<th>Status</th>
|
|
162
|
+
<th>Description</th>
|
|
163
|
+
</tr>
|
|
164
|
+
</thead>
|
|
165
|
+
<tbody>
|
|
166
|
+
{%- for item in data %}
|
|
167
|
+
{% comment %} Get component status from site configuration file {% endcomment %}
|
|
168
|
+
{%- assign status_name = "with_" | append: item.component.name %}
|
|
169
|
+
{%- assign status = site.defaults[1].values[status_name] %}
|
|
170
|
+
{% comment %} Render component status {% endcomment %}
|
|
171
|
+
{%- if status == true %}
|
|
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-toggle-on text-success"></i> Enabled</span>' %}
|
|
173
|
+
{%- elsif status == false %}
|
|
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-toggle-off text-danger"></i> Disabled</span>' %}
|
|
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-toggle-on text-light"></i> Internal</span>' %}
|
|
177
|
+
{%- endif %}
|
|
178
|
+
{% comment %} Render table rows {% endcomment %}
|
|
179
|
+
<tr>
|
|
180
|
+
<td>{% include base/link.html.liquid name=item.component.name link=item.url %}</td>
|
|
181
|
+
<td class="text-nowrap">{{ status_icon }}</td>
|
|
182
|
+
<td>{{ item.title_lead }}</td>
|
|
183
|
+
</tr>
|
|
184
|
+
{%- endfor %}
|
|
185
|
+
</tbody>
|
|
186
|
+
</table>
|
|
187
|
+
{% endcapture %}
|
|
188
|
+
|
|
189
|
+
{% case format %}
|
|
190
|
+
{% when "card" %}
|
|
191
|
+
{{ card }}
|
|
192
|
+
{% when "text" %}
|
|
193
|
+
{{ text }}
|
|
194
|
+
{% when "table" %}
|
|
195
|
+
{{ table }}
|
|
196
|
+
{% when "component_table" %}
|
|
197
|
+
{{ component_table }}
|
|
198
|
+
{% else %}
|
|
199
|
+
{{ list }}
|
|
200
|
+
{% endcase %}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Open Graph & Twitter Meta Tags Component
|
|
4
|
+
Purpose: Renders meta tags for Open Graph (OG) and Twitter Card protocols.
|
|
5
|
+
Enables proper social media previews when sharing on social platforms.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- Dual-protocol support: Open Graph (OG) and Twitter Card meta tags
|
|
10
|
+
- Hierarchical fallback system for meta tag values
|
|
11
|
+
- Per-property customization via page front matter
|
|
12
|
+
- Conditional rendering of protocol-specific attributes
|
|
13
|
+
- Image metadata with security URL and dimensions for OG
|
|
14
|
+
|
|
15
|
+
Required Inputs:
|
|
16
|
+
- page.title: Page title for social sharing preview
|
|
17
|
+
- site.url: Full site URL (for absolute URLs)
|
|
18
|
+
- site.baseurl: Base URL path prefix
|
|
19
|
+
|
|
20
|
+
Optional Inputs:
|
|
21
|
+
- with_ogp_data.og.*, with_ogp_data.twitter.*: OG/Twitter property overrides
|
|
22
|
+
- page.excerpt, page.title_lead: Fallback for description
|
|
23
|
+
- site.description: Site-level description fallback
|
|
24
|
+
- page.locale: BCP 47 locale code set by jekyll-l10n on localized pages
|
|
25
|
+
|
|
26
|
+
Data Source Hierarchy:
|
|
27
|
+
- og:type: with_ogp_data.og.type → schema default → 'website'
|
|
28
|
+
- og:site_name: with_ogp_data.og.site_name → site.title
|
|
29
|
+
- og:logo: with_ogp_data.og.logo → schema default → '/assets/icons/apple-touch-icon.png'
|
|
30
|
+
- og:locale: page.locale (jekyll-l10n) → with_ogp_data.locale → schema default → 'en_US'
|
|
31
|
+
- og:image:type: with_ogp_data.og.image.type → schema default → 'image/png'
|
|
32
|
+
- og:image:width: with_ogp_data.og.image.width → schema default → 1200
|
|
33
|
+
- og:image:height: with_ogp_data.og.image.height → schema default → 630
|
|
34
|
+
- og:image:alt: with_ogp_data[property].image.alt → schema default → 'The CentOS Project'
|
|
35
|
+
- twitter:card: with_ogp_data.twitter.card → schema default → 'summary_large_image'
|
|
36
|
+
- twitter:site: with_ogp_data.twitter.site → schema default → '@CentOS'
|
|
37
|
+
- twitter:creator: with_ogp_data.twitter.creator → schema default → '@CentOS'
|
|
38
|
+
- Default image path: /assets/img/centos-social-share.png
|
|
39
|
+
================================================================================
|
|
40
|
+
{% endcomment %}
|
|
41
|
+
|
|
42
|
+
{%- assign with_ogp = include.with_ogp
|
|
43
|
+
| default: page.with_ogp
|
|
44
|
+
%}
|
|
45
|
+
|
|
46
|
+
{%- assign with_ogp_data = include.data
|
|
47
|
+
| default: page.with_ogp_data
|
|
48
|
+
| default: site.data.ogp
|
|
49
|
+
| default: site.data.base.ogp
|
|
50
|
+
%}
|
|
51
|
+
|
|
52
|
+
{%- assign with_ogp_schema = site.data.base.ogp_schema.properties.with_ogp_data.properties %}
|
|
53
|
+
|
|
54
|
+
{%- if with_ogp %}
|
|
55
|
+
|
|
56
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
57
|
+
{%- comment %} --- Schema shorthands --- {% endcomment %}
|
|
58
|
+
{%- assign with_ogp_og_image_schema = with_ogp_schema.og.properties.image.properties %}
|
|
59
|
+
{%- assign with_ogp_twitter_schema = with_ogp_schema.twitter.properties %}
|
|
60
|
+
|
|
61
|
+
{%- comment %} --- Shared image metadata (og and twitter use the same image) --- {% endcomment %}
|
|
62
|
+
{%- assign ogp_image_type = with_ogp_data.og.image.type | default: with_ogp_og_image_schema.type.default | default: 'image/png' %}
|
|
63
|
+
{%- assign ogp_image_width = with_ogp_data.og.image.width | default: with_ogp_og_image_schema.width.default | default: 1200 %}
|
|
64
|
+
{%- assign ogp_image_height = with_ogp_data.og.image.height | default: with_ogp_og_image_schema.height.default | default: 630 %}
|
|
65
|
+
|
|
66
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
67
|
+
{%- assign ogp_og_type = with_ogp_data.og.type | default: with_ogp_schema.og.properties.type.default %}
|
|
68
|
+
{%- assign ogp_locale = page.locale | default: with_ogp_data.locale | default: with_ogp_schema.locale.default | default: 'en_US' %}
|
|
69
|
+
{%- assign ogp_twitter_card = with_ogp_data.twitter.card
|
|
70
|
+
| default: with_ogp_twitter_schema.card.default
|
|
71
|
+
| default: 'summary_large_image' %}
|
|
72
|
+
{%- assign ogp_twitter_site = with_ogp_data.twitter.site
|
|
73
|
+
| default: with_ogp_twitter_schema.site.default
|
|
74
|
+
| default: '@CentOS' %}
|
|
75
|
+
{%- assign ogp_twitter_creator = with_ogp_data.twitter.creator
|
|
76
|
+
| default: with_ogp_twitter_schema.creator.default
|
|
77
|
+
| default: '@CentOS' %}
|
|
78
|
+
|
|
79
|
+
{%- comment %} --- Common attributes for both `og` and `twitter` properties --- {% endcomment %}
|
|
80
|
+
{%- assign properties = "og,twitter" | split: "," %}
|
|
81
|
+
{%- for property in properties %}
|
|
82
|
+
{%- if property == "twitter" %}{%- assign meta_attr = "name" %}{%- else %}{%- assign meta_attr = "property" %}{%- endif %}
|
|
83
|
+
|
|
84
|
+
{%- comment %} --- Twitter Card: required first --- {% endcomment %}
|
|
85
|
+
{%- if property == "twitter" %}
|
|
86
|
+
<meta name="twitter:card" content="{{ ogp_twitter_card }}" />
|
|
87
|
+
<meta name="twitter:site" content="{{ ogp_twitter_site }}" />
|
|
88
|
+
<meta name="twitter:creator" content="{{ ogp_twitter_creator }}" />
|
|
89
|
+
{%- endif %}
|
|
90
|
+
|
|
91
|
+
{%- comment %} --- Title --- {% endcomment %}
|
|
92
|
+
{%- if with_ogp_data[property].title %}
|
|
93
|
+
<meta {{ meta_attr }}="{{ property }}:title" content="{{ page.title }}" />
|
|
94
|
+
{%- endif %}
|
|
95
|
+
|
|
96
|
+
{%- comment %} --- OG type and logo (after title, before url) --- {% endcomment %}
|
|
97
|
+
{%- if property == "og" %}
|
|
98
|
+
<meta property="og:type" content="{{ ogp_og_type }}" />
|
|
99
|
+
{%- assign ogp_logo = with_ogp_data.og.logo | default: with_ogp_schema.og.properties.logo.default %}
|
|
100
|
+
{%- if ogp_logo %}
|
|
101
|
+
<meta property="og:logo" content="{{ site.url }}{{ site.baseurl }}{{ ogp_logo }}" />
|
|
102
|
+
{%- endif %}
|
|
103
|
+
{%- endif %}
|
|
104
|
+
|
|
105
|
+
{%- comment %} --- URL --- {% endcomment %}
|
|
106
|
+
{%- if with_ogp_data[property].url %}
|
|
107
|
+
<meta {{ meta_attr }}="{{ property }}:url" content="{{ site.url }}{{ site.baseurl }}{{ page.url }}" />
|
|
108
|
+
{%- endif %}
|
|
109
|
+
|
|
110
|
+
{%- comment %} --- Description --- {% endcomment %}
|
|
111
|
+
{%- if with_ogp_data[property].description %}
|
|
112
|
+
{%- if page.excerpt %}
|
|
113
|
+
<meta {{ meta_attr }}="{{ property }}:description" content="{{ page.excerpt }}" />
|
|
114
|
+
{%- elsif page.title_lead %}
|
|
115
|
+
<meta {{ meta_attr }}="{{ property }}:description" content="{{ page.title_lead }}" />
|
|
116
|
+
{%- else %}
|
|
117
|
+
<meta {{ meta_attr }}="{{ property }}:description" content="{{ site.description }}" />
|
|
118
|
+
{%- endif %}
|
|
119
|
+
{%- endif %}
|
|
120
|
+
|
|
121
|
+
{%- comment %} --- Image --- {% endcomment %}
|
|
122
|
+
{%- if with_ogp_data[property].image %}
|
|
123
|
+
<meta {{ meta_attr }}="{{ property }}:image" content="{{ site.url }}{{ site.baseurl }}/assets/img/centos-social-share.png" />
|
|
124
|
+
{%- if property == "og" %}
|
|
125
|
+
<meta {{ meta_attr }}="{{ property }}:image:secure_url" content="{{ site.url }}{{ site.baseurl }}/assets/img/centos-social-share.png" />
|
|
126
|
+
<meta {{ meta_attr }}="{{ property }}:image:type" content="{{ ogp_image_type }}" />
|
|
127
|
+
<meta {{ meta_attr }}="{{ property }}:image:width" content="{{ ogp_image_width }}" />
|
|
128
|
+
<meta {{ meta_attr }}="{{ property }}:image:height" content="{{ ogp_image_height }}" />
|
|
129
|
+
{%- endif %}
|
|
130
|
+
<meta {{ meta_attr }}="{{ property }}:image:alt" content="{{ with_ogp_data[property].image.alt | default: with_ogp_og_image_schema.alt.default | default: 'The CentOS Project' }}" />
|
|
131
|
+
{%- endif %}
|
|
132
|
+
|
|
133
|
+
{%- comment %} --- OG site_name and locale (after image) --- {% endcomment %}
|
|
134
|
+
{%- if property == "og" %}
|
|
135
|
+
{%- assign ogp_site_name = with_ogp_data.og.site_name | default: site.title %}
|
|
136
|
+
{%- if ogp_site_name %}
|
|
137
|
+
<meta property="og:site_name" content="{{ ogp_site_name }}" />
|
|
138
|
+
{%- endif %}
|
|
139
|
+
<meta property="og:locale" content="{{ ogp_locale }}" />
|
|
140
|
+
{%- endif %}
|
|
141
|
+
|
|
142
|
+
{%- endfor %}
|
|
143
|
+
|
|
144
|
+
{% endif %}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Project Showcase Component
|
|
4
|
+
Purpose: Renders a full-width project/product hero section with featured
|
|
5
|
+
content and supplementary resource links.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- Hero-style layout: full-width container with dark background
|
|
10
|
+
- Wraps card component for flexible content presentation
|
|
11
|
+
- Dark theme (text-bg-dark) for high contrast and visual prominence
|
|
12
|
+
- Resource section for downloadable/related content links
|
|
13
|
+
- Data source hierarchy enables both page-level and site-level config
|
|
14
|
+
- Container-based layout for max-width constraint on large screens
|
|
15
|
+
- Reuses link component for action and resource buttons
|
|
16
|
+
|
|
17
|
+
Optional Inputs:
|
|
18
|
+
- data: Project data object (overrides all fallbacks)
|
|
19
|
+
- project.name, description, icon, image, screenshot: Content
|
|
20
|
+
- project.actions, resources: Arrays of buttons [{name, url, icon}]
|
|
21
|
+
|
|
22
|
+
Data Source Hierarchy (priority):
|
|
23
|
+
1. include.data
|
|
24
|
+
2. page.with_project_data
|
|
25
|
+
3. site.data.project
|
|
26
|
+
4. site.data.base.project
|
|
27
|
+
================================================================================
|
|
28
|
+
{% endcomment %}
|
|
29
|
+
|
|
30
|
+
{%- assign with_project = include.with_project
|
|
31
|
+
| default: page.with_project
|
|
32
|
+
%}
|
|
33
|
+
|
|
34
|
+
{%- assign with_project_data = include.data
|
|
35
|
+
| default: page.with_project_data
|
|
36
|
+
| default: site.data.project
|
|
37
|
+
| default: site.data.base.project
|
|
38
|
+
%}
|
|
39
|
+
|
|
40
|
+
{%- assign with_project_schema = site.data.base.project_schema.properties.with_project_data.properties %}
|
|
41
|
+
|
|
42
|
+
{%- if with_project -%}
|
|
43
|
+
|
|
44
|
+
{% assign project_class = with_project_data.class | default: with_project_schema.class.default %}
|
|
45
|
+
{% assign project_screenshot = with_project_data.screenshot | default: with_project_schema.screenshot.default %}
|
|
46
|
+
{% assign project_screenshot_class = with_project_data.screenshot_class | default: with_project_schema.screenshot_class.default %}
|
|
47
|
+
{% assign project_screenshot_alt = with_project_data.screenshot_alt | default: with_project_schema.screenshot_alt.default %}
|
|
48
|
+
{% assign project_image = with_project_data.image | default: with_project_schema.image.default %}
|
|
49
|
+
{% assign project_image_alt = with_project_data.image_alt | default: with_project_schema.image_alt.default %}
|
|
50
|
+
{% assign project_image_class = with_project_data.image_class | default: with_project_schema.image_class.default %}
|
|
51
|
+
{% assign project_image_style = with_project_data.image_style | default: with_project_schema.image_style.default %}
|
|
52
|
+
{% assign project_icon = with_project_data.icon | default: with_project_schema.icon.default %}
|
|
53
|
+
{% assign project_icon_class = with_project_data.icon_class | default: with_project_schema.icon_class.default %}
|
|
54
|
+
{% assign project_name = with_project_data.name | default: with_project_schema.name.default %}
|
|
55
|
+
{% assign project_name_class = with_project_data.name_class | default: with_project_schema.name_class.default %}
|
|
56
|
+
{% assign project_description = with_project_data.description | default: with_project_schema.description.default %}
|
|
57
|
+
{% assign project_description_class = with_project_data.description_class | default: with_project_schema.description_class.default %}
|
|
58
|
+
{% assign project_actions = with_project_data.actions | default: with_project_schema.actions.default %}
|
|
59
|
+
{% assign project_actions_class = with_project_data.actions_class | default: with_project_schema.actions_class.default %}
|
|
60
|
+
{% assign project_actions_btn_class = with_project_data.actions_btn_class | default: with_project_schema.actions_btn_class.default %}
|
|
61
|
+
{% assign project_resources = with_project_data.resources | default: with_project_schema.resources.default %}
|
|
62
|
+
{% assign project_resources_class = with_project_data.resources_class | default: with_project_schema.resources_class.default %}
|
|
63
|
+
{% assign project_resources_btn_class = with_project_data.resources_btn_class | default: with_project_schema.resources_btn_class.default %}
|
|
64
|
+
|
|
65
|
+
<div class="d-flex{% if project_class != "" %} {{ project_class }}{% endif %}">
|
|
66
|
+
<div class="container pt-5">
|
|
67
|
+
{% include base/card.html.liquid
|
|
68
|
+
class = "flex-column align-items-center pb-3"
|
|
69
|
+
color = "primary"
|
|
70
|
+
screenshot = project_screenshot
|
|
71
|
+
screenshot_class = project_screenshot_class
|
|
72
|
+
screenshot_alt = project_screenshot_alt
|
|
73
|
+
image = project_image
|
|
74
|
+
image_class = project_image_class
|
|
75
|
+
image_style = project_image_style
|
|
76
|
+
image_alt = project_image_alt
|
|
77
|
+
icon = project_icon
|
|
78
|
+
icon_class = project_icon_class
|
|
79
|
+
name = project_name
|
|
80
|
+
name_class = project_name_class
|
|
81
|
+
description = project_description
|
|
82
|
+
description_class = project_description_class
|
|
83
|
+
actions = project_actions
|
|
84
|
+
actions_btn_class = project_actions_btn_class
|
|
85
|
+
actions_class = project_actions_class
|
|
86
|
+
%}
|
|
87
|
+
{%- if project_resources.size > 0 %}
|
|
88
|
+
<div class="d-grid{% if project_resources_class %} {{ project_resources_class }}{% endif %}">
|
|
89
|
+
{%- for resource in project_resources %}
|
|
90
|
+
{% include base/link.html.liquid
|
|
91
|
+
class = project_resources_btn_class
|
|
92
|
+
role = "button"
|
|
93
|
+
name = resource.name
|
|
94
|
+
link = resource.link
|
|
95
|
+
icon = resource.icon
|
|
96
|
+
icon_position = resource.icon_position
|
|
97
|
+
%}
|
|
98
|
+
{%- endfor %}
|
|
99
|
+
</div>
|
|
100
|
+
{%- endif %}
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
{%- endif -%}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Shortcuts Navigation Component
|
|
4
|
+
Purpose: Renders footer navigation shortcuts grouped by category. Displays
|
|
5
|
+
sections of related links in multi-column layout suitable for footer placement.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Strategic Design Logic:
|
|
9
|
+
- Grouped navigation: categories of related links
|
|
10
|
+
- Column layout: multi-column footer display
|
|
11
|
+
- Filtered items: only shows items with visible_on='footer'
|
|
12
|
+
- Reusable link component: consistent styling
|
|
13
|
+
- Empty state handling: no output if no items
|
|
14
|
+
- Category headings: uppercase section titles
|
|
15
|
+
|
|
16
|
+
Required Inputs (from data objects):
|
|
17
|
+
- navitems[]: Array with visible_on='footer'
|
|
18
|
+
|
|
19
|
+
Optional Inputs (from include):
|
|
20
|
+
- data: Shortcuts configuration object
|
|
21
|
+
|
|
22
|
+
Data Source Hierarchy (in priority order):
|
|
23
|
+
1. include.data - Explicitly passed configuration
|
|
24
|
+
2. page.with_shortcut_data - Page front matter
|
|
25
|
+
3. site.data.shortcut - Site configuration
|
|
26
|
+
4. site.data.base.shortcut - Theme defaults
|
|
27
|
+
|
|
28
|
+
Conditional Logic:
|
|
29
|
+
- shortcut_navitems.size > 0: Only render if items exist
|
|
30
|
+
- Loop through sections and their menus
|
|
31
|
+
- Each item rendered as link via link component
|
|
32
|
+
- Color: "light" (suitable for dark footers)
|
|
33
|
+
================================================================================
|
|
34
|
+
{% endcomment %}
|
|
35
|
+
|
|
36
|
+
{%- assign with_shortcut = include.with_shortcut
|
|
37
|
+
| default: page.with_shortcut
|
|
38
|
+
%}
|
|
39
|
+
|
|
40
|
+
{%- assign with_shortcut_data = include.data
|
|
41
|
+
| default: page.with_shortcut_data
|
|
42
|
+
| default: page.with_navbar_data
|
|
43
|
+
| default: site.data.shortcut
|
|
44
|
+
| default: site.data.navbar
|
|
45
|
+
| default: site.data.base.shortcut
|
|
46
|
+
| default: site.data.base.navbar
|
|
47
|
+
%}
|
|
48
|
+
|
|
49
|
+
{%- assign shortcut_navitems = with_shortcut_data.navitems | where: "visible_on", "footer" %}
|
|
50
|
+
|
|
51
|
+
{%- if with_shortcut -%}
|
|
52
|
+
|
|
53
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
54
|
+
{% if shortcut_navitems.size > 0 %}
|
|
55
|
+
<div class="d-flex flex-wrap justify-content-evenly mb-4">
|
|
56
|
+
|
|
57
|
+
{% for section in shortcut_navitems -%}
|
|
58
|
+
<div class="pe-4">
|
|
59
|
+
<p class="h6">{% if section.icon %}<i class="{{ section.icon }} me-1"></i>{% endif %}{{ section.name }}</p>
|
|
60
|
+
<ul class="px-0 mb-4">
|
|
61
|
+
{% for item in section.menu -%}
|
|
62
|
+
{%- assign item_link = item.link | locale_url: page.locale %}
|
|
63
|
+
<li class="list-unstyled my-1">
|
|
64
|
+
{% include base/link.html.liquid
|
|
65
|
+
name = item.name
|
|
66
|
+
link = item_link
|
|
67
|
+
color = "primary"
|
|
68
|
+
%}
|
|
69
|
+
</li>
|
|
70
|
+
{% endfor %}
|
|
71
|
+
</ul>
|
|
72
|
+
</div>
|
|
73
|
+
{% endfor %}
|
|
74
|
+
</div>
|
|
75
|
+
{% endif %}
|
|
76
|
+
|
|
77
|
+
{%- endif -%}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Social Links Component
|
|
4
|
+
Purpose: Renders a collection of social media and external links as styled
|
|
5
|
+
buttons with icons. Includes optional site description header.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Strategic Design Logic:
|
|
9
|
+
- Multi-level data source hierarchy for flexible configuration
|
|
10
|
+
- Site description display for context/branding purposes
|
|
11
|
+
- Link rendering via reusable link component with icon support
|
|
12
|
+
- Icon-based visual identification for different platforms
|
|
13
|
+
- Accessibility-first approach with proper ARIA labels
|
|
14
|
+
- Centered layout for prominent footer or banner placement
|
|
15
|
+
|
|
16
|
+
Required Fields (per item in the media array):
|
|
17
|
+
- link: URL for the social media or external platform
|
|
18
|
+
- icon: Icon class for Font Awesome (e.g., 'fa-brands fa-github')
|
|
19
|
+
- name: Platform name for accessibility label (e.g., 'GitHub')
|
|
20
|
+
|
|
21
|
+
Optional Inputs (from include):
|
|
22
|
+
- data: Array of social link objects (overrides all fallbacks)
|
|
23
|
+
|
|
24
|
+
Optional Inputs (from site configuration):
|
|
25
|
+
- site.description: Brief site description displayed above social links
|
|
26
|
+
|
|
27
|
+
Data Source Hierarchy (in priority order):
|
|
28
|
+
1. include.data - Explicitly passed social link array
|
|
29
|
+
2. page.with_social_data - Page front matter configuration
|
|
30
|
+
3. site.data.social - Site-specific social configuration
|
|
31
|
+
4. site.data.base.social - Theme default social links
|
|
32
|
+
|
|
33
|
+
Conditional Logic:
|
|
34
|
+
- Site description displays only if site.description is defined
|
|
35
|
+
- Loops through all social links in resolved data source
|
|
36
|
+
- Each link rendered with consistent button styling
|
|
37
|
+
================================================================================
|
|
38
|
+
{% endcomment %}
|
|
39
|
+
|
|
40
|
+
{%- assign with_social = include.with_social
|
|
41
|
+
| default: page.with_social
|
|
42
|
+
%}
|
|
43
|
+
|
|
44
|
+
{%- assign with_social_data = include.data
|
|
45
|
+
| default: page.with_social_data
|
|
46
|
+
| default: site.data.social
|
|
47
|
+
| default: site.data.base.social
|
|
48
|
+
%}
|
|
49
|
+
|
|
50
|
+
{%- assign with_social_schema = site.data.base.social_schema.properties.with_social_data.properties %}
|
|
51
|
+
|
|
52
|
+
{%- assign social_class = with_social_data.class | default: with_social_schema.class.default %}
|
|
53
|
+
{%- assign social_preamble = with_social_data.preamble | default: with_social_schema.preamble.default %}
|
|
54
|
+
{%- assign social_preamble_class = with_social_data.preamble_class | default: with_social_schema.preamble_class.default %}
|
|
55
|
+
{%- assign social_media = with_social_data.media | default: with_social_schema.media.default %}
|
|
56
|
+
|
|
57
|
+
{% if with_social %}
|
|
58
|
+
|
|
59
|
+
{%- comment %} === Presentation (Begin) === {% endcomment %}
|
|
60
|
+
{%- if social_preamble %}
|
|
61
|
+
<p class="{{ social_preamble_class }}">{{ social_preamble }}</p>
|
|
62
|
+
{%- endif %}
|
|
63
|
+
|
|
64
|
+
{%- for item in social_media -%}
|
|
65
|
+
{%- include base/link.html.liquid
|
|
66
|
+
class = "btn btn-outline-primary m-1"
|
|
67
|
+
link = item.link
|
|
68
|
+
role = "button"
|
|
69
|
+
icon = item.icon
|
|
70
|
+
aria_label = item.name
|
|
71
|
+
data_bs_title = item.name
|
|
72
|
+
%}
|
|
73
|
+
{%- endfor %}
|
|
74
|
+
{%- comment %} === Presentation (End) === {% endcomment %}
|
|
75
|
+
|
|
76
|
+
{% endif %}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Sponsors Cards Component
|
|
4
|
+
Purpose: Renders sponsor logos as a horizontal row of linked cards with
|
|
5
|
+
border styling. Suitable for inline or content-area placement.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Strategic Design Logic:
|
|
9
|
+
- Multi-level data source hierarchy for flexible configuration
|
|
10
|
+
- Card-based layout for content-area or inline sponsor display
|
|
11
|
+
- Active-flag filtering to soft-delete without data removal
|
|
12
|
+
|
|
13
|
+
Required Fields (per item in the members array):
|
|
14
|
+
- name: Sponsor display name (used as alt text)
|
|
15
|
+
- image: Logo source — bare filename (resolved via image_base_path) or absolute URL
|
|
16
|
+
- url: Sponsor website URL
|
|
17
|
+
|
|
18
|
+
Optional Data Fields:
|
|
19
|
+
- image_base_path: Base path for bare filenames (default: /assets/img/base/)
|
|
20
|
+
|
|
21
|
+
Optional Inputs (from include):
|
|
22
|
+
- data: Sponsors data object (overrides all fallbacks)
|
|
23
|
+
|
|
24
|
+
Data Source Hierarchy (in priority order):
|
|
25
|
+
1. include.data - Explicitly passed sponsors data object
|
|
26
|
+
2. page.with_sponsors_data - Page front matter configuration
|
|
27
|
+
3. site.data.sponsors - Site-specific sponsors configuration
|
|
28
|
+
4. site.data.base.sponsors - Theme default sponsors data
|
|
29
|
+
|
|
30
|
+
Conditional Logic:
|
|
31
|
+
- Component renders only when page.with_sponsors is true
|
|
32
|
+
- Members filtered by is_active != false
|
|
33
|
+
================================================================================
|
|
34
|
+
{% endcomment %}
|
|
35
|
+
|
|
36
|
+
{%- assign with_sponsors = include.with_sponsors
|
|
37
|
+
| default: page.with_sponsors
|
|
38
|
+
%}
|
|
39
|
+
|
|
40
|
+
{%- assign with_sponsors_data = include.data
|
|
41
|
+
| default: page.with_sponsors_data
|
|
42
|
+
| default: site.data.sponsors
|
|
43
|
+
| default: site.data.base.sponsors
|
|
44
|
+
%}
|
|
45
|
+
|
|
46
|
+
{%- if with_sponsors -%}
|
|
47
|
+
|
|
48
|
+
{%- assign with_sponsors_schema = site.data.base.sponsors_schema.properties.with_sponsors_data.properties %}
|
|
49
|
+
|
|
50
|
+
{%- assign sponsors_members = with_sponsors_data.members | default: with_sponsors_schema.members.default -%}
|
|
51
|
+
{%- assign sponsors_image_base = with_sponsors_data.image_base_path | default: with_sponsors_schema.image_base_path.default -%}
|
|
52
|
+
|
|
53
|
+
<div class="d-flex flex-wrap justify-content-between py-4 my-4 border-top border-bottom border-top-1 border-bottom-1">
|
|
54
|
+
{%- comment %} === Presentation (Begin) === {% endcomment %}
|
|
55
|
+
{%- for member in sponsors_members -%}
|
|
56
|
+
{%- if member.is_active != false %}
|
|
57
|
+
<div class="card border-light m-4" style="max-height: 60px; max-width: 242px">
|
|
58
|
+
{%- if member.image contains "://" -%}
|
|
59
|
+
<a href="{{ member.url }}"><img src="{{ member.image }}" class="card-img-top rounded" style="max-height: 60px; max-width: 242px" alt="{{ member.name }}"></a>
|
|
60
|
+
{%- else -%}
|
|
61
|
+
<a href="{{ member.url }}"><img src="{{ site.baseurl }}{{ sponsors_image_base }}{{ member.image }}" class="card-img-top rounded" style="max-height: 60px; max-width: 242px" alt="{{ member.name }}"></a>
|
|
62
|
+
{%- endif -%}
|
|
63
|
+
</div>
|
|
64
|
+
{%- endif -%}
|
|
65
|
+
{%- endfor %}
|
|
66
|
+
{%- comment %} === Presentation (End) === {% endcomment %}
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{%- endif -%}
|