]> git.sesse.net Git - ultimatescore/blobdiff - carousel.js
Support the special US4 mode where games against the 5th in the group do not count...
[ultimatescore] / carousel.js
index f8f2f8c69728e54f9a820f3c29d84be01fd5e3d6..0dda4750cfa8f57b2a5809ba4ab03bb1f2b58ad6 100644 (file)
@@ -1,12 +1,17 @@
 '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(JSON.parse(JSON.stringify(arg)));
+               args.push(jsonclone(arg));
        }
        console.log(args);
 }
@@ -404,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];
@@ -416,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;