jekyll-theme-centos 2.52.0.beta.77 → 2.52.0.beta.79
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/project_schema.yml +8 -0
- data/_includes/base/artwork.html.liquid +4 -1
- data/_includes/base/breadcrumb.html.liquid +5 -1
- data/_includes/base/color-table.html.liquid +4 -1
- data/_includes/base/content.html.liquid +2 -1
- data/_includes/base/copyvalue.html.liquid +15 -4
- data/_includes/base/project.html.liquid +2 -1
- data/_includes/base/title.html.liquid +4 -1
- data/_includes/base/toc.html.liquid +4 -1
- data/_layouts/base/default.html +14 -5
- data/assets/js/base/backtotop.js +6 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1b990c61640d3b32c7cbd850d7a2cefd242c7dc294441e900cd5ba58c799f265
|
|
4
|
+
data.tar.gz: 4d4dee0ce7d789549891d898f6e319298a1e43b7d91a333e05837d2b4f347646
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '0983a61c93b725fbb45ae64b5b51e2314dc6e984784ca9ed1ec216a85eaa867b9cc7e36a342351978a441f59b3cbb165df970991873d5efcebef390a05c63dbd'
|
|
7
|
+
data.tar.gz: 1340c3efc761f3991f2440a47bbdba2c023f9a050765dc8093dfea21bce956e7e0d737a9551e1cff8833c5ae73dec0cab6b2e49ed48d9003dc55415053d57412
|
|
@@ -23,6 +23,14 @@ properties:
|
|
|
23
23
|
description: >-
|
|
24
24
|
Custom Bootstrap classes for the main project container, controlling
|
|
25
25
|
alignment, background, and text colors (e.g., `padding`, `bg-image`).
|
|
26
|
+
content_class:
|
|
27
|
+
type: string
|
|
28
|
+
default: flex-column align-items-center py-5
|
|
29
|
+
description: >-
|
|
30
|
+
Custom Bootstrap classes for the inner content wrapper (the card
|
|
31
|
+
rendered inside the project container). Controls flex alignment
|
|
32
|
+
— e.g., swap `align-items-center` for `align-items-start` or
|
|
33
|
+
`align-items-end` to control text/content direction.
|
|
26
34
|
screenshot:
|
|
27
35
|
type: string
|
|
28
36
|
default: ""
|
|
@@ -20,6 +20,8 @@ Optional Inputs:
|
|
|
20
20
|
- class: Container div CSS classes
|
|
21
21
|
- image_class: Image element CSS classes
|
|
22
22
|
- data: Artwork data object (overrides fallbacks)
|
|
23
|
+
- column_class: Bootstrap column class for the row wrapper (set by the layout to
|
|
24
|
+
keep this component aligned with the content column; defaults to "col")
|
|
23
25
|
|
|
24
26
|
Data Source Hierarchy (priority):
|
|
25
27
|
1. include.data
|
|
@@ -50,10 +52,11 @@ Data Source Hierarchy (priority):
|
|
|
50
52
|
{%- assign artwork_alt = with_artwork_data.alt | default: with_artwork_schema.alt.default %}
|
|
51
53
|
{%- assign artwork_class = with_artwork_data.class | default: with_artwork_schema.class.default %}
|
|
52
54
|
{%- assign artwork_image_class = with_artwork_data.image_class | default: with_artwork_schema.image_class.default %}
|
|
55
|
+
{%- assign column_class = include.column_class | default: 'col' %}
|
|
53
56
|
|
|
54
57
|
{%- comment %} --- HTML --- {% endcomment %}
|
|
55
58
|
<div class="row mb-3">
|
|
56
|
-
<div class="{{
|
|
59
|
+
<div class="{{ column_class }}">
|
|
57
60
|
<div class="{{ artwork_class }}">
|
|
58
61
|
{%- if artwork_image contains "://" %}
|
|
59
62
|
<img src="{{ artwork_image }}" class="{{ artwork_image_class }}" alt="{{ artwork_alt }}" />
|
|
@@ -20,6 +20,8 @@ Required Inputs:
|
|
|
20
20
|
|
|
21
21
|
Optional Inputs:
|
|
22
22
|
- with_breadcrumb_data.arialabel: aria-label for the <nav> element (default: "breadcrumb")
|
|
23
|
+
- column_class (include param): Bootstrap column class for the row wrapper (set by
|
|
24
|
+
the layout to keep this component aligned with the content column; defaults to "col")
|
|
23
25
|
|
|
24
26
|
Data Source Hierarchy:
|
|
25
27
|
- with_breadcrumb: include.with_breadcrumb → page.with_breadcrumb
|
|
@@ -47,8 +49,10 @@ Data Source Hierarchy:
|
|
|
47
49
|
{%- comment %} Use plugin-provided locale (set for localized pages, defaults to 'en') {%- endcomment %}
|
|
48
50
|
{%- assign detected_locale = page.locale | default: 'en' %}
|
|
49
51
|
|
|
52
|
+
{%- assign column_class = include.column_class | default: 'col' %}
|
|
53
|
+
|
|
50
54
|
<div class="row small mb-3">
|
|
51
|
-
<div class="
|
|
55
|
+
<div class="{{ column_class }}">
|
|
52
56
|
<nav aria-label="{{ with_breadcrumb_data.arialabel | default: with_breadcrumb_schema.arialabel.default | default: 'breadcrumb' }}">
|
|
53
57
|
<ol class="breadcrumb mb-0">
|
|
54
58
|
{%- comment %} Home link - adjust for locale {%- endcomment %}
|
|
@@ -18,13 +18,16 @@
|
|
|
18
18
|
{%- else %}
|
|
19
19
|
{%- assign _item_name = item.name %}
|
|
20
20
|
{%- endif %}
|
|
21
|
+
{%- assign _webaim_fcolor = item.text_color_hex | remove: '#' | upcase %}
|
|
22
|
+
{%- assign _webaim_bcolor = item.hex | remove: '#' | upcase %}
|
|
23
|
+
{%- capture _webaim_link %}https://webaim.org/resources/contrastchecker/?fcolor={{ _webaim_fcolor }}&bcolor={{ _webaim_bcolor }}{%- endcapture %}
|
|
21
24
|
<tr>
|
|
22
25
|
<td class="text-nowrap">{{ _item_name }}</td>
|
|
23
26
|
<td class="text-nowrap"><i class="fas fa-circle fa-xl" style="color: {{ item.hex }}"></i><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy hex value" data-copy-value="{{ item.hex }}" aria-label="Copy hex value {{ item.hex }}"><code>{{ item.hex }}</code> <span class="fa-regular fa-copy"></span></span></td>
|
|
24
27
|
<td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy RGB value" data-copy-value="{{ item.rgb }}" aria-label="Copy RGB value {{ item.rgb }}"><code>{{ item.rgb }}</code> <span class="fa-regular fa-copy"></span></span></td>
|
|
25
28
|
<td class="text-nowrap"><span role="button" class="copy-btn" data-bs-toggle="tooltip" data-bs-title="Copy HSV value" data-copy-value="{{ item.hsv }}" aria-label="Copy HSV value {{ item.hsv }}"><code>{{ item.hsv }}</code> <span class="fa-regular fa-copy"></span></span></td>
|
|
26
29
|
<td><span class="badge {{ item.text_badge }}">{{ item.text_color }}</span></td>
|
|
27
|
-
<td class="text-nowrap"><code>{{ item.contrast_ratio | remove: '`' }}</code>
|
|
30
|
+
<td class="text-nowrap"><code>{{ item.contrast_ratio | remove: '`' }}</code> {% include base/link.html.liquid link=_webaim_link target="_blank" class="text-decoration-none" icon="fas fa-external-link-alt" data_bs_toggle="tooltip" data_bs_title="Verify with WebAIM" aria_label="Verify contrast ratio with WebAIM" %}</td>
|
|
28
31
|
<td class="text-nowrap">{% if item.wcag_2_2_aa %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Exceeds WCAG 2.2 AA standard (4.5:1 minimum)"><i class="fas fa-circle-check text-success"></i></span>{% else %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Underperforms WCAG 2.2 AA standard (4.5:1 minimum)"><i class="fas fa-circle-xmark text-danger"></i></span>{% endif %} <code>{{ item.wcag_2_2_aa_margin | remove: '`' }}</code></td>
|
|
29
32
|
<td class="text-nowrap">{% if item.wcag_2_2_aaa %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Exceeds WCAG 2.2 AAA standard (7.0:1 minimum)"><i class="fas fa-circle-check text-success"></i></span>{% else %}<span class="d-inline-block" data-bs-toggle="tooltip" title="Underperforms WCAG 2.2 AAA standard (7.0:1 minimum)"><i class="fas fa-circle-xmark text-danger"></i></span>{% endif %} <code>{{ item.wcag_2_2_aaa_margin | remove: '`' }}</code></td>
|
|
30
33
|
</tr>
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
| default: site.data[content_schema_key]
|
|
15
15
|
| default: site.data.base[content_schema_key]
|
|
16
16
|
-%}
|
|
17
|
-
{%- assign class =
|
|
17
|
+
{%- assign class = include.column_class
|
|
18
|
+
| default: with_content_data.class
|
|
18
19
|
| default: content_schema.properties.with_content_data.properties.class.default
|
|
19
20
|
| default: 'col' -%}
|
|
20
21
|
<div class="row mb-3">
|
|
@@ -2,18 +2,29 @@
|
|
|
2
2
|
================================================================================
|
|
3
3
|
Template: Copy Value Component
|
|
4
4
|
Purpose: Copy to clipboard with visual feedback (checkmark + tooltip).
|
|
5
|
-
|
|
5
|
+
Decodes HTML-entity-escaped values back to plain text before copying.
|
|
6
6
|
================================================================================
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Required Usage (in template):
|
|
9
9
|
<span role="button" class="copy-btn" data-copy-value="{{ command | escape }}"
|
|
10
10
|
data-bs-toggle="tooltip" data-bs-title="Copy command">
|
|
11
11
|
<span class="fa-regular fa-copy"></span>
|
|
12
12
|
</span>
|
|
13
13
|
|
|
14
|
+
SECURITY — `data-copy-value` MUST always go through Liquid's `| escape` (or
|
|
15
|
+
equivalent HTML-attribute encoding) at the point where it is written, with no
|
|
16
|
+
exception for values that "look safe". The JS below decodes HTML entities
|
|
17
|
+
(", &, ', …) back to plain text before copying so the clipboard
|
|
18
|
+
receives the original string rather than its escaped form — this decoding is
|
|
19
|
+
a UX convenience, not sanitization, and provides no protection if the value
|
|
20
|
+
was interpolated unescaped in the first place. An unescaped, attacker-
|
|
21
|
+
influenced value (a query parameter, CMS field, etc.) placed directly in
|
|
22
|
+
data-copy-value breaks out of the HTML attribute at render time, before this
|
|
23
|
+
script ever runs.
|
|
24
|
+
|
|
14
25
|
Strategic Design Logic:
|
|
15
|
-
-
|
|
16
|
-
|
|
26
|
+
- HTML entity decoding: reverses ", &, ' encoding so the
|
|
27
|
+
clipboard receives plain text, independent of how the value was escaped
|
|
17
28
|
- Visual feedback: checkmark icon + success tooltip
|
|
18
29
|
- Auto-reset: returns to original state after delay
|
|
19
30
|
- Clipboard API: native browser copy functionality
|
|
@@ -46,6 +46,7 @@ Data Source Hierarchy (priority):
|
|
|
46
46
|
{%- if with_project -%}
|
|
47
47
|
|
|
48
48
|
{% assign project_class = with_project_data.class | default: with_project_schema.class.default %}
|
|
49
|
+
{% assign project_content_class = with_project_data.content_class | default: with_project_schema.content_class.default %}
|
|
49
50
|
{% assign project_screenshot = with_project_data.screenshot | default: with_project_schema.screenshot.default %}
|
|
50
51
|
{% assign project_screenshot_class = with_project_data.screenshot_class | default: with_project_schema.screenshot_class.default %}
|
|
51
52
|
{% assign project_screenshot_alt = with_project_data.screenshot_alt | default: with_project_schema.screenshot_alt.default %}
|
|
@@ -69,7 +70,7 @@ Data Source Hierarchy (priority):
|
|
|
69
70
|
<div class="d-flex{% if project_class != "" %} {{ project_class }}{% endif %}">
|
|
70
71
|
<div class="container{% if with_navbar %} pt-5{% endif %}">
|
|
71
72
|
{% include base/card.html.liquid
|
|
72
|
-
class =
|
|
73
|
+
class = project_content_class
|
|
73
74
|
color = "primary"
|
|
74
75
|
screenshot = project_screenshot
|
|
75
76
|
screenshot_class = project_screenshot_class
|
|
@@ -22,6 +22,8 @@ Optional Inputs (from data objects):
|
|
|
22
22
|
|
|
23
23
|
Optional Inputs (from include):
|
|
24
24
|
- data: Title configuration object
|
|
25
|
+
- column_class: Bootstrap column class for the row wrapper (set by the layout to
|
|
26
|
+
keep this component aligned with the content column; defaults to "col")
|
|
25
27
|
|
|
26
28
|
Data Source Hierarchy (in priority order):
|
|
27
29
|
1. include.data - Explicitly passed configuration
|
|
@@ -54,9 +56,10 @@ Conditional Logic:
|
|
|
54
56
|
{%- assign title_class = with_title_data.title_class | default: with_title_schema.title_class.default %}
|
|
55
57
|
{%- assign title_lead = with_title_data.title_lead | default: page.title_lead %}
|
|
56
58
|
{%- assign title_lead_class = with_title_data.title_lead_class | default: with_title_schema.title_lead_class.default %}
|
|
59
|
+
{%- assign column_class = include.column_class | default: 'col' %}
|
|
57
60
|
|
|
58
61
|
<div class="row mb-3">
|
|
59
|
-
<div class="{{
|
|
62
|
+
<div class="{{ column_class }}">
|
|
60
63
|
<div class="{{ class }}">
|
|
61
64
|
<p class="{{ title_class }}">{{ title }}</p>
|
|
62
65
|
{% if title_lead != "" %}
|
|
@@ -31,6 +31,8 @@ Optional Inputs (from data objects):
|
|
|
31
31
|
|
|
32
32
|
Optional Inputs (from include):
|
|
33
33
|
- data: TOC configuration object
|
|
34
|
+
- column_class: Bootstrap column class for the row wrapper (set by the layout to
|
|
35
|
+
keep this component aligned with the content column; defaults to "col")
|
|
34
36
|
|
|
35
37
|
Data Source Hierarchy (in priority order):
|
|
36
38
|
- with_toc: include.with_toc → page.with_toc
|
|
@@ -59,12 +61,13 @@ Data Source Hierarchy (in priority order):
|
|
|
59
61
|
{%- assign sanitize = with_toc_data.sanitize | default: with_toc_schema["sanitize"].default %}
|
|
60
62
|
{%- assign skip_no_ids = with_toc_data.skip_no_ids | default: with_toc_schema["skip_no_ids"].default %}
|
|
61
63
|
{%- assign flat_toc = with_toc_data.flat_toc | default: with_toc_schema["flat_toc"].default %}
|
|
64
|
+
{%- assign column_class = include.column_class | default: 'col' %}
|
|
62
65
|
|
|
63
66
|
{%- comment %} === Presentation === {% endcomment %}
|
|
64
67
|
|
|
65
68
|
{%- comment %} --- HTML --- {% endcomment %}
|
|
66
69
|
<div class="row mb-3">
|
|
67
|
-
<div class="{{
|
|
70
|
+
<div class="{{ column_class }}">
|
|
68
71
|
<div class="accordion shadow-sm" id="pageToc">
|
|
69
72
|
<div class="accordion-item">
|
|
70
73
|
<div class="accordion-header" id="flush-headingOne">
|
data/_layouts/base/default.html
CHANGED
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
{% include base/breakingnews.html.liquid -%}
|
|
11
11
|
|
|
12
|
+
{%- assign with_content_data = page.with_content_data
|
|
13
|
+
| default: site.data.content
|
|
14
|
+
| default: site.data.base.content
|
|
15
|
+
-%}
|
|
16
|
+
{%- assign content_schema = site.data.content_schema | default: site.data.base.content_schema -%}
|
|
17
|
+
{%- assign content_class = with_content_data.class
|
|
18
|
+
| default: content_schema.properties.with_content_data.properties.class.default
|
|
19
|
+
| default: 'col' -%}
|
|
20
|
+
|
|
12
21
|
<main class="container py-3">
|
|
13
22
|
|
|
14
23
|
{%- include base/announcement.html.liquid %}
|
|
@@ -17,15 +26,15 @@
|
|
|
17
26
|
|
|
18
27
|
{% include base/event.html.liquid %}
|
|
19
28
|
|
|
20
|
-
{% include base/breadcrumb.html.liquid %}
|
|
29
|
+
{% include base/breadcrumb.html.liquid column_class=content_class %}
|
|
21
30
|
|
|
22
|
-
{% include base/title.html.liquid %}
|
|
31
|
+
{% include base/title.html.liquid column_class=content_class %}
|
|
23
32
|
|
|
24
|
-
{% include base/artwork.html.liquid %}
|
|
33
|
+
{% include base/artwork.html.liquid column_class=content_class %}
|
|
25
34
|
|
|
26
|
-
{% include base/toc.html.liquid %}
|
|
35
|
+
{% include base/toc.html.liquid column_class=content_class %}
|
|
27
36
|
|
|
28
|
-
{% include base/content.html.liquid %}
|
|
37
|
+
{% include base/content.html.liquid column_class=content_class %}
|
|
29
38
|
|
|
30
39
|
</main>
|
|
31
40
|
|
data/assets/js/base/backtotop.js
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
// Reads configuration from data attributes on this script tag
|
|
3
3
|
// Applied via backtotop.html.liquid template with data attributes
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// This script tag lives in <head>, before <body> exists. defer normally
|
|
6
|
+
// delays execution until after parsing, but consumers that inline this
|
|
7
|
+
// file (e.g. monolith bundling) drop the src that defer depends on, so the
|
|
8
|
+
// wait for DOMContentLoaded is done explicitly instead of relying on it.
|
|
9
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
6
10
|
const scriptTag = document.getElementById('centos-backtop')
|
|
7
11
|
|
|
8
12
|
if (!scriptTag) {
|
|
@@ -17,4 +21,4 @@
|
|
|
17
21
|
}
|
|
18
22
|
|
|
19
23
|
addBackToTop(config)
|
|
20
|
-
})
|
|
24
|
+
})
|