mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 17:36:40 +00:00
Fixed leaderboard with live data - works as expected now
This commit is contained in:
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'>
|
||||
|
||||
@@ -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> </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>
|
||||
@@ -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']]
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user