blob: 1c2ff15715557d69321697403ad215aa400b38cf [file] [log] [blame]
avm999631ca663e2020-12-17 19:34:22 +01001var bookletNames = [
2 'nadal2020joves',
3 'nadal2020nens',
4];
5
6var isBookletShown = false;
7
8function showSection(section) {
9 document.querySelectorAll('section').forEach(el => {
10 if (el.id === section)
11 el.removeAttribute('hidden');
12 else
13 el.setAttribute('hidden', '');
14 });
15}
16
17function songElement(song) {
18 var div = document.createElement('div');
19 div.classList.add('song');
20
21 var title = document.createElement('h3');
22 title.classList.add('song-title');
23 title.textContent = song.title;
24
25 var author = document.createElement('div');
26 author.classList.add('song-author');
27 author.textContent = song.author;
28
29 var performers = document.createElement('div');
30 performers.classList.add('performers');
31
32 song.performers.forEach(performer => {
33 var item = document.createElement('div');
34 item.classList.add('performers-item');
35
36 var span = document.createElement('span');
37 span.classList.add('instrument');
38 span.textContent = performer.instrument;
39
40 var people = document.createTextNode(': ' + performer.names.join(', '));
41
42 item.append(span, people);
43 performers.append(item);
44 });
45
46 div.append(title, author, performers);
47 return div;
48}
49
50function loadBooklet(booklet) {
51 console.info('Booklet: ', booklet);
52
53 document.getElementById('concert-title').textContent = booklet.title;
54 document.getElementById('concert-subtitle').textContent = booklet.subtitle;
55
56 var bookletContent = document.getElementById('booklet-content');
57 booklet.songs.forEach(song => {
58 var songEl = songElement(song);
59 bookletContent.append(songEl);
60 });
61
62 showSection('booklet');
63}
64
65function checkBooklets(booklets) {
66 if (isBookletShown)
67 return;
68
69 var now = Date.now();
70 var latest = null;
71 booklets.forEach(booklet => {
72 if (booklet.begins * 1000 <= now &&
73 (latest === null || booklet.begins * 1000 < booklet.begins))
74 latest = booklet;
75 });
76
77 if (latest === null)
78 showSection('wait-screen');
79 else {
80 loadBooklet(latest);
81 isBookletShown = true;
82 }
83}
84
avm9996320fdf2a2020-12-20 13:08:16 +010085function showUpdateFooter() {
86 document.getElementById('update-available').removeAttribute('hidden');
87}
88
avm999631ca663e2020-12-17 19:34:22 +010089window.addEventListener('load', _ => {
90 if ('serviceWorker' in navigator) {
91 navigator.serviceWorker.register('/sw.js')
avm9996320fdf2a2020-12-20 13:08:16 +010092 .then(reg => {
93 reg.addEventListener('updatefound', _ => {
94 showUpdateFooter();
95 });
96
avm999631ca663e2020-12-17 19:34:22 +010097 var promises = [];
98 bookletNames.forEach(name => {
99 var p = fetch('concerts/' + name + '.json').then(res => res.json());
100 promises.push(p);
101 });
102
103 Promise.all(promises).then(booklets => {
104 checkBooklets(booklets);
avm99963a0fc5df2020-12-17 21:38:07 +0100105 window.setInterval(_ => { checkBooklets(booklets); }, 60 * 1000);
avm999631ca663e2020-12-17 19:34:22 +0100106 });
107 })
108 .catch(err => {
109 showSection('cant-install');
110 console.error('The service worker failed to be registered.');
111 });
112 } else {
113 showSection('no-service-worker');
114 }
115});