]> git.sesse.net Git - ultimatescore/blobdiff - carousel.js
Add some support in the client for reading key events from a non-core IPv6 Buddy.
[ultimatescore] / carousel.js
index 42639952243dd138936814744ad25e3d2c5ca5bf..3d8d20f03220005760af088b40819a138df13981 100644 (file)
@@ -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<br />" + group_name);
        var tr = document.createElement("tr");
@@ -357,6 +377,25 @@ var fade_in_rows = function(table)
        }
 };
 
+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);
@@ -375,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) &&
@@ -390,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<br />Saturday");
 
        var row_num = 0;
@@ -424,30 +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) {
-//     var teams = parse_teams_from_spreadsheet(response_a);
-//     var games = parse_games_from_spreadsheet(response_a, 'Group A', true);
-//     get_group('Group B', function(response_b) {
-//             teams = teams.concat(parse_teams_from_spreadsheet(response_b));
-//             games = games.concat(parse_games_from_spreadsheet(response_b, 'Group B', true));
-//             get_group('Semifinals', function(response_c) {
-//                     teams = teams.concat(parse_teams_from_spreadsheet(response_c));
-//                     games = games.concat(parse_games_from_spreadsheet(response_c, 'Semifinals', true));
-//                     get_group('Bronze final', function(response_d) {
-//                             teams = teams.concat(parse_teams_from_spreadsheet(response_d));
-//                             games = games.concat(parse_games_from_spreadsheet(response_d, 'Bronze final', true));
-//                             get_group('Final', function(response_e) {
-//                                     teams = teams.concat(parse_teams_from_spreadsheet(response_e));
-//                                     games = games.concat(parse_games_from_spreadsheet(response_e, 'Final', true));
-//                                     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;
+       }
+};
+