jekyll-theme-conference 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|