jekyll-theme-conference 3.0.0 → 3.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 +4 -4
- data/README.md +9 -4
- data/_includes/js/conference-live.js +18 -9
- data/_includes/js/conference-modal.js +32 -15
- data/_includes/partials/footer.html +2 -19
- data/_includes/partials/get_link.html +23 -31
- data/_includes/partials/modal_link.html +21 -0
- data/_includes/partials/{live_modal.html → modal_live.html} +4 -4
- data/_includes/partials/navbar.html +20 -1
- data/_includes/partials/show_live_button.html +5 -1
- data/_layouts/home.html +16 -9
- data/_layouts/program.html +11 -11
- data/_layouts/stream-overview.html +42 -0
- data/_sass/conference.scss +21 -11
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8d4fe78f7da2eba1de22ca1b58a6cd57fefd89729aae6efc5ec6e34bc61bf85
|
4
|
+
data.tar.gz: 14da05b22aec27e04c3827682c686fc07444ab42f0b38c99c0158f818f363dce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58c2b9524a42cc13bcc1cb91075bc35cdc223418b23bd926bd21cc849688d60f543d13fadaf4ad46ac21ff8091a798478fad9daf331ae49db1b88d6ae6b56f7f
|
7
|
+
data.tar.gz: abe66bdd148005dc8293d4604070c00bfb41203b33767ab4f05341da278b67527738800ad20880f8c39af85825549f91ae47069a6f6f029716ccae065e25a648
|
data/README.md
CHANGED
@@ -319,15 +319,16 @@ conference:
|
|
319
319
|
|
320
320
|
In order to help users navigating the program during the congress, a _Live_ indication can be shown next to talks which are currently taking place. A small JavaScript functions keeps the site automatically up-to-date (without the need to refresh) showing the indication as soon as the talk has started and hiding it once it is over (according to the timetable indicated in the `_data/program.yml` file).
|
321
321
|
|
322
|
-
This can be further extended if some of the talks have an associated live stream: Upon clicking one of the live indications a modal will open containing the corresponding live stream embedded. The URL to the live stream has to be set via `live` property in each room (see the _Content_ > _Room_ section below).
|
322
|
+
This can be further extended if some of the talks have an associated live stream: Upon clicking one of the live indications a modal will open containing the corresponding live stream embedded. The URL to the live stream has to be set via `live` property in each room (see the _Content_ > _Room_ section below). Instead of opening the modal an external link can also be used.
|
323
323
|
|
324
324
|
In order to activate the functionality, each day in the `program.yml` file must contain a `date` property (see section _Content_ > _Schedule / Program_ below) and the `live` property has to be set in the configuration file containing
|
325
325
|
|
326
326
|
- how long a pause between two consecutive talks has to be for the live indication to pause (`time_stop`),
|
327
327
|
- optionally if streaming is enabled (`streaming`) with indications
|
328
328
|
+ how many minutes the stream goes active before a talk (`time_prepend`),
|
329
|
-
+ how many minutes the stream stays active after a talk (`time_extend`),
|
330
|
-
+ how long a pause between two consecutive talks has to be for the stream to pause (`time_pause`),
|
329
|
+
+ how many minutes the stream stays active after a talk (`time_extend`),
|
330
|
+
+ how long a pause between two consecutive talks has to be for the stream to pause (`time_pause`), and
|
331
|
+
+ optionally an external (absolute) link to which the user will be redirected instead of opening the modal (`external`),
|
331
332
|
- optionally a demo mode setting, whereby the JavaScript function cycles through the entire program in five minutes for demonstration purposes (`demo: true`, default: `false`).
|
332
333
|
|
333
334
|
```yaml
|
@@ -552,7 +553,7 @@ Links are used at different location throughout the theme: They can either be us
|
|
552
553
|
Additionally, a navigation bar or main landing page link can also have the following properties:
|
553
554
|
|
554
555
|
- `menu` containing another list of links. This creates a dropdown menu of multiple sublinks. The sublinks have the same properties as regular links, or
|
555
|
-
- `live` making the link only visible during the conference and adds a live indication. The `name` property can be omitted. If streaming is enabled and any URL property is omitted, a click on the link will open the streaming modal (see section _Live Indications_ above).
|
556
|
+
- `live` making the link only visible during the conference and adds a live indication. The `name` property can be omitted. Using the optional `name_inactive` property shows a placeholder text while the conference is **not** live. If streaming is enabled and any URL property is omitted, a click on the link will open the streaming modal (see section _Live Indications_ above).
|
556
557
|
|
557
558
|
Using the `file:` indicator, the relative address is automatically set as well as the icon. Using the `video:` indicator, the link is automatically configured to open in an iframe with a corresponding title and the icon is set.
|
558
559
|
|
@@ -587,6 +588,10 @@ If you choose a different location for the overview pages you must:
|
|
587
588
|
|
588
589
|
The `location` layout contains a map container (if not disabled, see section _Location Settings_ above) which can be customized. See the section above for further details.
|
589
590
|
|
591
|
+
### Live Stream Overview
|
592
|
+
|
593
|
+
The `stream-overview` layout contains all active streams on a single page (see the section _Live Indications & Streaming_ above).
|
594
|
+
|
590
595
|
### Additional Pages
|
591
596
|
|
592
597
|
Additional static pages can easily be added as files and linked to via navigation bar or main landing page (see above on how to).
|
@@ -13,6 +13,8 @@ window.conference.live = (function() {
|
|
13
13
|
{%- include partials/get_talk_timestamp.html -%}
|
14
14
|
{%- assign conf_end = timestamp_end -%}
|
15
15
|
|
16
|
+
let data;
|
17
|
+
|
16
18
|
let confStart = {{ conf_start }};
|
17
19
|
let confEnd = {{ conf_end }};
|
18
20
|
let confDur = confEnd - confStart;
|
@@ -32,6 +34,16 @@ window.conference.live = (function() {
|
|
32
34
|
let streamVideoTimer;
|
33
35
|
let streamInfoTimer;
|
34
36
|
|
37
|
+
let loadData = function () {
|
38
|
+
$.getJSON('{{ site.baseurl }}/assets/js/data.json', function(json) {
|
39
|
+
data = json;
|
40
|
+
});
|
41
|
+
};
|
42
|
+
|
43
|
+
let getData = function () {
|
44
|
+
return data;
|
45
|
+
};
|
46
|
+
|
35
47
|
let mod = function (n, m) {
|
36
48
|
return ((n % m) + m) % m;
|
37
49
|
};
|
@@ -46,7 +58,7 @@ window.conference.live = (function() {
|
|
46
58
|
|
47
59
|
let timeCycle = function () {
|
48
60
|
let actTime = timeNow();
|
49
|
-
let relTime = mod(actTime, durDemo + 2*durPause) / durDemo;
|
61
|
+
let relTime = mod(actTime, durDemo + 2*durPause) / (durDemo + 2*durPause);
|
50
62
|
let cycleTime = mod((demoEnd - demoStart) * relTime - timeOffset, (demoEnd - demoStart)) + demoStart;
|
51
63
|
return cycleTime;
|
52
64
|
};
|
@@ -312,7 +324,6 @@ window.conference.live = (function() {
|
|
312
324
|
let streamExtend = {{ site.conference.live.streaming.time_extend | default: 5 }}; // in minutes
|
313
325
|
|
314
326
|
let streamModal;
|
315
|
-
let data;
|
316
327
|
|
317
328
|
let getRoom = function (roomName) {
|
318
329
|
if (roomName in data.rooms) {
|
@@ -485,7 +496,7 @@ window.conference.live = (function() {
|
|
485
496
|
|
486
497
|
let setStream = function (roomName) {
|
487
498
|
streamModal.find('.modal-footer .btn').removeClass('active');
|
488
|
-
streamModal.find('#stream-select').
|
499
|
+
streamModal.find('#stream-select').val(0);
|
489
500
|
|
490
501
|
// Recover room name in case of empty default
|
491
502
|
let room = getRoom(roomName);
|
@@ -495,7 +506,7 @@ window.conference.live = (function() {
|
|
495
506
|
setStreamInfo(roomName);
|
496
507
|
|
497
508
|
streamModal.find('#stream-button' + room.id).addClass('active');
|
498
|
-
streamModal.find('#stream-select').
|
509
|
+
streamModal.find('#stream-select').val(room.id);
|
499
510
|
};
|
500
511
|
|
501
512
|
let updateStream = function () {
|
@@ -552,14 +563,10 @@ window.conference.live = (function() {
|
|
552
563
|
let roomName = $(this).children('option:selected').text();
|
553
564
|
setStream(roomName);
|
554
565
|
});
|
555
|
-
|
556
|
-
// load data
|
557
|
-
$.getJSON('{{ site.baseurl }}/assets/js/data.json', function(json) {
|
558
|
-
data = json;
|
559
|
-
});
|
560
566
|
};
|
561
567
|
|
562
568
|
let setup = function () {
|
569
|
+
loadData();
|
563
570
|
startUpdateLive();
|
564
571
|
setupStream();
|
565
572
|
};
|
@@ -582,6 +589,7 @@ window.conference.live = (function() {
|
|
582
589
|
{%- else -%}
|
583
590
|
|
584
591
|
let setup = function () {
|
592
|
+
loadData();
|
585
593
|
startUpdateLive();
|
586
594
|
};
|
587
595
|
|
@@ -601,6 +609,7 @@ window.conference.live = (function() {
|
|
601
609
|
|
602
610
|
return {
|
603
611
|
init: setup,
|
612
|
+
getData: getData,
|
604
613
|
|
605
614
|
pauseTime: pauseTime,
|
606
615
|
continueTime: continueTime,
|
@@ -4,31 +4,47 @@ window.conference.modal = (function () {
|
|
4
4
|
let button = $(event.relatedTarget);
|
5
5
|
|
6
6
|
let href = button.data('href');
|
7
|
-
let
|
7
|
+
let format = button.data('format');
|
8
8
|
let title = button.data('title');
|
9
|
+
let subtitle = button.data('subtitle');
|
9
10
|
let footer = button.data('footer');
|
10
|
-
let desc = button.data('desc');
|
11
11
|
|
12
12
|
let modal = $(el);
|
13
13
|
modal.find('iframe').attr('src', href);
|
14
14
|
|
15
|
-
if (
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
if (title) {
|
16
|
+
if (format == 'html') {
|
17
|
+
modal.find('.modal-title h3').html(title);
|
18
|
+
if (subtitle) {
|
19
|
+
modal.find('.modal-title h5').html(subtitle).removeClass('d-none');
|
20
|
+
}
|
21
|
+
else {
|
22
|
+
modal.find('.modal-title h5').text('').addClass('d-none');
|
23
|
+
}
|
24
|
+
}
|
25
|
+
else {
|
26
|
+
modal.find('.modal-title h3').text(title);
|
27
|
+
if (subtitle) {
|
28
|
+
modal.find('.modal-title h5').text(subtitle).removeClass('d-none');
|
29
|
+
}
|
30
|
+
else {
|
31
|
+
modal.find('.modal-title h5').text('').addClass('d-none');
|
32
|
+
}
|
33
|
+
}
|
20
34
|
}
|
21
35
|
else {
|
22
|
-
modal.find('.modal-title').text('');
|
36
|
+
modal.find('.modal-title h3').text('');
|
37
|
+
modal.find('.modal-title h5').text('').addClass('d-none');
|
23
38
|
}
|
24
39
|
|
25
40
|
if (footer) {
|
26
41
|
modal.find('.modal-footer').removeClass('d-none');
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
42
|
+
if (format == 'html') {
|
43
|
+
modal.find('.modal-footer p').html(footer);
|
44
|
+
}
|
45
|
+
else {
|
46
|
+
modal.find('.modal-footer p').text(footer);
|
47
|
+
}
|
32
48
|
}
|
33
49
|
else {
|
34
50
|
modal.find('.modal-footer').addClass('d-none');
|
@@ -38,9 +54,10 @@ window.conference.modal = (function () {
|
|
38
54
|
let hide = function (el, event) {
|
39
55
|
let modal = $(el);
|
40
56
|
|
41
|
-
modal.find('.modal-title').text('');
|
57
|
+
modal.find('.modal-title h3').text('');
|
58
|
+
modal.find('.modal-title h5').text('').addClass('d-none');
|
42
59
|
modal.find('iframe').attr('src', '');
|
43
|
-
modal.find('.modal-
|
60
|
+
modal.find('.modal-footer p').html('');
|
44
61
|
};
|
45
62
|
|
46
63
|
let init = function() {
|
@@ -2,27 +2,10 @@
|
|
2
2
|
</main>
|
3
3
|
<footer class="container"></footer>
|
4
4
|
|
5
|
-
|
6
|
-
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
7
|
-
<div class="modal-content">
|
8
|
-
<div class="modal-header">
|
9
|
-
<h5 class="modal-title" id="link-modal-label"></h5>
|
10
|
-
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
11
|
-
<span aria-hidden="true">×</span>
|
12
|
-
</button>
|
13
|
-
</div>
|
14
|
-
<div class="modal-body embed-responsive embed-responsive-16by9">
|
15
|
-
<iframe class="embed-responsive-item" src="" allowfullscreen></iframe>
|
16
|
-
</div>
|
17
|
-
<div class="modal-footer justify-content-start">
|
18
|
-
<p class="modal-description"></p>
|
19
|
-
</div>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
</div>
|
5
|
+
{%- include partials/modal_link.html -%}
|
23
6
|
|
24
7
|
{%- if site.conference.live.streaming -%}
|
25
|
-
{%- include partials/
|
8
|
+
{%- include partials/modal_live.html -%}
|
26
9
|
{%- endif -%}
|
27
10
|
|
28
11
|
<!-- Append build time to avoid caching of live program embedded in JavaScript file -->
|
@@ -29,34 +29,30 @@
|
|
29
29
|
{%- assign link_iframe = true -%}
|
30
30
|
|
31
31
|
{%- if talk -%}
|
32
|
-
{%- capture
|
33
|
-
|
34
|
-
{
|
32
|
+
{%- capture modal_title -%}
|
33
|
+
{%- if talk.hide -%}
|
34
|
+
{{ talk.name }}
|
35
|
+
{%- else -%}
|
36
|
+
<a class="text-reset" href="{{ talk.url | prepend: site.baseurl }}">
|
35
37
|
{{ talk.name }}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
</h3>
|
42
|
-
<p class="mb-0 font-weight-light">
|
43
|
-
{%- include partials/list_speakers.html -%}
|
44
|
-
</p>
|
38
|
+
</a>
|
39
|
+
{%- endif -%}
|
40
|
+
{%- endcapture -%}
|
41
|
+
{%- capture modal_subtitle -%}
|
42
|
+
{%- include partials/list_speakers.html -%}
|
45
43
|
{%- endcapture -%}
|
46
44
|
|
47
45
|
{%- elsif speaker -%}
|
48
|
-
{%- capture
|
49
|
-
|
50
|
-
{
|
46
|
+
{%- capture modal_title -%}
|
47
|
+
{%- if speaker.hide -%}
|
48
|
+
{{ speaker.first_name }} {{ speaker.last_name }}
|
49
|
+
{%- else -%}
|
50
|
+
<a class="text-reset" href="{{ speaker.url | prepend: site.baseurl }}">
|
51
51
|
{{ speaker.first_name }} {{ speaker.last_name }}
|
52
|
-
|
53
|
-
|
54
|
-
{{ speaker.first_name }} {{ speaker.last_name }}
|
55
|
-
</a>
|
56
|
-
{%- endif -%}
|
57
|
-
</h3>
|
52
|
+
</a>
|
53
|
+
{%- endif -%}
|
58
54
|
{%- endcapture -%}
|
59
|
-
{%- assign
|
55
|
+
{%- assign modal_footer = link.name -%}
|
60
56
|
|
61
57
|
{%- endif -%}
|
62
58
|
|
@@ -70,18 +66,14 @@
|
|
70
66
|
<a class="disabled{% if link_styleclass %} {{ link_styleclass }}{% endif %}" href="#">
|
71
67
|
|
72
68
|
{%- elsif link_iframe -%}
|
73
|
-
<a {% if link_styleclass %}class="{{ link_styleclass }}"{% endif %} title="{{ link.name }}" data-toggle="modal" data-target="#link-modal" data-href="{{ link_href }}" href="#" {% if
|
74
|
-
data-
|
75
|
-
{%- elsif modal_title -%}
|
76
|
-
data-title="{{ modal_title }}"
|
69
|
+
<a {% if link_styleclass %}class="{{ link_styleclass }}"{% endif %} title="{{ link.name }}" data-toggle="modal" data-target="#link-modal" data-href="{{ link_href }}" href="#" {% if modal_title -%}
|
70
|
+
data-format='html' data-title="{{ modal_title | strip_newlines | escape }}" {%- if modal_subtitle %} data-subtitle="{{ modal_subtitle | strip_newlines | escape }}"{%- endif -%}
|
77
71
|
{%- elsif link.name -%}
|
78
|
-
data-title="{{ link.name }}"
|
72
|
+
data-format='text' data-title="{{ link.name }}"
|
79
73
|
{%- endif %} {% if modal_footer -%}
|
80
|
-
data-footer="{{ modal_footer | strip_newlines | escape }}"
|
81
|
-
{%- elsif modal_desc -%}
|
82
|
-
data-desc="{{ modal_desc }}"
|
74
|
+
data-format='html' data-footer="{{ modal_footer | strip_newlines | escape }}"
|
83
75
|
{%- elsif link.description -%}
|
84
|
-
data-
|
76
|
+
data-format='text' data-footer="{{ link.description }}"
|
85
77
|
{%- endif %}>
|
86
78
|
|
87
79
|
{%- else -%}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<div class="modal fade" id="link-modal" tabindex="-1" role="dialog" aria-labelledby="link-modal-label" aria-hidden="true">
|
2
|
+
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<div class="modal-title" id="link-modal-label">
|
6
|
+
<h3 class="mb-2 font-weight-light"></h3>
|
7
|
+
<h5 class="mb-0 font-weight-light"></h5>
|
8
|
+
</div>
|
9
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
10
|
+
<span aria-hidden="true">×</span>
|
11
|
+
</button>
|
12
|
+
</div>
|
13
|
+
<div class="modal-body embed-responsive embed-responsive-16by9">
|
14
|
+
<iframe class="embed-responsive-item" src="" allowfullscreen></iframe>
|
15
|
+
</div>
|
16
|
+
<div class="modal-footer justify-content-start">
|
17
|
+
<p></p>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<div class="modal fade" id="stream-modal" tabindex="-1" role="dialog" aria-labelledby="link-modal-label" aria-hidden="true">
|
2
|
-
<div class="modal-dialog modal-
|
2
|
+
<div class="modal-dialog modal-lg" role="document">
|
3
3
|
<div class="modal-content">
|
4
4
|
|
5
5
|
<div class="modal-header">
|
6
6
|
<h5 class="modal-title">
|
7
|
-
{{ site.data.lang[site.conference.lang].live.
|
7
|
+
{{ site.data.lang[site.conference.lang].live.stream | default: "Live Stream" }}
|
8
8
|
</h5>
|
9
9
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
10
10
|
<span aria-hidden="true">×</span>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
<div class="modal-footer flex-column justify-content-start d-none live-past" id="stream-info" data-time="">
|
22
22
|
<div class="my-0 small align-self-start live-time" id="stream-info-time" data-time=""></div>
|
23
|
-
<div class="pl-
|
23
|
+
<div class="pl-2 align-self-start" id="stream-info-color">
|
24
24
|
<p class="mb-0">
|
25
25
|
<a class="text-reset" href="#" id="stream-info-talk"></a>
|
26
26
|
</p>
|
@@ -37,7 +37,7 @@
|
|
37
37
|
<div class="form-group w-100 d-block d-sm-none">
|
38
38
|
<select class="form-control" id="stream-select">
|
39
39
|
{%- for room in site.rooms -%}
|
40
|
-
<option {% unless room.live %}disabled{% endunless %}>{{ room.name }}</option>
|
40
|
+
<option value="{{ forloop.index }}" {% unless room.live %}disabled{% endunless %}>{{ room.name }}</option>
|
41
41
|
{%- endfor %}
|
42
42
|
</select>
|
43
43
|
</div>
|
@@ -31,9 +31,28 @@
|
|
31
31
|
{%- elsif link.live -%}
|
32
32
|
{%- include partials/get_live_timestamps.html -%}
|
33
33
|
|
34
|
+
{%- if link.name_inactive -%}
|
35
|
+
<li class="nav-item live-hide" data-start="{{ live_starts }}" data-end="{{ live_ends }}">
|
36
|
+
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">
|
37
|
+
{{ link.name_inactive }}
|
38
|
+
</a>
|
39
|
+
</li>
|
40
|
+
{%- endif -%}
|
41
|
+
|
34
42
|
<li class="nav-item live-show d-none" data-start="{{ live_starts }}" data-end="{{ live_ends }}">
|
35
43
|
{%- if site.conference.live.streaming %}
|
36
|
-
<a class="nav-link" title="
|
44
|
+
<a class="nav-link" title="
|
45
|
+
{%- if link.name -%}
|
46
|
+
{{- link.name -}}
|
47
|
+
{%- else -%}
|
48
|
+
{{- site.data.lang[site.conference.lang].live.stream | default: "Live Stream" -}}
|
49
|
+
{%- endif -%}
|
50
|
+
" {% if site.conference.live.streaming.external -%}
|
51
|
+
href="{{ site.conference.live.streaming.external }}"
|
52
|
+
{%- else -%}
|
53
|
+
data-toggle="modal" data-target="#stream-modal" data-room="{{ r.name }}" href="#"
|
54
|
+
{%- endif -%}
|
55
|
+
>
|
37
56
|
{%- else %}
|
38
57
|
{%- assign link_styleclass = "nav-link" -%}
|
39
58
|
{%- include partials/get_link.html %}
|
@@ -2,7 +2,11 @@
|
|
2
2
|
{%- include partials/get_talk_timestamp.html -%}
|
3
3
|
|
4
4
|
{%- if site.conference.live.streaming -%}
|
5
|
-
<a title="{{ link.name }}"
|
5
|
+
<a title="{{ link.name }}" {% if site.conference.live.streaming.external -%}
|
6
|
+
href="{{ site.conference.live.streaming.external }}"
|
7
|
+
{%- else -%}
|
8
|
+
data-toggle="modal" data-target="#stream-modal" data-room="{{ r.name }}" href="#"
|
9
|
+
{%- endif -%}
|
6
10
|
{%- else -%}
|
7
11
|
<span
|
8
12
|
{%- endif %} class="live-show live-button badge badge-dark font-weight-normal text-center d-none {{ live_button_styleclass }}" data-start="{{ timestamp_start }}" data-end="{{ timestamp_end }}">
|
data/_layouts/home.html
CHANGED
@@ -23,11 +23,12 @@
|
|
23
23
|
|
24
24
|
{% if site.conference.main.links %}
|
25
25
|
<div class="lead d-print-none">
|
26
|
+
{% assign btn_default = 'btn btn-outline-primary btn-lg mt-2 ml-1' %}
|
26
27
|
{% for link in site.conference.main.links %}
|
27
28
|
|
28
29
|
{% if link.menu %}
|
29
30
|
<div class="dropdown d-inline">
|
30
|
-
<a class="
|
31
|
+
<a class="{{ btn_default }} dropdown-toggle" href="#" role="button" id="main-dropdown{{ forloop.index0 }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
31
32
|
{{ link.name }}
|
32
33
|
</a>
|
33
34
|
<div class="dropdown-menu" aria-labelledby="main-dropdown{{ forloop.index0 }}">
|
@@ -45,17 +46,23 @@
|
|
45
46
|
{% elsif link.live %}
|
46
47
|
{%- include partials/get_live_timestamps.html -%}
|
47
48
|
|
48
|
-
{
|
49
|
-
{
|
50
|
-
{
|
51
|
-
{
|
52
|
-
{
|
49
|
+
{%- if link.name -%}
|
50
|
+
{%- assign link_name = link.name -%}
|
51
|
+
{%- else -%}
|
52
|
+
{%- assign link_name = site.data.lang[site.conference.lang].live.stream | default: "Live Stream" -%}
|
53
|
+
{%- endif -%}
|
54
|
+
|
55
|
+
{%- if link.name_inactive -%}
|
56
|
+
<span class="live-hide {{ btn_default }} disabled" data-start="{{ live_starts }}" data-end="{{ live_ends }}">
|
57
|
+
{{ link.name_inactive }}
|
58
|
+
</span>
|
59
|
+
{%- endif -%}
|
53
60
|
|
54
61
|
<span class="live-show d-none" data-start="{{ live_starts }}" data-end="{{ live_ends }}">
|
55
62
|
{% if site.conference.live.streaming %}
|
56
|
-
<a class="
|
63
|
+
<a class="{{ btn_default }}" title="{{ link_name }}" data-toggle="modal" data-target="#stream-modal" data-room="" href="#">
|
57
64
|
{% else %}
|
58
|
-
{% assign link_styleclass = "
|
65
|
+
{% assign link_styleclass = "{{ btn_default }}" %}
|
59
66
|
{% include partials/get_link.html %}
|
60
67
|
{{ link_tag }}
|
61
68
|
{% endif %}
|
@@ -65,7 +72,7 @@
|
|
65
72
|
</span>
|
66
73
|
|
67
74
|
{% else %}
|
68
|
-
{% assign link_styleclass =
|
75
|
+
{% assign link_styleclass = btn_default %}
|
69
76
|
{% include partials/get_link.html %}
|
70
77
|
{{ link_tag }}
|
71
78
|
{{ link.name }}
|
data/_layouts/program.html
CHANGED
@@ -30,11 +30,11 @@
|
|
30
30
|
{%- endif %}
|
31
31
|
|
32
32
|
<div class="sticky-top syncscroll overflow-hidden" name="sync-table">
|
33
|
-
<table class="table mb-0">
|
33
|
+
<table class="table mb-0 mx-auto">
|
34
34
|
<thead>
|
35
35
|
<tr>
|
36
|
-
<th scope="col" class="text-right">#<span class="invisible">I0</span></th>
|
37
|
-
<th class="p-0" scope="col"></th>
|
36
|
+
<th scope="col" class="col-title text-right">#<span class="invisible">I0</span></th>
|
37
|
+
<th class="col-space p-0" scope="col"></th>
|
38
38
|
{%- assign nbr_rooms = d.rooms | size -%}
|
39
39
|
{%- for r in d.rooms -%}
|
40
40
|
{%- assign room = site.rooms | where: 'name', r.name | first %}
|
@@ -48,7 +48,7 @@
|
|
48
48
|
{%- endif -%}
|
49
49
|
</th>
|
50
50
|
{%- unless forloop.last %}
|
51
|
-
<th class="p-0" scope="col"></th>
|
51
|
+
<th class="col-space p-0" scope="col"></th>
|
52
52
|
{%- endunless -%}
|
53
53
|
{%- endfor %}
|
54
54
|
</tr>
|
@@ -57,7 +57,7 @@
|
|
57
57
|
</div>
|
58
58
|
|
59
59
|
<div class="syncscroll overflow-y-hidden" name="sync-table">
|
60
|
-
<table class="table">
|
60
|
+
<table class="table mx-auto">
|
61
61
|
<tbody>
|
62
62
|
{%- include partials/get_day_time.html -%}
|
63
63
|
|
@@ -85,17 +85,17 @@
|
|
85
85
|
<tr>
|
86
86
|
|
87
87
|
{%- if current_min == 0 -%}
|
88
|
-
<th scope="row" class="text-right" style="z-index: {{ z-index-max }}">
|
88
|
+
<th scope="row" class="col-title text-right" style="z-index: {{ z-index-max }}">
|
89
89
|
{{- current_time -}}
|
90
90
|
</th>
|
91
91
|
{%- elsif site.conference.program.show_alltimes -%}
|
92
|
-
<th scope="row" class="text-right text-muted font-weight-normal" style="z-index: {{ z-index-max }}">
|
92
|
+
<th scope="row" class="col-title text-right text-muted font-weight-normal" style="z-index: {{ z-index-max }}">
|
93
93
|
:{{ current_min }}
|
94
94
|
</th>
|
95
95
|
{%- else -%}
|
96
|
-
<th scope="row" style="z-index: {{ z-index-max }}"></th>
|
96
|
+
<th scope="row" class="col-title" style="z-index: {{ z-index-max }}"></th>
|
97
97
|
{%- endif %}
|
98
|
-
<td class="p-0"></td>
|
98
|
+
<td class="col-space p-0"></td>
|
99
99
|
|
100
100
|
{%- for r in d.rooms -%}
|
101
101
|
{%- assign room = site.rooms | where: 'name', r.name | first -%}
|
@@ -135,7 +135,7 @@
|
|
135
135
|
|
136
136
|
{%- assign talk_nbr_steps = talk_duration_min | divided_by: site.conference.program.time_steps -%}
|
137
137
|
{%- include partials/get_main_category.html -%}
|
138
|
-
<td rowspan="{{ talk_nbr_steps }}" class="alert alert-{{ main_cat_color }} shadow-sm" style="z-index: {{ z-index-max | minus: i }}">
|
138
|
+
<td rowspan="{{ talk_nbr_steps }}" class="alert alert-{{ main_cat_color }} shadow-sm overflow-hidden" style="z-index: {{ z-index-max | minus: i }}">
|
139
139
|
|
140
140
|
{%- assign live_button_styleclass = "mb-2" %}
|
141
141
|
{%- include partials/show_live_button.html %}
|
@@ -161,7 +161,7 @@
|
|
161
161
|
{%- endunless -%}
|
162
162
|
|
163
163
|
{%- if forloop.last != true %}
|
164
|
-
<td class="p-0"></td>
|
164
|
+
<td class="col-space p-0"></td>
|
165
165
|
{%- endif -%}
|
166
166
|
|
167
167
|
{%- endfor %}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
{% include partials/header.html %}
|
2
|
+
|
3
|
+
<h1 class="display-5 mb-4">
|
4
|
+
{% if page.title %}
|
5
|
+
{{ page.title }}
|
6
|
+
{% else %}
|
7
|
+
{{ site.data.lang[site.conference.lang].live.stream | default: "Live Streams" }}
|
8
|
+
{% endif %}
|
9
|
+
</h1>
|
10
|
+
|
11
|
+
{{ content }}
|
12
|
+
|
13
|
+
{%- assign nbr_streams = 0 -%}
|
14
|
+
{%- for room in site.rooms -%}
|
15
|
+
{%- if room.live -%}
|
16
|
+
{%- assign mod_nbr_streams = nbr_streams | modulo: 2 -%}
|
17
|
+
{%- if mod_nbr_streams == 0 %}
|
18
|
+
<div class="row">
|
19
|
+
{%- endif %}
|
20
|
+
|
21
|
+
<div class="col-md">
|
22
|
+
<h3>{{ room.name }}</h3>
|
23
|
+
<div class="embed-responsive embed-responsive-16by9">
|
24
|
+
<iframe class="embed-responsive-item" src="{{ room.live }}" allowfullscreen></iframe>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
{%- if mod_nbr_streams == 1 %}
|
29
|
+
</div>
|
30
|
+
{%- endif -%}
|
31
|
+
|
32
|
+
{%- assign nbr_streams = nbr_streams | plus: 1 -%}
|
33
|
+
{%- endif -%}
|
34
|
+
{%- endfor %}
|
35
|
+
|
36
|
+
{% assign mod_nbr_streams = nbr_streams | modulo: 2 %}
|
37
|
+
{%- if mod_nbr_streams == 1 %}
|
38
|
+
<div class="col-md"></div>
|
39
|
+
</div>
|
40
|
+
{%- endif %}
|
41
|
+
|
42
|
+
{% include partials/footer.html %}
|
data/_sass/conference.scss
CHANGED
@@ -79,6 +79,12 @@ ul.btn-group {
|
|
79
79
|
|
80
80
|
// General
|
81
81
|
|
82
|
+
// Keep images in container
|
83
|
+
main.container img {
|
84
|
+
max-width: 100%;
|
85
|
+
height: auto;
|
86
|
+
}
|
87
|
+
|
82
88
|
// No bottom margin on info-bar
|
83
89
|
.alert > p:last-of-type {
|
84
90
|
margin-bottom: 0;
|
@@ -130,22 +136,26 @@ ul.btn-group {
|
|
130
136
|
// First row defines width for all columns
|
131
137
|
table-layout: fixed;
|
132
138
|
|
133
|
-
//
|
134
|
-
|
139
|
+
// Columns define table width
|
140
|
+
width: auto;
|
135
141
|
|
136
142
|
// Column widths
|
137
|
-
|
143
|
+
th, td {
|
144
|
+
// Total available container width is 1110px
|
145
|
+
|
146
|
+
// Width of columns with content (default)
|
147
|
+
width: 245px;
|
148
|
+
min-width: 245px;
|
149
|
+
|
138
150
|
// Spacing between columns
|
139
|
-
|
140
|
-
width:
|
141
|
-
|
142
|
-
// Width of columns with content
|
143
|
-
> :nth-child(odd) {
|
144
|
-
width: 180px;
|
151
|
+
&.col-space {
|
152
|
+
width: 15px;
|
153
|
+
min-width: 15px;
|
145
154
|
}
|
146
155
|
// Width of first column containing timestamps
|
147
|
-
|
148
|
-
width:
|
156
|
+
&.col-title {
|
157
|
+
width: 70px;
|
158
|
+
min-width: 70px;
|
149
159
|
}
|
150
160
|
}
|
151
161
|
}
|
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
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorenz Schmid
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -90,7 +90,8 @@ files:
|
|
90
90
|
- _includes/partials/list_categories.html
|
91
91
|
- _includes/partials/list_speakers.html
|
92
92
|
- _includes/partials/list_sub_categories.html
|
93
|
-
- _includes/partials/
|
93
|
+
- _includes/partials/modal_link.html
|
94
|
+
- _includes/partials/modal_live.html
|
94
95
|
- _includes/partials/navbar.html
|
95
96
|
- _includes/partials/navbar_rooms.html
|
96
97
|
- _includes/partials/show_live_button.html
|
@@ -107,6 +108,7 @@ files:
|
|
107
108
|
- _layouts/room.html
|
108
109
|
- _layouts/speaker-overview.html
|
109
110
|
- _layouts/speaker.html
|
111
|
+
- _layouts/stream-overview.html
|
110
112
|
- _layouts/talk-overview.html
|
111
113
|
- _layouts/talk.html
|
112
114
|
- _sass/bootstrap/_alert.scss
|
@@ -277,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
279
|
- !ruby/object:Gem::Version
|
278
280
|
version: '0'
|
279
281
|
requirements: []
|
280
|
-
rubygems_version: 3.
|
282
|
+
rubygems_version: 3.2.3
|
281
283
|
signing_key:
|
282
284
|
specification_version: 4
|
283
285
|
summary: Jekyll template for a conference website containing program, speaker, talks
|