diff --git a/rowers/c2stuff.py b/rowers/c2stuff.py index 5693e760..e5646ac9 100644 --- a/rowers/c2stuff.py +++ b/rowers/c2stuff.py @@ -266,7 +266,10 @@ def summaryfromsplitdata(splitdata,data,filename,sep='|'): idist = interval['distance'] itime = interval['time']/10. ipace = 500.*itime/idist - ispm = interval['stroke_rate'] + try: + ispm = interval['stroke_rate'] + except KeyError: + ispm = 0 try: irest_time = interval['rest_time']/10. except KeyError: diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index 7dad7bb2..8ac8692f 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -241,6 +241,7 @@ def add_c2_stroke_data_db(strokedata,workoutid,starttimeunix,csvfilename, hr = strokedata.ix[:,'hr'] except KeyError: hr = 0*spm + pace = strokedata.ix[:,'p']/10. pace = np.clip(pace,0,1e4) pace = pace.replace(0,300) @@ -1241,7 +1242,7 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, with engine.connect() as conn, conn.begin(): try: data.to_sql('strokedata',engine,if_exists='append',index=False) - except OperationalError: + except: data.drop(columns=['rhythm'],inplace=True) data.to_sql('strokedata',engine,if_exists='append',index=False) diff --git a/rowers/forms.py b/rowers/forms.py index 2bb383e7..f4877106 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -7,12 +7,14 @@ from django.contrib.auth.models import User from django.contrib.admin.widgets import AdminDateWidget from django.forms.extras.widgets import SelectDateWidget from django.utils import timezone,translation -from django.forms import ModelForm +from django.forms import ModelForm, Select import dataprep import types import datetime from django.forms import formset_factory from utils import landingpages +from metrics import axes + # login form class LoginForm(forms.Form): @@ -29,6 +31,7 @@ class EmailForm(forms.Form): message = forms.CharField() + # Upload the CrewNerd Summary CSV class CNsummaryForm(forms.Form): file = forms.FileField(required=True,validators=[must_be_csv]) @@ -919,3 +922,70 @@ class VirtualRaceSelectForm(forms.Form): self.fields['country'] = forms.ChoiceField( choices = get_countries(),initial='All' ) + +class FlexOptionsForm(forms.Form): + includereststrokes = forms.BooleanField(initial=True, required = False, + label='Include Rest Strokes') + plotchoices = ( + ('line','Line Plot'), + ('scatter','Scatter Plot'), + ) + plottype = forms.ChoiceField(choices=plotchoices,initial='scatter', + label='Chart Type') + + +class FlexAxesForm(forms.Form): + axchoices = ( + (ax[0],ax[1]) for ax in axes if ax[0] not in ['cumdist','None'] + ) + + + yaxchoices = ( + (ax[0], ax[1]) for ax in axes if ax[0] not in ['cumdist','distance','time'] + ) + + yaxchoices2 = ( + (ax[0], ax[1]) for ax in axes if ax[0] not in ['cumdist','distance','time'] + ) + + + xaxis = forms.ChoiceField( + choices=axchoices,label='X-Axis',required=True) + yaxis1 = forms.ChoiceField( + choices=yaxchoices,label='Left Axis',required=True) + yaxis2 = forms.ChoiceField( + choices=yaxchoices2,label='Right Axis',required=True) + + def __init__(self,request,*args,**kwargs): + super(FlexAxesForm, self).__init__(*args, **kwargs) + + rower = Rower.objects.get(user=request.user) + + axchoicespro = ( + ('',ax[1]) if ax[4] == 'pro' and ax[0] else (ax[0],ax[1]) for ax in axes + ) + + axchoicesbasicx = [] + axchoicesbasicy = [] + + for ax in axes: + if ax[4] != 'pro' and ax[0] != 'cumdist': + if ax[0] != 'None': + axchoicesbasicx.insert(0,(ax[0],ax[1])) + if ax[0] not in ['cumdist','distance','time']: + axchoicesbasicy.insert(0,(ax[0],ax[1])) + else: + if ax[0] != 'None': + axchoicesbasicx.insert(0,('None',ax[1]+' (PRO)')) + if ax[0] not in ['cumdist','distance','time']: + axchoicesbasicy.insert(0,('None',ax[1]+' (PRO)')) + + + if rower.rowerplan == 'basic': + self.fields['xaxis'].choices = axchoicesbasicx + self.fields['yaxis1'].choices = axchoicesbasicy + self.fields['yaxis2'].choices = axchoicesbasicy + + + + diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 1e9c7b5d..2cf6d157 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -181,10 +181,11 @@ def interactive_boxchart(datadf,fieldname,extratitle=''): tools=TOOLS, toolbar_location="above", toolbar_sticky=False, - x_mapper_type='datetime') + x_mapper_type='datetime',plot_width=920) yrange1 = Range1d(start=yaxminima[fieldname],end=yaxmaxima[fieldname]) plot.y_range = yrange1 + plot.sizing_mode = 'scale_width' plot.xaxis.axis_label = 'Date' plot.yaxis.axis_label = axlabels[fieldname] @@ -299,6 +300,7 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'): toolbar_location = None, ) + for legend in p.legend: new_items = [] for legend_item in legend.items: @@ -311,6 +313,7 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'): p.legend.location = "top_left" p.legend.background_fill_alpha = 0.7 + p.sizing_mode = 'scale_width' p.yaxis.axis_label = 'Minutes' @@ -411,6 +414,7 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False): # add watermark plot.extra_y_ranges = {"watermark": watermarkrange} plot.extra_x_ranges = {"watermark": watermarkrange} + plot.sizing_mode = 'scale_width' plot.image_url([watermarkurl],watermarkx,watermarky, watermarkw,watermarkh, @@ -625,6 +629,8 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False): ), plot]) + layout.sizing_mode = 'scale_width' + script, div = components(layout) js_resources = INLINE.render_js() css_resources = INLINE.render_css() @@ -748,9 +754,10 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower'): ) plot.xaxis.major_label_orientation = pi/4 + plot.sizing_mode = 'scale_width' plot.y_range = Range1d(0,1.5*max(power4min)) - plot.title.text = 'Power levels from workouts '+user.first_name + plot.title.text = 'Power levels ('+workoutmode+') from workouts '+user.first_name hover = plot.select(dict(type=HoverTool)) @@ -833,6 +840,7 @@ def interactive_histoall(theworkouts): plot.xaxis.axis_label = "Power (W)" plot.yaxis.axis_label = "% of strokes" plot.y_range = Range1d(0,1.05*max(hist_norm)) + hover = plot.select(dict(type=HoverTool)) @@ -850,6 +858,7 @@ def interactive_histoall(theworkouts): plot.add_layout(LinearAxis(y_range_name="fraction", axis_label="Cumulative % of strokes"),'right') + plot.sizing_mode = 'scale_width' script, div = components(plot) return [script,div] @@ -985,7 +994,7 @@ def course_map(course): ) div = """ -
-HTTP Error 400 Bad Request. -
-- Access forbidden. You probably tried to access functionality on a workout, - planned session - or chart that is not owned by you. -
--We could not find the page on our server. -
-- The site reported an internal server error. The site developer has been - notified automatically with a full error report. You can help the developer - by reporting an issue on Bitbucket using the button below. -
- -- No valid server response received. This can have multiple reasons, - including time-outs or reaching the capacity limit. -
- -Rowsandall.com is an online tool for indoor and On The Water (OTW) rowers. It accepts workout data from a number of devices and applications. It @@ -78,19 +77,13 @@ here. -
The project is based on python plotting code by Greg Smith (https://quantifiedrowing.wordpress.com/) and inspired by the RowPro Dan Burpee spreadsheet (http://www.sub7irc.com/RP_Split_Template.zip).
-You qualify for a 14 day free trial. No credit card needed. Try out Pro membership for two weeks. Click the button below to @@ -188,5 +178,10 @@ and inspired by the RowPro Dan Burpee spreadsheet
If, for any reason, you are not happy with your Pro membership, please let me know through the contact form. I will contact you as soon as possible to discuss how we can make things better.
-This chart shows the Indoor Rower World Records for your gender and - weight class. The red dots are the official records, and hovering - over them with your mouse shows you the name of the record holder. - The blue line is a fit to the data, which is used by rowsandall.com - to calculate your performance assessment. +
This chart shows the + + Indoor Rower World Records + for your gender and + weight class. The red dots are the official records, and hovering + over them with your mouse shows you the name of the record holder. + The blue line is a fit to the data, which is used by rowsandall.com + to calculate your performance assessment. +
+Functionality to analyze multiple workouts.
-Analyze your Concept2 ranking pieces over a date range and predict your pace on other pieces.
-- Stroke Analysis -
-- Plot all strokes in a date range and analyze several parameters (Power, Pace, SPM, Heart Rate). -
-- Reserved for future functionality. -
-
+ - {% if user|is_promember %} - Power Histogram - {% else %} - Power Histogram - {% endif %} + Analyze your Concept2 ranking pieces over a date range and predict your pace on other pieces.
+
+ + Plot all strokes in a date range and analyze several parameters (Power, Pace, SPM, Heart Rate). +
+
+ Plot a power histogram of all your strokes over a date range.
-- {% if user|is_promember %} - Statistics - {% else %} - Statistics + +
- BETA: Statistics of stroke metrics over a date range -
-- {% if user|is_promember %} - Box Chart - {% else %} - Box Chart - {% endif %} + Statistics of stroke metrics over a date range
+ +
+ BETA: Box Chart Statistics of stroke metrics over a date range
-
+ + Analyse power vs piece duration to make predictions. For On-The-Water rowing. +
+
+ Analyze your Concept2 ranking pieces over a date range and predict your pace on other pieces.
-+ Analyse power vs piece duration to make predictions, for erg pieces. +
+ +
+ - {% if user|is_promember %} - OTW Critical Power - {% else %} - OTW Critical Power - {% endif %} -
-- Analyse power vs piece duration to make predictions. For On-The-Water rowing. -
-- {% if user|is_promember %} - Multi Compare - {% else %} - Multi Compare - {% endif %} -
-- Compare many workouts -
-- {% if user|is_promember %} - Trend Flex - {% else %} - Trend Flex - {% endif %} -
-- Select workouts and make X-Y charts of averages over various metrics -
-- {% if user|is_promember %} - OTE Critical Power - {% else %} - OTE Critical Power - {% endif %} -
-- Analyse power vs piece duration to make predictions, for erg pieces. -
-- {% if user|is_planmember %} - Power Progress - {% else %} - Power Progress - {% endif %} -
-- Monitoring power duration evidence from all your workouts. Feel free to explore. -
-+ Select workouts and make X-Y charts of averages over various metrics +
+
+ + Monitoring power duration evidence from all your workouts. Feel free to explore. +
+- You can use the form above to change the metric or filter the data. + You can use the form to change the metric or filter the data. Set Min SPM and Max SPM to select only strokes in a certain range of stroke rates. Set Work per Stroke to a minimum value to remove "paddle" strokes or turns.
-This imports all workouts that have not been imported to rowsandall.com. +
This imports all workouts that have not been imported to rowsandall.com. The action may take a longer time to process, so please be patient. Click on Import in the list below to import an individual workout.
-| Import | +Date/Time | +Duration | +Total Distance | +Type | +Source | +Comment | +New | +
|---|---|---|---|---|---|---|---|
| + Import | +{{ workout|lookup:'starttime' }} | +{{ workout|lookup:'duration' }} | +{{ workout|lookup:'distance' }} | +{{ workout|lookup:'rowtype' }} | +{{ workout|lookup:'source' }} | +{{ workout|lookup:'comment' }} | ++ {{ workout|lookup:'new' }} + | +
No workouts found
{% endif %} -| Import | -Date/Time | -Duration | -Total Distance | -Type | -Source | -Comment | -New | -
|---|---|---|---|---|---|---|---|
| - Import | -{{ workout|lookup:'starttime' }} | -{{ workout|lookup:'duration' }} | -{{ workout|lookup:'distance' }} | -{{ workout|lookup:'rowtype' }} | -{{ workout|lookup:'source' }} | -{{ workout|lookup:'comment' }} | -- {{ workout|lookup:'new' }} - | -
No workouts found
-{% endif %} + +{% endblock %} + +{% block sidebar %} +{% include 'menu_workouts.html' %} {% endblock %} diff --git a/rowers/templates/cn_form.html b/rowers/templates/cn_form.html index 354a1694..5a32d235 100644 --- a/rowers/templates/cn_form.html +++ b/rowers/templates/cn_form.html @@ -1,25 +1,25 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% block title %}CrewNerd Summary loading{% endblock %} -{% block content %} -- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -+ Please correct the error{{ form.errors|pluralize }} below. +
+ {% endif %} + +Drag and drop files here
-- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} +{% block main %} +Drag and drop files here
++ Please correct the error{{ form.errors|pluralize }} below. +
+ {% endif %} ++ +
+ +Summary for {{ theuser.first_name }} {{ theuser.last_name }} + between {{ startdate|date }} and {{ enddate|date }}
+Use this form to select a different date range:
-- Select start and end date for a date range: -
Summary for {{ theuser.first_name }} {{ theuser.last_name }} - between {{ startdate|date }} and {{ enddate|date }}
- - - - - - - - - - - -Summary for {{ theuser.first_name }} {{ theuser.last_name }} - between {{ startdate|date }} and {{ enddate|date }}
- -Direct link for other Pro users: - https://rowsandall.com/rowers/{{ id }}/cumstats/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/p/{{ plotfield }} -
- -Use this form to select a different date range:
-- Select start and end date for a date range: -
- Plot -
-Summary for {{ theuser.first_name }} {{ theuser.last_name }} + between {{ startdate|date }} and {{ enddate|date }}
+| Metric | -Value | +Mean | +Minimum | +25% | +Median | +75% | +Maximum | +Standard Deviation | |
|---|---|---|---|---|---|---|---|---|---|
| Mean | {{ value.mean|floatformat:-2 }} | -||||||||
| Minimum | {{ value.min|floatformat:-2 }} | -||||||||
| 25% | {{ value.firstq|floatformat:-2 }} | -||||||||
| Median | {{ value.median|floatformat:-2 }} | -||||||||
| 75% | {{ value.thirdq|floatformat:-2 }} | -||||||||
| Maximum | {{ value.max|floatformat:-2 }} | -||||||||
| Standard Deviation | {{ value.std|floatformat:-2 }} | +{{ value.verbosename }} | +{{ value.mean|floatformat:-2 }} | +{{ value.min|floatformat:-2 }} | +{{ value.firstq|floatformat:-2 }} | +{{ value.median|floatformat:-2 }} | +{{ value.thirdq|floatformat:-2 }} | +{{ value.max|floatformat:-2 }} | +{{ value.std|floatformat:-2 }} |
This matrix indicates a positive (+) or negative (-) correlation between two parameters. The Spearman correlation coefficient has values between +1 and -1. Positive correlation between two metrics means that if one metric increases, the other value is also likely to increase. Negative is the opposite. The further from zero, the higher the likelyhood. + + {% endif %} + +
This matrix indicates a positive (+) or negative (-) correlation between two parameters. The Spearman correlation coefficient has values between +1 and -1. Positive correlation between two metrics means that if one metric increases, the other value is also likely to increase. Negative is the opposite. The further from zero, the higher the likelyhood.
-| - {% for key,value in cordict.items %} - | {{ key }} |
- {% endfor %}
-
|---|
| + {% for key,value in cordict.items %} + | {{ key }} |
+ {% endfor %}
+
|---|---|
| {{ key }} | {% for key2,value in thedict.items %} @@ -218,24 +147,43 @@
On this page, a work in progress, I will collect useful information - for developers of rowing data apps and hardware.
- -I presume you have an app (smartphone app, dedicated hardware, web site) - where your users (customers) generate, collect or store their rowing - related workout data. You can now offer your users easy ways to get - their data on this site.
- -There are three ways to allow your users to get data to Rowsandall.com.
+Enable export of TCX, FIT or CSV formatted files from your app. - The users - upload the file to Rowsandall.com.
- -On this page, a work in progress, I will collect useful information + for developers of rowing data apps and hardware.
+I presume you have an app (smartphone app, dedicated hardware, web site) + where your users (customers) generate, collect or store their rowing + related workout data. You can now offer your users easy ways to get + their data on this site.
+ +Similar as above, generate TCX, FIT or CSV formatted files and - email them - to workouts@rowsandall.com directly from your app. The From: field - should be the email address of the registered user.
- -There are three ways to allow your users to get data to Rowsandall.com.
+Enable export of TCX, FIT or CSV formatted files from your app. + The users + upload the file to Rowsandall.com.
+ +Similar as above, generate TCX, FIT or CSV formatted files and + email them + to workouts@rowsandall.com directly from your app. The From: field + should be the email address of the registered user.
+ +We are building a REST API which will allow you to post and + receive stroke + data from the site directly.
+ +The REST API is a work in progress. We are open to improvement + suggestions (provided they don't break existing apps). Please send + email to info@rowsandall.com + with questions and/or suggestions. We + will get back to you as soon as possible.
+ +We are building a REST API which will allow you to post and - receive stroke - data from the site directly.
- -The REST API is a work in progress. We are open to improvement - suggestions (provided they don't break existing apps). Please send - email to info@rowsandall.com - with questions and/or suggestions. We - will get back to you as soon as possible.
- -All files adhering to the standards TCX and FIT formats will be parsed.
However, some rowing related parameters are not supported by TCX and FIT. Therefore, we are supporting the CSV format that is documented in the following link.
- +Using this standard will guarantee that your user's data are accepted without complaints.
-We have disabled the self service app link for security reasons. We will replace it with a secure self service app link soon. If you need to register an app, please send email to info@rowsandall.com
-Standard Oauth2 authentication. Get authorization code by pointing your user to the authorization URL. @@ -128,19 +125,19 @@ expires, use the refresh token to refresh it.
-The redirect URI for user authentication has to be https. +
The redirect URI for user authentication has to be https. Developers of iOS or Android apps should contact me directly if this doesn't work for them. I can add exceptions.
-Once you have a registered app, you have gone through the authorization and have successfully obtained an access token, you can use it to place @@ -149,7 +146,7 @@
The workout summary data and the stroke data are obtained and sent separately.
-Mandatory data fields are:
-Optional data fiels are:
-Drag and drop files here
-Looking for Team Manager - Upload?
- {% endif %} - {% if form.errors %} -- Please correct the error{{ form.errors|pluralize }} below. +{% block main %} +
Drag and drop files here
+Looking for Team Manager + Upload?
+ {% endif %} + {% if form.errors %} ++ Please correct the error{{ form.errors|pluralize }} below.
- {% endif %} + {% endif %}-
- You can select one static plot to be generated immediately for - this workout. You can select to export to major fitness - platforms automatically. - If you check "make private", this workout will not be visible to your followers and will not show up in your teams' workouts list. With the Landing Page option, you can select to which (workout related) page you will be - taken after a successfull upload. -
- -- If you don't have a workout file but have written down the splits, - you can create a workout file yourself from this template -
- - -Select Files with the File button or drag them on the marked area
- -+
+ You can select one static plot to be generated immediately for + this workout. You can select to export to major fitness + platforms automatically. + If you check "make private", this workout will not be visible to your followers and will not show up in your teams' workouts list. With the Landing Page option, you can select to which (workout related) page you will be + taken after a successfull upload. +
+ ++ If you don't have a workout file but have written down the splits, + you can create a workout file yourself from this template +
+ + +Select Files with the File button or drag them on the marked area
+ +
'
+ $("#id_main").replaceWith(
+ '
'
);
$.ajax({
data: data,
@@ -310,3 +311,8 @@ $('#id_workouttype').change();
};
{% endblock %}
+
+
+ {% block sidebar %}
+ {% include 'menu_workouts.html' %}
+ {% endblock %}
diff --git a/rowers/templates/email.html b/rowers/templates/email.html
index 562f8615..ad105bc0 100644
--- a/rowers/templates/email.html
+++ b/rowers/templates/email.html
@@ -1,104 +1,117 @@
- {% extends "base.html" %}
- {% block title %}Contact Us{% endblock title %}
- {% block content %}
- - Please correct the error{{ form.errors|pluralize }} below. -
++ Please correct the error{{ form.errors|pluralize }} below. +
{% endif %} - - -
-
+
+
+
| + + + | |||||||||||||
| + + + | + + + + | |||||||||||||
| + + | + + | |||||||||||||
| + + | + + |
| + Do you want to send me an email? + | + + |
| + + | + + |
| + + |
+ Bug reports and feature requests can be done through our BitBucket page. Please check on the following link if your bug or issue is a known one. Feel free to file any feature request. +
+ +We run a facebook group where you can post questions and report problems, + especially if you think the wider user community benefits from the answers.
+ +You can also check me on Twitter: +
+ When the site is down, this is the appropriate channel to look for apologies, updates, and offer help. + +Rowsandall s.r.o.
+ Nové sady 988/2
+ 602 00 Brno
+ Czech Republic
+ IČ: 070 48 572
+ DIČ: CZ 070 48 572 (Nejsme plátce DPH)
+ Datová schránka: 7897syr
+ Email: info@rowsandall.com
+ The company is registered in the business register at the
+ Regional Court in Brno (Společnost je zapsána v obchodním rejstříku vedeném u Krajského soudu v Brně, oddíl C, vložka 105845)
+
-Bug reports and feature requests can be done through our BitBucket page. Please check on the following link if your bug or issue is a known one. Feel free to file any feature request. -
- - -We run a facebook group where you can post questions and report problems, - especially if you think the wider user community benefits from the answers.
- - -You can also check me on Twitter: -
-When the site is down, this is the appropriate channel to look for apologies, updates, and offer help. - - -Rowsandall s.r.o.
- Nové sady 988/2
- 602 00 Brno
- Czech Republic
- IČ: 070 48 572
- DIČ: CZ 070 48 572 (Nejsme plátce DPH)
- Datová schránka: 7897syr
- Email: info@rowsandall.com
- The company is registered in the business register at the
- Regional Court in Brno (Společnost je zapsána v obchodním rejstříku vedeném u Krajského soudu v Brně, oddíl C, vložka 105845)
-
This functionality is aimed at users who have uploaded workouts from - the Nielsen-Kellerman Empower Oarlock/SpeedCoach combination before the - power inflation bug was known (May 4, 2018).
+Workouts recorded with a SpeedCoach running NK Firmware version 2.17 or - lower have Power and Work per Stroke values that are approximately - 9% (sculling) or 5% too high. The exact value of the error depends on your - inboard and oar length.
- -Currently, we autocorrect workouts recorded with old Firmware upon - their upload, but workouts that were present on the site before - the bug was known still have incorrect values for Power and Work per Stroke. -
- -- You can use this page to correct those workouts. -
- - -No workouts found
-{% endif %} -Select workouts on the left, - and press submit
-Use the date form to reduce the selection
- {% csrf_token %} - -
-You can use the date form above to reduce the selection
-This functionality is aimed at users who have uploaded workouts from + the Nielsen-Kellerman Empower Oarlock/SpeedCoach combination before the + power inflation bug was known (May 4, 2018).
+ +Workouts recorded with a SpeedCoach running NK Firmware version 2.17 or + lower have Power and Work per Stroke values that are approximately + 9% (sculling) or 5% too high. The exact value of the error depends on your + inboard and oar length.
+ +Currently, we autocorrect workouts recorded with old Firmware upon + their upload, but workouts that were present on the site before + the bug was known still have incorrect values for Power and Work per Stroke. +
++ You can use this page to correct those workouts. +
++
No workouts found
+ {% endif %} +Select workouts + and press submit +
++
With this form, you can export a summary table for all workouts within a selected date range. The table will be sent to you as a CSV file which can be opened in excel. The table contains @@ -27,7 +28,11 @@ By setting the start date to your registration date or earlier and the end date to today, you will receive all workout data we are storing for you.
--
- - + -
Drag and drop files here
-- Please correct the error{{ form.errors|pluralize }} below. +{% block main %} +
Drag and drop files here
++ Please correct the error{{ form.errors|pluralize }} below.
- {% endif %} + {% endif %}+ +
+
'
+ '
'
);
$.ajax({
data: data,
@@ -250,3 +247,7 @@
{% endblock %}
+
+ {% block sidebar %}
+ {% include 'menu_workout.html' %}
+ {% endblock %}
diff --git a/rowers/templates/instroke.html b/rowers/templates/instroke.html
index 622394d5..531962e9 100644
--- a/rowers/templates/instroke.html
+++ b/rowers/templates/instroke.html
@@ -1,80 +1,60 @@
-{% extends "base.html" %}
+{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Advanced Features {% endblock %}
-{% block content %}
-- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -This is a preview of the page with advanced functionality for Pro users. See the About page for more information and to sign up for Pro Membership +{% block main %} +
+ This is a preview of the page with advanced functionality for Pro users. + See the About page for more information + and to sign up for Pro Membership +
{% endif %} -- Edit Workout -
-- Advanced Edit -
-- Export -
- -| Date: | {{ workout.date }} | -
|---|---|
| Time: | {{ workout.starttime }} | -
| Distance: | {{ workout.distance }}m | -
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -Public link to this workout | -- https://rowsandall.com/rowers/workout/{{ workout.id }} - | - |
| Date: | {{ workout.date }} | +
|---|---|
| Time: | {{ workout.starttime }} | +
| Distance: | {{ workout.distance }}m | +
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | +Public link to this workout | ++ https://rowsandall.com/rowers/workout/{{ workout.id }} + | + + |
Unfortunately, this workout doesn't have any in stroke metrics
{% endif %} --
This document was created using a Contractology template available at http://www.freenetlaw.com..
-These terms and conditions govern your use of this website; by using this website, you accept these terms and conditions in full. If you disagree with these terms and conditions or any part of these terms and conditions, you must not use this website.
This website uses cookies. By using this website and agreeing to these terms and conditions, you consent to our rowsandall.com’s use of cookies in accordance with the terms of rowsandall.com’s privacy policy.
-Unless otherwise stated, rowsandall.com and/or its licensors own the intellectual property rights in the website and material on the website. Subject to the license below, all these intellectual property rights are reserved.
@@ -33,7 +32,7 @@ -You must not use this website in any way that causes, or may cause, damage to the website or impairment of the availability or accessibility of the website; or in any way which is unlawful, illegal, fraudulent or harmful, or in connection with any unlawful, illegal, fraudulent or harmful purpose or activity.
@@ -44,7 +43,7 @@You must not use this website to transmit or send unsolicited commercial communications.
-Access to certain areas of this website is restricted. rowsandall.com reserves the right to restrict access to areas of this website, or indeed this entire website, at rowsandall.com’s discretion.
@@ -52,7 +51,7 @@rowsandall.com may disable your user ID and password in rowsandall.com’s sole discretion without notice or explanation.
-In these terms and conditions, your user content
means material (including without limitation text, images, audio material, video material and audio-visual material) that you submit to this website, for whatever purpose.
Notwithstanding rowsandall.com’s rights under these terms and conditions in relation to user content, rowsandall.com does not undertake to monitor the submission of such content to, or the publication of such content on, this website.
-This website is provided as is
without any representations or warranties, express or implied. rowsandall.com makes no representations or warranties in relation to this website or the information and materials provided on this website.
Nothing on this website constitutes, or is meant to constitute, advice of any kind. If you require advice in relation to any legal, financial or medica] matter you should consult an appropriate professional.
-rowsandall.com will not be liable to you (whether under the law of contact, the law of torts or otherwise) in relation to the contents of, or use of, or otherwise in connection with, this website: @@ -90,7 +89,7 @@
These limitations of liability apply even if rowsandall.com has been expressly advised of the potential loss.
-Nothing in this website disclaimer will exclude or limit any warranty implied by law that it would be unlawful to exclude or limit; and nothing in this website disclaimer will exclude or limit rowsandall.com’s liability in respect of any: @@ -100,61 +99,59 @@
By using this website, you agree that the exclusions and limitations of liability set out in this website disclaimer are reasonable.
If you do not think they are reasonable, you must not use this website.
-You agree that the limitations of warranties and liability set out in this website disclaimer will protect rowsandall.com’s officers, employees, agents, subsidiaries, successors, assigns and sub-contractors as well as rowsandall.com.
-If any provision of this website disclaimer is, or is found to be, unenforceable under applicable law, that will not affect the enforceability of the other provisions of this website disclaimer.
-You hereby indemnify rowsandall.com and undertake to keep rowsandall.com indemnified against any losses, damages, costs, liabilities and expenses (including without limitation legal expenses and any amounts paid by rowsandall.com to a third party in settlement of a claim or dispute on the advice of rowsandall.com’s legal advisers) incurred or suffered by rowsandall.com arising out of any breach by you of any provision of these terms and conditions, or arising out of any claim that you have breached any provision of these terms and conditions.
-Without prejudice to rowsandall.com’s other rights under these terms and conditions, if you breach these terms and conditions in any way, rowsandall.com may take such action as rowsandall.com deems appropriate to deal with the breach, including suspending your access to the website, prohibiting you from accessing the website, blocking computers using your IP address from accessing the website, contacting your internet service provider to request that they block your access to the website and/or bringing court proceedings against you.
-rowsandall.com may revise these terms and conditions from time-to-time. Revised terms and conditions will apply to the use of this website from the date of the publication of the revised terms and conditions on this website. Please check this page regularly to ensure you are familiar with the current version.
-rowsandall.com may transfer, sub-contract or otherwise deal with rowsandall.com’s rights and/or obligations under these terms and conditions without notifying you or obtaining your consent.
You may not transfer, sub-contract or otherwise deal with your rights and/or obligations under these terms and conditions.
-If a provision of these terms and conditions is determined by any court or other competent authority to be unlawful and/or unenforceable, the other provisions will continue in effect. If any unlawful and/or unenforceable provision would be lawful or enforceable if part of it were deleted, that part will be deemed to be deleted, and the rest of the provision will continue in effect.
-These terms and conditions constitute the entire agreement between you and rowsandall.com in relation to your use of this website, and supersede all previous agreements in respect of your use of this website.
-These terms and conditions will be governed by and construed in accordance with Czech Law and any disputes relating to these terms and conditions will be subject to the exclusive jurisdiction of the courts of The Czech Republic.
-The rowsandall.com site is owned by Rowsandall s.r.o., Nové sady 988/2, Staré Brno, 602 00 Brno, Czech Republic (company identification number 070 48 572)
You can contact rowsandall.com by using the email contact form.
-
+
+ + {% if workouts.has_previous %} + {% if request.GET.q %} + + + + + + + {% else %} + + + + + + + {% endif %} + {% endif %} + + + Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}. + + + {% if workouts.has_next %} + {% if request.GET.q %} + + + + + + + {% else %} + + + + + + + {% endif %} + {% endif %} + +
++ {% if rankingonly and not team %} + + Show All Workouts + + {% elif not team %} + + Show Only Ranking Pieces + {% endif %} - +
+| Max HR | {% if not team %}- | {% else %} | Owner | {% endif %} - + {% for workout in workouts %} {% if workout.rankingpiece %} @@ -140,8 +191,8 @@{{ workout.date|date:"Y-m-d" }} | {{ workout.starttime|date:"H:i" }} | - {% if workout.user.user == user or user == team.manager %} - {% if workout.name != '' %} + {% if workout.user.user == user or user == team.manager %} + {% if workout.name != '' %}{{ workout.name }} @@ -164,23 +215,19 @@ | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | {{ workout.averagehr }} | {{ workout.maxhr }} | - {% if not team %} -- Export - | - {% else %} + {% if team %}- - {{ workout.user.user.first_name }} - {{ workout.user.user.last_name }} - + + {{ workout.user.user.first_name }} + {{ workout.user.user.last_name }} + | {% endif %}Flex | - Delete + Delete | - + {% endfor %} @@ -189,140 +236,26 @@ {% else %}
|---|
+
- {% endif %} - -- -
- Edit Workout -
-- Workflow View -
- -- Advanced Edit -
- -+ +{% if user|team_members %} + +{% endif %} +{% endif %} diff --git a/rowers/templates/menu_demo.html b/rowers/templates/menu_demo.html index e742af16..ef3e7d09 100644 --- a/rowers/templates/menu_demo.html +++ b/rowers/templates/menu_demo.html @@ -1,3 +1,4 @@ +
+{% if user|team_members %| + +{% endif %} diff --git a/rowers/templates/multicompare.html b/rowers/templates/multicompare.html index 8901fa8c..e3e32d7b 100644 --- a/rowers/templates/multicompare.html +++ b/rowers/templates/multicompare.html @@ -1,10 +1,10 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} {% block title %}View Comparison {% endblock %} -{% block content %} +{% block main %} +
-
- -
-+ +
- You can use the form above to change the metric or filter the data. + You can use the form to change the metric or filter the data. Set Min SPM and Max SPM to select only strokes in a certain range of stroke rates. Set Work per Stroke to a minimum value to remove "paddle" strokes or turns.
-Summary for {{ theuser.first_name }} {{ theuser.last_name }} + between {{ startdate|date }} and {{ enddate|date }}
-The table gives the efforts you marked as Ranking Piece. + The graph shows the best segments from those pieces, plotted as + average power (over the segment) vs the duration of the segment/ + In other words: How long you can hold that power. +
-Summary for {{ theuser.first_name }} {{ theuser.last_name }} - between {{ startdate|date }} and {{ enddate|date }}
+Whenever you load or reload the page, a new calculation is started + as a background process. The page will reload automatically when the + calculation is ready. +
-Direct link for other users: - {% if workouttype == 'water' %} - https://rowsandall.com/rowers/{{ id }}/otw-bests/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }} - {% else %} - https://rowsandall.com/rowers/{{ id }}/ote-ranking/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }} - {% endif %} -
+At the bottom of the page, you will find predictions derived from the model.
+ +Use this form to select a different date range:
++ Select start and end date for a date range: +
The table gives the efforts you marked as Ranking Piece. - The graph shows the best segments from those pieces, plotted as - average power (over the segment) vs the duration of the segment/ - In other words: How long you can hold that power. -
+Whenever you load or reload the page, a new calculation is started - as a background process. The page will reload automatically when - calculation is ready.
-At the bottom of the page, you will find predictions derived from the model.
-Use this form to select a different date range:
-- Select start and end date for a date range: -
| Distance | -Duration | -Avg Power | -Date | -Avg HR | -Max HR | -Edit | +Distance | +Duration | +Avg Power | +Date | +Avg HR | +Max HR | +Edit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ workout.distance }} m | -{{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -{{ avgpower|lookup:workout.id }} W | -{{ workout.date }} | -{{ workout.averagehr }} | -{{ workout.maxhr }} | -- {{ workout.name }} | - -|||||||
| {{ workout.distance }} m | +{{ workout.duration |durationprint:"%H:%M:%S.%f" }} | +{{ avgpower|lookup:workout.id }} W | +{{ workout.date }} | +{{ workout.averagehr }} | +{{ workout.maxhr }} | ++ {{ workout.name }} | + +
No ranking workouts found
- {% endif %} + {% endfor %} + +No ranking workouts found
+ {% endif %} -Add non-ranking piece using the form. The piece will be added in the prediction tables below.
+Add non-ranking piece using the form. The piece will be added in the prediction tables below.
-| Duration | @@ -208,25 +142,25 @@
|---|
- Edit Workout -
-- Advanced Edit -
- -+
-
Summary for {{ theuser.first_name }} {{ theuser.last_name }} - between {{ startdate|date }} and {{ enddate|date }}
+Direct link for other users: - {% if workouttype == 'water' %} - https://rowsandall.com/rowers/{{ id }}/otw-bests/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }} - {% else %} - https://rowsandall.com/rowers/{{ id }}/ote-ranking/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }} - {% endif %} -
+Summary for {{ theuser.first_name }} {{ theuser.last_name }} + between {{ startdate|date }} and {{ enddate|date }}
-The table gives the efforts you marked as Ranking Piece. - The graph shows the best segments from those pieces, plotted as - average power (over the segment) vs the duration of the segment/ - In other words: How long you can hold that power. -
+The table gives the efforts you marked as Ranking Piece. + The graph shows the best segments from those pieces, plotted as + average power (over the segment) vs the duration of the segment/ + In other words: How long you can hold that power. +
-When you change the date range, the algorithm calculates new - parameters in a background process. You may have to reload the - page to get an updated prediction.
-At the bottom of the page, you will find predictions derived from the model.
-Use this form to select a different date range:
-- Select start and end date for a date range: -
When you change the date range, the algorithm calculates new + parameters in a background process. You may have to reload the + page to get an updated prediction.
+At the bottom of the page, you will find predictions derived from the model.
+ +Use this form to select a different date range:
++ Select start and end date for a date range: +
| Distance | -Duration | -Avg Power | -Date | -Avg HR | -Max HR | -Edit | +Distance | +Duration | +Avg Power | +Date | +Avg HR | +Max HR | +Edit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ workout.distance }} m | -{{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -{{ avgpower|lookup:workout.id }} W | -{{ workout.date }} | -{{ workout.averagehr }} | -{{ workout.maxhr }} | -- {{ workout.name }} | - -|||||||
| {{ workout.distance }} m | +{{ workout.duration |durationprint:"%H:%M:%S.%f" }} | +{{ avgpower|lookup:workout.id }} W | +{{ workout.date }} | +{{ workout.averagehr }} | +{{ workout.maxhr }} | ++ {{ workout.name }} | + +
No ranking workouts found
- {% endif %} + {% endfor %} + +No ranking workouts found
+ {% endif %} + +Add non-ranking piece using the form. The piece will be added in the prediction tables below.
+ + -Add non-ranking piece using the form. The piece will be added in the prediction tables below.
- - - -| Duration | @@ -200,25 +136,24 @@
|---|
+ For the advanced OTW power and wind correction calculation, + we need to know the boat type and the average weight per crew member. + Currently only 1x (single) is implemented. Setting the value to + 2x (double) will still run the calculations for a single. + We use FISA minimum boat weight and standard rigging for our calculations. +
-- Edit Workout -
-- Workflow View -
+The Quick calculation option potentially speeds up the calculation, + at the cost of a slight reduction in accuracy. It is recommended + to keep this option selected.
-- Advanced Edit -
- -- For the advanced OTW power and wind correction calculation, - we need to know the boat type and the average weight per crew member. - Currently only 1x (single) is implemented. Setting the value to - 2x (double) will still run the calculations for a single. - We use FISA minimum boat weight and standard rigging for our calculations. -
- -The Quick calculation option potentially speeds up the calculation, - at the cost of a slight reduction in accuracy. It is recommended - to keep this option selected.
++ The power calculations take wind and stream as inputs. +
++ Set wind strength and direction +
+ ++ + Set river stream strength + +
+ + +- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -
-
+ | Date/Time: | {{ workout.startdatetime|localtime}} | -{% endlocaltime %} -|||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Distance: | {{ workout.distance }}m | -|||||||||||||
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -|||||||||||||
| Public link to this workout | -- https://rowsandall.com/rowers/workout/{{ workout.id }} - | -|||||||||||||
| Comments | -
+
|
+
+
| Comments | @@ -10,4 +11,5 @@
|---|
- Workout Stats -
-+ Workout Stats +
diff --git a/rowers/templates/physics.html b/rowers/templates/physics.html index efc5757d..bdea3627 100644 --- a/rowers/templates/physics.html +++ b/rowers/templates/physics.html @@ -1,166 +1,164 @@ +{% extends "newbase.html" %} +{% block title %}About us{% endblock title %} +{% block main %} - {% extends "base.html" %} - {% block title %}About us{% endblock title %} - {% block content %} +You are reading this because you want to understand how the wind/stream conversion and the conversion from OTW pace to OTE pace works.
- -The conversions are done using a one-dimensional mechanical model that is -introduced here. -The model takes into account, among others, the following parameters: -
You are reading this because you want to understand how the wind/stream conversion and the conversion from OTW pace to OTE pace works.
+ +The conversions are done using a one-dimensional mechanical model that is + introduced here. + The model takes into account, among others, the following parameters: +
-Knowing boat type (rigging), pace and stroke rate, and taking into account -the influence of wind and stream (if provided), I am able to find the -mechanical power that you provide to the rowing system by a reverse -calculation. That is, I vary the input force until I find the one that -corresponds to your actual pace at that stroke rate. -
--Knowing the power, I can calculate how fast you would have gone without -external wind and stream influences by running the calculation in a forward -way, using the power and force profile found. This is the wind/stream -corrected pace, which I think is useful to know and be able to compare -from training to training and between different rowing venues. -
++ Knowing boat type (rigging), pace and stroke rate, and taking into account + the influence of wind and stream (if provided), I am able to find the + mechanical power that you provide to the rowing system by a reverse + calculation. That is, I vary the input force until I find the one that + corresponds to your actual pace at that stroke rate. +
++ Knowing the power, I can calculate how fast you would have gone without + external wind and stream influences by running the calculation in a forward + way, using the power and force profile found. This is the wind/stream + corrected pace, which I think is useful to know and be able to compare + from training to training and between different rowing venues. +
+ ++ Using another algorithm to calculate total mechanical power on an erg, I can + calculate what the erg display would show you if you rowed on the erg with + the same average power, at the same stroke rate. The calculations are done + for a statical Concept2 erg with a fairly standard drag factor. I cannot + take into account the fact that you may use different technique or would + row at a different stroke rate on the erg. +
--Using another algorithm to calculate total mechanical power on an erg, I can -calculate what the erg display would show you if you rowed on the erg with -the same average power, at the same stroke rate. The calculations are done -for a statical Concept2 erg with a fairly standard drag factor. I cannot -take into account the fact that you may use different technique or would -row at a different stroke rate on the erg. -
- --It is important to understand that the Power display on the erg is not showing -you the complete picture. In my calculations, I use my proprietary algorithms -to calculate the additional power that goes into moving your body weight up -and down the slide on a static erg. To get the most accurate results, it is -important to be honest about your weight and set it independently for each -workout. -
- -Not taken into account are the following factors: -
+ It is important to understand that the Power display on the erg is not showing + you the complete picture. In my calculations, I use my proprietary algorithms + to calculate the additional power that goes into moving your body weight up + and down the slide on a static erg. To get the most accurate results, it is + important to be honest about your weight and set it independently for each + workout. +
+ +Not taken into account are the following factors: +
+ I have checked the model both from a Physics perspective (I have a degree in + Physics, if you are interested) and compared with the data available. + An important data set has been published here by Dr Kleshnev. For sculling, + my algorithms are extremely close in reproducing that data set. For sweep + rowing, I am still fine tuning some parameters, but I am close for a pair and + a four. I had to make assumptions about Kleshnev's data, especially about the + stroke rate, but as I got realistic stroke rates (35 and higher) for world + record performance, I am quite confident. +
+ ++ On top of that I am constantly comparing the model's results to my own sculling + and rowing, and I will be the first to admit flaws and correct them. So please + contact me if there are any inconsistencies, suspicions, questions or simply + if you want to chat about Rowing Physics. +
--I have checked the model both from a Physics perspective (I have a degree in -Physics, if you are interested) and compared with the data available. -An important data set has been published here by Dr Kleshnev. For sculling, -my algorithms are extremely close in reproducing that data set. For sweep -rowing, I am still fine tuning some parameters, but I am close for a pair and -a four. I had to make assumptions about Kleshnev's data, especially about the -stroke rate, but as I got realistic stroke rates (35 and higher) for world -record performance, I am quite confident. -
+ +-On top of that I am constantly comparing the model's results to my own sculling -and rowing, and I will be the first to admit flaws and correct them. So please -contact me if there are any inconsistencies, suspicions, questions or simply -if you want to chat about Rowing Physics. -
- - -Here's the best way - in my mind - to use the Rowing Physics -functionality. I am assuming you have successfully uploaded or imported -a rowing workout. You must have position data (lat/long) with your row. A -TCX from CrewNerd or RiM or a workout imported from SportTracks or Strava -(where you see a map of your workout on those sites) should have those -data. I am working on adding the FIT file format that is used by SpeedCoach -GPS. For now, export the data to Strava and then import them here. -
- -Recipe for success: -
Here's the best way - in my mind - to use the Rowing Physics + functionality. I am assuming you have successfully uploaded or imported + a rowing workout. You must have position data (lat/long) with your row. A + TCX from CrewNerd or RiM or a workout imported from SportTracks or Strava + (where you see a map of your workout on those sites) should have those + data. I am working on adding the FIT file format that is used by SpeedCoach + GPS. For now, export the data to Strava and then import them here. +
+ +Recipe for success: +
+ Once you have run the calculation, the boat type, average crew weight, + Power and corrected pace data are stored permanently on the site. If you would + export the data to Strava or SportTracks now, those sites will have the + Power data. +
+ +-Once you have run the calculation, the boat type, average crew weight, -Power and corrected pace data are stored permanently on the site. If you would -export the data to Strava or SportTracks now, those sites will have the -Power data. -
+I am running the calculations from a first principles base, so for + each data point that I am calculating, I am finding the stroke average + force, then calculating corrected pace (wind/stream) and finding the + corresponding erg power. I am not taking any shortcuts. The advantage + of this approach is that I can give you numbers irrespective of your + weight, speed, stroke rate, sex, etc. The model can deal with circumstances + it has not encountered before. The downside is that it takes time.
+ ++ A much faster approach would be to simply take pre-calculated data from + a table and interpolate. The advantage of this approach is is speed. The + disadvantage is that extrapolation outside the limits of the available + data is dangerous and will lead to erroneous results.
+ +Future versions of this site will use a hybrid approach + but only for pace/wind/stream/stroke rate/weight combinations that I consider + well validated. For that, I need to collect data, so keep the workouts coming! +
+ +
+
+
+
-I am running the calculations from a first principles base, so for -each data point that I am calculating, I am finding the stroke average -force, then calculating corrected pace (wind/stream) and finding the -corresponding erg power. I am not taking any shortcuts. The advantage -of this approach is that I can give you numbers irrespective of your -weight, speed, stroke rate, sex, etc. The model can deal with circumstances -it has not encountered before. The downside is that it takes time.
- --A much faster approach would be to simply take pre-calculated data from -a table and interpolate. The advantage of this approach is is speed. The -disadvantage is that extrapolation outside the limits of the available -data is dangerous and will lead to erroneous results.
- -Future versions of this site will use a hybrid approach -but only for pace/wind/stream/stroke rate/weight combinations that I consider -well validated. For that, I need to collect data, so keep the workouts coming! -
- -
-
-- On this page, you can create and edit sessions for an entire time - period. You see a list of the current sessions planned for the - selected time period. Each row in the table is a session. You can - remove a session by clicking "remove" at the end of a row. - You can edit the date in the forms. If you need to add a new session, - click the "Add More" button to add a new session. Use the "Submit" - button to commit any changes you made. +
+ On this page, you can create and edit sessions for an entire time + period. You see a list of the current sessions planned for the + selected time period. Each row in the table is a session. You can + remove a session by clicking "remove" at the end of a row. + You can edit the date in the forms. If you need to add a new session, + click the "Add More" button to add a new session. Use the "Submit" + button to commit any changes you made.
-| - {% for field in ps_formset.0.visible_fields %} - | {{ field.label_tag }} | - {% endfor %} -||||
|---|---|---|---|---|---|
{{ forloop.counter }}
- {% if form.instance.pk %}{{ form.DELETE }}{% endif %}
- {{ form.id }}
- {% for field in form.hidden_fields %}
- {{ field }}
+
|
This will permanently delete the planned session
+{% block main %} +This will permanently delete the planned session
- -- Cancel -
- Delete +
Are you sure you want to delete {{ object }}?
+ +| {{ value.0 }} | {{ value.1 }} | -
| {{ value.0 }} | {{ value.1 }} | +
Please correct the error{{ form.errors|pluralize }} below.
{% endif %} - +
No sessions found
-{% endif %} -Select one or more planned sessions on the left, - select the date when the new cycle starts below - and press submit
- {% csrf_token %} -
-
+ {% if plannedsessions %}
+
+ Toggle All
+
+
No sessions found
+ {% endif %} + +Select one or more planned sessions on the left, + select the date when the new cycle starts below + and press submit
+ {% csrf_token %} ++
-You can use the date and search forms above to search through all +
You can use the date and search forms above to search through all sessions.
-- From {{ startdate }} to {{ enddate }} -
-| On or after | {{ ps.startdate }} | +On or after | {{ ps.startdate }} |
|---|---|---|---|
| On or before | {{ ps.enddate }} | +On or before | {{ ps.enddate }} |
| Session Type | {{ ps.sessiontype }} | +Session Type | {{ ps.sessiontype }} |
| Session Mode | {{ ps.sessionmode }} | +Session Mode | {{ ps.sessionmode }} |
| Criteria | {{ ps.criterium }} | +Criteria | {{ ps.criterium }} |
| Value | {{ ps.sessionvalue }} | +Value | {{ ps.sessionvalue }} |
| Unit | {{ ps.sessionunit }} | +Unit | {{ ps.sessionunit }} |
| Comment | {{ ps.comment|linebreaks }} | +Comment | {{ ps.comment|linebreaks }} |
| On or after | -On or before | -Preferred date | -Name | - {% for r in rowers %} -
- {{ r.user.first_name }} {{ r.user.last_name }}
+
+
+{% endif %}
+
{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_plan.html' %}
+{% endblock %}
diff --git a/rowers/templates/plannedsessionsmanage.html b/rowers/templates/plannedsessionsmanage.html
index 6b8e4f66..35311a35 100644
--- a/rowers/templates/plannedsessionsmanage.html
+++ b/rowers/templates/plannedsessionsmanage.html
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
@@ -16,119 +16,71 @@
{% endblock %}
-{% block content %}
-
Workouts that are not linked to any session-
Workouts that are not linked to any session+
- {% include "planningbuttons.html" %}
-
-
-
-
-
+{% block main %}
+Manage Plan Execution for {{ rower.user.first_name }} {{ rower.user.last_name }}-Manage Plan Execution for {{ rower.user.first_name }} {{ rower.user.last_name }}-
-
-
-
-{% if user.is_authenticated and user|is_manager %}
-
-
-
-{% endif %}
-
- {% for member in user|team_rowers %}
- {{ member.user.first_name }} {{ member.user.last_name }}
- {% endfor %}
-
-
-
-Select one session on the left, and one or more workouts on the right - to match the workouts to the session. For tests and training sessions, - the selected workouts must be done on the same date. For all sessions, - the workout dates must be between the start and end date for the - session. - -- If you select a workout that has already been matched to another session, - it will change to match this session. - -- Workouts marked with a red check mark (✔) - are currently linked to one of your sessions. A workout can only be assigned to - one session at a time. - -+ If you select a workout that has already been matched to another session, + it will change to match this session. + ++ Workouts marked with a red check mark (✔) + are currently linked to one of your sessions. A workout can only be assigned to + one session at a time. + + +
-
-
+{% endblock %}
+
+ {% block sidebar %}
+{% include 'menu_workout.html' %}
{% endblock %}
diff --git a/rowers/templates/sporttracks_list_import.html b/rowers/templates/sporttracks_list_import.html
index b547efc8..8400d5ff 100644
--- a/rowers/templates/sporttracks_list_import.html
+++ b/rowers/templates/sporttracks_list_import.html
@@ -1,52 +1,59 @@
-{% extends "base.html" %}
+{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Workouts{% endblock %}
-{% block content %}
+{% block main %}
-
-Planned Sessions -
-
-
-Workouts -
+
+
+ Workouts+
- {% include "planningbuttons.html" %}
-
+{% block main %}
+Edit Team Session++ Please correct the error{{ form.errors|pluralize }} below. + + {% endif %} + {% csrf_token %} -
-
-
-
-
- Edit Team Session-
-
-
-
-
- - Please correct the error{{ form.errors|pluralize }} below. - - {% endif %} - {% csrf_token %} - -
-
-
-
-
-
+
+
+Select Team-- Selecting a team assigns this session to all members of the team. - Unselecting a team does not remove rowers - who are already assigned to this session. Use the Rowers selection for that. +
- {% include "planningbuttons.html" %}
-
-
-
-
-
- {% if user.is_authenticated and psdict.id.1|is_session_manager:user %}
-
+{% if user.is_authenticated and psdict.id.1|is_session_manager:user %}
+
- + Edit Session - {% else %} - - {% endif %} -
- {% if plannedsession.sessiontype == 'coursetest' %}
- Courses
- {% else %}
-
- {% endif %}
-
-
-
+
+ {% endif %}
+
+
{% endblock %}
+{% block sidebar %}
+{% include 'menu_plan.html' %}
+{% endblock %}
+
{% block scripts %}
diff --git a/rowers/templates/polar_list_import.html b/rowers/templates/polar_list_import.html
index 3e61acf2..9e6a3817 100644
--- a/rowers/templates/polar_list_import.html
+++ b/rowers/templates/polar_list_import.html
@@ -1,10 +1,10 @@
-{% extends "base.html" %}
+{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block title %}Workouts{% endblock %}
-{% block content %}
+{% block main %}
-
-Session {{ psdict.name.1 }}-
- {% if plannedsession.sessiontype == 'test' or plannedsession.sessiontype == 'coursetest' %}
-
-
-Ranking-
Workouts attached-
Ranking+
Workouts attached+
-
-
-{{ rower.user.first_name }} {{ rower.user.last_name }}-Status: {{ status }} -Percentage complete: {{ ratio }} -
-
-Stats-
-
- {% if coursescript %}
- Course+ + {% endfor %} + +{{ rower.user.first_name }} {{ rower.user.last_name }}+Status: {{ status }} +Percentage complete: {{ ratio }} +Stats+
Course{{ coursediv|safe }} - + {{ coursescript|safe }} - {% endif %} -New Workouts Imported From Polar FlowDue to a limitation in Polar Flow's API, we can only access new workouts. We @@ -47,3 +47,7 @@ No new workouts found {% endif %} {% endblock %} + +{% block sidebar %} +{% include 'menu_workouts.html' %} +{% endblock %} diff --git a/rowers/templates/promembership.html b/rowers/templates/promembership.html index c3422175..201d3044 100644 --- a/rowers/templates/promembership.html +++ b/rowers/templates/promembership.html @@ -1,211 +1,245 @@ - {% extends "base.html" %} - {% block title %}Rowsandall Pro Membership{% endblock title %} - {% block content %} +{% extends "newbase.html" %} +{% block title %}Rowsandall Pro Membership{% endblock title %} +{% block main %} {% load rowerfilters %} -
-
-
-Pro Membership+Paid Membership Plans-Donations are welcome to keep this web site going. To help cover the hosting
- costs, I have created several paid plans offering advanced functionality.
- Once I process your
- donation, I will give you access to some
- {% if user.rower.rowerplan == 'basic' and user.rower.protrialexpires|date_dif == 1 %}
-
+ Free Trial-- You qualify for a 14 day free trial. No credit card needed. - Try out Pro or Self-Coach membership for two weeks. Click the button below to - sign up for the trial. After your trial period expires, you will be - automatically reset to the Basic plan, unless you upgrade to Pro. - - -Recurring Payment-You need a Paypal account for this --
One Year Subscription-Only a credit card needed. Will not automatically renew - --
Payment Processing-After you do the payment, we will manually change your membership to - "Pro". Depending on our availability, this may take some time - (typically one working day). Don't hesitate to contact us - if you have any questions at this stage. - -If, for any reason, you are not happy with your Pro membership, please let me know through the contact form. I will contact you as soon as possible to discuss how we can make things better. - -Rowsandall.com's Training Planning functionality + is part of the paid "Self-Coach" and "Coach" plans. + +On the "Self-Coach" plan, you can plan your own sessions. + +On the "Coach" plan, you can establish teams, see workouts done by + athletes on your team, and plan individual and group sessions for your + athletes. + + +If you would like to find a coach who helps you plan your training + through rowsandall.com, contact me throught the contact form. + + {% if user.rower.rowerplan == 'basic' and user.rower.protrialexpires|date_dif == 1 %} +Free Trial++ You qualify for a 14 day free trial. No credit card needed. + Try out Pro or Self-Coach membership for two weeks. Click the button below to + sign up for the trial. After your trial period expires, you will be + automatically reset to the Basic plan, unless you upgrade to Pro. + +Yes, I want to try Pro membership for 14 days for free. No strings attached. +Yes, I want to try Self-Coach membership for 14 days for free. No strings attached. + {% endif %} + +Click on the PayPal button to pay for your Pro membership. Before you pay, please register for the free Basic membership and add your user name to the form. + Your payment will be valid for one year. + You will be taken to the secure PayPal payment site. + +Recurring Payment+You need a Paypal account for this. This is plan will automatically renew each year. ++
One Year Subscription+Only a credit card needed. Will not automatically renew + ++
Payment Processing+After you do the payment, we will manually change your membership to + "Pro". Depending on our availability, this may take some time + (typically one working day). Don't hesitate to contact us + if you have any questions at this stage. + +If, for any reason, you are not happy with your Pro membership, please let me know through the contact form. I will contact you as soon as possible to discuss how we can make things better. + +
-
-
-
-
+{% block main %}
+Submit Your Result for {{ race.name }}-Submit Your Result for {{ race.name }}-
- Select one of the following workouts that you rowed within the race window -
+ {% csrf_token %} + + + + @@ -53,3 +50,7 @@ {% block scripts %} {% endblock %} + +{% block sidebar %} +{% include 'menu_racing.html' %} +{% endblock %} diff --git a/rowers/templates/rankings.html b/rowers/templates/rankings.html index 00146e88..0a533016 100644 --- a/rowers/templates/rankings.html +++ b/rowers/templates/rankings.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -11,378 +11,320 @@ {% endblock %} -{% block content %} +{% block main %} - - + + - {{ interactiveplot |safe }} - - - +{{ interactiveplot |safe }} -
-
-{% if rower.user == user %}
-
- {% if theuser %}
-
- {{ theuser.first_name }}'s Ranking Pieces- {% else %} -{{ user.first_name }}'s Ranking Pieces- {% endif %} -
- {% if user.is_authenticated and user|is_manager %}
-
+{% if theuser %}
+
-
-
-
- {% for member in user|team_members %}
- {{ member.first_name }} {{ member.last_name }}
- {% endfor %}
-
- {% else %}
-
- {% endif %}
- {{ theuser.first_name }}'s Ranking Pieces+{% else %} +{{ user.first_name }}'s Ranking Pieces+{% endif %} -
-
-Summary for {{ theuser.first_name }} {{ theuser.last_name }} - between {{ startdate|date }} and {{ enddate|date }} +
-
-
-Use this form to select a different date range: -- Select start and end date for a date range: -
-
-
-
-
-
-
-
-
- {% csrf_token %}
-
-
-
-
-
-
-
-
-Ranking Piece Results- - {% if rankingworkouts %} - -
No ranking workouts found - {% endif %} - -Missing your best pieces? Upload stroke data of any Concept2 - ranking piece and they will be automatically added to this page. -Don't have stroke data for official Concept2 ranking pieces? - The PRO membership ranking piece functionality - allows you to include your best non ranking pieces and even use - parts of workouts for improved calculation accuracy. - - -Want to add race results but you don't have stroke data? - Click here. - -Scroll down for the chart and pace predictions for ranking pieces. - -
-
-
-
-Critical Power Plot+Critical Power Plot{{ the_div|safe }} - -{% if age %} -The dashed lines are based on the - Concept2 - rankings for your age, gender - and weight category. World class means within 5% of - - World Record in terms - of power. - The percentile lines are estimates of where the percentiles - of the Concept2 rankings historically are for those of exactly - your age, gender and weight class. - -{% endif %} -
-
+ Pace predictions for Ranking Pieces- -Add non-ranking piece using the form. The piece will be added in the prediction tables below. -
-
+ /
-The dashed lines are based on the + Concept2 + rankings for your age, gender + and weight category. World class means within 5% of + + World Record in terms + of power. + The percentile lines are estimates of where the percentiles + of the Concept2 rankings historically are for those of exactly + your age, gender and weight class. + + {% endif %} + +Ranking Piece Results+ + {% if rankingworkouts %} + +
No ranking workouts found + {% endif %} + +Missing your best pieces? Upload stroke data of any Concept2 + ranking piece and they will be automatically added to this page. +Don't have stroke data for official Concept2 ranking pieces? + The PRO membership ranking piece functionality + allows you to include your best non ranking pieces and even use + parts of workouts for improved calculation accuracy. + + +Want to add race results but you don't have stroke data? + Click here. + +Scroll down for the chart and pace predictions for ranking pieces. + +Pace predictions for Ranking Pieces+ +Add non-ranking piece using the form. The piece will be added in the prediction tables below. +
-
-Paul's Law-{% if nrdata >= 1 %} -
Insufficient data to make predictions - -{% endif %} -
-
-
-CP Model-{% if nrdata >= 4 %} -
Insufficient data to make predictions - -{% endif %} -
- {% if age and sex != 'not specified' %}
-
-World Records-
Paul's Law+ {% if nrdata >= 1 %} +
Insufficient data to make predictions + + {% endif %} + +CP Model+ {% if nrdata >= 4 %} +
Insufficient data to make predictions + + {% endif %} +World Records+
Use this form to select a different date range: ++ Select start and end date for a date range: + + Summary for {{ theuser.first_name }} {{ theuser.last_name }} + between {{ startdate|date }} and {{ enddate|date }} + +The table gives the best efforts achieved on the + official Concept2 ranking pieces in the selected date range. Also the percentile scores on the + chart are based on the Concept2 rankings. +Main-Vestibulum consectetur sit amet nisi ut consectetur. Praesent efficitur, nibh vitae fringilla scelerisque, est neque faucibus quam, in iaculis purus libero eget mauris. Curabitur et luctus sapien, ac gravida orci. Aliquam erat volutpat. In hac habitasse platea dictumst. Aenean commodo, arcu a commodo efficitur, libero dolor mollis turpis, non posuere orci leo eget enim. Curabitur sit amet elementum orci, pulvinar dignissim urna. Morbi id ex eu ex congue laoreet. Aenean tincidunt dolor justo, semper pretium libero luctus nec. Ut vulputate metus accumsan leo imperdiet tincidunt. Phasellus nec rutrum dolor. Cras imperdiet sollicitudin arcu, id interdum nibh fermentum in. - -Vestibulum consectetur sit amet nisi ut consectetur. Praesent efficitur, nibh vitae fringilla scelerisque, est neque faucibus quam, in iaculis purus libero eget mauris. Curabitur et luctus sapien, ac gravida orci. Aliquam erat volutpat. In hac habitasse platea dictumst. Aenean commodo, arcu a commodo efficitur, libero dolor mollis turpis, non posuere orci leo eget enim. Curabitur sit amet elementum orci, pulvinar dignissim urna. Morbi id ex eu ex congue laoreet. Aenean tincidunt dolor justo, semper pretium libero luctus nec. Ut vulputate metus accumsan leo imperdiet tincidunt. Phasellus nec rutrum dolor. Cras imperdiet sollicitudin arcu, id interdum nibh fermentum in. - + +
Thank you.-Thank you for registering. You can now login using the credential you provided. You can also view some of the videos below to get you started. +{% extends "newbase.html" %} +{% block title %}Contact Us - Thank You{% endblock title %} +{% block main %} +Thank you for registering+Thank you for registering. You can now login using the credentials you provided. Return home -Basic Navigation- - -Upload Page- - -Integration with Strava, SportTracks or Concept2 logbook- - - - - - - - - {% endblock content %} +{% endblock main %} + + +{% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} + diff --git a/rowers/templates/registration_form.html b/rowers/templates/registration_form.html index 0e337e78..bd75d942 100644 --- a/rowers/templates/registration_form.html +++ b/rowers/templates/registration_form.html @@ -1,45 +1,50 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} {% block title %}Contact Us{% endblock title %} {% block meta %} {% endblock %} - {% block content %} -
-
- {% if form.errors %}
-
- - Please correct the error{{ form.errors|pluralize }} below. - - {% endif %} - -
- Terms of Service
-
-
-
-
- {% endblock content %}
+
+
+ To use rowsandall, you need to register and agree with the Terms of Service. -Registration is free. - -Some of our advanced services only work if you give us your - (approximate) birth date, sex and weight category, with 72.5 kg the - bounday between heavies and lighties for men, and 59 kg for women. - - -Also, we are restricting access to the site to 16 years and older - because of EU data protection regulations. - -To use rowsandall, you need to register and agree with the Terms of Service. +Registration is free. + +Some of our advanced services only work if you give us your + (approximate) birth date, sex and weight category, with 72.5 kg the + bounday between heavies and lighties for men, and 59 kg for women. + + +Also, we are restricting access to the site to 16 years and older + because of EU data protection regulations. +
-
+
-
-- Export Settings- {% if form.errors %} -- Please correct the error{{ form.errors|pluralize }} below. - - {% endif %} +{% block main %} +Import and Export Settings for {{ rower.user.first_name }} {{ rower.user.last_name }}+{% if form.errors %} ++ Please correct the error{{ form.errors|pluralize }} below. + +{% endif %} -
-
-
-
-
-
-
-
-
- User Settings for {{ rower.user.first_name }} {{ rower.user.last_name }}- -
-
-
-
- {% for rower in user|team_rowers %}
- {{ rower.user.first_name }} {{ rower.user.last_name }}
- {% endfor %}
-
-
+{% block main %}
+
- User Settings for {{ rower.user.first_name }} {{ rower.user.last_name }}+ +Need help? Click to read the tutorial + +
-
-- Power Zones-The power zones are defined relative to power as measured by the - indoor rower. -- Please correct the error{{ powerzonesform.errors|pluralize }} below. - {{ powerzonesform.non_field_errors }} - - - {% endif %} -
-
-
-
-
- - Account Information-
-
-
- {% if userform.errors %}
+ {% if userform.errors %}
-
- - {% if rower.user == user %} - Password Change - {% else %} - - {% endif %} - -Please correct the error{{ form.errors|pluralize }} below. @@ -133,137 +41,59 @@
- {% if rower.rowerplan == 'basic' and rower.user == user %}
- Upgrade
- {% else %}
-
- {% endif %}
-
-
-
+ {% if rower.rowerplan == 'basic' and rower.user == user %}
+ Upgrade
+ {% else %}
+
+ {% endif %}
+
-
-
-
-
-
+
+ {% if rower.user == user %}
+
-GDPR - Data Protection- Functional Threshold Power and OTW Slack-Use this form to quickly change your zones based on the power of a - recent - full out 60 minutes effort on the ergometer. - It will update all zones defined above. -The OTW Power Slack is the percentage drop of your On-the-water - rowing power - vs the erg power. Typical values are around 15%. This will lower - the power zones for your OTW workouts. -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
{% endif %}
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_profile.html' %}
{% endblock %}
diff --git a/rowers/templates/rower_preferences.html b/rowers/templates/rower_preferences.html
new file mode 100644
index 00000000..74c8da4c
--- /dev/null
+++ b/rowers/templates/rower_preferences.html
@@ -0,0 +1,108 @@
+{% extends "newbase.html" %}
+{% load staticfiles %}
+{% load rowerfilters %}
+
+{% block title %}Change Rower Preferences{% endblock %}
+
+{% block main %}
+
+
+
-- Applications-
User Preferences for {{ rower.user.first_name }} {{ rower.user.last_name }}+ +Need help? Click to read the tutorial + +
Available on Runkeeper- {% if workouts %} -
No workouts found - {% endif %} +{% if workouts %} +
No workouts found +{% endif %} +{% endblock %} + +{% block sidebar %} +{% include 'menu_workouts.html' %} {% endblock %} diff --git a/rowers/templates/show_graph.html b/rowers/templates/show_graph.html index 00cdab68..f4ac2a77 100644 --- a/rowers/templates/show_graph.html +++ b/rowers/templates/show_graph.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -14,60 +14,64 @@ {% endblock %} -{% block content %} -{{ workout.name }}- - --
-
-
-{% if user.is_authenticated and user == rower.user %}
-
-- Edit Workout - -{% else %} -- See Workout - -{% endif %} -
- {% if user.is_authenticated and user == rower.user %}
-
-- Workflow View - - {% else %} -- {% endif %} -
-{% if user.is_authenticated and user == rower.user %}
-
-- Delete Chart - -{% else %} --{% endif %} -
-
+ data-text="@rowsandall #rowingdata">Tweet
+
+
+
+
+
-
- + Edit Workout + + {% else %} ++ See Workout + + {% endif %} + {% if user.is_authenticated and user == rower.user %} ++ Workflow View + + {% else %} ++ {% endif %} + + Delete Chart + + {% else %} ++ {% endif %} +
-
- {% if form.errors %}
-
-
-- Please correct the error{{ form.errors|pluralize }} below. - - {% endif %} - -Edit Workout Interval Data-
-
-
+{% block main %}
+
-
- - Edit - -
-
- - Export - - -
-
- - Advanced - - Advanced Functionality (More interactive Charts) - -Split Workout{% localtime on %} - -- Workout Split-Split your workout in half at the given time using the form above. - Use the chart on - the right to find the point where you want to split. -Use any of the following formats: -
Warning: If you deselect, "Keep Original", the original workout - cannot be restored afterwards. - -
-
+
Workout Split+Split your workout in half at the given time using the form above. + Use the chart on + the right to find the point where you want to split. +Use any of the following formats: +
+ Warning: If you deselect, "Keep Original", the original workout + cannot be restored afterwards. + +Available on SportTracks-{% if workouts %} -
- Import all NEW
-
-
-
-This imports all workouts that have not been imported to rowsandall.com. - The action may take a longer time to process, so please be patient. Click on Import in the list below to import an individual workout. - -
-
No workouts found {% endif %} {% endblock %} + +{% block sidebar %} +{% include 'menu_workouts.html' %} +{% endblock %} diff --git a/rowers/templates/strava_list_import.html b/rowers/templates/strava_list_import.html index b384cd5c..a3c1c97b 100644 --- a/rowers/templates/strava_list_import.html +++ b/rowers/templates/strava_list_import.html @@ -1,52 +1,60 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} {% block title %}Workouts{% endblock %} -{% block content %} +{% block main %}Available on Strava{% if workouts %} -
- Import all NEW
-
-
-
+This imports all workouts that have not been imported to rowsandall.com. - The action may take a longer time to process, so please be patient. Click on Import in the list below to import an individual workout. - -
-
+
No workouts found -{% endif %} ++ No workouts found + + {% endif %} + {% endblock %} + +{% block sidebar %} +{% include 'menu_workouts.html' %} {% endblock %} diff --git a/rowers/templates/streamedit.html b/rowers/templates/streamedit.html index b12def3c..8a0b00c3 100644 --- a/rowers/templates/streamedit.html +++ b/rowers/templates/streamedit.html @@ -1,48 +1,20 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} {% block title %}Advanced Features {% endblock %} -{% block content %} -
-
-
-
- Stream Editor-
-
-
-
- - Edit Workout - -
-
- - Advanced Edit - - -
-
- Run calculations to get power values for your row.
-
-
-
-
-
-
-
-
-
-
-
+{% block main %}
+ Stream Editor+
|
|---|
-
-- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} -+ Please correct the error{{ form.errors|pluralize }} below. +
+{% endif %} +- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -- Edit -
-- Workflow View - -
-- Advanced -
- Advanced Functionality (More interactive Charts) - -| Date/Time: | {{ workout.startdatetime }} | -|
|---|---|---|
| Distance: | {{ workout.distance }}m | -|
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -|
| Public link to this workout | -- https://rowsandall.com/rowers/workout/{{ workout.id }} - | - |
| Public link to interactive chart | -- https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot - | - |
This is a quick way to enter the intervals using a special mini-language.
-You enter something like 8x500m/3min, press "Update" and the site will interpret this for you and update the summary on the right. If you're happy with the result, press the green Save button to update the values. Nothing will be changed permanently until you hit Save.
- -Special characters are x (times), + and / (denotes a rest interval), as well as ( and ). Units are min (minutes), sec (seconds), m (meters) and km (km).
- -A typical interval is described as "10min/5min", with the work part before the "/" and the rest part after it. A zero rest can be omitted, so a single 1000m piece could be described either as "1km" or "1000m". The basic units can be combined with "+" and "Nx". You can use parentheses as in the example below.
- -Here are a few examples.
-| 8x500m/2min | 8 times 500m with 2 minutes rest | -
| 10km | Single distance of 10km | -
| 6min/3min + 5min/3min + 3min/3min + 3min | -Four intervals of 6, 5, 3 and 3 minutes length, 3 minutes rest | -
| 8x500m/3:30min | -8 times 500m with 3 minutes 30 seconds rest | -
| 4x((500m+500m)/5min) | 4 times 1km, but each km is reported as two 500m intervals without rest. Note the nested parentheses. | -
| 2x500m/500m | A 2k rowed as 500m "on", 500m "off" | -
| Name | {{ workout.name }} | +|
|---|---|---|
| Distance: | {{ workout.distance }}m | +|
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | +|
| Public link to this workout | ++ https://rowsandall.com/rowers/workout/{{ workout.id }} + | + |
With this form, you can specify a power or pace level. Everything faster/harder than the - specified pace/power will become a work interval. Everything slower will become a rest - interval. -
- -With this form, you can specify a power or pace level. Everything faster/harder than the + specified pace/power will become a work interval. Everything slower will become a rest + interval. +
+-
- {{ intervalstats }}
-
+
- This is still experimental and there are known bugs. Use at your own risk. Nothing is stored permanently until you hit Save on the summary above. You can use the restore original button to restore the original values.
-+
+ {{ intervalstats }}
+
+
+
+ This is a quick way to enter the intervals using a special mini-language.
+You enter something like 8x500m/3min, press "Update" and the site will interpret this for you and update the summary on the right. If you're happy with the result, press the green Save button to update the values. Nothing will be changed permanently until you hit Save.
+ +Special characters are x (times), + and / (denotes a rest interval), as well as ( and ). Units are min (minutes), sec (seconds), m (meters) and km (km).
+ +A typical interval is described as "10min/5min", with the work part before the "/" and the rest part after it. A zero rest can be omitted, so a single 1000m piece could be described either as "1km" or "1000m". The basic units can be combined with "+" and "Nx". You can use parentheses as in the example below.
+ +Here are a few examples.
+| 8x500m/2min | 8 times 500m with 2 minutes rest | +
| 10km | Single distance of 10km | +
| 6min/3min + 5min/3min + 3min/3min + 3min | +Four intervals of 6, 5, 3 and 3 minutes length, 3 minutes rest | +
| 8x500m/3:30min | +8 times 500m with 3 minutes 30 seconds rest | +
| 4x((500m+500m)/5min) | 4 times 1km, but each km is reported as two 500m intervals without rest. Note the nested parentheses. | +
| 2x500m/500m | A 2k rowed as 500m "on", 500m "off" | +
{{ team.notes }}
Manager: {{ team.manager.first_name }} {{ team.manager.last_name }}
--
You have requested access to this team
- {% else %} -You can request access to this team. By requesting access, you - agree to the Privacy Policy regarding - team functionality. You agree to share your workout data (except - workouts marked as "private") to all team members and the team manager. - You also grant the team manager access to your heart rate and power - zone settings, as well as your functional threshold information. You - are granting the team manager permission to edit your workouts.
-You have requested access to this team
+ {% elif team not in myteams and team not in memberteams %} +You can request access to this team. By requesting access, you + agree to the Privacy Policy regarding + team functionality. You agree to share your workout data (except + workouts marked as "private") to all team members and the team manager. + You also grant the team manager access to your heart rate and power + zone settings, as well as your functional threshold information. You + are granting the team manager permission to edit your workouts.
Join A request will be sent to the team manager - --
| Name | -- | |
|---|---|---|
| {{ member.user.first_name }} {{ member.user.last_name }} | - {% if team.manager == user %} -Drop | - {% else %} -- {% endif %} - |
| Name | ++ | |
|---|---|---|
| {{ member.user.first_name }} {{ member.user.last_name }} | + {% if team.manager == user %} +Drop | + {% else %} ++ {% endif %} + |
Use the form to add a new user. You can either select a user from the list of your existing club members who are not on this team yet, or you can type the user's email address, which also works for users who have not registered to the site yet.
{% if inviteform.errors %} @@ -88,19 +63,19 @@ {{ inviteform.as_table }} {% csrf_token %} - + {% else %}{% endif %} -
Select two or more workouts on the left, set your plot settings, + and press submit
++ You can use the date and search forms to search through all + workouts from this team. +
++ TIP: Agree with your team members to put tags (e.g. '8x500m') + in the notes section of + your workouts. That makes it easy to search. +
+No workouts found
+ {% endif %} ++ {% csrf_token %} +
+ +
++ +
No workouts found
-{% endif %} -Select two or more workouts on the left, set your plot settings below, - and press submit
- {% csrf_token %} -- -
-You can use the date and search forms above to search through all - workouts from this team.
-TIP: Agree with your team members to put tags (e.g. '8x500m') in the notes section of - your workouts. That makes it easy to search.
-- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} + {% if form.errors %} ++ Please correct the error{{ form.errors|pluralize }} below. +
+ {% endif %} --
- You can select one static plot to be generated immediately for this workout. You can select to upload to Concept2 automatically. If you check "make private", this workout will not be visible to your followers and will not show up in your teams' workouts list. -
- -- Valid file types are: -
+
+ You can select one static plot to be generated immediately for this workout. You can select to upload to Concept2 automatically. If you check "make private", this workout will not be visible to your followers and will not show up in your teams' workouts list. +
+ +- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} +{% block main %} ++ Please correct the error{{ form.errors|pluralize }} below. +
+ {% endif %} + +- Please correct the error{{ form.errors|pluralize }} below. -
++ Please correct the error{{ form.errors|pluralize }} below. +
{% endif %} - -This will remove the team. Your team members and their workouts will not be deleted.
+ + ++ Cancel +
- -- Cancel -
- Delete -
-- -
- -+ Delete +
+ + {% endblock %} + +{% block sidebar %} +{% include 'menu_teams.html' %} +{% endblock %} diff --git a/rowers/templates/teamedit.html b/rowers/templates/teamedit.html index b8ea6366..0f5b065a 100644 --- a/rowers/templates/teamedit.html +++ b/rowers/templates/teamedit.html @@ -1,37 +1,42 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} -{% block title %}New Team{% endblock %} +{% block title %}Edit Team{% endblock %} -{% block content %} -- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} +{% block main %} -+ Please correct the error{{ form.errors|pluralize }} below. +
+ {% endif %} + +- Please correct the error{{ form.errors|pluralize }} below. -
++ Please correct the error{{ form.errors|pluralize }} below. +
{% endif %} - -This will remove you and all your workouts from the team. If this is a closed team, you can only return when the team manager reinvites you. If this is an open team, you can return by applying for team membership.
+ + ++ Cancel +
++ Leave +
+- Cancel -
- Leave -
-- -
- --
| Name | -- |
|---|
| Name | ++ |
|---|---|
| - {{ team.name }} + {{ team.name }} |
-
- Leave
-
+ Leave
|
You are not a member of any team.
- {% endif %} - - +| Name | @@ -60,21 +53,16 @@ {% endfor %}
|---|
- {% endif %} - - + + {% endif %} -
Number of members: {{ clubsize }}
Maximum club size: {{ max_clubsize }}
{% if myteams %} -| Name | @@ -88,33 +76,27 @@ {{ team.name }}
-
- Delete
-
+ Delete
|
|---|
- {% endif %} - -
This section lists open invites to join a team. By accepting a team invite, you are agreeing with the sharing of personal data between team members and coaches according to our privacy policy.
- +As a team manager, by accepting a team invite, you are agreeing - with privacy policy regarding teams and + with our privacy policy regarding teams and personal data owned by team members.
@@ -187,20 +168,17 @@ {% endif %} {% csrf_token %}
{% endif %} -
- Links to the cumulative statistics pages for your team's members -
-| {{ u.first_name }} {{ u.last_name }} | -Ranking Pieces | -Stroke Analysis | -Power Histogram | -Stats | -Box Chart | -OTW Ranking Pieces | -Trend Flex | -
+ Links to the cumulative statistics pages for your team's members +
+| {{ u.first_name }} {{ u.last_name }} | +Ranking Pieces | +Stroke Analysis | +Power Histogram | +Stats | +Box Chart | +OTW Ranking Pieces | +Trend Flex | +
Your email was sent and I will get back to you as soon as I can.
Return home
- {% endblock content %} \ No newline at end of file + {% endblock %} + + {% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} diff --git a/rowers/templates/trainingplan.html b/rowers/templates/trainingplan.html index cc17460f..1c52c06a 100644 --- a/rowers/templates/trainingplan.html +++ b/rowers/templates/trainingplan.html @@ -1,197 +1,72 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} {% block title %}Rowsandall Training Plans{% endblock %} -{% block scripts %} -{% endblock %} +{% block main %} +This plan starts on {{ plan.startdate }} and ends on {{ plan.enddate }}. + {% if plan.target %} + The training plan target is: {{ plan.target.name }} on {{ plan.target.date }}. + {% endif %} +
+ -{% block content %} -This plan starts on {{ plan.startdate }} and ends on {{ plan.enddate }}. The training plan target is: {{ plan.target.name }} on {{ plan.target.date }}.
- -| - {{ macrocycle.0.name }} ({{ macrocycle.0.startdate }} - {{ macrocycle.0.enddate }}) - | -||||
|---|---|---|---|---|
| - | dist (m) | -t (min) | -rScore | -TRIMP | -
| plan | -{{ macrocycle.0.plandistance }} | -{{ macrocycle.0.plantime }} | -{{ macrocycle.0.planrscore }} | -{{ macrocycle.0.plantrimp }} | -
| actual | -{{ macrocycle.0.actualdistance }} | -{{ macrocycle.0.actualtime }} | -{{ macrocycle.0.actualrscore }} | -{{ macrocycle.0.actualtrimp }} | -
| - | ||||
| - edit - / - delete - / - sessions - | -||||
| - | ||||
| - sessions - | -||||
| - {{ mesocycle.0.name }} ({{ mesocycle.0.startdate }} - {{ mesocycle.0.enddate }}) - | -||||
|---|---|---|---|---|
| - | dist (m) | -t (min) | -rScore | -TRIMP | -
| plan | -{{ mesocycle.0.plandistance }} | -{{ mesocycle.0.plantime }} | -{{ mesocycle.0.planrscore }} | -{{ mesocycle.0.plantrimp }} | -
| actual | -{{ mesocycle.0.actualdistance }} | -{{ mesocycle.0.actualtime }} | -{{ mesocycle.0.actualrscore }} | -{{ mesocycle.0.actualtrimp }} | -
| - | ||||
| - edit - / - delete - / - sessions - | -||||
| - | ||||
| - sessions - | -||||
| + Meso {{ mesocycle.0.name }} ({{ mesocycle.0.startdate }} - {{ mesocycle.0.enddate }}) + | +|||
|---|---|---|---|
| + edit + / + delete + / + sessions + | +|||
| + Meso {{ mesocycle.0.name }} ({{ mesocycle.0.startdate }} - {{ mesocycle.0.enddate }}) + | +||||
|---|---|---|---|---|
| + | dist (m) | +t (min) | +rScore | +TRIMP | +
| plan | +{{ mesocycle.0.plandistance }} | +{{ mesocycle.0.plantime }} | +{{ mesocycle.0.planrscore }} | +{{ mesocycle.0.plantrimp }} | +
| actual | +{{ mesocycle.0.actualdistance }} | +{{ mesocycle.0.actualtime }} | +{{ mesocycle.0.actualrscore }} | +{{ mesocycle.0.actualtrimp }} | +
| + | ||||
| + edit + / + delete + / + sessions + | +||||
| + | ||||
| + sessions + | +||||
| + Micro {{ microcycle.name }} ({{ microcycle.startdate }} - {{ microcycle.enddate }}) + | +|||
|---|---|---|---|
| + | |||
| + edit + / + delete + / + sessions + | +|||
| + | |||
| + sessions + | +|||
| + Micro {{ microcycle.name }} ({{ microcycle.startdate }} - {{ microcycle.enddate }}) + | +||||
|---|---|---|---|---|
| + | dist (m) | +t (min) | +rScore | +TRIMP | +
| plan | +{{ microcycle.plandistance }} | +{{ microcycle.plantime }} | +{{ microcycle.planrscore }} | +{{ microcycle.plantrimp }} | +
| actual | +{{ microcycle.actualdistance }} | +{{ microcycle.actualtime }} | +{{ microcycle.actualrscore }} | +{{ microcycle.actualtrimp }} | +
| + | ||||
| + edit + / + delete + / + sessions + | +||||
| + | ||||
| + sessions + | +||||
Click on the plan cycles to edit their names, start and end dates. - The gray "filler" - cycles are generated, adjusted and deleted automatically to - ensure the entire plan - duration is covered with non-overlapping cycles. - Once you edit a filler cycle, it become a user-defined - cycle, which cannot be deleted - by the system.
-Filler cycles which have a filler cycle as a parent cannot be edited - or deleted. You have to edit the parent cycle first. The reason is - that children of filler cycles are not safe. They are deleted when - their parent is deleted by the system.
-Click on "Sessions" in the cycle of your interest to see details - of the individual training sessions planned for this period.
-A good way to organize the plan is to think of micro - cycles as training weeks. Macro cycles - are typically used to address specific phases of preparation - and to indicate the racing - season and may span several months. - Meso cycles can be used to group sequences of three to five - light, medium and - hard weeks. It is recommended to work from left to right, - starting with the macro cycles.
-Click on the cycle to fold out its contents.
+ +Click on the plan cycles to edit their names, start and end dates. + The gray "filler" + cycles are generated, adjusted and deleted automatically to + ensure the entire plan + duration is covered with non-overlapping cycles. + Once you edit a filler cycle, it become a user-defined + cycle, which cannot be deleted + by the system.
+Filler cycles which have a filler cycle as a parent cannot be edited + or deleted. You have to edit the parent cycle first. The reason is + that children of filler cycles are not safe. They are deleted when + their parent is deleted by the system.
+Click on "Sessions" in the cycle of your interest to see details + of the individual training sessions planned for this period.
+A good way to organize the plan is to think of micro + cycles as training weeks. Macro cycles + are typically used to address specific phases of preparation + and to indicate the racing + season and may span several months. + Meso cycles can be used to group sequences of three to five + light, medium and + hard weeks. It is recommended to work from left to right, + starting with the macro cycles.
+{% endblock %} + +{% block scripts %} +{% if thismicro %} + + +{% elif thismeso %} + + +{% endif %} +{% if thismacro %} + + +{% endif %} +{% endblock %} + +{% block sidebar %} +{% include 'menu_plan.html' %} {% endblock %} diff --git a/rowers/templates/trainingplan_create.html b/rowers/templates/trainingplan_create.html index 350e2119..cbf7ffb6 100644 --- a/rowers/templates/trainingplan_create.html +++ b/rowers/templates/trainingplan_create.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} {% load staticfiles %} {% load rowerfilters %} @@ -8,32 +8,11 @@ {% endblock %} -{% block content %} - - -Are you sure you want to delete {{ object }}?
- -Are you sure you want to delete {{ object }}?
+ +You can use the date and search forms to search through all + workouts from this team.
+TIP: Agree with your team members to put tags (e.g. '8x500m') in the notes section of + your workouts. That makes it easy to search.
+No workouts found
-{% endif %} -Warning: You are on an experimental part of the site. Use at your own risk.
-Select two or more workouts on the left, set your plot settings below, - and press submit"
- {% csrf_token %} -No workouts found
+ {% endif %} + +Select two or more workouts, set your plot settings below, + and press submit +
+ {% csrf_token %} +-
-You can use the date and search forms above to search through all - workouts from this team.
-TIP: Agree with your team members to put tags (e.g. '8x500m') in the notes section of - your workouts. That makes it easy to search.
-You can use the date and search forms to search through all + workouts from this team.
+TIP: Agree with your team members to put tags (e.g. '8x500m') in the notes section of + your workouts. That makes it easy to search.
+No workouts found
-{% endif %} -Warning: You are on an experimental part of the site. Use at your own risk.
-Select one or more workouts on the left, set your plot settings below, - and press submit"
+ {% else %} +No workouts found
+ {% endif %} + +- -
-You can use the date and search forms above to search through all - workouts from this team.
-TIP: Agree with your team members to put tags (e.g. '8x500m') in the notes section of - your workouts. That makes it easy to search.
-+ +
+ + +Account deactivation is reversible. After you logout, you will not be @@ -17,6 +16,10 @@ -
Warning: This will remove your account and all your data. You will not be able to recover from this action. We cannot restore @@ -17,6 +16,9 @@ -
+
-
| Course | {{ race.course }} | @@ -72,29 +80,50 @@
|---|
| Name | @@ -188,8 +237,12 @@
|---|
+
Virtual races are intended as an informal way to add a competitive element to training and as a quick way to set @@ -233,30 +286,11 @@ safety while participating in a virtual race.
-
-
With this form, you can create a new virtual race. After you submit the form, the race is created and will be visible to all users. From - that moment, only the site admin can delete the race (admin@rowsandall.com). You can still edit the race until the start of the race window.
+ that moment, only the site admin can delete the race + (admin@rowsandall.com). You can still edit the race until + the start of the race window. + +Please correct the error{{ form.errors|pluralize }} below.
{% endif %} - -
Please correct the error{{ form.errors|pluralize }} below.
{% endif %} - -
+ + +
+Click on the event name or on the Details button to see the event details (and manage your participation and results). Click on the course name to see the course details.
- {% include 'racelist.html' %} -- Edit Workout -
-- Advanced Edit -
- -Update wind between distance 1 and distance 2. Submit wind strength and direction at start and end of segment. Blank the form for values @@ -47,84 +19,61 @@ to find historical weather data from an on-line weather station near the location of your row.
- -- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -Closest Airport Weather: {{ airport }} - ({{ airportdistance | floatformat:-1 }} km) - Airport Data
-- Dark Sky Data -
- Download wind speed and bearing from The Dark Sky + +
+ Please correct the error{{ form.errors|pluralize }} below.
-Manual update of the wind data from the form.
-Closest Airport Weather: {{ airport }} + ({{ airportdistance | floatformat:-1 }} km) + Airport Data
++ Dark Sky Data +
+ Download wind speed and bearing from The Dark Sky +
+
- Click on the thumbnails to view the full chart.
"); + "Click on the thumbnails to view the full chart.
- {% endblock %} -
On this page, you can configure the content of your "Workflow" page for each workout. If you want to remove an element, change it to "None". You can add one new element at a time.
-Default landing page is Edit View. Set default landing page to
- Workflow View - {% else %} -Default landing page is Workflow View. Set default landing page to
- Edit View - {% endif %} -Default landing page is Edit View. Set default landing page to
+ Workflow View + {% else %} +Default landing page is Workflow View. Set default landing page to
+ Edit View + {% endif %} +- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -| https://rowsandall.com/rowers/workout/{{ workout.id }} | - | |
| Public link to interactive chart | -- https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot - |
|---|
+
+ {{ workout.summary }}
+
+
+
+ No graphs found
- {% endif %} --
- {{ workout.summary }}
-
-
+ {{ gmscript |safe }}
-- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -| Name: | {{ workout.name }} | +
|---|---|
| Date: | {{ workout.date }} | -
| Time: | {{ workout.starttime }} | -
| Distance: | {{ workout.distance }}m | -
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -
- Cancel -
- Delete -
-- - -
- Please correct the error{{ form.errors|pluralize }} below. -
- {% endif %} - -- Delete -
-- Export - -
-- Advanced -
- Advanced Functionality (More interactive Charts) - -| Rower: | {{ rower.user.first_name }} {{ rower.user.last_name }} | -|
|---|---|---|
| Date/Time: | {{ workout.startdatetime|localtime}} | -{% endlocaltime %} -|
| Distance: | {{ workout.distance }}m | -|
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -|
| Public link to this workout | -- https://rowsandall.com/rowers/workout/{{ workout.id }} - | -|
| Comments | -- Comment ({{ aantalcomments }}) - | - -|
| Public link to interactive chart | -- https://rowsandall.com/rowers/workout/{{ workout.id }}/interactiveplot - | - |
+ Please correct the error{{ form.errors|pluralize }} below. +
+ {% endif %} + +- Add Time Plot -
-- Add HR Pie Chart -
-- Attach Image -
-- Power Pie Chart -
-Generating images takes roughly 1 second per minute - of your workout's duration. Please reload after a minute or so.
-No graphs found
- {% endif %} -- Tweet -
+
+ {{ workout.summary }}
+
+
+
+ {% if mapdiv %}
+ No workouts found
-{% endif %} -Warning: You are on an experimental part of the site. Use at your own risk.
+ {% else %} +No workouts found
+ {% endif %} + +Select two or more workouts on the left, and press submit
- {% csrf_token %} + {% csrf_token %} +
+ + ++ {% csrf_token %} +
-You can use the date and search forms above to search through all - workouts from this team.
-+ {% csrf_token %} + +
+| Rower: | {{ first_name }} {{ last_name }} | -
|---|---|
| Name: | {{ workout.name }} | -
| Date: | {{ workout.date }} | -
| Time: | {{ workout.starttime }} | -
| Distance: | {{ workout.distance }}m | -
| Duration: | {{ workout.duration |durationprint:"%H:%M:%S.%f" }} | -
| Type: | {{ workout.workouttype }} | -
| Weight Category: | {{ workout.weightcategory }} | -
| Comments | +|
| Comments | Comment ({{ aantalcomments }}) | -
-
-{{ workout.summary }}
-
-
+ +
+ {{ workout.summary }}
+
+
+ No graphs found
- {% endif %} -- This page lists a bunch of statistics for - your workout. The mean is of a metric is the mean with equal weight for - each stroke. The time weighted mean takes into account the stroke - duration. -
-- Edit Workout + This page lists a bunch of statistics for + your workout. The mean is of a metric is the mean with equal weight for + each stroke. The time weighted mean takes into account the stroke + duration.
-- Workflow View -
- -- Advanced -
-rPower: Equivalent steady state power for the duration of the workout.
Heart Rate Drift: Comparing heart rate normalized for average power for the first and second half of the workout
TRIMP: TRaining IMPact. A way to combine duration and heart rate into a single number.
rScore: Score based on rPower and workout duration to estimate training effect
rScore (HR): Score based on heart rate, designed to give values comparable to rScore. Used instead of rScore for workouts without power data.
-| Metric | -Mean | -Time Weighted Mean | -Minimum | -25% | -Median | -75% | -Maximum | -Standard Deviation | -
|---|---|---|---|---|---|---|---|---|
| {{ value.verbosename }} | -{{ value.mean|floatformat:-2 }} | -{{ value.wmean|floatformat:-2 }} | -{{ value.min|floatformat:-2 }} | -{{ value.firstq|floatformat:-2 }} | -{{ value.median|floatformat:-2 }} | -{{ value.thirdq|floatformat:-2 }} | -{{ value.max|floatformat:-2 }} | -{{ value.std|floatformat:-2 }} | -
This matrix indicates a positive (+) or negative (-) correlation between two parameters. The Spearman correlation coefficient has values between +1 and -1. Positive correlation between two metrics means that if one metric increases, the other value is also likely to increase. Negative is the opposite. The further from zero, the higher the likelyhood. -
-| - {% for key,value in cordict.items %} - | {{ key }} |
- {% endfor %}
-
|---|---|
| {{ key }} | - {% for key2,value in thedict.items %} -
- {% if value > 0.5 %}
- {{ value|floatformat:-1 }}
- {% elif value > 0.1 %}
- {{ value|floatformat:-1 }}
- {% elif value < -0.5 %}
- {{ value|floatformat:-1 }}
- {% elif value < -0.1 %}
- {{ value|floatformat:-1 }}
- {% else %}
-
- {% endif %}
- |
- {% endfor %}
-
| Metric | +Mean | +Time Weighted Mean | +Minimum | +25% | +Median | +75% | +Maximum | +Standard Deviation | +||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ value.verbosename }} | +{{ value.mean|floatformat:0 }} | +{{ value.wmean|floatformat:0 }} | +{{ value.min|floatformat:0 }} | +{{ value.firstq|floatformat:0 }} | +{{ value.median|floatformat:0 }} | +{{ value.thirdq|floatformat:0 }} | +{{ value.max|floatformat:0 }} | +{{ value.std|floatformat:0 }} | + {% elif value.std > 1 %} +{{ value.verbosename }} | +{{ value.mean|floatformat:-1 }} | +{{ value.wmean|floatformat:-1 }} | +{{ value.min|floatformat:-1 }} | +{{ value.firstq|floatformat:-1 }} | +{{ value.median|floatformat:-1 }} | +{{ value.thirdq|floatformat:-1 }} | +{{ value.max|floatformat:-1 }} | +{{ value.std|floatformat:-1 }} | + {% else %} +{{ value.verbosename }} | +{{ value.mean|floatformat:-2 }} | +{{ value.wmean|floatformat:-2 }} | +{{ value.min|floatformat:-2 }} | +{{ value.firstq|floatformat:-2 }} | +{{ value.median|floatformat:-2 }} | +{{ value.thirdq|floatformat:-2 }} | +{{ value.max|floatformat:-2 }} | +{{ value.std|floatformat:-2 }} | + {% endif %} +
This matrix indicates a positive (+) or negative (-) correlation between two parameters. The Spearman correlation coefficient has values between +1 and -1. Positive correlation between two metrics means that if one metric increases, the other value is also likely to increase. Negative is the opposite. The further from zero, the higher the likelyhood. +
+| + {% for key,value in cordict.items %} + | {{ key }} |
+ {% endfor %}
+
|---|---|
| {{ key }} | + {% for key2,value in thedict.items %} +
+ {% if value > 0.5 %}
+ {{ value|floatformat:-1 }}
+ {% elif value > 0.1 %}
+ {{ value|floatformat:-1 }}
+ {% elif value < -0.5 %}
+ {{ value|floatformat:-1 }}
+ {% elif value < -0.1 %}
+ {{ value|floatformat:-1 }}
+ {% else %}
+
+ {% endif %}
+ |
+ {% endfor %}
+