jekyll-theme-centos 2.52.0.beta.84 → 2.52.0.beta.86
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/_config.yml +1 -8
- data/_data/base/calendar_schema.yml +156 -0
- data/_data/base/card_schema.yml +10 -2
- data/_data/base/event_schema.yml +19 -58
- data/_data/base/project_schema.yml +6 -1
- data/_includes/base/bits.html.liquid +3 -3
- data/_includes/base/calendar-events.html.liquid +49 -0
- data/_includes/base/calendar-init.html.liquid +148 -0
- data/_includes/base/calendar.html.liquid +70 -0
- data/_includes/base/card.html.liquid +2 -2
- data/_includes/base/color-table.html.liquid +1 -1
- data/_includes/base/configuration_variables-nested.html.liquid +1 -1
- data/_includes/base/configuration_variables.html.liquid +1 -1
- data/_includes/base/event.html.liquid +57 -2
- data/_includes/base/head.html.liquid +8 -1
- data/_includes/base/link.html.liquid +8 -0
- data/_includes/base/navindex.html.liquid +2 -2
- data/_sass/base/_calendar.scss +185 -0
- data/_sass/base/_customization.scss +19 -32
- data/_sass/base/_datatable.scss +125 -0
- data/assets/css/base/stylesheet.min.scss +5 -0
- data/assets/img/base/page-layout-default.svg +113 -134
- data/assets/img/base/page-with-alert.svg +348 -957
- data/assets/img/base/page-with-announcement.svg +363 -969
- data/assets/img/base/page-with-artwork.svg +327 -997
- data/assets/img/base/page-with-backtotop.svg +373 -918
- data/assets/img/base/page-with-bits.svg +278 -958
- data/assets/img/base/page-with-breadcrumb.svg +265 -958
- data/assets/img/base/page-with-breakingnews.svg +352 -969
- data/assets/img/base/page-with-calendar.svg +57 -0
- data/assets/img/base/page-with-copyright.svg +375 -916
- data/assets/img/base/page-with-datatable.svg +24 -824
- data/assets/img/base/page-with-event.svg +393 -463
- data/assets/img/base/page-with-footer.svg +375 -916
- data/assets/img/base/page-with-locales.svg +372 -917
- data/assets/img/base/page-with-project.svg +397 -599
- data/assets/img/base/page-with-shortcut.svg +373 -918
- data/assets/img/base/page-with-social.svg +373 -918
- data/assets/img/base/page-with-sponsors.svg +373 -918
- data/assets/img/base/page-with-title.svg +285 -545
- data/assets/img/base/page-with-toc.svg +268 -998
- data/assets/js/base/datatable.js +16 -1
- metadata +8 -1
|
@@ -27,7 +27,7 @@ of separate, nested DataTables for complex properties.
|
|
|
27
27
|
|
|
28
28
|
{% comment %} 3. Render the top-level table completely {% endcomment %}
|
|
29
29
|
<table class="{{ table_classes }}">
|
|
30
|
-
<thead
|
|
30
|
+
<thead>
|
|
31
31
|
<tr>
|
|
32
32
|
<th scope="col">{{ col_name }}</th>
|
|
33
33
|
{% if columns %}
|
|
@@ -16,10 +16,12 @@ Design Logic:
|
|
|
16
16
|
|
|
17
17
|
Required Inputs:
|
|
18
18
|
- title: Event name/title
|
|
19
|
+
- start: Event start (YYYY-MM-DD for an all-day event, or YYYY-MM-DDTHH:MM
|
|
20
|
+
to give it a specific start time on that same day)
|
|
19
21
|
|
|
20
22
|
Optional Inputs:
|
|
21
23
|
- description: Event description text
|
|
22
|
-
-
|
|
24
|
+
- end: Event inclusive end (same format as start), defaults to start
|
|
23
25
|
- location: Event location name
|
|
24
26
|
- color: Alert color scheme (default: "secondary")
|
|
25
27
|
- icon: Icon class (default: "fa-solid fa-calendar")
|
|
@@ -57,8 +59,61 @@ Data Source Hierarchy (priority):
|
|
|
57
59
|
{%- assign event_city = event.city | default: with_event_schema.city.default %}
|
|
58
60
|
{%- assign event_color = event.color | default: with_event_schema.color.default %}
|
|
59
61
|
{%- assign event_location = event.location | default: with_event_schema.location.default %}
|
|
60
|
-
{%- assign event_date = event.date | default: with_event_schema.date.default %}
|
|
61
62
|
{%- assign event_description = event.description | default: with_event_schema.description.default %}
|
|
63
|
+
|
|
64
|
+
{%- comment %}
|
|
65
|
+
Derive the same style of display string the old free-text `date` field
|
|
66
|
+
used to hold (e.g. "September 19 - 20, 2025") from the structured,
|
|
67
|
+
inclusive `start`/`end` ISO dates — collapsing the month/year whenever
|
|
68
|
+
both sides share it, spelling both out in full otherwise. No date
|
|
69
|
+
arithmetic here, only formatting and string comparison of the formatted
|
|
70
|
+
output; the calendar component (reading this same with_event_data) is
|
|
71
|
+
the one place that does inclusive-to-exclusive end-date arithmetic, in
|
|
72
|
+
JS. See the calendar component's event data contract documentation.
|
|
73
|
+
|
|
74
|
+
A `start` carrying a time-of-day (`YYYY-MM-DDTHH:MM`) is a same-day timed
|
|
75
|
+
event rather than a date range — it gets its own branch below that
|
|
76
|
+
appends the clock time(s) instead of running the range-collapsing logic.
|
|
77
|
+
{% endcomment %}
|
|
78
|
+
{%- assign event_start = event.start %}
|
|
79
|
+
{%- if event_start != "" and event_start != nil %}
|
|
80
|
+
{%- assign event_end = event.end | default: event_start %}
|
|
81
|
+
{%- if event_end == "" %}
|
|
82
|
+
{%- assign event_end = event_start %}
|
|
83
|
+
{%- endif %}
|
|
84
|
+
{%- if event_start contains "T" %}
|
|
85
|
+
{%- assign event_date = event_start | date: "%B %-d, %Y" %}
|
|
86
|
+
{%- assign event_start_time = event_start | date: "%-l:%M %p" %}
|
|
87
|
+
{%- if event_end != event_start %}
|
|
88
|
+
{%- assign event_end_time = event_end | date: "%-l:%M %p" %}
|
|
89
|
+
{%- assign event_date = event_date | append: ", " | append: event_start_time | append: " - " | append: event_end_time %}
|
|
90
|
+
{%- else %}
|
|
91
|
+
{%- assign event_date = event_date | append: ", " | append: event_start_time %}
|
|
92
|
+
{%- endif %}
|
|
93
|
+
{%- else %}
|
|
94
|
+
{%- assign event_start_ym = event_start | date: "%Y-%m" %}
|
|
95
|
+
{%- assign event_end_ym = event_end | date: "%Y-%m" %}
|
|
96
|
+
{%- assign event_start_y = event_start | date: "%Y" %}
|
|
97
|
+
{%- assign event_end_y = event_end | date: "%Y" %}
|
|
98
|
+
{%- if event_start == event_end %}
|
|
99
|
+
{%- assign event_date = event_start | date: "%B %-d, %Y" %}
|
|
100
|
+
{%- elsif event_start_ym == event_end_ym %}
|
|
101
|
+
{%- assign event_date_start = event_start | date: "%B %-d" %}
|
|
102
|
+
{%- assign event_date_end = event_end | date: "%-d, %Y" %}
|
|
103
|
+
{%- assign event_date = event_date_start | append: " - " | append: event_date_end %}
|
|
104
|
+
{%- elsif event_start_y == event_end_y %}
|
|
105
|
+
{%- assign event_date_start = event_start | date: "%B %-d" %}
|
|
106
|
+
{%- assign event_date_end = event_end | date: "%B %-d, %Y" %}
|
|
107
|
+
{%- assign event_date = event_date_start | append: " - " | append: event_date_end %}
|
|
108
|
+
{%- else %}
|
|
109
|
+
{%- assign event_date_start = event_start | date: "%B %-d, %Y" %}
|
|
110
|
+
{%- assign event_date_end = event_end | date: "%B %-d, %Y" %}
|
|
111
|
+
{%- assign event_date = event_date_start | append: " - " | append: event_date_end %}
|
|
112
|
+
{%- endif %}
|
|
113
|
+
{%- endif %}
|
|
114
|
+
{%- else %}
|
|
115
|
+
{%- assign event_date = "" %}
|
|
116
|
+
{%- endif %}
|
|
62
117
|
{%- assign event_icon = event.icon | default: with_event_schema.icon.default %}
|
|
63
118
|
{%- assign event_image_url = event.image_url | default: with_event_schema.image_url.default %}
|
|
64
119
|
{%- assign event_link = event.link | default: with_event_schema.link.default %}
|
|
@@ -11,7 +11,7 @@ Design Logic:
|
|
|
11
11
|
- Favicon support: multiple formats (16x16, 32x32, SVG with type, Apple Touch)
|
|
12
12
|
- Google Fonts: Montserrat (5 weights) and Source Code Pro (2 weights) via async stylesheet
|
|
13
13
|
- Breakingnews scroll offset: dynamic CSS calculation
|
|
14
|
-
- Conditional includes: OGP, Highlight.js, DataTables, FontAwesome (SVG+JS)
|
|
14
|
+
- Conditional includes: OGP, Highlight.js, DataTables, FontAwesome (SVG+JS), Event Calendar
|
|
15
15
|
- CSS prioritization: custom stylesheet last for override
|
|
16
16
|
- Script loading: Bootstrap base first (defer), then optional extensions, then UI behaviors
|
|
17
17
|
- Bootstrap and FontAwesome preloaded (high-priority fetch); CDN origins preconnected + dns-prefetched per active component
|
|
@@ -25,6 +25,7 @@ Optional Inputs:
|
|
|
25
25
|
- page.with_ogp, page.with_fontawesome: Include OGP/Font Awesome SVG+JS (boolean)
|
|
26
26
|
- page.with_breakingnews, page.with_highlight: Include breaking news/highlight
|
|
27
27
|
- page.with_datatable: Include DataTables (boolean)
|
|
28
|
+
- page.with_calendar: Include Event Calendar (boolean)
|
|
28
29
|
- page.with_breakingnews_data: Array of breaking news items
|
|
29
30
|
- page.with_backtotop: Include back-to-top button (boolean)
|
|
30
31
|
- page.with_copyvalue: Include copy-to-clipboard behavior (boolean)
|
|
@@ -67,6 +68,10 @@ Optional Inputs:
|
|
|
67
68
|
<link rel="preconnect" href="https://cdn.datatables.net" crossorigin />
|
|
68
69
|
<link rel="dns-prefetch" href="https://cdn.datatables.net" />
|
|
69
70
|
{%- endif %}
|
|
71
|
+
{%- if page.with_calendar %}
|
|
72
|
+
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
|
|
73
|
+
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net" />
|
|
74
|
+
{%- endif %}
|
|
70
75
|
<link rel="preload" href="{{ site.baseurl }}/assets/js/bootstrap.bundle.min.js" as="script" fetchpriority="high" />
|
|
71
76
|
{%- include base/fontawesome.html.liquid type="preload" %}
|
|
72
77
|
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&family=Source+Code+Pro:ital,wght@0,400;0,700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
|
@@ -121,6 +126,7 @@ Uses CSS custom properties for cleaner, more maintainable dynamic styling.
|
|
|
121
126
|
{%- include base/fontawesome.html.liquid type="head" %}
|
|
122
127
|
{%- include base/highlight.html.liquid type="head" %}
|
|
123
128
|
{%- include base/datatable.html.liquid type="head" %}
|
|
129
|
+
{%- include base/calendar.html.liquid type="head" %}
|
|
124
130
|
|
|
125
131
|
{%- comment %} JavaScript base — Bootstrap must execute before all component scripts {%- endcomment %}
|
|
126
132
|
<script src="{{ site.baseurl }}/assets/js/bootstrap.bundle.min.js" defer></script>
|
|
@@ -130,6 +136,7 @@ Uses CSS custom properties for cleaner, more maintainable dynamic styling.
|
|
|
130
136
|
{%- include base/fontawesome.html.liquid type="script" %}
|
|
131
137
|
{%- include base/highlight.html.liquid type="script" %}
|
|
132
138
|
{%- include base/datatable.html.liquid type="script" %}
|
|
139
|
+
{%- include base/calendar.html.liquid type="script" %}
|
|
133
140
|
|
|
134
141
|
{%- comment %} JavaScript UI behavior components — depend on Bootstrap and FontAwesome SVG+JS {%- endcomment %}
|
|
135
142
|
{%- include base/backtotop.html.liquid %}
|
|
@@ -64,6 +64,14 @@ Security & External Links:
|
|
|
64
64
|
{%- assign anchor = nil %}
|
|
65
65
|
{%- assign rel_attr = nil %}
|
|
66
66
|
|
|
67
|
+
{%- comment %} --- Security: neutralize dangerous URI schemes --- {% endcomment %}
|
|
68
|
+
{%- if link != nil -%}
|
|
69
|
+
{%- assign link_downcase = link | downcase -%}
|
|
70
|
+
{%- if link_downcase contains "javascript:" or link_downcase contains "data:" or link_downcase contains "vbscript:" -%}
|
|
71
|
+
{%- assign link = "#" -%}
|
|
72
|
+
{%- endif -%}
|
|
73
|
+
{%- endif -%}
|
|
74
|
+
|
|
67
75
|
{%- comment %} === Data processing === {% endcomment %}
|
|
68
76
|
{%- if link != nil -%}
|
|
69
77
|
{%- assign link_char1 = link | slice: 0, 1 -%}
|
|
@@ -129,7 +129,7 @@ Data Object Properties:
|
|
|
129
129
|
{% capture table %}
|
|
130
130
|
{% assign show_page_filename = include.show_page_filename | default: "false" %}
|
|
131
131
|
<table class="table dataTable">
|
|
132
|
-
<thead
|
|
132
|
+
<thead>
|
|
133
133
|
<tr>
|
|
134
134
|
<th>Name</th>
|
|
135
135
|
<th>Description</th>
|
|
@@ -155,7 +155,7 @@ Data Object Properties:
|
|
|
155
155
|
|
|
156
156
|
{% capture component_table %}
|
|
157
157
|
<table class="table dataTable">
|
|
158
|
-
<thead
|
|
158
|
+
<thead>
|
|
159
159
|
<tr>
|
|
160
160
|
<th>Name</th>
|
|
161
161
|
<th>Status</th>
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// ================================================================================
|
|
2
|
+
// Event Calendar (@event-calendar/build) theming
|
|
3
|
+
// ================================================================================
|
|
4
|
+
// Purpose: map the CentOS color palette onto the library's own CSS custom
|
|
5
|
+
// properties (--ec-*) instead of hand-rolling calendar styles.
|
|
6
|
+
//
|
|
7
|
+
// `body` prefix: event-calendar.min.css loads after this theme's own
|
|
8
|
+
// stylesheet (see head.html.liquid) and ships its own same-specificity
|
|
9
|
+
// `.ec { --ec-*: ...; }` block, so a plain `.ec { }` here would lose the
|
|
10
|
+
// cascade. `body .ec` bumps specificity above it.
|
|
11
|
+
//
|
|
12
|
+
// Dark mode keys off Bootstrap's `[data-bs-theme="dark"]`, not the
|
|
13
|
+
// library's own `.ec-dark`/`.ec-auto-dark` classes, to match every other
|
|
14
|
+
// Bootstrap component. Two selector branches below because the attribute
|
|
15
|
+
// can sit on `<html>` itself or on some other ancestor (e.g. `<nav>`), and
|
|
16
|
+
// one selector can't match both.
|
|
17
|
+
// ================================================================================
|
|
18
|
+
|
|
19
|
+
body .ec {
|
|
20
|
+
// --ec-bg-color is never applied to .ec itself, leaving the outer
|
|
21
|
+
// container transparent. --ec-surface-bg-color fills that gap (declared
|
|
22
|
+
// once here, cascades to the dark block below).
|
|
23
|
+
//
|
|
24
|
+
// Kept separate from --ec-bg-color: the library also derives
|
|
25
|
+
// --ec-day-bg-color, .ec-sidebar, and .ec-col-head from --ec-bg-color, so
|
|
26
|
+
// feeding it $light (to match the doc preview boxes) would flatten the
|
|
27
|
+
// day grid to the same color and lose contrast. --ec-bg-color stays
|
|
28
|
+
// $white.
|
|
29
|
+
background-color: var(--ec-surface-bg-color);
|
|
30
|
+
--ec-surface-bg-color: #{$light};
|
|
31
|
+
|
|
32
|
+
--ec-bg-color: #{$white};
|
|
33
|
+
--ec-text-color: #{$body-color};
|
|
34
|
+
--ec-border-color: #{$border-color};
|
|
35
|
+
|
|
36
|
+
--ec-button-bg-color: #{$white};
|
|
37
|
+
--ec-button-border-color: #{$border-color};
|
|
38
|
+
--ec-button-text-color: var(--bs-link-color);
|
|
39
|
+
--ec-button-active-bg-color: #{$primary};
|
|
40
|
+
--ec-button-active-border-color: #{$primary};
|
|
41
|
+
--ec-button-active-text-color: #{$white};
|
|
42
|
+
|
|
43
|
+
// --bs-pagination-hover-* only exists inside `.pagination`, so use the
|
|
44
|
+
// root-scoped tokens instead — also keeps this in sync with
|
|
45
|
+
// [data-bs-theme] without a separate dark-mode copy.
|
|
46
|
+
--ec-button-hover-bg-color: var(--bs-tertiary-bg);
|
|
47
|
+
--ec-button-hover-text-color: var(--bs-link-hover-color);
|
|
48
|
+
|
|
49
|
+
--ec-today-bg-color: #{map-get($theme-colors, 'centos-orange-50')};
|
|
50
|
+
--ec-highlight-color: #{map-get($theme-colors, 'centos-purple-50')};
|
|
51
|
+
|
|
52
|
+
--ec-event-bg-color: #{$primary};
|
|
53
|
+
--ec-event-text-color: #{$white};
|
|
54
|
+
--ec-bg-event-color: #{map-get($theme-colors, 'centos-purple-200')};
|
|
55
|
+
|
|
56
|
+
--ec-now-indicator-color: #{$danger};
|
|
57
|
+
--ec-popup-bg-color: #{$white};
|
|
58
|
+
|
|
59
|
+
// The library only resets .ec-event-title's font-size in list view;
|
|
60
|
+
// elsewhere it falls through to this theme's Bootstrap h4 size. Matched
|
|
61
|
+
// to the calendar's own body text size instead.
|
|
62
|
+
//
|
|
63
|
+
// Grid/all-day views also set `min-block-size: 1.5em` here for tap
|
|
64
|
+
// targets; since the element is `display: block`, the shrunk text stays
|
|
65
|
+
// top-biased inside that height. Flex + centered alignment fixes that (a
|
|
66
|
+
// no-op where the min-height isn't set).
|
|
67
|
+
.ec-event-title {
|
|
68
|
+
font-size: #{$font-size-base};
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Same h4 collision as .ec-event-title above; matched to body text size,
|
|
74
|
+
// kept bold so the two rows stay visually distinct. (.ec-day-head also
|
|
75
|
+
// doubles as the day-number cell in month view.)
|
|
76
|
+
.ec-day-head {
|
|
77
|
+
font-size: #{$font-size-base};
|
|
78
|
+
font-weight: 700;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// These are real headings, so they inherit this theme's
|
|
82
|
+
// `color: var(--bs-heading-color)` → `inherit` ($headings-color is
|
|
83
|
+
// unset). Normally that's the body color, but breaks wherever the
|
|
84
|
+
// calendar sits inside something that forces its own text color (e.g.
|
|
85
|
+
// the doc example's `.text-bg-light` preview, which forces black). Set
|
|
86
|
+
// explicitly instead of relying on inheritance.
|
|
87
|
+
.ec-title,
|
|
88
|
+
.ec-col-head,
|
|
89
|
+
.ec-day-head {
|
|
90
|
+
color: var(--ec-text-color);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Only gets a background when event data sets one inline; our example
|
|
94
|
+
// events don't, so default it to the event color instead of leaving it
|
|
95
|
+
// invisible.
|
|
96
|
+
.ec-event-tag {
|
|
97
|
+
background-color: var(--ec-event-bg-color);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// .ec-header is `position: sticky`, but the library only backgrounds its
|
|
101
|
+
// own .ec-sidebar cell inside it — the toolbar cell stays transparent, so
|
|
102
|
+
// scrolled-under content shows through. .ec-toolbar gets the same
|
|
103
|
+
// --ec-surface-bg-color as .ec to close that gap.
|
|
104
|
+
//
|
|
105
|
+
// The library also spaces the toolbar from the body with
|
|
106
|
+
// `margin-block-end: 1em` (not padding), so that gap isn't painted by the
|
|
107
|
+
// background above. Zeroed out and replaced with equal padding instead.
|
|
108
|
+
.ec-toolbar {
|
|
109
|
+
background-color: var(--ec-surface-bg-color);
|
|
110
|
+
margin-block-end: 0;
|
|
111
|
+
padding-block-end: 1em;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// The library's hover rule shares --ec-button-active-* with .ec-active, so
|
|
116
|
+
// hover and the persisted selection would look identical; `:not(.ec-active)`
|
|
117
|
+
// leaves the active button's fill alone on hover.
|
|
118
|
+
body .ec .ec-button:not(:disabled):hover:not(.ec-active) {
|
|
119
|
+
background-color: var(--ec-button-hover-bg-color);
|
|
120
|
+
border-color: var(--ec-button-border-color);
|
|
121
|
+
color: var(--ec-button-hover-text-color);
|
|
122
|
+
// Avoids tying with .ec-active's z-index:1 at the grouped buttons' 1px
|
|
123
|
+
// overlap seam, which made hover/active flicker near that pixel.
|
|
124
|
+
z-index: 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Event Calendar draws its prev/next glyph as a pure-CSS border trick (no
|
|
128
|
+
// icon-injection API exists). Swapped for real FontAwesome chevrons to
|
|
129
|
+
// match datatable's pagination icons (datatable.js). `rotate: none` cancels
|
|
130
|
+
// the library's LTR/RTL mirroring transform, sized for the old glyph; our
|
|
131
|
+
// `body .ec` prefix out-specifies its `[dir=rtl]` variant too. Coupled to
|
|
132
|
+
// FontAwesome's default "css" mode and "Font Awesome 7 Free" family
|
|
133
|
+
// (with_fontawesome_data.version default 7.0.1) — revisit if either changes.
|
|
134
|
+
//
|
|
135
|
+
// .ec-icon also needs resizing: the library sizes it at a fixed 1em for the
|
|
136
|
+
// old 0.5em glyph. `1.25em` matches FontAwesome's default icon width;
|
|
137
|
+
// `line-height: 1` mirrors FontAwesome's own rule instead of the button's 1.5.
|
|
138
|
+
body .ec .ec-icon.ec-prev,
|
|
139
|
+
body .ec .ec-icon.ec-next {
|
|
140
|
+
inline-size: 1.25em;
|
|
141
|
+
text-align: center;
|
|
142
|
+
line-height: 1;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
body .ec .ec-icon.ec-prev::after,
|
|
146
|
+
body .ec .ec-icon.ec-next::after {
|
|
147
|
+
content: "\f053"; // fa-chevron-left
|
|
148
|
+
font-family: "Font Awesome 7 Free";
|
|
149
|
+
font-weight: 900;
|
|
150
|
+
font-style: normal; // matches FontAwesome's own .fas rule; guards against inherited italics
|
|
151
|
+
border: none;
|
|
152
|
+
rotate: none;
|
|
153
|
+
inset-inline-start: 0;
|
|
154
|
+
block-size: auto;
|
|
155
|
+
inline-size: auto;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
body .ec .ec-icon.ec-next::after {
|
|
159
|
+
content: "\f054"; // fa-chevron-right
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// [data-bs-theme="dark"] may sit on <html> itself or on some other ancestor
|
|
163
|
+
// — two branches to match both (see header comment).
|
|
164
|
+
html[data-bs-theme="dark"] .ec,
|
|
165
|
+
html [data-bs-theme="dark"] .ec {
|
|
166
|
+
--ec-surface-bg-color: #{$dark};
|
|
167
|
+
--ec-bg-color: #{$dark};
|
|
168
|
+
--ec-text-color: #{$light};
|
|
169
|
+
--ec-border-color: #{map-get($theme-colors, 'centos-purple-800')};
|
|
170
|
+
|
|
171
|
+
--ec-button-bg-color: #{$dark};
|
|
172
|
+
--ec-button-border-color: #{map-get($theme-colors, 'centos-purple-800')};
|
|
173
|
+
--ec-button-active-bg-color: #{$primary};
|
|
174
|
+
--ec-button-active-border-color: #{$primary};
|
|
175
|
+
--ec-button-active-text-color: #{$white};
|
|
176
|
+
|
|
177
|
+
--ec-today-bg-color: #{map-get($theme-colors, 'centos-orange-900')};
|
|
178
|
+
--ec-highlight-color: #{map-get($theme-colors, 'centos-purple-900')};
|
|
179
|
+
|
|
180
|
+
--ec-event-bg-color: #{map-get($theme-colors, 'centos-purple-400')};
|
|
181
|
+
--ec-event-text-color: #{$dark};
|
|
182
|
+
--ec-bg-event-color: #{map-get($theme-colors, 'centos-purple-800')};
|
|
183
|
+
|
|
184
|
+
--ec-popup-bg-color: #{$dark};
|
|
185
|
+
}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
1
|
+
// Custom CSS rules and utility classes that override standard Bootstrap
|
|
2
|
+
// structure. Imported after `base/bootstrap` (so these win the cascade) and
|
|
3
|
+
// before third-party component overrides like base/calendar (so those win
|
|
4
|
+
// over these in turn).
|
|
3
5
|
// Here, you define and generate custom utility classes using the variables and
|
|
4
6
|
// maps that were set up previously.
|
|
5
7
|
|
|
6
8
|
// ================================================================================
|
|
7
|
-
// CSS Custom Properties (
|
|
9
|
+
// CSS Custom Properties (currently unused)
|
|
8
10
|
// ================================================================================
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
+
// Not read anywhere — head.html.liquid computes its own scroll-offset values
|
|
12
|
+
// inline from Liquid data instead, and the copy-button icon size below is
|
|
13
|
+
// hardcoded rather than referencing --highlight-icon-width/height. Kept as a
|
|
14
|
+
// record of the values those should stay in sync with.
|
|
11
15
|
:root {
|
|
12
16
|
// Breaking News Component
|
|
13
|
-
// Measurements used for calculating scroll-margin-top in head.html.liquid
|
|
14
17
|
--breakingnews-alert-height: 31px;
|
|
15
18
|
--navbar-height: 42px;
|
|
16
19
|
--heading-margin-top: 48px;
|
|
17
20
|
|
|
18
21
|
// Highlight.js Icon Sizing
|
|
19
|
-
// Used for copy button icon dimensions
|
|
20
22
|
--highlight-icon-width: 24px;
|
|
21
23
|
--highlight-icon-height: 24px;
|
|
22
24
|
}
|
|
@@ -142,7 +144,8 @@ body {
|
|
|
142
144
|
// Excluded from CSS icon styling via .announcement class.
|
|
143
145
|
// Alerts: Use CSS-based SVG icons ($centos-alert-icons map) for markdown-based
|
|
144
146
|
// alerts within .content, with type-specific icons per color.
|
|
145
|
-
// Only applied to .alert:not(.announcement) to
|
|
147
|
+
// Only applied to .alert:not(.announcement):not(.breakingnews), to
|
|
148
|
+
// avoid styling announcements and breaking news.
|
|
146
149
|
|
|
147
150
|
$centos-alert-icons: (
|
|
148
151
|
"primary": url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' height='1rem' viewBox='0 0 42.333 42.333'><g transform='rotate(45 -180.13 -610.203) scale(1.0529)'><circle cx='388.123' cy='-290.716' r='20.103' style='fill:rgba(#{to-rgb(shade-color(map-get($theme-colors, 'primary'), 60%))},1);stroke:none;stroke-width:1.32292;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke;stop-color:#{to-rgb(shade-color(map-get($theme-colors, 'primary'), 60%))}'/><path d='M377.366-301.473v6.301l-4.456 4.456 4.456 4.456v6.302h6.302l4.456 4.456 4.456-4.456h6.301v-6.302l4.456-4.456-4.456-4.456v-6.301h-6.301l-4.456-4.456-4.456 4.456zm2.271 4.183 1.913-1.912 3.227 3.227v1.913h-1.912zm-2.163 5.222h4.565l1.352 1.352-1.352 1.353h-4.564zm9.297-9.297h2.705v4.564l-1.352 1.353-1.353-1.353zm.091 7.607 1.261 1.282 1.26-1.283-.015 1.798 1.798-.016-1.282 1.26 1.283 1.261-1.798-.015.016 1.798-1.26-1.282-1.261 1.283.015-1.799-1.798.016 1.282-1.26-1.283-1.26 1.799.015zm-7.225 9.617 3.228-3.228h1.912v1.913l-3.227 3.227zm11.833-11.834 3.228-3.227 1.913 1.912-3.228 3.228h-1.912zm-4.698 11.345 1.352-1.352 1.352 1.352v4.564h-2.704zm6.085-6.085 1.352-1.353h4.564v2.705h-4.564zm-1.387 3.346h1.913l3.228 3.228-1.913 1.912-3.228-3.227z' style='fill:%23fff;fill-opacity:1;stroke-width:9.12808;stroke-linecap:round;paint-order:fill markers stroke;stop-color:%23000'/></g></svg>"),
|
|
@@ -192,13 +195,11 @@ $centos-alert-icons: (
|
|
|
192
195
|
|
|
193
196
|
main {
|
|
194
197
|
// --------------------------------------------------------------------------------
|
|
195
|
-
//
|
|
196
|
-
//
|
|
197
|
-
// By default, when you access page headings from the page table of content
|
|
198
|
-
// (toc) links, the heading is hidden behind the navbar. This workaround
|
|
199
|
-
// fixes the linked headings visibility issue in the page.
|
|
200
|
-
// Also applies the same correction to accordion buttons for consistent behavior.
|
|
198
|
+
// Linked headings' bottom clearance.
|
|
201
199
|
// --------------------------------------------------------------------------------
|
|
200
|
+
// Navbar-independent baseline spacing for anchor-linked headings/figures.
|
|
201
|
+
// The fixed-navbar top clearance for these same selectors lives in the
|
|
202
|
+
// `.has-navbar main` block near the end of this file.
|
|
202
203
|
.content > h1,
|
|
203
204
|
.content > h2,
|
|
204
205
|
.content > h3,
|
|
@@ -289,25 +290,14 @@ main {
|
|
|
289
290
|
color: var(--bs-primary);
|
|
290
291
|
}
|
|
291
292
|
|
|
292
|
-
// Accordion containers'
|
|
293
|
-
//
|
|
294
|
-
//
|
|
295
|
-
// hidden behind the navbar. This correction ensures accordion containers remain
|
|
296
|
-
// visible when linked to, and works in conjunction with the dynamic calculation
|
|
297
|
-
// in head.html.liquid when breaking news is present.
|
|
298
|
-
//
|
|
299
|
-
// Note: Applied to .accordion container (not items) to avoid disrupting accordion
|
|
300
|
-
// item internal layout while still providing proper scroll margin and visual spacing.
|
|
293
|
+
// Accordion containers' bottom clearance — same as the headings/figure
|
|
294
|
+
// block above, applied to both `.accordion` and `.accordion-item` since an
|
|
295
|
+
// anchor can target either level.
|
|
301
296
|
.content .accordion,
|
|
302
297
|
.content .accordion-item {
|
|
303
298
|
scroll-margin-bottom: 100px;
|
|
304
299
|
}
|
|
305
300
|
|
|
306
|
-
// --------------------------------------------------------------------------------
|
|
307
|
-
// DataTable BS5 corrections
|
|
308
|
-
// --------------------------------------------------------------------------------
|
|
309
|
-
.content { .dt-container { margin-bottom: 1rem; } }
|
|
310
|
-
|
|
311
301
|
// --------------------------------------------------------------------------------
|
|
312
302
|
// Copy Value Component
|
|
313
303
|
// --------------------------------------------------------------------------------
|
|
@@ -370,10 +360,7 @@ main {
|
|
|
370
360
|
height: 1rem; /* Adjust icon size as needed */
|
|
371
361
|
}
|
|
372
362
|
code {
|
|
373
|
-
border
|
|
374
|
-
border-top: 1px;
|
|
375
|
-
border-right: 1px;
|
|
376
|
-
border-bottom: 1px;
|
|
363
|
+
border: 1px;
|
|
377
364
|
border-color: var(--bs-light-border-subtle);
|
|
378
365
|
border-style: solid;
|
|
379
366
|
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// ================================================================================
|
|
2
|
+
// DataTables (datatables.net) BS5 theming corrections
|
|
3
|
+
// ================================================================================
|
|
4
|
+
// Purpose: fix up the parts of DataTables' Bootstrap 5 styling integration
|
|
5
|
+
// that don't compose cleanly with this theme's own Bootstrap variables and
|
|
6
|
+
// tokens.
|
|
7
|
+
// ================================================================================
|
|
8
|
+
|
|
9
|
+
main {
|
|
10
|
+
// --------------------------------------------------------------------------------
|
|
11
|
+
// DataTable BS5 corrections
|
|
12
|
+
// --------------------------------------------------------------------------------
|
|
13
|
+
.content { .dt-container { margin-bottom: 0.5rem; } }
|
|
14
|
+
|
|
15
|
+
// Bootstrap paints table cells from `--bs-table-bg`, not `background-color`,
|
|
16
|
+
// so override that variable instead of adding a class. Scoped to `thead`
|
|
17
|
+
// only, without requiring `.table-light`: kramdown's `{:.table .dataTable}`
|
|
18
|
+
// IAL can't add a class to the generated `<thead>`, so a `.table-light`
|
|
19
|
+
// requirement would silently skip every Markdown-authored table.
|
|
20
|
+
.content {
|
|
21
|
+
table.dataTable thead {
|
|
22
|
+
--bs-table-bg: var(--bs-centos-purple-100);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// DataTables' bundled CSS never reads `--bs-table-striped-bg`; it paints
|
|
27
|
+
// striped rows with a hardcoded black box-shadow (`--dt-row-stripe`) that
|
|
28
|
+
// paints over any background-color, so neither the Bootstrap variable nor
|
|
29
|
+
// a class has any effect. Overridden directly with `--bs-light` — the same
|
|
30
|
+
// token driving the DataTables wrapper's `.bg-light` (datatable.js), so
|
|
31
|
+
// stripe and container share one semantic color.
|
|
32
|
+
// `:not(:hover)` defers to the hover rule below; `:not([class])` defers to
|
|
33
|
+
// contextual row classes like `.table-warning`.
|
|
34
|
+
.content {
|
|
35
|
+
table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1):not(:hover):not([class]) > * {
|
|
36
|
+
box-shadow: inset 0 0 0 9999px var(--bs-light);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// DataTables' own hover rule has the same box-shadow-over-background issue
|
|
41
|
+
// (`--dt-row-hover`, flat 7.5%-opacity black). Translucent purple composites
|
|
42
|
+
// over whatever's already on the row — plain, striped, or `.table-warning`
|
|
43
|
+
// — instead of needing to exclude any of them; alpha kept low (0.05) so it
|
|
44
|
+
// doesn't collide with the stripe color (`--bs-light`).
|
|
45
|
+
.content {
|
|
46
|
+
table.table.dataTable.table-hover > tbody > tr:hover > * {
|
|
47
|
+
box-shadow: inset 0 0 0 9999px rgba(var(--bs-primary-rgb), 0.05);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// DataTables marks sort state by opacity alone (idle/active), no hue and
|
|
52
|
+
// no icon-injection API — replaced with real FontAwesome glyphs so each
|
|
53
|
+
// header shows one icon matching its actual state. Coupled to
|
|
54
|
+
// with_fontawesome_data.version's default "Font Awesome 7 Free" family —
|
|
55
|
+
// revisit if that changes.
|
|
56
|
+
//
|
|
57
|
+
// Our selectors out-specify DataTables' own, but specificity wins per
|
|
58
|
+
// property, not per rule — every ::before/::after property that would
|
|
59
|
+
// conflict with a single centered glyph is redeclared below.
|
|
60
|
+
.content {
|
|
61
|
+
table.dataTable thead tr th .dt-column-order,
|
|
62
|
+
table.dataTable thead tr td .dt-column-order {
|
|
63
|
+
text-align: center;
|
|
64
|
+
line-height: 20px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Idle: orderable but not the active sort column/direction — single
|
|
68
|
+
// fa-sort (⇅) on ::before; ::after suppressed so only one glyph shows.
|
|
69
|
+
table.dataTable thead tr th.dt-orderable-asc:not(.dt-ordering-asc):not(.dt-ordering-desc) .dt-column-order::before,
|
|
70
|
+
table.dataTable thead tr td.dt-orderable-asc:not(.dt-ordering-asc):not(.dt-ordering-desc) .dt-column-order::before {
|
|
71
|
+
content: "\f0dc"; // fa-sort
|
|
72
|
+
font-family: "Font Awesome 7 Free";
|
|
73
|
+
font-weight: 900;
|
|
74
|
+
font-style: normal;
|
|
75
|
+
position: static;
|
|
76
|
+
line-height: inherit;
|
|
77
|
+
font-size: 0.8em;
|
|
78
|
+
opacity: 1;
|
|
79
|
+
color: var(--bs-centos-purple-300);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
table.dataTable thead tr th.dt-orderable-asc:not(.dt-ordering-asc):not(.dt-ordering-desc) .dt-column-order::after,
|
|
83
|
+
table.dataTable thead tr td.dt-orderable-asc:not(.dt-ordering-asc):not(.dt-ordering-desc) .dt-column-order::after {
|
|
84
|
+
display: none;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Ascending: ::before becomes fa-sort-up; ::after suppressed.
|
|
88
|
+
table.dataTable thead tr th.dt-ordering-asc .dt-column-order::before,
|
|
89
|
+
table.dataTable thead tr td.dt-ordering-asc .dt-column-order::before {
|
|
90
|
+
content: "\f0de"; // fa-sort-up
|
|
91
|
+
font-family: "Font Awesome 7 Free";
|
|
92
|
+
font-weight: 900;
|
|
93
|
+
font-style: normal;
|
|
94
|
+
position: static;
|
|
95
|
+
line-height: inherit;
|
|
96
|
+
font-size: 0.8em;
|
|
97
|
+
opacity: 1;
|
|
98
|
+
color: var(--bs-primary);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
table.dataTable thead tr th.dt-ordering-asc .dt-column-order::after,
|
|
102
|
+
table.dataTable thead tr td.dt-ordering-asc .dt-column-order::after {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Descending: ::after becomes fa-sort-down; ::before suppressed.
|
|
107
|
+
table.dataTable thead tr th.dt-ordering-desc .dt-column-order::after,
|
|
108
|
+
table.dataTable thead tr td.dt-ordering-desc .dt-column-order::after {
|
|
109
|
+
content: "\f0dd"; // fa-sort-down
|
|
110
|
+
font-family: "Font Awesome 7 Free";
|
|
111
|
+
font-weight: 900;
|
|
112
|
+
font-style: normal;
|
|
113
|
+
position: static;
|
|
114
|
+
line-height: inherit;
|
|
115
|
+
font-size: 0.8em;
|
|
116
|
+
opacity: 1;
|
|
117
|
+
color: var(--bs-primary);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
table.dataTable thead tr th.dt-ordering-desc .dt-column-order::before,
|
|
121
|
+
table.dataTable thead tr td.dt-ordering-desc .dt-column-order::before {
|
|
122
|
+
display: none;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -33,3 +33,8 @@
|
|
|
33
33
|
|
|
34
34
|
// 6. Add additional custom code here
|
|
35
35
|
@import "base/customization";
|
|
36
|
+
|
|
37
|
+
// 7. Third-party component theme overrides (must load after our own
|
|
38
|
+
// customizations so component-specific corrections win the cascade).
|
|
39
|
+
@import "base/calendar";
|
|
40
|
+
@import "base/datatable";
|