jekyll-theme-conference 3.4.0 → 3.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -4
- data/_includes/js/conference-live.js +75 -56
- data/_includes/partials/get_talk_timestamp.html +2 -2
- data/_includes/partials/modal_live.html +3 -2
- data/_layouts/data.html +17 -0
- data/_layouts/stream-overview.html +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2ae0a8593b5af0caa18dddfbb46fc921b089d9f932ba6c3af44d787669c99c0
|
4
|
+
data.tar.gz: de8cf5e47442a94d1f411ad6309cfd3d4ae2f964e341e4f9b1f47e14de7eca1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d347ca521f8ff60e328e9d6e1b0fa1557d78ac4dfd598f681ca2f3aba9683ea95d31b8d053295d5fd5cbe8c8cc7f56628a25b4eaf1a7149696b1611d6e1d84c
|
7
|
+
data.tar.gz: 6ef6506cb582b1620e4fa78b13b561b129076c208b2ca98993ea20c83faf77f12f2d28706dbac7a2cc944311133d585ce19b95dcd6cebfd44991b6f632de83fd
|
data/README.md
CHANGED
@@ -35,20 +35,20 @@ The theme was originally created for the yearly Winterkongress conference of the
|
|
35
35
|
* [Open Graph Link Preview](#open-graph-link-preview)
|
36
36
|
* [Main Landing Page](#main-landing-page)
|
37
37
|
* [Information Boxes](#information-boxes)
|
38
|
-
* [Live Indications & Streaming](#live-indications
|
38
|
+
* [Live Indications & Streaming](#live-indications--streaming)
|
39
39
|
* [Map](#map)
|
40
40
|
* [Talk Settings](#talk-settings)
|
41
41
|
* [Speaker Settings](#speaker-settings)
|
42
42
|
* [Location Settings](#location-settings)
|
43
43
|
* [Program Settings](#program-settings)
|
44
44
|
- [Content](#content)
|
45
|
-
* [Schedule / Program](#schedule
|
45
|
+
* [Schedule / Program](#schedule--program)
|
46
46
|
* [Talks](#talks)
|
47
47
|
* [Speakers](#speakers)
|
48
48
|
* [Rooms](#rooms)
|
49
49
|
* [Links](#links)
|
50
50
|
- [Overview Pages](#overview-pages)
|
51
|
-
* [Location / Room Overview](#location
|
51
|
+
* [Location / Room Overview](#location--room-overview)
|
52
52
|
* [Live Stream Overview](#live-stream-overview)
|
53
53
|
* [Additional Pages](#additional-pages)
|
54
54
|
- [Design](#design)
|
@@ -590,7 +590,8 @@ Each talk is represented by a file in the `_talks/` directory. It must begin wit
|
|
590
590
|
- the talk's `name` (used as identifier),
|
591
591
|
- one or more existing `speakers` name(s),
|
592
592
|
- optionally one or more `categories` of which one should be a main category as defined in the site's configuration,
|
593
|
-
- optionally a list of `links` (see the _Links_ subsection below for the available properties per link; links with icons are treated separately and are also included on the talk overview page),
|
593
|
+
- optionally a list of `links` (see the _Links_ subsection below for the available properties per link; links with icons are treated separately and are also included on the talk overview page),
|
594
|
+
- optionally a list of `live: links` (see the _Links_ subsection below for the available properties per link) which are shown below the live stream for the given talk in form of buttons, and
|
594
595
|
- optionally `hide: true` if the talk's page should not be linked to.
|
595
596
|
|
596
597
|
### Speakers
|
@@ -15,9 +15,9 @@ window.conference.live = (function() {
|
|
15
15
|
|
16
16
|
let data;
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
const confStart = {{ conf_start }};
|
19
|
+
const confEnd = {{ conf_end }};
|
20
|
+
const confDur = confEnd - confStart;
|
21
21
|
|
22
22
|
let freezeTime = false;
|
23
23
|
let timeFrozen = 0;
|
@@ -34,34 +34,34 @@ window.conference.live = (function() {
|
|
34
34
|
let streamVideoTimer;
|
35
35
|
let streamInfoTimer;
|
36
36
|
|
37
|
-
|
37
|
+
const loadData = function () {
|
38
38
|
// Fetch schedule from external file
|
39
39
|
$.getJSON('{{ site.baseurl }}/assets/js/data.json', function(json) {
|
40
40
|
data = json;
|
41
41
|
});
|
42
42
|
};
|
43
43
|
|
44
|
-
|
44
|
+
const getData = function () {
|
45
45
|
// Return data
|
46
46
|
return data;
|
47
47
|
};
|
48
48
|
|
49
|
-
|
49
|
+
const mod = function (n, m) {
|
50
50
|
// Absolute modulo
|
51
51
|
return ((n % m) + m) % m;
|
52
52
|
};
|
53
53
|
|
54
|
-
|
54
|
+
const timeNow = function () {
|
55
55
|
// Current timestamp in seconds
|
56
56
|
return Math.floor(Date.now() / 1000);
|
57
57
|
};
|
58
58
|
|
59
|
-
|
59
|
+
const timeCont = function () {
|
60
60
|
// Continuous time (respecting previous pauses)
|
61
61
|
return timeNow() - timeOffset;
|
62
62
|
};
|
63
63
|
|
64
|
-
|
64
|
+
const timeCycle = function () {
|
65
65
|
// Cyclic timestamp in seconds
|
66
66
|
let actTime = timeNow();
|
67
67
|
let relTime = mod(actTime, durDemo + 2*durPause) / (durDemo + 2*durPause);
|
@@ -69,7 +69,7 @@ window.conference.live = (function() {
|
|
69
69
|
return cycleTime;
|
70
70
|
};
|
71
71
|
|
72
|
-
|
72
|
+
const time = function () {
|
73
73
|
// Return app time
|
74
74
|
if (freezeTime) {
|
75
75
|
return timeFrozen;
|
@@ -82,7 +82,7 @@ window.conference.live = (function() {
|
|
82
82
|
}
|
83
83
|
};
|
84
84
|
|
85
|
-
|
85
|
+
const pauseTime = function () {
|
86
86
|
// Pause app time
|
87
87
|
if (!freezeTime) {
|
88
88
|
timeFrozen = time();
|
@@ -92,7 +92,7 @@ window.conference.live = (function() {
|
|
92
92
|
}
|
93
93
|
};
|
94
94
|
|
95
|
-
|
95
|
+
const continueTime = function () {
|
96
96
|
// Continue app time
|
97
97
|
if (freezeTime) {
|
98
98
|
freezeTime = false;
|
@@ -101,7 +101,7 @@ window.conference.live = (function() {
|
|
101
101
|
}
|
102
102
|
};
|
103
103
|
|
104
|
-
|
104
|
+
const resetTime = function () {
|
105
105
|
// Reset app time
|
106
106
|
timeOffset = 0;
|
107
107
|
freezeTime = false;
|
@@ -109,7 +109,7 @@ window.conference.live = (function() {
|
|
109
109
|
startUpdate();
|
110
110
|
};
|
111
111
|
|
112
|
-
|
112
|
+
const setTime = function (newTime, newDay) {
|
113
113
|
// Set and pause app time
|
114
114
|
pauseTime();
|
115
115
|
|
@@ -137,7 +137,7 @@ window.conference.live = (function() {
|
|
137
137
|
update();
|
138
138
|
};
|
139
139
|
|
140
|
-
|
140
|
+
const getTime = function () {
|
141
141
|
// Return app time as string
|
142
142
|
let tConvert = time();
|
143
143
|
|
@@ -149,7 +149,7 @@ window.conference.live = (function() {
|
|
149
149
|
return dStr +" "+ h +":"+ (m < 10 ? "0" : "") + m;
|
150
150
|
};
|
151
151
|
|
152
|
-
|
152
|
+
const timeUnit = function () {
|
153
153
|
// App time refresh rate
|
154
154
|
if (demo) {
|
155
155
|
return 0.1;
|
@@ -159,7 +159,7 @@ window.conference.live = (function() {
|
|
159
159
|
}
|
160
160
|
};
|
161
161
|
|
162
|
-
|
162
|
+
const delayStart = function (startTime) {
|
163
163
|
// Seconds until given startTime occurs
|
164
164
|
let tNow = time();
|
165
165
|
let tUnit = timeUnit();
|
@@ -179,18 +179,17 @@ window.conference.live = (function() {
|
|
179
179
|
}
|
180
180
|
};
|
181
181
|
|
182
|
-
let
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
return demo;
|
182
|
+
let model = {
|
183
|
+
set demo(value) {
|
184
|
+
demo = value;
|
185
|
+
resetTime();
|
186
|
+
},
|
187
|
+
get demo() {
|
188
|
+
return demo;
|
189
|
+
}
|
191
190
|
};
|
192
191
|
|
193
|
-
|
192
|
+
const updateLive = function () {
|
194
193
|
// Update status all live elements in DOM
|
195
194
|
let tNow = time();
|
196
195
|
let liveShow = document.getElementsByClassName('live-show');
|
@@ -322,7 +321,7 @@ window.conference.live = (function() {
|
|
322
321
|
}
|
323
322
|
};
|
324
323
|
|
325
|
-
|
324
|
+
const startUpdateLive = function () {
|
326
325
|
// Start update timer to update live elements in DOM
|
327
326
|
stopUpdateLive();
|
328
327
|
updateLive();
|
@@ -339,7 +338,7 @@ window.conference.live = (function() {
|
|
339
338
|
}
|
340
339
|
};
|
341
340
|
|
342
|
-
|
341
|
+
const stopUpdateLive = function () {
|
343
342
|
// stopUpdate update timer to update live elements in DOM
|
344
343
|
if (typeof liveTimer !== "undefined") {
|
345
344
|
clearInterval(liveTimer);
|
@@ -347,13 +346,13 @@ window.conference.live = (function() {
|
|
347
346
|
};
|
348
347
|
|
349
348
|
{% if site.conference.live.streaming -%}
|
350
|
-
|
351
|
-
|
352
|
-
|
349
|
+
const streamPause = {{ site.conference.live.streaming.time_pause | default: 60 }}; // in minutes
|
350
|
+
const streamPrepend = {{ site.conference.live.streaming.time_prepend | default: 5 }}; // in minutes
|
351
|
+
const streamExtend = {{ site.conference.live.streaming.time_extend | default: 5 }}; // in minutes
|
353
352
|
|
354
353
|
let streamModal;
|
355
354
|
|
356
|
-
|
355
|
+
const getRoom = function (roomName) {
|
357
356
|
// Return room object for given room name
|
358
357
|
if (roomName in data.rooms) {
|
359
358
|
return data.rooms[roomName];
|
@@ -363,7 +362,7 @@ window.conference.live = (function() {
|
|
363
362
|
}
|
364
363
|
};
|
365
364
|
|
366
|
-
|
365
|
+
const getTalks = function (roomName) {
|
367
366
|
if (roomName in data.talks) {
|
368
367
|
return data.talks[roomName];
|
369
368
|
}
|
@@ -372,7 +371,7 @@ window.conference.live = (function() {
|
|
372
371
|
}
|
373
372
|
};
|
374
373
|
|
375
|
-
|
374
|
+
const getNextTalk = function (roomName) {
|
376
375
|
// Get talk object for next talk in given room
|
377
376
|
let timeNow = time();
|
378
377
|
let talksHere = getTalks(roomName);
|
@@ -389,7 +388,7 @@ window.conference.live = (function() {
|
|
389
388
|
return false;
|
390
389
|
};
|
391
390
|
|
392
|
-
|
391
|
+
const getNextPause = function (roomName) {
|
393
392
|
// Get time object for next pause in given room
|
394
393
|
let timeNow = time();
|
395
394
|
let talksHere = getTalks(roomName);
|
@@ -409,7 +408,7 @@ window.conference.live = (function() {
|
|
409
408
|
return false;
|
410
409
|
};
|
411
410
|
|
412
|
-
|
411
|
+
const setStreamIframeContent = function (content) {
|
413
412
|
// Set stream modal iframe to show given text
|
414
413
|
streamModal.find('iframe').attr('src', '');
|
415
414
|
streamModal.find('iframe').addClass('d-none');
|
@@ -417,14 +416,14 @@ window.conference.live = (function() {
|
|
417
416
|
streamModal.find('#stream-placeholder').addClass('d-flex');
|
418
417
|
};
|
419
418
|
|
420
|
-
|
419
|
+
const setStreamIframeSrc = function (href) {
|
421
420
|
// Set stream modal iframe to show given URL
|
422
421
|
streamModal.find('iframe').attr('src', href);
|
423
422
|
streamModal.find('#stream-placeholder').addClass('d-none').removeClass('d-flex');
|
424
423
|
streamModal.find('iframe').removeClass('d-none');
|
425
424
|
};
|
426
425
|
|
427
|
-
|
426
|
+
const setStreamVideo = function (roomName) {
|
428
427
|
// Update stream modal iframe:
|
429
428
|
// Show stream with start/pause/end message (for given room) and keep updated
|
430
429
|
let timeNow = time();
|
@@ -504,7 +503,7 @@ window.conference.live = (function() {
|
|
504
503
|
}
|
505
504
|
};
|
506
505
|
|
507
|
-
|
506
|
+
const setStreamInfo = function (roomName) {
|
508
507
|
// Update stream modal info bar:
|
509
508
|
// Show next talk and speaker (for given room) and keep updated
|
510
509
|
let timeNow = time();
|
@@ -527,7 +526,7 @@ window.conference.live = (function() {
|
|
527
526
|
streamModal.find('#stream-info-talk').text(talkNext.name).attr('href', talkNext.href);
|
528
527
|
|
529
528
|
let speakerStr = '';
|
530
|
-
for (
|
529
|
+
for (let i = 0; i < talkNext.speakers.length; i++) {
|
531
530
|
let speaker = data.speakers[talkNext.speakers[i]];
|
532
531
|
if (speaker.href == '') {
|
533
532
|
speakerStr += speaker.name +', '
|
@@ -539,6 +538,27 @@ window.conference.live = (function() {
|
|
539
538
|
speakerStr = speakerStr.slice(0, -2);
|
540
539
|
streamModal.find('#stream-info-speakers').html(speakerStr);
|
541
540
|
|
541
|
+
if (talkNext.live_links) {
|
542
|
+
let linksStr = '';
|
543
|
+
for (let i = 0; i < talkNext.live_links.length; i++) {
|
544
|
+
const link = talkNext.live_links[i];
|
545
|
+
|
546
|
+
linksStr += '<a href="' + link.href + '" class="btn btn-light m-1'
|
547
|
+
if (link.disabled) {
|
548
|
+
linksStr += ' disabled';
|
549
|
+
}
|
550
|
+
linksStr += '">';
|
551
|
+
if (link.icon) {
|
552
|
+
linksStr += '<i class="fas fa-' + link.icon + '"></i> ';
|
553
|
+
}
|
554
|
+
linksStr += link.name + '</a>';
|
555
|
+
}
|
556
|
+
streamModal.find('#stream-info-links').html(linksStr).removeClass('d-none');
|
557
|
+
}
|
558
|
+
else {
|
559
|
+
streamModal.find('#stream-info-links').addClass('d-none');
|
560
|
+
}
|
561
|
+
|
542
562
|
streamModal.find('#stream-info').removeClass('d-none');
|
543
563
|
|
544
564
|
if (!freezeTime) {
|
@@ -562,7 +582,7 @@ window.conference.live = (function() {
|
|
562
582
|
}
|
563
583
|
};
|
564
584
|
|
565
|
-
|
585
|
+
const setStream = function (roomName) {
|
566
586
|
// Update stream modal (iframe and info bar) for given room
|
567
587
|
streamModal.find('.modal-footer .btn').removeClass('active');
|
568
588
|
streamModal.find('#stream-select').val(0);
|
@@ -578,7 +598,7 @@ window.conference.live = (function() {
|
|
578
598
|
streamModal.find('#stream-select').val(room.id);
|
579
599
|
};
|
580
600
|
|
581
|
-
|
601
|
+
const updateStream = function () {
|
582
602
|
// Update stream modal for currently active room button
|
583
603
|
if (streamModal.hasClass('show')) {
|
584
604
|
let activeButton = streamModal.find('.modal-footer .btn.active');
|
@@ -590,7 +610,7 @@ window.conference.live = (function() {
|
|
590
610
|
}
|
591
611
|
};
|
592
612
|
|
593
|
-
|
613
|
+
const stopUpdateStream = function () {
|
594
614
|
// Stop stream modal update timer
|
595
615
|
if (typeof streamVideoTimer !== "undefined") {
|
596
616
|
clearInterval(streamVideoTimer);
|
@@ -600,14 +620,14 @@ window.conference.live = (function() {
|
|
600
620
|
}
|
601
621
|
};
|
602
622
|
|
603
|
-
|
623
|
+
const hideModal = function () {
|
604
624
|
// Close stream modal
|
605
625
|
streamModal.find('iframe').attr('src', '');
|
606
626
|
streamModal.find('.modal-footer .btn').removeClass('active');
|
607
627
|
streamModal.find('#stream-select').selectedIndex = -1;
|
608
628
|
};
|
609
629
|
|
610
|
-
|
630
|
+
const setupStream = function () {
|
611
631
|
// Setup events when modal opens/closes
|
612
632
|
streamModal = $('#stream-modal');
|
613
633
|
|
@@ -638,43 +658,43 @@ window.conference.live = (function() {
|
|
638
658
|
});
|
639
659
|
};
|
640
660
|
|
641
|
-
|
661
|
+
const setup = function () {
|
642
662
|
loadData();
|
643
663
|
startUpdateLive();
|
644
664
|
setupStream();
|
645
665
|
};
|
646
666
|
|
647
|
-
|
667
|
+
const update = function () {
|
648
668
|
updateLive();
|
649
669
|
updateStream();
|
650
670
|
};
|
651
671
|
|
652
|
-
|
672
|
+
const startUpdate = function () {
|
653
673
|
startUpdateLive();
|
654
674
|
updateStream();
|
655
675
|
};
|
656
676
|
|
657
|
-
|
677
|
+
const stopUpdate = function () {
|
658
678
|
stopUpdateLive();
|
659
679
|
stopUpdateStream();
|
660
680
|
};
|
661
681
|
|
662
682
|
{%- else -%}
|
663
683
|
|
664
|
-
|
684
|
+
const setup = function () {
|
665
685
|
loadData();
|
666
686
|
startUpdateLive();
|
667
687
|
};
|
668
688
|
|
669
|
-
|
689
|
+
const update = function () {
|
670
690
|
updateLive();
|
671
691
|
};
|
672
692
|
|
673
|
-
|
693
|
+
const startUpdate = function () {
|
674
694
|
startUpdateLive();
|
675
695
|
};
|
676
696
|
|
677
|
-
|
697
|
+
const stopUpdate = function () {
|
678
698
|
stopUpdateLive();
|
679
699
|
};
|
680
700
|
|
@@ -690,8 +710,7 @@ window.conference.live = (function() {
|
|
690
710
|
setTime: setTime,
|
691
711
|
getTime: getTime,
|
692
712
|
|
693
|
-
|
694
|
-
demo: demoOn,
|
713
|
+
demo: model.demo,
|
695
714
|
durDemo: durDemo,
|
696
715
|
durPause: durPause
|
697
716
|
};
|
@@ -1,9 +1,9 @@
|
|
1
1
|
{%- include partials/get_talk_time.html -%}
|
2
2
|
|
3
|
-
{%- assign datetime_start = d.date | append: " " | append:
|
3
|
+
{%- assign datetime_start = d.date | append: " " | append: talk_start -%}
|
4
4
|
{%- assign add_days_start = talk_start_day | times: 24 | times: 60 | times: 60 -%}
|
5
5
|
{%- assign timestamp_start = datetime_start | date: "%s" | plus: add_days_start | date: "%s" -%}
|
6
6
|
|
7
|
-
{%- assign datetime_end = d.date | append: " " | append:
|
7
|
+
{%- assign datetime_end = d.date | append: " " | append: talk_end -%}
|
8
8
|
{%- assign add_days_end = talk_end_day | times: 24 | times: 60 | times: 60 -%}
|
9
9
|
{%- assign timestamp_end = datetime_end | date: "%s" | plus: add_days_end | date: "%s" -%}
|
@@ -26,17 +26,18 @@
|
|
26
26
|
</p>
|
27
27
|
<p class="font-weight-light mb-0" id="stream-info-speakers"></p>
|
28
28
|
</div>
|
29
|
+
<div class="align-self-center m-0 mt-1" id="stream-info-links"></div>
|
29
30
|
</div>
|
30
31
|
|
31
32
|
<div class="modal-footer justify-content-around">
|
32
|
-
{
|
33
|
+
{% for room in site.rooms -%}
|
33
34
|
<a id="stream-button{{ forloop.index }}" href="#" class="btn btn-outline-primary d-none d-sm-inline {% unless room.live %}disabled{% endunless %}" role="button" data-room="{{ room.name }}">
|
34
35
|
{{ room.name }}
|
35
36
|
</a>
|
36
37
|
{%- endfor %}
|
37
38
|
<div class="form-group w-100 d-block d-sm-none">
|
38
39
|
<select class="form-control" id="stream-select">
|
39
|
-
{
|
40
|
+
{% for room in site.rooms -%}
|
40
41
|
<option value="{{ forloop.index }}" {% unless room.live %}disabled{% endunless %}>{{ room.name }}</option>
|
41
42
|
{%- endfor %}
|
42
43
|
</select>
|
data/_layouts/data.html
CHANGED
@@ -88,6 +88,23 @@
|
|
88
88
|
{%- include partials/get_talk_timestamp.html %}
|
89
89
|
"start": {{ timestamp_start }},
|
90
90
|
"end": {{ timestamp_end }}
|
91
|
+
|
92
|
+
{%- if talk.live.links -%},
|
93
|
+
"live_links": [
|
94
|
+
{%- for link in talk.live.links %}
|
95
|
+
{
|
96
|
+
"name": "{{ link.name | replace: '"', '\"' }}",
|
97
|
+
"href": "{{ link.absolute_url | replace: '"', '%22' }}"
|
98
|
+
{%- if link.icon -%},
|
99
|
+
"icon": "{{ link.icon | replace: '"', '\"' }}"
|
100
|
+
{%- endif %}
|
101
|
+
{%- if link.disabled -%},
|
102
|
+
"disabled": true
|
103
|
+
{%- endif %}
|
104
|
+
}{%- unless forloop.last -%},{%- endunless -%}
|
105
|
+
{%- endfor %}
|
106
|
+
]
|
107
|
+
{%- endif %}
|
91
108
|
}{%- unless forloop.last -%},{%- endunless -%}
|
92
109
|
{%- endfor -%}
|
93
110
|
{%- endif -%}
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<div class="row">
|
19
19
|
{%- endif %}
|
20
20
|
|
21
|
-
<div class="col-md">
|
21
|
+
<div class="col-md mb-4">
|
22
22
|
<h3>{{ room.name }}</h3>
|
23
23
|
<div class="embed-responsive embed-responsive-16by9">
|
24
24
|
<iframe class="embed-responsive-item" src="{{ room.live }}" allowfullscreen></iframe>
|
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: 3.4.
|
4
|
+
version: 3.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorenz Schmid
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|