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/UPGRADE_GUIDE.md
CHANGED
|
@@ -1,14 +1,69 @@
|
|
|
1
1
|
# Upgrade Guide
|
|
2
2
|
|
|
3
|
-
This guide covers the essential changes needed to upgrade
|
|
3
|
+
This guide covers the essential changes needed to upgrade between major versions: [v4 to v5](#upgrade-from-v4-to-v5) and [v3 to v4](#upgrade-from-v3-to-v4).
|
|
4
4
|
|
|
5
5
|
For detailed documentation, see the [README](README.md).
|
|
6
6
|
|
|
7
|
+
|
|
8
|
+
## Upgrade from v4 to v5
|
|
9
|
+
|
|
10
|
+
v5 adds support for several editions of a conference in one site. Sites with a single edition keep working unchanged.
|
|
11
|
+
|
|
12
|
+
### Language File
|
|
13
|
+
|
|
14
|
+
The internationalization file gained the `editions.title` string (`version: 13`).
|
|
15
|
+
|
|
16
|
+
**Action:**
|
|
17
|
+
- If you keep your own copy of `_data/lang.yml`, replace it with the [current version](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/blob/main/_data/lang.yml).
|
|
18
|
+
|
|
19
|
+
### New Checks
|
|
20
|
+
|
|
21
|
+
With `show_errors`, the theme now also reports leftovers of v3: icons that are no [Bootstrap Icons](https://icons.getbootstrap.com/) (e.g. Font Awesome's `file-alt`, which render nothing), `map.enable` and Font Awesome markup in content (e.g. `<i class="fas fa-video"></i>`).
|
|
22
|
+
|
|
23
|
+
**Action:**
|
|
24
|
+
- Fix the reported leftovers, see [Icons](#icons) and [Map & Location Configuration](#map--location-configuration).
|
|
25
|
+
|
|
26
|
+
### Room Order
|
|
27
|
+
|
|
28
|
+
Rooms without `order` are listed as they first appear in the program instead of alphabetically. Rooms with `order` are sorted by it without `sort_by: order` in `_config.yml`.
|
|
29
|
+
|
|
30
|
+
**Action:**
|
|
31
|
+
- None, unless you relied on the alphabetical order: then set `order`.
|
|
32
|
+
|
|
33
|
+
### Hidden Location Page
|
|
34
|
+
|
|
35
|
+
A location page with `hide: true` only redirects to the home page, like hidden talks, speakers and rooms, instead of showing its content.
|
|
36
|
+
|
|
37
|
+
**Action:**
|
|
38
|
+
- None, unless the page should stay visible: then remove `hide` and its room links show again.
|
|
39
|
+
|
|
40
|
+
### Editions (optional)
|
|
41
|
+
|
|
42
|
+
Merge the sites of several editions (e.g. one repository per year) into one site, see [Editions](README.md#editions). Per edition:
|
|
43
|
+
1. Add it to `conference.editions` with its `defaults`.
|
|
44
|
+
2. Move its talks, speakers and rooms to `_talks/<id>/`, `_speakers/<id>/` and `_rooms/<id>/`.
|
|
45
|
+
3. Move `_data/program.yml` to `_data/programs/<id>.yml`.
|
|
46
|
+
4. Move its pages (`index.md`, `program/`, `talks/`, …) and `documents/` to `<id>/`.
|
|
47
|
+
|
|
48
|
+
Finally add an `index.md` with `layout: editions` and forward the former sites' addresses to `/<id>/`. On Apache, a `.htaccess` with `layout: htaccess` forwards former addresses of the current edition, e.g. `/program/` (see [Editions](README.md#editions)). Sites with a single edition need no change.
|
|
49
|
+
|
|
50
|
+
When merging, mind that:
|
|
51
|
+
- The site's `baseurl` drops the edition (e.g. `/2026` → `""`). Relative paths in content, such as `../assets/images/logo.svg`, then point into the edition's folder: use `{{ site.baseurl }}/assets/…` instead.
|
|
52
|
+
- `assets/`, `_sass/`, `manifest.json` and `sw.js` are shared by all editions. Markers on an edition's map go into a script named by its location page (`map.script`, see [Location Page](README.md#location-page)).
|
|
53
|
+
- The edition menu replaces self-made menus of previous editions: remove them.
|
|
54
|
+
- Import tools need the edition: set `EDITION` in the `schedule.yml` workflow, pass `--edition <id>` to `import_schedule.py` and the edition's folders to `import_resources.py` (e.g. `--file-folder <id>/documents/slides/ --talk-folder _talks/<id>/`).
|
|
55
|
+
- Keep settings shared by all editions (e.g. `navigation.logo`) in `conference` and add only the differing ones to an edition, see [Editions](README.md#editions).
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Upgrade from v3 to v4
|
|
59
|
+
|
|
60
|
+
The major update includes **Bootstrap 5 migration** and **configuration restructuring** where many settings moved from `_config.yml` to page Front Matter.
|
|
61
|
+
|
|
7
62
|
> [!CAUTION]
|
|
8
63
|
> This is a major version upgrade. Test thoroughly before deploying to production.
|
|
9
64
|
|
|
10
65
|
|
|
11
|
-
|
|
66
|
+
### Quick Overview
|
|
12
67
|
|
|
13
68
|
**Major Changes:**
|
|
14
69
|
- Bootstrap 4 → Bootstrap 5 (CSS classes and JavaScript APIs changed)
|
|
@@ -19,17 +74,19 @@ For detailed documentation, see the [README](README.md).
|
|
|
19
74
|
- Update theme version
|
|
20
75
|
- Move configurations
|
|
21
76
|
- Update Bootstrap syntax in custom code
|
|
77
|
+
- Replace Font Awesome icon names
|
|
78
|
+
- Update custom JavaScript and styles
|
|
22
79
|
|
|
23
|
-
|
|
80
|
+
### Critical Breaking Changes
|
|
24
81
|
|
|
25
|
-
|
|
82
|
+
#### Bootstrap 5 Upgrade
|
|
26
83
|
|
|
27
84
|
See the official [Bootstrap migration guide](https://getbootstrap.com/docs/5.3/migration/) for any custom CSS/JavaScript in your layout.
|
|
28
85
|
|
|
29
86
|
**Action:**
|
|
30
87
|
- Review custom CSS/JavaScript for Bootstrap 4 classes and update accordingly.
|
|
31
88
|
|
|
32
|
-
|
|
89
|
+
#### Main Landing Page
|
|
33
90
|
|
|
34
91
|
**Change required:**
|
|
35
92
|
```yaml
|
|
@@ -49,7 +106,7 @@ links:
|
|
|
49
106
|
**Action:**
|
|
50
107
|
- Move `conference.main` from `_config.yml` to page's Front Matter.
|
|
51
108
|
|
|
52
|
-
|
|
109
|
+
#### Information Boxes
|
|
53
110
|
|
|
54
111
|
**Rename and restructure:**
|
|
55
112
|
```yaml
|
|
@@ -67,7 +124,7 @@ conference:
|
|
|
67
124
|
- Rename `info_bars` → `info.bars`
|
|
68
125
|
- Change `color: alert` → `color: danger`
|
|
69
126
|
|
|
70
|
-
|
|
127
|
+
#### Map & Location Configuration
|
|
71
128
|
|
|
72
129
|
**Move to location page:**
|
|
73
130
|
```yaml
|
|
@@ -93,11 +150,13 @@ postal_address:
|
|
|
93
150
|
- Move `conference.map` and `conference.location` from `_config.yml` to page's Front Matter.
|
|
94
151
|
- If you specify an address, add it via dedicated `postal_address` attributes to page's Front Matter.
|
|
95
152
|
- `CartoDB.*` map providers now require an API key, which the theme cannot pass; `OpenFireMap` was removed. Switch to another `map_provider`.
|
|
153
|
+
- Remove `map.enable`: a location page with `map` shows the map.
|
|
154
|
+
- To hide the location and room links (was: `conference.location.hide: true`), create a location page with `hide: true`, even if your site had none.
|
|
96
155
|
|
|
97
156
|
> [!WARNING]
|
|
98
157
|
> From version 4 onward, only pages with `layout: location` support embedded maps.
|
|
99
158
|
|
|
100
|
-
|
|
159
|
+
#### Program Settings
|
|
101
160
|
|
|
102
161
|
**Move to program page:**
|
|
103
162
|
```yaml
|
|
@@ -112,7 +171,7 @@ show_alltimes: true
|
|
|
112
171
|
**Action:**
|
|
113
172
|
- Move `conference.program` settings from `_config.yml` to page's Front Matter.
|
|
114
173
|
|
|
115
|
-
|
|
174
|
+
#### Link Preview
|
|
116
175
|
|
|
117
176
|
**Restructure:**
|
|
118
177
|
```yaml
|
|
@@ -129,7 +188,7 @@ conference:
|
|
|
129
188
|
**Action:**
|
|
130
189
|
- Move `link_preview` under `meta.link_preview`.
|
|
131
190
|
|
|
132
|
-
|
|
191
|
+
#### Timezone
|
|
133
192
|
|
|
134
193
|
The theme now uses Jekyll's `timezone` setting (an IANA name, daylight saving time aware) instead of `conference.tz` (a fixed offset). Without it, times depend on the machine building the site.
|
|
135
194
|
|
|
@@ -141,25 +200,85 @@ timezone: Europe/Zurich # was: conference.tz: "+01:00"
|
|
|
141
200
|
**Action:**
|
|
142
201
|
- Replace `conference.tz` (or a top-level `tz`) with `timezone`.
|
|
143
202
|
|
|
144
|
-
|
|
145
|
-
|
|
203
|
+
#### Icons
|
|
204
|
+
[Font Awesome](https://fontawesome.com/) was replaced by [Bootstrap Icons](https://icons.getbootstrap.com/). Unknown icon names show no icon; from v5 on, `show_errors` reports them.
|
|
205
|
+
|
|
206
|
+
| Font Awesome (v3) | Bootstrap Icons (v4) |
|
|
207
|
+
|-------------------|----------------------|
|
|
208
|
+
| `file-alt` | `file-earmark-text` |
|
|
209
|
+
| `video` | `camera-video-fill` |
|
|
210
|
+
| `video-slash` | `camera-video-off-fill` |
|
|
211
|
+
| `train` | `train-front` |
|
|
212
|
+
| `bus` | `bus-front` |
|
|
213
|
+
| `landmark`, `industry` | `building` |
|
|
214
|
+
|
|
215
|
+
The icon font is not loaded either: the theme renders the icons it uses as inline SVGs. If your own content, layouts, or JavaScript use an icon font (e.g. `<i class="bi bi-train-front"></i>`, or `fas fa-train` of v3), add the Bootstrap Icons font to `assets/css/main.scss` (see README, section _Icons_), or use `{% include icon.html name="train-front" %}`. In JavaScript, the include only works in a file with Front Matter, e.g. `assets/js/icons.js`:
|
|
216
|
+
|
|
217
|
+
```js
|
|
218
|
+
---
|
|
219
|
+
---
|
|
220
|
+
export const TRAIN = '{% include icon.html name="train-front" %}';
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Action:**
|
|
224
|
+
- Replace Font Awesome names in `icon:` of links and tags (`_config.yml`, talks, speakers) and in your own code.
|
|
225
|
+
|
|
226
|
+
#### Custom JavaScript
|
|
227
|
+
|
|
228
|
+
The theme's JavaScript is a bundle of its own now, loaded before `assets/js/main.js` (an ES module).
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
// assets/js/main.js: no Front Matter, no {% include js/conference.js %}
|
|
232
|
+
window.conference.awaitReady().then(async () => {
|
|
233
|
+
const map = await window.conference.map.getMap(); // was: getMap() without await
|
|
234
|
+
if (map) { // was: typeof map !== 'undefined'
|
|
235
|
+
// ...
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
```
|
|
146
239
|
|
|
147
|
-
|
|
240
|
+
**Action:**
|
|
241
|
+
- Remove the Front Matter and `{% include js/conference.js %}` from `assets/js/main.js`.
|
|
242
|
+
- Await `getMap()`: it returns a promise, resolving once the visitor loaded the map (or with `null` without map).
|
|
243
|
+
|
|
244
|
+
#### Custom Styles
|
|
245
|
+
|
|
246
|
+
Bootstrap variables can no longer be set in `assets/css/main.scss` before importing the theme.
|
|
247
|
+
|
|
248
|
+
```scss
|
|
249
|
+
// _sass/bootstrap-variables.scss (was: in assets/css/main.scss)
|
|
250
|
+
$green: #4ea93f;
|
|
251
|
+
$primary: $green;
|
|
252
|
+
```
|
|
253
|
+
```scss
|
|
254
|
+
// assets/css/main.scss
|
|
255
|
+
---
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
@use "conference"; // was: @import "conference";
|
|
259
|
+
|
|
260
|
+
// Custom styles
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Action:**
|
|
264
|
+
- Set `conference.custom_style: "full"` and move Bootstrap variables to `_sass/bootstrap-variables.scss` (see README, section _Design_).
|
|
265
|
+
- Replace `@import "conference"` with `@use "conference"`, remove `$fa-font-path`.
|
|
266
|
+
- Bootstrap's mixins are no longer in scope unprefixed (e.g. `@include media-breakpoint-only(lg)`): replace them with plain media queries, e.g. `@media (min-width: 992px) and (max-width: 1199.98px)`.
|
|
148
267
|
|
|
149
|
-
|
|
268
|
+
#### Removed Settings
|
|
150
269
|
|
|
151
270
|
Remove from `_config.yml` if present:
|
|
152
271
|
- `conference.live.demo`
|
|
153
|
-
- `conference.
|
|
272
|
+
- `conference.speakers.show_firstname`
|
|
154
273
|
- `conference.talks.hide_icons`
|
|
155
274
|
- `conference.talks.hide_link_icons`
|
|
156
275
|
|
|
157
276
|
> [!WARNING]
|
|
158
277
|
> From version 4 onward, none of these settings are supported anymore.
|
|
159
278
|
|
|
160
|
-
|
|
279
|
+
### Optional New Features
|
|
161
280
|
|
|
162
|
-
|
|
281
|
+
#### Progressive Web App (PWA)
|
|
163
282
|
Enable support to let the user install your conference website as a standalone app:
|
|
164
283
|
```yaml
|
|
165
284
|
conference:
|
|
@@ -169,7 +288,7 @@ conference:
|
|
|
169
288
|
```
|
|
170
289
|
Create `manifest.json` and `sw.js` with their respective layouts.
|
|
171
290
|
|
|
172
|
-
|
|
291
|
+
#### Information Modals
|
|
173
292
|
Add modal dialogs in addition to info bars:
|
|
174
293
|
```yaml
|
|
175
294
|
conference:
|
|
@@ -179,7 +298,7 @@ conference:
|
|
|
179
298
|
text: "Modal content"
|
|
180
299
|
```
|
|
181
300
|
|
|
182
|
-
|
|
301
|
+
#### Schema.org Structured Data
|
|
183
302
|
Enhanced SEO by adding structured schema.org data:
|
|
184
303
|
```yaml
|
|
185
304
|
conference:
|
|
@@ -191,10 +310,10 @@ conference:
|
|
|
191
310
|
url: "https://example.com"
|
|
192
311
|
```
|
|
193
312
|
|
|
194
|
-
|
|
313
|
+
#### Dark Mode
|
|
195
314
|
Automatic support based on system preferences. Optionally add `img_dark` for logos.
|
|
196
315
|
|
|
197
|
-
|
|
316
|
+
#### Privacy: Map, Videos & Streams
|
|
198
317
|
The map, embedded videos (links with `video:` or `iframe: true`) and live streams are only loaded once the visitor clicks a button, as their provider receives the visitor's IP address. To load self-hosted content right away, set `click_to_load: false` in the respective place:
|
|
199
318
|
```yaml
|
|
200
319
|
# location/index.md (Front Matter)
|
data/_data/conference_assets.yml
CHANGED
data/_data/lang.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
version:
|
|
1
|
+
version: 13
|
|
2
2
|
|
|
3
3
|
en:
|
|
4
4
|
pronoun:
|
|
@@ -62,6 +62,8 @@ en:
|
|
|
62
62
|
talk:
|
|
63
63
|
overview: Talks
|
|
64
64
|
title: Talk
|
|
65
|
+
editions:
|
|
66
|
+
title: Edition
|
|
65
67
|
|
|
66
68
|
de:
|
|
67
69
|
pronoun:
|
|
@@ -125,6 +127,8 @@ de:
|
|
|
125
127
|
talk:
|
|
126
128
|
overview: Vorträge
|
|
127
129
|
title: Vortrag
|
|
130
|
+
editions:
|
|
131
|
+
title: Ausgabe
|
|
128
132
|
|
|
129
133
|
fr:
|
|
130
134
|
pronoun:
|
|
@@ -188,6 +192,8 @@ fr:
|
|
|
188
192
|
talk:
|
|
189
193
|
overview: Présentations
|
|
190
194
|
title: Présentation
|
|
195
|
+
editions:
|
|
196
|
+
title: Édition
|
|
191
197
|
|
|
192
198
|
pt:
|
|
193
199
|
pronoun:
|
|
@@ -251,3 +257,5 @@ pt:
|
|
|
251
257
|
talk:
|
|
252
258
|
overview: Apresentações
|
|
253
259
|
title: Apresentação
|
|
260
|
+
editions:
|
|
261
|
+
title: Edição
|
data/_includes/checks.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{%- assign errors = '' | split: ',' -%}
|
|
2
2
|
|
|
3
|
-
{%- if site.data.lang.version !=
|
|
3
|
+
{%- if site.data.lang.version != 13 -%}
|
|
4
4
|
{%- assign errors = errors | push: "The internationalization file in `_data/lang.yml` seems to be outdated and does not correspond to the current version of the theme. Grab the current version from the [theme's repository](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/blob/main/_data/lang.yml)." -%}
|
|
5
5
|
{%- endif -%}
|
|
6
6
|
{%- unless site.conference.lang == "en" or site.conference.lang == "de" or site.conference.lang == "fr" or site.conference.lang == "pt" -%}
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
|
|
10
10
|
{%- assign missing_tracks = "" | split: "," -%}
|
|
11
11
|
{%- assign talks_with_categories = 0 -%}
|
|
12
|
-
{%- for talk in
|
|
12
|
+
{%- for talk in edition_talks -%}
|
|
13
13
|
{%- comment -%} The track is optional {%- endcomment -%}
|
|
14
14
|
{%- assign missing_track = 0 -%}
|
|
15
15
|
{%- if talk.track -%}
|
|
16
16
|
{%- assign missing_track = 1 -%}
|
|
17
17
|
{%- endif -%}
|
|
18
|
-
{%- for track_prop in
|
|
18
|
+
{%- for track_prop in edition_tracks -%}
|
|
19
19
|
{%- if talk.track == track_prop.name -%}
|
|
20
20
|
{%- assign missing_track = 0 -%}
|
|
21
21
|
{%- break -%}
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
{%- endfor -%}
|
|
33
33
|
{%- assign main_categories_size = site.conference.talks.main_categories | size -%}
|
|
34
34
|
{%- if main_categories_size > 0 -%}
|
|
35
|
-
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please rename `conference.talks.main_categories` to `conference.talks.tracks` in your configuration. For more details, refer to the [
|
|
35
|
+
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please rename `conference.talks.main_categories` to `conference.talks.tracks` in your configuration. For more details, refer to the [Tracks & Tags](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#tracks--tags) section in the theme's README." -%}
|
|
36
36
|
{%- endif -%}
|
|
37
37
|
{%- if talks_with_categories > 0 -%}
|
|
38
|
-
{%- assign errors = errors | push: "The `categories` property in the FrontMatter of some of your talks is deprecated. Please update it by reorganizing the content into `track` and `tags` properties instead. For more details, refer to the [
|
|
38
|
+
{%- assign errors = errors | push: "The `categories` property in the FrontMatter of some of your talks is deprecated. Please update it by reorganizing the content into `track` and `tags` properties instead. For more details, refer to the [Tracks & Tags](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#tracks--tags) section in the theme's README." -%}
|
|
39
39
|
{%- endif -%}
|
|
40
40
|
{%- if missing_tracks.size > 0 -%}
|
|
41
41
|
{%- capture error_msg -%}
|
|
@@ -43,32 +43,69 @@
|
|
|
43
43
|
{%- for missing_track in missing_tracks %}
|
|
44
44
|
- {{ missing_track }}
|
|
45
45
|
{% endfor %}
|
|
46
|
-
For more details, refer to the [
|
|
46
|
+
For more details, refer to the [Tracks & Tags](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#tracks--tags) section in the theme's README
|
|
47
47
|
{%- endcapture -%}
|
|
48
48
|
{%- assign errors = errors | push: error_msg -%}
|
|
49
49
|
{%- endif -%}
|
|
50
50
|
|
|
51
51
|
{%- if site.conference.info_bars -%}
|
|
52
|
-
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please rename `conference.info_bars` to `conference.info.bars` in your configuration. For more details, refer to the [Information
|
|
52
|
+
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please rename `conference.info_bars` to `conference.info.bars` in your configuration. For more details, refer to the [Information Bars & Modals](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#information-bars--modals) section in the theme's README." -%}
|
|
53
53
|
{%- endif -%}
|
|
54
54
|
|
|
55
55
|
{%- if site.conference.link_preview -%}
|
|
56
|
-
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please rename `conference.link_preview` to `conference.meta.link_preview` in your configuration. For more details, refer to the [
|
|
56
|
+
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please rename `conference.link_preview` to `conference.meta.link_preview` in your configuration. For more details, refer to the [Link Previews](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#link-previews) section in the theme's README." -%}
|
|
57
57
|
{%- endif -%}
|
|
58
58
|
|
|
59
59
|
{%- if site.conference.program -%}
|
|
60
|
-
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please move any program configuration from `conference.program` to
|
|
60
|
+
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please move any program configuration from `conference.program` to your program file (with `layout: program`). For more details, refer to the [Program Page](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#program-page) section in the theme's README." -%}
|
|
61
61
|
{%- endif -%}
|
|
62
62
|
|
|
63
63
|
{%- if site.conference.location -%}
|
|
64
|
-
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please move any location configuration from `conference.location` to
|
|
64
|
+
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please move any location configuration from `conference.location` to your location file (with `layout: location`). For more details, refer to the [Location Page](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#location-page) section in the theme's README." -%}
|
|
65
65
|
{%- endif -%}
|
|
66
66
|
{%- if page.map and page.layout != "location" -%}
|
|
67
|
-
{%- assign errors = errors | push: "Your page's FrontMatter contains an outdated property name. Maps are no longer supported on individual pages and can only included on pages with " -%}
|
|
67
|
+
{%- assign errors = errors | push: "Your page's FrontMatter contains an outdated property name. Maps are no longer supported on individual pages and can only be included on pages with `layout: location`. For more details, refer to the [Location Page](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#location-page) section in the theme's README." -%}
|
|
68
68
|
{%- endif -%}
|
|
69
|
+
{%- if page.map.enable != nil -%}
|
|
70
|
+
{%- assign errors = errors | push: "Your page's FrontMatter contains an outdated property name. `map.enable` is no longer supported: a location page with `map` shows the map. Remove `enable`." -%}
|
|
71
|
+
{%- endif -%}
|
|
72
|
+
|
|
73
|
+
{%- comment -%}
|
|
74
|
+
Icons of the config and of this page's links that are no Bootstrap Icons,
|
|
75
|
+
e.g. Font Awesome's file-alt (icon.html renders nothing for them)
|
|
76
|
+
{%- endcomment -%}
|
|
77
|
+
{%- capture icon_names -%}{%- include icons/_names.txt -%}{%- endcapture -%}
|
|
78
|
+
{%- assign checked_icons = "" | split: "" -%}
|
|
79
|
+
{%- if edition_tags -%}
|
|
80
|
+
{%- assign checked_icons = checked_icons | concat: edition_tags -%}
|
|
81
|
+
{%- endif -%}
|
|
82
|
+
{%- if edition_nav_links -%}
|
|
83
|
+
{%- assign checked_icons = checked_icons | concat: edition_nav_links -%}
|
|
84
|
+
{%- endif -%}
|
|
85
|
+
{%- if page.links -%}
|
|
86
|
+
{%- assign checked_icons = checked_icons | concat: page.links -%}
|
|
87
|
+
{%- endif -%}
|
|
88
|
+
{%- assign checked_icons = checked_icons | map: "icon" | compact | uniq -%}
|
|
89
|
+
{%- for icon in checked_icons -%}
|
|
90
|
+
{%- assign icon_key = icon | prepend: "," | append: "," -%}
|
|
91
|
+
{%- unless icon_names contains icon_key -%}
|
|
92
|
+
{%- assign error_msg = "Unknown icon `" | append: icon | append: "`. Use the name of a [Bootstrap Icon](https://icons.getbootstrap.com/), e.g. `file-earmark-text`." -%}
|
|
93
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
94
|
+
{%- endunless -%}
|
|
95
|
+
{%- endfor -%}
|
|
96
|
+
|
|
97
|
+
{%- comment -%} Font Awesome markup in this page's content, e.g. <i class="fas fa-video"></i> {%- endcomment -%}
|
|
98
|
+
{%- assign fa_classes = "fa fa-,fas fa-,far fa-,fab fa-" | split: "," -%}
|
|
99
|
+
{%- for fa_class in fa_classes -%}
|
|
100
|
+
{%- if content contains fa_class -%}
|
|
101
|
+
{%- assign error_msg = "This page contains Font Awesome icons (e.g. `" | append: fa_class | append: "`), which are no longer supported. Use [Bootstrap Icons](https://icons.getbootstrap.com/) instead." -%}
|
|
102
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
103
|
+
{%- break -%}
|
|
104
|
+
{%- endif -%}
|
|
105
|
+
{%- endfor -%}
|
|
69
106
|
|
|
70
107
|
{%- if site.conference.main -%}
|
|
71
|
-
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please move any main configuration from `conference.main` to
|
|
108
|
+
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. Please move any main configuration from `conference.main` to your home file (with `layout: home`). For more details, refer to the [Landing Page](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#landing-page) section in the theme's README." -%}
|
|
72
109
|
{%- endif -%}
|
|
73
110
|
|
|
74
111
|
{%- if site.conference.talks.hide_icons == true or site.conference.talks.hide_link_icons -%}
|
|
@@ -79,12 +116,19 @@ For more details, refer to the [Talk Settings](https://github.com/DigitaleGesell
|
|
|
79
116
|
{%- assign errors = errors | push: "Your `_config.yml` file contains an outdated property name. The property `conference.speakers.show_firstname` is no longer supported." -%}
|
|
80
117
|
{%- endif -%}
|
|
81
118
|
|
|
82
|
-
{%- assign
|
|
119
|
+
{%- assign program_file = "_data/program.yml" -%}
|
|
120
|
+
{%- assign edition_dir = "" -%}
|
|
121
|
+
{%- if edition -%}
|
|
122
|
+
{%- assign program_file = "_data/programs/" | append: edition | append: ".yml" -%}
|
|
123
|
+
{%- assign edition_dir = edition | append: "/" -%}
|
|
124
|
+
{%- endif -%}
|
|
125
|
+
{%- assign nbr_days = edition_program.days | size -%}
|
|
83
126
|
{%- if nbr_days == 0 -%}
|
|
84
|
-
{%- assign
|
|
127
|
+
{%- assign error_msg = "Your schedule in `" | append: program_file | append: "` does not seem to contain any days. Have you already created the file?" -%}
|
|
128
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
85
129
|
{%- endif -%}
|
|
86
|
-
{%- if
|
|
87
|
-
{%- for d in
|
|
130
|
+
{%- if edition_live -%}
|
|
131
|
+
{%- for d in edition_program.days -%}
|
|
88
132
|
{%- unless d.date or d.date == "" -%}
|
|
89
133
|
{%- assign error_msg = "Day " | append: forloop.index | append: " in your schedule should have a (non-empty) `date` property." -%}
|
|
90
134
|
{%- assign errors = errors | push: error_msg -%}
|
|
@@ -92,12 +136,13 @@ For more details, refer to the [Talk Settings](https://github.com/DigitaleGesell
|
|
|
92
136
|
{%- endfor -%}
|
|
93
137
|
{%- endif -%}
|
|
94
138
|
|
|
95
|
-
{%- assign nbr_rooms =
|
|
139
|
+
{%- assign nbr_rooms = edition_rooms | size -%}
|
|
96
140
|
{%- if nbr_rooms == 0 -%}
|
|
97
|
-
{%- assign
|
|
141
|
+
{%- assign error_msg = "The `rooms` collection does not seem to contain any entry. Have you accidentally renamed the collection or is your `_rooms/" | append: edition_dir | append: "` folder empty?" -%}
|
|
142
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
98
143
|
{%- else -%}
|
|
99
|
-
{%- for room in
|
|
100
|
-
{%- assign nbr_rooms_name =
|
|
144
|
+
{%- for room in edition_rooms -%}
|
|
145
|
+
{%- assign nbr_rooms_name = edition_rooms | where: 'name', room.name | size -%}
|
|
101
146
|
{%- if nbr_rooms_name > 1 -%}
|
|
102
147
|
{%- assign error_msg = "The room with the `name` _" | append: room.name | append: "_ occurs more than once but should be unique." -%}
|
|
103
148
|
{%- assign errors = errors | push: error_msg -%}
|
|
@@ -105,12 +150,13 @@ For more details, refer to the [Talk Settings](https://github.com/DigitaleGesell
|
|
|
105
150
|
{%- endfor -%}
|
|
106
151
|
{%- endif -%}
|
|
107
152
|
|
|
108
|
-
{%- assign nbr_speakers =
|
|
153
|
+
{%- assign nbr_speakers = edition_speakers | size -%}
|
|
109
154
|
{%- if nbr_speakers == 0 -%}
|
|
110
|
-
{%- assign
|
|
155
|
+
{%- assign error_msg = "The `speakers` collection does not seem to contain any entry. Have you accidentally renamed the collection or is your `_speakers/" | append: edition_dir | append: "` folder empty?" -%}
|
|
156
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
111
157
|
{%- else -%}
|
|
112
|
-
{%- for speaker in
|
|
113
|
-
{%- assign nbr_speakers_name =
|
|
158
|
+
{%- for speaker in edition_speakers -%}
|
|
159
|
+
{%- assign nbr_speakers_name = edition_speakers | where: 'name', speaker.name | size -%}
|
|
114
160
|
{%- if nbr_speakers_name > 1 -%}
|
|
115
161
|
{%- assign error_msg = "The speaker with the `name` _" | append: speaker.name | append: "_ occurs more than once but should be unique." -%}
|
|
116
162
|
{%- assign errors = errors | push: error_msg -%}
|
|
@@ -118,12 +164,13 @@ For more details, refer to the [Talk Settings](https://github.com/DigitaleGesell
|
|
|
118
164
|
{%- endfor -%}
|
|
119
165
|
{%- endif -%}
|
|
120
166
|
|
|
121
|
-
{%- assign nbr_talks =
|
|
167
|
+
{%- assign nbr_talks = edition_talks | size -%}
|
|
122
168
|
{%- if nbr_talks == 0 -%}
|
|
123
|
-
{%- assign
|
|
169
|
+
{%- assign error_msg = "The `talks` collection does not seem to contain any entry. Have you accidentally renamed the collection or is your `_talks/" | append: edition_dir | append: "` folder empty?" -%}
|
|
170
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
124
171
|
{%- else -%}
|
|
125
|
-
{%- for talk in
|
|
126
|
-
{%- assign nbr_talks_name =
|
|
172
|
+
{%- for talk in edition_talks -%}
|
|
173
|
+
{%- assign nbr_talks_name = edition_talks | where: 'name', talk.name | size -%}
|
|
127
174
|
{%- if nbr_talks_name > 1 -%}
|
|
128
175
|
{%- assign error_msg = "The talk with the `name` _" | append: talk.name | append: "_ occurs more than once but should be unique." -%}
|
|
129
176
|
{%- assign errors = errors | push: error_msg -%}
|
|
@@ -134,6 +181,51 @@ For more details, refer to the [Talk Settings](https://github.com/DigitaleGesell
|
|
|
134
181
|
{%- if site.conference.tz -%}
|
|
135
182
|
{%- assign errors = errors | push: "The `conference.tz` setting is no longer supported. Use Jekyll's `timezone` setting instead, e.g. `timezone: Europe/Zurich` (see the upgrade guide)." -%}
|
|
136
183
|
{%- endif -%}
|
|
137
|
-
{%- if
|
|
184
|
+
{%- if edition_live and site.timezone == nil -%}
|
|
138
185
|
{%- assign errors = errors | push: "Live indications require the `timezone` setting in your `_config.yml`, e.g. `timezone: Europe/Zurich`." -%}
|
|
139
186
|
{%- endif -%}
|
|
187
|
+
|
|
188
|
+
{%- comment -%} Editions: every page and entry belongs to a listed one {%- endcomment -%}
|
|
189
|
+
{%- if edition -%}
|
|
190
|
+
{%- unless edition_config -%}
|
|
191
|
+
{%- assign error_msg = "The edition `" | append: edition | append: "` of this page is not listed in `conference.editions` in your `_config.yml` file." -%}
|
|
192
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
193
|
+
{%- endunless -%}
|
|
194
|
+
{%- assign entries_without_edition = site.talks | concat: site.speakers | concat: site.rooms | where_exp: "entry", "entry.edition == nil" -%}
|
|
195
|
+
{%- if entries_without_edition.size > 0 -%}
|
|
196
|
+
{%- assign error_msg = "Some talks, speakers or rooms have no `edition`, e.g. `" | append: entries_without_edition[0].relative_path | append: "`. Place them in a folder of their edition (e.g. `_talks/" | append: edition_current_id | append: "/`) and set `edition` for it with `defaults` in your `_config.yml` file. For more details, refer to the [Editions](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/#editions) section in the theme's README." -%}
|
|
197
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
198
|
+
{%- endif -%}
|
|
199
|
+
|
|
200
|
+
{%- comment -%}
|
|
201
|
+
Entries outside their edition's folder, e.g. _talks/2025/x.md with
|
|
202
|
+
edition 2026 (mistaken `defaults`): counted, looked up only on a mismatch
|
|
203
|
+
{%- endcomment -%}
|
|
204
|
+
{%- assign entries = site.talks | concat: site.speakers | concat: site.rooms -%}
|
|
205
|
+
{%- for e in editions -%}
|
|
206
|
+
{%- assign e_folder = "/" | append: e.id | append: "/" -%}
|
|
207
|
+
{%- assign e_entries = entries | where: "edition", e.id -%}
|
|
208
|
+
{%- assign e_entries_in_folder = e_entries | where_exp: "entry", "entry.path contains e_folder" -%}
|
|
209
|
+
{%- if e_entries_in_folder.size == e_entries.size -%}
|
|
210
|
+
{%- continue -%}
|
|
211
|
+
{%- endif -%}
|
|
212
|
+
{%- for entry in e_entries -%}
|
|
213
|
+
{%- unless entry.path contains e_folder -%}
|
|
214
|
+
{%- assign error_msg = "Some talks, speakers or rooms lie in the folder of another edition, e.g. `" | append: entry.relative_path | append: "` has the edition `" | append: e.id | append: "`. Check the `edition` set with `defaults` in your `_config.yml` file." -%}
|
|
215
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
216
|
+
{%- break -%}
|
|
217
|
+
{%- endunless -%}
|
|
218
|
+
{%- endfor -%}
|
|
219
|
+
{%- break -%}
|
|
220
|
+
{%- endfor -%}
|
|
221
|
+
|
|
222
|
+
{%- comment -%} This page outside its edition's folder, e.g. 2025/program/index.md without edition {%- endcomment -%}
|
|
223
|
+
{%- unless page.collection -%}
|
|
224
|
+
{%- assign page_folder = page.path | split: "/" | first -%}
|
|
225
|
+
{%- assign page_folder_edition = editions | where: "id", page_folder | first -%}
|
|
226
|
+
{%- if page_folder_edition and page_folder != edition -%}
|
|
227
|
+
{%- assign error_msg = "This page lies in the folder of the edition `" | append: page_folder | append: "`, but has the edition `" | append: edition | append: "`. Set `edition` for the folder with `defaults` in your `_config.yml` file." -%}
|
|
228
|
+
{%- assign errors = errors | push: error_msg -%}
|
|
229
|
+
{%- endif -%}
|
|
230
|
+
{%- endunless -%}
|
|
231
|
+
{%- endif -%}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
{%- assign lang = site.data.lang[site.conference.lang] -%}
|
|
6
6
|
{
|
|
7
7
|
"baseurl": {{ site.baseurl | jsonify }},
|
|
8
|
+
"edition": {{ edition | jsonify }},
|
|
9
|
+
"edition_current": {{ edition_current | jsonify }},
|
|
8
10
|
|
|
9
11
|
{%- include get_location_config.html -%}
|
|
10
12
|
{%- if location_map %}
|
|
@@ -12,14 +14,17 @@
|
|
|
12
14
|
"map_provider": {{ location_map.map_provider | default: 'OpenStreetMap.Mapnik' | jsonify }},
|
|
13
15
|
"home_coord": [{{ location_map.home_coord | default: '47.3744489, 8.5410422' }}],
|
|
14
16
|
"default_zoom": {{ location_map.default_zoom | default: 17 }}
|
|
17
|
+
{%- if location_map.script %},
|
|
18
|
+
"script": {{ location_map.script | prepend: '/assets/js/' | prepend: site.baseurl | jsonify }}
|
|
19
|
+
{%- endif %}
|
|
15
20
|
},
|
|
16
21
|
{%- endif %}
|
|
17
22
|
|
|
18
|
-
{% if
|
|
23
|
+
{% if edition_live -%}
|
|
19
24
|
"live": {
|
|
20
25
|
"timezone": {{ site.timezone | jsonify }},
|
|
21
26
|
"days": [
|
|
22
|
-
{%- for d in
|
|
27
|
+
{%- for d in edition_program.days %}
|
|
23
28
|
{
|
|
24
29
|
{%- include get_day_hash.html %}
|
|
25
30
|
"name": {{ day_name | jsonify }},
|
|
@@ -30,11 +35,11 @@
|
|
|
30
35
|
},
|
|
31
36
|
{%- endif %}
|
|
32
37
|
|
|
33
|
-
{% if
|
|
38
|
+
{% if edition_live.streaming.enable -%}
|
|
34
39
|
"stream": {
|
|
35
|
-
"pause": {{
|
|
36
|
-
"prepend": {{
|
|
37
|
-
"extend": {{
|
|
40
|
+
"pause": {{ edition_live.streaming.pause | default: 60 }},
|
|
41
|
+
"prepend": {{ edition_live.streaming.prepend | default: 5 }},
|
|
42
|
+
"extend": {{ edition_live.streaming.extend | default: 5 }}
|
|
38
43
|
},
|
|
39
44
|
{%- endif %}
|
|
40
45
|
|