mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 17:36:40 +00:00
Stable UI with changes based on wishes from Marcus
This commit is contained in:
1 parent
fbca2db572
commit
2fefa1e92e
12 files changed
+168
-478
No files matched your search
@@ -30,11 +30,10 @@ Simon
|
||||
+ Sortierung funktioniert nicht richtig in den Legs und den Werten (der 1. Platz fehlt manchmal)
|
||||
+ Anstatt DropDB lieber ein Removeallby eventname, racename ermöglichen (auch in der DB UI)
|
||||
|
||||
+ Zwei Zeilen in den Titeln
|
||||
+ Wie kriege ich die Bars hin?
|
||||
|
||||
+ Mehrere Rennen anzeigbar und auswählbar machen
|
||||
|
||||
+ iPhone UI implementieren
|
||||
|
||||
+ Wenn Axel Branches eingerichtet hat, dann MongoDBs auf Server startbar machen über supervisord
|
||||
|
||||
@@ -128,6 +128,8 @@ def eventConfiguration(configurator):
|
||||
dbrace = model.RaceImpl()
|
||||
dbrace.update(dict(event=event['name'], name=rc['name']))
|
||||
|
||||
dbrace.update(dict(current_legs=[]))
|
||||
|
||||
# make sure to include start to enable sorting
|
||||
if rc.has_key('start'):
|
||||
dbrace.update(dict(start=rc['start']))
|
||||
@@ -263,6 +265,7 @@ def liveRaceInformation(configurator):
|
||||
# if competitor hasn't started yet we just ignore this leg
|
||||
# and don't update the competitors information for the given leg
|
||||
if competitor.get('started', False) is False:
|
||||
comp.update(dict(current_leg=None))
|
||||
continue
|
||||
|
||||
mark_name = leg['to']
|
||||
@@ -347,7 +350,7 @@ def liveRaceInformation(configurator):
|
||||
# compute total and net points of competitor
|
||||
|
||||
# net points: sum'd ranks of all races
|
||||
net_points = map(sum, c_races)
|
||||
net_points = 0
|
||||
|
||||
# total points: sum'd over ranks of all races but
|
||||
# but for more than ten races discard some values
|
||||
|
||||
@@ -65,6 +65,8 @@ class Competitor(BaseDocument):
|
||||
'event': unicode,
|
||||
'nationality': unicode,
|
||||
|
||||
'current_leg' : int, # denotes the current leg the competitor is in
|
||||
|
||||
'total_points': int,
|
||||
'net_points' : int,
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ log = logging.getLogger(__name__)
|
||||
logging.basicConfig()
|
||||
|
||||
current_leaderboard_event = None
|
||||
current_iphone_event = None
|
||||
|
||||
class BaseView(object):
|
||||
|
||||
@@ -102,6 +103,15 @@ class BaseView(object):
|
||||
|
||||
return cev
|
||||
|
||||
def currentIPhoneEvent(self):
|
||||
cev = model.EventImpl.queryOneBy(name=current_leaderboard_event)
|
||||
|
||||
# XXX remove this - only for tests
|
||||
if not cev:
|
||||
return model.EventImpl.queryBy()[0]
|
||||
|
||||
return cev
|
||||
|
||||
def raceBy(self, event, name):
|
||||
return model.RaceImpl.queryOneBy(event=event, name=name)
|
||||
|
||||
@@ -157,7 +167,7 @@ class BaseView(object):
|
||||
competitors = model.CompetitorImpl.sortedBy(eventname=eventname, raceindex=int(params[0])-1, markindex=int(params[1])-1)
|
||||
elif len(params) == 3:
|
||||
columns = self.configuredColumns(columnmode)
|
||||
competitors = model.CompetitorImpl.sortedBy(eventname=eventname, raceindex=int(params[0])-1, markindex=int(params[1])-1, valueindex=int(params[2])-1, columns=columns)
|
||||
competitors = model.CompetitorImpl.sortedBy(eventname=eventname, raceindex=int(params[0])-1, markindex=int(params[1])-1, valueindex=int(params[2]), columns=columns)
|
||||
|
||||
else:
|
||||
param = int(param.strip())
|
||||
|
||||
@@ -591,7 +591,8 @@ def moderatorLiveData(context, request):
|
||||
dc = {}
|
||||
dc.update({'name': competitor.name[:9], 'raceranks': racedata, 'markranks': markranks, 'legvalues': legvalues,
|
||||
'nationality': competitor.nationality, 'global_rank': competitor.total, 'current_race': '', 'current_legs' : [],
|
||||
'current_rank' : competitor.current_rank})
|
||||
'current_rank' : competitor.current_rank, 'total_points' : getattr(competitor, 'total_points', 0),
|
||||
'net_points': getattr(competitor, 'net_points', 0)})
|
||||
|
||||
try:
|
||||
dc.update({'current_legs': [lg+1 for lg in current_legs], 'current_race': current_race+1})
|
||||
|
||||
@@ -63,6 +63,7 @@ function hideLoader() {
|
||||
function showOverallWrap(caller) {
|
||||
element = $('#overall-wrap');
|
||||
element.fadeToggle('fast', function() {
|
||||
$('#main-interface').toggle();
|
||||
if (!element.is(':visible')) {
|
||||
caller.css('background-image', 'url(/moderator-static/arrow-right.png)');
|
||||
} else {
|
||||
@@ -71,6 +72,10 @@ function showOverallWrap(caller) {
|
||||
});
|
||||
}
|
||||
|
||||
function switchRaceBlock(block) {
|
||||
loadLeaderboard(block, param, global_competitors, global_direction, global_colmode);
|
||||
}
|
||||
|
||||
function sortBy(param, element) {
|
||||
$('.sort-asc, .sort-desc').css('background-image', 'url(/moderator-static/sort-none.png)');
|
||||
|
||||
@@ -105,9 +110,16 @@ function displayLeaderboard(data) {
|
||||
for (cpos in data) {
|
||||
competitor = data[cpos];
|
||||
|
||||
/* always change global rank */
|
||||
/* always change current rank in view */
|
||||
$('#clipping-'+rowid+'-1 span').html(competitor.current_rank);
|
||||
|
||||
/* insert some data in overall view */
|
||||
$('#competitor-global-rank-'+rowid).html(competitor.global_rank);
|
||||
$('#competitor-global-nationality-'+rowid).html(competitor.nationality);
|
||||
$('#competitor-global-name-'+rowid).html(competitor.name);
|
||||
$('#competitor-global-total-'+rowid).html(competitor.total_points);
|
||||
$('#competitor-global-net-'+rowid).html(competitor.net_points);
|
||||
|
||||
name_element = $('#clipping-'+rowid+'-3 span');
|
||||
if (name_element.html() != competitor.name) {
|
||||
/* competitor position has changed - refresh whole line */
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 220 B |
@@ -10,17 +10,27 @@
|
||||
<link href='mobile.css' media='screen' rel='stylesheet' type='text/css'>
|
||||
</head>
|
||||
<body>
|
||||
<ul class='overview'>
|
||||
<li class='event'>
|
||||
<h2>Event: Bla Event</h2>
|
||||
</li>
|
||||
<li class='current-race'>
|
||||
<p>Current Race 1</p>
|
||||
</li>
|
||||
<li class='current-leg'>
|
||||
<p>Current Leg M2</p>
|
||||
</li>
|
||||
</ul>
|
||||
<form>
|
||||
<ul class='overview'>
|
||||
<li class='event'>
|
||||
<h2>Event: SAP Sailing Analytics</h2>
|
||||
</li>
|
||||
<li class='current-race'>
|
||||
<select>
|
||||
<option>Race 1</option>
|
||||
<option>Race 2</option>
|
||||
<option>Race 3</option>
|
||||
</select>
|
||||
</li>
|
||||
<li class='current-leg'>
|
||||
<select>
|
||||
<option>Leg 1</option>
|
||||
<option>Leg 2</option>
|
||||
<option>Leg 3</option>
|
||||
</select>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
<table class='race-table' id='r1-m1'>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -30,88 +40,111 @@
|
||||
<th colid='2'>
|
||||
<span>Name</span>
|
||||
</th>
|
||||
<th colid='3'>
|
||||
<span>Gap</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class='odd' rowid='1'>
|
||||
<td>1</td>
|
||||
<td>EVANS</td>
|
||||
<td>20</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='2'>
|
||||
<td>2</td>
|
||||
<td>ALONSO</td>
|
||||
<td>11</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='3'>
|
||||
<td>3</td>
|
||||
<td>ALONSO</td>
|
||||
<td>18</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='4'>
|
||||
<td>4</td>
|
||||
<td>BROTHERTHOl</td>
|
||||
<td>10</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='5'>
|
||||
<td>5</td>
|
||||
<td>ASQUITH</td>
|
||||
<td>15</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='6'>
|
||||
<td>6</td>
|
||||
<td>CZAJKOWSKI</td>
|
||||
<td>8</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='7'>
|
||||
<td>7</td>
|
||||
<td>NIELSEN</td>
|
||||
<td>9</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='8'>
|
||||
<td>8</td>
|
||||
<td>NIELSEN</td>
|
||||
<td>10</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='9'>
|
||||
<td>9</td>
|
||||
<td>PIASECKI</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='10'>
|
||||
<td>10</td>
|
||||
<td>FONSECA</td>
|
||||
<td>12</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='11'>
|
||||
<td>11</td>
|
||||
<td>GRAEL</td>
|
||||
<td>18</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='12'>
|
||||
<td>12</td>
|
||||
<td>NORREGAARD</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='13'>
|
||||
<td>13</td>
|
||||
<td>LANG</td>
|
||||
<td>8</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='14'>
|
||||
<td>14</td>
|
||||
<td>KOSTOV</td>
|
||||
<td>5</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='15'>
|
||||
<td>15</td>
|
||||
<td>CUPAC</td>
|
||||
<td>3</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='16'>
|
||||
<td>16</td>
|
||||
<td>STORCK</td>
|
||||
<td>10</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='17'>
|
||||
<td>17</td>
|
||||
<td>MOORE</td>
|
||||
<td>14</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='18'>
|
||||
<td>18</td>
|
||||
<td>DELLE</td>
|
||||
<td>12</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='19'>
|
||||
<td>19</td>
|
||||
<td>RESCH</td>
|
||||
<td>5</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='20'>
|
||||
<td>20</td>
|
||||
<td>DRAPER</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -133,6 +133,7 @@ body {
|
||||
width: 100%; }
|
||||
#header .function-btn-wrapper ul.function-btn {
|
||||
padding: 1px;
|
||||
background: #008fcc;
|
||||
*display: inline-block; }
|
||||
#header .function-btn-wrapper ul.function-btn:after {
|
||||
content: " ";
|
||||
@@ -177,7 +178,7 @@ span.race-count {
|
||||
left: 0; }
|
||||
#left-systembar div.blue-table-btn a {
|
||||
display: block;
|
||||
height: 91px;
|
||||
height: 105px;
|
||||
text-decoration: none;
|
||||
background: url(/moderator-static/arrow-right.png) left top no-repeat #008fcc; }
|
||||
#left-systembar div.blue-table-btn a:hover {
|
||||
@@ -222,7 +223,8 @@ span.race-count {
|
||||
background: url(/moderator-static/pause-icon.png) right center no-repeat #484848; }
|
||||
#main-interface .blue-table .sort-rank {
|
||||
display: block;
|
||||
height: 39px; }
|
||||
height: 39px;
|
||||
margin: 15px 0 13px 0; }
|
||||
#main-interface .blue-table #table-scrolling li {
|
||||
float: left;
|
||||
width: 94px;
|
||||
@@ -238,8 +240,7 @@ span.race-count {
|
||||
border-collapse: collapse;
|
||||
width: 170px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
margin: 13px 0 0 0; }
|
||||
vertical-align: middle; }
|
||||
#main-interface #overall-clipping td {
|
||||
padding: 5px; }
|
||||
#main-interface #overall-clipping tr.odd td {
|
||||
@@ -264,14 +265,14 @@ span.race-count {
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
height: 91px;
|
||||
height: 105px;
|
||||
width: 100%; }
|
||||
#main-interface .race div a.leg-box-sort {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
height: 91px;
|
||||
height: 105px;
|
||||
width: 100%; }
|
||||
#main-interface .race div.main-box {
|
||||
width: 39px; }
|
||||
@@ -282,9 +283,9 @@ span.race-count {
|
||||
top: 0;
|
||||
left: 0; }
|
||||
#main-interface .race div.main-box .sort-asc {
|
||||
background: url(/moderator-static/sort-none.png) center 40px no-repeat; }
|
||||
background: url(/moderator-static/sort-none.png) center bottom no-repeat; }
|
||||
#main-interface .race div.main-box .sort-desc {
|
||||
background: url(/moderator-static/sort-none.png) center 40px no-repeat; }
|
||||
background: url(/moderator-static/sort-none.png) center bottom no-repeat; }
|
||||
#main-interface .race div.leg-box {
|
||||
font-size: 14px;
|
||||
width: 39px; }
|
||||
@@ -295,9 +296,9 @@ span.race-count {
|
||||
top: 0;
|
||||
left: 0; }
|
||||
#main-interface .race div.leg-box .sort-asc {
|
||||
background: url(/moderator-static/sort-none.png) center 40px no-repeat; }
|
||||
background: url(/moderator-static/sort-none.png) center bottom no-repeat; }
|
||||
#main-interface .race div.leg-box .sort-desc {
|
||||
background: url(/moderator-static/sort-none.png) center 40px no-repeat; }
|
||||
background: url(/moderator-static/sort-none.png) center bottom no-repeat; }
|
||||
#main-interface .race div.table-box {
|
||||
width: 39px;
|
||||
margin: 0; }
|
||||
@@ -306,12 +307,12 @@ span.race-count {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 91px;
|
||||
height: 105px;
|
||||
width: 100%; }
|
||||
#main-interface .race div.table-box .sort-asc {
|
||||
background: url(/moderator-static/sort-none.png) center 40px no-repeat; }
|
||||
background: url(/moderator-static/sort-none.png) center bottom no-repeat; }
|
||||
#main-interface .race div.table-box .sort-desc {
|
||||
background: url(/moderator-static/sort-none.png) center 40px no-repeat; }
|
||||
background: url(/moderator-static/sort-none.png) center bottom no-repeat; }
|
||||
#main-interface .race div.table-box ul {
|
||||
background: #151515;
|
||||
color: #ececec; }
|
||||
@@ -319,7 +320,7 @@ span.race-count {
|
||||
background: #484848; }
|
||||
#main-interface .race div ul {
|
||||
font-size: 14px;
|
||||
margin: 91px 0 0 0;
|
||||
margin: 105px 0 0 0;
|
||||
text-align: center; }
|
||||
#main-interface .race div ul li {
|
||||
padding: 5px; }
|
||||
@@ -345,10 +346,8 @@ span.race-count {
|
||||
padding: 13px 10px;
|
||||
color: #151515;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold; }
|
||||
#main-interface .race table.race-table th.firstelement {
|
||||
width: 39px;
|
||||
padding: 0; }
|
||||
font-weight: bold;
|
||||
width: 110px; }
|
||||
#main-interface .race table.race-table th:first-child {
|
||||
padding-left: 20px; }
|
||||
#main-interface .race table.race-table th:last-child {
|
||||
@@ -418,38 +417,18 @@ span.race-count {
|
||||
|
||||
body.race-1 #race-1 table th {
|
||||
background: #de8a2e; }
|
||||
body.race-1 #header ul.function-btn {
|
||||
background: #de8a2e; }
|
||||
body.race-1 #header ul.function-btn-active li {
|
||||
background: #de8a2e; }
|
||||
|
||||
body.race-2 #race-2 table th {
|
||||
background: #fec631; }
|
||||
body.race-2 #header ul.function-btn {
|
||||
background: #fec631; }
|
||||
body.race-2 #header ul.function-btn-active li {
|
||||
background: #fec631; }
|
||||
|
||||
body.race-3 #race-3 table th {
|
||||
background: #9c277b; }
|
||||
body.race-3 #header ul.function-btn {
|
||||
background: #9c277b; }
|
||||
body.race-3 #header ul.function-btn-active li {
|
||||
background: #9c277b; }
|
||||
|
||||
body.race-4 #race-4 table th {
|
||||
background: #95aa31; }
|
||||
body.race-4 #header ul.function-btn {
|
||||
background: #95aa31; }
|
||||
body.race-4 #header ul.function-btn-active li {
|
||||
background: #95aa31; }
|
||||
|
||||
body.race-5 #race-5 table th {
|
||||
background: #d83c3c; }
|
||||
body.race-5 #header ul.function-btn {
|
||||
background: #d83c3c; }
|
||||
body.race-5 #header ul.function-btn-active li {
|
||||
background: #d83c3c; }
|
||||
|
||||
.border-activity {
|
||||
background: url(/moderator-static/border-activity.png) 0 0 no-repeat; }
|
||||
@@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>SAP Sailing Analytics</title>
|
||||
<meta content='width = device-width, initial-scale = 2.3, user-scalable = no' name='viewport'>
|
||||
<meta content='yes' name='apple-mobile-web-app-capable'>
|
||||
<meta content='black' name='apple-mobile-web-app-status-bar-style'>
|
||||
<link href='${request.application_url}/moderator-static/iphone-splash-screen.png' rel='apple-touch-startup-image'>
|
||||
<link href='${request.application_url}/moderator-static/sap-sailing-app-icon.png' rel='apple-touch-icon-precomposed'>
|
||||
<link href='${request.application_url}/moderator-static/mobile.css' media='screen' rel='stylesheet' type='text/css'>
|
||||
</head>
|
||||
<body tal:define="event view.currentIPhoneEvent()">
|
||||
<form>
|
||||
<ul class='overview'>
|
||||
<li class='event'>
|
||||
<h2>Event: ${event.name}</h2>
|
||||
</li>
|
||||
<li class='current-race'>
|
||||
<select>
|
||||
<tal:for repeat="racename event.races">
|
||||
<tal:do define="race view.raceBy(event.name, racename)">
|
||||
<option>${race.name} {len(race.current_legs)>0 and '(Running)' or ''}</option>
|
||||
</tal:do>
|
||||
</tal:for>
|
||||
</select>
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
<table class='race-table' id='r1-m1'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colid='1'>
|
||||
<span>Rank</span>
|
||||
</th>
|
||||
<th colid='2'>
|
||||
<span>Name</span>
|
||||
</th>
|
||||
<th colid='3'>
|
||||
<span>Gap</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tal:for repeat="">
|
||||
<tr class='odd' rowid='1'>
|
||||
<td>1</td>
|
||||
<td>EVANS</td>
|
||||
<td>20</td>
|
||||
</tr>
|
||||
</tal:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
<script src='${request.application_url}/moderator-static/jquery.js'></script>
|
||||
</html>
|
||||
@@ -14,12 +14,12 @@
|
||||
<li id="eventline" class='message-0 active'>
|
||||
<table width="100%" border="0" style="margin-right: 10px;">
|
||||
<tr>
|
||||
<td style="padding-right: 10px;">Event</td>
|
||||
<td style="font-style: italic;">Sailing Team Germany</td>
|
||||
<td>Boatclass 505</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding-right: 10px;padding-top: 5px;">Commentator</td>
|
||||
<td style="font-style: italic;">Marcus Baur</td>
|
||||
<td style="padding-right: 10px;padding-top: 5px;">commented by</td>
|
||||
<td style="font-weight: bold;">Marcus Baur</td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
@@ -69,7 +69,7 @@
|
||||
<tal:for repeat="bundle firstbundle">
|
||||
<ul class='race-bundle-${repeat["bundle"].number}'>
|
||||
<tal:for repeat="race bundle">
|
||||
<li class='race-${event.races.index(race)+1}'>
|
||||
<li class='race-${event.races.index(race)+1}' onclick='switchRace("${event.races.index(race)+1}")'>
|
||||
${event.races.index(race)+1}
|
||||
</li>
|
||||
</tal:for>
|
||||
@@ -189,7 +189,7 @@
|
||||
<tal:for repeat="valrow range(1,21)">
|
||||
<tr class='${repeat["valrow"].even and "odd" or "even"}' id='race-${raceid}-valrow-${valrow}'>
|
||||
<tal:for repeat="valrowpos range(1,len(columns[1:])+1)">
|
||||
<td id='race-${raceid}-mark-${markid}-valrow-${valrow}-pos-${valrowpos}'>
|
||||
<td id='race-${raceid}-mark-${markid}-valrow-${valrow}-pos-${valrowpos}' >
|
||||
<span> </span>
|
||||
</td>
|
||||
</tal:for>
|
||||
@@ -217,437 +217,33 @@
|
||||
<span>Skipper</span>
|
||||
</th>
|
||||
<th colid='4'>
|
||||
<span>Crew</span>
|
||||
</th>
|
||||
<th colid='5'>
|
||||
<span>Total Points</span>
|
||||
</th>
|
||||
<th colid='6'>
|
||||
<th colid='5'>
|
||||
<span>Net Points</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr rowid='0'>
|
||||
<td class='table-sorting' colid='1'>
|
||||
<a class='sort-asc' href='#'></a>
|
||||
</td>
|
||||
<td class='table-sorting' colid='2'>
|
||||
<a class='sort-asc' href='#'></a>
|
||||
</td>
|
||||
<td class='table-sorting' colid='3'>
|
||||
<a class='sort-asc' href='#'></a>
|
||||
</td>
|
||||
<td class='table-sorting' colid='4'>
|
||||
<a class='sort-asc' href='#'></a>
|
||||
</td>
|
||||
<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'>
|
||||
<tal:for repeat="compcolumns range(1,21)">
|
||||
<tr class='${repeat["compcolumns"].even and "odd" or "even"}' rowid='1'>
|
||||
<td colid='1'>
|
||||
<span>1</span>
|
||||
<span id="competitor-global-rank-${repeat['compcolumns'].number}">1</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>30</span>
|
||||
<span id="competitor-global-nationality-${repeat['compcolumns'].number}">30</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>20</span>
|
||||
<span id="competitor-global-name-${repeat['compcolumns'].number}">20</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>50</span>
|
||||
<span id="competitor-global-total-${repeat['compcolumns'].number}">10</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>10</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>10</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='2'>
|
||||
<td colid='1'>
|
||||
<span>2</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>31</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>21</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>51</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>11</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>11</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='3'>
|
||||
<td colid='1'>
|
||||
<span>3</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>32</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>22</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>52</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>12</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>12</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='4'>
|
||||
<td colid='1'>
|
||||
<span>4</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>33</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>23</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>53</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>13</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>13</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='5'>
|
||||
<td colid='1'>
|
||||
<span>5</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>34</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>24</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>54</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>14</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>14</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='6'>
|
||||
<td colid='1'>
|
||||
<span>6</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>35</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>25</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>55</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>15</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>15</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='7'>
|
||||
<td colid='1'>
|
||||
<span>7</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>36</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>26</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>56</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>16</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>16</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='8'>
|
||||
<td colid='1'>
|
||||
<span>8</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>37</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>27</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>57</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>17</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>17</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='9'>
|
||||
<td colid='1'>
|
||||
<span>9</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>38</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>28</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>58</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>18</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>18</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='10'>
|
||||
<td colid='1'>
|
||||
<span>10</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>39</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>29</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>59</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>19</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>19</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='11'>
|
||||
<td colid='1'>
|
||||
<span>11</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>40</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>30</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>60</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>20</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>20</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='12'>
|
||||
<td colid='1'>
|
||||
<span>12</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>41</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>31</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>61</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>21</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>21</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='13'>
|
||||
<td colid='1'>
|
||||
<span>13</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>42</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>32</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>62</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>22</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>22</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='14'>
|
||||
<td colid='1'>
|
||||
<span>14</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>43</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>33</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>63</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>23</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>23</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='15'>
|
||||
<td colid='1'>
|
||||
<span>15</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>44</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>34</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>64</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>24</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>24</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='16'>
|
||||
<td colid='1'>
|
||||
<span>16</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>45</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>35</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>65</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>25</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>25</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='17'>
|
||||
<td colid='1'>
|
||||
<span>17</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>46</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>36</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>66</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>26</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>26</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='18'>
|
||||
<td colid='1'>
|
||||
<span>18</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>47</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>37</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>67</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>27</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>27</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='odd' rowid='19'>
|
||||
<td colid='1'>
|
||||
<span>19</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>48</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>38</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>68</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>28</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>28</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='even' rowid='20'>
|
||||
<td colid='1'>
|
||||
<span>20</span>
|
||||
</td>
|
||||
<td colid='2'>
|
||||
<span>49</span>
|
||||
</td>
|
||||
<td colid='3'>
|
||||
<span>39</span>
|
||||
</td>
|
||||
<td colid='4'>
|
||||
<span>69</span>
|
||||
</td>
|
||||
<td colid='5'>
|
||||
<span>29</span>
|
||||
</td>
|
||||
<td colid='6'>
|
||||
<span>29</span>
|
||||
<span id="competitor-global-net-${repeat['compcolumns'].number}">10</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tal:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -30,18 +30,18 @@ START_EXP_WIND = 'receiveexpeditionwind'
|
||||
VN = {
|
||||
'CSPDKNOT': ('CSPEEDKN', 'Current Speed (kn)', '%.1f', 'currentSpeedOverGroundInKnots'),
|
||||
'CSPDMS' : ('CSPDMS', 'Current Speed (m/s)', '%.1f', 'currentSpeedOverGroundInMetersPerSecond'),
|
||||
'ASPDKNOT': ('ASPDKN', 'Avg Speed (kn)', '%.1f', 'averageSpeedOverGroundInKnots'),
|
||||
'ASPDKNOT': ('ASPDKN', 'Avg Speed (kn)', '%.2f', 'averageSpeedOverGroundInKnots'),
|
||||
'ASPDMS' : ('ASPDMS', 'Avg Speed (m/s)', '%.1f', 'averageSpeedOverGroundInMetersPerSecond'),
|
||||
'DSTTRV' : ('DSTTRV', 'Distance Travelled (m)', '%.1f', 'distanceTraveledOverGroundInMeters'),
|
||||
'DSTTRV' : ('DSTTRV', 'Dist. Traveld (m)', '%.f', 'distanceTraveledOverGroundInMeters'),
|
||||
'VMGKNOT': ('VMGKN', 'VMG (kn)', '%.1f', 'velocityMadeGoodInKnots'),
|
||||
'VMGMS' : ('VMGMS', 'VMG (m/s)', '%.1f', 'velocityMadeGoodInMetersPerSecond'),
|
||||
'AVMGKNOT': ('AVMGKN', 'Avg VMG (kn)', '%.1f', 'averageVelocityMadeGoodInKnots'),
|
||||
'AVMGMS' : ('AVMGMS', 'Avg VMG (m/s)', '%.1f', 'averageVelocityMadeGoodInMetersPerSecond'),
|
||||
'ETA' : ('ETASEC', 'ETA (s)', '%.f', 'estimatedTimeToNextMarkInSeconds'),
|
||||
'DSTGO' : ('DSTGO', 'Distance To Go (m)', '%.f', 'windwardDistanceToGoInMeters'),
|
||||
'DSTGO' : ('DSTGO', 'Dist. To Go (m)', '%.f', 'windwardDistanceToGoInMeters'),
|
||||
'GAPSEC' : ('SGAP', 'Gap To Leader (s)', '%.1f','gapToLeaderInSeconds'),
|
||||
'UPDOWNWIND' : ('UPDOWN', 'Up or Downwind?', '%s', 'upOrDownWindLeg'),
|
||||
'GLP' : ('GLP', 'Gains and Losses (Places)', '%s', 'gainsAndLossesInPlaces'),
|
||||
'GLP' : ('GLP', 'G & L (Places)', '%s', 'gainsAndLossesInPlaces'),
|
||||
'RANK' : ('LRANK', 'Rank', '%s', 'rank'),
|
||||
'STARTED' : ('STARTD', 'Started?', '%s','started'),
|
||||
'FINISHED' : ('FINISHD', 'Finished?', '%s','finished')
|
||||
@@ -53,7 +53,7 @@ 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['ASPDKNOT'], VN['DSTTRV'], VN['GLP']],
|
||||
'LEADERBOARD-F2':
|
||||
[VN['RANK'], VN['GAPSEC'], VN['GLP']],
|
||||
'LEADERBOARD-F3':
|
||||
|
||||
Reference in new issue
Block a user