jekyll-theme-conference 2.5.2 → 2.5.3

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: 0ebb94e878ab7f234d64b2a45c45153438c9e075251d9dda31bc12e670168f91
4
- data.tar.gz: '0980a8034943452466ce56df8e81a76b4e0f1bb9f2d66fa9ad7a8028157cf6b8'
3
+ metadata.gz: 582dbe31f3df063b308b3f7b79002541cdde192973decc215a2c5d23c69cf4d1
4
+ data.tar.gz: bd427c637147fc3fc2e8c10cc89d8cd95fbb7bab18479837755b098d5ef45815
5
5
  SHA512:
6
- metadata.gz: dfb07d4cad799e4c8e1d2742966b5dce78d586e2d73b359f6f5b8cffd6aacc7f8b510dbadeec3af407f92cd9801eae12edff14240ec81621e8c86de0abc77e93
7
- data.tar.gz: b2381ce0e3e608130c37f55695e3c27af9980f3097359b6989ecb257bad158611bbfc00b61464835b48a3aadb9144e31077a3e4778ee6f746c953a1f20269bd0
6
+ metadata.gz: 38790049e46cd6beed99be5367ef0ebb475855695400a8475b809e35f898c32c9c3908a75dcb1b5b16802bc0b9694ff2450e34ea599bdb35e7fbfc4ac8ad7e4f
7
+ data.tar.gz: 66cc4df70435f6f0ccf6dc7601483d1c9b892b9e35d5447ecc6ed3303b86b6758c049fc3136c0e86a54652a6f6c6c23ccd35e69635ac4631a6356bde01ae21ff
@@ -0,0 +1,87 @@
1
+ let rooms = {
2
+ {%- for r in site.data.program -%}
3
+ {%- assign room = site.rooms | where: 'name', r.room | first -%}
4
+ {%- if room.live -%}
5
+
6
+ {%- assign t = r.talks | first -%}
7
+ {%- include partials/get_talk_time.html -%}
8
+ {%- assign time_start = talk_start -%}
9
+ {%- assign time_end = talk_end -%}
10
+ {%- include partials/get_timestamp.html -%}
11
+
12
+ {%- assign offset_start = site.conference.live.streaming.start_early | default: 0 -%}
13
+ {%- assign room_ts_start = offset_start | times: -60 | plus: timestamp_start -%}
14
+
15
+ {%- assign t = r.talks | last -%}
16
+ {%- include partials/get_talk_time.html -%}
17
+ {%- assign time_start = talk_start -%}
18
+ {%- assign time_end = talk_end -%}
19
+ {%- include partials/get_timestamp.html -%}
20
+
21
+ {%- assign offset_end = site.conference.live.streaming.end_late | default: 0 -%}
22
+ {%- assign room_ts_end = offset_end | times: 60 | plus: timestamp_end -%}
23
+
24
+ "{{ room.name }}": {
25
+ "id": {{ forloop.index }},
26
+ "name": "{{ room.name }}",
27
+ "href": "{{ room.live }}",
28
+ "start": {{ room_ts_start }},
29
+ "end": {{ room_ts_end }}
30
+ },
31
+ {%- endif -%}
32
+ {%- endfor -%}
33
+ };
34
+
35
+ let speakers = {
36
+ {%- for speaker in site.speakers -%}
37
+ "{{ speaker.name }}" : {
38
+ {%- if site.conference.speakers.show_firstname -%}
39
+ "name": "{{ speaker.first_name | append: ' ' | append: speaker.last_name }}",
40
+ {%- else -%}
41
+ "name": "{{ speaker.first_name | slice: 0 | append : '. ' | append: speaker.last_name }}",
42
+ {%- endif -%}
43
+ {%- if speaker.hide -%}
44
+ "href": "",
45
+ {%- else -%}
46
+ "href": "{{ speaker.url | prepend: site.baseurl }}",
47
+ {%- endif -%}
48
+ },
49
+ {%- endfor -%}
50
+ };
51
+
52
+ let talks = {
53
+ {%- for r in site.data.program -%}
54
+ {%- assign room = site.rooms | where: 'name', r.room | first -%}
55
+ {%- if room.live -%}
56
+ "{{ room.name | replace: '"', '\"' }}": [
57
+ {%- for t in r.talks -%}
58
+ {%- assign talk = site.talks | where: 'name', t.name | first -%}
59
+ {
60
+ "name": "{{ talk.name | replace: '"', '\"' }}",
61
+
62
+ {%- unless talk.hide -%}
63
+ "href": "{{ talk.url | prepend: site.baseurl }}",
64
+ {%- else -%}
65
+ "href": "",
66
+ {%- endunless -%}
67
+
68
+ {%- include partials/get_main_category.html -%}
69
+ "color": "{{ main_cat_color }}",
70
+
71
+ "speakers": [
72
+ {%- for speaker_name in talk.speakers -%}
73
+ "{{ speaker_name}}",
74
+ {%- endfor -%}
75
+ ],
76
+
77
+ {%- assign time_start = t.time_start -%}
78
+ {%- assign time_end = t.time_end -%}
79
+ {%- include partials/get_timestamp.html -%}
80
+ "start": {{ timestamp_start }},
81
+ "end": {{ timestamp_end }}
82
+ },
83
+ {%- endfor -%}
84
+ ],
85
+ {%- endif -%}
86
+ {%- endfor -%}
87
+ };
@@ -8,6 +8,8 @@
8
8
  let confEnd = {{ timestamp_end }};
9
9
  let confDur = confEnd - confStart;
10
10
 
11
+ let talkAnnounce = 120; // in minutes
12
+
11
13
  let freezeTime = false;
12
14
  let timeFrozen = 0;
13
15
  let timeOffset = 0;
@@ -21,6 +23,7 @@
21
23
 
22
24
  let liveTimer;
23
25
  let streamTimer;
26
+ let streamInfoTimer;
24
27
 
25
28
  let mod = function (n, m) {
26
29
  return ((n % m) + m) % m;
@@ -138,6 +141,8 @@
138
141
  let tNow = time();
139
142
  let liveShow = document.getElementsByClassName('live-show');
140
143
  let liveHide = document.getElementsByClassName('live-hide');
144
+ let liveTime = document.getElementsByClassName('live-time');
145
+ let livePast = document.getElementsByClassName('live-past');
141
146
 
142
147
  for (let i = 0; i < liveShow.length; i++) {
143
148
  let tStart = liveShow[i].dataset.start;
@@ -169,6 +174,84 @@
169
174
  }
170
175
  }
171
176
 
177
+ for (let i = 0; i < liveTime.length; i++) {
178
+ let t = liveTime[i].dataset.time;
179
+ if (typeof t == "undefined") {
180
+ break;
181
+ }
182
+ let tRel = tNow - t;
183
+
184
+ let tStr;
185
+ if (tRel >= -60 && tRel < 0) {
186
+ tStr = '{{ site.data.lang[site.conference.lang].live.time.soon | default: "soon" }}';
187
+ }
188
+ else if (tRel >= 0 && tRel < 60) {
189
+ tStr = '{{ site.data.lang[site.conference.lang].live.time.now | default: "now" }}';
190
+ }
191
+ else {
192
+ if (tRel < 0) {
193
+ tStr = '{{ site.data.lang[site.conference.lang].live.time.in | default: "in" }} ';
194
+ }
195
+ else {
196
+ tStr = '{{ site.data.lang[site.conference.lang].live.time.since | default: "since" }} ';
197
+ }
198
+ tRel = Math.abs(tRel);
199
+
200
+ let dWeeks = Math.floor(tRel / (7*24*60*60));
201
+ let dDays = Math.floor(tRel / (24*60*60));
202
+ let dHours = Math.floor(tRel / (60*60));
203
+ let dMins = Math.floor(tRel / (60));
204
+ if (dWeeks > 4) {
205
+ break;
206
+ }
207
+ else if (dWeeks > 1) {
208
+ tStr += dWeeks +' {{ site.data.lang[site.conference.lang].live.time.weeks | default: "weeks" }}';
209
+ }
210
+ else if (dWeeks == 1) {
211
+ tStr += '1 {{ site.data.lang[site.conference.lang].live.time.week | default: "week" }}';
212
+ }
213
+ else if (dDays > 1) {
214
+ tStr += dDays +' {{ site.data.lang[site.conference.lang].live.time.days | default: "days" }}';
215
+ }
216
+ else if (dDays == 1) {
217
+ tStr += '1 {{ site.data.lang[site.conference.lang].live.time.day | default: "day" }}';
218
+ }
219
+ else if (dHours > 1) {
220
+ tStr += dHours +' {{ site.data.lang[site.conference.lang].live.time.hours | default: "hours" }}';
221
+ }
222
+ else if (dHours == 1) {
223
+ tStr += '1 {{ site.data.lang[site.conference.lang].live.time.hour | default: "hour" }}';
224
+ }
225
+ else if (dMins > 1) {
226
+ tStr += dMins +' {{ site.data.lang[site.conference.lang].live.time.minutes | default: "minutes" }}';
227
+ }
228
+ else {
229
+ tStr += '1 {{ site.data.lang[site.conference.lang].live.time.minute | default: "minute" }}';
230
+ }
231
+ }
232
+
233
+ liveTime[i].innerHTML = tStr;
234
+ }
235
+
236
+ for (let i = 0; i < livePast.length; i++) {
237
+ let t = livePast[i].dataset.time;
238
+ if (typeof t == "undefined") {
239
+ break;
240
+ }
241
+ let tRel = tNow - t;
242
+
243
+ if (tRel < 0) {
244
+ // Grey out when in past
245
+ if (!livePast[i].classList.contains('text-secondary')) {
246
+ livePast[i].classList.add('text-secondary');
247
+ }
248
+ }
249
+ else {
250
+ // Show normal otherwise
251
+ livePast[i].classList.remove('text-secondary');
252
+ }
253
+ }
254
+
172
255
  if (tNow > confEnd && !demo) {
173
256
  // Cancel timer after program is over
174
257
  stopUpdateLive();
@@ -198,39 +281,7 @@
198
281
  };
199
282
 
200
283
  {% if site.conference.live.streaming -%}
201
-
202
- let rooms = {
203
- {%- for r in site.data.program -%}
204
- {%- assign room = site.rooms | where: 'name', r.room | first -%}
205
- {%- if room.live -%}
206
-
207
- {%- assign t = r.talks | first -%}
208
- {%- include partials/get_talk_time.html -%}
209
- {%- assign time_start = talk_start -%}
210
- {%- assign time_end = talk_end -%}
211
- {%- include partials/get_timestamp.html -%}
212
-
213
- {%- assign offset_start = site.conference.live.streaming.start_early | default: 0 -%}
214
- {%- assign room_ts_start = offset_start | times: -60 | plus: timestamp_start -%}
215
-
216
- {%- assign t = r.talks | last -%}
217
- {%- include partials/get_talk_time.html -%}
218
- {%- assign time_start = talk_start -%}
219
- {%- assign time_end = talk_end -%}
220
- {%- include partials/get_timestamp.html -%}
221
-
222
- {%- assign offset_end = site.conference.live.streaming.end_late | default: 0 -%}
223
- {%- assign room_ts_end = offset_end | times: 60 | plus: timestamp_end -%}
224
-
225
- "{{ room.name }}": {
226
- "id": {{ forloop.index }},
227
- "href": "{{ room.live }}",
228
- "start": {{ room_ts_start }},
229
- "end": {{ room_ts_end }}
230
- },
231
- {%- endif -%}
232
- {%- endfor -%}
233
- };
284
+ {% include js/conference-data.js %}
234
285
 
235
286
  let streamModal;
236
287
 
@@ -251,7 +302,9 @@
251
302
  streamModal.find('#stream-placeholder > div').text('{{ site.data.lang[site.conference.lang].live.pre_stream | default: "Live stream has not started yet." }}');
252
303
  streamModal.find('#stream-placeholder').addClass('d-flex');
253
304
 
254
- stopUpdateStream();
305
+ if (typeof streamTimer !== "undefined") {
306
+ clearInterval(streamTimer);
307
+ }
255
308
  if (!freezeTime) {
256
309
  streamTimer = setTimeout(activeStream, delayStart(room.start) * 1000, roomName);
257
310
  }
@@ -264,7 +317,9 @@
264
317
  streamModal.find('#stream-placeholder').addClass('d-none').removeClass('d-flex');
265
318
  streamModal.find('iframe').removeClass('d-none');
266
319
 
267
- stopUpdateStream();
320
+ if (typeof streamTimer !== "undefined") {
321
+ clearInterval(streamTimer);
322
+ }
268
323
  if (!freezeTime) {
269
324
  streamTimer = setTimeout(postEndStream, delayStart(room.end) * 1000, roomName);
270
325
  }
@@ -278,17 +333,73 @@
278
333
  streamModal.find('#stream-placeholder > div').text('{{ site.data.lang[site.conference.lang].live.post_stream | default: "Live stream has ended." }}');
279
334
  streamModal.find('#stream-placeholder').addClass('d-flex');
280
335
 
281
- stopUpdateStream();
336
+ if (typeof streamTimer !== "undefined") {
337
+ clearInterval(streamTimer);
338
+ }
282
339
  if (!freezeTime && demo) {
283
340
  streamTimer = setTimeout(preStartStream, delayStart(demoStart) * 1000, roomName);
284
341
  }
285
342
  };
286
343
 
344
+ let setStreamInfo = function (roomName) {
345
+ let timeNow = time();
346
+ let talksHere = talks[roomName];
347
+ let talkNow;
348
+
349
+ if (typeof streamInfoTimer !== "undefined") {
350
+ clearInterval(streamInfoTimer);
351
+ }
352
+
353
+ if (typeof talksHere !== "undefined") {
354
+ if (timeNow < talksHere[talksHere.length-1].end) {
355
+ for (var i = 0; i < talksHere.length; i++) {
356
+ if (timeNow < talksHere[i].end && timeNow >= talksHere[i].start - talkAnnounce*60) {
357
+ talkNow = talksHere[i];
358
+ break;
359
+ }
360
+ }
361
+ }
362
+ }
363
+
364
+ if (typeof talkNow !== "undefined") {
365
+ document.getElementById('stream-info').dataset.time = talkNow.start;
366
+ document.getElementById('stream-info-time').dataset.time = talkNow.start;
367
+ updateLive();
368
+
369
+ streamModal.find('#stream-info-color').addClass('border-soft-' + talkNow.color);
370
+
371
+ streamModal.find('#stream-info-talk').text(talkNow.name).attr('href', talkNow.href);
372
+
373
+ let speakerStr = '';
374
+ for (var i = 0; i < talkNow.speakers.length; i++) {
375
+ let speaker = speakers[talkNow.speakers[i]];
376
+ if (speaker.href == '') {
377
+ speakerStr += speaker.name +', '
378
+ }
379
+ else {
380
+ speakerStr += '<a class="text-reset" href="'+ speaker.href +'">'+ speaker.name +'</a>, ';
381
+ }
382
+ }
383
+ speakerStr = speakerStr.slice(0, -2);
384
+ streamModal.find('#stream-info-speakers').html(speakerStr);
385
+
386
+ streamModal.find('#stream-info').removeClass('d-none');
387
+
388
+ if (!freezeTime) {
389
+ streamInfoTimer = setTimeout(setStreamInfo, delayStart(talkNow.end) * 1000, roomName);
390
+ }
391
+ }
392
+ else {
393
+ streamModal.find('#stream-info').addClass('d-none');
394
+ }
395
+ };
396
+
287
397
  let setStream = function (roomName) {
288
398
  streamModal.find('.modal-footer .btn').removeClass('active');
289
399
  streamModal.find('#stream-select').selectedIndex = -1;
290
400
 
291
401
  let room = getRoom(roomName);
402
+ roomName = room.name;
292
403
  let tNow = time();
293
404
 
294
405
  if (tNow < room.start) {
@@ -300,6 +411,7 @@
300
411
  else {
301
412
  activeStream(roomName);
302
413
  }
414
+ setStreamInfo(roomName);
303
415
 
304
416
  streamModal.find('#stream-button' + room.id).addClass('active');
305
417
  streamModal.find('#stream-select').selectedIndex = room.id;
@@ -320,6 +432,9 @@
320
432
  if (typeof streamTimer !== "undefined") {
321
433
  clearInterval(streamTimer);
322
434
  }
435
+ if (typeof streamInfoTimer !== "undefined") {
436
+ clearInterval(streamInfoTimer);
437
+ }
323
438
  };
324
439
 
325
440
  let hideModal = function (event) {
@@ -4,7 +4,7 @@
4
4
  {% unless site.conference.lang == "en" %}
5
5
  {% assign errors = errors | push : "The internationalization file containing different strings for this template seems to be missing. Have you copied the `_data/lang.yml` file from the [theme's repository](https://github.com/DigitaleGesellschaft/jekyll-theme-conference/blob/master/_data/lang.yml) to you local website folder?" %}
6
6
  {% endunless %}
7
- {% elsif site.data.lang.version < 3 %}
7
+ {% elsif site.data.lang.version < 4 %}
8
8
  {% 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/master/_data/lang.yml)." %}
9
9
  {% endunless %}
10
10
  {% unless site.conference.lang == "en" or site.conference.lang == "de" or site.conference.lang == "fr" or site.conference.lang == "pt" %}
@@ -25,7 +25,8 @@
25
25
  {% include partials/live-modal.html %}
26
26
  {% endif %}
27
27
 
28
- <script src="{{ site.baseurl }}/assets/js/main.js"></script>
28
+ <!-- Append build time to avoid caching of live program embedded in JavaScript file -->
29
+ <script src="{{ site.baseurl }}/assets/js/main.js?t={{ site.time | date: "%s" }}"></script>
29
30
 
30
31
  </body>
31
32
  </html>
@@ -1,6 +1,7 @@
1
1
  <div class="modal fade" id="stream-modal" tabindex="-1" role="dialog" aria-labelledby="link-modal-label" aria-hidden="true">
2
2
  <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
3
3
  <div class="modal-content">
4
+
4
5
  <div class="modal-header">
5
6
  <h5 class="modal-title">
6
7
  {{ site.data.lang[site.conference.lang].live.streaming | default: "Live Stream" }}
@@ -9,12 +10,24 @@
9
10
  <span aria-hidden="true">&times;</span>
10
11
  </button>
11
12
  </div>
13
+
12
14
  <div class="modal-body embed-responsive embed-responsive-16by9">
13
15
  <iframe class="embed-responsive-item" src="" allowfullscreen></iframe>
14
16
  <div id="stream-placeholder" class="embed-responsive-item d-none justify-content-center align-items-center">
15
17
  <div></div>
16
18
  </div>
17
19
  </div>
20
+
21
+ <div class="modal-footer flex-column justify-content-start d-none live-past" id="stream-info" data-time="">
22
+ <div class="my-0 small align-self-start live-time" id="stream-info-time" data-time=""></div>
23
+ <div class="pl-3 align-self-start" id="stream-info-color">
24
+ <p class="mb-0">
25
+ <a class="text-reset" href="#" id="stream-info-talk"></a>
26
+ </p>
27
+ <p class="font-weight-light mb-0" id="stream-info-speakers"></p>
28
+ </div>
29
+ </div>
30
+
18
31
  <div class="modal-footer justify-content-around">
19
32
  {% for r in site.data.program %}
20
33
  {% assign room = site.rooms | where: 'name', r.room | first %}
@@ -32,6 +45,7 @@
32
45
  </select>
33
46
  </div>
34
47
  </div>
48
+
35
49
  </div>
36
50
  </div>
37
51
  </div>
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  {% if site.conference.location.hide -%}
4
- rm -r rooms
5
- rm -r {{ site.conference.location.url | default: "location" }}
4
+ rm -r _site/rooms
5
+ rm -r _site/{{ site.conference.location.url | default: "location" }}
6
6
  {% else -%}
7
7
  {%- for room in site.rooms -%}
8
8
  {%- if room.hide -%}
9
- rm -r {{ room.url | slice: 1, room.url.size }}
9
+ rm -r _site/{{ room.url | slice: 1, room.url.size }}
10
10
  {% endif -%}
11
11
  {%- endfor -%}
12
12
  {%- endif -%}
13
13
 
14
14
  {%- for speaker in site.speakers -%}
15
15
  {%- if speaker.hide -%}
16
- rm -r {{ speaker.url | slice: 1, speaker.url.size }}
16
+ rm -r _site/{{ speaker.url | slice: 1, speaker.url.size }}
17
17
  {% endif -%}
18
18
  {%- endfor -%}
19
19
 
20
20
  {%- for talk in site.talks -%}
21
21
  {%- if talk.hide -%}
22
- rm -r {{ talk.url | slice: 1, talk.url.size }}
22
+ rm -r _site/{{ talk.url | slice: 1, talk.url.size }}
23
23
  {% endif -%}
24
24
  {%- endfor %}
25
- rm delete_hidden.sh
25
+ rm _site/delete_hidden.sh
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-theme-conference
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.2
4
+ version: 2.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorenz Schmid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-14 00:00:00.000000000 Z
11
+ date: 2020-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -62,6 +62,7 @@ files:
62
62
  - LICENSE.md
63
63
  - README.md
64
64
  - _includes/js/bootstrap.js
65
+ - _includes/js/conference-data.js
65
66
  - _includes/js/conference-live.js
66
67
  - _includes/js/conference-map.js
67
68
  - _includes/js/conference-modal.js