First version of leaderboard that works - not good but shows right

numbers
This commit is contained in:
Simon Pamies committed 2011-06-13 19:28:03 +02:00
1 parent a9cf3b0f8d
commit cd79b0346a
4 files changed
+201 -222

No files matched your search

@@ -67,7 +67,7 @@ class Competitor(BaseDocument):
'leg_indexes': {}, # holds association between leg position and unique id <position in marks>:<unique id>
'total': float,
'total': int, # total rank
'current_rank': int, # current rank for given time
'races' : [float, ],
'marks' : [[float, ], ], # ranks for marks
@@ -533,3 +533,58 @@ def adminLiveData(context, request):
return results
@jsonize
def moderatorLiveData(context, request):
""" Returns data for the moderators leaderboard """
view = core.BaseView(context, request)
event = view.currentLeaderboardEvent()
sortby = request.params.get('sortby', '')
race_range = request.params.get('races', '1:3')
competitor_range = request.params.get('competitors', '1:20')
race_start_index, race_end_index = race_range.split(':')
races_list = event.races[int(race_start_index)-1:int(race_end_index)]
competitors = model.CompetitorImpl.queryBy(event=event.name)
races = []
for racename in races_list:
races.append(model.RaceImpl.queryOneBy(name=racename, event=event.name))
# list of competitors with corresponding data
data = {}
for competitor in competitors:
racedata = competitor.races[int(race_start_index)-1:int(race_end_index)]
# for each race found compute the marks and values
markranks = []; legvalues = []; racecounter = 0
for racename in races_list:
real_racepos = event.races.index(racename)
if len(markranks) < racecounter+1:
markranks.append([])
legvalues.append([])
markranks[racecounter] = markranks[racecounter] + competitor.marks[real_racepos]
# prepare values according to UI
# UI: RANK, DSTTRAV, SPEED, VMG, SGAP, DSTGO, ETA
# INTERN: RANK, AVGSPEED, DSTRV, VMG, AVMG, SGAP, ETA, DSTGO
iv = competitor.values[real_racepos]
newvalues = [iv[0], iv[2], iv[1], iv[3], iv[5], iv[-1], iv[-2]]
for valpos in range(len(newvalues)):
newvalues[valpos] = ['%.2f' % val for val in newvalues[valpos]]
legvalues[racecounter] = legvalues[racecounter] + newvalues
racecounter += 1
cd = data.setdefault(competitor.name, {})
cd.update({'raceranks': racedata, 'markranks': markranks, 'legvalues': legvalues,
'nationality': competitor.nationality, 'global_rank': competitor.total})
return data
@@ -1,6 +1,72 @@
/*
* Loads leaderboard data. Parameters:
*
* races: Slice that indicates which data to load (e.g. "0:2")
* sortby: Sorting parameters (e.g "1,1,1")
* competitors: Slice indicating which competitors to show (e.g. "0:20")
*/
function loadLeaderboard(races, sortby, competitors) {
$.getJSON('/++/moderatorLiveData',
{races:races, sortby:sortby, competitors:competitors},
function(data) {
displayLeaderboard(data);
}
);
}
/**
* Puts data into the right context for the leaderboard
*/
function displayLeaderboard(data) {
rowid = 1;
for (key in data) {
competitor = data[key];
$('#overall-clipping tr[rowid='+rowid+'] td[colid=3] span').each(function(index) {
if ($(this).html() != key) {
/* competitor position has changed - refresh whole line */
$(this).html(key);
$(this).closest('tr').find('td[colid=2] span').html(competitor.nationality);
$(this).closest('tr').find('td[colid=1] span').html(competitor.global_rank);
/* now set values independent what has been there before */
racepos = 1;
for (racerank in competitor.raceranks) {
$('#race-'+racepos+' .main-box ul li[rowid='+rowid+']').html(competitor.raceranks[racerank]);
markpos = 1;
for (markrank in competitor.markranks[racepos-1]) {
$('#race-'+racepos+' #leg-'+markpos+' .leg-box ul li[rowid='+rowid+']').html(competitor.markranks[racepos-1][markrank]);
legpos = 1;
for (legvalue in competitor.legvalues[racepos-1][markpos-1]) {
if (legvalue == 0) {
$('#race-'+racepos+' #leg-'+markpos+' .table-box ul li[rowid='+rowid+']').html(parseFloat(competitor.legvalues[racepos-1][markpos-1][legvalue]).toFixed());
} else {
$('#r'+racepos+'-m'+markpos+' tr[rowid='+rowid+'] td[colid='+(legpos-1)+'] span').html(competitor.legvalues[racepos-1][markpos-1][legvalue]);
}
legpos += 1;
}
markpos += 1;
}
}
} else {
/* check if values have changed */
}
});
rowid += 1;
}
}
$(document).ready(function() {
var wHeight = $(window).height();
$("#rootwrapper").css("height", wHeight);
$("#appinterface").css("height", wHeight-131);
loadLeaderboard();
});
@@ -35,7 +35,7 @@
<!-- / MAIN INTERFACE -->
<div id='main-interface'>
<div class='blue-table'>
<a class='refresh-btn' href='#'></a>
<a class='refresh-btn' href='javascript:;' onclick='loadLeaderboard();'></a>
<a class='sort-rank sort-asc' href='#'></a>
<table id='overall-clipping'>
<tbody>
@@ -303,10 +303,12 @@
</a>
<a class='main-box-sort sort-asc' href='#'></a>
</div>
<div class='leg-wrap'>
<tal:for repeat="leg event.marks[int(raceid)-1]">
<div class='leg-wrap' id="leg-${repeat['leg'].number}" tal:define='markid repeat["leg"].number'>
<!-- / SECOND ELEMENT WITH LIST -->
<div class='leg-box'>
<span>M1</span>
<span>M${markid}</span>
<a class='leg-box-sort sort-asc' href='#'></a>
<a class='leg-box-active' href='javascript:;' onclick='$(this).closest(".leg-wrap").find(".table-box, .race-table").toggle();'>
<ul>
@@ -333,7 +335,7 @@
</ul>
</a>
</div>
<div class='table-box'>
<div class='table-box' style="display:none;">
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
@@ -358,23 +360,26 @@
</ul>
<a class='table-box-sort sort-asc' href='#'></a>
</div>
<table class='race-table' id='r1-m1'>
<table class='race-table' id='r1-m1' style="display:none;">
<thead>
<tr>
<th colid='1'>
<span>gap</span>
<span>DSTTRV</span>
</th>
<th colid='2'>
<span>a. speed</span>
<span>SPEED</span>
</th>
<th colid='3'>
<span>distance</span>
<span>VMG</span>
</th>
<th colid='4'>
<span>g&l mt</span>
<span>SGAP</span>
</th>
<th colid='5'>
<span>g&l pl</span>
<span>DSTGO</span>
</th>
<th colid='6'>
<span>ETA</span>
</th>
</tr>
</thead>
@@ -395,6 +400,9 @@
<td class='table-sorting' colid='5'>
<a class='sort-asc' href='#'></a>
</td>
<td class='table-sorting' colid='6'>
<a class='sort-asc' href='#'></a>
</td>
</tr>
<tr class='odd' rowid='1'>
<td colid='1'>
@@ -412,6 +420,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='2'>
<td colid='1'>
@@ -429,6 +440,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='3'>
<td colid='1'>
@@ -446,6 +460,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='4'>
<td colid='1'>
@@ -463,6 +480,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='5'>
<td colid='1'>
@@ -480,6 +500,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='6'>
<td colid='1'>
@@ -497,6 +520,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='7'>
<td colid='1'>
@@ -514,6 +540,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='8'>
<td colid='1'>
@@ -531,6 +560,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='9'>
<td colid='1'>
@@ -548,6 +580,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='10'>
<td colid='1'>
@@ -565,6 +600,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='11'>
<td colid='1'>
@@ -582,6 +620,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='12'>
<td colid='1'>
@@ -599,6 +640,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='13'>
<td colid='1'>
@@ -616,6 +660,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='14'>
<td colid='1'>
@@ -633,6 +680,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='15'>
<td colid='1'>
@@ -650,6 +700,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='16'>
<td colid='1'>
@@ -667,6 +720,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='17'>
<td colid='1'>
@@ -684,6 +740,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='18'>
<td colid='1'>
@@ -701,6 +760,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='odd' rowid='19'>
<td colid='1'>
@@ -718,6 +780,9 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
<tr class='even' rowid='20'>
<td colid='1'>
@@ -735,221 +800,14 @@
<td colid='5'>
<span>&nbsp;</span>
</td>
<td colid='6'>
<span>&nbsp;</span>
</td>
</tr>
</tbody>
</table>
</div>
<!-- / REST LEGS -->
<div class='leg-wrap'>
<div class='leg-box'>
<span>M2</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
<div class='leg-wrap'>
<div class='leg-box'>
<span>M3</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
<div class='leg-wrap'>
<div class='leg-box'>
<span>M4</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
<div class='leg-wrap'>
<div class='leg-box'>
<span>M5</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
<div class='leg-wrap'>
<div class='leg-box'>
<span>M6</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
<div class='leg-wrap'>
<div class='leg-box'>
<span>M7</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
<div class='leg-wrap'>
<div class='leg-box'>
<span>M8</span>
<a class='leg-box-sort sort-desc' href='#'></a>
<a class='leg-box-active' href='#'>
<ul>
<li rowid='1'></li>
<li rowid='2'></li>
<li rowid='3'></li>
<li rowid='4'></li>
<li rowid='5'></li>
<li rowid='6'></li>
<li rowid='7'></li>
<li rowid='8'></li>
<li rowid='9'></li>
<li rowid='10'></li>
<li rowid='11'></li>
<li rowid='12'></li>
<li rowid='13'></li>
<li rowid='14'></li>
<li rowid='15'></li>
<li rowid='16'></li>
<li rowid='17'></li>
<li rowid='18'></li>
<li rowid='19'></li>
<li rowid='20'></li>
</ul>
</a>
</div>
</div>
</tal:for>
</div>
</tal:for>
</div>