playing with gauges
This commit is contained in:
@@ -254,7 +254,7 @@ function copyText() {
|
||||
// catchangle = ctch[Math.round(datatime)];
|
||||
{% for id, metric in metrics.items %}
|
||||
{{ id }}_now = {{ id }}_values[Math.round(datatime)];
|
||||
// console.log(datatime,{{ id }}_now, "{{ metric.name }}")
|
||||
// console.log(datatime,{{ id }},{{ id }}_now, "{{ metric.name }}")
|
||||
{% endfor %}
|
||||
|
||||
|
||||
@@ -374,11 +374,21 @@ function copyText() {
|
||||
</span> {{ metric.unit }}
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% for group in metricsgroups %}
|
||||
<li class="grid_2">
|
||||
<div id="{{ group }}"></div>
|
||||
</ul>
|
||||
<ul class="main-content">
|
||||
{% if 'basic' in metricsgroups %}
|
||||
<li class="grid_1">
|
||||
<div id="basic_spm"></div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
<li class="grid_1">
|
||||
<div id="basic_boatspeed"></div>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if 'forcepower' in metricsgroups %}
|
||||
<li class="grid_1">
|
||||
<div id="forcepower_power"></div>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
@@ -394,6 +404,22 @@ function copyText() {
|
||||
|
||||
<script>
|
||||
$(document).ready( function() {
|
||||
// gauge settings
|
||||
{% if workout.workouttype != 'water' %}
|
||||
speedoptions.max = 7;
|
||||
speedoptions.redTo = 7;
|
||||
speedoptions.majorTicks = ['0','1','2','3','4','5','6','7'];
|
||||
{% endif %}
|
||||
{% if 'forcepower' in metricsgroups %}
|
||||
poweroptions.max = {{ rower.pw_an|add:100|round100 }};
|
||||
poweroptions.greenFrom = {{ rower.pw_ut2 }};
|
||||
poweroptions.greenTo = {{ rower.pw_at }};
|
||||
poweroptions.yellowFrom = {{ rower.pw_at }};
|
||||
poweroptions.yellowTo = {{ rower.pw_an }};
|
||||
poweroptions.redFrom = {{ rower.pw_an }};
|
||||
poweroptions.redTo = {{ rower.pw_an|add:200|round100 }};
|
||||
{% endif %}
|
||||
|
||||
// cookie reader
|
||||
function createCookie(name,value,days) {
|
||||
if (days) {
|
||||
|
||||
@@ -48,7 +48,7 @@ def sigdig(value, digits = 3):
|
||||
# return integers as is
|
||||
if value % 1 == 0:
|
||||
return value
|
||||
|
||||
|
||||
places = digits - order - 1
|
||||
if places > 0:
|
||||
fmtstr = "%%.%df" % (places)
|
||||
@@ -83,7 +83,7 @@ def strfdelta(tdelta):
|
||||
seconds=seconds,
|
||||
tenths=tenths,
|
||||
)
|
||||
|
||||
|
||||
return res
|
||||
|
||||
from rowers.teams import rower_get_managers
|
||||
@@ -91,13 +91,13 @@ from rowers.teams import rower_get_managers
|
||||
@register.filter
|
||||
def alertstatspercentage(list,i):
|
||||
alertstats = list[i-1]
|
||||
|
||||
|
||||
return alertstats["percentage"]
|
||||
|
||||
@register.filter
|
||||
def alertstartdate(list,i):
|
||||
alertstats = list[i-1]
|
||||
|
||||
|
||||
return alertstats["startdate"]
|
||||
|
||||
@register.filter
|
||||
@@ -109,7 +109,7 @@ def alertnperiod(list,i):
|
||||
@register.filter
|
||||
def alertenddate(list,i):
|
||||
alertstats = list[i-1]
|
||||
|
||||
|
||||
return alertstats["enddate"]
|
||||
|
||||
@register.filter
|
||||
@@ -121,6 +121,8 @@ def is_coach(rower,rowers):
|
||||
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def strfdeltah(tdelta):
|
||||
hours, rest = divmod(tdelta.seconds,3600)
|
||||
minutes,seconds = divmod(rest,60)
|
||||
@@ -131,7 +133,7 @@ def strfdeltah(tdelta):
|
||||
seconds=seconds,
|
||||
tenths=tenths,
|
||||
)
|
||||
|
||||
|
||||
return res
|
||||
|
||||
def secondstotimestring(tdelta):
|
||||
@@ -142,7 +144,7 @@ def secondstotimestring(tdelta):
|
||||
minutes=minutes,
|
||||
seconds=seconds,
|
||||
)
|
||||
|
||||
|
||||
return res
|
||||
|
||||
@register.filter
|
||||
@@ -218,7 +220,7 @@ def nextperiodstart(timeperiod):
|
||||
newenddate = newstartdate+timedelta
|
||||
|
||||
return newstartdate.strftime("%Y-%m-%d")
|
||||
|
||||
|
||||
@register.filter
|
||||
def previousperiodend(timeperiod):
|
||||
startdate,enddate = getstartenddate(timeperiod)
|
||||
@@ -243,7 +245,7 @@ def previousperiodstart(timeperiod):
|
||||
newstartdate = startdate-timedelta-datetime.timedelta(days=1)
|
||||
|
||||
return newstartdate.strftime("%Y-%m-%d")
|
||||
|
||||
|
||||
@register.filter
|
||||
def paceprint(d):
|
||||
if (d == None):
|
||||
@@ -288,11 +290,11 @@ def rkuserid(user):
|
||||
rkuserid = runkeeperstuff.get_userid(thetoken)
|
||||
|
||||
return rkuserid
|
||||
|
||||
|
||||
@register.filter
|
||||
def courselength(course):
|
||||
return course_length(course)
|
||||
|
||||
|
||||
@register.filter(is_safe=True)
|
||||
def jsdict(dict,key):
|
||||
s = dict.get(key)
|
||||
@@ -306,7 +308,7 @@ def lookup(dict, key):
|
||||
s = dict.get(key)
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
||||
if isinstance(s,string_types) and len(s) > 22:
|
||||
s = s[:22]
|
||||
return s
|
||||
@@ -317,7 +319,7 @@ def lookuplong(dict, key):
|
||||
s = dict.get(key)
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
||||
return s
|
||||
|
||||
@register.filter
|
||||
@@ -329,11 +331,11 @@ def ualookup(dict, key):
|
||||
|
||||
if key=='duration':
|
||||
s = secondstotimestring(int(s))
|
||||
|
||||
|
||||
|
||||
if key=='starttime':
|
||||
s = dateutil.parser.parse(s)
|
||||
|
||||
|
||||
return s
|
||||
|
||||
from rowers.models import PlannedSession
|
||||
@@ -343,7 +345,7 @@ def is_session_manager(id,user):
|
||||
ps = PlannedSession.objects.get(id=id)
|
||||
except PlannedSession.DoesNotExist:
|
||||
return False
|
||||
|
||||
|
||||
return ps.manager == user
|
||||
|
||||
from rowers.models import checkworkoutuser
|
||||
@@ -358,7 +360,7 @@ def may_edit(workout,request):
|
||||
|
||||
return mayedit
|
||||
|
||||
|
||||
|
||||
|
||||
@register.filter
|
||||
def mayeditplan(obj,request):
|
||||
@@ -376,11 +378,11 @@ def mayeditplan(obj,request):
|
||||
rr = Rower.objects.get(user=request.user)
|
||||
if checkaccessuser(request.user,obj.rower) and rr.rowerplan not in ['basic','pro']:
|
||||
mayedit = True
|
||||
|
||||
|
||||
|
||||
return mayedit
|
||||
|
||||
|
||||
|
||||
@register.filter(name='times')
|
||||
def times(number):
|
||||
return range(number)
|
||||
@@ -480,7 +482,7 @@ def team_members(user):
|
||||
@register.filter
|
||||
def openactions(user):
|
||||
myteams = Team.objects.filter(manager=user)
|
||||
|
||||
|
||||
invites = TeamInvite.objects.filter(user=user).count()
|
||||
requests = TeamRequest.objects.filter(user=user).count()
|
||||
myrequests = TeamRequest.objects.filter(team__in=myteams).count()
|
||||
@@ -491,7 +493,7 @@ def openactions(user):
|
||||
coachrequests = CoachRequest.objects.filter(coach=user.rower).count()
|
||||
|
||||
return invites+requests+myrequests+myinvites+mycoachoffers+coachoffers+mycoachrequests+coachrequests
|
||||
|
||||
|
||||
|
||||
@register.filter
|
||||
def team_rowers(user):
|
||||
@@ -518,7 +520,7 @@ def coach_rowers(user):
|
||||
else:
|
||||
thelist = [c for c in coach_getcoachees(user.rower)]
|
||||
return thelist
|
||||
|
||||
|
||||
|
||||
@register.filter
|
||||
def verbosetimeperiod(timeperiod):
|
||||
@@ -538,7 +540,7 @@ def verbosetimeperiod(timeperiod):
|
||||
verbose = timeperiod
|
||||
|
||||
return verbose
|
||||
|
||||
|
||||
from datetime import date
|
||||
|
||||
@ register.filter
|
||||
@@ -557,8 +559,8 @@ def is_future_date(the_date):
|
||||
def amount(value):
|
||||
vs = '{v}.00'.format(v=int(value))
|
||||
return vs
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@register.filter
|
||||
def date_dif(the_date):
|
||||
@@ -569,7 +571,7 @@ def date_dif(the_date):
|
||||
else:
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@register.filter
|
||||
def can_register(race,r):
|
||||
return race_can_register(r,race)
|
||||
@@ -618,7 +620,7 @@ def userurl(path,member):
|
||||
tpattern = re.compile('team\/\d+/')
|
||||
if tpattern.search(path) is not None:
|
||||
path = tpattern.sub('',path)
|
||||
|
||||
|
||||
if pattern.search(path) is not None:
|
||||
replaced = pattern.sub(userstring,path)
|
||||
else:
|
||||
@@ -635,7 +637,7 @@ def teamurl(path,team):
|
||||
upattern = re.compile('\/user\/\d+/')
|
||||
if upattern.search(path) is not None:
|
||||
path = upattern.sub('/',path)
|
||||
|
||||
|
||||
|
||||
if pattern.search(path) is not None:
|
||||
replaced = pattern.sub(teamstring,path)
|
||||
@@ -726,13 +728,13 @@ def nextworkout(workout,user):
|
||||
).exclude(id=workout.id)
|
||||
except ValueError:
|
||||
return 0
|
||||
|
||||
|
||||
if ws:
|
||||
return encoder.encode_hex(ws[0].id)
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
@register.filter
|
||||
def previousworkout(workout,user):
|
||||
@@ -762,6 +764,3 @@ def previousworkout(workout,user):
|
||||
return encoder.encode_hex(ws[0].id)
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
google.charts.load('current', {'packages':['gauge']});
|
||||
google.charts.setOnLoadCallback(drawSPMChart);
|
||||
google.charts.setOnLoadCallback(drawSpeedChart);
|
||||
google.charts.setOnLoadCallback(drawPowerChart);
|
||||
|
||||
var spmdata = [
|
||||
['Label', 'Value'],
|
||||
['SPM', 21.0],
|
||||
|
||||
];
|
||||
|
||||
var speeddata = [
|
||||
['Label', 'Value'],
|
||||
['V m/s', 0.0],
|
||||
];
|
||||
|
||||
var powerdata = [
|
||||
['Label','Value'],
|
||||
['PWR',150],
|
||||
]
|
||||
|
||||
var spmoptions = {
|
||||
min:0, max: 50,
|
||||
width: 400, height: 120,
|
||||
@@ -17,17 +28,42 @@ var spmoptions = {
|
||||
minorTicks: 10
|
||||
};
|
||||
|
||||
var data = null;
|
||||
var speedoptions = {
|
||||
min:0, max: 6,
|
||||
width: 400, height: 120,
|
||||
greenFrom: 2, greenTo: 4,
|
||||
yellowFrom: 4,yellowTo: 5,
|
||||
redFrom: 5, redTo: 6,
|
||||
majorTicks: ['0','1','2','3','4','5','6'],
|
||||
minorTicks: 10
|
||||
};
|
||||
|
||||
var poweroptions = {
|
||||
min: 0, max: 1000,
|
||||
width: 400, height: 120,
|
||||
greenFrom: 100, greenTo: 200,
|
||||
yellowFrom: 200,yellowTo: 400,
|
||||
redFrom: 400, redTo: 1000,
|
||||
majorTicks: ['0','200','400','600','800','1000'],
|
||||
minorTicks: 5
|
||||
};
|
||||
|
||||
|
||||
var dataspm = null;
|
||||
var dataspeed = null;
|
||||
var spmchart = null;
|
||||
var speedchart = null;
|
||||
var powerchart = null;
|
||||
var datapower = null;
|
||||
|
||||
// SPM chart
|
||||
function drawSPMChart() {
|
||||
|
||||
data = new google.visualization.arrayToDataTable(spmdata);
|
||||
dataspm = new google.visualization.arrayToDataTable(spmdata);
|
||||
|
||||
|
||||
|
||||
spmchart = new google.visualization.Gauge(document.getElementById('basic'));
|
||||
spmchart = new google.visualization.Gauge(document.getElementById('basic_spm'));
|
||||
|
||||
// spmchart.draw(data, spmoptions);
|
||||
|
||||
@@ -35,8 +71,37 @@ function drawSPMChart() {
|
||||
|
||||
};
|
||||
|
||||
var spmchart;
|
||||
function set_basic() {
|
||||
data.setCell(0,1,spm_now);
|
||||
spmchart.draw(data, spmoptions)
|
||||
// Speed Chart
|
||||
function drawSpeedChart() {
|
||||
dataspeed = new google.visualization.arrayToDataTable(speeddata);
|
||||
|
||||
speedchart = new google.visualization.Gauge(document.getElementById('basic_boatspeed'));
|
||||
}
|
||||
|
||||
// Power chart
|
||||
function drawPowerChart() {
|
||||
datapower = new google.visualization.arrayToDataTable(powerdata);
|
||||
powerchart = new google.visualization.Gauge(document.getElementById('forcepower_power'));
|
||||
|
||||
}
|
||||
|
||||
function set_basic() {
|
||||
dataspm.setCell(0,1,spm_now);
|
||||
spmchart.draw(dataspm, spmoptions);
|
||||
|
||||
dataspeed.setCell(0,1,boatspeed_now);
|
||||
speedchart.draw(dataspeed,speedoptions);
|
||||
}
|
||||
|
||||
function set_athlete() {
|
||||
|
||||
}
|
||||
|
||||
function set_stroke() {
|
||||
|
||||
}
|
||||
|
||||
function set_forcepower() {
|
||||
datapower.setCell(0,1,power_now);
|
||||
powerchart.draw(datapower,poweroptions);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user