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 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