Private
Public Access
1
0

hrefs added trailing slashes

This commit is contained in:
Sander Roosendaal
2019-01-09 22:21:28 +01:00
parent a7af332db6
commit c454df269e
42 changed files with 3438 additions and 319 deletions

View File

@@ -11,14 +11,6 @@
and enables you to share data with many common online training tracking and enables you to share data with many common online training tracking
systems.</p> systems.</p>
<h3>Quick Start</h3>
<p>On our <a href="/rowers/videos">Videos Page</a>, we already have a few
nice videos to get you started with your rowing data. Jump right in and
see how we do things at rowsandall.com!</p>
<h3>Indoor Rowing</h3> <h3>Indoor Rowing</h3>
@@ -72,9 +64,8 @@
<h3>Import Compatibility</h3> <h3>Import Compatibility</h3>
<p>Rowsandall.com tries to be compatible with the most important tools <p>Rowsandall.com tries to be compatible with the most important tools
that rowers use to capture the data (both indoor and OTW). For a full that rowers use to capture the data (both indoor and OTW).
list of currently supported devides/apps, click </p>
<a href="/rowers/compatibility">here</a>.
@@ -93,14 +84,14 @@ and inspired by the RowPro Dan Burpee spreadsheet
<p>We offer three plans. Click on the name of the plan to find out more: <p>We offer three plans. Click on the name of the plan to find out more:
<ul> <ul>
<li><a href="/rowers/paidplans">Pro Membership</a>, <li><a href="/rowers/paidplans/">Pro Membership</a>,
offering additional rowing metrics and analysis offering additional rowing metrics and analysis
tools for individual rowers.</li> tools for individual rowers.</li>
<li><a href="/rowers/planmembership">Self-Coach Membership</a>, <li><a href="/rowers/paidplans/">Self-Coach Membership</a>,
offering all of the Pro Membership plan, offering all of the Pro Membership plan,
plus the ability to plan your own sessions and analyze progress plus the ability to plan your own sessions and analyze progress
of your fitness against your plan.</li> of your fitness against your plan.</li>
<li><a href="/rowers/planmembership">Coach Membership</a>, <li><a href="/rowers/paidplans/">Coach Membership</a>,
offering all functions of Self-Coach and Pro offering all functions of Self-Coach and Pro
Membership plans, but allows you to build a manage the Membership plans, but allows you to build a manage the
performance of a group of athletes around you. You can analyze performance of a group of athletes around you. You can analyze
@@ -121,7 +112,7 @@ and inspired by the RowPro Dan Burpee spreadsheet
sign up for the trial. After your trial period expires, you will be sign up for the trial. After your trial period expires, you will be
automatically reset to the Basic plan, unless you upgrade to Pro. automatically reset to the Basic plan, unless you upgrade to Pro.
</p> </p>
<div class="grid_6"><p><a class="button green small" href="/rowers/starttrial">Yes, I want to try Pro membership for 14 days for free. No strings attached.</a></p></div> <div class="grid_6"><p><a class="button green small" href="/rowers/starttrial/">Yes, I want to try Pro membership for 14 days for free. No strings attached.</a></p></div>
{% endif %} {% endif %}
<h2>Recurring Payment</h2> <h2>Recurring Payment</h2>

View File

@@ -13,7 +13,7 @@
<ul class="main-content"> <ul class="main-content">
<li class="rounder"> <li class="rounder">
<h2>Ranking Pieces</h2> <h2>Ranking Pieces</h2>
<a href="/rowers/ote-bests2"> <a href="/rowers/ote-bests2/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/rankingpiece.png" <img src="/static/img/rankingpiece.png"
alt="Ranking Piece"> alt="Ranking Piece">
@@ -25,7 +25,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>Stroke Analysis</h2> <h2>Stroke Analysis</h2>
<a href="/rowers/flexall"> <a href="/rowers/flexall/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/strokeanalysis.png" <img src="/static/img/strokeanalysis.png"
alt="Stroke Analysis"> alt="Stroke Analysis">
@@ -37,7 +37,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>Power Histogram</h2> <h2>Power Histogram</h2>
<a href="/rowers/histo"> <a href="/rowers/histo/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/histogram.png" alt="Power Histogram"> <img src="/static/img/histogram.png" alt="Power Histogram">
</div> </div>
@@ -48,7 +48,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>Statistics</h2> <h2>Statistics</h2>
<a href="/rowers/cumstats"> <a href="/rowers/cumstats/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/statistics.PNG" alt="Statistics"> <img src="/static/img/statistics.PNG" alt="Statistics">
</div> </div>
@@ -59,7 +59,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>Box Chart</h2> <h2>Box Chart</h2>
<a href="/rowers/user-boxplot-select"> <a href="/rowers/user-boxplot-select/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/boxplot.png" alt="Box Chart"> <img src="/static/img/boxplot.png" alt="Box Chart">
</div> </div>
@@ -71,7 +71,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>OTW Critical Power</h2> <h2>OTW Critical Power</h2>
<a href="/rowers/otw-bests"> <a href="/rowers/otw-bests/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/otwcp.png" alt="OTW Critical Power"> <img src="/static/img/otwcp.png" alt="OTW Critical Power">
</div> </div>
@@ -82,7 +82,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>OTE Critical Power</h2> <h2>OTE Critical Power</h2>
<a href="/rowers/ote-ranking"> <a href="/rowers/ote-ranking/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/otecp.png" alt="OTE Critical Power"> <img src="/static/img/otecp.png" alt="OTE Critical Power">
</div> </div>
@@ -94,7 +94,7 @@
</li> </li>
<li class="rounder"> <li class="rounder">
<h2>Trend Flex</h2> <h2>Trend Flex</h2>
<a href="/rowers/user-multiflex-select"> <a href="/rowers/user-multiflex-select/">
<div class="vignet"> <div class="vignet">
<img src="/static/img/trendflex.png" alt="Trend Flex"> <img src="/static/img/trendflex.png" alt="Trend Flex">
</div> </div>

View File

@@ -21,11 +21,11 @@
<p> <p>
{% if workout|previousworkout:rower.user %} {% if workout|previousworkout:rower.user %}
<a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/flexchart" <a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/flexchart/"
title="Jump to preceding workout"><em>Previous</em></a>&nbsp; title="Jump to preceding workout"><em>Previous</em></a>&nbsp;
{% endif %} {% endif %}
{% if workout|nextworkout:rower.user %} {% if workout|nextworkout:rower.user %}
<a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/flexchart" <a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/flexchart/"
title="Jump to following workout"><em>Next</em></a> title="Jump to following workout"><em>Next</em></a>
{% endif %} {% endif %}
</p> </p>
@@ -61,12 +61,12 @@
<form enctype="multipart/form-data" action="{{ formloc }}" method="post"> <form enctype="multipart/form-data" action="{{ formloc }}" method="post">
{% if favoritenr > 0 %} {% if favoritenr > 0 %}
<a <a
href="/rowers/workout/{{ id }}/flexchart?favoritechart={{ favoritenr|add:-1 }}"> href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ favoritenr|add:-1 }}">
<i class="fas fa-arrow-alt-left"></i> <i class="fas fa-arrow-alt-left"></i>
</a> </a>
{% else %} {% else %}
<a <a
href="/rowers/workout/{{ id }}/flexchart?favoritechart={{ maxfav }}"> href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ maxfav }}">
<i class="fas fa-arrow-alt-left"></i> <i class="fas fa-arrow-alt-left"></i>
</a> </a>
{% endif %} {% endif %}
@@ -80,12 +80,12 @@
<input value="Make Favorite" type="Submit"> <input value="Make Favorite" type="Submit">
{% if favoritenr < maxfav %} {% if favoritenr < maxfav %}
<a <a
href="/rowers/workout/{{ id }}/flexchart?favoritechart={{ favoritenr|add:1 }}"> href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ favoritenr|add:1 }}">
<i class="fas fa-arrow-alt-right"></i> <i class="fas fa-arrow-alt-right"></i>
</a> </a>
{% else %} {% else %}
<a <a
href="/rowers/workout/{{ id }}/flexchart?favoritechart=0"> href="/rowers/workout/{{ id }}/flexchart/?favoritechart=0">
<i class="fas fa-arrow-alt-right"></i> <i class="fas fa-arrow-alt-right"></i>
</a> </a>
{% endif %} {% endif %}

View File

@@ -75,7 +75,7 @@
(CSV, FIT, TCX, etc). The details are described in this (CSV, FIT, TCX, etc). The details are described in this
<a href="https://analytics.rowsandall.com/2017/11/08/getting-your-data-on-rowsandall-com/">blog post</a>. <a href="https://analytics.rowsandall.com/2017/11/08/getting-your-data-on-rowsandall-com/">blog post</a>.
A straightforward way to upload your data is to use the A straightforward way to upload your data is to use the
<a href="/rowers/upload">Upload Page</a>. <a href="/rowers/workout/upload/">Upload Page</a>.
</p> </p>
<p> <p>
@@ -142,7 +142,7 @@
<h2>Teams</h2> <h2>Teams</h2>
<p> <p>
The <a href="/rowers/team">Teams</a> tab brings you to The <a href="/rowers/teams/">Teams</a> tab brings you to
functionality related to interaction with your team, if you functionality related to interaction with your team, if you
are part of one. are part of one.
</p> </p>

View File

@@ -37,9 +37,9 @@
<td> {{ course.country }} </td> <td> {{ course.country }} </td>
<td> <td>
{% if course.manager.user == user %} {% if course.manager.user == user %}
<a href="/rowers/courses/{{ course.id }}/edit">{{ course.name }}</a> <a href="/rowers/courses/{{ course.id }}/edit/">{{ course.name }}</a>
{% else %} {% else %}
<a href="/rowers/courses/{{ course.id }}">{{ course.name }}</a> <a href="/rowers/courses/{{ course.id }}/">{{ course.name }}</a>
{% endif %} {% endif %}
</td> </td>
<td> <td>
@@ -65,7 +65,7 @@
</form> </form>
</p> </p>
<p> <p>
<a href="/rowers/courses/upload">Add Courses</a> <a href="/rowers/courses/upload/">Add Courses</a>
</p> </p>
{% if announcements %} {% if announcements %}
<h3>What's New?</h3> <h3>What's New?</h3>
@@ -90,7 +90,7 @@
to the total duration of a workout). This allows you to row and rank to the total duration of a workout). This allows you to row and rank
marked courses. marked courses.
To create a course, you use <a href="earth.google.com">Google Earth</a> To create a course, you use <a href="https://www.google.com/earth/">Google Earth</a>
to mark the start and finish lines using polygons. The process is identical to mark the start and finish lines using polygons. The process is identical
to creating custom courses for the to creating custom courses for the
<a href="http://performancephones.com/crewnerd/">CrewNerd</a> <a href="http://performancephones.com/crewnerd/">CrewNerd</a>

View File

@@ -93,11 +93,11 @@
</p> </p>
<p> <p>
{% if rankingonly and not team %} {% if rankingonly and not team %}
<a href="/rowers/list-workouts"> <a href="/rowers/list-workouts/">
<i class="far fa-star"></i>Show All Workouts <i class="far fa-star"></i>Show All Workouts
</a> </a>
{% elif not team %} {% elif not team %}
<a href="/rowers/list-workouts/ranking"> <a href="/rowers/list-workouts/ranking/">
<i class="fas fa-star"></i>Show Only Ranking Pieces <i class="fas fa-star"></i>Show Only Ranking Pieces
</a> </a>
{% endif %} {% endif %}
@@ -129,7 +129,7 @@
{% if workouts.has_next %} {% if workouts.has_next %}
{% if request.GET.q %} {% if request.GET.q %}
<a href="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}?page={{ workouts.next_page_number }}&q={{ request.GET.q }}"> <a href="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/?page={{ workouts.next_page_number }}&q={{ request.GET.q }}">
<i class="fas fa-arrow-alt-right"></i> <i class="fas fa-arrow-alt-right"></i>
</a> </a>
<a <a
@@ -137,7 +137,7 @@
<i class="fas fa-arrow-alt-to-right"></i> <i class="fas fa-arrow-alt-to-right"></i>
</a> </a>
{% else %} {% else %}
<a href="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}?page={{ workouts.next_page_number }}"> <a href="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/?page={{ workouts.next_page_number }}">
<i class="fas fa-arrow-alt-right"></i> <i class="fas fa-arrow-alt-right"></i>
</a> </a>
<a href="?page={{ workouts.paginator.num_pages }}"> <a href="?page={{ workouts.paginator.num_pages }}">
@@ -215,15 +215,15 @@
<td> {{ workout.maxhr }} </td> <td> {{ workout.maxhr }} </td>
{% if team %} {% if team %}
<td colspan="2"> <td colspan="2">
<a class="small" href="/rowers/{{ workout.user.id }}/list-workouts"> <a class="small" href="/rowers/{{ workout.user.id }}/list-workouts/">
{{ workout.user.user.first_name }} {{ workout.user.user.first_name }}
{{ workout.user.user.last_name }} {{ workout.user.user.last_name }}
</a> </a>
</td> </td>
{% endif %} {% endif %}
<td> <a class="small" href="/rowers/workout/{{ workout.id }}/flexchart">Flex</a> </td> <td> <a class="small" href="/rowers/workout/{{ workout.id }}/flexchart/">Flex</a> </td>
<td> <td>
<a class="small" href="/rowers/workout/{{ workout.id }}/delete">Delete <a class="small" href="/rowers/workout/{{ workout.id }}/delete/">Delete
</td> </td>
</tr> </tr>

View File

@@ -1,6 +1,6 @@
{% load staticfiles %} {% load staticfiles %}
{% load rowerfilters %} {% load rowerfilters %}
<h1><a href="/rowers/analysis">Analysis</a></h1> <h1><a href="/rowers/analysis/">Analysis</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li class="has-children" id="fitness"> <li class="has-children" id="fitness">
<input type="checkbox" name="group-fitness" id="group-fitness" checked> <input type="checkbox" name="group-fitness" id="group-fitness" checked>
@@ -8,17 +8,17 @@
<i class="fas fa-watch-fitness fa-fw"></i>&nbsp;Fitness</label> <i class="fas fa-watch-fitness fa-fw"></i>&nbsp;Fitness</label>
<ul> <ul>
<li id="fitness-ranking"> <li id="fitness-ranking">
<a href="/rowers/ote-bests2"> <a href="/rowers/ote-bests2/">
<i class="fas fa-star fa-fw"></i>&nbsp;Ranking Pieces <i class="fas fa-star fa-fw"></i>&nbsp;Ranking Pieces
</a> </a>
</li> </li>
<li id="fitness-otecp"> <li id="fitness-otecp">
<a href="/rowers/ote-ranking"> <a href="/rowers/ote-ranking/">
<i class="fas fa-user-chart fa-fw"></i>&nbsp;CP Chart OTE <i class="fas fa-user-chart fa-fw"></i>&nbsp;CP Chart OTE
</a> </a>
</li> </li>
<li id="fitness-otwcp"> <li id="fitness-otwcp">
<a href="/rowers/otw-bests"> <a href="/rowers/otw-bests/">
<i class="far fa-user-chart fa-fw"></i>&nbsp;CP Chart OTW <i class="far fa-user-chart fa-fw"></i>&nbsp;CP Chart OTW
</a> </a>
</li> </li>
@@ -36,29 +36,29 @@
</label> </label>
<ul> <ul>
<li id="stats-boxchart"> <li id="stats-boxchart">
<a href="/rowers/user-boxplot-select"> <a href="/rowers/user-boxplot-select/">
<i class="fas fa-box-open fa-fw"></i>&nbsp;Box Chart <i class="fas fa-box-open fa-fw"></i>&nbsp;Box Chart
</a> </a>
</li> </li>
<li id="stats-trendflex"> <li id="stats-trendflex">
<a href="/rowers/user-multiflex-select"> <a href="/rowers/user-multiflex-select/">
<i class="far fa-chart-line fa-fw"></i>&nbsp;Trend Flex <i class="far fa-chart-line fa-fw"></i>&nbsp;Trend Flex
</a> </a>
</li> </li>
<li id="stats-cumstats"> <li id="stats-cumstats">
<a href="/rowers/cumstats"> <a href="/rowers/cumstats/">
<i class="fal fa-table fa-fw"></i>&nbsp;Statistics <i class="fal fa-table fa-fw"></i>&nbsp;Statistics
</a> </a>
</li> </li>
<li id="stats-histopower"> <li id="stats-histopower">
<a href="/rowers/histo"> <a href="/rowers/histo/">
<i class="fas fa-chart-bar"></i>&nbsp;Power Histogram <i class="fas fa-chart-bar"></i>&nbsp;Power Histogram
</a> </a>
</li> </li>
</ul> </ul>
</li> </li>
<li> <li>
<a href="/rowers/flexall"> <a href="/rowers/flexall/">
<i class="fas fa-chart-line fa-fw"></i>&nbsp;Cumulative Flex Chart <i class="fas fa-chart-line fa-fw"></i>&nbsp;Cumulative Flex Chart
</a> </a>
</li> </li>

View File

@@ -1,7 +1,7 @@
<h1><a href="/rowers/help">Help</a></h1> <h1><a href="/rowers/help/">Help</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li id="gettingstarted"> <li id="gettingstarted">
<a href="/rowers/help"> <a href="/rowers/help/">
<i class="fas fa-question-circle fa-fw"></i>&nbsp;Getting Started <i class="fas fa-question-circle fa-fw"></i>&nbsp;Getting Started
</a> </a>
</li> </li>
@@ -11,7 +11,7 @@
</a> </a>
</li> </li>
<li id="contact"> <li id="contact">
<a href="/rowers/email"> <a href="/rowers/email/">
<i class="fas fa-envelope fa-fw"></i>&nbsp;Contact <i class="fas fa-envelope fa-fw"></i>&nbsp;Contact
</a> </a>
</li> </li>

View File

@@ -1,6 +1,6 @@
{% load staticfiles %} {% load staticfiles %}
{% load rowerfilters %} {% load rowerfilters %}
<h1><a href="/rowers/sessions">Plan</a></h1> <h1><a href="/rowers/sessions/">Plan</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li class="has-children" id="plans"> <li class="has-children" id="plans">
<input type="checkbox" name="group-plans" id="group-plans"> <input type="checkbox" name="group-plans" id="group-plans">

View File

@@ -1,6 +1,6 @@
{% load staticfiles %} {% load staticfiles %}
{% load rowerfilters %} {% load rowerfilters %}
<h1><a href="/rowers/me/edit">Profile</a></h1> <h1><a href="/rowers/me/edit/">Profile</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li id="manage-prefs"> <li id="manage-prefs">
<a href="/rowers/me/preferences/"> <a href="/rowers/me/preferences/">

View File

@@ -1,34 +1,34 @@
<h1><a href="/rowers/virtualevents">Racing</a></h1> <h1><a href="/rowers/virtualevents/">Racing</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li id="races-list"> <li id="races-list">
<a href="/rowers/virtualevents"> <a href="/rowers/virtualevents/">
<i class="fas fa-flag-checkered fa-fw"></i>&nbsp;Races <i class="fas fa-flag-checkered fa-fw"></i>&nbsp;Races
</a> </a>
</li> </li>
<li id="races-new"> <li id="races-new">
<a href="/rowers/virtualevent/create"> <a href="/rowers/virtualevent/create/">
<i class="far fa-flag fa-fw"></i>&nbsp;New Race <i class="far fa-flag fa-fw"></i>&nbsp;New Race
</a> </a>
</li> </li>
<li id="indoor-new"> <li id="indoor-new">
<a href="/rowers/virtualevent/createindoor"> <a href="/rowers/virtualevent/createindoor/">
<i class="far fa-flag fa-fw"></i>&nbsp;New Indoor Race <i class="far fa-flag fa-fw"></i>&nbsp;New Indoor Race
</a> </a>
</li> </li>
{% if race %} {% if race %}
{% if results %} {% if results %}
<li id="compare"> <li id="compare">
<a href="/rowers/virtualevent/{{ race.id }}/compare"> <a href="/rowers/virtualevent/{{ race.id }}/compare/">
<i class="fas fa-balance-scale fa-fw"></i>&nbsp;Compare Results</a> <i class="fas fa-balance-scale fa-fw"></i>&nbsp;Compare Results</a>
</li> </li>
{% endif %} {% endif %}
{% if reguest.user.is_anonymous %} {% if reguest.user.is_anonymous %}
<li id="race-register"> <li id="race-register">
{% if race.sessiontype == 'race' %} {% if race.sessiontype == 'race' %}
<a href="/rowers/virtualevent/{{ race.id }}/register"> <a href="/rowers/virtualevent/{{ race.id }}/register/">
<i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a> <i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a>
{% else %} {% else %}
<a href="/rowers/virtualevent/{{ race.id }}/registerindoor"> <a href="/rowers/virtualevent/{{ race.id }}/registerindoor/">
<i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a> <i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a>
{% endif %} {% endif %}
</li> </li>
@@ -37,51 +37,51 @@
{% if button == 'registerbutton' %} {% if button == 'registerbutton' %}
<li> <li>
{% if race.sessiontype == 'race' %} {% if race.sessiontype == 'race' %}
<a href="/rowers/virtualevent/{{ race.id }}/register"> <a href="/rowers/virtualevent/{{ race.id }}/register/">
<i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a> <i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a>
{% else %} {% else %}
<a href="/rowers/virtualevent/{{ race.id }}/registerindoor"> <a href="/rowers/virtualevent/{{ race.id }}/registerindoor/">
<i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a> <i class="fas fa-user-plus fa-fw"></i>&nbsp;Register</a>
{% endif %} {% endif %}
</li> </li>
{% endif %} {% endif %}
{% if button == 'submitbutton' %} {% if button == 'submitbutton' %}
<li> <li>
<a href="/rowers/virtualevent/{{ race.id }}/submit"> <a href="/rowers/virtualevent/{{ race.id }}/submit/">
<i class="fas fa-file-plus fa-fw"></i>&nbsp;Submit Workout</a> <i class="fas fa-file-plus fa-fw"></i>&nbsp;Submit Workout</a>
</li> </li>
<li> <li>
<a href="/rowers/workout/upload"> <a href="/rowers/workout/upload/">
<i class="fas fa-file-upload fa-fw"></i>&nbsp;Upload your race result <i class="fas fa-file-upload fa-fw"></i>&nbsp;Upload your race result
</a> </a>
</li> </li>
<li> <li>
<a href="/rowers/workout/addmanual"> <a href="/rowers/workout/addmanual/">
<i class="fas fa-file-plus fa-fw"></i>&nbsp;Enter Result <i class="fas fa-file-plus fa-fw"></i>&nbsp;Enter Result
</a> </a>
</li> </li>
{% endif %} {% endif %}
{% if button == 'resubmitbutton' %} {% if button == 'resubmitbutton' %}
<li> <li>
<a href="/rowers/virtualevent/{{ race.id }}/submit">Submit New Result</a> <a href="/rowers/virtualevent/{{ race.id }}/submit/">Submit New Result</a>
</li> </li>
{% endif %} {% endif %}
{% if button == 'withdrawbutton' %} {% if button == 'withdrawbutton' %}
<a href="/rowers/virtualevent/{{ race.id }}/withdraw"> <a href="/rowers/virtualevent/{{ race.id }}/withdraw/">
<i class="fas fa-user-minus fa-fw"></i>&nbsp;Withdraw</a> <i class="fas fa-user-minus fa-fw"></i>&nbsp;Withdraw</a>
{% endif %} {% endif %}
{% if button == 'adddisciplinebutton' %} {% if button == 'adddisciplinebutton' %}
<a href="/rowers/virtualevent/{{ race.id }}/adddiscipline"> <a href="/rowers/virtualevent/{{ race.id }}/adddiscipline/">
<i class="fas fa-users fa-fw"></i>&nbsp;Register New Boat <i class="fas fa-users fa-fw"></i>&nbsp;Register New Boat
</a> </a>
{% endif %} {% endif %}
{% if button == 'editbutton' %} {% if button == 'editbutton' %}
<li> <li>
{% if race.sessiontype == 'race' %} {% if race.sessiontype == 'race' %}
<a href="/rowers/virtualevent/{{ race.id }}/edit"><i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit Race <a href="/rowers/virtualevent/{{ race.id }}/edit/"><i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit Race
</a> </a>
{% else %} {% else %}
<a href="/rowers/virtualevent/{{ race.id }}/editindoor"><i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit Race <a href="/rowers/virtualevent/{{ race.id }}/editindoor/"><i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit Race
</a> </a>
{% endif %} {% endif %}
</li> </li>
@@ -89,7 +89,7 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<li id="courses"> <li id="courses">
<a href="/rowers/list-courses"> <a href="/rowers/list-courses/">
<i class="fas fa-route fa-fw"></i>&nbsp;Courses <i class="fas fa-route fa-fw"></i>&nbsp;Courses
</a> </a>
</li> </li>
@@ -99,32 +99,32 @@
<label for="group-course"><i class="fas fa-route fa-fw"></i>&nbsp;{{ course.name }}</label> <label for="group-course"><i class="fas fa-route fa-fw"></i>&nbsp;{{ course.name }}</label>
<ul> <ul>
<li id="course-view"> <li id="course-view">
<a href="/rowers/courses/{{ course.id }}"> <a href="/rowers/courses/{{ course.id }}/">
<i class="fas fa-search fa-fw"></i>&nbsp;View <i class="fas fa-search fa-fw"></i>&nbsp;View
</a> </a>
</li> </li>
<li id="course-mapview"> <li id="course-mapview">
<a href="/rowers/courses/{{ course.id }}/map"> <a href="/rowers/courses/{{ course.id }}/map/">
<i class="fas fa-map fa-fw"></i>&nbsp;Map View <i class="fas fa-map fa-fw"></i>&nbsp;Map View
</a> </a>
</li> </li>
{% if course.manager == rower %} {% if course.manager == rower %}
<li id="course-emailkml"> <li id="course-emailkml">
<a href="/rowers/courses/{{ course.id }}/downloadkml"> <a href="/rowers/courses/{{ course.id }}/downloadkml/">
<i class="fas fa-globe-americas fa-fw"></i>&nbsp;Download as KML</a> <i class="fas fa-globe-americas fa-fw"></i>&nbsp;Download as KML</a>
</li> </li>
<li id="course-editview"> <li id="course-editview">
<a href="/rowers/courses/{{ course.id }}/edit"> <a href="/rowers/courses/{{ course.id }}/edit/">
<i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit</a> <i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit</a>
</li> </li>
{% if nosessions %} {% if nosessions %}
<li id="course-deleteview"> <li id="course-deleteview">
<a href="/rowers/courses/{{ course.id }}/delete"> <a href="/rowers/courses/{{ course.id }}/delete/">
<i class="fas fa-trash-alt fa-fw"></i>&nbsp;Delete</a> <i class="fas fa-trash-alt fa-fw"></i>&nbsp;Delete</a>
</li> </li>
{% endif %} {% endif %}
<li id="course-view"> <li id="course-view">
<a href="/rowers/courses/{{ course.id }}/replace"> <a href="/rowers/courses/{{ course.id }}/replace/">
<i class="fas fa-map-marked-alt fa-fw"></i>&nbsp;Update Markers</a> <i class="fas fa-map-marked-alt fa-fw"></i>&nbsp;Update Markers</a>
</li> </li>
{% endif %} {% endif %}

View File

@@ -1,16 +1,16 @@
{% load staticfiles %} {% load staticfiles %}
{% load rowerfilters %} {% load rowerfilters %}
<h1><a href="/rowers/me/teams">Teams</a></h1> <h1><a href="/rowers/me/teams/">Teams</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li id="manage"> <li id="manage">
<a href="/rowers/me/teams"> <a href="/rowers/me/teams/">
<i class="fas fa-cog fa-fw"></i>&nbsp;Overview <i class="fas fa-cog fa-fw"></i>&nbsp;Overview
</a> </a>
</li> </li>
{% if user|is_manager %} {% if user|is_manager %}
<li id="create"> <li id="create">
<a href="/rowers/team/create"> <a href="/rowers/team/create/">
<i class="fas fa-plus fa-fw"></i>&nbsp;New Team <i class="fas fa-plus fa-fw"></i>&nbsp;New Team
</a> </a>
</li> </li>
@@ -27,17 +27,17 @@
<label for="group-team-{{ team.id }}">{{ team.name }}</label> <label for="group-team-{{ team.id }}">{{ team.name }}</label>
<ul> <ul>
<li id="team-{{ team.id }}-view"> <li id="team-{{ team.id }}-view">
<a href="/rowers/team/{{ team.id }}"> <a href="/rowers/team/{{ team.id }}/">
<i class="fas fa-user-friends fa-fw"></i>&nbsp;View <i class="fas fa-user-friends fa-fw"></i>&nbsp;View
</a> </a>
</li> </li>
<li id="team-{{ team.id }}-edit"> <li id="team-{{ team.id }}-edit">
<a href="/rowers/team/{{ team.id }}/edit"> <a href="/rowers/team/{{ team.id }}/edit/">
<i class="fas fa-user-friends fa-fw"></i>&nbsp;Edit <i class="fas fa-user-friends fa-fw"></i>&nbsp;Edit
</a> </a>
</li> </li>
<li id="team-{{ team.id }}-stats"> <li id="team-{{ team.id }}-stats">
<a href="/rowers/team/{{ team.id }}/memberstats"> <a href="/rowers/team/{{ team.id }}/memberstats/">
<i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Member Stats <i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Member Stats
</a> </a>
</li> </li>
@@ -47,12 +47,12 @@
</a> </a>
</li> </li>
<li id="team-{{ team.id }}-leave"> <li id="team-{{ team.id }}-leave">
<a href="/rowers/team/{{ team.id }}/leaveconfirm"> <a href="/rowers/team/{{ team.id }}/leaveconfirm/">
<i class="fas fa-sign-out fa-fw"></i>&nbsp;Leave <i class="fas fa-sign-out fa-fw"></i>&nbsp;Leave
</a> </a>
</li> </li>
<li id="team-{{ team.id }}-delete"> <li id="team-{{ team.id }}-delete">
<a href="/rowers/team/{{ team.id }}/deleteconfirm"> <a href="/rowers/team/{{ team.id }}/deleteconfirm/">
<i class="fas fa-trash fa-fw"></i>&nbsp;Delete <i class="fas fa-trash fa-fw"></i>&nbsp;Delete
</a> </a>
</li> </li>
@@ -72,7 +72,7 @@
<label for="group-team-{{ team.id }}">{{ team.name }}</label> <label for="group-team-{{ team.id }}">{{ team.name }}</label>
<ul> <ul>
<li id="team-{{ team.id }}-view"> <li id="team-{{ team.id }}-view">
<a href="/rowers/team/{{ team.id }}"> <a href="/rowers/team/{{ team.id }}/">
<i class="fas fa-user-friends fa-fw"></i>&nbsp;View <i class="fas fa-user-friends fa-fw"></i>&nbsp;View
</a> </a>
</li> </li>
@@ -82,7 +82,7 @@
</a> </a>
</li> </li>
<li id="team-{{ team.id }}-leave"> <li id="team-{{ team.id }}-leave">
<a href="/rowers/team/{{ team.id }}/leaveconfirm"> <a href="/rowers/team/{{ team.id }}/leaveconfirm/">
<i class="fas fa-sign-out fa-fw"></i>&nbsp;Leave <i class="fas fa-sign-out fa-fw"></i>&nbsp;Leave
</a> </a>
</li> </li>

View File

@@ -7,53 +7,53 @@
<ul> <ul>
<li id="workout-dashboard"> <li id="workout-dashboard">
{% if user.is_authenticated and workout|may_edit:request %} {% if user.is_authenticated and workout|may_edit:request %}
<a href="/rowers/workout/{{ workout.id }}/workflow"> <a href="/rowers/workout/{{ workout.id }}/workflow/">
<i class="fas fa-tachometer-alt fa-fw"></i>&nbsp;View <i class="fas fa-tachometer-alt fa-fw"></i>&nbsp;View
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/workflow"> <a href="/rowers/workout/{{ workout.id }}/workflow/">
<i class="fas fa-tachometer-alt fa-fw"></i>&nbsp;View <i class="fas fa-tachometer-alt fa-fw"></i>&nbsp;View
</a> </a>
{% endif %} {% endif %}
</li> </li>
{% if user.is_authenticated and workout|may_edit:request %} {% if user.is_authenticated and workout|may_edit:request %}
<li id="workout-edit"> <li id="workout-edit">
<a href="/rowers/workout/{{ workout.id }}/edit"> <a href="/rowers/workout/{{ workout.id }}/edit/">
<i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit <i class="fas fa-pencil-alt fa-fw"></i>&nbsp;Edit
</a> </a>
</li> </li>
<li id="workout-intervals"> <li id="workout-intervals">
<a href="/rowers/workout/{{ workout.id }}/editintervals"> <a href="/rowers/workout/{{ workout.id }}/editintervals/">
<i class="fas fa-pause fa-fw"></i>&nbsp;Intervals <i class="fas fa-pause fa-fw"></i>&nbsp;Intervals
</a> </a>
</li> </li>
{% endif %} {% endif %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li id="workout-comments"> <li id="workout-comments">
<a href="/rowers/workout/{{ workout.id }}/comment"> <a href="/rowers/workout/{{ workout.id }}/comment/">
<i class="fas fa-comments fa-fw"></i>&nbsp;Comments <i class="fas fa-comments fa-fw"></i>&nbsp;Comments
({{ workout|aantalcomments }}) ({{ workout|aantalcomments }})
</a> </a>
</li> </li>
{% endif %} {% endif %}
<li id="workout-stats"> <li id="workout-stats">
<a href="/rowers/workout/{{ workout.id }}/stats"> <a href="/rowers/workout/{{ workout.id }}/stats/">
<i class="fal fa-table fa-fw"></i>&nbsp;Statistics <i class="fal fa-table fa-fw"></i>&nbsp;Statistics
</a> </a>
</li> </li>
<li id="compare"> <li id="compare">
<a href="/rowers/multi-compare/workout/{{ workout.id }}"> <a href="/rowers/multi-compare/workout/{{ workout.id }}/">
<i class="fas fa-balance-scale fa-fw"></i>&nbsp;Compare <i class="fas fa-balance-scale fa-fw"></i>&nbsp;Compare
</a> </a>
</li> </li>
{% if user.is_authenticated and workout|may_edit:request %} {% if user.is_authenticated and workout|may_edit:request %}
<li id="chart-image"> <li id="chart-image">
<a href="/rowers/workout/{{ workout.id }}/image"> <a href="/rowers/workout/{{ workout.id }}/image/">
<i class="fas fa-file-image fa-fw"></i>&nbsp;Upload Image <i class="fas fa-file-image fa-fw"></i>&nbsp;Upload Image
</a> </a>
</li> </li>
<li id="workout-delete"> <li id="workout-delete">
<a href="/rowers/workout/{{ workout.id }}/delete"> <a href="/rowers/workout/{{ workout.id }}/delete/">
<i class="fas fa-trash-alt fa-fw"></i>&nbsp;Delete <i class="fas fa-trash-alt fa-fw"></i>&nbsp;Delete
</a> </a>
</li> </li>
@@ -65,23 +65,23 @@
<label for="group-flexchart">Interactive Charts</label> <label for="group-flexchart">Interactive Charts</label>
<ul> <ul>
<li id="chart-flexchart"> <li id="chart-flexchart">
<a href="/rowers/workout/{{ workout.id }}/flexchart"> <a href="/rowers/workout/{{ workout.id }}/flexchart/">
<i class="fas fa-chart-line fa-fw"></i>&nbsp;Flex Chart <i class="fas fa-chart-line fa-fw"></i>&nbsp;Flex Chart
</a> </a>
</li> </li>
{% if workout|water %} {% if workout|water %}
<li id="chart-map"> <li id="chart-map">
<a href="/rowers/workout/{{ workout.id }}/map"> <a href="/rowers/workout/{{ workout.id }}/map/">
<i class="fas fa-map-marked-alt fa-fw"></i>&nbsp;Map <i class="fas fa-map-marked-alt fa-fw"></i>&nbsp;Map
</a> </a>
</li> </li>
<li id="chart-empower"> <li id="chart-empower">
<a href="/rowers/workout/{{ workout.id }}/forcecurve"> <a href="/rowers/workout/{{ workout.id }}/forcecurve/">
<i class="fas fa-dumbbell fa-fw"></i>&nbsp;Force Curve <i class="fas fa-dumbbell fa-fw"></i>&nbsp;Force Curve
</a> </a>
</li> </li>
<li id="chart-otwpower"> <li id="chart-otwpower">
<a href="/rowers/workout/{{ workout.id }}/interactiveotwplot"> <a href="/rowers/workout/{{ workout.id }}/interactiveotwplot/">
<i class="fal fa-calculator-alt fa-fw"></i>&nbsp;Corrected Pace Plot <i class="fal fa-calculator-alt fa-fw"></i>&nbsp;Corrected Pace Plot
</a> </a>
</li> </li>
@@ -94,28 +94,28 @@
<label for="group-chart">Static Charts</label> <label for="group-chart">Static Charts</label>
<ul> <ul>
<li id="chart-time"> <li id="chart-time">
<a href="/rowers/workout/{{ workout.id }}/addstatic/1"> <a href="/rowers/workout/{{ workout.id }}/addstatic/1/">
<i class="fas fa-stopwatch fa-fw"></i>&nbsp;Time <i class="fas fa-stopwatch fa-fw"></i>&nbsp;Time
</a> </a>
</li> </li>
<li id="chart-distance"> <li id="chart-distance">
<a href="/rowers/workout/{{ workout.id }}/addstatic/2"> <a href="/rowers/workout/{{ workout.id }}/addstatic/2/">
<i class="fas fa-ruler fa-fw"></i>&nbsp;Distance <i class="fas fa-ruler fa-fw"></i>&nbsp;Distance
</a> </a>
</li> </li>
<li id="chart-powerpie"> <li id="chart-powerpie">
<a href="/rowers/workout/{{ workout.id }}/addstatic/13"> <a href="/rowers/workout/{{ workout.id }}/addstatic/13/">
<i class="far fa-chart-pie fa-fw"></i>&nbsp;Power (Pie) <i class="far fa-chart-pie fa-fw"></i>&nbsp;Power (Pie)
</a> </a>
</li> </li>
<li id="chart-hrpie"> <li id="chart-hrpie">
<a href="/rowers/workout/{{ workout.id }}/addstatic/3"> <a href="/rowers/workout/{{ workout.id }}/addstatic/3/">
<i class="fas fa-heartbeat fa-fw"></i>&nbsp;Heart Rate (Pie) <i class="fas fa-heartbeat fa-fw"></i>&nbsp;Heart Rate (Pie)
</a> </a>
</li> </li>
{% if workout|water %} {% if workout|water %}
<li id="chart-otwpower"> <li id="chart-otwpower">
<a href="/rowers/workout/{{ workout.id }}/addstatic/9"> <a href="/rowers/workout/{{ workout.id }}/addstatic/9/">
<i class="fas fa-chart-area fa-fw"></i>&nbsp;OTW Power <i class="fas fa-chart-area fa-fw"></i>&nbsp;OTW Power
</a> </a>
</li> </li>
@@ -136,7 +136,7 @@
Connect to Concept2 Connect to Concept2
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/c2uploadw"> <a href="/rowers/workout/{{ workout.id }}/c2uploadw/">
Concept2 Concept2
</a> </a>
{% endif %} {% endif %}
@@ -151,7 +151,7 @@
Connect to Strava Connect to Strava
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/stravauploadw"> <a href="/rowers/workout/{{ workout.id }}/stravauploadw/">
Strava Strava
</a> </a>
{% endif %} {% endif %}
@@ -166,7 +166,7 @@
Connect to SportTracks Connect to SportTracks
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw"> <a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw/">
SportTracks SportTracks
</a> </a>
{% endif %} {% endif %}
@@ -181,7 +181,7 @@
Connect to Runkeeper Connect to Runkeeper
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw"> <a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw/">
Runkeeper Runkeeper
</a> </a>
{% endif %} {% endif %}
@@ -196,7 +196,7 @@
Connect to MapMyFitness Connect to MapMyFitness
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/underarmouruploadw"> <a href="/rowers/workout/{{ workout.id }}/underarmouruploadw/">
MapMyFitness MapMyFitness
</a> </a>
{% endif %} {% endif %}
@@ -211,23 +211,23 @@
Connect to TrainingPeaks Connect to TrainingPeaks
</a> </a>
{% else %} {% else %}
<a href="/rowers/workout/{{ workout.id }}/tpuploadw"> <a href="/rowers/workout/{{ workout.id }}/tpuploadw/">
TrainingPeaks TrainingPeaks
</a> </a>
{% endif %} {% endif %}
</li> </li>
<li id="export-csv"> <li id="export-csv">
<a href="/rowers/workout/{{ workout.id }}/emailcsv"> <a href="/rowers/workout/{{ workout.id }}/emailcsv/">
CSV CSV
</a> </a>
</li> </li>
<li id="export-gpx"> <li id="export-gpx">
<a href="/rowers/workout/{{ workout.id }}/emailgpx"> <a href="/rowers/workout/{{ workout.id }}/emailgpx/">
GPX GPX
</a> </a>
</li> </li>
<li id="export-tcx"> <li id="export-tcx">
<a href="/rowers/workout/{{ workout.id }}/emailtcx"> <a href="/rowers/workout/{{ workout.id }}/emailtcx/">
TCX TCX
</a> </a>
</li> </li>
@@ -238,12 +238,12 @@
<label for="group-data">Data</label> <label for="group-data">Data</label>
<ul> <ul>
<li id="data-smoothen"> <li id="data-smoothen">
<a href="/rowers/workout/{{ workout.id }}/smoothenpace"> <a href="/rowers/workout/{{ workout.id }}/smoothenpace/">
<i class="fas fa-magic fa-fw"></i>&nbsp;Smoothen <i class="fas fa-magic fa-fw"></i>&nbsp;Smoothen
</a> </a>
</li> </li>
<li id="data-raw"> <li id="data-raw">
<a href="/rowers/workout/{{ workout.id }}/undosmoothenpace"> <a href="/rowers/workout/{{ workout.id }}/undosmoothenpace/">
<i class="fas fa-undo fa-fw"></i>&nbsp;Restore Raw <i class="fas fa-undo fa-fw"></i>&nbsp;Restore Raw
</a> </a>
</li> </li>
@@ -253,12 +253,12 @@
</a> </a>
</li> </li>
<li id="data-split"> <li id="data-split">
<a href="/rowers/workout/{{ workout.id }}/split"> <a href="/rowers/workout/{{ workout.id }}/split/">
<i class="fas fa-cut fa-fw"></i>&nbsp;Split Workout <i class="fas fa-cut fa-fw"></i>&nbsp;Split Workout
</a> </a>
</li> </li>
<li id="data-view"> <li id="data-view">
<a href="/rowers/workout/{{ workout.id }}/data"> <a href="/rowers/workout/{{ workout.id }}/data/">
<i class="fal fa-table fa-fw"></i>&nbsp;Explore Raw Data <i class="fal fa-table fa-fw"></i>&nbsp;Explore Raw Data
</a> </a>
</ul> </ul>
@@ -269,28 +269,28 @@
<ul> <ul>
{% if workout|water %} {% if workout|water %}
<li id="advanced-wind"> <li id="advanced-wind">
<a href="/rowers/workout/{{ workout.id }}/wind"> <a href="/rowers/workout/{{ workout.id }}/wind/">
<i class="fas fa-pennant fa-fw"></i>&nbsp;Wind <i class="fas fa-pennant fa-fw"></i>&nbsp;Wind
</a> </a>
</li> </li>
<li id="advanced-stream"> <li id="advanced-stream">
<a href="/rowers/workout/{{ workout.id }}/stream"> <a href="/rowers/workout/{{ workout.id }}/stream/">
<i class="fas fa-stream fa-fw"></i>&nbsp;Stream <i class="fas fa-stream fa-fw"></i>&nbsp;Stream
</a> </a>
</li> </li>
<li id="advanced-otwpower"> <li id="advanced-otwpower">
<a href="/rowers/workout/{{ workout.id }}/otwsetpower"> <a href="/rowers/workout/{{ workout.id }}/otwsetpower/">
<i class="fas fa-calculator-alt fa-fw"></i>&nbsp;OTW Power <i class="fas fa-calculator-alt fa-fw"></i>&nbsp;OTW Power
</a> </a>
</li> </li>
{% endif %} {% endif %}
<li id="advanced-instroke"> <li id="advanced-instroke">
<a href="/rowers/workout/{{ workout.id }}/instroke"> <a href="/rowers/workout/{{ workout.id }}/instroke/">
<i class="fas fa-search-plus fa-fw"></i>&nbsp;In-Stroke Metrics <i class="fas fa-search-plus fa-fw"></i>&nbsp;In-Stroke Metrics
</a> </a>
</li> </li>
<li id="advanced-recalcsummary"> <li id="advanced-recalcsummary">
<a href="/rowers/workout/{{ workout.id }}/recalcsummary"> <a href="/rowers/workout/{{ workout.id }}/recalcsummary/">
<i class="fas fa-window-restore fa-fw"></i>&nbsp;Update Summary <i class="fas fa-window-restore fa-fw"></i>&nbsp;Update Summary
</a> </a>
</li> </li>

View File

@@ -1,12 +1,12 @@
{% load staticfiles %} {% load staticfiles %}
{% load rowerfilters %} {% load rowerfilters %}
<h1><a href="/rowers/list-workouts">Workouts</a></h1> <h1><a href="/rowers/list-workouts/">Workouts</a></h1>
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li id="workouts-list"> <li id="workouts-list">
<a href="/rowers/list-workouts"><i class="fas fa-clipboard-list fa-fw"></i>&nbsp;Workouts List</a> <a href="/rowers/list-workouts/"><i class="fas fa-clipboard-list fa-fw"></i>&nbsp;Workouts List</a>
</li> </li>
<li id="charts"> <li id="charts">
<a href="/rowers/list-graphs"><i class="fas fa-chart-pie fa-fw"></i>&nbsp;Charts</a> <a href="/rowers/list-graphs/"><i class="fas fa-chart-pie fa-fw"></i>&nbsp;Charts</a>
</li> </li>
<li id="compare"> <li id="compare">
{% if team %} {% if team %}
@@ -23,9 +23,9 @@
</li> </li>
<li> <li>
{% if user|is_promember %} {% if user|is_promember %}
<a href="/rowers/workouts-join-select"> <a href="/rowers/workouts-join-select/">
{% else %} {% else %}
<a href="/rowers/paidplans"> <a href="/rowers/paidplans/">
{% endif %} {% endif %}
<i class="fas fa-layer-plus fa-fw"></i>&nbsp;Glue Workouts <i class="fas fa-layer-plus fa-fw"></i>&nbsp;Glue Workouts
</a> </a>
@@ -35,12 +35,12 @@
<label for="group-1"><i class="fas fa-cloud-download fa-fw"></i>&nbsp;Import</label> <label for="group-1"><i class="fas fa-cloud-download fa-fw"></i>&nbsp;Import</label>
<ul> <ul>
<li id="concept2"><a href="/rowers/workout/c2list">Concept2</a></li> <li id="concept2"><a href="/rowers/workout/c2list/">Concept2</a></li>
<li id="strava"><a href="/rowers/workout/stravaimport">Strava</a></li> <li id="strava"><a href="/rowers/workout/stravaimport/">Strava</a></li>
<li id="runkeeper"><a href="/rowers/workout/runkeeperimport">RunKeeper</a></li> <li id="runkeeper"><a href="/rowers/workout/runkeeperimport/">RunKeeper</a></li>
<li id="sporttracks"><a href="/rowers/workout/sporttracksimport">SportTracks</a></li> <li id="sporttracks"><a href="/rowers/workout/sporttracksimport/">SportTracks</a></li>
<li id="mapmyfitness"><a href="/rowers/workout/underarmourimport">MapMyFitness</a></li> <li id="mapmyfitness"><a href="/rowers/workout/underarmourimport/">MapMyFitness</a></li>
<li id="polar"><a href="/rowers/workout/polarimport">Polar</a></li> <li id="polar"><a href="/rowers/workout/polarimport/">Polar</a></li>
</ul> </ul>
</li> </li>
</ul> <!-- cd-accordion-menu --> </ul> <!-- cd-accordion-menu -->

View File

@@ -97,7 +97,7 @@
<td> {{ workout.averagehr }} </td> <td> {{ workout.averagehr }} </td>
<td> {{ workout.maxhr }} </td> <td> {{ workout.maxhr }} </td>
<td> <td>
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td> <a href="/rowers/workout/{{ workout.id }}/edit/">{{ workout.name }}</a> </td>
</tr> </tr>

View File

@@ -96,7 +96,7 @@
<td> {{ workout.averagehr }} </td> <td> {{ workout.averagehr }} </td>
<td> {{ workout.maxhr }} </td> <td> {{ workout.maxhr }} </td>
<td> <td>
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td> <a href="/rowers/workout/{{ workout.id }}/edit/">{{ workout.name }}</a> </td>
</tr> </tr>

View File

@@ -180,11 +180,11 @@
<td> <td>
{% if user.is_anonymous %} {% if user.is_anonymous %}
<button style="width:100%"> <button style="width:100%">
<a href="/rowers/starttrial">Free PRO trial</a> <a href="/rowers/starttrial/">Free PRO trial</a>
</button> </button>
{% elif rower and rower.rowerplan == 'basic' and rower.protrialexpires|date_dif == 1 %} {% elif rower and rower.rowerplan == 'basic' and rower.protrialexpires|date_dif == 1 %}
<button style="width:100%"> <button style="width:100%">
<a href="/rowers/starttrial">Free PRO trial</a> <a href="/rowers/starttrial/">Free PRO trial</a>
</button> </button>
{% else %} {% else %}
&nbsp; &nbsp;
@@ -193,11 +193,11 @@
<td> <td>
{% if user.is_anonymous %} {% if user.is_anonymous %}
<button style="width:100%"> <button style="width:100%">
<a href="/rowers/startplantrial">Free SELF-COACH trial</a> <a href="/rowers/startplantrial/">Free SELF-COACH trial</a>
</button> </button>
{% elif rower and rower.rowerplan == 'basic' and rower.plantrialexpires|date_dif == 1 %} {% elif rower and rower.rowerplan == 'basic' and rower.plantrialexpires|date_dif == 1 %}
<button style="width:100%"> <button style="width:100%">
<a href="/rowers/startplantrial">Free SELF-COACH trial</a> <a href="/rowers/startplantrial/">Free SELF-COACH trial</a>
</button> </button>
{% else %} {% else %}
&nbsp; &nbsp;
@@ -217,16 +217,16 @@
{% if user.is_anonymous %} {% if user.is_anonymous %}
<td colspan="3"> <td colspan="3">
<button style="width:100%"> <button style="width:100%">
<a href="/rowers/upgrade">UPGRADE NOW</a> <a href="/rowers/upgrade/">UPGRADE NOW</a>
</button> </button>
</td> </td>
{% elif rower and rower.rowerplan == 'basic' %} {% elif rower and rower.rowerplan == 'basic' %}
<td colspan="3"> <td colspan="3">
<button style="width:100%"> <button style="width:100%">
{% if user|existing_customer %} {% if user|existing_customer %}
<a href="/rowers/upgrade">UPGRADE NOW</a> <a href="/rowers/upgrade/">UPGRADE NOW</a>
{% else %} {% else %}
<a href="/rowers/billing">BUY NOW</a> <a href="/rowers/billing/">BUY NOW</a>
{% endif %} {% endif %}
</button> </button>
</td> </td>
@@ -235,9 +235,9 @@
<td colspan="2"> <td colspan="2">
<button style="width:100%"> <button style="width:100%">
{% if user|existing_customer %} {% if user|existing_customer %}
<a href="/rowers/upgrade">UPGRADE NOW</a> <a href="/rowers/upgrade/">UPGRADE NOW</a>
{% else %} {% else %}
<a href="/rowers/billing">BUY NOW</a> <a href="/rowers/billing/">BUY NOW</a>
{% endif %} {% endif %}
</button> </button>
</td> </td>
@@ -247,9 +247,9 @@
<td> <td>
<button style="width:100%"> <button style="width:100%">
{% if user|existing_customer %} {% if user|existing_customer %}
<a href="/rowers/upgrade">UPGRADE NOW</a> <a href="/rowers/upgrade/">UPGRADE NOW</a>
{% else %} {% else %}
<a href="/rowers/billing">BUY NOW</a> <a href="/rowers/billing/">BUY NOW</a>
{% endif %} {% endif %}
</button> </button>
</td> </td>
@@ -259,9 +259,9 @@
<td> <td>
<button style="width:100%"> <button style="width:100%">
{% if user|existing_customer %} {% if user|existing_customer %}
<a href="/rowers/upgrade">UPGRADE NOW</a> <a href="/rowers/upgrade/">UPGRADE NOW</a>
{% else %} {% else %}
<a href="/rowers/billing">BUY NOW</a> <a href="/rowers/billing/">BUY NOW</a>
{% endif %} {% endif %}
</button> </button>
</td> </td>

View File

@@ -62,10 +62,10 @@
<td> <td>
{% if ps.name != '' %} {% if ps.name != '' %}
<a class="small" <a class="small"
href="/rowers/sessions/{{ ps.id }}">{{ ps.name }}</a> href="/rowers/sessions/{{ ps.id }}/">{{ ps.name }}</a>
{% else %} {% else %}
<a class="small" <a class="small"
href="/rowers/sessions/{{ ps.id }}">Unnamed Session</a> href="/rowers/sessions/{{ ps.id }}/">Unnamed Session</a>
{% endif %} {% endif %}
</td> </td>
<td> {{ ps.sessionvalue }} </td> <td> {{ ps.sessionvalue }} </td>
@@ -78,7 +78,7 @@
</td> </td>
<td> <td>
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm">Delete</a> <a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm/">Delete</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@@ -65,23 +65,23 @@
<td> <td>
{% if ps.name != '' %} {% if ps.name != '' %}
<a class="small" <a class="small"
href="/rowers/sessions/{{ ps.id }}">{{ ps.name }}</a> href="/rowers/sessions/{{ ps.id }}/">{{ ps.name }}</a>
{% else %} {% else %}
<a class="small" <a class="small"
href="/rowers/sessions/{{ ps.id }}">Unnamed Session</a> href="/rowers/sessions/{{ ps.id }}/">Unnamed Session</a>
{% endif %} {% endif %}
</td> </td>
<td> {{ ps.sessionvalue }} </td> <td> {{ ps.sessionvalue }} </td>
<td> {{ ps.sessionunit }} </td> <td> {{ ps.sessionunit }} </td>
<td> <td>
<a class="small" href="/rowers/sessions/{{ ps.id }}/edit">Edit</a> <a class="small" href="/rowers/sessions/{{ ps.id }}/edit/">Edit</a>
</td> </td>
<td> <td>
<a class="small" href="/rowers/sessions/{{ ps.id }}/clone">Clone</a> <a class="small" href="/rowers/sessions/{{ ps.id }}/clone/">Clone</a>
</td> </td>
<td> <td>
<a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm">Delete</a> <a class="small" href="/rowers/sessions/{{ ps.id }}/deleteconfirm/">Delete</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@@ -154,12 +154,12 @@
sign up for the trial. After your trial period expires, you will be sign up for the trial. After your trial period expires, you will be
automatically reset to the Basic plan, unless you upgrade to Pro. automatically reset to the Basic plan, unless you upgrade to Pro.
</p> </p>
<p><a class="button green small" href="/rowers/starttrial">Yes, I want to try Pro membership for 14 days for free. No strings attached.</a></p> <p><a class="button green small" href="/rowers/starttrial/">Yes, I want to try Pro membership for 14 days for free. No strings attached.</a></p>
<p><a class="button green small" href="/rowers/startplantrial">Yes, I want to try Self-Coach membership for 14 days for free. No strings attached.</a></p> <p><a class="button green small" href="/rowers/startplantrial/">Yes, I want to try Self-Coach membership for 14 days for free. No strings attached.</a></p>
{% endif %} {% endif %}
</li> </li>
<li class="grid_2"> <li class="grid_2">
<p>Click on the PayPal button to pay for your Pro membership. Before you pay, please <a href="/rowers/register">register</a> for the free Basic membership and add your user name to the form. <p>Click on the PayPal button to pay for your Pro membership. Before you pay, please <a href="/rowers/register/">register</a> for the free Basic membership and add your user name to the form.
Your payment will be valid for one year. Your payment will be valid for one year.
You will be taken to the secure PayPal payment site. You will be taken to the secure PayPal payment site.
</p> </p>

View File

@@ -73,7 +73,7 @@
<td> {{ workout.averagehr }} </td> <td> {{ workout.averagehr }} </td>
<td> {{ workout.maxhr }} </td> <td> {{ workout.maxhr }} </td>
<td> <td>
<a href="/rowers/workout/{{ workout.id }}/edit"> <a href="/rowers/workout/{{ workout.id }}/edit/">
{{ workout.name }} {{ workout.name }}
</a> </a>
</td> </td>
@@ -90,13 +90,13 @@
<p>Missing your best pieces? Upload stroke data of any Concept2 <p>Missing your best pieces? Upload stroke data of any Concept2
ranking piece and they will be automatically added to this page.</p> ranking piece and they will be automatically added to this page.</p>
<p> Don't have stroke data for official Concept2 ranking pieces? <p> Don't have stroke data for official Concept2 ranking pieces?
The <a href="/rowers/paidplans">PRO membership</a> ranking piece functionality The <a href="/rowers/paidplans/">PRO membership</a> ranking piece functionality
allows you to include your best non ranking pieces and even use allows you to include your best non ranking pieces and even use
parts of workouts for improved calculation accuracy. parts of workouts for improved calculation accuracy.
</p> </p>
<p>Want to add race results but you don't have stroke data? <p>Want to add race results but you don't have stroke data?
<a href="/rowers/workout/addmanual">Click here.</a></p> <a href="/rowers/workout/addmanual/">Click here.</a></p>
<p>Scroll down for the chart and pace predictions for ranking pieces.</p> <p>Scroll down for the chart and pace predictions for ranking pieces.</p>
@@ -207,91 +207,91 @@
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/100m">100m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/100m/">100m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/500m">500m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/500m/">500m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1000m">1000m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1000m/">1000m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/2000m">2000m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/2000m/">2000m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/5000m">5000m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/5000m/">5000m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/6000m">6000m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/6000m/">6000m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/10000m">10000m href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/10000m/">10000m
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/21097m">Half Marathon href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/21097m/">Half Marathon
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/42195m">Full Marathon href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/42195m/">Full Marathon
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1min">1 minute href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1min/">1 minute
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/4min">4 minutes href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/4min/">4 minutes
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/30min">30 minutes href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/30min/">30 minutes
</a> </a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a <a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/60min">1 hour href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/60min/">1 hour
</a> </a>
</td> </td>
</tr> </tr>

View File

@@ -25,7 +25,7 @@
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
<td><p><a href="/rowers/register?next={{ next }}">Register New User</a></p></td> <td><p><a href="/rowers/register/?next={{ next }}">Register New User</a></p></td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>

View File

@@ -22,7 +22,7 @@
<table width=100%> <table width=100%>
{{ form.as_table }} {{ form.as_table }}
</table> </table>
<a href="/rowers/legal">Terms of Service</a> <a href="/rowers/legal/">Terms of Service</a>
<input type="hidden" name="next" value="{{ next }}"/> <input type="hidden" name="next" value="{{ next }}"/>
<input type="submit" value="Submit"> <input type="submit" value="Submit">
</form> </form>

View File

@@ -54,7 +54,7 @@
{% csrf_token %} {% csrf_token %}
{% if rower.clubsize < 100 and rower.user == user %} {% if rower.clubsize < 100 and rower.user == user %}
<p> <p>
<a href="/rowers/paidplans">Upgrade</a> <a href="/rowers/paidplans/">Upgrade</a>
</p> </p>
{% else %} {% else %}
<p> <p>
@@ -63,7 +63,7 @@
{% endif %} {% endif %}
{% if rower.rowerplan != 'basic' and rower.user == user %} {% if rower.rowerplan != 'basic' and rower.user == user %}
<p> <p>
<a href="/rowers/me/cancelsubscriptions">Cancel Subscription</a> <a href="/rowers/me/cancelsubscriptions/">Cancel Subscription</a>
</p> </p>
{% endif %} {% endif %}
<input type="submit" value="Save"> <input type="submit" value="Save">
@@ -73,13 +73,13 @@
<li class="grid_2"> <li class="grid_2">
<h2>GDPR - Data Protection</h2> <h2>GDPR - Data Protection</h2>
<p> <p>
<a href="/rowers/exportallworkouts">Download your data</a> <a href="/rowers/exportallworkouts/">Download your data</a>
</p> </p>
<p> <p>
<a href="/rowers/me/deactivate">Deactivate Account</a> <a href="/rowers/me/deactivate/">Deactivate Account</a>
</p> </p>
<p> <p>
<a class="button red small" href="/rowers/me/delete">Delete Account</a> <a class="button red small" href="/rowers/me/delete/">Delete Account</a>
</p> </p>
</li> </li>
<li class="grid_2"> <li class="grid_2">
@@ -99,7 +99,7 @@
<td>{{ grant.application }}</td> <td>{{ grant.application }}</td>
<td>{{ grant.scope }}</td> <td>{{ grant.scope }}</td>
<td> <td>
<a href="/rowers/me/revokeapp/{{ grant.application.id }}">Revoke</a> <a href="/rowers/me/revokeapp/{{ grant.application.id }}/">Revoke</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@@ -8,11 +8,11 @@
{% block main %} {% block main %}
<p> <p>
{% if workout|previousworkout:rower.user %} {% if workout|previousworkout:rower.user %}
<a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/editintervals" <a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/editintervals/"
title="Jump to preceding workout"><em>Previous</em></a>&nbsp; title="Jump to preceding workout"><em>Previous</em></a>&nbsp;
{% endif %} {% endif %}
{% if workout|nextworkout:rower.user %} {% if workout|nextworkout:rower.user %}
<a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/editintervals" <a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/editintervals/"
title="Jump to following workout"><em>Next</em></a> title="Jump to following workout"><em>Next</em></a>
{% endif %} {% endif %}
</p> </p>
@@ -30,7 +30,7 @@
</tr><tr> </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>
</tr> </tr>
</table> </table>
@@ -89,7 +89,7 @@
<span> <span>
<a href="">Reset to last saved</a> <a href="">Reset to last saved</a>
&nbsp; &nbsp;
<a href="/rowers/workout/{{ workout.id }}/restore">Restore Original data</a> <a href="/rowers/workout/{{ workout.id }}/restore/">Restore Original data</a>
</span> </span>
</form> </form>
<p> <p>

View File

@@ -16,13 +16,13 @@
<p>You have requested access to this team</p> <p>You have requested access to this team</p>
{% elif team not in myteams and team not in memberteams %} {% elif team not in myteams and team not in memberteams %}
<p>You can request access to this team. By requesting access, you <p>You can request access to this team. By requesting access, you
agree to the <a href="/rowers/legal">Privacy Policy</a> regarding agree to the <a href="/rowers/legal/">Privacy Policy</a> regarding
team functionality. You agree to share your workout data (except team functionality. You agree to share your workout data (except
workouts marked as "private") to all team members and the team manager. 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 You also grant the team manager access to your heart rate and power
zone settings, as well as your functional threshold information. You zone settings, as well as your functional threshold information. You
are granting the team manager permission to edit your workouts.</p> are granting the team manager permission to edit your workouts.</p>
<a class="button green small" href="/rowers/team/{{ team.id }}/requestmembership/{{ user.id }}">Join</a> <a class="button green small" href="/rowers/team/{{ team.id }}/requestmembership/{{ user.id }}/">Join</a>
<span class="tooltiptext">A request will be sent to the team manager</span> <span class="tooltiptext">A request will be sent to the team manager</span>
{% endif %} {% endif %}
</li> </li>
@@ -38,9 +38,9 @@
<tbody> <tbody>
{% for member in members %} {% for member in members %}
<tr> <tr>
<td><a href="/rowers/rower/edit/{{ member.id }}"> {{ member.user.first_name }} {{ member.user.last_name }}</a></td> <td><a href="/rowers/rower/edit/{{ member.id }}/"> {{ member.user.first_name }} {{ member.user.last_name }}</a></td>
{% if team.manager == user %} {% if team.manager == user %}
<td><a class="button red small" href="/rowers/me/team/{{ team.id }}/drop/{{ member.user.id }}">Drop</a></td> <td><a class="button red small" href="/rowers/me/team/{{ team.id }}/drop/{{ member.user.id }}/">Drop</a></td>
{% else %} {% else %}
<td>&nbsp;</td> <td>&nbsp;</td>
{% endif %} {% endif %}

View File

@@ -21,7 +21,7 @@
<a href="/rowers/team/{{ team.id }}/">{{ team.name }}</a> <a href="/rowers/team/{{ team.id }}/">{{ team.name }}</a>
</td> </td>
<td> <td>
<a class="button small red" href="/rowers/team/{{ team.id }}/leaveconfirm">Leave</a> <a class="button small red" href="/rowers/team/{{ team.id }}/leaveconfirm/">Leave</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
@@ -76,14 +76,14 @@
<a href="/rowers/team/{{ team.id }}/">{{ team.name }}</a> <a href="/rowers/team/{{ team.id }}/">{{ team.name }}</a>
</td> </td>
<td> <td>
<a class="button small red" href="/rowers/team/{{ team.id }}/deleteconfirm">Delete</a> <a class="button small red" href="/rowers/team/{{ team.id }}/deleteconfirm/">Delete</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% endif %} {% endif %}
<a class="button green" href="/rowers/team/create">New Team</a> <a class="button green" href="/rowers/team/create/">New Team</a>
</li> </li>
{% endif %} {% endif %}
{% if invites or requests or myrequests or myinvites %} {% if invites or requests or myrequests or myinvites %}
@@ -92,11 +92,11 @@
<p>This section lists open invites to join a team. By accepting <p>This section lists open invites to join a team. By accepting
a team invite, you are agreeing with the sharing a team invite, you are agreeing with the sharing
of personal data between team members and coaches according to of personal data between team members and coaches according to
our <a href="/rowers/legal">privacy policy</a>. our <a href="/rowers/legal/">privacy policy</a>.
</p> </p>
<p>As a team manager, by accepting a team invite, you are agreeing <p>As a team manager, by accepting a team invite, you are agreeing
with our <a href="/rowers/legal">privacy policy</a> regarding teams and with our <a href="/rowers/legal/">privacy policy</a> regarding teams and
personal data owned by team members.</p> personal data owned by team members.</p>
<table width="90%" class="listtable"> <table width="90%" class="listtable">
@@ -112,39 +112,39 @@
<tbody> <tbody>
{% for i in invites %} {% for i in invites %}
<tr> <tr>
<td><a href="/rowers/team/{{ i.team.id }}">{{ i.team.name }}</a></td> <td><a href="/rowers/team/{{ i.team.id }}/">{{ i.team.name }}</a></td>
<td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td> <td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td>
<td>{{ user.first_name }} {{ user.last_name }}</td> <td>{{ user.first_name }} {{ user.last_name }}</td>
<td><a class="button small green" href="/rowers/me/invitation/{{ i.code }}">Accept</a> <td><a class="button small green" href="/rowers/me/invitation/{{ i.code }}/">Accept</a>
</td> </td>
<td> <td>
<a class="button small red" href="/rowers/me/invitation/{{ i.id }}/reject">Reject</a> <a class="button small red" href="/rowers/me/invitation/{{ i.id }}/reject/">Reject</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
{% for i in requests %} {% for i in requests %}
<tr> <tr>
<td><a href="/rowers/team/{{ i.team.id }}">{{ i.team.name }}</a></td> <td><a href="/rowers/team/{{ i.team.id }}/">{{ i.team.name }}</a></td>
<td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td> <td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td>
<td>{{ user.first_name }} {{ user.last_name }}</td> <td>{{ user.first_name }} {{ user.last_name }}</td>
<td></td> <td></td>
<td><a class="button red small" href="/rowers/me/request/{{ i.id }}/revoke">Revoke</a> <td><a class="button red small" href="/rowers/me/request/{{ i.id }}/revoke/">Revoke</a>
</tr> </tr>
{% endfor %} {% endfor %}
{% for i in myrequests %} {% for i in myrequests %}
<tr> <tr>
<td><a href="/rowers/team/{{ i.team.id }}">{{ i.team.name }}</a></td> <td><a href="/rowers/team/{{ i.team.id }}/">{{ i.team.name }}</a></td>
<td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td> <td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td>
<td>{{ i.user.first_name }} {{ i.user.last_name }}</td> <td>{{ i.user.first_name }} {{ i.user.last_name }}</td>
<td><a class="button small green" href="/rowers/me/request/{{ i.code }}">Accept</a> <td><a class="button small green" href="/rowers/me/request/{{ i.code }}/">Accept</a>
<td> <td>
<a class="button small red" href="/rowers/me/request/{{ i.id }}/reject">Reject</a> <a class="button small red" href="/rowers/me/request/{{ i.id }}/reject/">Reject</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
{% for i in myinvites %} {% for i in myinvites %}
<tr> <tr>
<td><a href="/rowers/team/{{ i.team.id }}">{{ i.team.name }}</a></td> <td><a href="/rowers/team/{{ i.team.id }}/">{{ i.team.name }}</a></td>
<td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td> <td>{{ i.team.manager.first_name }} {{ i.team.manager.last_name }}</td>
{% if i.user %} {% if i.user %}
<td>{{ i.user.first_name }} {{ i.user.last_name }}</td> <td>{{ i.user.first_name }} {{ i.user.last_name }}</td>
@@ -153,7 +153,7 @@
{% endif %} {% endif %}
<td>&nbsp; <td>&nbsp;
<td> <td>
<a class="button small red" href="/rowers/me/invitation/{{ i.id }}/revoke">Revoke</a> <a class="button small red" href="/rowers/me/invitation/{{ i.id }}/revoke/">Revoke</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@@ -41,9 +41,9 @@
<li> <li>
<p>Closest Airport Weather: {{ airport }} <p>Closest Airport Weather: {{ airport }}
({{ airportdistance | floatformat:-1 }} km) ({{ airportdistance | floatformat:-1 }} km)
<a class="button green small" href="/rowers/workout/{{ workout.id }}/metar/{{ airport }}">Airport Data</a></p> <a class="button green small" href="/rowers/workout/{{ workout.id }}/metar/{{ airport }}/">Airport Data</a></p>
<p> <p>
<a class="button green small" href="/rowers/workout/{{ workout.id }}/darkskywind">Dark Sky Data</a> <a class="button green small" href="/rowers/workout/{{ workout.id }}/darkskywind/">Dark Sky Data</a>
<p> <p>
Download wind speed and bearing from <a href="http://forecast.io/">The Dark Sky</a> Download wind speed and bearing from <a href="http://forecast.io/">The Dark Sky</a>
</p> </p>

View File

@@ -12,7 +12,7 @@
{% if workoutid %} {% if workoutid %}
<div class="grid_2 suffix_10 alpha"> <div class="grid_2 suffix_10 alpha">
<p> <p>
<a class="button gray small" href="/rowers/workout/{{ workoutid }}/workflow">Return to Workout</a> <a class="button gray small" href="/rowers/workout/{{ workoutid }}/workflow/">Return to Workout</a>
</p> </p>
</div> </div>
{% endif %} {% endif %}

View File

@@ -13,7 +13,7 @@
{% if workoutid %} {% if workoutid %}
<li class="grid_4"> <li class="grid_4">
<p> <p>
<a class="button gray small" href="/rowers/workout/{{ workoutid }}/workflow">Return to Workout</a> <a class="button gray small" href="/rowers/workout/{{ workoutid }}/workflow/">Return to Workout</a>
</p> </p>
</li> </li>
{% endif %} {% endif %}
@@ -35,10 +35,10 @@
<li> <li>
{% if rower.defaultlandingpage == 'workout_edit_view' %} {% if rower.defaultlandingpage == 'workout_edit_view' %}
<p>Default landing page is Edit View. Set default landing page to</p> <p>Default landing page is Edit View. Set default landing page to</p>
<a class="button green small" href="/rowers/me/workflowdefault">Workflow View</a> <a class="button green small" href="/rowers/me/workflowdefault/">Workflow View</a>
{% else %} {% else %}
<p>Default landing page is Workflow View. Set default landing page to</p> <p>Default landing page is Workflow View. Set default landing page to</p>
<a class="button green small" href="/rowers/me/workflowdefault">Edit View</a> <a class="button green small" href="/rowers/me/workflowdefault/">Edit View</a>
{% endif %} {% endif %}
</li> </li>
</ul> </ul>

View File

@@ -12,11 +12,11 @@
{% block main %} {% block main %}
<p> <p>
{% if workout|previousworkout:rower.user %} {% if workout|previousworkout:rower.user %}
<a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/comment" <a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/comment/"
title="Jump to preceding workout"><em>Previous</em></a>&nbsp; title="Jump to preceding workout"><em>Previous</em></a>&nbsp;
{% endif %} {% endif %}
{% if workout|nextworkout:rower.user %} {% if workout|nextworkout:rower.user %}
<a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/comment" <a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/comment/"
title="Jump to following workout"><em>Next</em></a> title="Jump to following workout"><em>Next</em></a>
{% endif %} {% endif %}
</p> </p>
@@ -38,7 +38,7 @@
</tr><tr> </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>
</tr> </tr>
</table> </table>

View File

@@ -43,11 +43,11 @@ $('#id_workouttype').change();
<p> <p>
{% if workout|previousworkout:rower.user %} {% if workout|previousworkout:rower.user %}
<a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/edit" <a href="/rowers/workout/{{ workout|previousworkout:rower.user }}/edit/"
title="Jump to preceding workout"><em>Previous</em></a>&nbsp; title="Jump to preceding workout"><em>Previous</em></a>&nbsp;
{% endif %} {% endif %}
{% if workout|nextworkout:rower.user %} {% if workout|nextworkout:rower.user %}
<a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/edit" <a href="/rowers/workout/{{ workout|nextworkout:rower.user }}/edit/"
title="Jump to following workout"><em>Next</em></a> title="Jump to following workout"><em>Next</em></a>
{% endif %} {% endif %}
</p> </p>
@@ -57,7 +57,7 @@ $('#id_workouttype').change();
<li class="grid_4"> <li class="grid_4">
<p> <p>
<div class="fb-share-button" <div class="fb-share-button"
data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}" data-href="https://rowsandall.com/rowers/workout/{{ workout.id }}/"
data-layout="button" data-size="small" data-mobile-iframe="false"> data-layout="button" data-size="small" data-mobile-iframe="false">
<a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a> <a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/workout/{{ workout.id }}">Share</a>
</div> </div>
@@ -86,7 +86,7 @@ $('#id_workouttype').change();
</tr><tr> </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>
</tr> </tr>
</table> </table>
@@ -123,7 +123,7 @@ $('#id_workouttype').change();
<h1>Racing</h1> <h1>Racing</h1>
{% for race in indoorraces %} {% for race in indoorraces %}
<p> <p>
<a href="/rowers/virtualevent/{{ race.id }}/submit/{{ workout.id }}">Submit this to Indoor Race {{ race.name }}</a> <a href="/rowers/virtualevent/{{ race.id }}/submit/{{ workout.id }}/">Submit this to Indoor Race {{ race.name }}</a>
</p> </p>
{% endfor %} {% endfor %}
</li> </li>

View File

@@ -42,7 +42,7 @@
{% for record in records %} {% for record in records %}
<p> <p>
This workout was a race. See race result here: This workout was a race. See race result here:
<a href="/rowers/virtualevent/{{ record.race.id }}">{{ record.race.name }}</a> <a href="/rowers/virtualevent/{{ record.race.id }}/">{{ record.race.name }}</a>
</p> </p>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
@@ -50,7 +50,7 @@
{% for record in recordsindoor %} {% for record in recordsindoor %}
<p> <p>
This workout was a race. See race result here: This workout was a race. See race result here:
<a href="/rowers/virtualevent/{{ record.race.id }}">{{ record.race.name }}</a> <a href="/rowers/virtualevent/{{ record.race.id }}/">{{ record.race.name }}</a>
</p> </p>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
@@ -94,7 +94,7 @@
<tr> <tr>
<th>Comments</th> <th>Comments</th>
<td> <td>
<a href="/rowers/workout/{{ workout.id }}/comment">Comment ({{ aantalcomments }})</a> <a href="/rowers/workout/{{ workout.id }}/comment/">Comment ({{ aantalcomments }})</a>
</td> </td>
</tr> </tr>
{% endif %} {% endif %}

View File

@@ -399,7 +399,7 @@ def is_final(race):
@register.filter @register.filter
def userurl(path,member): def userurl(path,member):
pattern = re.compile('user\/\d+') pattern = re.compile('user\/\d+')
userstring = 'user/%s' % member.id userstring = 'user/%s/' % member.id
# remove team # remove team
tpattern = re.compile('\/team\/\d+') tpattern = re.compile('\/team\/\d+')
@@ -416,7 +416,7 @@ def userurl(path,member):
@register.filter @register.filter
def teamurl(path,team): def teamurl(path,team):
pattern = re.compile('team\/\d+') pattern = re.compile('team\/\d+')
teamstring = 'team/%s' % team.id teamstring = 'team/%s/' % team.id
# remove user # remove user
upattern = re.compile('\/user\/\d+') upattern = re.compile('\/user\/\d+')

View File

@@ -40,11 +40,15 @@ from rowers import urls
from rowers.views import error500_view,error404_view,error400_view,error403_view from rowers.views import error500_view,error404_view,error400_view,error403_view
from rowers.dataprep import delete_strokedata from rowers.dataprep import delete_strokedata
from rowers.tests.mocks import *
from redis import StrictRedis from redis import StrictRedis
redis_connection = StrictRedis() redis_connection = StrictRedis()
tested = [
'/rowers/me/delete/'
]
#@pytest.mark.django_db #@pytest.mark.django_db
class URLTests(TestCase): class URLTests(TestCase):
def setUp(self): def setUp(self):
@@ -182,7 +186,7 @@ class URLTests(TestCase):
'/rowers/partners/', '/rowers/partners/',
'/rowers/physics/', '/rowers/physics/',
'/rowers/planrequired/', '/rowers/planrequired/',
'/rowers/promembership/', # '/rowers/promembership/',
'/rowers/register/', '/rowers/register/',
'/rowers/register/thankyou/', '/rowers/register/thankyou/',
'/rowers/sessions/', '/rowers/sessions/',
@@ -263,7 +267,7 @@ class URLTests(TestCase):
'/rowers/workout/1/view/', '/rowers/workout/1/view/',
'/rowers/workout/1/wind/', '/rowers/workout/1/wind/',
'/rowers/workout/1/workflow/', '/rowers/workout/1/workflow/',
'/rowers/workout/compare/1/2016-01-01/2016-12-31/', # '/rowers/workout/compare/1/2016-01-01/2016-12-31/',
'/rowers/workout/fusion/1/', '/rowers/workout/fusion/1/',
'/rowers/workout/fusion/1/2016-01-01/2016-12-31/', '/rowers/workout/fusion/1/2016-01-01/2016-12-31/',
'/rowers/workout/upload/', '/rowers/workout/upload/',
@@ -280,22 +284,46 @@ class URLTests(TestCase):
lijst.append( lijst.append(
(url,200) (url,200)
) )
@parameterized.expand(lijst) @parameterized.expand(lijst)
@patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.read_df_sql')
@patch('rowers.dataprep.getsmallrowdata_db') @patch('rowers.dataprep.getsmallrowdata_db')
@patch('requests.get',side_effect=mocked_requests)
@patch('requests.post',side_effect=mocked_requests)
def test_url_generator(self,url,expected, def test_url_generator(self,url,expected,
mocked_sqlalchemy, mocked_sqlalchemy,
mocked_read_df_sql, mocked_read_df_sql,
mocked_getsmallrowdata_db): mocked_getsmallrowdata_db,
login = self.c.login(username='john',password='koeinsloot') mock_get,
self.assertTrue(login) mock_post):
response = self.c.get(url,follow=True)
if response.status_code != expected: if url not in tested:
print url login = self.c.login(username='john',password='koeinsloot')
print response.status_code self.assertTrue(login)
self.assertEqual(response.status_code, response = self.c.get(url,follow=True)
if response.status_code != expected:
print url
print response.status_code
self.assertEqual(response.status_code,
expected) expected)
html = BeautifulSoup(response.content,'html.parser')
urls = [a['href'] for a in html.find_all('a')]
for u in urls:
if u not in tested and 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
response = self.c.get(u)
if response.status_code != 200:
print len(tested)
print url
print u
print response.status_code
tested.append(u)
self.assertIn(response.status_code,
[200,302])
else:
tested.append(u)

Binary file not shown.

574
rowers/tests/testdata/testdata.gpx vendored Normal file
View File

@@ -0,0 +1,574 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="Oregon 400t" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd"><metadata><link href="http://www.garmin.com"><text>Garmin International</text></link><time>2016-05-20T15:41:26</time></metadata><trk><name>Export by rowingdata</name><trkseg> <trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:26+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:29.238150+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:32.148290+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:35.269000+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:38.152180+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:41.148270+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:44.148910+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:46.908250+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:49.819010+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:52.942510+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:55.639670+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:41:58.370000+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:01.188270+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:04.008300+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:06.888990+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:09.678900+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:12.469140+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:15.199010+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:17.963080+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:20.658340+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:23.538800+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:26.269790+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:28.848350+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:31.729550+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:34.398400+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:37.038360+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:39.499250+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:42.349070+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:45.079070+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:47.752890+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:50.452350+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:53.182630+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:55.789410+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:42:58.671890+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:01.338860+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:04.068490+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:06.862620+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:09.618500+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:12.379160+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:15.229200+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:17.963150+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:20.692490+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:23.628520+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:26.329210+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:29.148960+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:31.668570+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:34.490920+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:37.369250+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:40.189230+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:42.798860+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:45.708750+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:48.318590+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:51.199500+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:53.869290+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:56.572490+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:43:59.212410+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:01.912890+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:04.459350+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:07.249360+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:09.949930+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:12.619870+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:15.378800+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:18.049420+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:20.719440+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:23.298970+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:26.178820+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:28.669980+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:31.429270+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:34.042790+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:36.589070+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:39.412800+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:42.078870+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:44.783760+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:47.450710+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:50.149400+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:52.789720+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:55.429750+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:44:58.069700+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:00.742790+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:03.442700+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:06.139610+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:08.689490+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:11.479530+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:14.119610+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:16.792860+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:19.368950+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:22.158960+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:24.889580+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:27.558940+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:30.469760+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:33.259860+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:36.079590+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:38.899560+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:41.689980+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:44.568940+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:47.329670+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:50.149560+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:52.969660+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:55.879910+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:45:58.789690+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:01.729660+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:04.669610+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:07.549730+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:10.458930+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:13.488980+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:16.429320+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:19.519650+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:22.459630+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:25.338880+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:28.459530+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:31.401590+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:34.339560+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:37.309450+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:40.098920+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:43.039950+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:46.039490+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:48.979630+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:51.949590+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:54.709590+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:46:57.589710+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:00.503120+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:03.408950+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:06.323410+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:09.229670+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:12.198960+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:15.079930+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:17.989660+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:20.959680+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:23.869730+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:26.782970+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:29.688910+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:32.539570+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:35.449720+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:38.329080+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:41.148960+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:44.088880+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:47.150600+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:50.029750+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:52.998850+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:55.880360+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:47:58.789400+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:01.639760+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:04.492770+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:07.429530+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:10.373270+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:13.309500+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:16.279570+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:19.160740+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:21.948820+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:25.039520+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:27.949340+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:30.890880+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:33.648790+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:36.770050+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:39.499600+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:42.559140+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:45.439020+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:48.439810+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:51.379570+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:54.259600+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:48:57.139300+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:00.049550+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:02.838790+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:05.839540+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:08.749400+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:11.689540+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:14.538900+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:17.389440+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:20.058880+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:23.059530+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:25.880610+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:28.608730+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:31.582600+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:34.278700+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:37.068660+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:40.039460+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:42.889790+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:45.772580+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:48.708690+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:51.679450+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:54.499470+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:49:57.409440+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:00.439330+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:03.408680+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:06.378680+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:09.168860+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:12.229650+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:15.138650+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:18.049470+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:20.959460+00:00</time>
</trkpt>
<trkpt lat="0.0" lon="0.0">
<time>2016-05-20T13:50:23.242360+00:00</time>
</trkpt>
</trkseg></trk></gpx>

2523
rowers/tests/testdata/testdata.tcx vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -453,7 +453,7 @@ urlpatterns = [
url(r'^checkouts/$',views.checkouts_view,name='checkouts'), url(r'^checkouts/$',views.checkouts_view,name='checkouts'),
url(r'^upgradecheckouts/$',views.upgrade_checkouts_view,name='upgrade_checkouts'), url(r'^upgradecheckouts/$',views.upgrade_checkouts_view,name='upgrade_checkouts'),
url(r'^downgradecheckouts/$',views.downgrade_checkouts_view,name='downgrade_checkouts'), url(r'^downgradecheckouts/$',views.downgrade_checkouts_view,name='downgrade_checkouts'),
url(r'^planrequired',views.planrequired_view), url(r'^planrequired/',views.planrequired_view),
url(r'^starttrial/$',views.start_trial_view), url(r'^starttrial/$',views.start_trial_view),
url(r'^startplantrial/$',views.start_plantrial_view), url(r'^startplantrial/$',views.start_plantrial_view),
# url(r'^planmembership', TemplateView.as_view(template_name='planmembership.html'),name='planmembership'), # url(r'^planmembership', TemplateView.as_view(template_name='planmembership.html'),name='planmembership'),

View File

@@ -3500,7 +3500,7 @@ def cum_flex(request,theuser=0,
def planrequired_view(request): def planrequired_view(request):
messages.info(request,"This functionality requires Coach or Self-Coach membership") messages.info(request,"This functionality requires Coach or Self-Coach membership")
return render(request,'promembership.html') return HttpResponseRedirect(reverse(paidplans_view))
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans", @user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
message="This functionality requires a Coach or Self-Coach plan", message="This functionality requires a Coach or Self-Coach plan",
@@ -3576,7 +3576,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -3646,7 +3646,7 @@ def workout_histo_view(request,id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -3855,7 +3855,7 @@ def addmanual_view(request):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -6051,7 +6051,7 @@ def team_comparison_select(request,
if id: if id:
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -6066,7 +6066,7 @@ def team_comparison_select(request,
else: else:
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -6369,7 +6369,7 @@ def multi_compare_view(request,id=0,userid=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -7709,7 +7709,7 @@ def workouts_view(request,message='',successmessage='',
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
] ]
@@ -7891,7 +7891,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -7988,7 +7988,7 @@ def workout_view(request,id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -8122,7 +8122,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
r = getrower(request.user) r = getrower(request.user)
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -8332,7 +8332,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
r = getrower(request.user) r = getrower(request.user)
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -8520,7 +8520,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -8652,7 +8652,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -8692,7 +8692,7 @@ def instroke_view(request,id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -9170,7 +9170,7 @@ def workout_data_view(request, id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -9272,7 +9272,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -9807,7 +9807,7 @@ def workout_workflow_view(request,id):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -10093,7 +10093,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -10187,7 +10187,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -10414,7 +10414,7 @@ def workout_comment_view(request,id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -10854,7 +10854,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -10902,7 +10902,7 @@ def workout_map_view(request,id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11128,7 +11128,7 @@ def workout_uploadimage_view(request,id):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11394,7 +11394,7 @@ def workout_stravaimport_view(request,message="",userid=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11450,7 +11450,7 @@ def workout_runkeeperimport_view(request,message="",userid=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11502,7 +11502,7 @@ def workout_underarmourimport_view(request,message="",userid=0):
rower = getrower(request.user) rower = getrower(request.user)
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11555,7 +11555,7 @@ def workout_polarimport_view(request,userid=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11627,7 +11627,7 @@ def workout_sporttracksimport_view(request,message="",userid=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -11772,7 +11772,7 @@ def workout_c2import_view(request,page=1,userid=0,message=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -12082,7 +12082,7 @@ def workout_upload_view(request,
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -12508,7 +12508,7 @@ def team_workout_upload_view(request,message="",
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -12816,7 +12816,7 @@ def graph_show_view(request,id):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -12908,7 +12908,7 @@ def workout_split_view(request,id=id):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -13041,7 +13041,7 @@ def workout_fusion_view(request,id1=0,id2=1):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -13079,7 +13079,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
r = getrower(request.user) r = getrower(request.user)
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -13575,7 +13575,7 @@ def rower_exportsettings_view(request,userid=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/me', 'url':'/rowers/me/edit/',
'name': 'Profile' 'name': 'Profile'
}, },
{ {
@@ -13601,7 +13601,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/me/edit', 'url':'/rowers/me/edit/',
'name': 'Profile' 'name': 'Profile'
}, },
{ {
@@ -13906,7 +13906,7 @@ def rower_prefs_view(request,userid=0,message=""):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/me/edit', 'url':'/rowers/me/edit/',
'name': 'Profile' 'name': 'Profile'
}, },
{ {
@@ -16142,7 +16142,10 @@ def plannedsessions_manage_view(request,userid=0,
initialsession=0 initialsession=0
if initialsession: if initialsession:
ps0 = PlannedSession.objects.get(id=initialsession) try:
ps0 = PlannedSession.objects.get(id=initialsession)
except PlannedSession.DoesNotExist:
ps0 = None
else: else:
ps0 = None ps0 = None
@@ -18667,7 +18670,7 @@ class GraphDelete(DeleteView):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {
@@ -18713,7 +18716,7 @@ class WorkoutDelete(DeleteView):
breadcrumbs = [ breadcrumbs = [
{ {
'url':'/rowers/list-workouts', 'url':'/rowers/list-workouts/',
'name':'Workouts' 'name':'Workouts'
}, },
{ {

View File

@@ -149,13 +149,13 @@
<user class="main-user"> <user class="main-user">
<ul> <ul>
<li> <li>
<a class="" href="/rowers/help" title="Help"> <a class="" href="/rowers/help/" title="Help">
<i class="fas fa-question-circle "></i> <i class="fas fa-question-circle "></i>
</a> </a>
</li> </li>
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li> <li>
<a href="/rowers/me/preferences" title="Profile"> <a href="/rowers/me/preferences/" title="Profile">
{% if user.rower.rowerplan == 'pro' %} {% if user.rower.rowerplan == 'pro' %}
<i class="fas fa-user-ninja "></i> <i class="fas fa-user-ninja "></i>
{% elif user.rower.rowerplan == 'coach' %} {% elif user.rower.rowerplan == 'coach' %}
@@ -163,19 +163,19 @@
{% elif user.rower.rowerplan == 'plan' %} {% elif user.rower.rowerplan == 'plan' %}
<i class="fas fa-user-chart "></i> <i class="fas fa-user-chart "></i>
{% else %} {% else %}
<a href="/rowers/me/preferences" title="Profile"> <a href="/rowers/me/preferences/" title="Profile">
<i class="fas fa-user"></i> <i class="fas fa-user"></i>
{% endif %} {% endif %}
</a> </a>
</li> </li>
<li> <li>
<a class="" href="{% url 'logout' %}?next=/login" title="Sign Out" id="id-logout"> <a class="" href="{% url 'logout' %}?next=/login/" title="Sign Out" id="id-logout">
<i class="fas fa-sign-out-alt "></i> <i class="fas fa-sign-out-alt "></i>
</a> </a>
</li> </li>
{% else %} {% else %}
<li> <li>
<a href="/rowers/register" title="Sign Up"> <a href="/rowers/register/" title="Sign Up">
<i class="fas fa-user-plus "></i> <i class="fas fa-user-plus "></i>
</a> </a>
</li> </li>
@@ -195,12 +195,12 @@
<nav class="main-nav"> <nav class="main-nav">
<ul> <ul>
<li id="nav-workouts"> <li id="nav-workouts">
<a href="/rowers/list-workouts"> <a href="/rowers/list-workouts/">
<i class="fas fa-clipboard-list"></i>&nbsp;Workouts <i class="fas fa-clipboard-list"></i>&nbsp;Workouts
</a> </a>
</li> </li>
<li id="nav-racing"> <li id="nav-racing">
<a href="/rowers/virtualevents"> <a href="/rowers/virtualevents/">
<i class="fas fa-flag-checkered"></i>&nbsp;Racing <i class="fas fa-flag-checkered"></i>&nbsp;Racing
</a> </a>
</li> </li>
@@ -215,7 +215,7 @@
</a> </a>
</li> </li>
<li id="nav-teams"> <li id="nav-teams">
<a href="/rowers/me/teams"> <a href="/rowers/me/teams/">
<i class="fas fa-bullhorn"></i>&nbsp;Teams <i class="fas fa-bullhorn"></i>&nbsp;Teams
</a> </a>
</li> </li>
@@ -236,7 +236,7 @@
{% if user.rower.planexpires|date_dif|ddays < 4 %} {% if user.rower.planexpires|date_dif|ddays < 4 %}
<li class="grid_4"> <li class="grid_4">
<p class="successmessage"> <p class="successmessage">
You have {{ user.rower.planexpires|date_dif|ddays }} days left of your one year subscription. Please renew on or before {{ user.rower.planexpires }} or your plan will be reset to Basic. Click <a href="/rowers/paidplans">here</a> to renew your membership.</p> You have {{ user.rower.planexpires|date_dif|ddays }} days left of your one year subscription. Please renew on or before {{ user.rower.planexpires }} or your plan will be reset to Basic. Click <a href="/rowers/paidplans/">here</a> to renew your membership.</p>
</li> </li>
{% endif %} {% endif %}
{% endif %} {% endif %}
@@ -245,14 +245,14 @@
{% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %} {% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %}
<li class="grid_4"> <li class="grid_4">
<p class="successmessage"> <p class="successmessage">
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Self-Coach trial - Would you like to <a href="/rowers/planmembership">upgrade now?</a> {{ user.rower.protrialexpires|date_dif|ddays }} days left of your Self-Coach trial - Would you like to <a href="/rowers/paidplans/">upgrade now?</a>
</p> </p>
</li> </li>
{% else %} {% else %}
{% if user.rower.rowerplan == 'basic' %} {% if user.rower.rowerplan == 'basic' %}
<li class="grid_4"> <li class="grid_4">
<p class="successmessage"> <p class="successmessage">
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/paidplans">upgrade now?</a> {{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/paidplans/">upgrade now?</a>
</p> </p>
</li> </li>
{% endif %} {% endif %}
@@ -335,7 +335,7 @@
<h1>Help</h1> <h1>Help</h1>
<ul> <ul>
<li> <li>
<a href="/rowers/help">Help</a> <a href="/rowers/help/">Help</a>
</li> </li>
<li> <li>
<a href="https://analytics.rowsandall.com/"> <a href="https://analytics.rowsandall.com/">
@@ -347,7 +347,7 @@
Rowing Data Facebook Group</a> Rowing Data Facebook Group</a>
</li> </li>
<li> <li>
<a href="/rowers/physics">Rowing Physics</a> <a href="/rowers/physics/">Rowing Physics</a>
</li> </li>
</ul> </ul>
</li> </li>
@@ -361,13 +361,13 @@
<a href="/rowers/email/">Rowsandall s.r.o.</a> <a href="/rowers/email/">Rowsandall s.r.o.</a>
</li> </li>
<li> <li>
<a href="/rowers/brochure">Brochure</a> <a href="/rowers/brochure/">Brochure</a>
</li> </li>
<li> <li>
<a href="/rowers/partners">Partnering?</a> <a href="/rowers/partners/">Partnering?</a>
</li> </li>
<li> <li>
<a href="/rowers/developers">Developers Info</a> <a href="/rowers/developers/">Developers Info</a>
</li> </li>
</ul> </ul>
</li> </li>
@@ -375,7 +375,7 @@
<h1>Paid Plans</h1> <h1>Paid Plans</h1>
<ul> <ul>
<li> <li>
<a href="/rowers/paidplans">Paid Plans</a> <a href="/rowers/paidplans/">Paid Plans</a>
</li> </li>
</ul> </ul>
</li> </li>
@@ -383,10 +383,10 @@
<h1>Legal</h1> <h1>Legal</h1>
<ul> <ul>
<li> <li>
<a href="/rowers/legal">Terms and Conditions</a> <a href="/rowers/legal/">Terms and Conditions</a>
</li> </li>
<li> <li>
<a href="/rowers/legal">Privacy Policy</a> <a href="/rowers/legal/">Privacy Policy</a>
</li> </li>
</ul> </ul>
</ul> </ul>

View File

@@ -159,13 +159,13 @@
<user class="main-user"> <user class="main-user">
<ul> <ul>
<li> <li>
<a class="" href="/rowers/help" title="Help"> <a class="" href="/rowers/help/" title="Help">
<i class="fas fa-question-circle "></i> <i class="fas fa-question-circle "></i>
</a> </a>
</li> </li>
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li> <li>
<a href="/rowers/me/preferences" title="Profile"> <a href="/rowers/me/preferences/" title="Profile">
{% if user.rower.rowerplan == 'pro' %} {% if user.rower.rowerplan == 'pro' %}
<i class="fas fa-user-ninja "></i> <i class="fas fa-user-ninja "></i>
{% elif user.rower.rowerplan == 'coach' %} {% elif user.rower.rowerplan == 'coach' %}
@@ -173,19 +173,19 @@
{% elif user.rower.rowerplan == 'plan' %} {% elif user.rower.rowerplan == 'plan' %}
<i class="fas fa-user-tie "></i> <i class="fas fa-user-tie "></i>
{% else %} {% else %}
<a href="/rowers/me/preferences" title="Profile"> <a href="/rowers/me/preferences/" title="Profile">
<i class="fas fa-user"></i> <i class="fas fa-user"></i>
{% endif %} {% endif %}
</a> </a>
</li> </li>
<li> <li>
<a class="" href="{% url 'logout' %}?next=/login" title="Sign Out"> <a class="" href="{% url 'logout' %}?next=/login/" title="Sign Out">
<i class="fas fa-sign-out-alt "></i> <i class="fas fa-sign-out-alt "></i>
</a> </a>
</li> </li>
{% else %} {% else %}
<li> <li>
<a href="/rowers/register" title="Sign Up"> <a href="/rowers/register/" title="Sign Up">
<i class="fas fa-user-plus "></i> <i class="fas fa-user-plus "></i>
</a> </a>
</li> </li>
@@ -206,12 +206,12 @@
<nav class="main-nav"> <nav class="main-nav">
<ul> <ul>
<li id="nav-workouts"> <li id="nav-workouts">
<a href="/rowers/list-workouts"> <a href="/rowers/list-workouts/">
<i class="fas fa-clipboard-list"></i>&nbsp;Workouts <i class="fas fa-clipboard-list"></i>&nbsp;Workouts
</a> </a>
</li> </li>
<li id="nav-racing"> <li id="nav-racing">
<a href="/rowers/virtualevents"> <a href="/rowers/virtualevents/">
<i class="fas fa-flag-checkered"></i>&nbsp;Racing <i class="fas fa-flag-checkered"></i>&nbsp;Racing
</a> </a>
</li> </li>
@@ -226,7 +226,7 @@
</a> </a>
</li> </li>
<li id="nav-teams"> <li id="nav-teams">
<a href="/rowers/me/teams"> <a href="/rowers/me/teams/">
<i class="fas fa-bullhorn"></i>&nbsp;Teams <i class="fas fa-bullhorn"></i>&nbsp;Teams
</a> </a>
</li> </li>
@@ -247,14 +247,14 @@
{% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %} {% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %}
<li class="grid_5"> <li class="grid_5">
<p class="successmessage"> <p class="successmessage">
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Self-Coach trial - Would you like to <a href="/rowers/planmembership">upgrade now?</a> {{ user.rower.protrialexpires|date_dif|ddays }} days left of your Self-Coach trial - Would you like to <a href="/rowers/paidplans/">upgrade now?</a>
</p> </p>
</li> </li>
{% else %} {% else %}
{% if user.rower.rowerplan == 'basic' %} {% if user.rower.rowerplan == 'basic' %}
<li class="grid_5"> <li class="grid_5">
<p class="successmessage"> <p class="successmessage">
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/paidplans">upgrade now?</a> {{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/paidplans/">upgrade now?</a>
</p> </p>
</li> </li>
{% endif %} {% endif %}
@@ -307,7 +307,7 @@
<h1>Help</h1> <h1>Help</h1>
<ul> <ul>
<li> <li>
<a href="/rowers/help">Help</a> <a href="/rowers/help/">Help</a>
</li> </li>
<li> <li>
<a href="https://analytics.rowsandall.com/"> <a href="https://analytics.rowsandall.com/">
@@ -333,13 +333,13 @@
<a href="/rowers/email/">Rowsandall s.r.o.</a> <a href="/rowers/email/">Rowsandall s.r.o.</a>
</li> </li>
<li> <li>
<a href="/rowers/brochure">Brochure</a> <a href="/rowers/brochure/">Brochure</a>
</li> </li>
<li> <li>
<a href="/rowers/partners">Partnering?</a> <a href="/rowers/partners/">Partnering?</a>
</li> </li>
<li> <li>
<a href="/rowers/developers">Developers Info</a> <a href="/rowers/developers/">Developers Info</a>
</li> </li>
</ul> </ul>
</li> </li>
@@ -347,7 +347,7 @@
<h1>Paid Plans</h1> <h1>Paid Plans</h1>
<ul> <ul>
<li> <li>
<a href="/rowers/paidplans">Paid Plans</a> <a href="/rowers/paidplans/">Paid Plans</a>
</li> </li>
</ul> </ul>
</li> </li>
@@ -355,10 +355,10 @@
<h1>Legal</h1> <h1>Legal</h1>
<ul> <ul>
<li> <li>
<a href="/rowers/legal">Terms and Conditions</a> <a href="/rowers/legal/">Terms and Conditions</a>
</li> </li>
<li> <li>
<a href="/rowers/legal">Privacy Policy</a> <a href="/rowers/legal/">Privacy Policy</a>
</li> </li>
</ul> </ul>
</ul> </ul>