jekyll-theme-conference 2.5.2 → 2.5.3

Sign up to get free protection for your applications and to get access to all the features.
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