X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=carousel.js;h=3d8d20f03220005760af088b40819a138df13981;hb=f7bfc5011e5c9122235b14fc4133591ffe671173;hp=240ad26e51c3f1f4f633af6e461ea338fc16d370;hpb=a5a763cf5c3a27cdf08b089cd59e8af129684a02;p=ultimatescore diff --git a/carousel.js b/carousel.js index 240ad26..3d8d20f 100644 --- a/carousel.js +++ b/carousel.js @@ -187,7 +187,8 @@ rank = function(games, teams, start_rank, tiebreakers) { for (i = 0; i < games.length; ++i) { var idx1 = teams_to_idx[games[i].name1]; var idx2 = teams_to_idx[games[i].name2]; - if (idx1 !== undefined && idx2 !== undefined) { + if (idx1 !== undefined && idx2 !== undefined && + !isNaN(games[i].score1) && isNaN(games[i].score2)) { teams[idx1].h2h_gd += games[i].score1; teams[idx1].h2h_gd -= games[i].score2; teams[idx2].h2h_gd += games[i].score2; @@ -251,30 +252,48 @@ parse_teams_from_spreadsheet = function(response) { parse_games_from_spreadsheet = function(response, group_name, include_unplayed) { var games = []; - for (var i = 12; response.values[i] !== undefined && response.values[i].length >= 1; ++i) { + var i; + for (i = 0; i < response.values.length; ++i) { + if (response.values[i][0] === 'Results') { + i += 2; + break; + } + } + + for ( ; response.values[i] !== undefined && response.values[i].length >= 1; ++i) { if ((response.values[i][2] && response.values[i][3]) || include_unplayed) { + var real_group_name = response.values[i][8]; + if (real_group_name === undefined) { + real_group_name = group_name; + } games.push({ "name1": response.values[i][0], "name2": response.values[i][1], "score1": parseInt(response.values[i][2]), "score2": parseInt(response.values[i][3]), "streamtime": response.values[i][7], - "group_name": group_name + "group_name": real_group_name }); } } return games; }; -var display_group = function(response, group_name) { +var display_group = function(response, group_name) +{ var teams = parse_teams_from_spreadsheet(response); var games = parse_games_from_spreadsheet(response, group_name, false); + display_group_parsed(teams, games, group_name); +}; +var display_group_parsed = function(teams, games, group_name) +{ var teams_to_idx = make_teams_to_idx(teams); for (i = 0; i < games.length; ++i) { var idx1 = teams_to_idx[games[i].name1]; var idx2 = teams_to_idx[games[i].name2]; if (games[i].score1 === undefined || games[i].score2 === undefined || + isNaN(games[i].score1) || isNaN(games[i].score2) || idx1 === undefined || idx2 === undefined || games[i].score1 == games[i].score2) { continue; @@ -298,6 +317,7 @@ var display_group = function(response, group_name) { teams = rank(games, teams, 1, tiebreakers); var carousel = document.getElementById('carousel'); + clear_carousel(carousel); addheading(carousel, 5, "Current standings, TrønDisk 2017
" + group_name); var tr = document.createElement("tr"); @@ -319,14 +339,12 @@ var display_group = function(response, group_name) { addtd(tr, "gd", teams[i].gd.toString().replace(/-/, '−')); addtd(tr, "pts", teams[i].pts); - tr.style = "-webkit-animation: fade-in 1.0s ease; -webkit-animation-delay: " + 0.25 * (row_num++) + "s; -webkit-animation-fill-mode: both;"; carousel.appendChild(tr); } if (tiebreakers.length > 0) { var tie_tr = document.createElement("tr"); tie_tr.className = "footer"; - tie_tr.style = "-webkit-animation: fade-in 2.0s ease; -webkit-animation-delay: " + 0.25 * (row_num++) + "s; -webkit-animation-fill-mode: both;"; var td = document.createElement("td"); td.appendChild(document.createTextNode("Tiebreaks applied: " + tiebreakers.join(', '))); td.setAttribute("colspan", "5"); @@ -336,16 +354,48 @@ var display_group = function(response, group_name) { var footer_tr = document.createElement("tr"); footer_tr.className = "footer"; - footer_tr.style = "-webkit-animation: fade-in 2.0s ease; -webkit-animation-delay: " + 0.25 * (row_num++) + "s; -webkit-animation-fill-mode: both;"; var td = document.createElement("td"); td.appendChild(document.createTextNode("www.trondheimfrisbeeklubb.no | #trøndisk")); td.setAttribute("colspan", "5"); footer_tr.appendChild(td); carousel.appendChild(footer_tr); + fade_in_rows(carousel); + carousel.style.display = 'table'; }; +var fade_in_rows = function(table) +{ + var trs = table.getElementsByTagName("tr"); + for (var i = 1; i < trs.length; ++i) { // The header already has its own fade-in. + if (trs[i].className === "footer") { + trs[i].style = "-webkit-animation: fade-in 1.0s ease; -webkit-animation-delay: " + (0.25 * i) + "s; -webkit-animation-fill-mode: both;"; + } else { + trs[i].style = "-webkit-animation: fade-in 2.0s ease; -webkit-animation-delay: " + (0.25 * i) + "s; -webkit-animation-fill-mode: both;"; + } + } +}; + +var fade_out_rows = function(table) +{ + var trs = table.getElementsByTagName("tr"); + for (var i = 0; i < trs.length; ++i) { + if (trs[i].className === "footer") { + trs[i].style = "-webkit-animation: fade-out 1.0s ease; -webkit-animation-delay: " + (0.125 * i) + "s; -webkit-animation-fill-mode: both;"; + } else { + trs[i].style = "-webkit-animation: fade-out 1.0s ease; -webkit-animation-delay: " + (0.125 * i) + "s; -webkit-animation-fill-mode: both;"; + } + } +}; + +var clear_carousel = function(table) +{ + while (table.childNodes.length > 0) { + table.removeChild(table.firstChild); + } +}; + // Stream schedule var display_stream_schedule = function(response, group_name) { var teams = parse_teams_from_spreadsheet(response); @@ -364,7 +414,7 @@ var display_stream_schedule_parsed = function(teams, games) { // Pick out a reasonable place to start the list. We'll show the last // completed match and start from there. - var max_list_len = 7; + var max_list_len = 8; var start_idx = games.length - 1; for (var i = 0; i < games.length; ++i) { if (isNaN(games[i].score1) || isNaN(games[i].score2) && @@ -379,6 +429,7 @@ var display_stream_schedule_parsed = function(teams, games) { } var carousel = document.getElementById('carousel'); + clear_carousel(carousel); addheading(carousel, 3, "Stream schedule, TrønDisk 2017
Saturday"); var row_num = 0; @@ -398,10 +449,12 @@ var display_stream_schedule_parsed = function(teams, games) { addth(tr, "streamtime", games[i].streamtime); } - tr.style = "-webkit-animation: fade-in 1.0s ease; -webkit-animation-delay: " + 0.25 * (row_num++) + "s; -webkit-animation-fill-mode: both;"; + row_num++; carousel.appendChild(tr); } + fade_in_rows(carousel); + carousel.style.display = 'table'; }; @@ -411,20 +464,93 @@ var get_group = function(group_name, cb) req.onload = function(e) { cb(JSON.parse(req.responseText), group_name); }; - req.open('GET', 'https://sheets.googleapis.com/v4/spreadsheets/1CwRHQtpokVMGTPJu2FYYG-6rnG7OfISIcEHwBfXh-Y4/values/\'' + group_name + '\'!A1:H25?key=AIzaSyAuP9yQn8g0bSay6r_RpGtpFeIbwprH1TU'); + req.open('GET', 'https://sheets.googleapis.com/v4/spreadsheets/1CwRHQtpokVMGTPJu2FYYG-6rnG7OfISIcEHwBfXh-Y4/values/\'' + group_name + '\'!A1:J50?key=AIzaSyAuP9yQn8g0bSay6r_RpGtpFeIbwprH1TU'); req.send(); }; -//get_group('Group A', display_group); -//get_group('Group A', display_stream_schedule); -//get_group('Group A', function(response_a) { -// get_group('Group B', function(response_b) { -// var teams = parse_teams_from_spreadsheet(response_a); -// var games = parse_games_from_spreadsheet(response_a, 'Group A', true); -// teams = teams.concat(parse_teams_from_spreadsheet(response_b)); -// games = games.concat(parse_games_from_spreadsheet(response_b, 'Group B', true)); -// console.log(teams); -// console.log(games); -// display_stream_schedule_parsed(teams, games); -// }); -//}); +var showgroup = function(group_name) +{ + get_group(group_name, display_group); +}; + +var carousel_timeout = null; + +var hidetable = function() +{ + fade_out_rows(document.getElementById('carousel')); +}; + +var showschedule = function() +{ + var teams = []; + var games = []; + var num_left = 3; + + var cb = function(response, group_name) { + teams = teams.concat(parse_teams_from_spreadsheet(response)); + games = games.concat(parse_games_from_spreadsheet(response, group_name, true)); + if (--num_left == 0) { + display_stream_schedule_parsed(teams, games); + } + }; + + get_group('Group A', cb); + get_group('Group B', cb); + get_group('Playoffs', cb); +}; + +var do_series = function(series) +{ + do_series_internal(series, 0); +}; + +var do_series_internal = function(series, idx) +{ + (series[idx][1])(); + if (idx + 1 < series.length) { + carousel_timeout = setTimeout(function() { do_series_internal(series, idx + 1); }, series[idx][0]); + } +}; + +var showcarousel = function() +{ + var teams_per_group = []; + var games_per_group = []; + var combined_teams = []; + var combined_games = []; + var num_left = 3; + + var cb = function(response, group_name) { + var teams = parse_teams_from_spreadsheet(response); + var games = parse_games_from_spreadsheet(response, group_name, true); + teams_per_group[group_name] = teams; + games_per_group[group_name] = games; + + combined_teams = combined_teams.concat(teams); + combined_games = combined_games.concat(games); + if (--num_left == 0) { + do_series([ + [ 13000, function() { display_group_parsed(teams_per_group['Group A'], games_per_group['Group A'], 'Group A'); } ], + [ 2000, function() { hidetable(); } ], + [ 13000, function() { display_group_parsed(teams_per_group['Group B'], games_per_group['Group B'], 'Group B'); } ], + [ 2000, function() { hidetable(); } ], + [ 13000, function() { display_stream_schedule_parsed(combined_teams, combined_games); } ], + [ 2000, function() { hidetable(); } ] + ]); + } + }; + + get_group('Group A', cb); + get_group('Group B', cb); + get_group('Playoffs', cb); +}; + +var stopcarousel = function() +{ + if (carousel_timeout !== null) { + hidetable(); + clearTimeout(carousel_timeout); + carousel_timeout = null; + } +}; +