Fixed leaderboard with live data - works as expected now

This commit is contained in:
Simon Pamies committed 2011-06-14 22:59:32 +02:00
1 parent 995a2cd647
commit 497ca3df21
6 files changed
+42 -60

No files matched your search

@@ -327,15 +327,13 @@ def liveRaceInformation(configurator):
dc_leg_values['upOrDownWindLeg'] = leg['upordownwindleg']
# compute gains and losses (places, )
if legcount == 0:
if lcount == 0:
# for the first leg just put 0 into data
dc_leg_values['gainsAndLossesInPlaces'] = 0
else:
# search for the last place
last_rank_computed = c_marks[raceindex][lcount-1]
if last_rank_computed > c_current_rank:
dc_leg_values['gainsAndLossesInPlaces'] = c_current_rank - last_rank_computed
else: dc_leg_values['gainsAndLossesInPlaces'] = last_rank_computed - c_current_rank
dc_leg_values['gainsAndLossesInPlaces'] = last_rank_computed - c_values[raceindex][lcount]['rank']
c_values[raceindex][lcount] = dc_leg_values
@@ -181,6 +181,9 @@ class BaseView(object):
if name[0] == 'ETASEC':
val = '%.f:%.f' % (int(value) / 60, int(value)-( (int(value)/60)*60 ))
if name[0] == 'GLP' and value > 0:
val = '+%s' % value
return val
def callFunction(context, request):
@@ -536,14 +536,17 @@ def moderatorLiveData(context, request):
race_range = request.params.get('races', '1:3')
competitor_range = request.params.get('competitors', '1:20')
direction = request.params.get('direction', 'asc');
colmode = request.params.get('colmode')
columns = view.configuredColumns(colmode)
if race_range in ['null', 'undefined']:
race_range = '1:3'
race_start_index, race_end_index = race_range.split(':')
races_list = event.races[int(race_start_index)-1:int(race_end_index)]
competitors = view.competitorsSortedBy(event.name, sortby.strip())
competitors = view.competitorsSortedBy(event.name, sortby.strip(), colmode)
if direction == 'asc':
competitors.reverse()
@@ -573,20 +576,15 @@ def moderatorLiveData(context, request):
markranks[racecounter] = markranks[racecounter] + competitor.marks[real_racepos]
iv = competitor.values[real_racepos]
cvalues = []
for legvalue_for_race in competitor.values[real_racepos]:
result = []
for column in columns:
result.append(view.displayLegValue(column, legvalue_for_race.get(column[-1])))
newvalues = iv
for valpos in range(len(iv)):
nv = ['%.2f' % (val < 15000 and val or 0.0) for val in newvalues[valpos]]
cvalues.append(result)
# prepare values according to UI
# UI: RANK, DSTTRAV, SPEED, VMG, SGAP, DSTGO, ETA
# INTERN: RANK, AVGSPEED, DSTRV, VMG, AVMG, SGAP, ETA, DSTGO
if nv:
nv = [nv[0], nv[2], nv[1], nv[3], nv[5], nv[-1], nv[-2]]
newvalues[valpos] = nv
legvalues[racecounter] = legvalues[racecounter] + newvalues
legvalues[racecounter] = legvalues[racecounter] + cvalues
racecounter += 1
@@ -15,10 +15,10 @@ var listener_paused = false;
* sortby: Sorting parameters (e.g "1,1,1")
* competitors: Slice indicating which competitors to show (e.g. "1:20")
*/
function loadLeaderboard(races, sortby, competitors, direction) {
function loadLeaderboard(races, sortby, competitors, direction, colmode) {
showLoader();
$.getJSON('/++/moderatorLiveData',
{races:races, sortby:sortby, competitors:competitors, direction:direction},
{races:races, sortby:sortby, competitors:competitors, direction:direction,colmode:colmode},
function(data) {
displayLeaderboard(data);
@@ -34,7 +34,7 @@ function loadLeaderboard(races, sortby, competitors, direction) {
function liveRefresh() {
if (listener_paused == false)
loadLeaderboard(global_race, global_sortkey, global_competitors, global_direction);
loadLeaderboard(global_race, global_sortkey, global_competitors, global_direction, global_colmode);
}
function toggleListener() {
@@ -67,7 +67,7 @@ function sortBy(param, element) {
else global_direction = 'desc';
global_sortkey = param;
loadLeaderboard(global_race, param, global_competitors, global_direction);
loadLeaderboard(global_race, param, global_competitors, global_direction, global_colmode);
}
function yieldValue(element, newvalue) {
@@ -159,6 +159,6 @@ $(document).ready(function() {
$.ajaxSetup({cache:false});
loadLeaderboard(global_race, global_sortkey, global_competitors, global_direction);
loadLeaderboard(global_race, global_sortkey, global_competitors, global_direction, global_colmode);
window.setInterval('liveRefresh()', 5000);
});
@@ -6,7 +6,8 @@
</head>
<body class='race-1' tal:define="event view.currentLeaderboardEvent();
racebundles [event.races[i:i+3] for i in xrange(0, len(event.races), 3)];
firstbundle racebundles[:3]; lastbundle racebundles[3:]">
firstbundle racebundles[:3]; lastbundle racebundles[3:];
columns view.configuredColumns('LEADERBOARD-%s' % request.params.get('c', 'F1'))">
<div id='rootwrapper'>
<div id='header'>
&nbsp;
@@ -135,50 +136,24 @@
<table class='race-table' id='r1-m1' style="display:none;">
<thead>
<tr>
<th colid='1'>
<span>DSTTRV</span>
</th>
<th colid='2'>
<span>SPEED</span>
</th>
<th colid='3'>
<span>VMG</span>
</th>
<th colid='4'>
<span>SGAP</span>
</th>
<th colid='5'>
<span>DSTGO</span>
</th>
<th colid='6'>
<span>ETA</span>
<tal:for repeat="column columns[1:]">
<th colid='${repeat["column"].number}'>
<span>${column[0]}</span>
</th>
</tal:for>
</tr>
</thead>
<tbody>
<tr rowid='0'>
<td class='table-sorting' colid='1'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},3", $(this))'></a>
</td>
<td class='table-sorting' colid='2'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},2", $(this))'></a>
</td>
<td class='table-sorting' colid='3'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},4", $(this))'></a>
</td>
<td class='table-sorting' colid='4'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},6", $(this))'></a>
</td>
<td class='table-sorting' colid='5'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},8", $(this))'></a>
</td>
<td class='table-sorting' colid='6'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},7", $(this))'></a>
<tal:for repeat="column columns[1:]">
<td class='table-sorting' colid='${repeat["column"].number}'>
<a class='sort-asc' href='javascript:;' onclick='sortBy("${raceid},${markid},${repeat["column"].number}", $(this))'></a>
</td>
</tal:for>
</tr>
<tal:for repeat="valrow range(1,21)">
<tr class='odd' id='race-${raceid}-valrow-${valrow}'>
<tal:for repeat="valrowpos range(1,7)">
<tal:for repeat="valrowpos range(1,len(columns[1:])+1)">
<td id='race-${raceid}-mark-${markid}-valrow-${valrow}-pos-${valrowpos}'>
<span>&nbsp;</span>
</td>
@@ -196,5 +171,11 @@
</div>
</body>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'></script>
<script>
global_colmode = 'LEADERBOARD-${request.params.get('c', 'F1')}';
</script>
<script src='/moderator-static/app.js' type='text/javascript'></script>
</html>
+4 -2
View File
@@ -32,7 +32,7 @@ VN = {
'CSPDMS' : ('CSPDMS', 'Current Speed (m/s)', '%.1f', 'currentSpeedOverGroundInMetersPerSecond'),
'ASPDKNOT': ('ASPDKN', 'Avg Speed (kn)', '%.1f', 'averageSpeedOverGroundInKnots'),
'ASPDMS' : ('ASPDMS', 'Avg Speed (m/s)', '%.1f', 'averageSpeedOverGroundInMetersPerSecond'),
'DSTTRV' : ('DSTTRV', 'Distance Travelled (m)', '%.f', 'distanceTraveledOverGroundInMeters'),
'DSTTRV' : ('DSTTRV', 'Distance Travelled (m)', '%.1f', 'distanceTraveledOverGroundInMeters'),
'VMGKNOT': ('VMGKN', 'VMG (kn)', '%.1f', 'velocityMadeGoodInKnots'),
'VMGMS' : ('VMGMS', 'VMG (m/s)', '%.1f', 'velocityMadeGoodInMetersPerSecond'),
'AVMGKNOT': ('AVMGKN', 'Avg VMG (kn)', '%.1f', 'averageVelocityMadeGoodInKnots'),
@@ -53,6 +53,8 @@ COLUMN_MODE_NAMES = {
'LEADERBOARD-STATIC':
[VN['RANK'], VN['CSPDMS'], VN['DSTTRV'], VN['VMGMS'], VN['GLP']],
'LEADERBOARD-F1':
[VN['RANK'], VN['GAPSEC'], VN['ASPDMS'], VN['DSTTRV'], VN['GLP']]
[VN['RANK'], VN['GAPSEC'], VN['ASPDMS'], VN['DSTTRV'], VN['GLP']],
'LEADERBOARD-F2':
[VN['RANK'], VN['GAPSEC'], VN['GLP']]
}