jekyll-theme-conference 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +204 -150
- data/UPGRADE_GUIDE.md +140 -21
- data/_data/conference_assets.yml +1 -1
- data/_data/lang.yml +9 -1
- data/_includes/checks.html +121 -29
- data/_includes/conference_config.json +11 -6
- data/_includes/footer.html +1 -1
- data/_includes/get_edition.html +85 -0
- data/_includes/get_link.html +7 -6
- data/_includes/get_link_tag_streaming.html +3 -3
- data/_includes/get_live_timestamps.html +5 -5
- data/_includes/get_location_config.html +5 -0
- data/_includes/get_menu.html +30 -0
- data/_includes/get_overview_url.html +18 -0
- data/_includes/get_page_description.html +4 -4
- data/_includes/get_program_config.html +34 -21
- data/_includes/get_room_live_href.html +1 -1
- data/_includes/get_schema_event.html +28 -0
- data/_includes/get_start_times.html +1 -1
- data/_includes/get_tag_icon.html +1 -1
- data/_includes/get_talk_overview_talk.html +4 -4
- data/_includes/get_time_pronoun.html +1 -1
- data/_includes/get_track_properties.html +1 -1
- data/_includes/header.html +5 -3
- data/_includes/hidden_page.html +7 -5
- data/_includes/infobox.html +11 -8
- data/_includes/list_header_meta.html +9 -9
- data/_includes/list_header_pwa.html +1 -1
- data/_includes/list_speakers.html +1 -1
- data/_includes/modal_live.html +4 -4
- data/_includes/navbar.html +41 -22
- data/_includes/navbar_pwa.html +13 -12
- data/_includes/navbar_rooms.html +2 -2
- data/_includes/schema_conference.html +26 -48
- data/_includes/schema_location.html +3 -3
- data/_includes/schema_room.html +1 -1
- data/_includes/schema_speaker.html +3 -3
- data/_includes/schema_talk.html +9 -21
- data/_includes/show_live_icon.html +1 -1
- data/_includes/show_menu_items.html +19 -0
- data/_includes/show_talk_info.html +3 -3
- data/_includes/show_talk_time.html +3 -3
- data/_layouts/editions.html +20 -0
- data/_layouts/home.html +11 -14
- data/_layouts/htaccess.html +19 -0
- data/_layouts/json-data.html +7 -6
- data/_layouts/json-site.html +11 -1
- data/_layouts/location.html +5 -3
- data/_layouts/manifest.html +6 -5
- data/_layouts/program.html +9 -8
- data/_layouts/room.html +3 -2
- data/_layouts/speaker-overview.html +1 -1
- data/_layouts/speaker.html +7 -4
- data/_layouts/stream-overview.html +2 -2
- data/_layouts/sw.js +14 -2
- data/_layouts/talk-overview.html +4 -4
- data/_layouts/talk.html +5 -2
- data/assets/js/conference.bundle.js +1 -1
- metadata +8 -1
data/_includes/navbar.html
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{% assign breakpoint =
|
|
1
|
+
{% assign breakpoint = edition_nav_breakpoint | default: 'md' %}
|
|
2
2
|
<nav class="navbar navbar-expand-{{ breakpoint }} d-pwa-none bg-body-tertiary mb-3" aria-label="{{ site.data.lang[site.conference.lang].navigation.main | default: 'Main navigation' }}">
|
|
3
3
|
<div class="container">
|
|
4
4
|
|
|
5
|
-
<a class="navbar-brand order-0" href="{{ site.baseurl }}/">{{
|
|
5
|
+
<a class="navbar-brand order-0" href="{{ site.baseurl }}{{ edition_base }}/">{{ edition_title }}</a>
|
|
6
6
|
|
|
7
7
|
<button class="navbar-toggler order-1" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ site.data.lang[site.conference.lang].navigation.toggle | default: 'Toggle navigation menu' }}">
|
|
8
8
|
<span class="navbar-toggler-icon" aria-hidden="true"></span>
|
|
@@ -10,26 +10,23 @@
|
|
|
10
10
|
|
|
11
11
|
<div class="collapse navbar-collapse order-3 order-md-1" id="navbarSupportedContent">
|
|
12
12
|
<ul class="navbar-nav me-auto">
|
|
13
|
-
{%- for link in
|
|
13
|
+
{%- for link in edition_nav_links -%}
|
|
14
14
|
|
|
15
|
-
{%- if link.menu
|
|
15
|
+
{%- if link.menu -%}
|
|
16
|
+
{%- include get_menu.html -%}
|
|
17
|
+
{%- unless menu_empty %}
|
|
16
18
|
<li class="nav-item dropdown">
|
|
17
|
-
<a class="nav-link dropdown-toggle" href="#" id="navbar-dropdown{{ forloop.index0 }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
18
|
-
{{
|
|
19
|
+
<a class="nav-link dropdown-toggle" href="#" id="navbar-dropdown{{ forloop.index0 }}" role="button" data-bs-toggle="dropdown" aria-expanded="false"{% if menu_label %} aria-label="{{ menu_label }}"{% endif %}>
|
|
20
|
+
{{ menu_name }}
|
|
19
21
|
</a>
|
|
20
22
|
<div class="dropdown-menu" aria-labelledby="navbar-dropdown{{ forloop.index0 }}">
|
|
21
|
-
{%-
|
|
22
|
-
{%- for link in parent_link.menu -%}
|
|
23
|
-
{%- include get_link.html class="dropdown-item" %}
|
|
24
|
-
{{ link_tag }}
|
|
25
|
-
{{ link.name }}
|
|
26
|
-
</a>
|
|
27
|
-
{%- endfor %}
|
|
23
|
+
{%- include show_menu_items.html %}
|
|
28
24
|
</div>
|
|
29
25
|
</li>
|
|
26
|
+
{%- endunless -%}
|
|
30
27
|
|
|
31
28
|
{%- elsif link.live -%}
|
|
32
|
-
{% if
|
|
29
|
+
{% if edition_live %}
|
|
33
30
|
{%- include get_live_timestamps.html -%}
|
|
34
31
|
|
|
35
32
|
<li class="nav-item live-show d-none d-print-none" data-start="{{ live_starts }}" data-end="{{ live_ends }}">
|
|
@@ -55,7 +52,11 @@
|
|
|
55
52
|
|
|
56
53
|
{%- else %}
|
|
57
54
|
<li class="nav-item">
|
|
58
|
-
{%
|
|
55
|
+
{% assign link_url = nil -%}
|
|
56
|
+
{%- if link.relative_url -%}
|
|
57
|
+
{%- assign link_url = link.relative_url | prepend: edition_base -%}
|
|
58
|
+
{%- endif -%}
|
|
59
|
+
{% if page.url == link_url or link.relative_url != "/" and page.url contains link_url %}
|
|
59
60
|
{% assign is_active = true %}
|
|
60
61
|
{% else %}
|
|
61
62
|
{% assign is_active = false %}
|
|
@@ -68,20 +69,38 @@
|
|
|
68
69
|
{%- endif -%}
|
|
69
70
|
{%- endfor %}
|
|
70
71
|
</ul>
|
|
72
|
+
|
|
73
|
+
{%- comment -%} Menu of editions, unless a link places it {%- endcomment -%}
|
|
74
|
+
{%- assign editions_link = edition_nav_links | where: "menu", "editions" | first -%}
|
|
75
|
+
{%- unless editions_link or edition_nav_editions.hide -%}
|
|
76
|
+
{%- include get_menu.html menu="editions" -%}
|
|
77
|
+
{%- unless menu_empty %}
|
|
78
|
+
<ul class="navbar-nav">
|
|
79
|
+
<li class="nav-item dropdown">
|
|
80
|
+
<a class="nav-link dropdown-toggle" href="#" id="navbar-editions" role="button" data-bs-toggle="dropdown" aria-expanded="false"{% if menu_label %} aria-label="{{ menu_label }}"{% endif %}>
|
|
81
|
+
{{ menu_name }}
|
|
82
|
+
</a>
|
|
83
|
+
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-editions">
|
|
84
|
+
{%- include show_menu_items.html %}
|
|
85
|
+
</div>
|
|
86
|
+
</li>
|
|
87
|
+
</ul>
|
|
88
|
+
{%- endunless -%}
|
|
89
|
+
{%- endunless %}
|
|
71
90
|
</div>
|
|
72
91
|
|
|
73
|
-
{%- if
|
|
92
|
+
{%- if edition_nav_logo %}
|
|
74
93
|
<div class="navbar-brand navbar-logo order-2 ms-1 me-0 text-end overflow-hidden">
|
|
75
|
-
<a href="{{
|
|
76
|
-
{%- if
|
|
94
|
+
<a class="text-reset text-decoration-none" href="{{ edition_nav_logo.url }}">
|
|
95
|
+
{%- if edition_nav_logo.img %}
|
|
77
96
|
<picture>
|
|
78
|
-
{%- if
|
|
79
|
-
<source srcset="{{
|
|
97
|
+
{%- if edition_nav_logo.img_dark %}
|
|
98
|
+
<source srcset="{{ edition_nav_logo.img_dark | prepend: '/assets/images/' | prepend: site.baseurl }}" media="(prefers-color-scheme: dark)" />
|
|
80
99
|
{%- endif %}
|
|
81
|
-
<img src="{{
|
|
100
|
+
<img src="{{ edition_nav_logo.img | prepend: '/assets/images/' | prepend: site.baseurl }}" class="align-middle" alt="{{ edition_nav_logo.name }}" />
|
|
82
101
|
</picture>
|
|
83
102
|
{%- else %}
|
|
84
|
-
{{
|
|
103
|
+
{{ edition_nav_logo.name }}
|
|
85
104
|
{%- endif %}
|
|
86
105
|
</a>
|
|
87
106
|
</div>
|
data/_includes/navbar_pwa.html
CHANGED
|
@@ -2,32 +2,33 @@
|
|
|
2
2
|
<nav class="navbar navbar-expand-sm navbar-pwa d-pwa-block bg-body-secondary pb-4" aria-label="{{ site.data.lang[site.conference.lang].navigation.main | default: 'Main navigation' }}">
|
|
3
3
|
<div class="container">
|
|
4
4
|
<div class="navbar-nav flex-row w-100 align-items-end justify-content-around">
|
|
5
|
-
{%- for link in
|
|
5
|
+
{%- for link in edition_nav_links -%}
|
|
6
6
|
{%- if link.pwa_hide %}
|
|
7
7
|
{% comment %} Skip hidden entries {% endcomment %}
|
|
8
8
|
|
|
9
9
|
{%- elsif link.live -%}
|
|
10
10
|
{% comment %} Live links are not shown in app like menu to keep it static {% endcomment %}
|
|
11
11
|
|
|
12
|
-
{%- elsif link.menu
|
|
12
|
+
{%- elsif link.menu -%}
|
|
13
|
+
{%- include get_menu.html -%}
|
|
14
|
+
{%- unless menu_empty %}
|
|
13
15
|
<div class="dropup px-2">
|
|
14
|
-
<a class="nav-link dropdown-toggle" href="#" id="navbar-dropup{{ forloop.index0 }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
15
|
-
{{
|
|
16
|
+
<a class="nav-link dropdown-toggle" href="#" id="navbar-dropup{{ forloop.index0 }}" role="button" data-bs-toggle="dropdown" aria-expanded="false"{% if menu_label %} aria-label="{{ menu_label }}"{% endif %}>
|
|
17
|
+
{{ menu_name }}
|
|
16
18
|
</a>
|
|
17
19
|
<div class="dropdown-menu" aria-labelledby="navbar-dropup{{ forloop.index0 }}">
|
|
18
|
-
{%-
|
|
19
|
-
{%- for link in parent_link.menu -%}
|
|
20
|
-
{%- include get_link.html class="dropdown-item" %}
|
|
21
|
-
{{ link_tag }}
|
|
22
|
-
{{ link.name }}
|
|
23
|
-
</a>
|
|
24
|
-
{%- endfor %}
|
|
20
|
+
{%- include show_menu_items.html %}
|
|
25
21
|
</div>
|
|
26
22
|
</div>
|
|
23
|
+
{%- endunless -%}
|
|
27
24
|
|
|
28
25
|
{%- else %}
|
|
29
26
|
<div class="px-2">
|
|
30
|
-
{%
|
|
27
|
+
{% assign link_url = nil -%}
|
|
28
|
+
{%- if link.relative_url -%}
|
|
29
|
+
{%- assign link_url = link.relative_url | prepend: edition_base -%}
|
|
30
|
+
{%- endif -%}
|
|
31
|
+
{% if page.url == link_url or link.relative_url != "/" and page.url contains link_url %}
|
|
31
32
|
{% assign is_active = true %}
|
|
32
33
|
{% else %}
|
|
33
34
|
{% assign is_active = false %}
|
data/_includes/navbar_rooms.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{%- include get_location_config.html -%}
|
|
2
2
|
{% assign all_hidden = true -%}
|
|
3
3
|
{% unless location_hide %}
|
|
4
|
-
{% for room in
|
|
4
|
+
{% for room in edition_rooms %}
|
|
5
5
|
{% unless room.hide %}
|
|
6
6
|
{% assign all_hidden = false %}
|
|
7
7
|
{% break %}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
{%- endif %}
|
|
22
22
|
</a>
|
|
23
23
|
</li>
|
|
24
|
-
{% for room in
|
|
24
|
+
{% for room in edition_rooms -%}
|
|
25
25
|
<li class="nav-item">
|
|
26
26
|
{% if room.hide or location_hide -%}
|
|
27
27
|
<span class="nav-item nav-link disabled" aria-disabled="true">
|
|
@@ -4,20 +4,20 @@
|
|
|
4
4
|
{%- endcomment -%}
|
|
5
5
|
{%- include get_location_config.html -%}
|
|
6
6
|
|
|
7
|
-
{%- assign conference_url = site.url | append: site.baseurl -%}
|
|
7
|
+
{%- assign conference_url = site.url | append: site.baseurl | append: edition_base -%}
|
|
8
8
|
|
|
9
|
-
{%- if
|
|
10
|
-
{%- assign first_day =
|
|
9
|
+
{%- if edition_program and edition_program.days.size > 0 -%}
|
|
10
|
+
{%- assign first_day = edition_program.days | first -%}
|
|
11
11
|
{%- assign start_date = first_day.date -%}
|
|
12
|
-
{%- assign last_day =
|
|
12
|
+
{%- assign last_day = edition_program.days | last -%}
|
|
13
13
|
{%- assign end_date = last_day.date -%}
|
|
14
14
|
|
|
15
15
|
{%- assign sub_events = "" -%}
|
|
16
16
|
{%- assign first_sub_event = true -%}
|
|
17
|
-
{%- for d in
|
|
17
|
+
{%- for d in edition_program.days -%}
|
|
18
18
|
{%- for r in d.rooms -%}
|
|
19
19
|
{%- for t in r.talks -%}
|
|
20
|
-
{%- assign talk =
|
|
20
|
+
{%- assign talk = edition_talks | where: 'name', t.name | first -%}
|
|
21
21
|
{%- if talk -%}
|
|
22
22
|
{%- assign talk_url = talk.url | prepend: site.baseurl | prepend: site.url -%}
|
|
23
23
|
{%- assign talk_description = talk.name -%}
|
|
@@ -35,32 +35,10 @@
|
|
|
35
35
|
{%- endfor -%}
|
|
36
36
|
{%- endif -%}
|
|
37
37
|
|
|
38
|
-
{%-
|
|
39
|
-
{%- if event_status_raw == "scheduled" -%}
|
|
40
|
-
{%- assign event_status = "EventScheduled" -%}
|
|
41
|
-
{%- elsif event_status_raw == "cancelled" -%}
|
|
42
|
-
{%- assign event_status = "EventCancelled" -%}
|
|
43
|
-
{%- elsif event_status_raw == "postponed" -%}
|
|
44
|
-
{%- assign event_status = "EventPostponed" -%}
|
|
45
|
-
{%- elsif event_status_raw == "moved_online" -%}
|
|
46
|
-
{%- assign event_status = "EventMovedOnline" -%}
|
|
47
|
-
{%- else -%}
|
|
48
|
-
{%- assign event_status = "EventScheduled" -%}
|
|
49
|
-
{%- endif -%}
|
|
50
|
-
|
|
51
|
-
{%- assign event_attendance_mode_raw = site.conference.meta.schema_org.event_attendance_mode | default: "offline" -%}
|
|
52
|
-
{%- if event_attendance_mode_raw == "offline" -%}
|
|
53
|
-
{%- assign event_attendance_mode = "OfflineEventAttendanceMode" -%}
|
|
54
|
-
{%- elsif event_attendance_mode_raw == "online" -%}
|
|
55
|
-
{%- assign event_attendance_mode = "OnlineEventAttendanceMode" -%}
|
|
56
|
-
{%- elsif event_attendance_mode_raw == "mixed" -%}
|
|
57
|
-
{%- assign event_attendance_mode = "MixedEventAttendanceMode" -%}
|
|
58
|
-
{%- else -%}
|
|
59
|
-
{%- assign event_attendance_mode = "OfflineEventAttendanceMode" -%}
|
|
60
|
-
{%- endif -%}
|
|
38
|
+
{%- include get_schema_event.html -%}
|
|
61
39
|
|
|
62
|
-
{%- if
|
|
63
|
-
{%- assign availability_raw =
|
|
40
|
+
{%- if edition_schema_org.tickets and edition_schema_org.tickets.availability -%}
|
|
41
|
+
{%- assign availability_raw = edition_schema_org.tickets.availability -%}
|
|
64
42
|
{%- if availability_raw == "in_stock" -%}
|
|
65
43
|
{%- assign ticket_availability = "InStock" -%}
|
|
66
44
|
{%- elsif availability_raw == "pre_order" -%}
|
|
@@ -78,13 +56,13 @@
|
|
|
78
56
|
{%- endif -%}
|
|
79
57
|
{%- endif -%}
|
|
80
58
|
|
|
81
|
-
{%- unless
|
|
59
|
+
{%- unless edition_schema_org.disable -%}
|
|
82
60
|
<script type="application/ld+json">
|
|
83
61
|
{
|
|
84
62
|
"@context": "https://schema.org",
|
|
85
63
|
"@type": "ConferenceEvent",
|
|
86
|
-
"name": {{
|
|
87
|
-
"description": {{
|
|
64
|
+
"name": {{ edition_title | jsonify | replace: "<", "\u003c" }},
|
|
65
|
+
"description": {{ edition_description | jsonify | replace: "<", "\u003c" }}{% if start_date %},
|
|
88
66
|
"startDate": "{{ start_date }}"{% endif %}{% if end_date %},
|
|
89
67
|
"endDate": "{{ end_date }}"{% endif %},
|
|
90
68
|
"eventStatus": "https://schema.org/{{ event_status }}",
|
|
@@ -94,28 +72,28 @@
|
|
|
94
72
|
"@type": "Place"{% if location_postal_address.name %},
|
|
95
73
|
"name": {{ location_postal_address.name | jsonify | replace: "<", "\u003c" }}{% endif %},
|
|
96
74
|
"url": "{{ location_url | prepend: site.baseurl | prepend: site.url }}"
|
|
97
|
-
}{% endunless %}{% if
|
|
75
|
+
}{% endunless %}{% if edition_schema_org.has_participation_offer and edition_schema_org.has_participation_offer.url %},
|
|
98
76
|
"hasParticipationOffer": {
|
|
99
77
|
"@type": "Offer",
|
|
100
|
-
"url": "{{
|
|
101
|
-
}{% endif %}{% if
|
|
78
|
+
"url": "{{ edition_schema_org.has_participation_offer.url }}"
|
|
79
|
+
}{% endif %}{% if edition_schema_org.tickets %},
|
|
102
80
|
"offers": {
|
|
103
|
-
"@type": "Offer"{% if
|
|
104
|
-
"url": "{{
|
|
105
|
-
"availability": "https://schema.org/{{ ticket_availability }}"{% endif %}{% if
|
|
106
|
-
"price": "{{
|
|
107
|
-
"priceCurrency": "{{
|
|
108
|
-
}{% endif %}{% if
|
|
81
|
+
"@type": "Offer"{% if edition_schema_org.tickets.url %},
|
|
82
|
+
"url": "{{ edition_schema_org.tickets.url }}"{% endif %}{% if ticket_availability %},
|
|
83
|
+
"availability": "https://schema.org/{{ ticket_availability }}"{% endif %}{% if edition_schema_org.tickets.price %},
|
|
84
|
+
"price": "{{ edition_schema_org.tickets.price }}"{% endif %}{% if edition_schema_org.tickets.priceCurrency %},
|
|
85
|
+
"priceCurrency": "{{ edition_schema_org.tickets.priceCurrency }}"{% endif %}
|
|
86
|
+
}{% endif %}{% if edition_schema_org.organizer %},
|
|
109
87
|
"organizer": {
|
|
110
|
-
"@type": "Organization"{% if
|
|
111
|
-
"name": {{
|
|
112
|
-
"url": "{{
|
|
88
|
+
"@type": "Organization"{% if edition_schema_org.organizer.name %},
|
|
89
|
+
"name": {{ edition_schema_org.organizer.name | jsonify | replace: "<", "\u003c" }}{% endif %}{% if edition_schema_org.organizer.url %},
|
|
90
|
+
"url": "{{ edition_schema_org.organizer.url }}"{% endif %}
|
|
113
91
|
}{% endif %}{% if sub_events != "" %},
|
|
114
92
|
"subEvent": [
|
|
115
93
|
{{ sub_events }}
|
|
116
94
|
]{% endif %},
|
|
117
|
-
"url": "{{ conference_url }}"{% if
|
|
118
|
-
"image": "{{
|
|
95
|
+
"url": "{{ conference_url }}"{% if edition_schema_org.img %},
|
|
96
|
+
"image": "{{ edition_schema_org.img | prepend: '/assets/images/' | prepend: site.baseurl | prepend: site.url }}"{% endif %}
|
|
119
97
|
}
|
|
120
98
|
</script>
|
|
121
99
|
{%- endunless -%}
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
Usage: {% include schema_location.html %}
|
|
4
4
|
{%- endcomment -%}
|
|
5
5
|
{%- include get_location_config.html -%}
|
|
6
|
-
{%- assign conference_url = site.url | append: site.baseurl -%}
|
|
6
|
+
{%- assign conference_url = site.url | append: site.baseurl | append: edition_base -%}
|
|
7
7
|
{%- assign location_url = location_url | prepend: site.baseurl | prepend: site.url -%}
|
|
8
8
|
|
|
9
9
|
{%- assign contains_places = "" -%}
|
|
10
10
|
{%- assign first_room = true -%}
|
|
11
|
-
{%- for r in
|
|
11
|
+
{%- for r in edition_rooms -%}
|
|
12
12
|
{%- unless r.hide -%}
|
|
13
13
|
{%- unless first_room -%}
|
|
14
14
|
{%- assign contains_places = contains_places | append: "," -%}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
{%- endunless -%}
|
|
21
21
|
{%- endfor -%}
|
|
22
22
|
|
|
23
|
-
{%- unless
|
|
23
|
+
{%- unless edition_schema_org.disable or location_hide -%}
|
|
24
24
|
<script type="application/ld+json">
|
|
25
25
|
{
|
|
26
26
|
"@context": "https://schema.org",
|
data/_includes/schema_room.html
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{%- include get_location_config.html -%}
|
|
9
9
|
{%- assign schema_location_url = location_url | prepend: site.baseurl | prepend: site.url -%}
|
|
10
10
|
|
|
11
|
-
{%- unless
|
|
11
|
+
{%- unless edition_schema_org.disable or location_hide or room.hide -%}
|
|
12
12
|
<script type="application/ld+json">
|
|
13
13
|
{
|
|
14
14
|
"@context": "https://schema.org",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
{%- assign performer_in = "" -%}
|
|
9
9
|
{%- assign first_talk = true -%}
|
|
10
|
-
{%- for talk in
|
|
10
|
+
{%- for talk in edition_talks -%}
|
|
11
11
|
{%- for speaker_name in talk.speakers -%}
|
|
12
12
|
{%- if speaker_name == speaker.name -%}
|
|
13
13
|
{%- unless first_talk -%}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
{%- endfor -%}
|
|
23
23
|
{%- endfor -%}
|
|
24
24
|
|
|
25
|
-
{%- unless
|
|
25
|
+
{%- unless edition_schema_org.disable or speaker.hide -%}
|
|
26
26
|
<script type="application/ld+json">
|
|
27
27
|
{
|
|
28
28
|
"@context": "https://schema.org",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
{{ performer_in }}
|
|
37
37
|
{%- else -%}
|
|
38
38
|
{%- comment -%} Link to conference event {%- endcomment -%}
|
|
39
|
-
{"@type":"Event","url":"{{ site.url | append: site.baseurl }}"}
|
|
39
|
+
{"@type":"Event","url":"{{ site.url | append: site.baseurl | append: edition_base }}"}
|
|
40
40
|
{%- endif %}
|
|
41
41
|
]
|
|
42
42
|
}
|
data/_includes/schema_talk.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
{%- assign talk_found = false -%}
|
|
7
7
|
{%- assign schema_data = "" -%}
|
|
8
8
|
|
|
9
|
-
{%- for d in
|
|
9
|
+
{%- for d in edition_program.days -%}
|
|
10
10
|
{%- if talk_found -%}{%- break -%}{%- endif -%}
|
|
11
11
|
{%- for r in d.rooms -%}
|
|
12
12
|
{%- if talk_found -%}{%- break -%}{%- endif -%}
|
|
@@ -18,24 +18,12 @@
|
|
|
18
18
|
{%- assign datetime_start = timestamp_start | date: "%Y-%m-%dT%H:%M:%S%:z" -%}
|
|
19
19
|
{%- assign datetime_end = timestamp_end | date: "%Y-%m-%dT%H:%M:%S%:z" -%}
|
|
20
20
|
|
|
21
|
-
{%- assign room =
|
|
21
|
+
{%- assign room = edition_rooms | where: 'name', r.name | first -%}
|
|
22
22
|
{%- assign talk_url = page.url | prepend: site.baseurl | prepend: site.url -%}
|
|
23
|
-
{%- include get_page_description.html default=
|
|
23
|
+
{%- include get_page_description.html default=edition_title replace_quotes=true -%}
|
|
24
24
|
{%- assign talk_description = page_description | default: talk.name -%}
|
|
25
25
|
|
|
26
|
-
{%-
|
|
27
|
-
{%- if site.conference.meta.schema_org.event_status -%}
|
|
28
|
-
{%- assign event_status = site.conference.event_status -%}
|
|
29
|
-
{%- else -%}
|
|
30
|
-
{%- assign event_status = "EventScheduled" -%}
|
|
31
|
-
{%- endif -%}
|
|
32
|
-
|
|
33
|
-
{%- comment -%} Get EventAttendanceMode from config, default to MixedEventAttendanceMode {%- endcomment -%}
|
|
34
|
-
{%- if site.conference.meta.schema_org.event_attendance_mode -%}
|
|
35
|
-
{%- assign event_attendance_mode = site.conference.event_attendance_mode -%}
|
|
36
|
-
{%- else -%}
|
|
37
|
-
{%- assign event_attendance_mode = "MixedEventAttendanceMode" -%}
|
|
38
|
-
{%- endif -%}
|
|
26
|
+
{%- include get_schema_event.html -%}
|
|
39
27
|
|
|
40
28
|
{%- comment -%} Calculate duration in ISO 8601 format (PT45M for 45 minutes) {%- endcomment -%}
|
|
41
29
|
{%- assign start_time_parts = talk_start | split: ':' -%}
|
|
@@ -62,7 +50,7 @@
|
|
|
62
50
|
{%- endif -%}
|
|
63
51
|
|
|
64
52
|
{%- comment -%} Get conference URL for superEvent {%- endcomment -%}
|
|
65
|
-
{%- assign conference_url = site.url | append: site.baseurl -%}
|
|
53
|
+
{%- assign conference_url = site.url | append: site.baseurl | append: edition_base -%}
|
|
66
54
|
|
|
67
55
|
{%- comment -%} Find video link if present {%- endcomment -%}
|
|
68
56
|
{%- assign video_url = "" -%}
|
|
@@ -75,7 +63,7 @@
|
|
|
75
63
|
{%- endfor -%}
|
|
76
64
|
{%- endif -%}
|
|
77
65
|
|
|
78
|
-
{%- unless
|
|
66
|
+
{%- unless edition_schema_org.disable or talk.hide -%}
|
|
79
67
|
<script type="application/ld+json">
|
|
80
68
|
{
|
|
81
69
|
"@context": "https://schema.org",
|
|
@@ -96,7 +84,7 @@
|
|
|
96
84
|
"keywords": [{% if talk.track %}{{ talk.track | jsonify | replace: "<", "\u003c" }}{% if talk.tags and talk.tags.size > 0 %}, {% endif %}{% endif %}{% if talk.tags and talk.tags.size > 0 %}{% for tag in talk.tags %}{{ tag | jsonify | replace: "<", "\u003c" }}{% unless forloop.last %}, {% endunless %}{% endfor %}{% endif %}]{% endif %}{% if talk.speakers.size > 0 %},
|
|
97
85
|
"performer": [
|
|
98
86
|
{%- for speaker_name in talk.speakers -%}
|
|
99
|
-
{%- assign speaker =
|
|
87
|
+
{%- assign speaker = edition_speakers | where: 'name', speaker_name | first -%}
|
|
100
88
|
{%- if speaker -%}
|
|
101
89
|
{
|
|
102
90
|
"@type": "Person",
|
|
@@ -108,8 +96,8 @@
|
|
|
108
96
|
"superEvent": {
|
|
109
97
|
"@type": "ConferenceEvent",
|
|
110
98
|
"url": "{{ conference_url }}"
|
|
111
|
-
}{% if
|
|
112
|
-
"image": "{{
|
|
99
|
+
}{% if edition_link_preview.img and edition_link_preview.img.open_graph %},
|
|
100
|
+
"image": "{{ edition_schema_org.img | prepend: '/assets/images/' | prepend: site.baseurl | prepend: site.url }}"{% endif %}{% if video_url != "" %},
|
|
113
101
|
"video": {
|
|
114
102
|
"@type": "VideoObject",
|
|
115
103
|
"name": {{ talk.name | jsonify | replace: "<", "\u003c" }},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Items of a dropdown menu (see get_menu.html, sets menu_links): its links,
|
|
3
|
+
or each edition's home page, marking the page's edition
|
|
4
|
+
{%- endcomment -%}
|
|
5
|
+
{%- if menu_links == "editions" -%}
|
|
6
|
+
{%- for e in site.conference.editions -%}
|
|
7
|
+
{%- assign e_id = e.id | append: "" %}
|
|
8
|
+
<a class="dropdown-item{% if e_id == edition %} active{% endif %}" href="{{ site.baseurl }}/{{ e_id }}/"{% if e_id == edition %} aria-current="true"{% endif %}>
|
|
9
|
+
{{ e.name | default: e_id }}
|
|
10
|
+
</a>
|
|
11
|
+
{%- endfor -%}
|
|
12
|
+
{%- else -%}
|
|
13
|
+
{%- for link in menu_links -%}
|
|
14
|
+
{%- include get_link.html class="dropdown-item" %}
|
|
15
|
+
{{ link_tag }}
|
|
16
|
+
{{ link.name }}
|
|
17
|
+
</a>
|
|
18
|
+
{%- endfor -%}
|
|
19
|
+
{%- endif -%}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
{%- include get_talk_timestamp.html -%}
|
|
4
4
|
|
|
5
5
|
<span class="d-none d-sm-inline">
|
|
6
|
-
{%- if
|
|
6
|
+
{%- if edition_live -%}
|
|
7
7
|
<span class="live-hide d-inline-block" data-start="{{ timestamp_start }}" data-end="{{ timestamp_end }}">
|
|
8
8
|
{%- endif -%}
|
|
9
9
|
{{- time_pronoun -}}
|
|
10
|
-
{%- if
|
|
10
|
+
{%- if edition_live -%}
|
|
11
11
|
</span>
|
|
12
12
|
{%- endif -%}
|
|
13
13
|
</span> {% include show_talk_time.html -%}
|
|
14
14
|
|
|
15
|
-
{%- assign room =
|
|
15
|
+
{%- assign room = edition_rooms | where: 'name', r.name | first -%}
|
|
16
16
|
<span class="d-none d-sm-inline ms-1">
|
|
17
17
|
{{- site.data.lang[site.conference.lang].pronoun.in | default: "in" -}}
|
|
18
18
|
</span> {% include show_room.html -%}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{%- include get_program_config.html -%}
|
|
2
|
-
{%- assign nbr_days =
|
|
2
|
+
{%- assign nbr_days = edition_program.days | size -%}
|
|
3
3
|
|
|
4
|
-
{%- if
|
|
4
|
+
{%- if edition_live -%}
|
|
5
5
|
{%- include get_talk_timestamp.html -%}
|
|
6
6
|
<span class="live-hide d-inline-block" data-start="{{ timestamp_start }}" data-end="{{ timestamp_end }}">
|
|
7
7
|
{%- endif -%}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
{%- if talk_start_hour < 10 -%}0{%- endif -%}{{- talk_start_hour -}}:{%- if talk_start_min < 10 -%}0{%- endif -%}{{- talk_start_min -}}
|
|
20
20
|
</a>
|
|
21
21
|
|
|
22
|
-
{%- if
|
|
22
|
+
{%- if edition_live -%}
|
|
23
23
|
</span>
|
|
24
24
|
{%- include show_live_icon.html -%}
|
|
25
25
|
{%- endif -%}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Root page of a site with several editions: forwards to the current one,
|
|
3
|
+
e.g. / -> /2026/
|
|
4
|
+
{%- endcomment -%}
|
|
5
|
+
{%- include get_edition.html -%}
|
|
6
|
+
{%- assign edition_url = site.baseurl | append: edition_base | append: "/" -%}
|
|
7
|
+
<!DOCTYPE html>
|
|
8
|
+
<html lang="{{ site.conference.lang | default: 'en' }}">
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="utf-8" />
|
|
11
|
+
<meta http-equiv="refresh" content="0; url={{ edition_url }}">
|
|
12
|
+
<link rel="canonical" href="{{ site.url }}{{ edition_url }}" />
|
|
13
|
+
<title>{{ edition_title | escape }}</title>
|
|
14
|
+
</head>
|
|
15
|
+
<body>
|
|
16
|
+
<main>
|
|
17
|
+
<h1><a href="{{ edition_url }}">{{ edition_title | escape }}</a></h1>
|
|
18
|
+
</main>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
data/_layouts/home.html
CHANGED
|
@@ -8,16 +8,16 @@
|
|
|
8
8
|
{%- if page.header.img_dark %}
|
|
9
9
|
<source srcset="{{ page.header.img_dark | prepend: '/assets/images/' | prepend: site.baseurl }}" media="(prefers-color-scheme: dark)" />
|
|
10
10
|
{%- endif %}
|
|
11
|
-
<img src="{{ page.header.img | prepend: '/assets/images/' | prepend: site.baseurl }}" class="home-header-img" alt="{{
|
|
11
|
+
<img src="{{ page.header.img | prepend: '/assets/images/' | prepend: site.baseurl }}" class="home-header-img" alt="{{ edition_title }}" />
|
|
12
12
|
</picture>
|
|
13
13
|
{% elsif page.title %}
|
|
14
14
|
{{ page.title }}
|
|
15
15
|
{% else %}
|
|
16
|
-
{{
|
|
16
|
+
{{ edition_title }}
|
|
17
17
|
{% endif %}
|
|
18
18
|
</h1>
|
|
19
|
-
{% if
|
|
20
|
-
{{
|
|
19
|
+
{% if edition_description != none %}
|
|
20
|
+
{{ edition_description | markdownify | replace: '<p>', '<p class="lead">' }}
|
|
21
21
|
{% endif %}
|
|
22
22
|
|
|
23
23
|
<hr class="my-4">
|
|
@@ -30,23 +30,20 @@
|
|
|
30
30
|
{% for link in page.links %}
|
|
31
31
|
|
|
32
32
|
{% if link.menu %}
|
|
33
|
+
{% include get_menu.html %}
|
|
34
|
+
{% unless menu_empty %}
|
|
33
35
|
<div class="dropdown d-inline">
|
|
34
|
-
<a class="{{ btn_default }} dropdown-toggle" href="#" role="button" id="main-dropdown{{ forloop.index0 }}" data-bs-toggle="dropdown" aria-expanded="false">
|
|
35
|
-
{{
|
|
36
|
+
<a class="{{ btn_default }} dropdown-toggle" href="#" role="button" id="main-dropdown{{ forloop.index0 }}" data-bs-toggle="dropdown" aria-expanded="false"{% if menu_label %} aria-label="{{ menu_label }}"{% endif %}>
|
|
37
|
+
{{ menu_name }}
|
|
36
38
|
</a>
|
|
37
39
|
<div class="dropdown-menu" aria-labelledby="main-dropdown{{ forloop.index0 }}">
|
|
38
|
-
{%
|
|
39
|
-
{% for link in parent_link.menu %}
|
|
40
|
-
{% include get_link.html class="dropdown-item" %}
|
|
41
|
-
{{ link_tag }}
|
|
42
|
-
{{ link.name }}
|
|
43
|
-
</a>
|
|
44
|
-
{% endfor %}
|
|
40
|
+
{% include show_menu_items.html %}
|
|
45
41
|
</div>
|
|
46
42
|
</div>
|
|
43
|
+
{% endunless %}
|
|
47
44
|
|
|
48
45
|
{% elsif link.live %}
|
|
49
|
-
{% if
|
|
46
|
+
{% if edition_live %}
|
|
50
47
|
{%- include get_live_timestamps.html -%}
|
|
51
48
|
|
|
52
49
|
<span class="live-show d-none d-print-none" data-start="{{ live_starts }}" data-end="{{ live_ends }}">
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Apache configuration (.htaccess) of a site with several editions: forwards
|
|
3
|
+
addresses outside the editions to the current one, if it has them (e.g.
|
|
4
|
+
/program/ -> /2026/program/), followed by the page's own content. Without
|
|
5
|
+
editions, only the content.
|
|
6
|
+
{%- endcomment -%}
|
|
7
|
+
{%- include get_edition.html -%}
|
|
8
|
+
{%- if edition_current_id -%}
|
|
9
|
+
{%- assign edition_url = site.baseurl | append: "/" | append: edition_current_id -%}
|
|
10
|
+
# Forward to the current edition, e.g. /program/ -> {{ edition_url }}/program/
|
|
11
|
+
RewriteEngine On
|
|
12
|
+
RewriteCond %{REQUEST_FILENAME} !-f
|
|
13
|
+
RewriteCond %{REQUEST_FILENAME} !-d
|
|
14
|
+
RewriteCond %{DOCUMENT_ROOT}{{ edition_url }}/$1 -f [OR]
|
|
15
|
+
RewriteCond %{DOCUMENT_ROOT}{{ edition_url }}/$1 -d
|
|
16
|
+
RewriteRule ^(.*)$ {{ edition_url }}/$1 [R=302,L]
|
|
17
|
+
|
|
18
|
+
{% endif -%}
|
|
19
|
+
{{ content }}
|
data/_layouts/json-data.html
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
{%- include get_edition.html -%}
|
|
1
2
|
{
|
|
2
|
-
{% if
|
|
3
|
+
{% if edition_live and edition_live.streaming.enable -%}
|
|
3
4
|
"rooms": {
|
|
4
5
|
{%- assign first_room = true -%}
|
|
5
|
-
{%- for room in
|
|
6
|
+
{%- for room in edition_rooms %}
|
|
6
7
|
{%- if room.live -%}
|
|
7
8
|
{%- include get_room_live_href.html -%}
|
|
8
9
|
{%- unless room_live_href -%}
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
},
|
|
25
26
|
|
|
26
27
|
"speakers": {
|
|
27
|
-
{%- for speaker in
|
|
28
|
+
{%- for speaker in edition_speakers %}
|
|
28
29
|
{{ speaker.name | jsonify }} : {
|
|
29
30
|
"name": {{ speaker.first_name | append: ' ' | append: speaker.last_name | jsonify }},
|
|
30
31
|
{%- if speaker.hide %}
|
|
@@ -38,9 +39,9 @@
|
|
|
38
39
|
|
|
39
40
|
"talks": {
|
|
40
41
|
{%- assign first_room = true -%}
|
|
41
|
-
{%- for room in
|
|
42
|
+
{%- for room in edition_rooms -%}
|
|
42
43
|
{%- assign first_talk = true -%}
|
|
43
|
-
{%- for d in
|
|
44
|
+
{%- for d in edition_program.days -%}
|
|
44
45
|
{%- for r in d.rooms -%}
|
|
45
46
|
{%- if room.name == r.name and room.live %}
|
|
46
47
|
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
{%- endif -%}
|
|
58
59
|
|
|
59
60
|
{%- for t in r.talks %}
|
|
60
|
-
{%- assign talk =
|
|
61
|
+
{%- assign talk = edition_talks | where: 'name', t.name | first %}
|
|
61
62
|
{
|
|
62
63
|
"name": {{ talk.name | jsonify }},
|
|
63
64
|
|