mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 17:36:40 +00:00
First version of leaderboard that works - not good but shows right
numbers
This commit is contained in:
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> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='2'>
|
||||
<td colid='1'>
|
||||
@@ -429,6 +440,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='3'>
|
||||
<td colid='1'>
|
||||
@@ -446,6 +460,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='4'>
|
||||
<td colid='1'>
|
||||
@@ -463,6 +480,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='5'>
|
||||
<td colid='1'>
|
||||
@@ -480,6 +500,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='6'>
|
||||
<td colid='1'>
|
||||
@@ -497,6 +520,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='7'>
|
||||
<td colid='1'>
|
||||
@@ -514,6 +540,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='8'>
|
||||
<td colid='1'>
|
||||
@@ -531,6 +560,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='9'>
|
||||
<td colid='1'>
|
||||
@@ -548,6 +580,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='10'>
|
||||
<td colid='1'>
|
||||
@@ -565,6 +600,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='11'>
|
||||
<td colid='1'>
|
||||
@@ -582,6 +620,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='12'>
|
||||
<td colid='1'>
|
||||
@@ -599,6 +640,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='13'>
|
||||
<td colid='1'>
|
||||
@@ -616,6 +660,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='14'>
|
||||
<td colid='1'>
|
||||
@@ -633,6 +680,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='15'>
|
||||
<td colid='1'>
|
||||
@@ -650,6 +700,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='16'>
|
||||
<td colid='1'>
|
||||
@@ -667,6 +720,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='17'>
|
||||
<td colid='1'>
|
||||
@@ -684,6 +740,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='18'>
|
||||
<td colid='1'>
|
||||
@@ -701,6 +760,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='19'>
|
||||
<td colid='1'>
|
||||
@@ -718,6 +780,9 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='20'>
|
||||
<td colid='1'>
|
||||
@@ -735,221 +800,14 @@
|
||||
<td colid='5'>
|
||||
<span> </span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span> </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>
|
||||
|
||||
Reference in new issue
Block a user