From 157d38e305f2144e546ec1e964292477cae9516d Mon Sep 17 00:00:00 2001 From: emkael Date: Thu, 7 Sep 2017 12:12:16 +0200 Subject: Renaming HTTP resource directories to prefixed names --- http/_res/group-ranking.js | 193 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 http/_res/group-ranking.js (limited to 'http/_res/group-ranking.js') diff --git a/http/_res/group-ranking.js b/http/_res/group-ranking.js new file mode 100644 index 0000000..cbcb2ed --- /dev/null +++ b/http/_res/group-ranking.js @@ -0,0 +1,193 @@ +$(document).ready(function() { + $('div.panel').eq(2).hide(); + $.getJSON('_data/group-data.json', function(data) { + var minRating = Number.POSITIVE_INFINITY; + for (var pid in data) { + if (data[pid].score < minRating) { + minRating = data[pid].score; + } + }; + $(document).trigger( + 'rankingLoaded', + { + ranks: data, + minRating: minRating + } + ); + }); +}); + +$(document).on('rankingLoaded', function(ev, params) { + + var getScore = function(pid) { + if (params.ranks[pid]) { + return params.ranks[pid].score || + Math.max( + 0.1, Math.min( + params.minRating, params.ranks[pid].rank * 2.0 + ) + ); + } + return 0.1; + }; + + var getPlace = function(pid) { + if (params.ranks[pid]) { + return params.ranks[pid].place || 1500; + } + return 1500; + }; + + var averages = { + place: function() { + var sum = 0.0; + for (var p = 0; p < arguments.length; p++) { + sum += getPlace(arguments[p].pid); + } + return sum / arguments.length; + }, + arithmetic: function() { + var sum = 0.0; + for (var p = 0; p < arguments.length; p++) { + sum += getScore(arguments[p].pid); + } + return sum / arguments.length; + }, + geometric: function() { + var product = 1.0; + for (var p = 0; p < arguments.length; p++) { + product *= getScore(arguments[p].pid); + } + return Math.pow(product, 1.0/arguments.length); + }, + harmonic: function() { + var sum = 0.0; + for (var p = 0; p < arguments.length; p++) { + sum += 1.0 / getScore(arguments[p].pid); + } + return arguments.length / sum; + } + }; + + var tourRowTemplate = $(''); + + $('div.panel').eq(1).hide(); + $('div.panel').eq(2).show(); + + $('#group-results').hide(); + + $('#group-submit').on('click', function() { + $('#group-results tr').not('.mean').remove(); + var players = + $('#group-pids').val().trim().split("\n").filter( + function(text) { + return text.trim().length > 0; + } + ).map(function(str) { + return { pid: parseInt(str.trim()) }; + }); + players.forEach(function(pl) { + $('#group-results tbody').prepend( + $( + 'PID: ' + + pl.pid + + '' + + getPlace(pl.pid) + + '.' + + getScore(pl.pid) + + '' + ) + ); + }); + for (var f in averages) { + $('#group-results td.mean-' + f).text(Math.round( + averages[f].apply(this, players) * 100 + ) / 100); + } + $('#group-results').show(); + }); + + var tourTable = $('#tournament-table'); + tourTable.hide(); + var tourSort = new Tablesort( + tourTable[0], + { descending: true } + ); + + $('#tournament-file').fileinput({ + showPreview: false, + showUpload: false, + showRemove: false, + allowedFileTypes: ['html'], + allowedFileExtensions: ['html'], + browseLabel: 'Wybierz...' + }).on('change', function(ev) { + if (ev.target.files.length > 0) { + var reader = new FileReader(); + reader.onloadend = function() { + + tourTable.hide(); + + var content = $(reader.result); + var pairs = content.find('tr').filter( + function(i, elem) { + return $(elem).find('td.l').size() > 0; + } + ); + var pairData = pairs.map(function(i, pair) { + pair = $(pair); + var playerCell = pair.find('td.l').eq(0); + var players = playerCell.contents().filter( + function (i, elem) { + return elem.tagName != 'BR'; + } + ).map( + function(i, elem) { + if (elem.tagName == 'A') { + var pidMatch = $(elem).attr('href').match(/http:\/\/www\.msc\.com\.pl\/cezar\/.*&pid=(\d+),*/); + return { + name: $(elem).text(), + pid: pidMatch ? parseInt(pidMatch[1]) : 0 + } + } else { + return { + name: $(elem).text(), + pid: 0 + } + } + } + ); + + return { + place: i+1, + players: players + }; + }); + $('#tournament-table tbody tr').remove(); + pairData.each(function(p, pair) { + var row = tourRowTemplate.clone(); + row.find('td.place').text(pair.place); + row.find('td.pair').text( + $.map( + pair.players, + function(pl) { + return pl.name; + } + ).join(' - ') + ); + for (var f in averages) { + row.find('td.mean-' + f).text(Math.round( + averages[f].apply(this, pair.players) * 100 + ) / 100); + } + $('#tournament-table tbody').append(row); + }); + + $('#tournament-table').show(); + tourSort.refresh(); + + }; + reader.readAsText(ev.target.files[0]); + } + }); +}); -- cgit v1.2.3