jekyll-theme-conference 3.4.0 → 3.4.1
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 +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
|