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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +204 -150
  3. data/UPGRADE_GUIDE.md +140 -21
  4. data/_data/conference_assets.yml +1 -1
  5. data/_data/lang.yml +9 -1
  6. data/_includes/checks.html +121 -29
  7. data/_includes/conference_config.json +11 -6
  8. data/_includes/footer.html +1 -1
  9. data/_includes/get_edition.html +85 -0
  10. data/_includes/get_link.html +7 -6
  11. data/_includes/get_link_tag_streaming.html +3 -3
  12. data/_includes/get_live_timestamps.html +5 -5
  13. data/_includes/get_location_config.html +5 -0
  14. data/_includes/get_menu.html +30 -0
  15. data/_includes/get_overview_url.html +18 -0
  16. data/_includes/get_page_description.html +4 -4
  17. data/_includes/get_program_config.html +34 -21
  18. data/_includes/get_room_live_href.html +1 -1
  19. data/_includes/get_schema_event.html +28 -0
  20. data/_includes/get_start_times.html +1 -1
  21. data/_includes/get_tag_icon.html +1 -1
  22. data/_includes/get_talk_overview_talk.html +4 -4
  23. data/_includes/get_time_pronoun.html +1 -1
  24. data/_includes/get_track_properties.html +1 -1
  25. data/_includes/header.html +5 -3
  26. data/_includes/hidden_page.html +7 -5
  27. data/_includes/infobox.html +11 -8
  28. data/_includes/list_header_meta.html +9 -9
  29. data/_includes/list_header_pwa.html +1 -1
  30. data/_includes/list_speakers.html +1 -1
  31. data/_includes/modal_live.html +4 -4
  32. data/_includes/navbar.html +41 -22
  33. data/_includes/navbar_pwa.html +13 -12
  34. data/_includes/navbar_rooms.html +2 -2
  35. data/_includes/schema_conference.html +26 -48
  36. data/_includes/schema_location.html +3 -3
  37. data/_includes/schema_room.html +1 -1
  38. data/_includes/schema_speaker.html +3 -3
  39. data/_includes/schema_talk.html +9 -21
  40. data/_includes/show_live_icon.html +1 -1
  41. data/_includes/show_menu_items.html +19 -0
  42. data/_includes/show_talk_info.html +3 -3
  43. data/_includes/show_talk_time.html +3 -3
  44. data/_layouts/editions.html +20 -0
  45. data/_layouts/home.html +11 -14
  46. data/_layouts/htaccess.html +19 -0
  47. data/_layouts/json-data.html +7 -6
  48. data/_layouts/json-site.html +11 -1
  49. data/_layouts/location.html +5 -3
  50. data/_layouts/manifest.html +6 -5
  51. data/_layouts/program.html +9 -8
  52. data/_layouts/room.html +3 -2
  53. data/_layouts/speaker-overview.html +1 -1
  54. data/_layouts/speaker.html +7 -4
  55. data/_layouts/stream-overview.html +2 -2
  56. data/_layouts/sw.js +14 -2
  57. data/_layouts/talk-overview.html +4 -4
  58. data/_layouts/talk.html +5 -2
  59. data/assets/js/conference.bundle.js +1 -1
  60. metadata +8 -1
@@ -0,0 +1,85 @@
1
+ {%- comment -%}
2
+ Edition of the current page, e.g. "2025" for /2025/talks/x/ (Front Matter
3
+ `edition`, set per folder via `defaults`; none: the current edition). The
4
+ current edition is the first of `conference.editions` with `current: true`,
5
+ else the first one. Without `conference.editions` there is a single edition:
6
+ `edition` is nil and everything below is the site's own. Sets:
7
+ - edition, edition_config (its `editions` entry), edition_current_id,
8
+ edition_current (true on the current edition)
9
+ - edition_base: URL prefix of the edition's pages, e.g. "/2025" (or "")
10
+ - edition_documents: folder of linked files, e.g. "/2025/documents"
11
+ - edition_talks, edition_speakers, edition_program
12
+ - edition_rooms: by `order`, else as they first appear in the program
13
+ - edition_title, edition_description and per sub-setting (e.g.
14
+ `navigation.logo`): edition_link_preview, edition_schema_org,
15
+ edition_nav_logo, edition_nav_links, edition_nav_breakpoint,
16
+ edition_nav_editions,
17
+ edition_info_bars, edition_info_modals, edition_tracks, edition_tags:
18
+ the edition's setting, else the site's
19
+ - edition_live: `conference.live` on the current edition, else nil
20
+ {%- endcomment -%}
21
+ {%- assign edition = nil -%}
22
+ {%- assign edition_config = nil -%}
23
+ {%- assign edition_current_id = nil -%}
24
+ {%- assign edition_current = true -%}
25
+ {%- assign edition_base = "" -%}
26
+ {%- assign edition_talks = site.talks -%}
27
+ {%- assign edition_speakers = site.speakers -%}
28
+ {%- assign edition_rooms = site.rooms -%}
29
+ {%- assign edition_program = site.data.program -%}
30
+
31
+ {%- assign editions = site.conference.editions -%}
32
+ {%- if editions.size > 0 -%}
33
+ {%- assign edition_current_config = editions | where: "current", true | first | default: editions[0] -%}
34
+ {%- assign edition_current_id = edition_current_config.id | append: "" -%}
35
+ {%- assign edition = page.edition | default: edition_current_id | append: "" -%}
36
+ {%- assign edition_config = editions | where: "id", edition | first -%}
37
+ {%- if edition != edition_current_id -%}
38
+ {%- assign edition_current = false -%}
39
+ {%- endif -%}
40
+
41
+ {%- assign edition_base = "/" | append: edition -%}
42
+ {%- assign edition_talks = site.talks | where: "edition", edition -%}
43
+ {%- assign edition_speakers = site.speakers | where: "edition", edition -%}
44
+ {%- assign edition_rooms = site.rooms | where: "edition", edition -%}
45
+ {%- assign edition_program = site.data.programs[edition] -%}
46
+ {%- endif -%}
47
+ {%- assign edition_documents = edition_base | append: "/documents" -%}
48
+
49
+ {%- comment -%}
50
+ Rooms by `order`, else as they first appear in the program (e.g. the
51
+ program's room columns), followed by rooms not in it
52
+ {%- endcomment -%}
53
+ {%- assign rooms_with_order = edition_rooms | where_exp: "r", "r.order != nil" -%}
54
+ {%- if rooms_with_order.size > 0 -%}
55
+ {%- assign edition_rooms = edition_rooms | sort: "order", "last" -%}
56
+ {%- else -%}
57
+ {%- assign rooms_by_program = "" | split: "" -%}
58
+ {%- for d in edition_program.days -%}
59
+ {%- for r in d.rooms -%}
60
+ {%- assign room = edition_rooms | where: "name", r.name | first -%}
61
+ {%- if room -%}
62
+ {%- assign rooms_by_program = rooms_by_program | push: room -%}
63
+ {%- endif -%}
64
+ {%- endfor -%}
65
+ {%- endfor -%}
66
+ {%- assign edition_rooms = rooms_by_program | concat: edition_rooms | uniq -%}
67
+ {%- endif -%}
68
+
69
+ {%- assign edition_title = edition_config.title | default: site.title -%}
70
+ {%- assign edition_description = edition_config.description | default: site.description -%}
71
+ {%- assign edition_link_preview = edition_config.meta.link_preview | default: site.conference.meta.link_preview -%}
72
+ {%- assign edition_schema_org = edition_config.meta.schema_org | default: site.conference.meta.schema_org -%}
73
+ {%- assign edition_nav_logo = edition_config.navigation.logo | default: site.conference.navigation.logo -%}
74
+ {%- assign edition_nav_links = edition_config.navigation.links | default: site.conference.navigation.links -%}
75
+ {%- assign edition_nav_breakpoint = edition_config.navigation.breakpoint | default: site.conference.navigation.breakpoint -%}
76
+ {%- assign edition_nav_editions = edition_config.navigation.editions | default: site.conference.navigation.editions -%}
77
+ {%- assign edition_info_bars = edition_config.info.bars | default: site.conference.info.bars -%}
78
+ {%- assign edition_info_modals = edition_config.info.modals | default: site.conference.info.modals -%}
79
+ {%- assign edition_tracks = edition_config.talks.tracks | default: site.conference.talks.tracks -%}
80
+ {%- assign edition_tags = edition_config.talks.tags | default: site.conference.talks.tags -%}
81
+
82
+ {%- assign edition_live = nil -%}
83
+ {%- if edition_current -%}
84
+ {%- assign edition_live = site.conference.live -%}
85
+ {%- endif -%}
@@ -2,7 +2,8 @@
2
2
  Link tag of `link`, e.g. {% include get_link.html context="talk" %}. The
3
3
  context ("talk" with `talk`, "speaker" with `speaker`, or none) selects the
4
4
  folder of files and the title of videos. Passed explicitly: variables of
5
- that name may be left over from elsewhere on the page.
5
+ that name may be left over from elsewhere on the page. Relative URLs and
6
+ files belong to the page's edition, e.g. /program/ -> /2025/program/.
6
7
  {%- endcomment -%}
7
8
  {%- assign link_valid = false -%}
8
9
  {%- if link.live -%}
@@ -32,19 +33,19 @@
32
33
  {%- assign link_href = link.absolute_url -%}
33
34
 
34
35
  {%- elsif link.relative_url -%}
35
- {%- assign link_href = link.relative_url | prepend: site.baseurl -%}
36
+ {%- assign link_href = link.relative_url | prepend: edition_base | prepend: site.baseurl -%}
36
37
 
37
38
  {%- elsif link.file -%}
38
39
  {%- assign link_icon = link.icon | default: "file-earmark-text" -%}
39
40
 
40
41
  {%- if include.context == "talk" -%}
41
- {%- assign link_href = link.file | prepend: '/documents/slides/' | prepend: site.baseurl -%}
42
+ {%- assign link_href = link.file | prepend: '/slides/' | prepend: edition_documents | prepend: site.baseurl -%}
42
43
 
43
44
  {%- elsif include.context == "speaker" -%}
44
- {%- assign link_href = link.file | prepend: '/documents/bio/' | prepend: site.baseurl -%}
45
+ {%- assign link_href = link.file | prepend: '/bio/' | prepend: edition_documents | prepend: site.baseurl -%}
45
46
 
46
47
  {%- else -%}
47
- {%- assign link_href = link.file | prepend: '/documents/' | prepend: site.baseurl -%}
48
+ {%- assign link_href = link.file | prepend: '/' | prepend: edition_documents | prepend: site.baseurl -%}
48
49
 
49
50
  {%- endif -%}
50
51
 
@@ -139,7 +140,7 @@
139
140
  >
140
141
 
141
142
  {%- elsif link.live -%}
142
- {%- if site.conference.live and site.conference.live.streaming.enable -%}
143
+ {%- if edition_live and edition_live.streaming.enable -%}
143
144
  {% include get_link_tag_streaming.html class=link_class %}
144
145
  {%- else-%}
145
146
  <a
@@ -1,16 +1,16 @@
1
1
  {%- assign stream_label = site.data.lang[site.conference.lang].live.stream | default: "Live Stream" -%}
2
2
 
3
- {%- if site.conference.live.streaming.external -%}
3
+ {%- if edition_live.streaming.external -%}
4
4
  <a
5
5
  class="{{ include.class }}"
6
- href="{{ site.conference.live.streaming.external }}"
6
+ href="{{ edition_live.streaming.external }}"
7
7
  title="{{ stream_label }}"
8
8
  >
9
9
  {%- else -%}
10
10
  {%- if r -%}
11
11
  {%- assign data_room = r -%}
12
12
  {%- else -%}
13
- {% assign data_room = site.rooms | sort: "order" | first %}
13
+ {% assign data_room = edition_rooms | first %}
14
14
  {%- endif -%}
15
15
  <a
16
16
  class="{{ include.class }}"
@@ -1,9 +1,9 @@
1
- {%- assign min_pause = site.conference.live.stop | default: 240 -%}
1
+ {%- assign min_pause = edition_live.stop | default: 240 -%}
2
2
  {%- assign min_pause = min_pause | times: 60 -%}
3
3
 
4
- {%- if site.conference.live.streaming.enable -%}
5
- {%- assign offset_start = site.conference.live.streaming.prepend | default: 5 -%}
6
- {%- assign offset_end = site.conference.live.streaming.extend | default: 5 -%}
4
+ {%- if edition_live.streaming.enable -%}
5
+ {%- assign offset_start = edition_live.streaming.prepend | default: 5 -%}
6
+ {%- assign offset_end = edition_live.streaming.extend | default: 5 -%}
7
7
  {%- else -%}
8
8
  {%- assign offset_start = 0 -%}
9
9
  {%- assign offset_end = 0 -%}
@@ -12,7 +12,7 @@
12
12
  {%- assign live_starts = "" -%}
13
13
  {%- assign live_ends = "" -%}
14
14
 
15
- {%- for d in site.data.program.days -%}
15
+ {%- for d in edition_program.days -%}
16
16
  {%- for r in d.rooms -%}
17
17
  {%- assign last_end = 0 -%}
18
18
 
@@ -7,6 +7,11 @@
7
7
 
8
8
  {%- for p in site.pages -%}
9
9
  {%- if p.layout == 'location' -%}
10
+ {%- comment -%} The page of this edition {%- endcomment -%}
11
+ {%- assign p_edition = p.edition | default: edition_current_id | append: "" -%}
12
+ {%- if edition and p_edition != edition -%}
13
+ {%- continue -%}
14
+ {%- endif -%}
10
15
  {%- assign location_page = p -%}
11
16
  {%- break -%}
12
17
  {%- endif -%}
@@ -0,0 +1,30 @@
1
+ {%- comment -%}
2
+ Dropdown menu of a link: `menu` lists its links, or is "editions" for the
3
+ menu to switch between editions. Input: link, or include.menu instead
4
+ (e.g. menu="editions"). Sets:
5
+ - menu_links: the list of links, or "editions"
6
+ - menu_name: the link's `name`; for editions, else `navigation.editions.name`,
7
+ else the page's edition id (e.g. "2026")
8
+ - menu_label: accessible name of the toggle if its text alone is unclear,
9
+ e.g. "Edition: 2026" (else nil)
10
+ - menu_empty: true for editions with fewer than two editions
11
+ {%- endcomment -%}
12
+ {%- assign menu_links = link.menu -%}
13
+ {%- assign menu_name = link.name -%}
14
+ {%- if include.menu -%}
15
+ {%- assign menu_links = include.menu -%}
16
+ {%- assign menu_name = nil -%}
17
+ {%- endif -%}
18
+ {%- assign menu_label = nil -%}
19
+ {%- assign menu_empty = false -%}
20
+
21
+ {%- if menu_links == "editions" -%}
22
+ {%- if site.conference.editions.size < 2 -%}
23
+ {%- assign menu_empty = true -%}
24
+ {%- endif -%}
25
+ {%- assign menu_name = menu_name | default: edition_nav_editions.name -%}
26
+ {%- unless menu_name -%}
27
+ {%- assign menu_name = edition -%}
28
+ {%- assign menu_label = site.data.lang[site.conference.lang].editions.title | default: "Edition" | append: ": " | append: edition -%}
29
+ {%- endunless -%}
30
+ {%- endif -%}
@@ -0,0 +1,18 @@
1
+ {%- comment -%}
2
+ URL of the edition's overview page with the given layout, wherever it
3
+ lives, e.g. include.layout="speaker-overview" for /2025/people/. Sets
4
+ overview_url (nil without such a page).
5
+ {%- endcomment -%}
6
+ {%- assign overview_url = nil -%}
7
+
8
+ {%- for p in site.pages -%}
9
+ {%- if p.layout == include.layout -%}
10
+ {%- comment -%} The page of this edition {%- endcomment -%}
11
+ {%- assign p_edition = p.edition | default: edition_current_id | append: "" -%}
12
+ {%- if edition and p_edition != edition -%}
13
+ {%- continue -%}
14
+ {%- endif -%}
15
+ {%- assign overview_url = p.url -%}
16
+ {%- break -%}
17
+ {%- endif -%}
18
+ {%- endfor -%}
@@ -6,11 +6,11 @@
6
6
 
7
7
  {%- capture page_description -%}
8
8
  {%- if page.layout == 'talk' -%}
9
- {{ site.data.lang[site.conference.lang].talk.title | default: 'Talk' }} {{ site.data.lang[site.conference.lang].pronoun.by | default: 'by'}} {% include list_speakers.html text_only=true %} {{ preposition }} {{ site.title }}
9
+ {{ site.data.lang[site.conference.lang].talk.title | default: 'Talk' }} {{ site.data.lang[site.conference.lang].pronoun.by | default: 'by'}} {% include list_speakers.html text_only=true %} {{ preposition }} {{ edition_title }}
10
10
  {%- elsif page.layout == 'speaker' -%}
11
- {{ site.data.lang[site.conference.lang].speaker.title | default: 'Speaker' }} {{ preposition }} {{ site.title }}
12
- {%- elsif site.description -%}
13
- {{ site.description }}
11
+ {{ site.data.lang[site.conference.lang].speaker.title | default: 'Speaker' }} {{ preposition }} {{ edition_title }}
12
+ {%- elsif edition_description -%}
13
+ {{ edition_description }}
14
14
  {%- endif -%}
15
15
  {%- endcapture -%}
16
16
 
@@ -1,28 +1,41 @@
1
- {%- assign program_page = nil -%}
2
- {%- assign program_url = nil -%}
3
- {%- assign program_time_steps = 15 -%}
1
+ {%- comment -%}
2
+ Resolved once per page and edition: get_talk_time.html includes this for
3
+ every talk and time step of the program
4
+ {%- endcomment -%}
5
+ {%- assign program_config_key = page.url | append: "|" | append: edition -%}
6
+ {%- unless program_config_resolved == program_config_key -%}
7
+ {%- assign program_page = nil -%}
8
+ {%- assign program_url = nil -%}
9
+ {%- assign program_time_steps = 15 -%}
4
10
 
5
- {%- for p in site.pages -%}
6
- {%- if p.layout == 'program' -%}
7
- {%- assign program_page = p -%}
8
- {%- break -%}
9
- {%- endif -%}
10
- {%- endfor -%}
11
+ {%- for p in site.pages -%}
12
+ {%- if p.layout == 'program' -%}
13
+ {%- comment -%} The page of this edition {%- endcomment -%}
14
+ {%- assign p_edition = p.edition | default: edition_current_id | append: "" -%}
15
+ {%- if edition and p_edition != edition -%}
16
+ {%- continue -%}
17
+ {%- endif -%}
18
+ {%- assign program_page = p -%}
19
+ {%- break -%}
20
+ {%- endif -%}
21
+ {%- endfor -%}
11
22
 
12
- {%- if program_page -%}
13
- {%- assign program_url = program_page.url -%}
23
+ {%- if program_page -%}
24
+ {%- assign program_url = program_page.url -%}
14
25
 
15
- {%- comment -%} A program page rounds talks to its own time steps {%- endcomment -%}
16
- {%- if page.layout == 'program' -%}
17
- {%- assign program_page = page -%}
18
- {%- endif -%}
26
+ {%- comment -%} A program page rounds talks to its own time steps {%- endcomment -%}
27
+ {%- if page.layout == 'program' -%}
28
+ {%- assign program_page = page -%}
29
+ {%- endif -%}
19
30
 
20
- {%- if program_page.time_steps -%}
21
- {%- if program_page.time_steps == "start" -%}
22
- {%- assign program_time_steps = 1 -%}
23
- {%- else -%}
24
- {%- assign program_time_steps = program_page.time_steps -%}
31
+ {%- if program_page.time_steps -%}
32
+ {%- if program_page.time_steps == "start" -%}
33
+ {%- assign program_time_steps = 1 -%}
34
+ {%- else -%}
35
+ {%- assign program_time_steps = program_page.time_steps -%}
36
+ {%- endif -%}
25
37
  {%- endif -%}
26
38
  {%- endif -%}
27
- {%- endif -%}
28
39
 
40
+ {%- assign program_config_resolved = program_config_key -%}
41
+ {%- endunless -%}
@@ -3,6 +3,6 @@
3
3
  {%- if room.live.absolute_url -%}
4
4
  {%- assign room_live_href = room.live.absolute_url -%}
5
5
  {%- elsif room.live.relative_url -%}
6
- {%- assign room_live_href = room.live.relative_url | prepend: site.baseurl -%}
6
+ {%- assign room_live_href = room.live.relative_url | prepend: edition_base | prepend: site.baseurl -%}
7
7
  {%- endif -%}
8
8
  {%- endif -%}
@@ -0,0 +1,28 @@
1
+ {%- comment -%}
2
+ Schema.org EventStatus and EventAttendanceMode of the edition, e.g.
3
+ `event_status: postponed` sets event_status to "EventPostponed". Sets
4
+ event_status, event_attendance_mode.
5
+ {%- endcomment -%}
6
+ {%- assign event_status_raw = edition_schema_org.event_status | default: "scheduled" -%}
7
+ {%- if event_status_raw == "scheduled" -%}
8
+ {%- assign event_status = "EventScheduled" -%}
9
+ {%- elsif event_status_raw == "cancelled" -%}
10
+ {%- assign event_status = "EventCancelled" -%}
11
+ {%- elsif event_status_raw == "postponed" -%}
12
+ {%- assign event_status = "EventPostponed" -%}
13
+ {%- elsif event_status_raw == "moved_online" -%}
14
+ {%- assign event_status = "EventMovedOnline" -%}
15
+ {%- else -%}
16
+ {%- assign event_status = "EventScheduled" -%}
17
+ {%- endif -%}
18
+
19
+ {%- assign event_attendance_mode_raw = edition_schema_org.event_attendance_mode | default: "offline" -%}
20
+ {%- if event_attendance_mode_raw == "offline" -%}
21
+ {%- assign event_attendance_mode = "OfflineEventAttendanceMode" -%}
22
+ {%- elsif event_attendance_mode_raw == "online" -%}
23
+ {%- assign event_attendance_mode = "OnlineEventAttendanceMode" -%}
24
+ {%- elsif event_attendance_mode_raw == "mixed" -%}
25
+ {%- assign event_attendance_mode = "MixedEventAttendanceMode" -%}
26
+ {%- else -%}
27
+ {%- assign event_attendance_mode = "OfflineEventAttendanceMode" -%}
28
+ {%- endif -%}
@@ -1,4 +1,4 @@
1
- {%- assign selected_day = site.data.program.days | where: "date", d.date | first -%}
1
+ {%- assign selected_day = edition_program.days | where: "date", d.date | first -%}
2
2
  {%- assign start_keys = "" | split: "," -%}
3
3
 
4
4
  {%- comment -%}
@@ -1,5 +1,5 @@
1
1
  {% assign tag_icon = "" %}
2
- {% for tag_prop in site.conference.talks.tags %}
2
+ {% for tag_prop in edition_tags %}
3
3
  {% if tag == tag_prop.name %}
4
4
  {% if tag_prop.icon %}
5
5
  {% assign tag_icon = tag_prop.icon %}
@@ -9,10 +9,10 @@
9
9
 
10
10
  {% if talk.hide -%}
11
11
  {%- assign talk_scheduled = false -%}
12
- {%- for d in site.data.program.days -%}
12
+ {%- for d in edition_program.days -%}
13
13
  {%- include get_day_hash.html -%}
14
14
  {%- for r in d.rooms -%}
15
- {%- assign room = site.rooms | where: 'name', r.name | first -%}
15
+ {%- assign room = edition_rooms | where: 'name', r.name | first -%}
16
16
  {%- for t in r.talks -%}
17
17
  {%- if talk.name == t.name -%}
18
18
  <p class="mb-1 fw-light">
@@ -36,8 +36,8 @@
36
36
  {%- endif %}
37
37
 
38
38
  <p class="mb-0">
39
- {%- if site.conference.live and talk.hide != true -%}
40
- {% for d in site.data.program.days -%}
39
+ {%- if edition_live and talk.hide != true -%}
40
+ {% for d in edition_program.days -%}
41
41
  {%- for r in d.rooms -%}
42
42
  {%- for t in r.talks -%}
43
43
  {%- if talk.name == t.name -%}
@@ -1,4 +1,4 @@
1
- {%- assign nbr_days = site.data.program.days | size -%}
1
+ {%- assign nbr_days = edition_program.days | size -%}
2
2
  {%- if nbr_days > 1 and day_abbr -%}
3
3
  {%- assign time_pronoun = site.data.lang[site.conference.lang].pronoun.on_ | default: "on" -%}
4
4
  {%- else -%}
@@ -1,5 +1,5 @@
1
1
  {%- assign track_color = 'light' -%}
2
- {%- for track_prop in site.conference.talks.tracks -%}
2
+ {%- for track_prop in edition_tracks -%}
3
3
  {%- if talk.track == track_prop.name -%}
4
4
  {%- assign track_color = track_prop.color | default: track_color -%}
5
5
  {%- break -%}
@@ -1,3 +1,4 @@
1
+ {%- include get_edition.html -%}
1
2
  <!DOCTYPE html>
2
3
  <html lang="{{ site.conference.lang | default: 'en' }}">
3
4
 
@@ -9,7 +10,7 @@
9
10
  <title>
10
11
  {{- page_title | escape -}}
11
12
  {%- unless page_title == empty %} - {% endunless -%}
12
- {{- site.title -}}
13
+ {{- edition_title -}}
13
14
  </title>
14
15
  {% include list_header_meta.html %}
15
16
 
@@ -46,11 +47,12 @@
46
47
  <!-- navigation bar (web only): -->
47
48
  {%- include navbar.html -%}
48
49
 
49
- {%- unless page.url == "/" -%}
50
+ {%- assign home_url = edition_base | append: "/" -%}
51
+ {%- unless page.url == home_url -%}
50
52
  <!-- site title (print only): -->
51
53
  <div class="container d-none d-print-block mt-4 mb-4">
52
54
  <h1 class="display-4">
53
- {{ site.title }}
55
+ {{ edition_title }}
54
56
  </h1>
55
57
  </div>
56
58
  {%- endunless -%}
@@ -1,18 +1,20 @@
1
1
  {%- comment -%}
2
- Stand-in for a hidden talk, speaker or room: Jekyll writes a page for every
3
- document, so make it a complete one that points to the home page
2
+ Stand-in for a hidden talk, speaker, room or location page: Jekyll writes a
3
+ page for every document, so make it a complete one that points to the home
4
+ page
4
5
  {%- endcomment -%}
6
+ {%- include get_edition.html -%}
5
7
  <!DOCTYPE html>
6
8
  <html lang="{{ site.conference.lang | default: 'en' }}">
7
9
  <head>
8
10
  <meta charset="utf-8" />
9
11
  <meta name="robots" content="noindex">
10
- <meta http-equiv="refresh" content="0; url={{ site.baseurl }}/">
11
- <title>{{ site.title | escape }}</title>
12
+ <meta http-equiv="refresh" content="0; url={{ site.baseurl }}{{ edition_base }}/">
13
+ <title>{{ edition_title | escape }}</title>
12
14
  </head>
13
15
  <body>
14
16
  <main>
15
- <h1><a href="{{ site.baseurl }}/">{{ site.title | escape }}</a></h1>
17
+ <h1><a href="{{ site.baseurl }}{{ edition_base }}/">{{ edition_title | escape }}</a></h1>
16
18
  </main>
17
19
  </body>
18
20
  </html>
@@ -11,14 +11,17 @@
11
11
  {%- endif -%}
12
12
  {%- endif -%}
13
13
 
14
- {%- if site.conference.info.bars.size > 0 -%}
15
- {%- for infobar in site.conference.info.bars -%}
14
+ {%- comment -%} Main page of the edition, e.g. /2025/ {%- endcomment -%}
15
+ {%- assign home_url = edition_base | append: "/" -%}
16
+
17
+ {%- if edition_info_bars.size > 0 -%}
18
+ {%- for infobar in edition_info_bars -%}
16
19
 
17
20
  {%- assign show_infobar = false -%}
18
- {%- if page.url == "/" and infobar.pages_only != true -%}
21
+ {%- if page.url == home_url and infobar.pages_only != true -%}
19
22
  {%- assign show_infobar = true -%}
20
23
  {%- endif -%}
21
- {%- if page.url != "/" and infobar.main_only != true -%}
24
+ {%- if page.url != home_url and infobar.main_only != true -%}
22
25
  {%- assign show_infobar = true -%}
23
26
  {%- endif -%}
24
27
 
@@ -46,14 +49,14 @@
46
49
  {%- endfor -%}
47
50
  {%- endif -%}
48
51
 
49
- {%- if site.conference.info.modals.size > 0 -%}
50
- {%- for infomodal in site.conference.info.modals -%}
52
+ {%- if edition_info_modals.size > 0 -%}
53
+ {%- for infomodal in edition_info_modals -%}
51
54
 
52
55
  {%- assign show_infomodal = false -%}
53
- {%- if page.url == "/" and infomodal.pages_only != true -%}
56
+ {%- if page.url == home_url and infomodal.pages_only != true -%}
54
57
  {%- assign show_infomodal = true -%}
55
58
  {%- endif -%}
56
- {%- if page.url != "/" and infomodal.main_only != true -%}
59
+ {%- if page.url != home_url and infomodal.main_only != true -%}
57
60
  {%- assign show_infomodal = true -%}
58
61
  {%- endif -%}
59
62
 
@@ -1,16 +1,16 @@
1
- {%- include get_page_title.html default=site.title replace_quotes=true -%}
2
- {%- include get_page_description.html default=site.title replace_quotes=true -%}
1
+ {%- include get_page_title.html default=edition_title replace_quotes=true -%}
2
+ {%- include get_page_description.html default=edition_title replace_quotes=true -%}
3
3
 
4
4
  <meta name="description" content="{{ page_description | escape }}" />
5
5
 
6
6
  {%- comment -%} Canonical URL {%- endcomment -%}
7
7
  <link rel="canonical" href="{{ page.url | prepend: site.baseurl | prepend: site.url }}" />
8
8
 
9
- {% unless site.conference.meta.link_preview.disable -%}
9
+ {% unless edition_link_preview.disable -%}
10
10
  {%- comment -%} Twitter Card tags {%- endcomment -%}
11
- {%- if site.conference.meta.link_preview.img and site.conference.meta.link_preview.img.twitter %}
11
+ {%- if edition_link_preview.img and edition_link_preview.img.twitter %}
12
12
  <meta name="twitter:card" content="summary_large_image" />
13
- <meta name="twitter:image" content="{{ site.conference.meta.link_preview.img.twitter | prepend: '/assets/images/' | prepend: site.baseurl | prepend: site.url }}" />
13
+ <meta name="twitter:image" content="{{ edition_link_preview.img.twitter | prepend: '/assets/images/' | prepend: site.baseurl | prepend: site.url }}" />
14
14
  {%- else %}
15
15
  <meta name="twitter:card" content="summary" />
16
16
  {%- endif %}
@@ -18,9 +18,9 @@
18
18
  <meta name="twitter:description" content="{{ page_description | escape }}" />
19
19
 
20
20
  {%- comment -%} Open Graph tags {%- endcomment -%}
21
- <meta property="og:site_name" content="{{ site.title }}" />
22
- {%- if site.conference.meta.link_preview.img and site.conference.meta.link_preview.img.open_graph %}
23
- {%- assign og_image_url = site.conference.meta.link_preview.img.open_graph | prepend: '/assets/images/' | prepend: site.baseurl | prepend: site.url -%}
21
+ <meta property="og:site_name" content="{{ edition_title }}" />
22
+ {%- if edition_link_preview.img and edition_link_preview.img.open_graph %}
23
+ {%- assign og_image_url = edition_link_preview.img.open_graph | prepend: '/assets/images/' | prepend: site.baseurl | prepend: site.url -%}
24
24
  <meta property="og:image" content="{{ og_image_url }}" />
25
25
  <meta property="og:image:alt" content="{{ page_title | escape }}" />
26
26
  {%- endif %}
@@ -31,7 +31,7 @@
31
31
  {%- endunless %}
32
32
 
33
33
  {%- comment -%} Schema.org JSON-LD structured data {%- endcomment -%}
34
- {%- unless site.conference.meta.schema_org.disable -%}
34
+ {%- unless edition_schema_org.disable -%}
35
35
  {%- if page.layout == 'talk' -%}
36
36
  {%- include schema_talk.html -%}
37
37
  {%- elsif page.layout == 'speaker' -%}
@@ -7,7 +7,7 @@
7
7
  <meta name="theme-color" content="{{ pwa_theme_color }}" />
8
8
  <meta name="apple-mobile-web-app-capable" content="yes" />
9
9
  <meta name="apple-mobile-web-app-status-bar-style" content="default" />
10
- <meta name="apple-mobile-web-app-title" content="{{ site.title }}" />
10
+ <meta name="apple-mobile-web-app-title" content="{{ edition_title }}" />
11
11
 
12
12
  {% if site.conference.pwa.icons -%}
13
13
  {%- assign icon = site.conference.pwa.icons | first -%}
@@ -1,5 +1,5 @@
1
1
  {% for speaker_name in talk.speakers -%}
2
- {%- assign speaker = site.speakers | where: 'name', speaker_name | first -%}
2
+ {%- assign speaker = edition_speakers | where: 'name', speaker_name | first -%}
3
3
 
4
4
  {%- if include.text_only -%}
5
5
  {{- speaker_name -}}
@@ -12,7 +12,7 @@
12
12
 
13
13
  <div class="modal-body ratio ratio-16x9">
14
14
  <iframe referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="{{ live_lang.stream | default: 'Live Stream' }}"></iframe>
15
- {%- include embed_consent.html hidden=true click_to_load=site.conference.live.streaming.click_to_load %}
15
+ {%- include embed_consent.html hidden=true click_to_load=edition_live.streaming.click_to_load %}
16
16
  <div id="stream-placeholder" class="d-none justify-content-center align-items-center" role="status" aria-live="polite" aria-atomic="true">
17
17
  <div id="stream-modal-desc"></div>
18
18
  <div id="stream-offline" class="d-none">
@@ -33,14 +33,14 @@
33
33
  </div>
34
34
 
35
35
  <div class="modal-footer justify-content-around">
36
- {%- for room in site.rooms -%}
36
+ {%- for room in edition_rooms -%}
37
37
  <button type="button" id="stream-button{{ forloop.index }}" class="btn btn-outline-primary d-none d-sm-inline" data-room="{{ room.name | escape }}" aria-pressed="false"{% unless room.live %} disabled{% endunless %}>
38
38
  {{ room.name | escape }}
39
39
  </button>
40
40
  {%- endfor %}
41
41
  <div class="w-100 d-block d-sm-none">
42
42
  <select class="form-select" id="stream-select" aria-label="{{ site.data.lang[site.conference.lang].location.rooms | default: 'Rooms' }}">
43
- {%- for room in site.rooms -%}
43
+ {%- for room in edition_rooms -%}
44
44
  <option value="{{ forloop.index }}"{% unless room.live %} disabled{% endunless %}>{{ room.name | escape }}</option>
45
45
  {%- endfor %}
46
46
  </select>
@@ -49,7 +49,7 @@
49
49
 
50
50
  {%- comment -%} Icons of the talks' live links, e.g. for a "Q&A" button {%- endcomment -%}
51
51
  {%- assign live_icons = "" | split: "" -%}
52
- {%- for talk in site.talks -%}
52
+ {%- for talk in edition_talks -%}
53
53
  {%- for link in talk.links -%}
54
54
  {%- if link.live and link.icon -%}
55
55
  {%- assign live_icons = live_icons | push: link.icon -%}