jekyll-theme-conference 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85035d6385b1339b58d26c9aa7656bb63c390e82e59b995a954b032bda281b61
4
- data.tar.gz: 6cde36017cc9d2b667ea921edcb6ed8938fea8cf63b87169f2ea8399b0e42b53
3
+ metadata.gz: 7a6617ea192ab16d014da7430f23276860d7ecce37cdd591815103bb086efb65
4
+ data.tar.gz: a31e631388e20578008dcef761e416a5a53c53166b068ecb410ee0f75b1f9196
5
5
  SHA512:
6
- metadata.gz: 6ee86daa817de1f8ce650b73c8a1116a28293307da1cfe10abd775331251d88af1a33e6dbc425011cf5d4358e89978e2601cf5eaf35c22874222715f170c0a88
7
- data.tar.gz: 93606208e131a2d476732a828248cbdc7d58cf28ed0e6e678a585d677e18b6939721a6ca099a1f7805e0b431e2585989168aed5e45f009f7d35780b498d615ba
6
+ metadata.gz: ef931eb98d10bc467358f2948e76b15ac8d11a8abe1d7528688a5f672fcb8127a31cbe46165f41b355d58d186ca83a5d010d5b5cb0abfb41f685296c908421ae
7
+ data.tar.gz: a3ef7ee1df36b5280534f5819d10c21c2447f9430650e89d0aa4923243656d51d4e2483c888adfe2e30cfb18b0e0d40584add7dc4c3449ba997d604d1f6b9684
data/README.md CHANGED
@@ -89,6 +89,10 @@ The different talks, speakers and rooms are stored as a collection of files. Eac
89
89
 
90
90
  The actual schedule defining when and in which room a talk takes place is stored as a [YAML data file](https://jekyllrb.com/docs/datafiles/) under `_data/program.yml`. For further details about it see below in the section _Content_.
91
91
 
92
+ :warning: Please note that the generated website can be quite large containing many unnecessary whitespaces. It is recommended to minimize the generated output files before uploading them to a server (e.g. with [minify](https://github.com/tdewolff/minify)).
93
+
94
+ ### Jump Start
95
+
92
96
  In order to be up and running simply use the default content of this repository as an initial base for your new website. After having setup a new Jekyll website copy the following files and folders into the website's folder:
93
97
 
94
98
  - `_config.example.yml` -> `_config.yml`
@@ -102,11 +106,23 @@ In order to be up and running simply use the default content of this repository
102
106
  - `speakers/`
103
107
  - `talks/`
104
108
 
105
- There exists a Python file in this repository, `create_entries.py`, which can be used to import content from a CSV table and generate the different talk, speakers and room files automatically based on it. Just open your terminal and type `python create_entries.py --help` to show the help and get started.
109
+ ### Automatic Import
110
+
111
+ There exists a Python file in this repository, `create_entries.py`, which can be used to import content from a [frab](https://github.com/frab/frab/wiki/Manual#introduction) compatible JSON file or a CSV table and generate the different talk, speakers and room files automatically based on it. Just open your terminal and type `python create_entries.py --help` to show the help and get started.
112
+
113
+ ### Automatic Build
114
+
115
+ In case you do not want to install the entire Ruby/Jekyll toolchain on your machine you can make use of [GitHub Actions](https://github.com/features/actions), Github's continuous integration platform. This repository contains an example Github Action configuration file which automatically builds and minimizes the website upon adding a new tag. It then attaches the generated website as package to a release for easy downloading. Simply copy the following file to your repository and adapt it to your needs:
106
116
 
107
- In case you do not want to install the entire Ruby/Jekyll toolchain on your machine you can make use of [GitHub Actions](https://github.com/features/actions), Github's continuous integration platform. This repository contains an example Github Action configuration file which automatically builds the website upon adding a new tag. It then attaches the generated website as package to a release for easy downloading. Simply copy the following file to your repository and adapt it to your needs:
117
+ - `workflow-example.yml` -> `.github/workflows/main.yml`
108
118
 
109
- - `workflows.example.yml` -> `.github/workflows.main.yml`
119
+ Hidden rooms, speakers, or talks are automatically generated in way containing no content. In order to remove these empty files simply add a file called `delete_hidden.sh` to the root with the following content. It will automatically called by the Github Action workflow to delete the files.
120
+
121
+ ```markdown
122
+ ---
123
+ layout: delete_hidden
124
+ ---
125
+ ```
110
126
 
111
127
 
112
128
  ## Configuration
@@ -124,6 +140,8 @@ conference:
124
140
  show_errors: false
125
141
  ```
126
142
 
143
+ :warning: Please be sure to disable this parameter for your production system.
144
+
127
145
  ### Collection URLs
128
146
 
129
147
  The three required collections containing the files for the talks, speakers and rooms have to be specified in the `_config.yml` file. The first block declares them and sets the URL under which they will later be accessed. The second block defines the default layout for each of the collection.
@@ -1,4 +1,4 @@
1
- window.conference.live = (function() {
1
+ window.conference.live = (function() {
2
2
  {%- include partials/get_conf_time.html -%}
3
3
  {%- assign time_start = conf_start -%}
4
4
  {%- assign time_end = conf_end -%}
@@ -6,6 +6,7 @@ window.conference.live = (function() {
6
6
 
7
7
  let confStart = {{ timestamp_start }};
8
8
  let confEnd = {{ timestamp_end }};
9
+ let confDur = confEnd - confStart;
9
10
 
10
11
  let freezeTime = false;
11
12
  let timeFrozen = 0;
@@ -15,85 +16,126 @@ window.conference.live = (function() {
15
16
  let durDemo = 5*60; // in seconds
16
17
  let durPause = 10; // in seconds
17
18
 
19
+ let demoStart = confStart - confDur/durDemo*durPause;
20
+ let demoEnd = confEnd + confDur/durDemo*durPause;
21
+
18
22
  let liveTimer;
19
- let liveTimerCorr;
23
+ let streamTimer;
24
+
25
+ let mod = function (n, m) {
26
+ return ((n % m) + m) % m;
27
+ };
20
28
 
21
- let timeNowReal = function () {
22
- // Return UNIX timestamp in seconds
29
+ let timeNow = function () {
23
30
  return Math.floor(Date.now() / 1000);
24
31
  };
25
32
 
26
- let timeNowCycle = function() {
27
- // Cycle time over program for a fixed duration
28
- let relTime = (Math.floor(Date.now() / 1000) % durDemo - durPause) / (durDemo - 2*durPause);
29
- let cycleTime = (confEnd - confStart) * relTime + confStart;
33
+ let timeCont = function () {
34
+ return timeNow() - timeOffset;
35
+ };
36
+
37
+ let timeCycle = function () {
38
+ let actTime = timeNow();
39
+ let relTime = mod(actTime, durDemo + 2*durPause) / durDemo;
40
+ let cycleTime = mod((demoEnd - demoStart) * relTime - timeOffset, (demoEnd - demoStart)) + demoStart;
30
41
  return cycleTime;
31
42
  };
32
43
 
33
- let timeNow = function() {
44
+ let time = function () {
34
45
  if (freezeTime) {
35
46
  return timeFrozen;
36
47
  }
37
48
  else if (demo) {
38
- return timeNowCycle() - timeOffset;
49
+ return timeCycle();
39
50
  }
40
51
  else {
41
- return timeNowReal() - timeOffset;
52
+ return timeCont();
42
53
  }
43
54
  };
44
55
 
45
56
  let pauseTime = function () {
46
- timeFrozen = timeNow();
47
- freezeTime = true;
57
+ if (!freezeTime) {
58
+ timeFrozen = time();
59
+ freezeTime = true;
60
+
61
+ stopUpdate();
62
+ }
48
63
  };
49
64
 
50
65
  let continueTime = function () {
51
- if (demo) {
52
- timeOffset = timeNowCycle() - timeFrozen;
53
- }
54
- else {
55
- timeOffset = timeNow() - timeFrozen;
66
+ if (freezeTime) {
67
+ freezeTime = false;
68
+ timeOffset += time() - timeFrozen;
69
+ startUpdate();
56
70
  }
57
- freezeTime = false;
58
71
  };
59
72
 
60
73
  let resetTime = function (timeStr) {
61
- continueTime();
62
74
  timeOffset = 0;
75
+ freezeTime = false;
76
+
77
+ startUpdate();
63
78
  };
64
79
 
65
- let setTime = function (timeStr) {
80
+ let setTime = function (newTime) {
66
81
  pauseTime();
67
82
 
68
- let d = new Date(timeNow() * 1000);
69
- time = timeStr.split(':');
70
- d.setHours(time[0], time[1]);
83
+ let d = new Date(confStart * 1000);
84
+ newTime = newTime.split(':');
85
+ d.setHours(newTime[0], newTime[1]);
71
86
 
72
87
  timeFrozen = Math.floor(d.getTime() / 1000);
88
+
89
+ update();
73
90
  };
74
91
 
75
- let getTime = function () {
76
- let d = new Date(timeNow() * 1000);
92
+ let getTime = function (tConvert = time()) {
93
+ let d = new Date(tConvert * 1000);
77
94
  let h = d.getHours();
78
95
  let m = d.getMinutes();
79
96
 
80
97
  return h + ":" + (m < 10 ? "0" : "") + m;
81
98
  };
82
99
 
83
- let timeStart = function () {
84
- let tNow = timeNow();
85
- if (confStart - 60 > tNow) {
86
- // Start when conference start (-60s)
87
- return confStart - 60 - tNow;
100
+ let timeUnit = function () {
101
+ if (demo) {
102
+ return 0.1;
103
+ }
104
+ else {
105
+ return 60;
106
+ }
107
+ };
108
+
109
+ let delayStart = function (startTime) {
110
+ let tNow = time();
111
+ let tUnit = timeUnit();
112
+
113
+ if (demo) {
114
+ // Convert virtual duration to real duration
115
+ return mod(startTime - tNow, demoEnd - demoStart) / (demoEnd - demoStart) * (durDemo + 2*durPause);
88
116
  }
89
117
  else {
90
- // Start on the minute
91
- return (60 - (tNow % 60));
118
+ if (startTime > tNow) {
119
+ return startTime - tNow;
120
+ }
121
+ else {
122
+ // Start on the unit
123
+ return (tUnit - (tNow % tUnit));
124
+ }
92
125
  }
93
126
  };
94
127
 
95
- let updateLiveButtons = function() {
96
- let tNow = timeNow();
128
+ let toggleDemo = function () {
129
+ demo = !demo;
130
+ resetTime();
131
+ };
132
+
133
+ let demoOn = function () {
134
+ return demo;
135
+ };
136
+
137
+ let updateLive = function () {
138
+ let tNow = time();
97
139
  let liveShow = document.getElementsByClassName('live-show');
98
140
  let liveHide = document.getElementsByClassName('live-hide');
99
141
 
@@ -127,39 +169,32 @@ window.conference.live = (function() {
127
169
  }
128
170
  }
129
171
 
130
- if (timeNow() > confEnd && !demo) {
172
+ if (tNow > confEnd && !demo) {
131
173
  // Cancel timer after program is over
132
- clearInterval(liveTimer);
174
+ stopUpdateLive();
133
175
  }
134
176
  };
135
177
 
136
- let startUpdate = function () {
137
- if(typeof liveTimer !== "undefined") {
138
- clearInterval(liveTimer);
139
- }
140
- updateLiveButtons();
178
+ let startUpdateLive = function () {
179
+ stopUpdateLive();
180
+ updateLive();
141
181
 
142
182
  if (demo) {
143
- liveTimerCorr = (confEnd - confStart) / (durDemo - 2*durPause);
144
- liveTimer = setInterval(updateLiveButtons, 100);
183
+ // Immediate start required since delayStart would wait for next wrap around
184
+ liveTimer = setInterval(updateLive, timeUnit() * 1000);
145
185
  }
146
186
  else {
147
- liveTimerCorr = 1;
148
187
  setTimeout(function() {
149
- liveTimer = setInterval(updateLiveButtons, 60*1000);
150
- updateLiveButtons();
151
- }, timeStart() * 1000);
188
+ liveTimer = setInterval(updateLive, timeUnit() * 1000);
189
+ updateLive();
190
+ }, delayStart(confStart) * 1000);
152
191
  }
153
192
  };
154
193
 
155
- let toggleDemo = function () {
156
- demo = !demo;
157
- timeOffset = 0;
158
- startUpdate();
159
- };
160
-
161
- let demoOn = function() {
162
- return demo;
194
+ let stopUpdateLive = function () {
195
+ if (typeof liveTimer !== "undefined") {
196
+ clearInterval(liveTimer);
197
+ }
163
198
  };
164
199
 
165
200
  {% if site.conference.live.streaming -%}
@@ -198,65 +233,102 @@ window.conference.live = (function() {
198
233
  };
199
234
 
200
235
  let streamModal;
201
- let streamTimer;
202
236
 
203
- let preStartStream = function(href, startTime, endTime) {
237
+ let getRoom = function (roomName) {
238
+ if (roomName in rooms) {
239
+ return rooms[roomName];
240
+ }
241
+ else {
242
+ return rooms[Object.keys(rooms)[0]];
243
+ }
244
+ };
245
+
246
+ let preStartStream = function (roomName) {
247
+ let room = getRoom(roomName);
248
+
204
249
  streamModal.find('iframe').attr('src', '');
205
250
  streamModal.find('iframe').addClass('d-none');
206
251
  streamModal.find('#stream-placeholder > div').text('{{ site.data.lang[site.conference.lang].live.pre_stream | default: "Live stream has not started yet." }}');
207
252
  streamModal.find('#stream-placeholder').addClass('d-flex');
208
253
 
209
- if(typeof streamTimer !== "undefined") {
210
- clearTimeout(streamTimer);
254
+ stopUpdateStream();
255
+ if (!freezeTime) {
256
+ streamTimer = setTimeout(activeStream, delayStart(room.start) * 1000, roomName);
211
257
  }
212
- streamTimer = setTimeout(activeStream, (startTime - timeNow())/liveTimerCorr*1000, href, endTime);
213
- }
258
+ };
259
+
260
+ let activeStream = function (roomName) {
261
+ let room = getRoom(roomName);
214
262
 
215
- let activeStream = function(href, endTime) {
216
- streamModal.find('iframe').attr('src', href);
263
+ streamModal.find('iframe').attr('src', room.href);
217
264
  streamModal.find('#stream-placeholder').addClass('d-none').removeClass('d-flex');
218
265
  streamModal.find('iframe').removeClass('d-none');
219
266
 
220
- if(typeof streamTimer !== "undefined") {
221
- clearTimeout(streamTimer);
267
+ stopUpdateStream();
268
+ if (!freezeTime) {
269
+ streamTimer = setTimeout(postEndStream, delayStart(room.end) * 1000, roomName);
222
270
  }
223
- streamTimer = setTimeout(postEndStream, (endTime - timeNow())/liveTimerCorr*1000);
224
- }
271
+ };
272
+
273
+ let postEndStream = function (roomName) {
274
+ let room = getRoom(roomName);
225
275
 
226
- let postEndStream = function() {
227
276
  streamModal.find('iframe').attr('src', '');
228
277
  streamModal.find('iframe').addClass('d-none');
229
278
  streamModal.find('#stream-placeholder > div').text('{{ site.data.lang[site.conference.lang].live.post_stream | default: "Live stream has ended." }}');
230
279
  streamModal.find('#stream-placeholder').addClass('d-flex');
231
- }
232
280
 
233
- let setStream = function (roomName) {
234
- if (roomName in rooms) {
235
- room = rooms[roomName];
236
- }
237
- else {
238
- room = rooms[Object.keys(rooms)[0]];
281
+ stopUpdateStream();
282
+ if (!freezeTime && demo) {
283
+ streamTimer = setTimeout(preStartStream, delayStart(demoStart) * 1000, roomName);
239
284
  }
285
+ };
240
286
 
287
+ let setStream = function (roomName) {
241
288
  streamModal.find('.modal-footer .btn').removeClass('active');
242
- if (timeNow() < room.start) {
243
- preStartStream(room.href, room.start, room.end);
289
+ streamModal.find('#stream-select').selectedIndex = -1;
290
+
291
+ let room = getRoom(roomName);
292
+ let tNow = time();
293
+
294
+ if (tNow < room.start) {
295
+ preStartStream(roomName);
244
296
  }
245
- else if (timeNow() > room.end) {
246
- postEndStream();
297
+ else if (tNow > room.end) {
298
+ postEndStream(roomName);
247
299
  }
248
300
  else {
249
- activeStream(room.href, room.end);
301
+ activeStream(roomName);
250
302
  }
303
+
251
304
  streamModal.find('#stream-button' + room.id).addClass('active');
305
+ streamModal.find('#stream-select').selectedIndex = room.id;
306
+ };
307
+
308
+ let updateStream = function () {
309
+ if (streamModal.hasClass('show')) {
310
+ let activeButton = streamModal.find('.modal-footer .btn.active');
311
+ let roomName = activeButton.data('room');
312
+
313
+ if (typeof roomName !== "undefined") {
314
+ setStream(roomName);
315
+ }
316
+ }
317
+ };
318
+
319
+ let stopUpdateStream = function () {
320
+ if (typeof streamTimer !== "undefined") {
321
+ clearInterval(streamTimer);
322
+ }
252
323
  };
253
324
 
254
325
  let hideModal = function (event) {
255
326
  streamModal.find('iframe').attr('src', '');
256
327
  streamModal.find('.modal-footer .btn').removeClass('active');
328
+ streamModal.find('#stream-select').selectedIndex = -1;
257
329
  };
258
330
 
259
- let startStream = function() {
331
+ let setupStream = function () {
260
332
  streamModal = $('#stream-modal');
261
333
 
262
334
  streamModal.on('show.bs.modal', function (event) {
@@ -271,24 +343,60 @@ window.conference.live = (function() {
271
343
  streamModal.find('.modal-footer .btn').on('click', function(event) {
272
344
  event.preventDefault();
273
345
 
274
- let roomName = $(this).data('room')
346
+ let roomName = $(this).data('room');
347
+ setStream(roomName);
348
+ });
349
+
350
+ streamModal.find('#stream-select').on('change', function(event) {
351
+ event.preventDefault();
352
+
353
+ let roomName = $(this).children('option:selected').text();
275
354
  setStream(roomName);
276
355
  });
277
356
  };
278
357
 
358
+ let setup = function () {
359
+ startUpdateLive();
360
+ setupStream();
361
+ };
362
+
363
+ let update = function () {
364
+ updateLive();
365
+ updateStream();
366
+ };
367
+
368
+ let startUpdate = function () {
369
+ startUpdateLive();
370
+ updateStream();
371
+ };
372
+
373
+ let stopUpdate = function () {
374
+ stopUpdateLive();
375
+ stopUpdateStream();
376
+ };
377
+
279
378
  {%- else -%}
280
379
 
281
- let startStream = function() {};
380
+ let setup = function () {
381
+ startUpdateLive();
382
+ };
282
383
 
283
- {%- endif %}
384
+ let update = function () {
385
+ updateLive();
386
+ };
284
387
 
285
- let init = function () {
286
- startUpdate();
287
- startStream();
288
- };
388
+ let startUpdate = function () {
389
+ startUpdateLive();
390
+ };
391
+
392
+ let stopUpdate = function () {
393
+ stopUpdateLive();
394
+ };
395
+
396
+ {%- endif %}
289
397
 
290
398
  return {
291
- init: init,
399
+ init: setup,
292
400
 
293
401
  pauseTime: pauseTime,
294
402
  continueTime: continueTime,
@@ -297,7 +405,7 @@ window.conference.live = (function() {
297
405
  getTime: getTime,
298
406
 
299
407
  toggleDemo: toggleDemo,
300
- demoOn: demoOn,
408
+ demo: demoOn,
301
409
  durDemo: durDemo,
302
410
  durPause: durPause
303
411
  };
@@ -67,10 +67,10 @@
67
67
 
68
68
  {% capture link_tag -%}
69
69
  {%- if link.disabled -%}
70
- <a class="disabled{% if link_styleclass %} {{ link_styleclass }}{% endif %}">
70
+ <a class="disabled{% if link_styleclass %} {{ link_styleclass }}{% endif %}" href="#">
71
71
 
72
72
  {%- elsif link_iframe -%}
73
- <a class="cursor-pointer{% if link_styleclass %} {{ link_styleclass }}{% endif %}" title="{{ link.name }}" data-toggle="modal" data-target="#link-modal" data-href="{{ link_href }}" {% if modal_header -%}
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
74
  data-header="{{ modal_header | strip_newlines | escape }}"
75
75
  {%- elsif modal_title -%}
76
76
  data-title="{{ modal_title }}"
@@ -8,8 +8,21 @@
8
8
  <title>
9
9
  {% unless page.name contains '.' %}{{ page.name }} - {% else %}{% if page.title %}{{ page.title }} - {% endif %}{% endunless %}{{ site.title }}
10
10
  </title>
11
+ <meta name="description" content="{{ site.description }}" />
11
12
 
12
13
  <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/main.css" />
14
+
15
+ {%- if site.conference.live -%}
16
+ <link rel="prefetch" href="{{ site.baseurl }}/assets/icons/live.svg" />
17
+ {%- endif -%}
18
+
19
+ {%- if site.conference.live.streaming -%}
20
+ {%- for room in site.rooms -%}
21
+ {%- if room.live -%}
22
+ <link rel="preconnect" href="{{ room.live }}" />
23
+ {%- endif -%}
24
+ {%- endfor -%}
25
+ {%- endif -%}
13
26
  </head>
14
27
 
15
28
  <body class="pb-4">
@@ -19,10 +19,18 @@
19
19
  {% for r in site.data.program %}
20
20
  {% assign room = site.rooms | where: 'name', r.room | first %}
21
21
 
22
- <a id="stream-button{{ forloop.index }}" href="#" class="btn btn-outline-primary {% unless room.live %}disabled{% endunless %}" role="button" data-room="{{ room.name }}">
22
+ <a id="stream-button{{ forloop.index }}" href="#" class="btn btn-outline-primary d-none d-sm-inline {% unless room.live %}disabled{% endunless %}" role="button" data-room="{{ room.name }}">
23
23
  {{ room.name }}
24
24
  </a>
25
25
  {% endfor %}
26
+ <div class="form-group w-100 d-block d-sm-none">
27
+ <select class="form-control" id="stream-select">
28
+ {% for r in site.data.program %}
29
+ {% assign room = site.rooms | where: 'name', r.room | first %}
30
+ <option {% unless room.live %}disabled{% endunless %}>{{ room.name }}</option>
31
+ {% endfor %}
32
+ </select>
33
+ </div>
26
34
  </div>
27
35
  </div>
28
36
  </div>
@@ -4,11 +4,11 @@
4
4
  {% include partials/get_timestamp.html %}
5
5
 
6
6
  {%- if site.conference.live.streaming -%}
7
- <a title="{{ link.name }}" data-toggle="modal" data-target="#stream-modal" data-room="{{ r.room }}" class="cursor-pointer
7
+ <a title="{{ link.name }}" data-toggle="modal" data-target="#stream-modal" data-room="{{ r.room }}" href="#"
8
8
  {%- else -%}
9
- <span class="
10
- {%- endif %} live-show live-button badge badge-dark font-weight-normal text-left d-none {{ live_button_styleclass }}" data-start="{{ timestamp_start }}" data-end="{{ timestamp_end }}">
11
- <object data="{{ site.baseurl }}/assets/icons/live.svg" type="image/svg+xml"></object>
9
+ <span
10
+ {%- endif %} class="live-show live-button badge badge-dark font-weight-normal text-left d-none {{ live_button_styleclass }}" data-start="{{ timestamp_start }}" data-end="{{ timestamp_end }}">
11
+ <object data="{{ site.baseurl }}/assets/icons/live.svg" type="image/svg+xml">!</object>
12
12
  {{ site.data.lang[site.conference.lang].live.live | default: "Live" }}
13
13
  {%- if site.conference.live.streaming -%}
14
14
  </a>
@@ -40,7 +40,7 @@
40
40
 
41
41
  <li class="nav-item live-show d-none" data-start="{{ timestamp_start }}" data-end="{{ timestamp_end }}">
42
42
  {% if site.conference.live.streaming %}
43
- <a class="cursor-pointer 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="">
43
+ <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
44
  {% else %}
45
45
  {% assign link_styleclass = "nav-link" %}
46
46
  {% include partials/get_link.html %}
@@ -50,7 +50,7 @@
50
50
  {{ link.name | default: "" }}
51
51
 
52
52
  <span class="live-button badge badge-dark font-weight-normal text-left">
53
- <object data="{{ site.baseurl }}/assets/icons/live.svg" type="image/svg+xml"></object>
53
+ <object data="{{ site.baseurl }}/assets/icons/live.svg" type="image/svg+xml">!</object>
54
54
  {{ site.data.lang[site.conference.lang].live.live | default: "Live" }}
55
55
  </span>
56
56
  </a>
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+
3
+ {% if site.conference.location.hide -%}
4
+ rm -r rooms
5
+ rm -r {{ site.conference.location.url | default: "location" }}
6
+ {% else -%}
7
+ {%- for room in site.rooms -%}
8
+ {%- if room.hide -%}
9
+ rm -r {{ room.url | slice: 1, room.url.size }}
10
+ {% endif -%}
11
+ {%- endfor -%}
12
+ {%- endif -%}
13
+
14
+ {%- for speaker in site.speakers -%}
15
+ {%- if speaker.hide -%}
16
+ rm -r {{ speaker.url | slice: 1, speaker.url.size }}
17
+ {% endif -%}
18
+ {%- endfor -%}
19
+
20
+ {%- for talk in site.talks -%}
21
+ {%- if talk.hide -%}
22
+ rm -r {{ talk.url | slice: 1, talk.url.size }}
23
+ {% endif -%}
24
+ {%- endfor %}
25
+ rm delete_hidden.sh
@@ -1,4 +1,7 @@
1
- {% include partials/header.html %}
1
+ {%- assign this_room = page -%}
2
+
3
+ {%- unless this_room.hide or site.conference.location.hide -%}
4
+ {%- include partials/header.html -%}
2
5
 
3
6
  <!-- title for print: -->
4
7
  <h1 class="display-5 mb-3 d-none d-print-inline">
@@ -10,7 +13,6 @@
10
13
  {{ site.data.lang[site.conference.lang].location.title | default: "Location" }}
11
14
  </h1>
12
15
 
13
- {% assign this_room = page %}
14
16
  {% include partials/navbar_rooms.html %}
15
17
 
16
18
  {{ content }}
@@ -60,4 +62,5 @@
60
62
 
61
63
  </ul>
62
64
 
63
- {% include partials/footer.html %}
65
+ {%- include partials/footer.html -%}
66
+ {%- endunless -%}
@@ -1,6 +1,7 @@
1
- {% include partials/header.html %}
1
+ {%- assign speaker = page -%}
2
2
 
3
- {% assign speaker = page %}
3
+ {%- unless speaker.hide -%}
4
+ {%- include partials/header.html -%}
4
5
 
5
6
  <p class="h6">
6
7
  {{ site.data.lang[site.conference.lang].speaker.title | default: "Speaker" }}
@@ -104,4 +105,5 @@
104
105
  </a>
105
106
  </p>
106
107
 
107
- {% include partials/footer.html %}
108
+ {%- include partials/footer.html -%}
109
+ {%- endunless -%}
@@ -46,7 +46,7 @@
46
46
  {% include partials/get_link.html %}
47
47
  {% if link_icon %}
48
48
  {{ link_tag -}}
49
- <i class="fas fa-{{ link_icon }} pr-1"></i></a>
49
+ <i class="fas fa-{{ link_icon }} p-1"></i></a>
50
50
  {% endif %}
51
51
  {% endfor %}
52
52
  </span>
@@ -1,6 +1,7 @@
1
- {% include partials/header.html %}
1
+ {%- assign talk = page -%}
2
2
 
3
- {% assign talk = page %}
3
+ {%- unless talk.hide -%}
4
+ {%- include partials/header.html -%}
4
5
 
5
6
  <div class="d-flex flex-lg-row flex-column container-fluid mb-2 p-0">
6
7
  <div class="h6 mt-2 mb-0 mr-1 pr-1 pb-1">
@@ -119,4 +120,5 @@
119
120
  </a>
120
121
  </p>
121
122
 
122
- {% include partials/footer.html %}
123
+ {%- include partials/footer.html -%}
124
+ {%- endunless -%}
@@ -67,11 +67,6 @@ $fa-font-path: '/assets/webfonts' !default;
67
67
 
68
68
  // General
69
69
 
70
- // Show pointer cursor on links opening modals
71
- .cursor-pointer {
72
- cursor: pointer;
73
- }
74
-
75
70
  // No bottom margin on info-bar
76
71
  .alert > p:last-of-type {
77
72
  margin-bottom: 0;
@@ -25,7 +25,7 @@
25
25
  attributeName="opacity"
26
26
  from="0"
27
27
  to="0"
28
- dur="0.5s"
28
+ dur="500ms"
29
29
  begin="0s;dot_animate.end+7.35s" />
30
30
  <animate
31
31
  id="dot_animate"
@@ -33,7 +33,7 @@
33
33
  attributeName="opacity"
34
34
  from="0"
35
35
  to="1"
36
- dur="0.15s"
36
+ dur="150ms"
37
37
  begin="dot_hide.end" />
38
38
  </path>
39
39
  <path
@@ -46,7 +46,7 @@
46
46
  attributeName="opacity"
47
47
  from="0"
48
48
  to="0"
49
- dur="0.65s"
49
+ dur="650ms"
50
50
  begin="dot_hide.begin" />
51
51
  <animate
52
52
  id="arc_small_animate"
@@ -54,7 +54,7 @@
54
54
  attributeName="opacity"
55
55
  from="0"
56
56
  to="1"
57
- dur="0.2s"
57
+ dur="200ms"
58
58
  begin="arc_small_hide.end" />
59
59
  </path>
60
60
  <path
@@ -67,7 +67,7 @@
67
67
  attributeName="opacity"
68
68
  from="0"
69
69
  to="0"
70
- dur="0.85s"
70
+ dur="850ms"
71
71
  begin="dot_hide.begin" />
72
72
  <animate
73
73
  id="arc_large_animate"
@@ -75,7 +75,7 @@
75
75
  attributeName="opacity"
76
76
  from="0"
77
77
  to="1"
78
- dur="0.25s"
78
+ dur="250ms"
79
79
  begin="arc_large_hide.end" />
80
80
  </path>
81
81
  </svg>
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: 2.5.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorenz Schmid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-08 00:00:00.000000000 Z
11
+ date: 2020-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -95,6 +95,7 @@ files:
95
95
  - _includes/partials/show_talk_duration.html
96
96
  - _includes/partials/show_talk_time.html
97
97
  - _layouts/default.html
98
+ - _layouts/delete_hidden.html
98
99
  - _layouts/home.html
99
100
  - _layouts/location.html
100
101
  - _layouts/page.html