]> git.sesse.net Git - ultimatescore/blobdiff - carousel.js
Ole and Eivind want config changes.
[ultimatescore] / carousel.js
index 00da45cd39529ef3bd1aed7e6a4976955d331a5b..0dda4750cfa8f57b2a5809ba4ab03bb1f2b58ad6 100644 (file)
@@ -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 = [];
@@ -351,6 +369,7 @@ function parse_teams_from_spreadsheet(response) {
                        "mediumname": response.values[i][1],
                        "shortname": response.values[i][2],
                        //"tags": response.values[i][3],
+                       "ngames": 0,
                        "nplayed": 0,
                        "gd": 0,
                        "pts": 0,
@@ -390,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];
@@ -402,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;
@@ -418,6 +466,24 @@ function apply_games_to_teams(games, teams)
        }
 }
 
+// So that we can just have one team list, and let membership be defined by games.
+function filter_teams(teams, response)
+{
+       let teams_to_idx = make_teams_to_idx(teams);
+       let games = parse_games_from_spreadsheet(response, 'irrelevant group name', true);
+       for (let i = 0; i < games.length; ++i) {
+               let idx1 = teams_to_idx[games[i].name1];
+               let idx2 = teams_to_idx[games[i].name2];
+               if (idx1 !== undefined) {
+                       ++teams[idx1].ngames;  // FIXME: shouldn't nplayed be just as good?
+               }
+               if (idx2 !== undefined) {
+                       ++teams[idx2].ngames;
+               }
+       }
+       return teams.filter(function(team) { return team.ngames > 0; });
+}
+
 function display_group_parsed(teams, games, group_name)
 {
        document.getElementById('entire-bug').style.display = 'none';
@@ -628,6 +694,7 @@ function showgroup(group_name)
        get_group(group_name, function(response, group_name) {
                let teams = parse_teams_from_spreadsheet(response);
                let games = parse_games_from_spreadsheet(response, group_name, false);
+               teams = filter_teams(teams, response);
                display_group_parsed(teams, games, group_name);
                publish_group_rank(response, group_name);  // Update the spreadsheet in the background.
        });
@@ -650,7 +717,7 @@ function showschedule(page)
 {
        let teams = [];
        let games = [];
-       let num_left = 4;
+       let num_left = 5;
 
        let cb = function(response, group_name) {
                teams = teams.concat(parse_teams_from_spreadsheet(response));
@@ -664,6 +731,7 @@ function showschedule(page)
        get_group('Group B', cb);
        get_group('Group C', cb);
        get_group('Playoffs', cb);
+       get_group('Playoffs 9th-13th', cb);
 };
 
 function do_series(series)
@@ -685,11 +753,12 @@ function showcarousel()
        let games_per_group = [];
        let combined_teams = [];
        let combined_games = [];
-       let num_left = 4;
+       let num_left = 5;
 
        let cb = function(response, group_name) {
                let teams = parse_teams_from_spreadsheet(response);
                let games = parse_games_from_spreadsheet(response, group_name, true);
+               teams = filter_teams(teams, response);
                teams_per_group[group_name] = teams;
                games_per_group[group_name] = games;
 
@@ -702,6 +771,8 @@ function showcarousel()
                                [ 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);
@@ -717,6 +788,7 @@ 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);
 };