jekyll-theme-centos 2.52.0.beta.46 → 2.52.0.beta.48
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/bits.yml +5 -5
- data/_data/base/locales_schema.yml +142 -9
- data/_data/base/social.yml +22 -21
- data/_data/base/social_schema.yml +10 -6
- data/_data/base/sponsors.yml +41 -0
- data/_data/base/sponsors_schema.yml +73 -0
- data/_includes/base/announcement.html.liquid +2 -0
- data/_includes/base/artwork.html.liquid +2 -0
- data/_includes/base/bits.html.liquid +2 -0
- data/_includes/base/breadcrumb.html.liquid +2 -0
- data/_includes/base/breakingnews.html.liquid +2 -0
- data/_includes/base/configuration-variables-nested.html.liquid +98 -0
- data/_includes/base/configuration-variables.html.liquid +98 -0
- data/_includes/base/copyright.html.liquid +3 -1
- data/_includes/base/event.html.liquid +2 -0
- data/_includes/base/footer.html.liquid +62 -0
- data/_includes/base/locales.html.liquid +2 -1
- data/_includes/base/navbar.html.liquid +2 -0
- data/_includes/base/project.html.liquid +2 -0
- data/_includes/base/shortcut.html.liquid +9 -6
- data/_includes/base/social.html.liquid +26 -19
- data/_includes/base/sponsors-cards.html.liquid +58 -0
- data/_includes/base/sponsors-carousel.html.liquid +78 -0
- data/_includes/base/title.html.liquid +2 -0
- data/_includes/base/toc.html.liquid +2 -0
- data/_layouts/base/default.html +5 -51
- data/assets/img/base/example-sponsors-design.png +0 -0
- data/assets/img/base/example-sponsors-design.svg +226 -0
- data/assets/img/base/example-sponsors-logo-1.png +0 -0
- data/assets/img/base/example-sponsors-logo-1.svg +120 -0
- data/assets/img/base/example-sponsors-logo-2.png +0 -0
- data/assets/img/base/example-sponsors-logo-2.svg +116 -0
- data/assets/img/base/example-sponsors-logo-3.png +0 -0
- data/assets/img/base/example-sponsors-logo-3.svg +123 -0
- data/assets/img/base/example-sponsors-logo-4.png +0 -0
- data/assets/img/base/example-sponsors-logo-4.svg +116 -0
- data/assets/img/base/example-sponsors-logo-5.png +0 -0
- data/assets/img/base/example-sponsors-logo-5.svg +116 -0
- data/assets/img/base/example-sponsors-logo-6.png +0 -0
- data/assets/img/base/example-sponsors-logo-6.svg +116 -0
- data/assets/img/base/example-sponsors-logo-7.png +0 -0
- data/assets/img/base/example-sponsors-logo-7.svg +116 -0
- data/assets/img/base/example-sponsors-logo-8.png +0 -0
- data/assets/img/base/example-sponsors-logo-8.svg +110 -0
- data/assets/img/base/page-layout-default.png +0 -0
- data/assets/img/base/page-layout-default.svg +1291 -965
- data/assets/img/base/page-with-announcement.png +0 -0
- data/assets/img/base/page-with-announcement.svg +2 -6
- data/assets/img/base/page-with-backtotop.png +0 -0
- data/assets/img/base/page-with-backtotop.svg +622 -187
- data/assets/img/base/page-with-breakingnews.png +0 -0
- data/assets/img/base/page-with-breakingnews.svg +2 -42
- data/assets/img/base/page-with-copyright.png +0 -0
- data/assets/img/base/page-with-copyright.svg +785 -173
- data/assets/img/base/page-with-event.png +0 -0
- data/assets/img/base/page-with-event.svg +2 -6
- data/assets/img/base/page-with-locales.png +0 -0
- data/assets/img/base/page-with-locales.svg +614 -619
- data/assets/img/base/page-with-navbar.png +0 -0
- data/assets/img/base/page-with-navbar.svg +3 -42
- data/assets/img/base/page-with-project.png +0 -0
- data/assets/img/base/page-with-project.svg +2 -42
- data/assets/img/base/page-with-shortcut.png +0 -0
- data/assets/img/base/page-with-shortcut.svg +649 -172
- data/assets/img/base/page-with-social.png +0 -0
- data/assets/img/base/page-with-social.svg +740 -174
- data/assets/img/base/page-with-sponsors.png +0 -0
- data/assets/img/base/page-with-sponsors.svg +710 -0
- data/assets/img/base/page-with-toc.png +0 -0
- data/assets/img/base/page-with-toc.svg +3 -42
- metadata +30 -3
- /data/assets/img/base/{screenshot-example-1200x600.png → screenshot-1200x600.png} +0 -0
- /data/assets/img/base/{screenshot-example-1200x600.svg → screenshot-1200x600.svg} +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Generates the top-level property table and initiates the recursive generation
|
|
3
|
+
of separate, nested DataTables for complex properties.
|
|
4
|
+
{% endcomment %}
|
|
5
|
+
|
|
6
|
+
{% assign component = page.component.name %}
|
|
7
|
+
{% assign property_name = "with_" | append: component %}
|
|
8
|
+
{% assign property_name_schema = component | append: "_schema" %}
|
|
9
|
+
{% assign property_schema = include.schema | default: site.data[property_name_schema] | default: site.data.base[property_name_schema] %}
|
|
10
|
+
|
|
11
|
+
{% assign col_name = include.col_name | default: "Name" %}
|
|
12
|
+
{% assign col_type = include.col_type | default: "Type" %}
|
|
13
|
+
{% assign col_default = include.col_default | default: "Default" %}
|
|
14
|
+
{% assign col_description = include.col_description | default: "Description" %}
|
|
15
|
+
|
|
16
|
+
{% assign columns = include.columns | default: property_schema.columns %}
|
|
17
|
+
|
|
18
|
+
{% if property_schema.properties %}
|
|
19
|
+
|
|
20
|
+
{% comment %} 1. Calculate the property count for the top table using | size. {% endcomment %}
|
|
21
|
+
{% assign property_count = property_schema.properties | size %}
|
|
22
|
+
|
|
23
|
+
{% comment %} 2. Determine the CSS classes for the top-level table. {% endcomment %}
|
|
24
|
+
{% assign table_classes = "table dataTable" %}
|
|
25
|
+
|
|
26
|
+
The `{{ page.component.name }}` {{ page.component.type }} {{ pt }} understands the following configuration variables:
|
|
27
|
+
|
|
28
|
+
{% comment %} 3. Render the top-level table completely {% endcomment %}
|
|
29
|
+
<table class="{{ table_classes }}">
|
|
30
|
+
<thead class="table-light">
|
|
31
|
+
<tr>
|
|
32
|
+
<th scope="col">{{ col_name }}</th>
|
|
33
|
+
{% if columns %}
|
|
34
|
+
{% for col in columns %}<th scope="col">{{ col.label }}</th>{% endfor %}
|
|
35
|
+
{% else %}
|
|
36
|
+
<th scope="col">{{ col_type }}</th>
|
|
37
|
+
<th scope="col">{{ col_default }}</th>
|
|
38
|
+
<th scope="col">{{ col_description }}</th>
|
|
39
|
+
{% endif %}
|
|
40
|
+
</tr>
|
|
41
|
+
</thead>
|
|
42
|
+
<tbody>
|
|
43
|
+
{% for property in property_schema.properties -%}
|
|
44
|
+
{% assign prop_key = property[0] %}
|
|
45
|
+
{% assign prop_details = property[1] %}
|
|
46
|
+
<tr>
|
|
47
|
+
<td>{{ prop_key }}</td>
|
|
48
|
+
{% if columns %}
|
|
49
|
+
{% for col in columns %}<td>{{ prop_details[col.key] | strip_newlines | markdownify | default: "—" }}</td>{% endfor %}
|
|
50
|
+
{% else %}
|
|
51
|
+
<td>{{ prop_details.type | strip_newlines | markdownify | default: "—" }}</td>
|
|
52
|
+
<td>{{ prop_details.default | strip_newlines | markdownify | default: "—" }}</td>
|
|
53
|
+
<td>{{ prop_details.description | strip_newlines | markdownify | default: "—" }}</td>
|
|
54
|
+
{% endif %}
|
|
55
|
+
</tr>
|
|
56
|
+
{% endfor -%}
|
|
57
|
+
</tbody>
|
|
58
|
+
</table>
|
|
59
|
+
|
|
60
|
+
{% comment %} 4. Initiate recursive nested table generation (separate loop) {% endcomment %}
|
|
61
|
+
{% for property in property_schema.properties -%}
|
|
62
|
+
{% assign prop_key = property[0] %}
|
|
63
|
+
{% assign prop_details = property[1] %}
|
|
64
|
+
|
|
65
|
+
{% assign nested_properties = nil %}
|
|
66
|
+
{% assign type_desc = "" %}
|
|
67
|
+
|
|
68
|
+
{% comment %} Check for nested structures in the top-level properties {% endcomment %}
|
|
69
|
+
{% if prop_details.type == "object" and prop_details.properties %}
|
|
70
|
+
{% assign nested_properties = prop_details.properties %}
|
|
71
|
+
{% assign type_desc = "dictionary (map)" %}
|
|
72
|
+
{% elsif prop_details.type == "array" and prop_details.items.properties %}
|
|
73
|
+
{% comment %} Handle array of objects {% endcomment %}
|
|
74
|
+
{% assign nested_properties = prop_details.items.properties %}
|
|
75
|
+
{% assign type_desc = "list of dictionaries" %}
|
|
76
|
+
{% endif %}
|
|
77
|
+
|
|
78
|
+
{% if nested_properties %}
|
|
79
|
+
{% assign initial_level = 1 %}
|
|
80
|
+
|
|
81
|
+
{% comment %} Call the recursive include for the first level of nested properties. {% endcomment %}
|
|
82
|
+
{% include base/configuration-variables-nested.html.liquid
|
|
83
|
+
properties=nested_properties
|
|
84
|
+
parent_name=prop_key
|
|
85
|
+
type_desc=type_desc
|
|
86
|
+
level=initial_level
|
|
87
|
+
col_name=col_name
|
|
88
|
+
col_type=col_type
|
|
89
|
+
col_default=col_default
|
|
90
|
+
col_description=col_description
|
|
91
|
+
columns=columns
|
|
92
|
+
%}
|
|
93
|
+
{% endif %}
|
|
94
|
+
{% endfor -%}
|
|
95
|
+
|
|
96
|
+
{% else %}
|
|
97
|
+
The `{{ page.component.name }}` {{ page.component.type }} {{ pt }} doesn't have configuration variables.
|
|
98
|
+
{% endif %}
|
|
@@ -31,6 +31,7 @@ Data Source Hierarchy (priority):
|
|
|
31
31
|
================================================================================
|
|
32
32
|
{% endcomment %}
|
|
33
33
|
|
|
34
|
+
{%- if page.with_copyright -%}
|
|
34
35
|
{%- assign copyright = include.data | default: page.with_copyright_data | default: site.data.copyright | default: site.data.base.copyright %}
|
|
35
36
|
|
|
36
37
|
{%- comment %} === Presentation === {% endcomment %}
|
|
@@ -53,4 +54,5 @@ Data Source Hierarchy (priority):
|
|
|
53
54
|
{%- endcapture -%}
|
|
54
55
|
|
|
55
56
|
{%- comment %} --- HTML --- {% endcomment %}
|
|
56
|
-
<div class="my-
|
|
57
|
+
<div class="my-1">Copyright © {{ site.time | date: "%Y" }} {{ copyright_author }} {{ copyright_links }}</div>
|
|
58
|
+
{%- endif -%}
|
|
@@ -34,6 +34,7 @@ Data Source Hierarchy (priority):
|
|
|
34
34
|
================================================================================
|
|
35
35
|
{% endcomment %}
|
|
36
36
|
|
|
37
|
+
{%- if page.with_event -%}
|
|
37
38
|
{%- assign events = include.data | default: page.with_event_data | default: site.data.event | default: site.data.base.event %}
|
|
38
39
|
|
|
39
40
|
{%- comment %} === Presentation === {% endcomment %}
|
|
@@ -87,3 +88,4 @@ Data Source Hierarchy (priority):
|
|
|
87
88
|
</div>
|
|
88
89
|
{% endfor %}
|
|
89
90
|
</div>
|
|
91
|
+
{%- endif -%}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{%- assign navbar_brand_image = navbar.brand_image | default: schema.brand_image.default %}
|
|
2
|
+
{%- assign navbar_brand_image_class = navbar.brand_image_class | default: schema.brand_image_class.default %}
|
|
3
|
+
{%- assign navbar_brand_image_height = navbar.brand_image_height | default: schema.brand_image_height.default %}
|
|
4
|
+
{%- assign navbar_brand_manifestation = navbar.brand_manifestation | default: schema.brand_manifestation.default %}
|
|
5
|
+
{%- assign navbar_brand_manifestation_class = navbar.brand_manifestation_class | default: schema.brand_manifestation_class.default %}
|
|
6
|
+
|
|
7
|
+
{%- if page.with_footer -%}
|
|
8
|
+
|
|
9
|
+
<div class="container">
|
|
10
|
+
|
|
11
|
+
<div class="row justify-content-between align-items-start gx-5">
|
|
12
|
+
|
|
13
|
+
<div class="col-sm-12 col-lg-4">
|
|
14
|
+
{%- if navbar_brand_image != "" %}
|
|
15
|
+
<a class="navbar-brand" href="{{ site.baseurl }}/">
|
|
16
|
+
|
|
17
|
+
<img
|
|
18
|
+
class="d-inline-block align-text-middle me-2{% if navbar_brand_image_class != "" %} {{ navbar_brand_image_class }}{% endif %}"
|
|
19
|
+
src="{{ site.baseurl }}/assets/img/{{ navbar_brand_image }}"
|
|
20
|
+
height="{{ navbar_brand_image_height }}"
|
|
21
|
+
alt="{{ site.title }}" />
|
|
22
|
+
|
|
23
|
+
{%- if navbar_brand_manifestation != "" %}
|
|
24
|
+
<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>
|
|
25
|
+
{%- endif %}
|
|
26
|
+
|
|
27
|
+
</a>
|
|
28
|
+
{%- endif %}
|
|
29
|
+
{% if site.description %}
|
|
30
|
+
<p class="mt-2 mb-5">{{ site.description }}</p>
|
|
31
|
+
{% endif %}
|
|
32
|
+
|
|
33
|
+
{% include base/sponsors-carousel.html.liquid -%}
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
{% if page.with_shortcut %}
|
|
37
|
+
<div class="col-sm-12 col-lg-5">
|
|
38
|
+
{% include base/shortcut.html.liquid %}
|
|
39
|
+
</div>
|
|
40
|
+
{% endif %}
|
|
41
|
+
|
|
42
|
+
{% if page.with_locales or page.with_social %}
|
|
43
|
+
<div class="col-sm-12 col-lg-3 pb-5">
|
|
44
|
+
{% include base/locales.html.liquid %}
|
|
45
|
+
{% include base/social.html.liquid %}
|
|
46
|
+
</div>
|
|
47
|
+
{% endif %}
|
|
48
|
+
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
{% if page.with_copyright %}
|
|
53
|
+
<div class="container">
|
|
54
|
+
<div class="row justify-content-between align-items-center py-3">
|
|
55
|
+
<div class="col">
|
|
56
|
+
{% include base/copyright.html.liquid %}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
{% endif %}
|
|
61
|
+
|
|
62
|
+
{%- endif -%}
|
|
@@ -44,7 +44,8 @@ Locale Detection:
|
|
|
44
44
|
|
|
45
45
|
{%- if page.with_locales and configured_locales %}
|
|
46
46
|
|
|
47
|
-
<
|
|
47
|
+
<p class="mb-2">Change page language:</p>
|
|
48
|
+
<div class="dropdown mb-4">
|
|
48
49
|
<button class="btn btn-sm btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Languages">
|
|
49
50
|
<i class="fa-solid fa-language me-1"></i> {{ site.data.base.languages[current_locale] }} ({{ current_locale }})
|
|
50
51
|
</button>
|
|
@@ -30,6 +30,7 @@ Data Source Hierarchy (priority):
|
|
|
30
30
|
================================================================================
|
|
31
31
|
{% endcomment %}
|
|
32
32
|
|
|
33
|
+
{%- if page.with_navbar -%}
|
|
33
34
|
{%- assign navbar = include.data | default: page.with_navbar_data | default: site.data.navbar | default: site.data.base.navbar %}
|
|
34
35
|
{%- assign schema = site.data.base.navbar_schema.properties["with_navbar_data"].properties %}
|
|
35
36
|
|
|
@@ -104,3 +105,4 @@ Data Source Hierarchy (priority):
|
|
|
104
105
|
|
|
105
106
|
</div>
|
|
106
107
|
</nav>
|
|
108
|
+
{%- endif -%}
|
|
@@ -27,6 +27,7 @@ Data Source Hierarchy (priority):
|
|
|
27
27
|
================================================================================
|
|
28
28
|
{% endcomment %}
|
|
29
29
|
|
|
30
|
+
{%- if page.with_project -%}
|
|
30
31
|
{%- assign project = include.data | default: page.with_project_data | default: site.data.project | default: site.data.base.project %}
|
|
31
32
|
|
|
32
33
|
{% assign project_class = project.class | default: "flex-column text-bg-dark bg-image" %}
|
|
@@ -88,3 +89,4 @@ Data Source Hierarchy (priority):
|
|
|
88
89
|
{%- endif %}
|
|
89
90
|
</div>
|
|
90
91
|
</div>
|
|
92
|
+
{%- endif -%}
|
|
@@ -33,6 +33,7 @@ Conditional Logic:
|
|
|
33
33
|
================================================================================
|
|
34
34
|
{% endcomment %}
|
|
35
35
|
|
|
36
|
+
{%- if page.with_shortcut -%}
|
|
36
37
|
{%- assign shortcut = include.data
|
|
37
38
|
| default: page.with_shortcut_data
|
|
38
39
|
| default: page.with_navbar_data
|
|
@@ -44,22 +45,24 @@ Conditional Logic:
|
|
|
44
45
|
|
|
45
46
|
{%- comment %} === Presentation === {% endcomment %}
|
|
46
47
|
{% if shortcut_navitems.size > 0 %}
|
|
47
|
-
<div class="d-flex flex-wrap justify-content-
|
|
48
|
+
<div class="d-flex flex-wrap justify-content-evenly mb-4">
|
|
49
|
+
|
|
48
50
|
{% for section in shortcut_navitems -%}
|
|
49
|
-
<div class="
|
|
50
|
-
<div class="h6">{{ section.
|
|
51
|
-
<ul class="px-
|
|
51
|
+
<div class="pe-4">
|
|
52
|
+
<div class="h6">{% if section.icon %}<i class="{{ section.icon }} me-1"></i>{% endif %}{{ section.name }}</div>
|
|
53
|
+
<ul class="px-0 mb-4">
|
|
52
54
|
{% for item in section.menu -%}
|
|
53
55
|
<li class="list-unstyled my-1">
|
|
54
56
|
{% include base/link.html.liquid
|
|
55
57
|
name = item.name
|
|
56
58
|
link = item.link
|
|
57
|
-
color = "
|
|
59
|
+
color = "primary"
|
|
58
60
|
%}
|
|
59
61
|
</li>
|
|
60
62
|
{% endfor %}
|
|
61
63
|
</ul>
|
|
62
64
|
</div>
|
|
63
65
|
{% endfor %}
|
|
64
|
-
</div>
|
|
66
|
+
</div>
|
|
65
67
|
{% endif %}
|
|
68
|
+
{%- endif -%}
|
|
@@ -13,7 +13,7 @@ Strategic Design Logic:
|
|
|
13
13
|
- Accessibility-first approach with proper ARIA labels
|
|
14
14
|
- Centered layout for prominent footer or banner placement
|
|
15
15
|
|
|
16
|
-
Required
|
|
16
|
+
Required Fields (per item in the media array):
|
|
17
17
|
- link: URL for the social media or external platform
|
|
18
18
|
- icon: Icon class for Font Awesome (e.g., 'fa-brands fa-github')
|
|
19
19
|
- name: Platform name for accessibility label (e.g., 'GitHub')
|
|
@@ -37,23 +37,30 @@ Conditional Logic:
|
|
|
37
37
|
================================================================================
|
|
38
38
|
{% endcomment %}
|
|
39
39
|
|
|
40
|
-
{%- assign social
|
|
40
|
+
{%- assign social = include.data | default: page.with_social_data | default: site.data.social | default: site.data.base.social %}
|
|
41
|
+
{%- assign social_class = social.class | default: site.data.base.social_schema.properties.with_social_data.properties.class.default %}
|
|
42
|
+
{%- assign social_preamble = social.preamble | default: site.data.base.social_schema.properties.with_social_data.properties.preamble.default %}
|
|
43
|
+
{%- assign social_preamble_class = social.preamble_class | default: site.data.base.social_schema.properties.with_social_data.properties.preamble_class.default %}
|
|
44
|
+
{%- assign social_media = social.media | default: site.data.base.social_schema.properties.with_social_data.properties.media.default %}
|
|
41
45
|
|
|
42
|
-
{
|
|
43
|
-
{% if
|
|
44
|
-
|
|
46
|
+
{% if page.with_social %}
|
|
47
|
+
<div {% if social_class != "" %}class="{{ social_class }}"{% endif %}>
|
|
48
|
+
|
|
49
|
+
{%- comment %} === Presentation (Begin) === {% endcomment %}
|
|
50
|
+
{%- if social_preamble %}
|
|
51
|
+
<p class="{{ social_preamble_class }}">{{ social_preamble }}</p>
|
|
52
|
+
{%- endif %}
|
|
53
|
+
|
|
54
|
+
{%- for item in social_media -%}
|
|
55
|
+
{%- include base/link.html.liquid
|
|
56
|
+
class = "btn btn-outline-primary m-1"
|
|
57
|
+
link = item.link
|
|
58
|
+
role = "button"
|
|
59
|
+
icon = item.icon
|
|
60
|
+
aria_label = item.name
|
|
61
|
+
data_bs_title = item.name
|
|
62
|
+
%}
|
|
63
|
+
{%- endfor %}
|
|
64
|
+
{%- comment %} === Presentation (End) === {% endcomment %}
|
|
65
|
+
</div>
|
|
45
66
|
{% endif %}
|
|
46
|
-
<div class="text-center">
|
|
47
|
-
{%- for item in social -%}
|
|
48
|
-
{%- include base/link.html.liquid
|
|
49
|
-
class = "btn btn-primary ms-0 m-2 fs-5"
|
|
50
|
-
link = item.link
|
|
51
|
-
role = "button"
|
|
52
|
-
icon = item.icon
|
|
53
|
-
aria_label = item.name
|
|
54
|
-
data_bs_toggle = "tooltip"
|
|
55
|
-
data_bs_title = item.name
|
|
56
|
-
data_bs_placement = "bottom"
|
|
57
|
-
%}
|
|
58
|
-
{%- endfor %}
|
|
59
|
-
</div>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Sponsors Cards Component
|
|
4
|
+
Purpose: Renders sponsor logos as a horizontal row of linked cards with
|
|
5
|
+
border styling. Suitable for inline or content-area placement.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Strategic Design Logic:
|
|
9
|
+
- Multi-level data source hierarchy for flexible configuration
|
|
10
|
+
- Card-based layout for content-area or inline sponsor display
|
|
11
|
+
- Active-flag filtering to soft-delete without data removal
|
|
12
|
+
|
|
13
|
+
Required Fields (per item in the members array):
|
|
14
|
+
- name: Sponsor display name (used as alt text)
|
|
15
|
+
- image: Logo source — bare filename (resolved via image_base_path) or absolute URL
|
|
16
|
+
- url: Sponsor website URL
|
|
17
|
+
|
|
18
|
+
Optional Data Fields:
|
|
19
|
+
- image_base_path: Base path for bare filenames (default: /assets/img/base/)
|
|
20
|
+
|
|
21
|
+
Optional Inputs (from include):
|
|
22
|
+
- data: Sponsors data object (overrides all fallbacks)
|
|
23
|
+
|
|
24
|
+
Data Source Hierarchy (in priority order):
|
|
25
|
+
1. include.data - Explicitly passed sponsors data object
|
|
26
|
+
2. page.with_sponsors_data - Page front matter configuration
|
|
27
|
+
3. site.data.sponsors - Site-specific sponsors configuration
|
|
28
|
+
4. site.data.base.sponsors - Theme default sponsors data
|
|
29
|
+
|
|
30
|
+
Conditional Logic:
|
|
31
|
+
- Component renders only when page.with_sponsors is true
|
|
32
|
+
- Members filtered by is_active != false
|
|
33
|
+
================================================================================
|
|
34
|
+
{% endcomment %}
|
|
35
|
+
|
|
36
|
+
{%- assign sponsors = include.data | default: page.with_sponsors_data | default: site.data.sponsors | default: site.data.base.sponsors -%}
|
|
37
|
+
{%- assign sponsors_members = sponsors.members | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.members.default -%}
|
|
38
|
+
{%- assign sponsors_image_base = sponsors.image_base_path | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.image_base_path.default -%}
|
|
39
|
+
|
|
40
|
+
{%- if page.with_sponsors -%}
|
|
41
|
+
<div class="d-flex flex-wrap justify-content-between py-4 my-4 border-top border-bottom border-top-1 border-bottom-1">
|
|
42
|
+
|
|
43
|
+
{%- comment %} === Presentation (Begin) === {% endcomment %}
|
|
44
|
+
{%- for member in sponsors_members -%}
|
|
45
|
+
{%- if member.is_active != false %}
|
|
46
|
+
<div class="card border-light m-4" style="max-height: 60px; max-width: 242px">
|
|
47
|
+
{%- if member.image contains "https://" or member.image contains "http://" -%}
|
|
48
|
+
<a href="{{ member.url }}"><img src="{{ member.image }}" class="card-img-top rounded" style="max-height: 60px; max-width: 242px" alt="{{ member.name }}"></a>
|
|
49
|
+
{%- else -%}
|
|
50
|
+
<a href="{{ member.url }}"><img src="{{ site.baseurl }}{{ sponsors_image_base }}{{ member.image }}" class="card-img-top rounded" style="max-height: 60px; max-width: 242px" alt="{{ member.name }}"></a>
|
|
51
|
+
{%- endif -%}
|
|
52
|
+
</div>
|
|
53
|
+
{%- endif -%}
|
|
54
|
+
{%- endfor %}
|
|
55
|
+
{%- comment %} === Presentation (End) === {% endcomment %}
|
|
56
|
+
|
|
57
|
+
</div>
|
|
58
|
+
{%- endif -%}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
================================================================================
|
|
3
|
+
Template: Sponsors Carousel Component
|
|
4
|
+
Purpose: Renders sponsor logos as a Bootstrap carousel with optional title and
|
|
5
|
+
message. Automatically cycles through active sponsors.
|
|
6
|
+
================================================================================
|
|
7
|
+
|
|
8
|
+
Strategic Design Logic:
|
|
9
|
+
- Multi-level data source hierarchy for flexible configuration
|
|
10
|
+
- Carousel display with fade transition for visual polish
|
|
11
|
+
- Markdown-enabled message for rich introductory text
|
|
12
|
+
- Active-flag filtering to soft-delete without data removal
|
|
13
|
+
|
|
14
|
+
Required Fields (per item in the members array):
|
|
15
|
+
- name: Sponsor display name (used as alt text)
|
|
16
|
+
- image: Logo source — bare filename (resolved via image_base_path) or absolute URL
|
|
17
|
+
- url: Sponsor website URL
|
|
18
|
+
|
|
19
|
+
Optional Data Fields:
|
|
20
|
+
- image_base_path: Base path for bare filenames (default: /assets/img/base/)
|
|
21
|
+
|
|
22
|
+
Optional Inputs (from include):
|
|
23
|
+
- data: Sponsors data object (overrides all fallbacks)
|
|
24
|
+
- id: Carousel element ID (default: "sponsorsCarousel")
|
|
25
|
+
- with_title: Set false to suppress title/message block
|
|
26
|
+
|
|
27
|
+
Data Source Hierarchy (in priority order):
|
|
28
|
+
1. include.data - Explicitly passed sponsors data object
|
|
29
|
+
2. page.with_sponsors_data - Page front matter configuration
|
|
30
|
+
3. site.data.sponsors - Site-specific sponsors configuration
|
|
31
|
+
4. site.data.base.sponsors - Theme default sponsors data
|
|
32
|
+
|
|
33
|
+
Conditional Logic:
|
|
34
|
+
- Component renders only when page.with_sponsors is true
|
|
35
|
+
- Title/message block suppressed when include.with_title is false
|
|
36
|
+
- Members filtered by is_active != false
|
|
37
|
+
================================================================================
|
|
38
|
+
{% endcomment %}
|
|
39
|
+
|
|
40
|
+
{%- assign sponsors = include.data | default: page.with_sponsors_data | default: site.data.sponsors | default: site.data.base.sponsors -%}
|
|
41
|
+
{%- assign sponsors_title = sponsors.title | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.title.default -%}
|
|
42
|
+
{%- assign sponsors_icon = sponsors.icon | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.icon.default -%}
|
|
43
|
+
{%- assign sponsors_message = sponsors.message | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.message.default -%}
|
|
44
|
+
{%- assign sponsors_members = sponsors.members | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.members.default -%}
|
|
45
|
+
{%- assign sponsors_image_base = sponsors.image_base_path | default: site.data.base.sponsors_schema.properties.with_sponsors_data.properties.image_base_path.default -%}
|
|
46
|
+
|
|
47
|
+
{%- assign carousel_id = include.id | default: "sponsorsCarousel" -%}
|
|
48
|
+
|
|
49
|
+
{%- if page.with_sponsors -%}
|
|
50
|
+
<div id="{{ carousel_id }}" class="d-flex flex-wrap mb-5">
|
|
51
|
+
|
|
52
|
+
{%- comment %} === Presentation (Begin) === {% endcomment %}
|
|
53
|
+
{%- if include.with_title != false %}
|
|
54
|
+
<div class="h6"><i class="{{ sponsors_icon }}"></i> {{ sponsors_title }}</div>
|
|
55
|
+
{{ sponsors_message | markdownify | decorate_links }}
|
|
56
|
+
{%- endif %}
|
|
57
|
+
|
|
58
|
+
<div class="carousel slide carousel-fade" data-bs-ride="carousel">
|
|
59
|
+
<div class="carousel-inner">
|
|
60
|
+
{%- for member in sponsors_members -%}
|
|
61
|
+
{%- if member.is_active != false %}
|
|
62
|
+
<div class="carousel-item{% if forloop.first %} active{% endif %}">
|
|
63
|
+
<div class="w-100 align-middle" style="height: 80px; width: 262px">
|
|
64
|
+
{%- if member.image contains "https://" or member.image contains "http://" -%}
|
|
65
|
+
<a href="{{ member.url }}"><img src="{{ member.image }}" class="rounded" style="max-height: 60px; max-width: 242px" alt="{{ member.name }}"></a>
|
|
66
|
+
{%- else -%}
|
|
67
|
+
<a href="{{ member.url }}"><img src="{{ site.baseurl }}{{ sponsors_image_base }}{{ member.image }}" class="rounded" style="max-height: 60px; max-width: 242px" alt="{{ member.name }}"></a>
|
|
68
|
+
{%- endif -%}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
{%- endif -%}
|
|
72
|
+
{%- endfor %}
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
{%- comment %} === Presentation (End) === {% endcomment %}
|
|
76
|
+
|
|
77
|
+
</div>
|
|
78
|
+
{%- endif -%}
|
|
@@ -34,6 +34,7 @@ Conditional Logic:
|
|
|
34
34
|
================================================================================
|
|
35
35
|
{% endcomment %}
|
|
36
36
|
|
|
37
|
+
{%- if page.with_title -%}
|
|
37
38
|
{%- assign title_data = include.data | default: page.with_title_data | default: site.data.title | default: site.data.base.title %}
|
|
38
39
|
{%- assign title_schema = site.data.base.title_schema.properties["with_title_data"].properties %}
|
|
39
40
|
|
|
@@ -50,3 +51,4 @@ Conditional Logic:
|
|
|
50
51
|
<div class="{{ title_lead_class }}">{{ title_lead }}</div>
|
|
51
52
|
{% endif %}
|
|
52
53
|
</div>
|
|
54
|
+
{%- endif -%}
|
|
@@ -40,6 +40,7 @@ Data Source Hierarchy (in priority order):
|
|
|
40
40
|
================================================================================
|
|
41
41
|
{% endcomment %}
|
|
42
42
|
|
|
43
|
+
{%- if page.with_toc -%}
|
|
43
44
|
{%- assign toc = include.data | default: page.with_toc_data | default: site.data.toc | default: site.data.base.toc %}
|
|
44
45
|
{%- assign toc_schema = site.data.base.toc_schema.properties["with_toc_data"].properties %}
|
|
45
46
|
|
|
@@ -89,3 +90,4 @@ Data Source Hierarchy (in priority order):
|
|
|
89
90
|
</div>
|
|
90
91
|
</div>
|
|
91
92
|
</div>
|
|
93
|
+
{%- endif -%}
|
data/_layouts/base/default.html
CHANGED
|
@@ -3,43 +3,24 @@
|
|
|
3
3
|
{% include base/head.html.liquid -%}
|
|
4
4
|
<body id="top" class="bg-body">
|
|
5
5
|
|
|
6
|
-
{%- if page.with_navbar -%}
|
|
7
6
|
{% include base/navbar.html.liquid -%}
|
|
8
|
-
{%- endif -%}
|
|
9
7
|
|
|
10
|
-
{% if page.with_project %}
|
|
11
8
|
{% include base/project.html.liquid %}
|
|
12
|
-
{% endif %}
|
|
13
9
|
|
|
14
|
-
{%- if page.with_breakingnews and page.with_breakingnews_data.size > 0 -%}
|
|
15
10
|
{% include base/breakingnews.html.liquid -%}
|
|
16
|
-
{%- endif -%}
|
|
17
11
|
|
|
18
12
|
<main class="container py-3">
|
|
19
13
|
|
|
20
|
-
{%- if page.with_announcement and page.with_announcement_data.size > 0 -%}
|
|
21
14
|
{%- include base/announcement.html.liquid %}
|
|
22
|
-
{%- endif -%}
|
|
23
15
|
|
|
24
|
-
{% if page.with_bits %}
|
|
25
16
|
{% include base/bits.html.liquid %}
|
|
26
|
-
{% endif %}
|
|
27
17
|
|
|
28
|
-
{% if page.with_event %}
|
|
29
18
|
{% include base/event.html.liquid %}
|
|
30
|
-
{% endif %}
|
|
31
19
|
|
|
32
|
-
{% if page.with_breadcrumb
|
|
20
|
+
{% if page.with_breadcrumb %}
|
|
33
21
|
<div class="row small mb-3">
|
|
34
22
|
<div class="col">
|
|
35
|
-
|
|
36
|
-
{% include base/breadcrumb.html.liquid %}
|
|
37
|
-
{% endif %}
|
|
38
|
-
</div>
|
|
39
|
-
<div class="col-auto">
|
|
40
|
-
{% if page.with_locales %}
|
|
41
|
-
{% include base/locales.html.liquid %}
|
|
42
|
-
{% endif %}
|
|
23
|
+
{% include base/breadcrumb.html.liquid %}
|
|
43
24
|
</div>
|
|
44
25
|
</div>
|
|
45
26
|
{% endif %}
|
|
@@ -63,7 +44,7 @@
|
|
|
63
44
|
{% if page.with_toc %}
|
|
64
45
|
<div class="row mb-3">
|
|
65
46
|
<div class="{{ site.data.base.content.class | default: 'col' }}">
|
|
66
|
-
|
|
47
|
+
{% include base/toc.html.liquid %}
|
|
67
48
|
</div>
|
|
68
49
|
</div>
|
|
69
50
|
{% endif %}
|
|
@@ -79,35 +60,8 @@
|
|
|
79
60
|
</main>
|
|
80
61
|
|
|
81
62
|
{% if page.with_footer %}
|
|
82
|
-
<footer class="footer small text-
|
|
83
|
-
|
|
84
|
-
<div class="container">
|
|
85
|
-
{% if page.with_shortcut %}
|
|
86
|
-
<div class="row p-4 pb-0 text-bg-centos-purple-600">
|
|
87
|
-
{% include base/shortcut.html.liquid %}
|
|
88
|
-
</div>
|
|
89
|
-
{% endif %}
|
|
90
|
-
|
|
91
|
-
{% if page.with_social %}
|
|
92
|
-
<div class="row p-4 text-light text-bg-centos-purple-700 border-top border-5 border-centos-purple-600 rounded-bottom">
|
|
93
|
-
{% include base/social.html.liquid %}
|
|
94
|
-
</div>
|
|
95
|
-
{% endif %}
|
|
96
|
-
|
|
97
|
-
{% if page.with_sponsors %}
|
|
98
|
-
<div class="row mt-2">
|
|
99
|
-
{% include sponsors/carousel.html -%}
|
|
100
|
-
</div>
|
|
101
|
-
{% endif %}
|
|
102
|
-
|
|
103
|
-
{% if page.with_copyright %}
|
|
104
|
-
<div class="row">
|
|
105
|
-
{% include base/copyright.html.liquid %}
|
|
106
|
-
</div>
|
|
107
|
-
{% endif %}
|
|
108
|
-
|
|
109
|
-
</div>
|
|
110
|
-
|
|
63
|
+
<footer class="footer small bg-dark text-centos-purple-100 pt-5">
|
|
64
|
+
{% include base/footer.html.liquid -%}
|
|
111
65
|
</footer>
|
|
112
66
|
{% endif %}
|
|
113
67
|
|
|
Binary file
|