X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=carousel.js;h=109f21a72f684c2c6cb68ed6ba81e162b73815eb;hb=165775c5c9cde9d59b980cc100f3f5b5a8c1e436;hp=1a38e1b7d077fd17251333fa9ad14996c067da52;hpb=231cd2afa993da2491e734e6be8246ba32d215d2;p=ultimatescore diff --git a/carousel.js b/carousel.js index 1a38e1b..109f21a 100644 --- a/carousel.js +++ b/carousel.js @@ -1,5 +1,21 @@ 'use strict'; +function jsonclone(x) +{ + return JSON.parse(JSON.stringify(x)); +} + +// Log with deep clone, so that the browser will show the object at time of log, +// instead of what it looks like at time of view. +function dlog() +{ + let args = []; + for (const arg of arguments) { + args.push(jsonclone(arg)); + } + console.log(args); +} + function addheading(carousel, colspan, content) { let thead = document.createElement("thead"); @@ -10,19 +26,21 @@ function addheading(carousel, colspan, content) tr.appendChild(th); thead.appendChild(tr); carousel.appendChild(thead); -}; +} + function addtd(tr, className, content) { let td = document.createElement("td"); td.appendChild(document.createTextNode(content)); td.className = className; tr.appendChild(td); -}; +} + function addth(tr, className, content) { let th = document.createElement("th"); th.appendChild(document.createTextNode(content)); th.className = className; tr.appendChild(th); -}; +} function subrank_partitions(games, parts, start_rank, tiebreakers, func) { let result = []; @@ -391,9 +409,21 @@ function parse_games_from_spreadsheet(response, group_name, include_unplayed) { return games; }; -function apply_games_to_teams(games, teams) +function apply_games_to_teams(games, teams, ignored_teams, ret_ignored_games) { let teams_to_idx = make_teams_to_idx(teams); + let ignored_teams_idx; + if (ignored_teams === undefined) { + ignored_teams_idx = []; + } else { + ignored_teams_idx = make_teams_to_idx(ignored_teams); + } + for (let i = 0; i < teams.length; ++i) { + teams[i].nplayed = 0; + teams[i].goals = 0; + teams[i].gd = 0; + teams[i].pts = 0; + } for (let i = 0; i < games.length; ++i) { let idx1 = teams_to_idx[games[i].name1]; let idx2 = teams_to_idx[games[i].name2]; @@ -403,6 +433,23 @@ function apply_games_to_teams(games, teams) games[i].score1 == games[i].score2) { continue; } + + let ignored_idx1 = ignored_teams_idx[games[i].name1]; + let ignored_idx2 = ignored_teams_idx[games[i].name2]; + if (ignored_idx1 !== undefined || ignored_idx2 !== undefined) { + if (ret_ignored_games !== undefined) { + // Figure out whether the fifth we're ignoring was only picked out arbitrarily + // (ie., there's a tie for 5th); if so, mark it as such. + let arbitrary = false; + if (ignored_idx1 !== undefined && ignored_teams[ignored_idx1].rank < 5) { + arbitrary = true; + } else if (ignored_idx2 !== undefined && ignored_teams[ignored_idx2].rank < 5) { + arbitrary = true; + } + ret_ignored_games.push([teams[idx1].shortname, teams[idx2].shortname, arbitrary]); + } + continue; + } ++teams[idx1].nplayed; ++teams[idx2].nplayed; teams[idx1].goals += games[i].score1; @@ -428,7 +475,7 @@ function filter_teams(teams, response) let idx1 = teams_to_idx[games[i].name1]; let idx2 = teams_to_idx[games[i].name2]; if (idx1 !== undefined) { - ++teams[idx1].ngames; + ++teams[idx1].ngames; // FIXME: shouldn't nplayed be just as good? } if (idx2 !== undefined) { ++teams[idx2].ngames; @@ -670,7 +717,14 @@ function showschedule(page) { let teams = []; let games = []; - let num_left = 5; + let groups_to_get = [ + 'Group A', + 'Group B', + // 'Group C', + // 'Playoffs 9th-13th', + 'Playoffs' + ]; + let num_left = groups_to_get.length; let cb = function(response, group_name) { teams = teams.concat(parse_teams_from_spreadsheet(response)); @@ -680,11 +734,9 @@ function showschedule(page) } }; - get_group('Group A', cb); - get_group('Group B', cb); - get_group('Group C', cb); - get_group('Playoffs', cb); - get_group('Playoffs 9th-13th', cb); + for (const group of groups_to_get) { + get_group(group, cb); + } }; function do_series(series) @@ -706,7 +758,14 @@ function showcarousel() let games_per_group = []; let combined_teams = []; let combined_games = []; - let num_left = 5; + let groups_to_get = [ + 'Group A', + 'Group B', + // 'Group C', + // 'Playoffs 9th-13th', + 'Playoffs' + ]; + let num_left = groups_to_get.length; let cb = function(response, group_name) { let teams = parse_teams_from_spreadsheet(response); @@ -722,10 +781,6 @@ function showcarousel() [ 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_group_parsed(teams_per_group['Group C'], games_per_group['Group C'], 'Group C'); } ], - [ 2000, function() { hidetable(); } ], - [ 13000, function() { display_group_parsed(teams_per_group['Playoffs 9th-13th'], games_per_group['Playoffs 9th-13th'], 'Playoffs 9th–13th'); } ], [ 2000, function() { hidetable(); } ] ]; let num_pages = find_num_pages(combined_games); @@ -738,11 +793,9 @@ function showcarousel() } }; - get_group('Group A', cb); - get_group('Group B', cb); - get_group('Group C', cb); - get_group('Playoffs 9th-13th', cb); - get_group('Playoffs', cb); + for (const group of groups_to_get) { + get_group(group, cb); + } }; function stopcarousel()