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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4319ed637aa4734e12cd0d9eef3a807f314e8a9e4c0ff3a79b8781e8e00ebb9
4
- data.tar.gz: d0c52c4aa84e87fb5c9892b6509db3de79a640e2e3ad005359febda835c412be
3
+ metadata.gz: e8d4fe78f7da2eba1de22ca1b58a6cd57fefd89729aae6efc5ec6e34bc61bf85
4
+ data.tar.gz: 14da05b22aec27e04c3827682c686fc07444ab42f0b38c99c0158f818f363dce
5
5
  SHA512:
6
- metadata.gz: 849e5facbe864d96c63fcdcd218ee4a4a4d8e63a9787aca58c10b1fafdf20704ce3d529caa519940ae65bd3a561ffc6127f2da243a823e676604b538e2f24c35
7
- data.tar.gz: 5bca6a3b8624e8e8f04797292cc969dd2f995fb74ffedd178dee2d59b0410cd93d1dd5479d8c64cdc99728ca7160e05c31e9537a93866093ed88bd65142e0a03
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`), and
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').selectedIndex = -1;
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').selectedIndex = room.id;
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 header = button.data('header');
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 (header) {
16
- modal.find('.modal-title').html(header);
17
- }
18
- else if (title) {
19
- modal.find('.modal-title').text(title);
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
- modal.find('.modal-description').html(footer);
28
- }
29
- else if (desc) {
30
- modal.find('.modal-footer').removeClass('d-none');
31
- modal.find('.modal-description').text(desc);
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-description').html('');
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
- <div class="modal fade" id="link-modal" tabindex="-1" role="dialog" aria-labelledby="link-modal-label" aria-hidden="true">
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">&times;</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/live_modal.html -%}
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 modal_header -%}
33
- <h3 class="font-weight-light">
34
- {%- if talk.hide -%}
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
- {%- else -%}
37
- <a class="text-reset" href="{{ talk.url | prepend: site.baseurl }}">
38
- {{ talk.name }}
39
- </a>
40
- {%- endif -%}
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 modal_header -%}
49
- <h3 class="mb-0 font-weight-light">
50
- {%- if speaker.hide -%}
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
- {%- else -%}
53
- <a class="text-reset" href="{{ speaker.url | prepend: site.baseurl }}">
54
- {{ speaker.first_name }} {{ speaker.last_name }}
55
- </a>
56
- {%- endif -%}
57
- </h3>
52
+ </a>
53
+ {%- endif -%}
58
54
  {%- endcapture -%}
59
- {%- assign modal_desc = link.name -%}
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 modal_header -%}
74
- data-header="{{ modal_header | strip_newlines | escape }}"
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-desc="{{ link.description }}"
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">&times;</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-dialog-centered modal-lg" role="document">
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.streaming | default: "Live Stream" }}
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">&times;</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-3 align-self-start" id="stream-info-color">
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="{% if link.name %}{{ link.name }}{% else %}{{ site.data.lang[site.conference.lang].live.streaming | default: "Live Stream" }}{% endif %}" data-toggle="modal" data-target="#stream-modal" data-room="" href="#">
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 }}" data-toggle="modal" data-target="#stream-modal" data-room="{{ r.name }}" href="#"
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="btn btn-outline-primary btn-lg mt-2 dropdown-toggle" href="#" role="button" id="main-dropdown{{ forloop.index0 }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
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
- {% if link.name %}
49
- {% assign link_name = link.name %}
50
- {% else %}
51
- {% assign link_name = site.data.lang[site.conference.lang].live.streaming | default: "Live Stream" %}
52
- {% endif %}
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="btn btn-outline-primary btn-lg mt-2" title="{{ link_name }}" data-toggle="modal" data-target="#stream-modal" data-room="" href="#">
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 = "btn btn-outline-primary btn-lg mt-2" %}
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 = "btn btn-outline-primary btn-lg mt-2" %}
75
+ {% assign link_styleclass = btn_default %}
69
76
  {% include partials/get_link.html %}
70
77
  {{ link_tag }}
71
78
  {{ link.name }}
@@ -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 %}
@@ -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
- // Table width
134
- min-width: 100%;
139
+ // Columns define table width
140
+ width: auto;
135
141
 
136
142
  // Column widths
137
- tr {
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
- > :nth-child(even) {
140
- width: 10px;
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
- > :nth-child(1) {
148
- width: 4.5em;
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.0.0
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: 2020-11-28 00:00:00.000000000 Z
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/live_modal.html
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.1.4
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