3 let clock_running = false;
4 let clock_visible = false;
5 let comment_visible = false;
6 let lowerthird_visible = false;
8 let clock_limit = 30 * 60;
16 document.getElementById('team1').innerHTML = state['team1'];
17 document.getElementById('team2').innerHTML = state['team2'];
19 let sheets = { 'A': state['team1'], 'B': state['team2'] };
25 document.getElementById('team1color').style.backgroundColor = state['team1color'];
26 document.getElementById('team2color').style.backgroundColor = state['team2color'];
31 scoreA = state['score1'];
32 scoreB = state['score2'];
39 clock_origin = Date.now();
47 if (!clock_running) return;
48 clock_elapsed = time_elapsed();
49 clock_origin = Date.now();
50 clock_running = false;
53 function setclock(amount)
55 clock_elapsed = amount;
56 clock_origin = Date.now();
60 function setclockfromstate()
62 let amount = parseInt(state['clock_min']) * 60 + parseInt(state['clock_sec']);
66 function setclocklimitfromstate()
68 let amount = parseInt(state['clock_limit_min']) * 60 + parseInt(state['clock_limit_sec']);
74 if (clock_visible) return;
75 let clockbug = document.getElementById('clockbug');
76 clockbug.className = 'clockbug clockbug-animate-in';
82 if (!clock_visible) return;
83 let clockbug = document.getElementById('clockbug');
84 clockbug.className = 'clockbug clockbug-animate-out';
85 clock_visible = false;
90 document.getElementById('comment').innerHTML = state['comment'];
93 function showcomment()
95 if (comment_visible) return;
96 let commentbug = document.getElementById('commentbug');
97 commentbug.className = 'commentbug commentbug-animate-in';
98 comment_visible = true;
101 function hidecomment()
103 if (!comment_visible) return;
104 let commentbug = document.getElementById('commentbug');
105 commentbug.className = 'commentbug commentbug-animate-out';
106 comment_visible = false;
109 function showlowerthird()
111 if (lowerthird_visible) return;
113 document.getElementById('lowerthird-headline').className = 'lowerthird-headline lowerthird-headline-animate-in';
114 document.getElementById('lowerthird-headline-content').className = 'lowerthird-headline-content lowerthird-headline-content-animate-in';
115 document.getElementById('lowerthird-subheading').className = 'lowerthird-subheading lowerthird-subheading-animate-in';
116 document.getElementById('lowerthird-subheading-content').className = 'lowerthird-subheading-content lowerthird-subheading-content-animate-in';
117 document.getElementById('lowerthird-picture').className = 'lowerthird-picture lowerthird-picture-animate-in';
118 document.getElementById('lowerthird-picture-content').className = 'lowerthird-picture-content lowerthird-picture-content-animate-in';
119 lowerthird_visible = true;
122 function setandshowlowerthird()
124 document.getElementById('lowerthird-headline-content').innerHTML = state['text1'];
125 document.getElementById('lowerthird-subheading-content').innerHTML = state['text2'];
126 let img = document.getElementById('lowerthird-img');
127 if (state['image'] === undefined) {
128 img.style.display = 'none';
130 img.src = state['image'];
131 img.style.display = 'inline';
136 function hidelowerthird()
138 if (!lowerthird_visible) return;
139 document.getElementById('lowerthird-headline').className = 'lowerthird-headline lowerthird-headline-hidden lowerthird-headline-animate-out';
140 document.getElementById('lowerthird-headline-content').className = 'lowerthird-headline-content lowerthird-headline-content-animate-out';
141 document.getElementById('lowerthird-subheading').className = 'lowerthird-subheading lowerthird-subheading-animate-out';
142 document.getElementById('lowerthird-subheading-content').className = 'lowerthird-subheading-content lowerthird-subheading-content-animate-out';
143 document.getElementById('lowerthird-picture').className = 'lowerthird-picture lowerthird-picture-animate-out';
144 document.getElementById('lowerthird-picture-content').className = 'lowerthird-picture-content lowerthird-picture-content-animate-out';
145 lowerthird_visible = false;
148 function time_elapsed()
150 let elapsed = (Date.now() - clock_origin) * 1e-3;
151 if (clock_elapsed + elapsed >= clock_limit) {
152 clock_elapsed = clock_limit;
153 clock_origin = Date.now();
154 clock_running = false;
157 return Math.floor(clock_elapsed + elapsed);
160 function update_clock()
162 let elapsed = time_elapsed();
163 let min = Math.floor(elapsed / 60);
164 let sec = elapsed % 60;
166 if (sec < 10) sec = "0" + sec;
167 document.getElementById('clock').innerHTML = min + ":" + sec;
184 if (scoreA > 0) --scoreA;
190 if (scoreB > 0) --scoreB;
194 function resetscore()
200 function update_score()
202 document.getElementById('score').innerHTML = scoreA + " – " + scoreB;
205 /* called by the Nageru theme only */
208 document.getElementById('manualcontrols').style.display = 'none';
209 document.getElementById('area').style.display = 'none';
214 console.log('[[[' + v + ']]]');
215 let j = JSON.parse(v);
216 for(let key in j) state[key] = j[key];
219 setInterval(function() {
229 let websocket = null;
233 console.log("Connecting...");
237 websocket = new WebSocket("ws://127.0.0.1:5250/");
238 websocket.onopen = function(evt) {
239 console.log("Connected to client.");
241 websocket.onclose = function(evt) {
242 console.log("Disconnected from client.");
243 setTimeout(open_ws, 100);
245 websocket.onmessage = function(evt) {
247 let m = msg.match(/^update (.*)/);
251 m = msg.match(/^eval (.*)/);
256 websocket.onerror = function(evt) {
257 console.log('Error: ' + evt.data);
259 } catch (exception) {
260 console.log('Error: ' + exception);
261 setTimeout(open_ws, 100);