]> git.sesse.net Git - ultimatescore/blob - quickl3.js
Make the roster scripts executable.
[ultimatescore] / quickl3.js
1 'use strict';
2
3 function load_l3(sheet, prefix, cb)
4 {
5         let req = new XMLHttpRequest();
6         req.onload = function(e) {
7                 let response = JSON.parse(req.responseText);
8                 let l3s = [];
9                 let i;
10                 for (i = 0; i < response.values.length; ++i) {
11                         if (response.values[i][0] === 'Number' ||
12                             response.values[i][0] === 'Fake #') {
13                                 ++i;
14                                 break;
15                         }
16                 }
17
18                 let players = [];
19                 for ( ; response.values[i] !== undefined && response.values[i].length >= 3; ++i) {
20                         players.push({
21                                 "number": response.values[i][0],
22                                 "display_number": response.values[i][1],
23                                 "text": response.values[i][2],
24                                 "subtext": response.values[i][4],  // To the right of the “info” column.
25                                 "image": response.values[i][5]
26                         });
27                 }
28
29                 // Assign fake numbers to those that have none.
30                 let used_numbers = {};
31                 for (const player of players) {
32                         used_numbers[player.number] = 1;
33                 }
34                 for (let player of players) {
35                         let num = player.number;
36                         if (num !== '' && num !== undefined) {
37                                 continue;
38                         }
39                         num = parseInt(player.display_number);
40                         if (num >= 1 && num <= 999 && !used_numbers.hasOwnProperty(num)) {
41                                 player.number = '' + num;
42                         }
43                 }
44                 for (let player of players) {
45                         let num = player.number;
46                         if (num !== '' && num !== undefined) {
47                                 continue;
48                         }
49                         num = 1;
50                         while (used_numbers.hasOwnProperty(num)) { ++num; }
51                         player.number = '' + num;
52                         used_numbers[num] = 1;
53                 }
54
55                 for (const player of players) {
56                         let number = player.number;
57                         let display_number = player.display_number;
58                         if (number === '') {
59                                 number = display_number;
60                         }
61
62                         let text = player.text;
63                         if (display_number !== undefined && display_number !== '') {
64                                 text = "&nbsp;" + display_number + "&nbsp;&nbsp;" + text;
65                         }
66                         text = text.replace(/\n/, '<br />');
67                         let subtext = player.subtext;
68                         if (subtext === undefined || subtext === '') {
69                                 // subtext = ultimateconfig['tournament_title'];
70                                 subtext = response.values[0][0];
71                         }
72
73                         for (const num of number.split(/;/)) {  // Support multiple numbers.
74                                 l3s[prefix + num] = {
75                                         "num": num,
76                                         "raw_text": player.text,
77                                         "text": text,
78                                         "subtext": subtext
79                                 };
80                                 let image = player.image;
81                                 if (image !== undefined && image.match(/^file:/) !== null) {
82                                         l3s[prefix + num].image = image.match(/^file:(.*)/)[1];
83                                 }
84                         }
85                 }
86                 cb(l3s, sheet);
87         };
88         req.open('GET', 'https://sheets.googleapis.com/v4/spreadsheets/' + ultimateconfig['roster_sheet_id'] + '/values/\'' + sheet + '\'!A1:J50?key=' + ultimateconfig['api_key']);
89         req.send();
90 };
91
92 let current_quick_l3s = [];
93
94 function quicklowerthird()
95 {
96         let code = current_quick_l3s[state['code']];
97         if (code === undefined) {
98                 return;
99         }
100         document.getElementById('lowerthird-headline-content').innerHTML = code.text;
101         document.getElementById('lowerthird-subheading-content').innerHTML = code.subtext;
102         let img = document.getElementById('lowerthird-img');
103         if (code.image !== undefined) {
104                 img.src = code.image;
105                 img.style.display = 'inline';
106         } else {
107                 img.style.display = 'none';
108         }
109         showlowerthird();
110
111         if (state['code'].match(/^C/) === null) {
112                 setTimeout(function() { hidelowerthird(); }, 4000);
113         } else {
114                 setTimeout(function() { hidelowerthird(); }, 6000);
115         }
116 }
117
118 function loadquickl3s(sheets)
119 {
120         let newl3s = {};
121         let num_left = 1;
122
123         for (let prop in sheets) {
124                 if (sheets.hasOwnProperty(prop)) {
125                         ++num_left;
126                 }
127         }
128
129         let cb = function(response, group_name) {
130                 for (let p in response) {
131                         if (response.hasOwnProperty(p)) {
132                                 newl3s[p] = response[p];
133                         }
134                 }
135                 if (--num_left == 0) {
136                         current_quick_l3s = newl3s;
137                 }
138         };
139
140         for (let prop in sheets) {
141                 if (sheets.hasOwnProperty(prop)) {
142                         load_l3(sheets[prop], prop, cb);
143                 }
144         }
145         load_l3('Calls', 'C', cb);
146 }
147
148 // Start by loading calls only
149 loadquickl3s({});