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/README.md
CHANGED
|
@@ -20,7 +20,7 @@ The theme was created for the yearly Winterkongress conference of the [Digital S
|
|
|
20
20
|
- [Demo: Winterkongress](https://winterkongress.ch/)
|
|
21
21
|
|
|
22
22
|
> [!WARNING]
|
|
23
|
-
> If you
|
|
23
|
+
> If you upgrade from an earlier major version, please note the necessary changes in the [upgrade guide](UPGRADE_GUIDE.md).
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
## Table of Contents
|
|
@@ -29,38 +29,40 @@ The theme was created for the yearly Winterkongress conference of the [Digital S
|
|
|
29
29
|
- [Gem-based Method](#gem-based-method)
|
|
30
30
|
- [Remote Theme Method](#remote-theme-method)
|
|
31
31
|
- [Setup](#setup)
|
|
32
|
-
- [
|
|
32
|
+
- [Import from pretalx](#import-from-pretalx)
|
|
33
33
|
- [Automatic Build](#automatic-build)
|
|
34
34
|
- [Configuration](#configuration)
|
|
35
|
-
- [
|
|
35
|
+
- [Error Checks](#error-checks)
|
|
36
36
|
- [Collection URLs](#collection-urls)
|
|
37
37
|
- [Language](#language)
|
|
38
38
|
- [Timezone](#timezone)
|
|
39
39
|
- [Navigation Bar](#navigation-bar)
|
|
40
|
-
- [Meta Data
|
|
41
|
-
- [
|
|
42
|
-
- [Information Boxes & Modals](#information-boxes--modals)
|
|
40
|
+
- [Meta Data](#meta-data)
|
|
41
|
+
- [Information Bars & Modals](#information-bars--modals)
|
|
43
42
|
- [Live Indications & Streaming](#live-indications--streaming)
|
|
44
43
|
- [Progressive Web App (PWA)](#progressive-web-app-pwa)
|
|
45
|
-
- [
|
|
46
|
-
- [
|
|
47
|
-
- [
|
|
44
|
+
- [Tracks & Tags](#tracks--tags)
|
|
45
|
+
- [Landing Page](#landing-page)
|
|
46
|
+
- [Location Page](#location-page)
|
|
47
|
+
- [Program Page](#program-page)
|
|
48
|
+
- [Editions](#editions)
|
|
48
49
|
- [Content](#content)
|
|
49
50
|
- [Schedule / Program](#schedule--program)
|
|
50
51
|
- [Talks](#talks)
|
|
51
52
|
- [Speakers](#speakers)
|
|
52
53
|
- [Rooms](#rooms)
|
|
53
54
|
- [Links](#links)
|
|
54
|
-
- [
|
|
55
|
-
- [Additional Pages](#additional-pages)
|
|
55
|
+
- [Pages](#pages)
|
|
56
56
|
- [Design](#design)
|
|
57
57
|
- [Pre-compiled Bundle (Default)](#pre-compiled-bundle-default)
|
|
58
58
|
- [Split Bundle (Custom Bootstrap CSS)](#split-bundle-custom-bootstrap-css)
|
|
59
|
+
- [Full Custom Build (Custom SCSS)](#full-custom-build-custom-scss)
|
|
59
60
|
- [Icons](#icons)
|
|
60
|
-
- [JavaScript](#javascript)
|
|
61
|
+
- [Custom JavaScript](#custom-javascript)
|
|
61
62
|
- [Development](#development)
|
|
62
63
|
- [Jekyll Theme Development](#jekyll-theme-development)
|
|
63
64
|
- [JavaScript & CSS Development](#javascript--css-development)
|
|
65
|
+
- [Tests](#tests)
|
|
64
66
|
- [License](#license)
|
|
65
67
|
|
|
66
68
|
|
|
@@ -128,50 +130,39 @@ To install:
|
|
|
128
130
|
bundle
|
|
129
131
|
```
|
|
130
132
|
|
|
131
|
-
4. Add `remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@
|
|
133
|
+
4. Add `remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v5.0.0"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
|
|
132
134
|
|
|
133
135
|
```yaml
|
|
134
|
-
remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@
|
|
136
|
+
remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v5.0.0"
|
|
135
137
|
```
|
|
136
138
|
|
|
137
139
|
5. Continue with the [_Setup_](#setup) section below to customize the theme and add content for your conference.
|
|
138
140
|
|
|
139
|
-
To update the theme, change the version tag in the `remote_theme` value (e.g., `@v4.
|
|
141
|
+
To update the theme, change the version tag in the `remote_theme` value (e.g., `@v4.1.0` to `@v5.0.0`).
|
|
140
142
|
|
|
141
143
|
|
|
142
144
|
## Setup
|
|
143
145
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
The schedule defining when and in which room a talk takes place is stored as a [YAML data file](https://jekyllrb.com/docs/datafiles/) under `_data/program.yml`. For further details about it see below in the section [_Content_](#content).
|
|
146
|
+
Add the talks, speakers, rooms and the schedule of your conference as described in the section [_Content_](#content), and adapt the theme as described in the section [_Configuration_](#configuration). The tools below import them or build the site for you.
|
|
147
147
|
|
|
148
148
|
> [!TIP]
|
|
149
149
|
> Please note that the generated website can be large containing many unnecessary whitespaces. It is recommended to minimize the generated output files before uploading them to a server (e.g., with [minify](https://github.com/tdewolff/minify)).
|
|
150
150
|
|
|
151
|
-
###
|
|
151
|
+
### Import from pretalx
|
|
152
152
|
|
|
153
153
|
In this repository, you'll find the Python file `_tools/import_schedule.py`. This script allows you to import content from a [frab](https://github.com/frab/frab/wiki/Manual#introduction)-compatible JSON file, such as those exported from [pretalx.com](https://pretalx.com/p/about/).
|
|
154
154
|
|
|
155
155
|
1. Copy the files `_tools/import_schedule.py` and `_tools/requirements.txt` from this repository
|
|
156
156
|
|
|
157
|
-
2.
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
python -m venv .venv
|
|
161
|
-
source .venv/bin/activate
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
3. Install the requirements
|
|
157
|
+
2. Execute the script with [uv](https://docs.astral.sh/uv/), which installs the requirements, e.g., to show the help type
|
|
165
158
|
|
|
166
159
|
```bash
|
|
167
|
-
|
|
160
|
+
uv run --no-project --with-requirements _tools/requirements.txt python _tools/import_schedule.py --help
|
|
168
161
|
```
|
|
169
162
|
|
|
170
|
-
|
|
163
|
+
With several [editions](#editions), pass the edition's id, e.g. `--edition 2026`: the script then writes to `_talks/2026/`, …, `_data/programs/2026.yml` and creates the edition's overview pages.
|
|
171
164
|
|
|
172
|
-
|
|
173
|
-
python _tools/import_schedule.py --help
|
|
174
|
-
```
|
|
165
|
+
Likewise, `_tools/import_resources.py` imports resources such as slides and other documents from [pretalx.com](https://pretalx.com/p/about/) via its API. It downloads all files, stores them and updates the links of the talks concerned (see [_Links_](#links)). Run it the same way, e.g., `uv run --no-project --with-requirements _tools/requirements.txt python _tools/import_resources.py --help`. With several [editions](#editions), pass the edition's folders, e.g. `--file-folder 2026/documents/slides/ --talk-folder _talks/2026/`.
|
|
175
166
|
|
|
176
167
|
### Automatic Build
|
|
177
168
|
|
|
@@ -179,11 +170,13 @@ If you prefer not to install the full Ruby/Jekyll toolchain locally, you can lev
|
|
|
179
170
|
|
|
180
171
|
- `build.yml`: This workflow automatically builds and optimizes the website whenever a new tag starting with `v` (e.g., `v2020.01.01`) is added. It then attaches the generated website as an archive to a release for easy download.
|
|
181
172
|
- `test.yml`: This workflow automatically attempts to build the website upon a new pull request, making it suitable for use as a status check before merging.
|
|
182
|
-
- `schedule.yml`: This workflow automatically generates schedule and content files when a new pull request includes a `schedule.json` file (
|
|
173
|
+
- `schedule.yml`: This workflow automatically generates schedule and content files when a new pull request includes a `schedule.json` file (see [_Import from pretalx_](#import-from-pretalx)). This enables quick content updates from [pretalx.com](https://pretalx.com/p/about/) exports. With several [editions](#editions), set its `EDITION` variable to the id of the edition to import.
|
|
183
174
|
|
|
184
175
|
To get started, simply copy the desired workflow file to your repository and adapt it to your needs:
|
|
185
176
|
|
|
186
177
|
- `_tools/build.yml` -> `.github/workflows/build.yml`
|
|
178
|
+
- `_tools/test.yml` -> `.github/workflows/test.yml`
|
|
179
|
+
- `_tools/schedule.yml` -> `.github/workflows/schedule.yml`
|
|
187
180
|
|
|
188
181
|
> [!IMPORTANT]
|
|
189
182
|
> Please note that the `Gemfile.lock` of your project must be adapted to include specific versions required by GitHub's workflow server, i.e., run `bundle lock --add-platform x86_64-linux` to add support for them.
|
|
@@ -191,9 +184,9 @@ To get started, simply copy the desired workflow file to your repository and ada
|
|
|
191
184
|
|
|
192
185
|
## Configuration
|
|
193
186
|
|
|
194
|
-
|
|
187
|
+
Most settings of this theme are stored under the `conference` property in the `_config.yml` file. Some are Jekyll's own settings at the top level (e.g. `timezone`), and the settings of the main landing page, the location page and the program page are stored in their Front Matter (sections at the end).
|
|
195
188
|
|
|
196
|
-
###
|
|
189
|
+
### Error Checks
|
|
197
190
|
|
|
198
191
|
Upon building, the theme runs some basic verification to check if all necessary files and configurations are in place. If it encounters an error it shows this by adding an information bar on all your sites. You can disable this, e.g., in a production environment, by setting `show_errors` to `false` (default: `true`).
|
|
199
192
|
|
|
@@ -241,7 +234,7 @@ defaults:
|
|
|
241
234
|
layout: room
|
|
242
235
|
```
|
|
243
236
|
|
|
244
|
-
To change the URL of the collection, simply edit the `permalink` property and replace the `:collection` tag (which translates to `talks`, `speakers` and `rooms`) with your desired value.
|
|
237
|
+
To change the URL of the collection, simply edit the `permalink` property and replace the `:collection` tag (which translates to `talks`, `speakers` and `rooms`) with your desired value.
|
|
245
238
|
|
|
246
239
|
> [!NOTE]
|
|
247
240
|
> Please note that while you might want to change the URLs, the name of the three collections (`talks`, `speakers` and `rooms`) is fixed and cannot be changed.
|
|
@@ -276,7 +269,7 @@ timezone: Europe/Zurich
|
|
|
276
269
|
|
|
277
270
|
### Navigation Bar
|
|
278
271
|
|
|
279
|
-
The navigation bar is located at the top and visible on every site. On the left, it shows the title of the website (`site.title`) followed by the links listed under the `links` property of the `navigation` property. See the [_Content_](#content) > [_Links_](#links) section below for the available properties per link.
|
|
272
|
+
The navigation bar is located at the top and visible on every site. On the left, it shows the title of the website (`site.title`) followed by the links listed under the `links` property of the `navigation` property. See the [_Content_](#content) > [_Links_](#links) section below for the available properties per link. Icons are only shown when installed as an app (see below).
|
|
280
273
|
|
|
281
274
|
Example:
|
|
282
275
|
|
|
@@ -287,12 +280,30 @@ conference:
|
|
|
287
280
|
- name: Program
|
|
288
281
|
relative_url: /program/
|
|
289
282
|
- live: true
|
|
290
|
-
- name:
|
|
283
|
+
- name: About # dropdown menu
|
|
291
284
|
menu:
|
|
292
|
-
- name:
|
|
293
|
-
|
|
294
|
-
- name:
|
|
295
|
-
relative_url: /
|
|
285
|
+
- name: Location
|
|
286
|
+
relative_url: /location/
|
|
287
|
+
- name: Code of Conduct
|
|
288
|
+
relative_url: /code-of-conduct/
|
|
289
|
+
- name: Contact
|
|
290
|
+
absolute_url: mailto:info@example.org
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
With several [_Editions_](#editions), a menu to switch between them appears at the end of the navigation bar, labelled with the page's edition. A link with `menu: editions` places it among the links instead (see [_Links_](#links)). The `editions` property under the `navigation` property adapts it:
|
|
294
|
+
|
|
295
|
+
- `name` labels the menu instead of the edition; a link's own `name` wins.
|
|
296
|
+
- `hide: true` removes the menu at the end, but not a link with `menu: editions`.
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
conference:
|
|
300
|
+
navigation:
|
|
301
|
+
editions:
|
|
302
|
+
name: Editions
|
|
303
|
+
links:
|
|
304
|
+
- name: Program
|
|
305
|
+
relative_url: /program/
|
|
306
|
+
- menu: editions
|
|
296
307
|
```
|
|
297
308
|
|
|
298
309
|
Optionally, a logo or link of your organization hosting the conference can be shown on the right side of the navigation bar. It is activated through the `logo` property under the `navigation` property containing
|
|
@@ -315,7 +326,7 @@ conference:
|
|
|
315
326
|
url: 'https://github.com'
|
|
316
327
|
```
|
|
317
328
|
|
|
318
|
-
The navigation bar automatically collapses when the available space is too small (e.g., on a smaller screen). The breakpoints are given by [Bootstrap](https://getbootstrap.com/docs/5.3/layout/breakpoints/). The default breakpoint is `md` (collapsing if the screen width is smaller than
|
|
329
|
+
The navigation bar automatically collapses when the available space is too small (e.g., on a smaller screen). The breakpoints are given by [Bootstrap](https://getbootstrap.com/docs/5.3/layout/breakpoints/). The default breakpoint is `md` (collapsing if the screen width is smaller than 768px). It can be adapted by setting the `breakpoint` property under the `navigation` property to either `sm`, `md`, `lg`, or `xl`.
|
|
319
330
|
|
|
320
331
|
When installed as a progressive web application (see the [_Progressive Web App (PWA)_](#progressive-web-app-pwa) section below), the navigation bar moves to the bottom. In PWA mode, it displays link icons and ignores links with `live: true`. Please note that the navigation bar has a limited width and no vertical scrolling. To hide an entry in this mode, set `pwa_hide: true` on its link.
|
|
321
332
|
|
|
@@ -331,7 +342,7 @@ conference:
|
|
|
331
342
|
relative_url: /supporters/
|
|
332
343
|
```
|
|
333
344
|
|
|
334
|
-
### Meta Data
|
|
345
|
+
### Meta Data
|
|
335
346
|
|
|
336
347
|
The theme automatically includes the necessary `<meta>` tags to ease link previewing when sharing links based on the [Open Graph protocol](https://ogp.me/) (used by all major social networks and messenger apps) and [Twitter Cards](https://developer.x.com/en/docs/x-for-websites/cards/overview/abouts-cards) (used by X). These tags control how a link is shown when shared via different platforms and apps. The theme also includes [Schema.org](https://schema.org/) JSON-LD structured data to help search engines better understand and display the conference and its talks, potentially showing event cards, speaker information, and enhanced search listings.
|
|
337
348
|
|
|
@@ -360,7 +371,7 @@ conference:
|
|
|
360
371
|
open_graph: "facebook_preview.png" # inside /assets/images/
|
|
361
372
|
```
|
|
362
373
|
|
|
363
|
-
####
|
|
374
|
+
#### Structured Data (Schema.org)
|
|
364
375
|
|
|
365
376
|
Support for [Schema.org](https://schema.org/) JSON-LD structured data is organized under the `schema_org` property part of the `meta` property. It can be disabled by setting `disable` to `true`. Different schemas are generated depending on the page type, and these schemas are interconnected. The following schemas are generated:
|
|
366
377
|
- `ConferenceEvent` (main and program page)
|
|
@@ -402,6 +413,7 @@ Optionally, the following properties can be added under the `schema_org` propert
|
|
|
402
413
|
|
|
403
414
|
```yaml
|
|
404
415
|
conference:
|
|
416
|
+
meta:
|
|
405
417
|
schema_org:
|
|
406
418
|
disable: false # Set to true to disable Schema.org JSON-LD structured data
|
|
407
419
|
event_status: "scheduled" # Options: scheduled, cancelled, postponed, moved_online
|
|
@@ -419,31 +431,7 @@ conference:
|
|
|
419
431
|
img: "conference.png" # inside /assets/images/
|
|
420
432
|
```
|
|
421
433
|
|
|
422
|
-
###
|
|
423
|
-
|
|
424
|
-
The main landing page is shown at the root of the website to greet new visitors. To show it you need to create a `index.md` file in the root of your website's folder and specify its layout as `layout: home`.
|
|
425
|
-
|
|
426
|
-
The main page states your site's title (`site.title`) or a logo instead. The logo can be configured through the `header` property of the main page's FrontMatter containing
|
|
427
|
-
|
|
428
|
-
- a `img` property specifying the path to the image file relative to the `/assets/images/` folder.
|
|
429
|
-
- optionally a `img_dark` property for a dark mode version of the logo, which will be automatically displayed when the user's system is in dark mode. If not specified, the regular `img` will be used in both light and dark modes.
|
|
430
|
-
|
|
431
|
-
The title/logo on the main page is followed by a description of your site (`site.description`) and the content of your `index.md` file. It ends with an optional list of link buttons. See the [_Content_](#content) > [_Links_](#links) section below for the available properties per link.
|
|
432
|
-
|
|
433
|
-
```yaml
|
|
434
|
-
layout: home
|
|
435
|
-
header:
|
|
436
|
-
img: "main_logo.png"
|
|
437
|
-
img_dark: "main_logo_dark.png" # optional: dark mode version
|
|
438
|
-
links:
|
|
439
|
-
- name: Program
|
|
440
|
-
relative_url: /program/
|
|
441
|
-
- name: Tickets
|
|
442
|
-
disabled: true
|
|
443
|
-
absolute_url: ''
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
### Information Boxes & Modals
|
|
434
|
+
### Information Bars & Modals
|
|
447
435
|
|
|
448
436
|
The theme supports two types of information displays: banners at the top of the page (`bars`) and dialog popups (`modals`). Both can be used to inform your visitors about important news and announcements.
|
|
449
437
|
|
|
@@ -511,14 +499,14 @@ This can be further extended if some talks have an associated live stream: When
|
|
|
511
499
|
|
|
512
500
|
To activate these functionalities, each day in the `program.yml` file must contain a `date` property (see section [_Content_](#content) > [Schedule / Program](#schedule--program) below) and the `live` property has to be set in the configuration file containing
|
|
513
501
|
|
|
514
|
-
- how long a pause between two consecutive talks has to be for the live indication to pause (`stop`),
|
|
502
|
+
- optionally, how long a pause between two consecutive talks has to be for the live indication to pause (`stop`, default: `240`), and
|
|
515
503
|
- optionally, under the `streaming` property:
|
|
516
504
|
- if streaming should be enabled (`enable`), and if enabled
|
|
517
|
-
- how many minutes the stream goes active before a talk (`prepend`),
|
|
518
|
-
- how many minutes the stream stays active after a talk (`extend`),
|
|
519
|
-
- how long a pause between two consecutive talks has to be for the stream to pause (`pause`),
|
|
505
|
+
- how many minutes the stream goes active before a talk (`prepend`, default: `5`),
|
|
506
|
+
- how many minutes the stream stays active after a talk (`extend`, default: `5`),
|
|
507
|
+
- how long a pause between two consecutive talks has to be for the stream to pause (`pause`, default: `60`),
|
|
520
508
|
- if the stream is only loaded once the visitor clicks a button, as the streaming provider receives the visitor's IP address (`click_to_load`, default: `true`; set to `false` for self-hosted streams), and
|
|
521
|
-
- an external (absolute) link to which the user will be redirected instead of opening the modal (`external`)
|
|
509
|
+
- an external (absolute) link to which the user will be redirected instead of opening the modal (`external`).
|
|
522
510
|
|
|
523
511
|
```yaml
|
|
524
512
|
conference:
|
|
@@ -535,7 +523,7 @@ conference:
|
|
|
535
523
|
|
|
536
524
|
### Progressive Web App (PWA)
|
|
537
525
|
|
|
538
|
-
The theme includes built-in support for Progressive Web App (PWA) functionality, allowing your conference website to be installed on users' devices and work offline. Once a visitor opened the site, all pages (program, talks, speakers, rooms, …) and all files below `assets/` (stylesheets, scripts, images, fonts) are available offline. Documents (`documents/`) and map tiles are not. Pages and data are always loaded fresh when online, so schedule changes reach visitors right away (falling back to the stored copy if the network does not answer within 3 seconds, e.g. on a crowded conference Wi-Fi). When the site is rebuilt, installed apps only download what changed: the theme's bundles are versioned by their content, all other files are revalidated. PWA functionality is disabled by default. To enable it, multiple manual steps are necessary to add the necessary files:
|
|
526
|
+
The theme includes built-in support for Progressive Web App (PWA) functionality, allowing your conference website to be installed on users' devices and work offline. Once a visitor opened the site, all pages (program, talks, speakers, rooms, …) and all files below `assets/` (stylesheets, scripts, images, fonts) are available offline. Documents (`documents/`, with [editions](#editions) `<id>/documents/`) and map tiles are not. Pages and data are always loaded fresh when online, so schedule changes reach visitors right away (falling back to the stored copy if the network does not answer within 3 seconds, e.g. on a crowded conference Wi-Fi). When the site is rebuilt, installed apps only download what changed: the theme's bundles are versioned by their content, all other files are revalidated. PWA functionality is disabled by default. To enable it, multiple manual steps are necessary to add the necessary files:
|
|
539
527
|
|
|
540
528
|
1. Enable and optionally customize the functionality in your `_config.yml`:
|
|
541
529
|
```yaml
|
|
@@ -546,7 +534,7 @@ The theme includes built-in support for Progressive Web App (PWA) functionality,
|
|
|
546
534
|
# Theme color for the PWA (default: Bootstrap primary color, #0d6efd)
|
|
547
535
|
theme_color: "#0d6efd"
|
|
548
536
|
|
|
549
|
-
# Background color for the PWA (default:
|
|
537
|
+
# Background color for the PWA (default: white, #ffffff)
|
|
550
538
|
background_color: "#ffffff"
|
|
551
539
|
|
|
552
540
|
# PWA icons configuration
|
|
@@ -592,9 +580,9 @@ The theme includes built-in support for Progressive Web App (PWA) functionality,
|
|
|
592
580
|
> [!NOTE]
|
|
593
581
|
> Please note that when installed as a PWA, the navigation bar moves to the bottom and includes icons. See the [_Navigation Bar_](#navigation-bar) section above for more information.
|
|
594
582
|
|
|
595
|
-
###
|
|
583
|
+
### Tracks & Tags
|
|
596
584
|
|
|
597
|
-
Talks can optionally be organized into tracks, where each track groups talks under a common subject. Tracks are visually distinct across the website, especially in the program, by a unique color. Additionally, each talk can have one or more associated tags. Both tracks and tags are linked via the talk's Front Matter (refer to the [_Content_](#content) > [_Talks_](#talks)
|
|
585
|
+
Talks can optionally be organized into tracks, where each track groups talks under a common subject. Tracks are visually distinct across the website, especially in the program, by a unique color. Additionally, each talk can have one or more associated tags. Both tracks and tags are linked via the talk's Front Matter (refer to the [_Content_](#content) > [_Talks_](#talks) section below for more details).
|
|
598
586
|
|
|
599
587
|
To define available tracks, add the `tracks` property under the `talks` property in the configuration file. This property is a list of tracks, with each track requiring:
|
|
600
588
|
|
|
@@ -631,10 +619,34 @@ conference:
|
|
|
631
619
|
# Talk tags
|
|
632
620
|
tags:
|
|
633
621
|
- name: No recording
|
|
634
|
-
icon: video-
|
|
622
|
+
icon: camera-video-off-fill
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### Landing Page
|
|
626
|
+
|
|
627
|
+
The main landing page is shown at the root of the website to greet new visitors. To show it you need to create a `index.md` file in the root of your website's folder and specify its layout as `layout: home`.
|
|
628
|
+
|
|
629
|
+
The main page states your site's title (`site.title`) or a logo instead. The logo can be configured through the `header` property of the main page's Front Matter containing
|
|
630
|
+
|
|
631
|
+
- a `img` property specifying the path to the image file relative to the `/assets/images/` folder.
|
|
632
|
+
- optionally a `img_dark` property for a dark mode version of the logo, which will be automatically displayed when the user's system is in dark mode. If not specified, the regular `img` will be used in both light and dark modes.
|
|
633
|
+
|
|
634
|
+
The title/logo on the main page is followed by a description of your site (`site.description`) and the content of your `index.md` file. It ends with an optional list of link buttons. See the [_Content_](#content) > [_Links_](#links) section below for the available properties per link.
|
|
635
|
+
|
|
636
|
+
```yaml
|
|
637
|
+
layout: home
|
|
638
|
+
header:
|
|
639
|
+
img: "main_logo.png"
|
|
640
|
+
img_dark: "main_logo_dark.png" # optional: dark mode version
|
|
641
|
+
links:
|
|
642
|
+
- name: Program
|
|
643
|
+
relative_url: /program/
|
|
644
|
+
- name: Tickets
|
|
645
|
+
disabled: true
|
|
646
|
+
absolute_url: ''
|
|
635
647
|
```
|
|
636
648
|
|
|
637
|
-
### Location
|
|
649
|
+
### Location Page
|
|
638
650
|
|
|
639
651
|
To help users find your venue, an [OpenStreetMap](https://www.openstreetmap.org/) container displaying a map can be shown on the location page as well as the address of the venue. You can define the initial position of the map by setting the default zoom level `default_zoom`, the center coordinates `home_coord`, and the map provider for the tiles `map_provider`. Alternative map providers can be found [here](https://leaflet-extras.github.io/leaflet-providers/preview/).
|
|
640
652
|
The map contains small control buttons to zoom in and out, center the map back to the initial position, and show the visitor's current location (has to be manually activated and granted by the visitor).
|
|
@@ -644,12 +656,13 @@ To protect the visitors' privacy, the map is only loaded once the visitor clicks
|
|
|
644
656
|
Location settings are configured directly in the Front Matter of the location page (the page with `layout: location`). The location page's Front Matter supports the following properties:
|
|
645
657
|
|
|
646
658
|
- `title`: The title shown in the navigation bar for the location section (defaults to "Location")
|
|
647
|
-
- `hide`: Set to `true` to hide the location page and all room links (default: `false`). Hidden rooms still need to exist in the `_rooms/` directory as references.
|
|
659
|
+
- `hide`: Set to `true` to hide the location page and all room links (default: `false`). The page then only redirects to the home page. Hidden rooms still need to exist in the `_rooms/` directory as references.
|
|
648
660
|
- `map`: Map configuration object with the following properties:
|
|
649
661
|
- `home_coord`: Center coordinates of the map (e.g., `47.37808, 8.53935`)
|
|
650
662
|
- `default_zoom`: Initial zoom level (e.g., `17`)
|
|
651
663
|
- `map_provider`: Tile provider (default: `"OpenStreetMap.Mapnik"`)
|
|
652
664
|
- `click_to_load`: Load the map only after the visitor's consent (default: `true`)
|
|
665
|
+
- `script`: Script adapting the map, e.g. adding markers (see below)
|
|
653
666
|
- `postal_address`: Postal address displayed on the location page and used in schema.org structured data. Can contain:
|
|
654
667
|
- `name`: Venue name (e.g., "Zentralwäscherei")
|
|
655
668
|
- `street`: Street address (e.g., "Neue Hard 12")
|
|
@@ -681,32 +694,24 @@ map:
|
|
|
681
694
|
Welcome to our conference venue!
|
|
682
695
|
```
|
|
683
696
|
|
|
684
|
-
The map is based on the [Leaflet](https://leafletjs.com/) JavaScript library.
|
|
685
|
-
|
|
686
|
-
1. The conference JavaScript bundle (`conference.bundle.js`) is automatically loaded and provides all necessary libraries
|
|
687
|
-
2. Await the initialization of the theme's object using `window.conference.awaitReady()`
|
|
688
|
-
3. Fetch the map object and verify it is set (while the JavaScript code is executed on each page, the map object will only exist on the location page). The returned promise resolves once the visitor loaded the map.
|
|
689
|
-
4. Modify the map.
|
|
690
|
-
|
|
691
|
-
The following example for `assets/js/main.js` adds a simple marker to the map:
|
|
697
|
+
The map is based on the [Leaflet](https://leafletjs.com/) JavaScript library. To add markers, text, or shapes, name a script in `map.script`, relative to `assets/js/` (e.g. `script: maps/venue.js` for `assets/js/maps/venue.js`). Once the visitor loaded the map, the theme calls the script's default export with the map object (Leaflet is available as `L`):
|
|
692
698
|
|
|
693
699
|
```javascript
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
}).addTo(map);
|
|
705
|
-
}
|
|
706
|
-
});
|
|
700
|
+
// assets/js/maps/venue.js
|
|
701
|
+
export default function (map) {
|
|
702
|
+
L.marker([47.37785, 8.54035], {
|
|
703
|
+
icon: L.divIcon({
|
|
704
|
+
className: '',
|
|
705
|
+
html: '<span class="bi bi-train-front" aria-hidden="true"></span> Main Station',
|
|
706
|
+
iconSize: [120, 56]
|
|
707
|
+
})
|
|
708
|
+
}).addTo(map);
|
|
709
|
+
}
|
|
707
710
|
```
|
|
708
711
|
|
|
709
|
-
|
|
712
|
+
With several [editions](#editions), each edition's location page names its own script. Alternatively, `assets/js/main.js` gets the map with `await window.conference.map.getMap()` after `await window.conference.awaitReady()` (resolves once the visitor loaded the map, with `null` on pages without map).
|
|
713
|
+
|
|
714
|
+
### Program Page
|
|
710
715
|
|
|
711
716
|
Program settings are configured directly in the Front Matter of the program page (the page with `layout: program`). The program page's Front Matter supports the following properties:
|
|
712
717
|
|
|
@@ -725,15 +730,91 @@ show_alltimes: true
|
|
|
725
730
|
---
|
|
726
731
|
```
|
|
727
732
|
|
|
733
|
+
### Editions
|
|
734
|
+
|
|
735
|
+
One site can hold several editions of a conference, e.g. the current one and past ones as archive. Every edition lives below its own folder (`/2026/`, `/2025/`, …), the site's root forwards to the current edition. Without `editions`, the site holds a single edition as described in the rest of this document.
|
|
736
|
+
|
|
737
|
+
List the editions in `_config.yml` under `conference.editions`. The current edition is the first one with `current: true`, else the first one of the list. Its `id` names the edition's folders, its `name` labels it in the menu to switch between editions (default: its id).
|
|
738
|
+
|
|
739
|
+
An edition inherits the site's settings and can override some of them. An override replaces the site's setting as a whole, all others are kept; e.g. an edition with its own `navigation.links` keeps the site's `navigation.logo`.
|
|
740
|
+
|
|
741
|
+
| Setting | In `_config.yml` | Per edition |
|
|
742
|
+
|---|---|---|
|
|
743
|
+
| `title`, `description` | Jekyll, top level | yes |
|
|
744
|
+
| `url`, `baseurl`, `timezone` | Jekyll, top level | no |
|
|
745
|
+
| `meta.link_preview`, `meta.schema_org` | `conference` | yes |
|
|
746
|
+
| `navigation.logo`, `navigation.links`, `navigation.breakpoint`, `navigation.editions` | `conference` | yes |
|
|
747
|
+
| `info.bars`, `info.modals` | `conference` | yes |
|
|
748
|
+
| `talks.tracks`, `talks.tags` | `conference` | yes |
|
|
749
|
+
| `lang`, `custom_style`, `show_errors`, `pwa` | `conference` | no |
|
|
750
|
+
| `live` | `conference` | no, current edition only |
|
|
751
|
+
|
|
752
|
+
Settings in a page's Front Matter (e.g. of the [_Landing Page_](#landing-page) or the [_Program Page_](#program-page)) belong to its edition anyway, as every edition has its own pages.
|
|
753
|
+
|
|
754
|
+
```yaml
|
|
755
|
+
conference:
|
|
756
|
+
editions:
|
|
757
|
+
- id: "2026"
|
|
758
|
+
current: true
|
|
759
|
+
title: My Conference 2026
|
|
760
|
+
- id: "2025"
|
|
761
|
+
name: 2025 (Archive)
|
|
762
|
+
title: My Conference 2025
|
|
763
|
+
talks:
|
|
764
|
+
tracks:
|
|
765
|
+
- name: Workshops
|
|
766
|
+
color: warning
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
Mark each page and entry with its edition by folder, with one pair of `defaults` per edition (in addition to the layouts of the collections, see [_Collection URLs_](#collection-urls)):
|
|
770
|
+
|
|
771
|
+
```yaml
|
|
772
|
+
defaults:
|
|
773
|
+
- scope:
|
|
774
|
+
path: "2026" # pages, e.g. 2026/program/index.md
|
|
775
|
+
values:
|
|
776
|
+
edition: "2026"
|
|
777
|
+
- scope:
|
|
778
|
+
path: "_*/2026" # talks, speakers and rooms, e.g. _talks/2026/keynote.md
|
|
779
|
+
values:
|
|
780
|
+
edition: "2026"
|
|
781
|
+
permalink: /2026/:collection/:title/
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
With `show_errors`, pages report a page or entry whose `edition` doesn't match its folder, e.g. due to a forgotten `defaults` entry.
|
|
785
|
+
|
|
786
|
+
The content of each edition is then placed as follows:
|
|
787
|
+
|
|
788
|
+
```
|
|
789
|
+
index.md layout: editions (forwards to the current edition)
|
|
790
|
+
2026/index.md layout: home
|
|
791
|
+
2026/program/index.md layout: program (likewise talks/, speakers/, location/, …)
|
|
792
|
+
2026/documents/ files of links (slides/, bio/, …)
|
|
793
|
+
_talks/2026/ talks (likewise _speakers/2026/, _rooms/2026/)
|
|
794
|
+
_data/programs/2026.yml schedule
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
Talks, speakers and rooms are looked up within their edition only, so names may repeat across editions (e.g. a speaker attending every year). Links with `relative_url` point into the page's edition, e.g. `/program/` to `/2026/program/`. Live indications, live streams and the offline app (PWA) cover the current edition only. To point visitors of a past edition to the current one, give it an info bar (see [_Information Bars & Modals_](#information-bars--modals)), e.g. `info: {bars: [{title: Archive, color: secondary, text: "Go to the [current edition](/2026/)."}]}` in its `editions` entry. Files below `assets/` (styles, scripts, images) and `_sass/` are shared by all editions.
|
|
798
|
+
|
|
799
|
+
Other addresses, e.g. a former `/program/`, show the site's 404 page. To forward them to the current edition on an Apache web server, create a `.htaccess` file in the root of your project:
|
|
800
|
+
|
|
801
|
+
```yaml
|
|
802
|
+
---
|
|
803
|
+
layout: htaccess
|
|
804
|
+
---
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
It forwards addresses that don't exist but do exist in the current edition, e.g. `/program/` to `/2026/program/`, and follows the current edition on its own. Below the Front Matter, you can add your own rules. It assumes the site lies at `baseurl` below the web server's document root. Other hosts (e.g. GitHub Pages, Netlify, nginx) ignore the file and need their own redirects.
|
|
808
|
+
|
|
728
809
|
|
|
729
810
|
## Content
|
|
730
811
|
|
|
731
|
-
The different talks, speakers and rooms are stored as a collection of files. Each file contains a small header in form of a YAML block (called [
|
|
812
|
+
The different talks, speakers and rooms are stored as a collection of files. Each file contains a small header in form of a YAML block (called [Front Matter](https://jekyllrb.com/docs/front-matter/)) used to store additional information beside a description.
|
|
732
813
|
The schedule defining when and in which room a talk takes place is stored as a [YAML data file](https://jekyllrb.com/docs/datafiles/).
|
|
733
814
|
|
|
734
815
|
### Schedule / Program
|
|
735
816
|
|
|
736
|
-
The schedule of the conference linking the talks with the rooms and indicating when each talk takes place and how long it lasts, is set in the `_data/program.yml` file. It contains a list of days, whereby each day contains a list of rooms, whereby each room contains a list of talks.
|
|
817
|
+
The schedule of the conference linking the talks with the rooms and indicating when each talk takes place and how long it lasts, is set in the `_data/program.yml` file (with several [editions](#editions): `_data/programs/<id>.yml` per edition). It contains a list of days, whereby each day contains a list of rooms, whereby each room contains a list of talks.
|
|
737
818
|
|
|
738
819
|
Each day consists of
|
|
739
820
|
|
|
@@ -747,7 +828,7 @@ Each room consists of
|
|
|
747
828
|
- the room's `name` (must correspond to one of the room identifiers), and
|
|
748
829
|
- a list of talks (`talks`) which also can be empty `[]`.
|
|
749
830
|
|
|
750
|
-
The order of the rooms in the list defines the order of the rooms as shown in the schedule on the program page.
|
|
831
|
+
The order of the rooms in the list defines the order of the rooms as shown in the schedule on the program page. Elsewhere (e.g. live streams or the room links on the location page), rooms follow their first appearance in the program, unless they set `order` (see [_Rooms_](#rooms)).
|
|
751
832
|
|
|
752
833
|
Each talk consists of
|
|
753
834
|
|
|
@@ -839,7 +920,8 @@ links:
|
|
|
839
920
|
Each room is represented by a file in the `_rooms/` directory. It must begin with valid [YAML Front Matter](https://jekyllrb.com/docs/frontmatter/) containing
|
|
840
921
|
|
|
841
922
|
- the room's `name`
|
|
842
|
-
- optionally, `hide: true` if the room's page should not be linked to,
|
|
923
|
+
- optionally, `hide: true` if the room's page should not be linked to,
|
|
924
|
+
- optionally, its position (`order`, a number) where rooms are listed outside the program, otherwise rooms follow their first appearance in the program, and
|
|
843
925
|
- optionally under the `live` property, a URL pointing to a live stream for the given room during the conference (see the section [_Configuration_](#configuration) > [_Live Indications & Streaming_](#live-indications--streaming) above), either:
|
|
844
926
|
- as an `absolute_url`, or
|
|
845
927
|
- a `relative_url`.
|
|
@@ -876,13 +958,14 @@ Using the `file:` indicator, the
|
|
|
876
958
|
- the site's base address followed by `/documents/slides` and the value for _talks_,
|
|
877
959
|
- the site's base address followed by `/documents/bio` and the value for _speakers_, or
|
|
878
960
|
- the site's base address followed by `/documents` and the value for all remaining types.
|
|
879
|
-
- the
|
|
961
|
+
- With several [editions](#editions), the edition's id precedes `/documents`, e.g. `/2026/documents/slides`.
|
|
962
|
+
- the link's `icon:` is set to `file-earmark-text`.
|
|
880
963
|
|
|
881
964
|
Using the `video:` indicator, the
|
|
882
965
|
|
|
883
966
|
- link address is set to an absolute address as given by the value.
|
|
884
967
|
- the link's `iframe:` attribute is set to `true` to embed the video in a popup-like modal having a default iframe ratio of 24:11.
|
|
885
|
-
- the link's `icon:` is set to `video`.
|
|
968
|
+
- the link's `icon:` is set to `camera-video-fill`.
|
|
886
969
|
|
|
887
970
|
Additionally, a _talk_ link can also have the following property:
|
|
888
971
|
|
|
@@ -895,35 +978,11 @@ Additionally, a _navigation bar_ or _main landing page_ link can also have the f
|
|
|
895
978
|
- If `name_inactive` is set, its value is used as a placeholder text while the conference is **not** live. If `name_inactive` is an empty string, "Live Stream" is shown instead.
|
|
896
979
|
- If streaming is enabled and any URL property is omitted, a click on the link will open the streaming modal (see section [_Configuration_](#configuration) > [_Live Indications & Streaming_](#live-indications--streaming) above).
|
|
897
980
|
- `menu` containing another list of links. This creates a dropdown menu of multiple sublinks, while the URL of the parent link is ignored. The sublinks have the same properties as regular links.
|
|
981
|
+
- With `menu: editions`, the dropdown menu lists the [editions](#editions) instead. Without `name`, it is labelled with `navigation.editions.name`, else the page's edition. It is not shown with a single edition.
|
|
898
982
|
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
There exists a Python file in this repository, `_tools/import_resources.py`, which can be used to import resources such as slides and other documents from [pretalx.com](https://pretalx.com/p/about/)) via its API. It automatically downloads all files, stores them and updates the links of the talks concerned.
|
|
902
|
-
|
|
903
|
-
1. Copy the files `_tools/import_resources.py` and `_tools/requirements.txt` from this repository
|
|
904
|
-
|
|
905
|
-
2. Create a virtual environment and activate it
|
|
906
|
-
|
|
907
|
-
```bash
|
|
908
|
-
python -m venv .venv
|
|
909
|
-
source .venv/bin/activate
|
|
910
|
-
```
|
|
911
|
-
|
|
912
|
-
3. Install the requirements
|
|
913
|
-
|
|
914
|
-
```bash
|
|
915
|
-
pip install -r _tools/requirements.txt
|
|
916
|
-
```
|
|
917
|
-
|
|
918
|
-
4. Execute the script, e.g., to show the help type
|
|
983
|
+
### Pages
|
|
919
984
|
|
|
920
|
-
|
|
921
|
-
python _tools/import_resources.py --help
|
|
922
|
-
```
|
|
923
|
-
|
|
924
|
-
### Overview Pages
|
|
925
|
-
|
|
926
|
-
For each of the three collections, there exists a dedicated layout giving an overview of all items in the collection. Furthermore, there exists a layout to show the program as a time schedule. Simply create an empty page and associate the corresponding layout with it:
|
|
985
|
+
The overviews of talks and speakers, the location with its rooms, and the program as a time schedule each have a dedicated layout. Simply create a page and associate the corresponding layout with it:
|
|
927
986
|
|
|
928
987
|
- `talks/index.md` with `layout: talk-overview`
|
|
929
988
|
- `speakers/index.md` with `layout: speaker-overview`
|
|
@@ -932,13 +991,6 @@ For each of the three collections, there exists a dedicated layout giving an ove
|
|
|
932
991
|
|
|
933
992
|
They can be empty but should contain the `layout` property in the Front Matter header.
|
|
934
993
|
|
|
935
|
-
If you choose a different location for the overview pages you must:
|
|
936
|
-
|
|
937
|
-
- for the `talks` and `speakers` overview files, adapt the URL of the two collections as described further above in the section [_Configuration_](#configuration) > [_Collection URLs_](#collection-urls), and
|
|
938
|
-
- for the `location` and `program` files, adapt the corresponding `url` parameter as described further above in the sections [_Configuration_](#configuration) > [_Location Settings_](#location-settings) and [_Configuration_](#configuration) > [_Program Settings_](#program-settings).
|
|
939
|
-
|
|
940
|
-
### Additional Pages
|
|
941
|
-
|
|
942
994
|
Additional static pages can easily be added as files and linked to via navigation bar or main landing page.
|
|
943
995
|
|
|
944
996
|
|
|
@@ -965,7 +1017,7 @@ The `assets/css/` directory contains:
|
|
|
965
1017
|
- `map.bundle.css`: Leaflet map styles, loaded together with the map
|
|
966
1018
|
- `main.scss`: For user-modifiable custom styles.
|
|
967
1019
|
|
|
968
|
-
Including `assets/css/main.scss` in your project is optional. If included, it must begin with a [
|
|
1020
|
+
Including `assets/css/main.scss` in your project is optional. If included, it must begin with a [Front Matter](https://jekyllrb.com/docs/front-matter/) header for Jekyll recognition:
|
|
969
1021
|
|
|
970
1022
|
|
|
971
1023
|
```scss
|
|
@@ -992,7 +1044,7 @@ The `assets/css/` directory contains:
|
|
|
992
1044
|
- `map.bundle.css`: Leaflet map styles, loaded together with the map
|
|
993
1045
|
- `main.scss`: For additional custom styles.
|
|
994
1046
|
|
|
995
|
-
Including `assets/css/main.scss` in your project is optional. If included, it must begin with a [
|
|
1047
|
+
Including `assets/css/main.scss` in your project is optional. If included, it must begin with a [Front Matter](https://jekyllrb.com/docs/front-matter/) header for Jekyll recognition:
|
|
996
1048
|
|
|
997
1049
|
```scss
|
|
998
1050
|
---
|
|
@@ -1002,7 +1054,7 @@ Including `assets/css/main.scss` in your project is optional. If included, it mu
|
|
|
1002
1054
|
// ...
|
|
1003
1055
|
```
|
|
1004
1056
|
|
|
1005
|
-
|
|
1057
|
+
### Full Custom Build (Custom SCSS)
|
|
1006
1058
|
|
|
1007
1059
|
Compile your Bootstrap framework by modifying [Bootstrap variables](https://getbootstrap.com/docs/5.3/customize/sass/#variable-defaults). This provides complete control over Bootstrap's SCSS variables, enabling source-level customization.
|
|
1008
1060
|
|
|
@@ -1058,7 +1110,7 @@ To use the icon font in your own content or JavaScript instead (e.g. `<i class="
|
|
|
1058
1110
|
```
|
|
1059
1111
|
|
|
1060
1112
|
|
|
1061
|
-
## JavaScript
|
|
1113
|
+
## Custom JavaScript
|
|
1062
1114
|
|
|
1063
1115
|
The theme includes a pre-built JavaScript bundle (`assets/js/conference.bundle.js`). This bundle is automatically included in the theme gem, pre-compiled, and minified, requiring no build tools for end users. Please do not modify this file directly.
|
|
1064
1116
|
|
|
@@ -1076,7 +1128,7 @@ To add custom JavaScript, edit the `assets/js/main.js` file in your project. Thi
|
|
|
1076
1128
|
- `conference.infobox`: Dismissal of information boxes and modals
|
|
1077
1129
|
- `conference.darkmode`: Dark mode according to the system preference
|
|
1078
1130
|
- `conference.pwa`: Service worker registration (if PWA is enabled)
|
|
1079
|
-
- `conference.config`: Settings of the modules, e.g. `conference.config.baseurl`
|
|
1131
|
+
- `conference.config`: Settings of the modules, e.g. `conference.config.baseurl`, `conference.config.edition` (the page's edition id, `null` without editions) and `conference.config.edition_current`
|
|
1080
1132
|
- `conference.awaitReady()`: Promise-based initialization helper
|
|
1081
1133
|
- `window.bootstrap`: Bootstrap components (Alert, Collapse, Dropdown, Modal, Tab)
|
|
1082
1134
|
- `window.L`: Leaflet map library (once the map is loaded)
|
|
@@ -1167,9 +1219,11 @@ To modify the theme's source code and rebuild:
|
|
|
1167
1219
|
This compiles:
|
|
1168
1220
|
- `_js/` → `assets/js/conference.bundle.js`
|
|
1169
1221
|
- `_css/` → `assets/css/conference.bundle.css`, `assets/css/conference-only.bundle.css` and `assets/css/map.bundle.css`
|
|
1222
|
+
|
|
1170
1223
|
This generates:
|
|
1171
1224
|
- `_includes/icons/`: one include per Bootstrap Icon (inline SVG)
|
|
1172
1225
|
- `_data/conference_assets.yml`: content hashes of the bundles (cache busting)
|
|
1226
|
+
|
|
1173
1227
|
This copies:
|
|
1174
1228
|
- `_css/` + any SASS file from the different framework libraries → `_sass`
|
|
1175
1229
|
- Webfonts → `assets/webfonts/` (for sites using the icon font themselves)
|
|
@@ -1181,7 +1235,7 @@ To modify the theme's source code and rebuild:
|
|
|
1181
1235
|
|
|
1182
1236
|
### Tests
|
|
1183
1237
|
|
|
1184
|
-
The tests build the example site in `test/fixture/` (containing edge cases such as quotes and markup in names, overnight talks, hidden entries, live streams, PWA and a map) and run on every pull request:
|
|
1238
|
+
The tests build the example site in `test/fixture/` (containing edge cases such as quotes and markup in names, overnight talks, hidden entries, live streams, PWA and a map) and the site with two editions in `test/fixture-editions/`, and run on every pull request:
|
|
1185
1239
|
|
|
1186
1240
|
```bash
|
|
1187
1241
|
npm run build # theme bundles
|