jekyll-theme-conference 5.0.0 → 5.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 38c9076dbcd518202588a57c7c1c3ecc9863377ce459ef1576f2932b4cd4e128
4
- data.tar.gz: 05a18ae60e11c43929928085666eb70e8ff82648a39a5573e64a04f915ae88b7
3
+ metadata.gz: a5353ee32af4f6ced22ff385c1b11fde3890565bb91a5b4f153f3c132e481787
4
+ data.tar.gz: 3ae2ef5964c7acd100117d99deb52a0ed0eab47e43ca56e56e87130e839f5bdc
5
5
  SHA512:
6
- metadata.gz: ba8f26be0a3599ce85f71a91e56c797d3be63ff984717edd93296fa84df7808a4ea207c5a265ce753815819601342c280ecfa825523ece40a356b40e23e2a908
7
- data.tar.gz: c9282fbc2844da0ee340bd11ccbb11338f4768a6ee25126d16baf51e54b6b3be1a4923e90b5c7bdc16ccc78bdb109978a1ab81d2e0a2672e93ad803e2418b6ee
6
+ metadata.gz: b6823ef3ca588de7151db744ef2476a588b742be1ae39d19f1701912a331eb29ce888eece6c6914fa97174a4d1fc0be00f9d80cceeabf8832234f0116091a180
7
+ data.tar.gz: 2f9663c8b996f3718c08cb4c3621d507e4891b6925da20d53c747f6fb3c5b19b22c55817f596896874db769d3782e00cf7723f0ed33e832d640a8441827bf185
data/README.md CHANGED
@@ -130,21 +130,24 @@ To install:
130
130
  bundle
131
131
  ```
132
132
 
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.
133
+ 4. Add `remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v5.1.0"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
134
134
 
135
135
  ```yaml
136
- remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v5.0.0"
136
+ remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v5.1.0"
137
137
  ```
138
138
 
139
139
  5. Continue with the [_Setup_](#setup) section below to customize the theme and add content for your conference.
140
140
 
141
- To update the theme, change the version tag in the `remote_theme` value (e.g., `@v4.1.0` to `@v5.0.0`).
141
+ To update the theme, change the version tag in the `remote_theme` value (e.g., `@v5.0.0` to `@v5.1.0`).
142
142
 
143
143
 
144
144
  ## Setup
145
145
 
146
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
+ > [!TIP]
149
+ > To get started quickly, use the [template repository](https://github.com/DigitaleGesellschaft/jekyll-theme-conference-template): its `main` branch is an empty site ready to be filled, its `demo` branch showcases the theme with a fictional conference.
150
+
148
151
  > [!TIP]
149
152
  > 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
153
 
@@ -499,7 +502,10 @@ This can be further extended if some talks have an associated live stream: When
499
502
 
500
503
  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
501
504
 
502
- - optionally, how long a pause between two consecutive talks has to be for the live indication to pause (`stop`, default: `240`), and
505
+ - optionally, how long a pause between two consecutive talks has to be for the live indication to pause (`stop`, default: `240`),
506
+ - optionally, under the `now_line` property, a horizontal line in the program marking the current time (behind the talks):
507
+ - if it is shown (`enable`, default: `true`), and
508
+ - its colour, one of Bootstrap's theme colours (`color`, default: `danger`), and
503
509
  - optionally, under the `streaming` property:
504
510
  - if streaming should be enabled (`enable`), and if enabled
505
511
  - how many minutes the stream goes active before a talk (`prepend`, default: `5`),
@@ -512,6 +518,9 @@ To activate these functionalities, each day in the `program.yml` file must conta
512
518
  conference:
513
519
  live:
514
520
  stop: 240 # in minutes
521
+ now_line:
522
+ enable: true
523
+ color: danger # Bootstrap theme colour, e.g. primary
515
524
  streaming:
516
525
  enable: true
517
526
  pause: 60 # in minutes
@@ -1124,6 +1133,7 @@ To add custom JavaScript, edit the `assets/js/main.js` file in your project. Thi
1124
1133
  - `conference.modal`: Links (e.g. videos) in a modal
1125
1134
  - `conference.embed`: Embedded streams on the stream overview page
1126
1135
  - `conference.live`: Live indications following the program (incl. `setTime("09:30", "2026-02-20")`, `getTime()`, `pauseTime()`, `continueTime()`, `resetTime()` for testing)
1136
+ - `conference.nowline`: Line at the current time in the program
1127
1137
  - `conference.stream`: Live stream modal
1128
1138
  - `conference.infobox`: Dismissal of information boxes and modals
1129
1139
  - `conference.darkmode`: Dark mode according to the system preference
@@ -1184,6 +1194,7 @@ _js/
1184
1194
  ├── live.js # Live indications
1185
1195
  ├── map.js # Map functionality
1186
1196
  ├── modal.js # Links in a modal
1197
+ ├── nowline.js # Line at the current time in the program
1187
1198
  ├── program.js # Program days as tabs
1188
1199
  ├── pwa.js # Service worker registration
1189
1200
  └── stream.js # Live stream modal
@@ -1,5 +1,5 @@
1
1
  # Generated by `npm run build`: content hashes of the bundles
2
- css/conference-only.bundle.css: "88f0b98494"
3
- css/conference.bundle.css: "830ee33744"
2
+ css/conference-only.bundle.css: "f974cce9aa"
3
+ css/conference.bundle.css: "9f1fdccf8d"
4
4
  css/map.bundle.css: "b607a13fcd"
5
- js/conference.bundle.js: "9a758590c7"
5
+ js/conference.bundle.js: "40d51faa7c"
@@ -35,6 +35,10 @@
35
35
  },
36
36
  {%- endif %}
37
37
 
38
+ {% if edition_live and edition_live.now_line.enable != false -%}
39
+ "nowline": {},
40
+ {%- endif %}
41
+
38
42
  {% if edition_live.streaming.enable -%}
39
43
  "stream": {
40
44
  "pause": {{ edition_live.streaming.pause | default: 60 }},
@@ -1,6 +1,11 @@
1
1
  {%- include get_edition.html -%}
2
2
  {%- include get_location_config.html -%}
3
3
  {% include header.html %}
4
+ {%- comment -%} Line at the current time (_js/modules/nowline.js) {%- endcomment -%}
5
+ {%- assign now_line = false -%}
6
+ {%- if edition_live and edition_live.now_line.enable != false -%}
7
+ {%- assign now_line = true -%}
8
+ {%- endif %}
4
9
  {% assign nbr_days = edition_program.days | size -%}
5
10
 
6
11
  <h1 class="display-5 {% if nbr_days > 1 -%} mb-2 {%- else -%} mb-4 {%- endif %} text-break">
@@ -57,6 +62,16 @@
57
62
  <tbody>
58
63
  {%- include get_day_time.html -%}
59
64
 
65
+ {%- if now_line and d.date -%}
66
+ {%- comment -%} End of the day's last row, e.g. 01:00 the next day (minutes may be 60 after rounding) {%- endcomment -%}
67
+ {%- assign now_hour = day_end_hour | prepend: "0" | slice: -2, 2 -%}
68
+ {%- assign now_offset = day_end_day | times: 1440 | plus: day_end_min | times: 60 -%}
69
+ {%- assign now_end = d.date | append: "T" | append: now_hour | append: ":00:00" | date: "%s" | plus: now_offset -%}
70
+
71
+ {%- comment -%} Rows before the day's start lie after midnight {%- endcomment -%}
72
+ {%- assign now_start_min = day_start_hour | times: 60 | plus: day_start_min -%}
73
+ {%- endif -%}
74
+
60
75
  {%- if day_end_day > day_start_day -%}
61
76
  {%- assign day_end_hour = day_end_day | minus: day_start_day | times: 24 | plus: day_end_hour -%}
62
77
  {%- endif -%}
@@ -85,7 +100,20 @@
85
100
  {% assign current_min = current_time | split: ":" | last | plus: 0 %}
86
101
  {%- endunless -%}
87
102
 
88
- <tr class="h-100">
103
+ {%- if now_line and d.date -%}
104
+ {%- comment -%} Start of the row, e.g. 09:15 {%- endcomment -%}
105
+ {%- assign now_hour = current_hour | prepend: "0" | slice: -2, 2 -%}
106
+ {%- assign now_min = current_min | prepend: "0" | slice: -2, 2 -%}
107
+ {%- assign now_row_min = current_hour | times: 60 | plus: current_min -%}
108
+ {%- assign now_days = day_start_day -%}
109
+ {%- if now_row_min < now_start_min -%}
110
+ {%- assign now_days = now_days | plus: 1 -%}
111
+ {%- endif -%}
112
+ {%- assign now_offset = now_days | times: 86400 -%}
113
+ {%- assign now_row = d.date | append: "T" | append: now_hour | append: ":" | append: now_min | append: ":00" | date: "%s" | plus: now_offset -%}
114
+ {%- endif %}
115
+
116
+ <tr class="h-100" {%- if now_line and d.date %} data-time="{{ now_row }}" {%- endif %}>
89
117
 
90
118
  {%- if current_min == 0 or page.time_steps == "start" -%}
91
119
  <th scope="row" class="program-time text-end">
@@ -114,7 +142,7 @@
114
142
  {%- endif -%}
115
143
  </th>
116
144
  {%- else -%}
117
- <th scope="row">
145
+ <th scope="row" class="program-time">
118
146
  {%- comment -%} Time for screen readers only {%- endcomment -%}
119
147
  <span class="visually-hidden">
120
148
  {%- if current_min < 10 -%}
@@ -223,6 +251,9 @@
223
251
  {%- endfor %}
224
252
  </tbody>
225
253
  </table>
254
+ {%- if now_line and d.date %}
255
+ <div class="program-now bg-{{ edition_live.now_line.color | default: 'danger' }} d-none" data-end="{{ now_end }}" aria-hidden="true"></div>
256
+ {%- endif %}
226
257
  </div>
227
258
 
228
259
  {%- if nbr_days > 1 %}
data/_sass/theme.scss CHANGED
@@ -41,10 +41,15 @@
41
41
  td.program-talk[rowspan] {
42
42
  border-width: 0 0 2px 0.25rem !important;
43
43
  border-bottom-color: var(--bs-body-bg) !important;
44
+
45
+ // Above the line at the current time
46
+ position: relative;
47
+ z-index: 1;
44
48
  }
45
49
  }
46
50
 
47
51
  .program-table-container {
52
+ position: relative;
48
53
  scroll-snap-type: x mandatory;
49
54
  scroll-padding-left: 4rem;
50
55
 
@@ -53,6 +58,38 @@
53
58
  }
54
59
  }
55
60
 
61
+ // Line at the current time (_js/modules/nowline.js): above empty cells,
62
+ // below talks and the time column
63
+ .program-now {
64
+ position: absolute;
65
+ height: 2px;
66
+ margin-top: -1px;
67
+ pointer-events: none;
68
+
69
+ @media print {
70
+ display: none;
71
+ }
72
+ }
73
+
74
+ // Its part in the time column: a box like the line (a gradient would be
75
+ // rounded to pixels differently), behind the label (z-index -1 within the
76
+ // sticky cell)
77
+ .program-now-cell::after {
78
+ content: "";
79
+ position: absolute;
80
+ top: var(--program-now-top);
81
+ left: 0;
82
+ right: 0;
83
+ z-index: -1;
84
+ height: var(--program-now-height);
85
+ background-color: var(--program-now-color);
86
+ pointer-events: none;
87
+
88
+ @media print {
89
+ display: none;
90
+ }
91
+ }
92
+
56
93
  // Speaker Columns
57
94
  @mixin generate-col-count-classes($max-cols: 6) {
58
95
 
@@ -1 +1 @@
1
- .bi{vertical-align:-.125em;width:1em;height:1em}.program-table{border-collapse:separate!important;border-spacing:1rem 0!important}.program-table .program-time{z-index:900;width:4rem;min-width:4rem;max-width:4rem;position:sticky;left:0}.program-table .program-talk{width:15rem;min-width:15rem;max-width:15rem}.program-table td.program-talk[rowspan]{border-width:0 0 2px .25rem!important;border-bottom-color:var(--bs-body-bg)!important}.program-table-container{scroll-snap-type:x mandatory;scroll-padding-left:4rem}.program-table-container tbody .program-talk{scroll-snap-align:start}.col-count-1{column-count:1}.col-count-2{column-count:2}.col-count-3{column-count:3}.col-count-4{column-count:4}.col-count-5{column-count:5}.col-count-6{column-count:6}@media (min-width:576px){.col-count-sm-1{column-count:1}.col-count-sm-2{column-count:2}.col-count-sm-3{column-count:3}.col-count-sm-4{column-count:4}.col-count-sm-5{column-count:5}.col-count-sm-6{column-count:6}}@media (min-width:768px){.col-count-md-1{column-count:1}.col-count-md-2{column-count:2}.col-count-md-3{column-count:3}.col-count-md-4{column-count:4}.col-count-md-5{column-count:5}.col-count-md-6{column-count:6}}@media (min-width:992px){.col-count-lg-1{column-count:1}.col-count-lg-2{column-count:2}.col-count-lg-3{column-count:3}.col-count-lg-4{column-count:4}.col-count-lg-5{column-count:5}.col-count-lg-6{column-count:6}}@media (min-width:1200px){.col-count-xl-1{column-count:1}.col-count-xl-2{column-count:2}.col-count-xl-3{column-count:3}.col-count-xl-4{column-count:4}.col-count-xl-5{column-count:5}.col-count-xl-6{column-count:6}}@media (min-width:1400px){.col-count-xxl-1{column-count:1}.col-count-xxl-2{column-count:2}.col-count-xxl-3{column-count:3}.col-count-xxl-4{column-count:4}.col-count-xxl-5{column-count:5}.col-count-xxl-6{column-count:6}}.col-count{break-inside:avoid-column}.alert>p:last-of-type{margin-bottom:0}.home-header-img{width:100%}@media (min-width:768px){.home-header-img{width:75%}}.mode-light{display:initial}.mode-dark,[data-bs-theme=dark] .mode-light{display:none}[data-bs-theme=dark] .mode-dark{display:initial}.d-pwa-block{display:none}@media (display-mode:standalone),(display-mode:fullscreen){.d-pwa-none{display:none}.d-pwa-block{display:block}body{flex-direction:column;display:flex}.footer-pwa{z-index:1030;margin-top:auto;position:sticky;bottom:0}}[data-pwa=true] .d-pwa-none{display:none}[data-pwa=true] .d-pwa-block{display:block}[data-pwa=true] body{flex-direction:column;display:flex}[data-pwa=true] .footer-pwa{z-index:1030;margin-top:auto;position:sticky;bottom:0}#map,#map .map-consent{min-height:400px}.live-button{color:#fff;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity,1))}.live-button:hover{color:#ccc}.btn-outline-primary{--bs-btn-color:var(--bs-primary-text-emphasis)}[data-bs-theme=dark] .btn-outline-secondary{--bs-btn-color:var(--bs-secondary-color);--bs-btn-border-color:var(--bs-border-color)}[data-bs-theme=dark] .live-button{color:#000;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity,1))}[data-bs-theme=dark] .live-button:hover{color:#000}.live-icon{width:.75em;height:.75em}@keyframes live-icon-pulse{0%,6%{opacity:0}8%,to{opacity:1}}@keyframes live-icon-arc-small{0%,8%{opacity:0}10%,to{opacity:1}}@keyframes live-icon-arc-large{0%,10%{opacity:0}12%,to{opacity:1}}.live-icon .live-icon-arc-small{animation:8s infinite live-icon-pulse}.live-icon .live-icon-arc-medium{animation:8s infinite live-icon-arc-small}.live-icon .live-icon-arc-large{animation:8s infinite live-icon-arc-large}@media (prefers-reduced-motion:reduce){.live-icon .live-icon-arc-small,.live-icon .live-icon-arc-medium,.live-icon .live-icon-arc-large{animation:none}}
1
+ .bi{vertical-align:-.125em;width:1em;height:1em}.program-table{border-collapse:separate!important;border-spacing:1rem 0!important}.program-table .program-time{z-index:900;width:4rem;min-width:4rem;max-width:4rem;position:sticky;left:0}.program-table .program-talk{width:15rem;min-width:15rem;max-width:15rem}.program-table td.program-talk[rowspan]{z-index:1;position:relative;border-width:0 0 2px .25rem!important;border-bottom-color:var(--bs-body-bg)!important}.program-table-container{scroll-snap-type:x mandatory;scroll-padding-left:4rem;position:relative}.program-table-container tbody .program-talk{scroll-snap-align:start}.program-now{pointer-events:none;height:2px;margin-top:-1px;position:absolute}@media print{.program-now{display:none}}.program-now-cell:after{content:"";top:var(--program-now-top);z-index:-1;height:var(--program-now-height);background-color:var(--program-now-color);pointer-events:none;position:absolute;left:0;right:0}@media print{.program-now-cell:after{display:none}}.col-count-1{column-count:1}.col-count-2{column-count:2}.col-count-3{column-count:3}.col-count-4{column-count:4}.col-count-5{column-count:5}.col-count-6{column-count:6}@media (min-width:576px){.col-count-sm-1{column-count:1}.col-count-sm-2{column-count:2}.col-count-sm-3{column-count:3}.col-count-sm-4{column-count:4}.col-count-sm-5{column-count:5}.col-count-sm-6{column-count:6}}@media (min-width:768px){.col-count-md-1{column-count:1}.col-count-md-2{column-count:2}.col-count-md-3{column-count:3}.col-count-md-4{column-count:4}.col-count-md-5{column-count:5}.col-count-md-6{column-count:6}}@media (min-width:992px){.col-count-lg-1{column-count:1}.col-count-lg-2{column-count:2}.col-count-lg-3{column-count:3}.col-count-lg-4{column-count:4}.col-count-lg-5{column-count:5}.col-count-lg-6{column-count:6}}@media (min-width:1200px){.col-count-xl-1{column-count:1}.col-count-xl-2{column-count:2}.col-count-xl-3{column-count:3}.col-count-xl-4{column-count:4}.col-count-xl-5{column-count:5}.col-count-xl-6{column-count:6}}@media (min-width:1400px){.col-count-xxl-1{column-count:1}.col-count-xxl-2{column-count:2}.col-count-xxl-3{column-count:3}.col-count-xxl-4{column-count:4}.col-count-xxl-5{column-count:5}.col-count-xxl-6{column-count:6}}.col-count{break-inside:avoid-column}.alert>p:last-of-type{margin-bottom:0}.home-header-img{width:100%}@media (min-width:768px){.home-header-img{width:75%}}.mode-light{display:initial}.mode-dark,[data-bs-theme=dark] .mode-light{display:none}[data-bs-theme=dark] .mode-dark{display:initial}.d-pwa-block{display:none}@media (display-mode:standalone),(display-mode:fullscreen){.d-pwa-none{display:none}.d-pwa-block{display:block}body{flex-direction:column;display:flex}.footer-pwa{z-index:1030;margin-top:auto;position:sticky;bottom:0}}[data-pwa=true] .d-pwa-none{display:none}[data-pwa=true] .d-pwa-block{display:block}[data-pwa=true] body{flex-direction:column;display:flex}[data-pwa=true] .footer-pwa{z-index:1030;margin-top:auto;position:sticky;bottom:0}#map,#map .map-consent{min-height:400px}.live-button{color:#fff;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity,1))}.live-button:hover{color:#ccc}.btn-outline-primary{--bs-btn-color:var(--bs-primary-text-emphasis)}[data-bs-theme=dark] .btn-outline-secondary{--bs-btn-color:var(--bs-secondary-color);--bs-btn-border-color:var(--bs-border-color)}[data-bs-theme=dark] .live-button{color:#000;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity,1))}[data-bs-theme=dark] .live-button:hover{color:#000}.live-icon{width:.75em;height:.75em}@keyframes live-icon-pulse{0%,6%{opacity:0}8%,to{opacity:1}}@keyframes live-icon-arc-small{0%,8%{opacity:0}10%,to{opacity:1}}@keyframes live-icon-arc-large{0%,10%{opacity:0}12%,to{opacity:1}}.live-icon .live-icon-arc-small{animation:8s infinite live-icon-pulse}.live-icon .live-icon-arc-medium{animation:8s infinite live-icon-arc-small}.live-icon .live-icon-arc-large{animation:8s infinite live-icon-arc-large}@media (prefers-reduced-motion:reduce){.live-icon .live-icon-arc-small,.live-icon .live-icon-arc-medium,.live-icon .live-icon-arc-large{animation:none}}