]> git.sesse.net Git - ultimatescore/blobdiff - carousel.js
Bring the graphics into the current day and age.
[ultimatescore] / carousel.js
index cf4e5751d23bd17a77832614d731a59167371338..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);
 }
@@ -21,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 = [];
@@ -402,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];
@@ -414,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;
@@ -439,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;