jekyll-theme-conference 3.1.0 → 3.1.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: e8d4fe78f7da2eba1de22ca1b58a6cd57fefd89729aae6efc5ec6e34bc61bf85
4
- data.tar.gz: 14da05b22aec27e04c3827682c686fc07444ab42f0b38c99c0158f818f363dce
3
+ metadata.gz: 91444cf0a7c14c4e1d4a10547c95fd9c6a10b176db297a2071830f2a634052c0
4
+ data.tar.gz: 5c16b5f374876f5bde05ff91c0e121133843f31ad42701ef8336b523933101ba
5
5
  SHA512:
6
- metadata.gz: 58c2b9524a42cc13bcc1cb91075bc35cdc223418b23bd926bd21cc849688d60f543d13fadaf4ad46ac21ff8091a798478fad9daf331ae49db1b88d6ae6b56f7f
7
- data.tar.gz: abe66bdd148005dc8293d4604070c00bfb41203b33767ab4f05341da278b67527738800ad20880f8c39af85825549f91ae47069a6f6f029716ccae065e25a648
6
+ metadata.gz: c2e410318beee836c5d3371185d5e5386f24a28c34061eeb0fc407ec68715326e55f9344021b93c2ded7631df376c45723fbeac84a3e7ae9c5f7a781e981abcc
7
+ data.tar.gz: a3a3fefe3e080e42fdf24923fe36189593aeaafd87a2e90624ce42a2fa6ba766a5436201cbb63a5e7b34fba71ea695e05a9ddbadf13352fddc4792c8423444f9
data/README.md CHANGED
@@ -18,6 +18,41 @@ The theme was originally created for the yearly Winterkongress conference of the
18
18
  - [Demo: Winterkongress](https://digitale-gesellschaft.ch/kongress/)
19
19
 
20
20
 
21
+ ## Table of Contents
22
+
23
+ - [Installation](#installation)
24
+ * [Gem-based Method](#gem-based-method)
25
+ * [Remote Theme Method](#remote-theme-method)
26
+ - [Setup](#setup)
27
+ * [Jump Start](#jump-start)
28
+ * [Automatic Import](#automatic-import)
29
+ * [Automatic Build](#automatic-build)
30
+ - [Configuration](#configuration)
31
+ * [Theme Verification](#theme-verification)
32
+ * [Collection URLs](#collection-urls)
33
+ * [Language](#language)
34
+ * [Navigation Bar](#navigation-bar)
35
+ * [Main Landing Page](#main-landing-page)
36
+ * [Information Boxes](#information-boxes)
37
+ * [Live Indications & Streaming](#live-indications---streaming)
38
+ * [Talk Settings](#talk-settings)
39
+ * [Speaker Settings](#speaker-settings)
40
+ * [Location Settings](#location-settings)
41
+ * [Program Settings](#program-settings)
42
+ - [Content](#content)
43
+ * [Schedule / Program](#schedule---program)
44
+ * [Talks](#talks)
45
+ * [Speakers](#speakers)
46
+ * [Rooms](#rooms)
47
+ * [Links](#links)
48
+ - [Overview Pages](#overview-pages)
49
+ * [Location / Room Overview](#location---room-overview)
50
+ * [Live Stream Overview](#live-stream-overview)
51
+ * [Additional Pages](#additional-pages)
52
+ - [Design](#design)
53
+ - [License](#license)
54
+
55
+
21
56
  ## Installation
22
57
 
23
58
  There are three ways to install: As a [Gem-based theme](https://jekyllrb.com/docs/themes/#understanding-gem-based-themes), as a [remote theme](https://github.blog/2017-11-29-use-any-theme-with-github-pages/) (GitHub Pages compatible), or by cloning/forking this repository and reference to it directly.
@@ -35,28 +35,34 @@ window.conference.live = (function() {
35
35
  let streamInfoTimer;
36
36
 
37
37
  let loadData = function () {
38
+ // Fetch schedule from external file
38
39
  $.getJSON('{{ site.baseurl }}/assets/js/data.json', function(json) {
39
40
  data = json;
40
41
  });
41
42
  };
42
43
 
43
44
  let getData = function () {
45
+ // Return data
44
46
  return data;
45
47
  };
46
48
 
47
49
  let mod = function (n, m) {
50
+ // Absolute modulo
48
51
  return ((n % m) + m) % m;
49
52
  };
50
53
 
51
54
  let timeNow = function () {
55
+ // Current timestamp in seconds
52
56
  return Math.floor(Date.now() / 1000);
53
57
  };
54
58
 
55
59
  let timeCont = function () {
60
+ // Continuous time (respecting previous pauses)
56
61
  return timeNow() - timeOffset;
57
62
  };
58
63
 
59
64
  let timeCycle = function () {
65
+ // Cyclic timestamp in seconds
60
66
  let actTime = timeNow();
61
67
  let relTime = mod(actTime, durDemo + 2*durPause) / (durDemo + 2*durPause);
62
68
  let cycleTime = mod((demoEnd - demoStart) * relTime - timeOffset, (demoEnd - demoStart)) + demoStart;
@@ -64,6 +70,7 @@ window.conference.live = (function() {
64
70
  };
65
71
 
66
72
  let time = function () {
73
+ // Return app time
67
74
  if (freezeTime) {
68
75
  return timeFrozen;
69
76
  }
@@ -76,6 +83,7 @@ window.conference.live = (function() {
76
83
  };
77
84
 
78
85
  let pauseTime = function () {
86
+ // Pause app time
79
87
  if (!freezeTime) {
80
88
  timeFrozen = time();
81
89
  freezeTime = true;
@@ -85,6 +93,7 @@ window.conference.live = (function() {
85
93
  };
86
94
 
87
95
  let continueTime = function () {
96
+ // Continue app time
88
97
  if (freezeTime) {
89
98
  freezeTime = false;
90
99
  timeOffset += time() - timeFrozen;
@@ -92,18 +101,23 @@ window.conference.live = (function() {
92
101
  }
93
102
  };
94
103
 
95
- let resetTime = function (timeStr) {
104
+ let resetTime = function () {
105
+ // Reset app time
96
106
  timeOffset = 0;
97
107
  freezeTime = false;
98
108
 
99
109
  startUpdate();
100
110
  };
101
111
 
102
- let setTime = function (newTime, newDay=1) {
112
+ let setTime = function (newTime, newDay) {
113
+ // Set and pause app time
103
114
  pauseTime();
104
115
 
105
116
  let dayIdx;
106
- if (Number.isInteger(newDay)) {
117
+ if (arguments.length < 2) {
118
+ dayIdx = 0;
119
+ }
120
+ else if (Number.isInteger(newDay)) {
107
121
  dayIdx = newDay-1;
108
122
  }
109
123
  else if (/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(newDay)) {
@@ -112,7 +126,7 @@ window.conference.live = (function() {
112
126
  else {
113
127
  dayIdx = data.days.find(o => o.name === newDay);
114
128
  }
115
- newDate = data.days[dayIdx].date;
129
+ let newDate = data.days[dayIdx].date;
116
130
 
117
131
  let d = new Date(newDate);
118
132
  newTime = newTime.split(':');
@@ -123,7 +137,10 @@ window.conference.live = (function() {
123
137
  update();
124
138
  };
125
139
 
126
- let getTime = function (tConvert=time()) {
140
+ let getTime = function () {
141
+ // Return app time as string
142
+ let tConvert = time();
143
+
127
144
  let d = new Date(tConvert * 1000);
128
145
  let dStr = d.toISOString().slice(0,10);
129
146
  let h = d.getHours();
@@ -133,6 +150,7 @@ window.conference.live = (function() {
133
150
  };
134
151
 
135
152
  let timeUnit = function () {
153
+ // App time refresh rate
136
154
  if (demo) {
137
155
  return 0.1;
138
156
  }
@@ -142,6 +160,7 @@ window.conference.live = (function() {
142
160
  };
143
161
 
144
162
  let delayStart = function (startTime) {
163
+ // Seconds until given startTime occurs
145
164
  let tNow = time();
146
165
  let tUnit = timeUnit();
147
166
 
@@ -161,21 +180,25 @@ window.conference.live = (function() {
161
180
  };
162
181
 
163
182
  let toggleDemo = function () {
183
+ // Toggle app demo mode
164
184
  demo = !demo;
165
185
  resetTime();
166
186
  };
167
187
 
168
188
  let demoOn = function () {
189
+ // Return app demo status
169
190
  return demo;
170
191
  };
171
192
 
172
193
  let updateLive = function () {
194
+ // Update status all live elements in DOM
173
195
  let tNow = time();
174
196
  let liveShow = document.getElementsByClassName('live-show');
175
197
  let liveHide = document.getElementsByClassName('live-hide');
176
198
  let liveTime = document.getElementsByClassName('live-time');
177
199
  let livePast = document.getElementsByClassName('live-past');
178
200
 
201
+ // Show elements for a given period
179
202
  for (let i = 0; i < liveShow.length; i++) {
180
203
  let tStarts = liveShow[i].dataset.start.split(',');
181
204
  let tEnds = liveShow[i].dataset.end.split(',');
@@ -193,6 +216,7 @@ window.conference.live = (function() {
193
216
  }
194
217
  }
195
218
 
219
+ // Hide elements for a given period
196
220
  for (let i = 0; i < liveHide.length; i++) {
197
221
  let tStarts = liveHide[i].dataset.start.split(',');
198
222
  let tEnds = liveHide[i].dataset.end.split(',');
@@ -212,6 +236,7 @@ window.conference.live = (function() {
212
236
  }
213
237
  }
214
238
 
239
+ // Update duration string for given elements
215
240
  for (let i = 0; i < liveTime.length; i++) {
216
241
  let t = liveTime[i].dataset.time;
217
242
  if (typeof t == "undefined") {
@@ -271,6 +296,7 @@ window.conference.live = (function() {
271
296
  liveTime[i].innerHTML = tStr;
272
297
  }
273
298
 
299
+ // Disable elements for a given period
274
300
  for (let i = 0; i < livePast.length; i++) {
275
301
  let t = livePast[i].dataset.time;
276
302
  if (typeof t == "undefined") {
@@ -290,13 +316,14 @@ window.conference.live = (function() {
290
316
  }
291
317
  }
292
318
 
319
+ // Cancel timer after program is over
293
320
  if (tNow > confEnd && !demo) {
294
- // Cancel timer after program is over
295
321
  stopUpdateLive();
296
322
  }
297
323
  };
298
324
 
299
325
  let startUpdateLive = function () {
326
+ // Start update timer to update live elements in DOM
300
327
  stopUpdateLive();
301
328
  updateLive();
302
329
 
@@ -313,6 +340,7 @@ window.conference.live = (function() {
313
340
  };
314
341
 
315
342
  let stopUpdateLive = function () {
343
+ // stopUpdate update timer to update live elements in DOM
316
344
  if (typeof liveTimer !== "undefined") {
317
345
  clearInterval(liveTimer);
318
346
  }
@@ -326,6 +354,7 @@ window.conference.live = (function() {
326
354
  let streamModal;
327
355
 
328
356
  let getRoom = function (roomName) {
357
+ // Return room object for given room name
329
358
  if (roomName in data.rooms) {
330
359
  return data.rooms[roomName];
331
360
  }
@@ -335,6 +364,7 @@ window.conference.live = (function() {
335
364
  };
336
365
 
337
366
  let getNextTalk = function (roomName) {
367
+ // Get talk object for next talk in given room
338
368
  let timeNow = time();
339
369
  let talksHere = data.talks[roomName];
340
370
 
@@ -351,6 +381,7 @@ window.conference.live = (function() {
351
381
  };
352
382
 
353
383
  let getNextPause = function (roomName) {
384
+ // Get time object for next pause in given room
354
385
  let timeNow = time();
355
386
  let talksHere = data.talks[roomName];
356
387
 
@@ -369,20 +400,24 @@ window.conference.live = (function() {
369
400
  return false;
370
401
  };
371
402
 
372
- let setStreamContent = function (content) {
403
+ let setStreamIframeContent = function (content) {
404
+ // Set stream modal iframe to show given text
373
405
  streamModal.find('iframe').attr('src', '');
374
406
  streamModal.find('iframe').addClass('d-none');
375
407
  streamModal.find('#stream-placeholder > div').text(content);
376
408
  streamModal.find('#stream-placeholder').addClass('d-flex');
377
409
  };
378
410
 
379
- let setStreamSrc = function (href) {
411
+ let setStreamIframeSrc = function (href) {
412
+ // Set stream modal iframe to show given URL
380
413
  streamModal.find('iframe').attr('src', href);
381
414
  streamModal.find('#stream-placeholder').addClass('d-none').removeClass('d-flex');
382
415
  streamModal.find('iframe').removeClass('d-none');
383
416
  };
384
417
 
385
418
  let setStreamVideo = function (roomName) {
419
+ // Update stream modal iframe:
420
+ // Show stream with start/pause/end message (for given room) and keep updated
386
421
  let timeNow = time();
387
422
 
388
423
  let talksHere = data.talks[roomName];
@@ -395,7 +430,7 @@ window.conference.live = (function() {
395
430
 
396
431
  // Conference not yet started
397
432
  if (timeNow < roomStart - streamPrepend*60) {
398
- setStreamContent('{{ site.data.lang[site.conference.lang].live.pre_stream | default: "Live stream has not started yet." }}');
433
+ setStreamIframeContent('{{ site.data.lang[site.conference.lang].live.pre_stream | default: "Live stream has not started yet." }}');
399
434
 
400
435
  if (!freezeTime) {
401
436
  streamVideoTimer = setTimeout(setStreamVideo, delayStart(roomStart - streamPrepend*60) * 1000, roomName);
@@ -404,7 +439,7 @@ window.conference.live = (function() {
404
439
 
405
440
  // Conference is over
406
441
  else if (timeNow > roomEnd + streamExtend*60) {
407
- setStreamContent('{{ site.data.lang[site.conference.lang].live.post_stream | default: "Live stream has ended." }}');
442
+ setStreamIframeContent('{{ site.data.lang[site.conference.lang].live.post_stream | default: "Live stream has ended." }}');
408
443
 
409
444
  if (!freezeTime && demo) {
410
445
  streamVideoTimer = setTimeout(setStreamVideo, delayStart(roomEnd - streamPrepend*60) * 1000, roomName);
@@ -417,7 +452,7 @@ window.conference.live = (function() {
417
452
 
418
453
  // Currently stream is paused
419
454
  if (pauseNext && timeNow >= pauseNext.start + streamExtend*60 && timeNow <= pauseNext.end - streamPrepend*60) {
420
- setStreamContent('{{ site.data.lang[site.conference.lang].live.pause_stream | default: "Live stream is currently paused." }}');
455
+ setStreamIframeContent('{{ site.data.lang[site.conference.lang].live.pause_stream | default: "Live stream is currently paused." }}');
421
456
 
422
457
  if (!freezeTime) {
423
458
  streamVideoTimer = setTimeout(setStreamVideo, delayStart(pauseNext.end - streamPrepend*60) * 1000, roomName);
@@ -426,7 +461,7 @@ window.conference.live = (function() {
426
461
  // Currently a talk is active
427
462
  else {
428
463
  let room = getRoom(roomName);
429
- setStreamSrc(room.href);
464
+ setStreamIframeSrc(room.href);
430
465
 
431
466
  if (!freezeTime) {
432
467
  if (pauseNext) {
@@ -441,6 +476,8 @@ window.conference.live = (function() {
441
476
  };
442
477
 
443
478
  let setStreamInfo = function (roomName) {
479
+ // Update stream modal info bar:
480
+ // Show next talk and speaker (for given room) and keep updated
444
481
  let timeNow = time();
445
482
  let talkNext = getNextTalk(roomName);
446
483
 
@@ -495,6 +532,7 @@ window.conference.live = (function() {
495
532
  };
496
533
 
497
534
  let setStream = function (roomName) {
535
+ // Update stream modal (iframe and info bar) for given room
498
536
  streamModal.find('.modal-footer .btn').removeClass('active');
499
537
  streamModal.find('#stream-select').val(0);
500
538
 
@@ -510,6 +548,7 @@ window.conference.live = (function() {
510
548
  };
511
549
 
512
550
  let updateStream = function () {
551
+ // Update stream modal for currently active room button
513
552
  if (streamModal.hasClass('show')) {
514
553
  let activeButton = streamModal.find('.modal-footer .btn.active');
515
554
  let roomName = activeButton.data('room');
@@ -521,6 +560,7 @@ window.conference.live = (function() {
521
560
  };
522
561
 
523
562
  let stopUpdateStream = function () {
563
+ // Stop stream modal update timer
524
564
  if (typeof streamVideoTimer !== "undefined") {
525
565
  clearInterval(streamVideoTimer);
526
566
  }
@@ -529,13 +569,15 @@ window.conference.live = (function() {
529
569
  }
530
570
  };
531
571
 
532
- let hideModal = function (event) {
572
+ let hideModal = function () {
573
+ // Close stream modal
533
574
  streamModal.find('iframe').attr('src', '');
534
575
  streamModal.find('.modal-footer .btn').removeClass('active');
535
576
  streamModal.find('#stream-select').selectedIndex = -1;
536
577
  };
537
578
 
538
579
  let setupStream = function () {
580
+ // Setup events when modal opens/closes
539
581
  streamModal = $('#stream-modal');
540
582
 
541
583
  // configure modal opening buttons
@@ -544,8 +586,8 @@ window.conference.live = (function() {
544
586
  let roomName = button.data('room');
545
587
  setStream(roomName);
546
588
  });
547
- streamModal.on('hide.bs.modal', function (event) {
548
- hideModal(event);
589
+ streamModal.on('hide.bs.modal', function () {
590
+ hideModal();
549
591
  });
550
592
 
551
593
  // configure room selection buttons in modal
@@ -24,7 +24,7 @@ window.conference.mapConfig = (function() {
24
24
  };
25
25
 
26
26
  let init = function () {
27
- elId = 'map';
27
+ let elId = 'map';
28
28
 
29
29
  if (document.getElementById(elId)) {
30
30
  setup(elId);
@@ -51,7 +51,7 @@ window.conference.modal = (function () {
51
51
  }
52
52
  };
53
53
 
54
- let hide = function (el, event) {
54
+ let hide = function (el) {
55
55
  let modal = $(el);
56
56
 
57
57
  modal.find('.modal-title h3').text('');
@@ -61,13 +61,13 @@ window.conference.modal = (function () {
61
61
  };
62
62
 
63
63
  let init = function() {
64
- elSel = '#link-modal';
64
+ let elSel = '#link-modal';
65
65
 
66
66
  $(elSel).on('show.bs.modal', function (event) {
67
67
  show(this, event);
68
68
  });
69
- $(elSel).on('hide.bs.modal', function (event) {
70
- hide(this, event);
69
+ $(elSel).on('hide.bs.modal', function () {
70
+ hide(this);
71
71
  });
72
72
  };
73
73
 
@@ -34,7 +34,7 @@ window.conference.program = (function() {
34
34
  }
35
35
 
36
36
  // Add current selected day as hash to URL while keeping current scrolling position
37
- $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
37
+ $('a[data-toggle="tab"]').on('shown.bs.tab', function () {
38
38
  updateHash(this.hash);
39
39
  });
40
40
  }
@@ -29,7 +29,7 @@ function (exports) {
29
29
  var elems = document.getElementsByClassName('syncscroll');
30
30
  var i, j, el, found, name;
31
31
  for (name in names) {
32
- if (names.hasOwnProperty(name)) {
32
+ if (Object.prototype.hasOwnProperty.call(names, name)) {
33
33
  for (i = 0; i < names[name].length; i++) {
34
34
  names[name][i].removeEventListener(
35
35
  'scroll', names[name][i].syn, 0
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.1.0
4
+ version: 3.1.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: 2021-02-14 00:00:00.000000000 Z
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll