jekyll-theme-centos 2.52.0.beta.3 → 2.52.0.beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/_data/base/announcement_schema.yml +50 -0
- data/_data/base/artwork_schema.yml +46 -0
- data/_data/base/backtotop_schema.yml +53 -0
- data/_data/base/bits.yml +96 -0
- data/_data/base/bits_schema.yml +183 -0
- data/_data/base/breadcrumb_schema.yml +14 -0
- data/_data/base/breakingnews_schema.yml +59 -0
- data/_data/base/color.yml +1042 -0
- data/_data/base/color_schema.yml +1036 -0
- data/_data/base/content.yml +2 -0
- data/_data/base/content_schema.yml +26 -0
- data/_data/base/converter_link_schema.yml +48 -0
- data/_data/base/copyright.yml +12 -0
- data/_data/base/copyright_schema.yml +34 -0
- data/_data/base/copyvalue_schema.yml +49 -0
- data/_data/base/datatable_schema.yml +57 -0
- data/_data/base/event_schema.yml +122 -0
- data/_data/base/fontawesome_schema.yml +49 -0
- data/_data/base/highlight_schema.yml +68 -0
- data/_data/base/languages.yml +186 -0
- data/_data/base/link_schema.yml +153 -0
- data/_data/base/locales_schema.yml +25 -0
- data/_data/base/navbar.yml +20 -0
- data/_data/base/navbar_schema.yml +121 -0
- data/_data/base/navindex_schema.yml +67 -0
- data/_data/base/ogp_schema.yml +186 -0
- data/_data/base/project.yml +37 -0
- data/_data/base/project_schema.yml +120 -0
- data/_data/base/shortcut_schema.yml +74 -0
- data/_data/base/social.yml +25 -0
- data/_data/base/social_schema.yml +53 -0
- data/_data/base/title_schema.yml +49 -0
- data/_data/base/toc_schema.yml +100 -0
- data/_data/download/cards.yml +309 -0
- data/_data/download/navbar.yml +11 -0
- data/_data/sponsors/carousel.yml +37 -0
- data/_data/sponsors/navbar.yml +6 -0
- data/_includes/base/announcement.html.liquid +51 -0
- data/_includes/base/artwork.html.liquid +49 -0
- data/_includes/base/backtotop.html.liquid +51 -0
- data/_includes/base/bits.html.liquid +135 -0
- data/_includes/base/breadcrumb.html.liquid +37 -0
- data/_includes/base/breakingnews.html.liquid +74 -0
- data/_includes/base/card.html.liquid +96 -0
- data/_includes/base/copyright.html.liquid +56 -0
- data/_includes/base/copyvalue.html.liquid +59 -0
- data/_includes/base/datatable.html.liquid +64 -0
- data/_includes/base/event.html.liquid +89 -0
- data/_includes/base/fontawesome.html.liquid +58 -0
- data/_includes/base/head.html.liquid +101 -0
- data/_includes/base/highlight.html.liquid +65 -0
- data/_includes/base/image.html.liquid +42 -0
- data/_includes/base/link.html.liquid +139 -0
- data/_includes/base/locales.html.liquid +41 -0
- data/_includes/base/navbar.html.liquid +106 -0
- data/_includes/base/navindex.html.liquid +162 -0
- data/_includes/base/ogp.html.liquid +118 -0
- data/_includes/base/project.html.liquid +90 -0
- data/_includes/base/script.html.liquid +59 -0
- data/_includes/base/shortcut.html.liquid +65 -0
- data/_includes/base/social.html.liquid +59 -0
- data/_includes/base/title.html.liquid +52 -0
- data/_includes/base/toc.html.liquid +91 -0
- data/_includes/base/toc_generator.html.liquid +189 -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/_includes/sponsors/cards.html +11 -0
- data/_includes/sponsors/carousel.html +24 -0
- data/_layouts/base/default.html +117 -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 +251 -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/page-layout-default.png +0 -0
- data/assets/img/base/page-layout-default.svg +1158 -0
- data/assets/img/base/page-with-alert.png +0 -0
- data/assets/img/base/page-with-alert.svg +359 -0
- data/assets/img/base/page-with-announcement.png +0 -0
- data/assets/img/base/page-with-announcement.svg +499 -0
- data/assets/img/base/page-with-artwork.png +0 -0
- data/assets/img/base/page-with-artwork.svg +368 -0
- data/assets/img/base/page-with-backtotop.png +0 -0
- data/assets/img/base/page-with-backtotop.svg +275 -0
- data/assets/img/base/page-with-bits.png +0 -0
- data/assets/img/base/page-with-bits.svg +311 -0
- data/assets/img/base/page-with-breadcrumb.png +0 -0
- data/assets/img/base/page-with-breadcrumb.svg +676 -0
- data/assets/img/base/page-with-breakingnews.png +0 -0
- data/assets/img/base/page-with-breakingnews.svg +903 -0
- data/assets/img/base/page-with-color.png +0 -0
- data/assets/img/base/page-with-color.svg +57 -0
- data/assets/img/base/page-with-copyright.png +0 -0
- data/assets/img/base/page-with-copyright.svg +233 -0
- data/assets/img/base/page-with-copyvalue.png +0 -0
- data/assets/img/base/page-with-copyvalue.svg +57 -0
- data/assets/img/base/page-with-datatable.png +0 -0
- data/assets/img/base/page-with-datatable.svg +857 -0
- data/assets/img/base/page-with-event.png +0 -0
- data/assets/img/base/page-with-event.svg +522 -0
- data/assets/img/base/page-with-fontawesome.png +0 -0
- data/assets/img/base/page-with-fontawesome.svg +147 -0
- data/assets/img/base/page-with-heading.png +0 -0
- data/assets/img/base/page-with-heading.svg +57 -0
- data/assets/img/base/page-with-highlight.png +0 -0
- data/assets/img/base/page-with-highlight.svg +86 -0
- data/assets/img/base/page-with-link.png +0 -0
- data/assets/img/base/page-with-link.svg +395 -0
- data/assets/img/base/page-with-locales.png +0 -0
- data/assets/img/base/page-with-locales.svg +724 -0
- data/assets/img/base/page-with-navbar.png +0 -0
- data/assets/img/base/page-with-navbar.svg +438 -0
- data/assets/img/base/page-with-navindex.png +0 -0
- data/assets/img/base/page-with-navindex.svg +279 -0
- data/assets/img/base/page-with-ogp.png +0 -0
- data/assets/img/base/page-with-ogp.svg +368 -0
- data/assets/img/base/page-with-project.png +0 -0
- data/assets/img/base/page-with-project.svg +822 -0
- data/assets/img/base/page-with-shortcut.png +0 -0
- data/assets/img/base/page-with-shortcut.svg +233 -0
- data/assets/img/base/page-with-social.png +0 -0
- data/assets/img/base/page-with-social.svg +233 -0
- data/assets/img/base/page-with-title.png +0 -0
- data/assets/img/base/page-with-title.svg +584 -0
- data/assets/img/base/page-with-toc.png +0 -0
- data/assets/img/base/page-with-toc.svg +438 -0
- data/assets/img/base/screenshot-example-1200x600.png +0 -0
- data/assets/img/base/screenshot-example-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/img/sponsors/screenshot-sponsors-cards-layout.png +0 -0
- data/assets/img/sponsors/screenshot-sponsors-cards.png +0 -0
- data/assets/img/sponsors/screenshot-sponsors-carousel.png +0 -0
- data/assets/img/sponsors/screenshot-sponsors-default-layout.png +0 -0
- data/assets/img/sponsors/screenshot-sponsors-logo.png +0 -0
- data/assets/img/sponsors/sponsor-logo-1.png +0 -0
- data/assets/img/sponsors/sponsor-logo-2.png +0 -0
- data/assets/img/sponsors/sponsor-logo-3.png +0 -0
- data/assets/img/sponsors/sponsor-logo-4.png +0 -0
- data/assets/img/sponsors/sponsor-logo-5.png +0 -0
- data/assets/img/sponsors/sponsor-logo-6.png +0 -0
- data/assets/img/sponsors/sponsor-logo-7.png +0 -0
- data/assets/img/sponsors/sponsor-logo-8.png +0 -0
- data/assets/img/sponsors/sponsors-logo.svg +563 -0
- data/assets/js/base/backtotop.js +23 -0
- data/assets/js/base/copyvalue.js +251 -0
- data/assets/js/base/datatable.js +55 -0
- data/assets/js/base/highlight.js +6 -0
- data/assets/js/base/init-tooltips.js +5 -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
- metadata +314 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Highlight.js Code Syntax Highlighting Component
|
|
4
|
+
Purpose: Loads Highlight.js library CSS and JavaScript from CDN with
|
|
5
|
+
copy-to-clipboard functionality for code blocks.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- CDN-based library: Highlight.js from cdnjs
|
|
10
|
+
- Copy plugin: additional plugin for code clipboard functionality
|
|
11
|
+
- Format switching: separate head (CSS) and script (JS) includes
|
|
12
|
+
- Automatic initialization: on document load
|
|
13
|
+
- Configurable theme: different color schemes available
|
|
14
|
+
- 190+ languages supported
|
|
15
|
+
|
|
16
|
+
Optional Inputs:
|
|
17
|
+
- type: "head" for CSS, "script" for JavaScript
|
|
18
|
+
- theme: Syntax highlighting theme (default: "default")
|
|
19
|
+
- version: Highlight.js version (e.g., "11.9.0")
|
|
20
|
+
- data: Highlight.js configuration object
|
|
21
|
+
|
|
22
|
+
Data Source Hierarchy (priority):
|
|
23
|
+
1. include.data
|
|
24
|
+
2. page.with_highlight_data
|
|
25
|
+
3. site.data.highlight
|
|
26
|
+
4. site.data.base.highlight
|
|
27
|
+
================================================================================
|
|
28
|
+
{% endcomment %}
|
|
29
|
+
|
|
30
|
+
{%- assign highlight = include.data | default: page.with_highlight_data | default: site.data.highlight | default: site.data.base.highlight %}
|
|
31
|
+
|
|
32
|
+
{%- assign highlight_theme = highlight.theme | default: site.data.base.highlight_schema.properties.with_highlight_data.properties.theme.default %}
|
|
33
|
+
{%- assign highlight_version = highlight.version | default: site.data.base.highlight_schema.properties.with_highlight_data.properties.version.default %}
|
|
34
|
+
{%- assign copy_icon_svg = highlight.copy_button_icons.copy.svg | default: site.data.base.highlight_schema.properties.with_highlight_data.properties.copy_button_icons.properties.copy.properties.svg.default %}
|
|
35
|
+
{%- assign success_icon_svg = highlight.copy_button_icons.success.svg | default: site.data.base.highlight_schema.properties.with_highlight_data.properties.copy_button_icons.properties.success.properties.svg.default %}
|
|
36
|
+
|
|
37
|
+
{%- capture html_highlight_head %}
|
|
38
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/styles/{{ highlight_theme | replace_first: 'base16-', 'base16/' | default: 'default' }}.min.css" />
|
|
39
|
+
<link rel="stylesheet" href="https://unpkg.com/highlightjs-copy@1.0.6/dist/highlightjs-copy.min.css" />
|
|
40
|
+
<!-- Highlight.js Copy Button Icon Customization (from schema) -->
|
|
41
|
+
<style>
|
|
42
|
+
.hljs-copy-button:not([data-copied="true"])::before {
|
|
43
|
+
mask: url('data:image/svg+xml;utf-8,{{ copy_icon_svg }}');
|
|
44
|
+
}
|
|
45
|
+
.hljs-copy-button[data-copied='true']::after {
|
|
46
|
+
background-image: url('data:image/svg+xml;utf-8,{{ success_icon_svg }}');
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
49
|
+
{%- endcapture %}
|
|
50
|
+
|
|
51
|
+
{%- capture html_highlight_script %}
|
|
52
|
+
<!-- Highlight.js Library and Copy Plugin -->
|
|
53
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/{{ highlight_version }}/highlight.min.js"></script>
|
|
54
|
+
<script src="https://unpkg.com/highlightjs-copy@1.0.6/dist/highlightjs-copy.min.js"></script>
|
|
55
|
+
<!-- Initialize Highlight.js -->
|
|
56
|
+
<script src="{{ site.baseurl }}/assets/js/base/highlight.min.js"></script>
|
|
57
|
+
{%- endcapture %}
|
|
58
|
+
|
|
59
|
+
{%- assign type = include.type %}
|
|
60
|
+
{%- case type %}
|
|
61
|
+
{%- when "head" %}
|
|
62
|
+
{{ html_highlight_head }}
|
|
63
|
+
{%- when "script" %}
|
|
64
|
+
{{ html_highlight_script }}
|
|
65
|
+
{%- endcase %}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Figure Image Component
|
|
4
|
+
Purpose: Renders responsive images in semantic HTML figure elements
|
|
5
|
+
with optional links and captions.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Required Inputs:
|
|
9
|
+
- file: Image filename (relative to /assets/img/)
|
|
10
|
+
- alt: Alt text for accessibility
|
|
11
|
+
|
|
12
|
+
Optional Inputs:
|
|
13
|
+
- link: URL to wrap image in a link
|
|
14
|
+
- caption: Caption text for <figcaption>
|
|
15
|
+
- extraclasses: Additional CSS classes for image element
|
|
16
|
+
|
|
17
|
+
Features:
|
|
18
|
+
- Semantic HTML with <figure> and <figcaption> elements
|
|
19
|
+
- Responsive images with img-fluid Bootstrap class
|
|
20
|
+
- Figure ID generated from alt text (slugified)
|
|
21
|
+
- Lazy loading enabled by default
|
|
22
|
+
================================================================================
|
|
23
|
+
{% endcomment %}
|
|
24
|
+
|
|
25
|
+
{% if include.alt %}
|
|
26
|
+
{% assign figid = include.alt %}
|
|
27
|
+
{% else %}
|
|
28
|
+
{% assign figid = include.file %}
|
|
29
|
+
{% endif %}
|
|
30
|
+
|
|
31
|
+
<figure id="fig-{{ figid | slugify }}" class="figure">
|
|
32
|
+
{% if include.link %}
|
|
33
|
+
<a href="{{ include.link }}">
|
|
34
|
+
<img loading="lazy" src="{{ site.baseurl }}/assets/img/{{ include.file }}" class="figure-img img-fluid rounded{% if include.extraclasses %} {{ include.extraclasses }}{% endif %}" alt="{{ include.alt }}"/>
|
|
35
|
+
</a>
|
|
36
|
+
{% else %}
|
|
37
|
+
<img loading="lazy" src="{{ site.baseurl }}/assets/img/{{ include.file }}" class="figure-img img-fluid rounded{% if include.extraclasses %} {{ include.extraclasses }}{% endif %}" alt="{{ include.alt }}"/>
|
|
38
|
+
{% endif %}
|
|
39
|
+
{% if include.caption %}
|
|
40
|
+
<figcaption class="figure-caption text-center">{{ include.caption }}</figcaption>
|
|
41
|
+
{% endif %}
|
|
42
|
+
</figure>
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Link Component
|
|
4
|
+
Purpose: Renders HTML anchor tags with icons, styling, and accessibility.
|
|
5
|
+
Handles internal/external links and anchor navigation.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- Flexible link resolution for internal and external URLs
|
|
10
|
+
- Optional icon integration with positioning control
|
|
11
|
+
- Customizable styling through color schemes or CSS classes
|
|
12
|
+
- Built-in accessibility support via ARIA attributes
|
|
13
|
+
- Anchor generation from link name when no URL provided
|
|
14
|
+
|
|
15
|
+
Required Inputs:
|
|
16
|
+
- name: Display text for the link
|
|
17
|
+
|
|
18
|
+
Optional Inputs:
|
|
19
|
+
- link: URL (internal/external). Omit to generate anchor from name.
|
|
20
|
+
- target: Link target (default: unset). Use '_blank' for new window.
|
|
21
|
+
- color: Color scheme (default: 'primary')
|
|
22
|
+
- icon: Icon class (Font Awesome or similar)
|
|
23
|
+
- icon_position: Icon placement: 'start' (default) or 'end'
|
|
24
|
+
- class: Custom CSS classes to override default styling
|
|
25
|
+
- aria_label: Accessible label for screen readers
|
|
26
|
+
- role: ARIA role attribute
|
|
27
|
+
|
|
28
|
+
Security & External Links:
|
|
29
|
+
- target="_blank" automatically adds rel="noopener noreferrer"
|
|
30
|
+
- External cross-domain links with target="_blank" auto-display
|
|
31
|
+
fa-solid fa-external-link icon (unless manually overridden)
|
|
32
|
+
- See: examples/jekyll/layouts/default/components/link.md
|
|
33
|
+
================================================================================
|
|
34
|
+
{% endcomment %}
|
|
35
|
+
|
|
36
|
+
{%- capture html_link -%}
|
|
37
|
+
{%- comment %} === Data source selection === {% endcomment %}
|
|
38
|
+
{%- assign link = include.link | default: nil %}
|
|
39
|
+
{%- assign name = include.name | default: nil %}
|
|
40
|
+
{%- assign target = include.target | default: nil %}
|
|
41
|
+
{%- assign color = include.color | default: "primary" %}
|
|
42
|
+
{%- assign role = include.role | default: nil %}
|
|
43
|
+
{%- assign icon = include.icon | default: nil %}
|
|
44
|
+
{%- assign icon_position = include.icon_position | default: "start" %}
|
|
45
|
+
{%- assign class = include.class | default: nil %}
|
|
46
|
+
{%- assign aria_label = include.aria_label | default: nil %}
|
|
47
|
+
{%- assign data_bs_toggle = include.data_bs_toggle | default: nil %}
|
|
48
|
+
{%- assign data_bs_title = include.data_bs_title | default: nil %}
|
|
49
|
+
{%- assign data_bs_placement = include.data_bs_placement | default: nil %}
|
|
50
|
+
{%- assign anchor = nil %}
|
|
51
|
+
{%- assign rel_attr = nil %}
|
|
52
|
+
{%- assign is_external_link = false %}
|
|
53
|
+
{%- assign auto_icon = nil %}
|
|
54
|
+
|
|
55
|
+
{%- comment %} === Data processing === {% endcomment %}
|
|
56
|
+
{%- if link != nil -%}
|
|
57
|
+
{%- if link contains "https://" or link contains "http://" -%}
|
|
58
|
+
{%- assign href_value = link %}
|
|
59
|
+
{%- assign is_external_link = true %}
|
|
60
|
+
{%- else -%}
|
|
61
|
+
{%- assign href_value = site.baseurl | append: link %}
|
|
62
|
+
{%- endif -%}
|
|
63
|
+
{%- else -%}
|
|
64
|
+
{%- assign href_value = site.baseurl %}
|
|
65
|
+
{%- assign anchor = name | strip | replace: ' ', '-' | downcase %}
|
|
66
|
+
{%- endif -%}
|
|
67
|
+
|
|
68
|
+
{%- comment %} === External link icon handling === {% endcomment %}
|
|
69
|
+
{%- if is_external_link and target == "_blank" and icon == nil -%}
|
|
70
|
+
{%- comment %} Extract domain from link URL (remove protocol) {% endcomment %}
|
|
71
|
+
{%- assign link_domain = link | replace: "https://", "" | replace: "http://", "" %}
|
|
72
|
+
{%- assign link_domain = link_domain | split: "/" | first %}
|
|
73
|
+
{%- assign link_domain = link_domain | split: "?" | first %}
|
|
74
|
+
{%- assign link_domain = link_domain | split: "#" | first %}
|
|
75
|
+
{%- assign link_domain = link_domain | downcase %}
|
|
76
|
+
|
|
77
|
+
{%- comment %} Extract domain from site.url (remove protocol) {% endcomment %}
|
|
78
|
+
{%- assign site_domain = site.url | default: site.baseurl | replace: "https://", "" | replace: "http://", "" %}
|
|
79
|
+
{%- assign site_domain = site_domain | split: "/" | first %}
|
|
80
|
+
{%- assign site_domain = site_domain | split: "?" | first %}
|
|
81
|
+
{%- assign site_domain = site_domain | split: "#" | first %}
|
|
82
|
+
{%- assign site_domain = site_domain | downcase %}
|
|
83
|
+
|
|
84
|
+
{%- comment %} If domains don't match, add external link icon {% endcomment %}
|
|
85
|
+
{%- if link_domain != site_domain -%}
|
|
86
|
+
{%- assign auto_icon = "fa-solid fa-external-link" %}
|
|
87
|
+
{%- assign icon_position = "end" %}
|
|
88
|
+
{%- endif -%}
|
|
89
|
+
{%- endif -%}
|
|
90
|
+
|
|
91
|
+
{%- if class != nil -%}
|
|
92
|
+
{%- assign link_class = class %}
|
|
93
|
+
{%- else -%}
|
|
94
|
+
{%- assign link_class = "link-" | append: color %}
|
|
95
|
+
{%- assign link_class = link_class | append: " link-offset-3 link-offset-3-hover link-underline-" %}
|
|
96
|
+
{%- assign link_class = link_class | append: color %}
|
|
97
|
+
{%- assign link_class = link_class | append: " link-underline-opacity-0 link-underline-opacity-100-hover" %}
|
|
98
|
+
{%- endif -%}
|
|
99
|
+
|
|
100
|
+
{%- comment %} --- Security attributes for external links --- {% endcomment %}
|
|
101
|
+
{%- if target == "_blank" -%}
|
|
102
|
+
{%- assign rel_attr = "noopener noreferrer" %}
|
|
103
|
+
{%- endif -%}
|
|
104
|
+
|
|
105
|
+
{%- comment %} --- Link name with optional icon --- {% endcomment %}
|
|
106
|
+
{%- comment %} Use manual icon if provided, otherwise use auto_icon if set {% endcomment %}
|
|
107
|
+
{%- assign final_icon = icon | default: auto_icon %}
|
|
108
|
+
{%- capture link_name -%}
|
|
109
|
+
{%- if final_icon != nil -%}
|
|
110
|
+
{%- if name != nil and icon_position == "end" -%}
|
|
111
|
+
{{ name }}<i class="{{ final_icon }} ms-1"></i>
|
|
112
|
+
{%- elsif name != nil and icon_position == "start" -%}
|
|
113
|
+
<i class="{{ final_icon }} me-1"></i>{{ name }}
|
|
114
|
+
{%- else -%}
|
|
115
|
+
<i class="{{ final_icon }}"></i>
|
|
116
|
+
{%- endif -%}
|
|
117
|
+
{%- else -%}
|
|
118
|
+
{{ name }}
|
|
119
|
+
{%- endif -%}
|
|
120
|
+
{%- endcapture -%}
|
|
121
|
+
|
|
122
|
+
{%- comment %} --- HTML: Anchor tag with attributes --- {% endcomment %}
|
|
123
|
+
<a
|
|
124
|
+
href="{{ href_value }}{% if anchor != nil %}#{{ anchor }}{% endif %}"
|
|
125
|
+
class="{{ link_class }}"
|
|
126
|
+
{%- if target != nil %} target="{{ target }}"{% endif %}
|
|
127
|
+
{%- if rel_attr != nil %} rel="{{ rel_attr }}"{% endif %}
|
|
128
|
+
{%- if role != nil %} role="{{ role }}"{% endif %}
|
|
129
|
+
{%- if aria_label != nil %} aria-label="{{ aria_label }}"{% endif %}
|
|
130
|
+
{%- if data_bs_toggle != nil %} data-bs-toggle="{{ data_bs_toggle }}"{% endif %}
|
|
131
|
+
{%- if data_bs_title != nil %} data-bs-title="{{ data_bs_title }}"{% endif %}
|
|
132
|
+
{%- if data_bs_placement != nil %} data-bs-placement="{{ data_bs_placement }}"{% endif %}>
|
|
133
|
+
{{- link_name | strip_newlines | strip -}}
|
|
134
|
+
</a>
|
|
135
|
+
{%- endcapture -%}
|
|
136
|
+
|
|
137
|
+
{%- if page.with_link -%}
|
|
138
|
+
{{- html_link }}
|
|
139
|
+
{%- endif -%}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Language Selector (Locales Dropdown)
|
|
4
|
+
Purpose: Renders dropdown menu for language/locale selection. Generates links
|
|
5
|
+
to same page in different language versions.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- Bootstrap dropdown: consistent UI pattern
|
|
10
|
+
- Language lookup: uses site.data.base.languages mapping
|
|
11
|
+
- URL construction: locale prefix + page URL
|
|
12
|
+
- Current language: defaults to English
|
|
13
|
+
- Icon: language globe icon from Font Awesome
|
|
14
|
+
|
|
15
|
+
Required Inputs:
|
|
16
|
+
- [array]: List of locale codes (e.g., ["es", "fr", "de"])
|
|
17
|
+
|
|
18
|
+
Optional Inputs:
|
|
19
|
+
- data: Locales array (overrides all fallbacks)
|
|
20
|
+
|
|
21
|
+
Data Source Hierarchy (priority):
|
|
22
|
+
1. include.data
|
|
23
|
+
2. page.with_locales_data
|
|
24
|
+
3. site.data.locales
|
|
25
|
+
4. site.data.base.locales
|
|
26
|
+
================================================================================
|
|
27
|
+
{% endcomment %}
|
|
28
|
+
|
|
29
|
+
{%- assign locales = include.data | default: page.with_locales_data | default: site.data.locales | default: site.data.base.locales %}
|
|
30
|
+
|
|
31
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
32
|
+
<div class="dropdown">
|
|
33
|
+
<button class="btn btn-sm btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Languages">
|
|
34
|
+
<i class="fa-solid fa-language"></i> {{ site.data.base.languages["en"] }}
|
|
35
|
+
</button>
|
|
36
|
+
<ul class="dropdown-menu">
|
|
37
|
+
{% for locale in locales %}
|
|
38
|
+
<li><a class="dropdown-item" href="{{ site.baseurl }}/{{ locale }}{{ page.url }}">{{ site.data.base.languages[locale] }}</a></li>
|
|
39
|
+
{% endfor %}
|
|
40
|
+
</ul>
|
|
41
|
+
</div>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Navigation Bar Component
|
|
4
|
+
Purpose: Renders fixed-top navigation bar with branding, responsive toggle,
|
|
5
|
+
and hierarchical menu items with dropdown support.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- Fixed top positioning: always visible during scroll
|
|
10
|
+
- Responsive hamburger menu: collapses on mobile
|
|
11
|
+
- Dropdown menus: multi-level navigation
|
|
12
|
+
- Brand image and manifestation text support
|
|
13
|
+
- Filtered navitems by visible_on='navbar'
|
|
14
|
+
|
|
15
|
+
Required Inputs:
|
|
16
|
+
- brand_image: Logo image filename
|
|
17
|
+
- navitems: Array of navigation items
|
|
18
|
+
|
|
19
|
+
Optional Inputs:
|
|
20
|
+
- brand_image_class, brand_image_height: Logo styling
|
|
21
|
+
- brand_manifestation: Tagline/subtitle text
|
|
22
|
+
- class: Container CSS classes
|
|
23
|
+
- navitems[].menu: Submenu array for dropdowns
|
|
24
|
+
|
|
25
|
+
Data Source Hierarchy (priority):
|
|
26
|
+
1. include.data
|
|
27
|
+
2. page.with_navbar_data
|
|
28
|
+
3. site.data.navbar
|
|
29
|
+
4. site.data.base.navbar
|
|
30
|
+
================================================================================
|
|
31
|
+
{% endcomment %}
|
|
32
|
+
|
|
33
|
+
{%- assign navbar = include.data | default: page.with_navbar_data | default: site.data.navbar | default: site.data.base.navbar %}
|
|
34
|
+
{%- assign schema = site.data.base.navbar_schema.properties["with_navbar_data"].properties %}
|
|
35
|
+
|
|
36
|
+
{%- assign navbar_class = navbar.class | default: schema.class.default %}
|
|
37
|
+
{%- assign navbar_brand_image = navbar.brand_image | default: schema.brand_image.default %}
|
|
38
|
+
{%- assign navbar_brand_image_class = navbar.brand_image_class | default: schema.brand_image_class.default %}
|
|
39
|
+
{%- assign navbar_brand_image_height = navbar.brand_image_height | default: schema.brand_image_height.default %}
|
|
40
|
+
{%- assign navbar_brand_manifestation = navbar.brand_manifestation | default: schema.brand_manifestation.default %}
|
|
41
|
+
{%- assign navbar_brand_manifestation_class = navbar.brand_manifestation_class | default: schema.brand_manifestation_class.default %}
|
|
42
|
+
{%- assign navbar_navitems = navbar.navitems | where: "visible_on", "navbar" | default: schema.navitems.default %}
|
|
43
|
+
|
|
44
|
+
<nav class="navbar bg-dark fixed-top navbar-expand-lg shadow{% if navbar_class != "" %} {{ navbar_class }}{% endif %}" aria-label="{{ include.arialable | default: 'navbar'}}" data-bs-theme="dark">
|
|
45
|
+
<div class="container">
|
|
46
|
+
|
|
47
|
+
{%- if navbar_brand_image != "" %}
|
|
48
|
+
<a class="navbar-brand" href="{{ site.baseurl }}/">
|
|
49
|
+
|
|
50
|
+
<img
|
|
51
|
+
class="d-inline-block align-text-middle me-2{% if navbar_brand_image_class != "" %} {{ navbar_brand_image_class }}{% endif %}"
|
|
52
|
+
src="{{ site.baseurl }}/assets/img/{{ navbar_brand_image }}"
|
|
53
|
+
height="{{ navbar_brand_image_height }}"
|
|
54
|
+
alt="{{ site.title }}" />
|
|
55
|
+
|
|
56
|
+
{%- if navbar_brand_manifestation != "" %}
|
|
57
|
+
<span class="d-inline-block align-text-middle fs-6 border-start border-1 border-light opacity-75 ps-3{% if navbar_brand_manifestation_class != "" %} {{ navbar_brand_manifestation_class }}{% endif %}">{{ navbar_brand_manifestation }}</span>
|
|
58
|
+
{%- endif %}
|
|
59
|
+
|
|
60
|
+
</a>
|
|
61
|
+
{%- endif %}
|
|
62
|
+
|
|
63
|
+
{% if navbar_navitems.size > 0 %}
|
|
64
|
+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
|
|
65
|
+
<span class="navbar-toggler-icon"></span>
|
|
66
|
+
</button>
|
|
67
|
+
|
|
68
|
+
<div class="collapse navbar-collapse" id="navbarContent">
|
|
69
|
+
<ul class="navbar-nav ms-auto">
|
|
70
|
+
{%- for navitem in navbar_navitems %}
|
|
71
|
+
{%- if navitem.menu.size == 0 %}
|
|
72
|
+
<li class="nav-item">
|
|
73
|
+
{%- include base/link.html.liquid
|
|
74
|
+
class = "nav-link"
|
|
75
|
+
name = navitem.name
|
|
76
|
+
link = navitem.link
|
|
77
|
+
role = "presentation"
|
|
78
|
+
icon = navitem.icon
|
|
79
|
+
%}
|
|
80
|
+
</li>
|
|
81
|
+
{%- else %}
|
|
82
|
+
<li class="nav-item dropdown">
|
|
83
|
+
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown-{{ forloop.index }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
84
|
+
<i class="{{ navitem.icon }} me-1"></i>{{ navitem.name }}
|
|
85
|
+
</a>
|
|
86
|
+
<ul class="dropdown-menu dropdown-menu-dark shadow">
|
|
87
|
+
{%- for dropdownitem in navitem.menu %}
|
|
88
|
+
<li>
|
|
89
|
+
{%- include base/link.html.liquid
|
|
90
|
+
class = "dropdown-item"
|
|
91
|
+
name = dropdownitem.name
|
|
92
|
+
link = dropdownitem.link
|
|
93
|
+
role = "presentation"
|
|
94
|
+
%}
|
|
95
|
+
</li>
|
|
96
|
+
{%- endfor %}
|
|
97
|
+
</ul>
|
|
98
|
+
</li>
|
|
99
|
+
{%- endif %}
|
|
100
|
+
{%- endfor %}
|
|
101
|
+
</ul>
|
|
102
|
+
</div>
|
|
103
|
+
{% endif %}
|
|
104
|
+
|
|
105
|
+
</div>
|
|
106
|
+
</nav>
|
|
@@ -0,0 +1,162 @@
|
|
|
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
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Design Logic:
|
|
9
|
+
- Multi-format output: card, text, list, table, component_table (default: list)
|
|
10
|
+
- Filters out current page from results (prevents self-linking)
|
|
11
|
+
- Reusable link component for consistent styling
|
|
12
|
+
- Optional filename display using page name (with .md stripped)
|
|
13
|
+
- Component table with status indicators from site.defaults
|
|
14
|
+
- DataTables integration for searchable/sortable table output
|
|
15
|
+
|
|
16
|
+
Required Inputs:
|
|
17
|
+
- data: Array of page or component objects to display
|
|
18
|
+
|
|
19
|
+
Optional Inputs:
|
|
20
|
+
- format: Output format: 'card' | 'text' | 'list' | 'table' | 'component_table'
|
|
21
|
+
- show_page_filename: Display page filename instead of title (true/false)
|
|
22
|
+
|
|
23
|
+
Data Object Properties:
|
|
24
|
+
- name, title, url, title_lead: Common properties
|
|
25
|
+
- component.name: Component identifier (for component_table format)
|
|
26
|
+
================================================================================
|
|
27
|
+
{% endcomment %}
|
|
28
|
+
|
|
29
|
+
{% assign data = include.data | default: nil %}
|
|
30
|
+
{% assign format = include.format | default: "list" %}
|
|
31
|
+
|
|
32
|
+
{% capture card %}
|
|
33
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
34
|
+
<div class="row g-3 mb-3 pt-1">
|
|
35
|
+
{%- for item in data %}
|
|
36
|
+
{%- if item.title != page.title %}
|
|
37
|
+
<div class="col-12 col-md-6">
|
|
38
|
+
<div class="p-3 pb-1 bg-light border rounded">
|
|
39
|
+
<div class="h5">
|
|
40
|
+
{%- if show_page_filename == "true" %}
|
|
41
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
42
|
+
{%- include base/link.html.liquid name=item_name link=item.url %}
|
|
43
|
+
{%- else %}
|
|
44
|
+
{%- include base/link.html.liquid name=item.title link=item.url %}
|
|
45
|
+
{%- endif %}
|
|
46
|
+
</div>
|
|
47
|
+
{%- if item.title_lead %}
|
|
48
|
+
<p class="mb-3">{{ item.title_lead }}</p>
|
|
49
|
+
{%- endif %}
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
{%- endif %}
|
|
53
|
+
{%- endfor %}
|
|
54
|
+
</div>
|
|
55
|
+
{%- endcapture %}
|
|
56
|
+
|
|
57
|
+
{%- capture text %}
|
|
58
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
59
|
+
<div class="row g-3 mb-3 pt-1">
|
|
60
|
+
{%- for item in data %}
|
|
61
|
+
{%- if item.title != page.title %}
|
|
62
|
+
<div class="col-12 col-md-6">
|
|
63
|
+
{%- if show_page_filename == "true" %}
|
|
64
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
65
|
+
{%- include base/link.html.liquid name=item_name link=item.url %}
|
|
66
|
+
{%- else %}
|
|
67
|
+
{%- include base/link.html.liquid name=item.title link=item.url %}
|
|
68
|
+
{%- endif %}
|
|
69
|
+
</div>
|
|
70
|
+
{%- endif %}
|
|
71
|
+
{%- endfor %}
|
|
72
|
+
</div>
|
|
73
|
+
{%- endcapture %}
|
|
74
|
+
|
|
75
|
+
{%- capture list %}
|
|
76
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
77
|
+
<ul>
|
|
78
|
+
{%- for item in data %}
|
|
79
|
+
{%- if item.title != page.title %}
|
|
80
|
+
{%- if show_page_filename == "true" %}
|
|
81
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
82
|
+
<li>{% include base/link.html.liquid name=item_name link=item.url %}{% if item.title_lead != nil %} — {{ item.title_lead }}{% endif %}</li>
|
|
83
|
+
{%- else %}
|
|
84
|
+
<li>{% include base/link.html.liquid name=item.title link=item.url %}{% if item.title_lead != nil %} — {{ item.title_lead }}{% endif %}</li>
|
|
85
|
+
{%- endif %}
|
|
86
|
+
{%- endif %}
|
|
87
|
+
{%- endfor %}
|
|
88
|
+
</ul>
|
|
89
|
+
{%- endcapture %}
|
|
90
|
+
|
|
91
|
+
{% capture table %}
|
|
92
|
+
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
93
|
+
<table class="table dataTable">
|
|
94
|
+
<thead class="table-light">
|
|
95
|
+
<tr>
|
|
96
|
+
<th>Name</th>
|
|
97
|
+
<th>Description</th>
|
|
98
|
+
</tr>
|
|
99
|
+
</thead>
|
|
100
|
+
<tbody>
|
|
101
|
+
{%- for item in data %}
|
|
102
|
+
<tr>
|
|
103
|
+
{%- if item.title != page.title %}
|
|
104
|
+
{%- if show_page_filename == "true" %}
|
|
105
|
+
{%- assign item_name = item.name | remove: '.md' %}
|
|
106
|
+
<td>{% include base/link.html.liquid name=item_name link=item.url %}</td>
|
|
107
|
+
{%- else %}
|
|
108
|
+
<td>{% include base/link.html.liquid name=item.title link=item.url %}</td>
|
|
109
|
+
{%- endif %}
|
|
110
|
+
{%- endif %}
|
|
111
|
+
<td>{{ item.title_lead }}</td>
|
|
112
|
+
</tr>
|
|
113
|
+
{%- endfor %}
|
|
114
|
+
</tbody>
|
|
115
|
+
</table>
|
|
116
|
+
{%- endcapture %}
|
|
117
|
+
|
|
118
|
+
{% capture component_table %}
|
|
119
|
+
<table class="table dataTable">
|
|
120
|
+
<thead class="table-light">
|
|
121
|
+
<tr>
|
|
122
|
+
<th>Name</th>
|
|
123
|
+
<th>Status</th>
|
|
124
|
+
<th>Description</th>
|
|
125
|
+
</tr>
|
|
126
|
+
</thead>
|
|
127
|
+
<tbody>
|
|
128
|
+
{%- for item in data %}
|
|
129
|
+
{% comment %} Get component status from site configuration file {% endcomment %}
|
|
130
|
+
{%- assign status_name = "with_" | append: item.component.name %}
|
|
131
|
+
{%- assign status = site.defaults[0].values[status_name] %}
|
|
132
|
+
{% comment %} Render component status {% endcomment %}
|
|
133
|
+
{%- if status == true %}
|
|
134
|
+
{%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is enabled globally and can be used on all site pages. It can be disabled either globally or at a page level."><i class="fa-solid fa-circle-check text-success"></i> Enabled</span>' %}
|
|
135
|
+
{%- elsif status == false %}
|
|
136
|
+
{%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is disabled globally and cannot be used in site pages. It can be enabled either globally or at a page level."><i class="fa-solid fa-circle-minus text-danger"></i> Disabled</span>' %}
|
|
137
|
+
{%- else %}
|
|
138
|
+
{%- assign status_icon = '<span data-bs-toggle="tooltip" data-bs-title="This component is enabled globally and can be used on all site pages. It cannot be disabled."><i class="fa-solid fa-circle-dot text-warning"></i> Internal</span>' %}
|
|
139
|
+
{%- endif %}
|
|
140
|
+
{% comment %} Render table rows {% endcomment %}
|
|
141
|
+
<tr>
|
|
142
|
+
<td>{% include base/link.html.liquid name=item.component.name link=item.url %}</td>
|
|
143
|
+
<td class="text-nowrap">{{ status_icon }}</td>
|
|
144
|
+
<td>{{ item.title_lead }}</td>
|
|
145
|
+
</tr>
|
|
146
|
+
{%- endfor %}
|
|
147
|
+
</tbody>
|
|
148
|
+
</table>
|
|
149
|
+
{% endcapture %}
|
|
150
|
+
|
|
151
|
+
{% case format %}
|
|
152
|
+
{% when "card" %}
|
|
153
|
+
{{ card }}
|
|
154
|
+
{% when "text" %}
|
|
155
|
+
{{ text }}
|
|
156
|
+
{% when "table" %}
|
|
157
|
+
{{ table }}
|
|
158
|
+
{% when "component_table" %}
|
|
159
|
+
{{ component_table }}
|
|
160
|
+
{% else %}
|
|
161
|
+
{{ list }}
|
|
162
|
+
{% endcase %}
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
- page.ogp.og.*, page.ogp.twitter.*: OG/Twitter property overrides
|
|
22
|
+
- page.excerpt, page.title_lead: Fallback for description
|
|
23
|
+
- site.description: Site-level description fallback
|
|
24
|
+
|
|
25
|
+
Data Source Hierarchy:
|
|
26
|
+
- page.ogp values always take precedence
|
|
27
|
+
- Default image: /assets/img/centos-social-share.png
|
|
28
|
+
- Default image alt: "The CentOS Project"
|
|
29
|
+
================================================================================
|
|
30
|
+
{% endcomment %}
|
|
31
|
+
|
|
32
|
+
{%- assign ogp = include.data | default: page.with_ogp_data | default: site.data.ogp | default: site.data.base.ogp %}
|
|
33
|
+
|
|
34
|
+
{%- comment %} === Presentation === {% endcomment %}
|
|
35
|
+
{%- comment %} --- Defaults --- {% endcomment %}
|
|
36
|
+
{%- assign ogp_og_type = ogp.og.type %}
|
|
37
|
+
|
|
38
|
+
{%- comment %} --- Common attributes for both `og` and `twitter` properties --- {% endcomment %}
|
|
39
|
+
{%- assign properties = "og,twitter" | split: "," %}
|
|
40
|
+
{%- for property in properties %}
|
|
41
|
+
|
|
42
|
+
{%- comment %} --- Title --- {% endcomment %}
|
|
43
|
+
{%- if page.ogp[property].title == nil %}
|
|
44
|
+
<meta property="{{ property }}:title" content="{{ page.title }}" />
|
|
45
|
+
{%- else %}
|
|
46
|
+
{%- endif %}
|
|
47
|
+
|
|
48
|
+
{%- comment %} --- URL --- {% endcomment %}
|
|
49
|
+
{%- if page.ogp[property].url == nil %}
|
|
50
|
+
<meta property="{{ property }}:url" content="{{ site.url }}{{ site.baseurl }}{{ page.url }}" />
|
|
51
|
+
{%- endif %}
|
|
52
|
+
|
|
53
|
+
{%- comment %} --- Description --- {% endcomment %}
|
|
54
|
+
{%- if page.ogp[property].description == nil %}
|
|
55
|
+
{%- if page.excrept %}
|
|
56
|
+
<meta property="{{ property }}:description" content="{{ site.excrept }}" />
|
|
57
|
+
{%- elsif page.title_lead %}
|
|
58
|
+
<meta property="{{ property }}:description" content="{{ page.title_lead }}" />
|
|
59
|
+
{%- else %}
|
|
60
|
+
<meta property="{{ property }}:description" content="{{ site.description }}" />
|
|
61
|
+
{%- endif %}
|
|
62
|
+
{%- endif %}
|
|
63
|
+
|
|
64
|
+
{%- comment %} --- Image --- {% endcomment %}
|
|
65
|
+
{%- if page.ogp[property].image == nil %}
|
|
66
|
+
<meta property="{{ property }}:image" content="{{ site.url }}{{ site.baseurl }}/assets/img/centos-social-share.png" />
|
|
67
|
+
{%- if property == "og" %}
|
|
68
|
+
<meta property="{{ property }}:image:secure_url" content="{{ site.url }}{{ site.baseurl }}/assets/img/centos-social-share.png" />
|
|
69
|
+
<meta property="{{ property }}:image:type" content="image/png" />
|
|
70
|
+
<meta property="{{ property }}:image:width" content="1200" />
|
|
71
|
+
<meta property="{{ property }}:image:height" content="630" />
|
|
72
|
+
{%- endif %}
|
|
73
|
+
{%- endif %}
|
|
74
|
+
|
|
75
|
+
{%- comment %} --- Image alternative text --- {% endcomment %}
|
|
76
|
+
{%- if page.ogp[property].image.alt == nil %}
|
|
77
|
+
<meta property="{{ property }}:image:alt" content="The CentOS Project" />
|
|
78
|
+
{%- endif %}
|
|
79
|
+
|
|
80
|
+
{%- comment %} --- Override common attributes in both `og` and `twitter` properties --- {% endcomment %}
|
|
81
|
+
{%- if property[0] == "og" %}
|
|
82
|
+
{%- for attribute in property[1] %}
|
|
83
|
+
{%- if attribute[0] == "image" or attribute[0] == "audio" or attribute[0] == "video" %}
|
|
84
|
+
{%- for item in attribute[1] %}
|
|
85
|
+
<meta property="{{ property[0] }}:{{ attribute[0] }}:{{ item[0] }}" content="{{ item[1] }}" />
|
|
86
|
+
{%- endfor %}
|
|
87
|
+
{%- else %}
|
|
88
|
+
<meta property="{{ property[0] }}:{{ attribute[0] }}" content="{{ attribute[1] }}" />
|
|
89
|
+
{%- endif %}
|
|
90
|
+
{%- endfor %}
|
|
91
|
+
{%- elsif property[0] == "twitter" %}
|
|
92
|
+
{%- for attribute in property[1] %}
|
|
93
|
+
{%- if attribute[0] == "image" or attribute[0] == "site" or attribute[0] == "creator" %}
|
|
94
|
+
{%- for item in attribute[1] %}
|
|
95
|
+
<meta property="{{ property[0] }}:{{ attribute[0] }}:{{ item[0] }}" content="{{ item[1] }}" />
|
|
96
|
+
{%- endfor %}
|
|
97
|
+
{%- else %}
|
|
98
|
+
<meta property="{{ property[0] }}:{{ attribute[0] }}" content="{{ attribute[1] }}" />
|
|
99
|
+
{%- endif %}
|
|
100
|
+
{%- endfor %}
|
|
101
|
+
{%- endif %}
|
|
102
|
+
{%- endfor %}
|
|
103
|
+
|
|
104
|
+
{%- comment %} --- Specific attributes for `og` property --- {% endcomment %}
|
|
105
|
+
{%- if ogp_og_type == nil %}
|
|
106
|
+
<meta property="og:type" content="website" />
|
|
107
|
+
{%- endif %}
|
|
108
|
+
|
|
109
|
+
{%- comment %} --- Specific attributes for `twitter` property --- {% endcomment %}
|
|
110
|
+
{%- if page.ogp.twitter.card == nil %}
|
|
111
|
+
<meta property="twitter:card" content="summary_large_image" />
|
|
112
|
+
{%- endif %}
|
|
113
|
+
{%- if page.ogp.twitter.site.id == nil %}
|
|
114
|
+
<meta property="twitter:site:id" content="@CentOS" />
|
|
115
|
+
{%- endif %}
|
|
116
|
+
{%- if page.ogp.twitter.creator.id == nil %}
|
|
117
|
+
<meta property="twitter:creator:id" content="@CentOS" />
|
|
118
|
+
{%- endif %}
|