3 function load_l3(sheet, prefix, cb)
5 let req = new XMLHttpRequest();
6 req.onload = function(e) {
7 let response = JSON.parse(req.responseText);
10 for (i = 0; i < response.values.length; ++i) {
11 if (response.values[i][0] === 'Number' ||
12 response.values[i][0] === 'Fake #') {
19 for ( ; response.values[i] !== undefined && response.values[i].length >= 3; ++i) {
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]
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;
34 for (let player of players) {
35 let num = player.number;
36 if (num !== '' && num !== undefined) {
39 num = parseInt(player.display_number);
40 if (num >= 1 && num <= 999 && !used_numbers.hasOwnProperty(num)) {
41 player.number = '' + num;
44 for (let player of players) {
45 let num = player.number;
46 if (num !== '' && num !== undefined) {
50 while (used_numbers.hasOwnProperty(num)) { ++num; }
51 player.number = '' + num;
52 used_numbers[num] = 1;
55 for (const player of players) {
56 let number = player.number;
57 let display_number = player.display_number;
59 number = display_number;
62 let text = player.text;
63 if (display_number !== undefined && display_number !== '') {
64 text = " " + display_number + " " + text;
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];
73 for (const num of number.split(/;/)) { // Support multiple numbers.
76 "raw_text": player.text,
80 let image = player.image;
81 if (image !== undefined && image.match(/^file:/) !== null) {
82 l3s[prefix + num].image = image.match(/^file:(.*)/)[1];
88 req.open('GET', 'https://sheets.googleapis.com/v4/spreadsheets/' + ultimateconfig['roster_sheet_id'] + '/values/\'' + sheet + '\'!A1:J50?key=' + ultimateconfig['api_key']);
92 let current_quick_l3s = [];
94 function quicklowerthird()
96 let code = current_quick_l3s[state['code']];
97 if (code === undefined) {
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';
107 img.style.display = 'none';
111 if (state['code'].match(/^C/) === null) {
112 setTimeout(function() { hidelowerthird(); }, 4000);
114 setTimeout(function() { hidelowerthird(); }, 6000);
118 function loadquickl3s(sheets)
123 for (let prop in sheets) {
124 if (sheets.hasOwnProperty(prop)) {
129 let cb = function(response, group_name) {
130 for (let p in response) {
131 if (response.hasOwnProperty(p)) {
132 newl3s[p] = response[p];
135 if (--num_left == 0) {
136 current_quick_l3s = newl3s;
140 for (let prop in sheets) {
141 if (sheets.hasOwnProperty(prop)) {
142 load_l3(sheets[prop], prop, cb);
145 load_l3('Calls', 'C', cb);
148 // Start by loading calls only