Private
Public Access
1
0

Add Stroke profile button

This commit is contained in:
Sander Roosendaal
2016-12-20 12:07:52 +01:00
parent 4e8755b4fe
commit f802c4f490
2 changed files with 183 additions and 158 deletions

View File

@@ -7,177 +7,201 @@
{% block content %} {% block content %}
<div id="workouts" class="grid_6 alpha"> <div id="workouts" class="grid_6 alpha">
{% if form.errors %} {% if form.errors %}
<p style="color: red;"> <p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below. Please correct the error{{ form.errors|pluralize }} below.
</p> </p>
{% endif %} {% endif %}
<h1>Advanced OTW features</h1> <h1>Advanced OTW features</h1>
{% if user.rower.rowerplan == 'basic' %} {% if user.rower.rowerplan == 'basic' %}
<p>This is a preview of the page with advanced functionality for Pro users. See <a href="/rowers/promembership">the page about Pro membership</a> for more information and to sign up for Pro Membership</a> <p>This is a preview of the page with advanced functionality for Pro users.
{% endif %} See <a href="/rowers/promembership">the page about Pro membership</a> for more information and to sign up for Pro Membership</a>
<div class="grid_2 alpha"> {% endif %}
<p> <div class="grid_2 alpha">
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a> <p>
</p> <a class="button gray small" href="/rowers/workout/{{ workout.id }}/edit">Edit Workout</a>
</div> </p>
<div class="grid_2 suffix_2 omega"> </div>
<p> <div class="grid_2 suffix_2 omega">
<a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a> <p>
</p> <a class="button gray small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
</p>
</div> </div>
<div class="grid_6 alpha"> <div class="grid_6 alpha">
<table width=100%> <table width=100%>
<tr> <tr>
<th>Date:</th><td>{{ workout.date }}</td> <th>Date:</th><td>{{ workout.date }}</td>
</tr><tr> </tr><tr>
<th>Time:</th><td>{{ workout.starttime }}</td> <th>Time:</th><td>{{ workout.starttime }}</td>
</tr><tr> </tr><tr>
<th>Distance:</th><td>{{ workout.distance }}m</td> <th>Distance:</th><td>{{ workout.distance }}m</td>
</tr><tr> </tr><tr>
<th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td> <th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td>
</tr> </tr>
<th>Public link to this workout</th> <th>Public link to this workout</th>
<td> <td>
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a> <a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
<td> <td>
</table> </table>
</div> </div>
<div class="grid_6 alpha"> <div class="grid_6 alpha">
<div class="grid_2 alpha"> <div class="grid_2 alpha">
<p> <p>
{% if user.rower.rowerplan == 'pro' %} {% if user.rower.rowerplan == 'pro' %}
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id }}">Compare Workouts</a> <a class="button blue small" href="/rowers/workout/compare/{{ workout.id }}">Compare Workouts</a>
{% else %} {% else %}
<a class="button blue small" href="/rowers/promembership">Compare Workouts</a> <a class="button blue small" href="/rowers/promembership">Compare Workouts</a>
{% endif %} {% endif %}
</p> </p>
<p> <p>
Compare this workout to other workouts. Plot HR, SPM, or pace vs time or distance for the two workouts. Compare this workout to other workouts. Plot HR, SPM, or pace vs time or distance for the two workouts.
</p> </p>
</div> </div>
<div class="grid_2">
<p> <div class="grid_2">
{% if user.rower.rowerplan == 'pro' %} <p>
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/smoothenpace">Smooth out Pace Data</a> <a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">Flexible Interactive Plot</a>
{% else %} </p>
<a class="button blue small" href="/rowers/promembership">Smooth out Pace Data</a> <p>
{% endif %} Flexible Interactive plot. Pick your own X and Y axis parameters.
</p>
</div>
<div class="grid_2 omega tooltip">
<p>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">Edit Intervals</a>
{% endif %}
</p>
<span class="tooltiptext">Enter or change the interval and summary data for your workout</span>
<p>
Enter or change the interval and summary data for your workout
</p>
</div>
</div>
</p>
<p>
This will reduce noise on your pace data (EWMA average). The smoothing is irreversible
but you can use the reset smoothing button.
</p>
</div>
<div class="grid_2 omega">
<p>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/undosmoothenpace">Raw Data</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">Reset Smoothing</a>
{% endif %}
</p>
<p>
Reset pace data to values before smoothing (as originally imported/uploaded)
</p>
</div>
</div>
<div class="grid_6 alpha"> <div class="grid_6 alpha">
<div class="grid_2 alpha"> <div class="grid_2 alpha">
<p> <p>
{% if user.rower.rowerplan == 'pro' %} {% if user.rower.rowerplan == 'pro' %}
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/crewnerdsummary">CrewNerd Summary</a> <a class="button blue small"href="/rowers/workout/{{ workout.id }}/crewnerdsummary">CrewNerd Summary</a>
{% else %} {% else %}
<a class="button blue small" href="/rowers/promembership">CrewNerd Summary</a> <a class="button blue small" href="/rowers/promembership">CrewNerd Summary</a>
{% endif %} {% endif %}
</p> </p>
<p> <p>
Upload a CrewNerd Summary (CSV file) to this workout. Upload a CrewNerd Summary (CSV file) to this workout.
</p> </p>
</div> </div>
<div class="grid_2">
<p> <div class="grid_2 tooltip">
{% if user.rower.rowerplan == 'pro' %} <p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/geeky">Geeky Stuff</a> {% if user.rower.rowerplan == 'pro' %}
{% else %} <a class="button blue small" href="/rowers/workout/{{ workout.id }}/forcecurve">Stroke Profile (Empower)</a>
<a class="button blue small" href="/rowers/promembership">Geeky Stuff</a> {% else %}
{% endif %} <a class="button blue small" href="/rowers/promembership">Stroke Profile (Empower)</a>
{% endif %}
</p>
<span class="tooltiptext">Analyze your stroke force profile (need Empower Oarlock data)</span> <p>
Interactive plot of Stroke Profile (with Empower Oarlock)
</p>
</div>
<div class="grid_2 omega tooltip">
<p>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addotwpowerplot">OTW Power Plot</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">OTW Power Plot</a>
{% endif %}
</p>
<span class="tooltiptext">Note: You must run the OTW calculations under Geeky Stuff first. Otherwise the plot will be empty</span>
<p>
Pace, wind corrected pace, power, equivalent erg power in a static plot
</p>
</div>
</p>
<p>
Add weather and current data and OTW power calculations.
</p>
</div>
<div class="grid_2 omega">
<p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/interactiveplot">Big Interactive Plot</a>
</p>
<p>
See (and save) the big interactive plot
</p>
</div>
</div> </div>
<div class="grid_6 alpha"> <div class="grid_6 alpha">
<div class="grid_2 alpha">
<p>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/geeky">Geeky Stuff</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">Geeky Stuff</a>
{% endif %}
<div class="grid_2 alpha"> </p>
<p> <p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">Flexible Interactive Plot</a> Add weather and current data and OTW power calculations.
</p> </p>
<p> </div>
Flexible Interactive plot. Pick your own X and Y axis parameters.
</p>
</div>
<div class="grid_2 tooltip">
<p>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addotwpowerplot">OTW Power Plot</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">OTW Power Plot</a>
{% endif %}
</p>
<span class="tooltiptext">Note: You must run the OTW calculations under Geeky Stuff first. Otherwise the plot will be empty</span>
<p> <div class="grid_2 tooltip">
Pace, wind corrected pace, power, equivalent erg power in a static plot <p>
</p> {% if user.rower.rowerplan == 'pro' %}
</div> <a class="button blue small"href="/rowers/workout/{{ workout.id }}/smoothenpace">Smooth out Pace Data</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">Smooth out Pace Data</a>
{% endif %}
<div class="grid_2 omega tooltip"> </p>
<p> <span class="tooltiptext">This will reduce noise on your pace data. The smoothing is irreversible but you can use the reset smoothing button.</span>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">Edit Intervals</a>
{% endif %}
</p>
<span class="tooltiptext">Enter or change the interval and summary data for your workout</span>
<p> <p>
Enter or change the interval and summary data for your workout Pace data too noisy? Press this button!
</p> </p>
</div> </div>
<div class="grid_2 omega">
<p>
{% if user.rower.rowerplan == 'pro' %}
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/undosmoothenpace">Raw Data</a>
{% else %}
<a class="button blue small" href="/rowers/promembership">Reset Smoothing</a>
{% endif %}
</p>
<p>
Reset pace data to values before smoothing
</p>
</div>
</div>
<div class="grid_6 alpha">
<div class="grid_2 alpha">
<p>
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/interactiveplot">Big Interactive Plot</a>
</p>
<p>
See (and save) the big interactive plot
</p>
</div>
</div> </div>
</div> </div>
<div id="advancedplots" class="grid_6 omega"> <div id="advancedplots" class="grid_6 omega">
<div class="grid_6 alpha"> <div class="grid_6 alpha">
<script type="text/javascript" src="/static/js/bokeh-0.12.3.min.js"></script> <script type="text/javascript" src="/static/js/bokeh-0.12.3.min.js"></script>
<script async="true" type="text/javascript"> <script async="true" type="text/javascript">
Bokeh.set_log_level("info"); Bokeh.set_log_level("info");
</script> </script>
{{ interactiveplot |safe }} {{ interactiveplot |safe }}
<script> <script>
// Set things up to resize the plot on a window resize. You can play with // Set things up to resize the plot on a window resize. You can play with
@@ -200,9 +224,9 @@ Enter or change the interval and summary data for your workout
</style> </style>
<div id="interactiveplot" class="grid_6 omega"> <div id="interactiveplot" class="grid_6 omega">
{{ the_div |safe }} {{ the_div |safe }}
</div>
</div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@@ -45,7 +45,7 @@
<tbody> <tbody>
{% for workout in workouts %} {% for workout in workouts %}
<tr> <tr>
<td> {{ workout.date }} </td> <td> {{ workout.date |truncatechars:15}} </td>
<td> {{ workout.starttime }} </td> <td> {{ workout.starttime }} </td>
<td> <td>
{% if user.rower.rowerplan == 'pro' %} {% if user.rower.rowerplan == 'pro' %}
@@ -81,7 +81,7 @@
<div class="site-announcement-box"> <div class="site-announcement-box">
<div class="site-announcement"> <div class="site-announcement">
<i>{{ a.created }}:</i> <i>{{ a.created }}:</i>
{{ a.announcement }} {{ a.announcement|urlize }}
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
@@ -96,7 +96,8 @@
Read his <a href="http://blog.rowsandall.com/">blog</a> Read his <a href="http://blog.rowsandall.com/">blog</a>
</p> </p>
<div style="text-align: right; padding: 2em"> <div style="text-align: right; padding: 2em">
<img src="/static/img/sander.jpg" width="80"> <a href="http://blog.rowsandall.com/">
<img src="/static/img/sander.jpg" width="80"></a>
</div> </div>
</div> </div>
</div> </div>