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
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>
@@ -72,9 +64,8 @@
<h3>Import Compatibility</h3>
<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
list of currently supported devides/apps, click
<a href="/rowers/compatibility">here</a>.
that rowers use to capture the data (both indoor and OTW).
</p>
@@ -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:
<ul>
<li><a href="/rowers/paidplans">Pro Membership</a>,
<li><a href="/rowers/paidplans/">Pro Membership</a>,
offering additional rowing metrics and analysis
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,
plus the ability to plan your own sessions and analyze progress
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
Membership plans, but allows you to build a manage the
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
automatically reset to the Basic plan, unless you upgrade to Pro.
</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 %}
<h2>Recurring Payment</h2>

View File

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

View File

@@ -21,11 +21,11 @@
<p>
{% 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;
{% endif %}
{% 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>
{% endif %}
</p>
@@ -61,12 +61,12 @@
<form enctype="multipart/form-data" action="{{ formloc }}" method="post">
{% if favoritenr > 0 %}
<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>
</a>
{% else %}
<a
href="/rowers/workout/{{ id }}/flexchart?favoritechart={{ maxfav }}">
href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ maxfav }}">
<i class="fas fa-arrow-alt-left"></i>
</a>
{% endif %}
@@ -80,12 +80,12 @@
<input value="Make Favorite" type="Submit">
{% if favoritenr < maxfav %}
<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>
</a>
{% else %}
<a
href="/rowers/workout/{{ id }}/flexchart?favoritechart=0">
href="/rowers/workout/{{ id }}/flexchart/?favoritechart=0">
<i class="fas fa-arrow-alt-right"></i>
</a>
{% endif %}

View File

@@ -75,7 +75,7 @@
(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 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>
@@ -142,7 +142,7 @@
<h2>Teams</h2>
<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
are part of one.
</p>

View File

@@ -37,9 +37,9 @@
<td> {{ course.country }} </td>
<td>
{% 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 %}
<a href="/rowers/courses/{{ course.id }}">{{ course.name }}</a>
<a href="/rowers/courses/{{ course.id }}/">{{ course.name }}</a>
{% endif %}
</td>
<td>
@@ -65,7 +65,7 @@
</form>
</p>
<p>
<a href="/rowers/courses/upload">Add Courses</a>
<a href="/rowers/courses/upload/">Add Courses</a>
</p>
{% if announcements %}
<h3>What's New?</h3>
@@ -90,7 +90,7 @@
to the total duration of a workout). This allows you to row and rank
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 creating custom courses for the
<a href="http://performancephones.com/crewnerd/">CrewNerd</a>

View File

@@ -93,11 +93,11 @@
</p>
<p>
{% if rankingonly and not team %}
<a href="/rowers/list-workouts">
<a href="/rowers/list-workouts/">
<i class="far fa-star"></i>Show All Workouts
</a>
{% 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
</a>
{% endif %}
@@ -129,7 +129,7 @@
{% if workouts.has_next %}
{% 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>
</a>
<a
@@ -137,7 +137,7 @@
<i class="fas fa-arrow-alt-to-right"></i>
</a>
{% 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>
</a>
<a href="?page={{ workouts.paginator.num_pages }}">
@@ -215,15 +215,15 @@
<td> {{ workout.maxhr }} </td>
{% if team %}
<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.last_name }}
</a>
</td>
{% 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>
<a class="small" href="/rowers/workout/{{ workout.id }}/delete">Delete
<a class="small" href="/rowers/workout/{{ workout.id }}/delete/">Delete
</td>
</tr>

View File

@@ -1,6 +1,6 @@
{% load staticfiles %}
{% load rowerfilters %}
<h1><a href="/rowers/analysis">Analysis</a></h1>
<h1><a href="/rowers/analysis/">Analysis</a></h1>
<ul class="cd-accordion-menu animated">
<li class="has-children" id="fitness">
<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>
<ul>
<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
</a>
</li>
<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
</a>
</li>
<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
</a>
</li>
@@ -36,29 +36,29 @@
</label>
<ul>
<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
</a>
</li>
<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
</a>
</li>
<li id="stats-cumstats">
<a href="/rowers/cumstats">
<a href="/rowers/cumstats/">
<i class="fal fa-table fa-fw"></i>&nbsp;Statistics
</a>
</li>
<li id="stats-histopower">
<a href="/rowers/histo">
<a href="/rowers/histo/">
<i class="fas fa-chart-bar"></i>&nbsp;Power Histogram
</a>
</li>
</ul>
</li>
<li>
<a href="/rowers/flexall">
<a href="/rowers/flexall/">
<i class="fas fa-chart-line fa-fw"></i>&nbsp;Cumulative Flex Chart
</a>
</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">
<li id="gettingstarted">
<a href="/rowers/help">
<a href="/rowers/help/">
<i class="fas fa-question-circle fa-fw"></i>&nbsp;Getting Started
</a>
</li>
@@ -11,7 +11,7 @@
</a>
</li>
<li id="contact">
<a href="/rowers/email">
<a href="/rowers/email/">
<i class="fas fa-envelope fa-fw"></i>&nbsp;Contact
</a>
</li>

View File

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

View File

@@ -1,6 +1,6 @@
{% load staticfiles %}
{% 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">
<li id="manage-prefs">
<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">
<li id="races-list">
<a href="/rowers/virtualevents">
<a href="/rowers/virtualevents/">
<i class="fas fa-flag-checkered fa-fw"></i>&nbsp;Races
</a>
</li>
<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
</a>
</li>
<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
</a>
</li>
{% if race %}
{% if results %}
<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>
</li>
{% endif %}
{% if reguest.user.is_anonymous %}
<li id="race-register">
{% 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>
{% 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>
{% endif %}
</li>
@@ -37,51 +37,51 @@
{% if button == 'registerbutton' %}
<li>
{% 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>
{% 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>
{% endif %}
</li>
{% endif %}
{% if button == 'submitbutton' %}
<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>
</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
</a>
</li>
<li>
<a href="/rowers/workout/addmanual">
<a href="/rowers/workout/addmanual/">
<i class="fas fa-file-plus fa-fw"></i>&nbsp;Enter Result
</a>
</li>
{% endif %}
{% if button == 'resubmitbutton' %}
<li>
<a href="/rowers/virtualevent/{{ race.id }}/submit">Submit New Result</a>
<a href="/rowers/virtualevent/{{ race.id }}/submit/">Submit New Result</a>
</li>
{% endif %}
{% 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>
{% endif %}
{% 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
</a>
{% endif %}
{% if button == 'editbutton' %}
<li>
{% 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>
{% 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>
{% endif %}
</li>
@@ -89,7 +89,7 @@
{% endfor %}
{% endif %}
<li id="courses">
<a href="/rowers/list-courses">
<a href="/rowers/list-courses/">
<i class="fas fa-route fa-fw"></i>&nbsp;Courses
</a>
</li>
@@ -99,32 +99,32 @@
<label for="group-course"><i class="fas fa-route fa-fw"></i>&nbsp;{{ course.name }}</label>
<ul>
<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
</a>
</li>
<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
</a>
</li>
{% if course.manager == rower %}
<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>
</li>
<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>
</li>
{% if nosessions %}
<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>
</li>
{% endif %}
<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>
</li>
{% endif %}

View File

@@ -1,16 +1,16 @@
{% load staticfiles %}
{% 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">
<li id="manage">
<a href="/rowers/me/teams">
<a href="/rowers/me/teams/">
<i class="fas fa-cog fa-fw"></i>&nbsp;Overview
</a>
</li>
{% if user|is_manager %}
<li id="create">
<a href="/rowers/team/create">
<a href="/rowers/team/create/">
<i class="fas fa-plus fa-fw"></i>&nbsp;New Team
</a>
</li>
@@ -27,17 +27,17 @@
<label for="group-team-{{ team.id }}">{{ team.name }}</label>
<ul>
<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
</a>
</li>
<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
</a>
</li>
<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
</a>
</li>
@@ -47,12 +47,12 @@
</a>
</li>
<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
</a>
</li>
<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
</a>
</li>
@@ -72,7 +72,7 @@
<label for="group-team-{{ team.id }}">{{ team.name }}</label>
<ul>
<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
</a>
</li>
@@ -82,7 +82,7 @@
</a>
</li>
<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
</a>
</li>

View File

@@ -7,53 +7,53 @@
<ul>
<li id="workout-dashboard">
{% 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
</a>
{% 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
</a>
{% endif %}
</li>
{% if user.is_authenticated and workout|may_edit:request %}
<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
</a>
</li>
<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
</a>
</li>
{% endif %}
{% if user.is_authenticated %}
<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
({{ workout|aantalcomments }})
</a>
</li>
{% endif %}
<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
</a>
</li>
<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
</a>
</li>
{% if user.is_authenticated and workout|may_edit:request %}
<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
</a>
</li>
<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
</a>
</li>
@@ -65,23 +65,23 @@
<label for="group-flexchart">Interactive Charts</label>
<ul>
<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
</a>
</li>
{% if workout|water %}
<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
</a>
</li>
<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
</a>
</li>
<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
</a>
</li>
@@ -94,28 +94,28 @@
<label for="group-chart">Static Charts</label>
<ul>
<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
</a>
</li>
<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
</a>
</li>
<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)
</a>
</li>
<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)
</a>
</li>
{% if workout|water %}
<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
</a>
</li>
@@ -136,7 +136,7 @@
Connect to Concept2
</a>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/c2uploadw">
<a href="/rowers/workout/{{ workout.id }}/c2uploadw/">
Concept2
</a>
{% endif %}
@@ -151,7 +151,7 @@
Connect to Strava
</a>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/stravauploadw">
<a href="/rowers/workout/{{ workout.id }}/stravauploadw/">
Strava
</a>
{% endif %}
@@ -166,7 +166,7 @@
Connect to SportTracks
</a>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw">
<a href="/rowers/workout/{{ workout.id }}/sporttracksuploadw/">
SportTracks
</a>
{% endif %}
@@ -181,7 +181,7 @@
Connect to Runkeeper
</a>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw">
<a href="/rowers/workout/{{ workout.id }}/runkeeperuploadw/">
Runkeeper
</a>
{% endif %}
@@ -196,7 +196,7 @@
Connect to MapMyFitness
</a>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/underarmouruploadw">
<a href="/rowers/workout/{{ workout.id }}/underarmouruploadw/">
MapMyFitness
</a>
{% endif %}
@@ -211,23 +211,23 @@
Connect to TrainingPeaks
</a>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/tpuploadw">
<a href="/rowers/workout/{{ workout.id }}/tpuploadw/">
TrainingPeaks
</a>
{% endif %}
</li>
<li id="export-csv">
<a href="/rowers/workout/{{ workout.id }}/emailcsv">
<a href="/rowers/workout/{{ workout.id }}/emailcsv/">
CSV
</a>
</li>
<li id="export-gpx">
<a href="/rowers/workout/{{ workout.id }}/emailgpx">
<a href="/rowers/workout/{{ workout.id }}/emailgpx/">
GPX
</a>
</li>
<li id="export-tcx">
<a href="/rowers/workout/{{ workout.id }}/emailtcx">
<a href="/rowers/workout/{{ workout.id }}/emailtcx/">
TCX
</a>
</li>
@@ -238,12 +238,12 @@
<label for="group-data">Data</label>
<ul>
<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
</a>
</li>
<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
</a>
</li>
@@ -253,12 +253,12 @@
</a>
</li>
<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
</a>
</li>
<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
</a>
</ul>
@@ -269,28 +269,28 @@
<ul>
{% if workout|water %}
<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
</a>
</li>
<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
</a>
</li>
<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
</a>
</li>
{% endif %}
<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
</a>
</li>
<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
</a>
</li>

View File

@@ -1,12 +1,12 @@
{% load staticfiles %}
{% 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">
<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 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 id="compare">
{% if team %}
@@ -23,9 +23,9 @@
</li>
<li>
{% if user|is_promember %}
<a href="/rowers/workouts-join-select">
<a href="/rowers/workouts-join-select/">
{% else %}
<a href="/rowers/paidplans">
<a href="/rowers/paidplans/">
{% endif %}
<i class="fas fa-layer-plus fa-fw"></i>&nbsp;Glue Workouts
</a>
@@ -35,12 +35,12 @@
<label for="group-1"><i class="fas fa-cloud-download fa-fw"></i>&nbsp;Import</label>
<ul>
<li id="concept2"><a href="/rowers/workout/c2list">Concept2</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="sporttracks"><a href="/rowers/workout/sporttracksimport">SportTracks</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="concept2"><a href="/rowers/workout/c2list/">Concept2</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="sporttracks"><a href="/rowers/workout/sporttracksimport/">SportTracks</a></li>
<li id="mapmyfitness"><a href="/rowers/workout/underarmourimport/">MapMyFitness</a></li>
<li id="polar"><a href="/rowers/workout/polarimport/">Polar</a></li>
</ul>
</li>
</ul> <!-- cd-accordion-menu -->

View File

@@ -97,7 +97,7 @@
<td> {{ workout.averagehr }} </td>
<td> {{ workout.maxhr }} </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>

View File

@@ -96,7 +96,7 @@
<td> {{ workout.averagehr }} </td>
<td> {{ workout.maxhr }} </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>

View File

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

View File

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

View File

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

View File

@@ -154,12 +154,12 @@
sign up for the trial. After your trial period expires, you will be
automatically reset to the Basic plan, unless you upgrade to Pro.
</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/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>
{% endif %}
</li>
<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.
You will be taken to the secure PayPal payment site.
</p>

View File

@@ -73,7 +73,7 @@
<td> {{ workout.averagehr }} </td>
<td> {{ workout.maxhr }} </td>
<td>
<a href="/rowers/workout/{{ workout.id }}/edit">
<a href="/rowers/workout/{{ workout.id }}/edit/">
{{ workout.name }}
</a>
</td>
@@ -90,13 +90,13 @@
<p>Missing your best pieces? Upload stroke data of any Concept2
ranking piece and they will be automatically added to this page.</p>
<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
parts of workouts for improved calculation accuracy.
</p>
<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>
@@ -207,91 +207,91 @@
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/100m">100m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/100m/">100m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/500m">500m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/500m/">500m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1000m">1000m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1000m/">1000m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/2000m">2000m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/2000m/">2000m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/5000m">5000m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/5000m/">5000m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/6000m">6000m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/6000m/">6000m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/10000m">10000m
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/10000m/">10000m
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/21097m">Half Marathon
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/21097m/">Half Marathon
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/42195m">Full Marathon
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/42195m/">Full Marathon
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1min">1 minute
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1min/">1 minute
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/4min">4 minutes
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/4min/">4 minutes
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/30min">30 minutes
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/30min/">30 minutes
</a>
</td>
</tr>
<tr>
<td>
<a
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/60min">1 hour
href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/60min/">1 hour
</a>
</td>
</tr>

View File

@@ -25,7 +25,7 @@
</tr>
<tr>
<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>
<td></td>

View File

@@ -22,7 +22,7 @@
<table width=100%>
{{ form.as_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="submit" value="Submit">
</form>

View File

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

View File

@@ -8,11 +8,11 @@
{% block main %}
<p>
{% 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;
{% endif %}
{% 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>
{% endif %}
</p>
@@ -30,7 +30,7 @@
</tr><tr>
<th>Public link to this workout</th>
<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>
</tr>
</table>
@@ -89,7 +89,7 @@
<span>
<a href="">Reset to last saved</a>
&nbsp;
<a href="/rowers/workout/{{ workout.id }}/restore">Restore Original data</a>
<a href="/rowers/workout/{{ workout.id }}/restore/">Restore Original data</a>
</span>
</form>
<p>

View File

@@ -16,13 +16,13 @@
<p>You have requested access to this team</p>
{% elif team not in myteams and team not in memberteams %}
<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
workouts marked as "private") to all team members and the team manager.
You also grant the team manager access to your heart rate and power
zone settings, as well as your functional threshold information. You
are granting the team manager permission to edit your workouts.</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>
{% endif %}
</li>
@@ -38,9 +38,9 @@
<tbody>
{% for member in members %}
<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 %}
<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 %}
<td>&nbsp;</td>
{% endif %}

View File

@@ -21,7 +21,7 @@
<a href="/rowers/team/{{ team.id }}/">{{ team.name }}</a>
</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>
</tr>
{% endfor %}
@@ -76,14 +76,14 @@
<a href="/rowers/team/{{ team.id }}/">{{ team.name }}</a>
</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>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<a class="button green" href="/rowers/team/create">New Team</a>
<a class="button green" href="/rowers/team/create/">New Team</a>
</li>
{% endif %}
{% if invites or requests or myrequests or myinvites %}
@@ -92,11 +92,11 @@
<p>This section lists open invites to join a team. By accepting
a team invite, you are agreeing with the sharing
of personal data between team members and coaches according to
our <a href="/rowers/legal">privacy policy</a>.
our <a href="/rowers/legal/">privacy policy</a>.
</p>
<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>
<table width="90%" class="listtable">
@@ -112,39 +112,39 @@
<tbody>
{% for i in invites %}
<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>{{ 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>
<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>
</tr>
{% endfor %}
{% for i in requests %}
<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>{{ user.first_name }} {{ user.last_name }}</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>
{% endfor %}
{% for i in myrequests %}
<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.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>
<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>
</tr>
{% endfor %}
{% for i in myinvites %}
<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>
{% if i.user %}
<td>{{ i.user.first_name }} {{ i.user.last_name }}</td>
@@ -153,7 +153,7 @@
{% endif %}
<td>&nbsp;
<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>
</tr>
{% endfor %}

View File

@@ -41,9 +41,9 @@
<li>
<p>Closest Airport Weather: {{ airport }}
({{ 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>
<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>
Download wind speed and bearing from <a href="http://forecast.io/">The Dark Sky</a>
</p>

View File

@@ -12,7 +12,7 @@
{% if workoutid %}
<div class="grid_2 suffix_10 alpha">
<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>
</div>
{% endif %}

View File

@@ -13,7 +13,7 @@
{% if workoutid %}
<li class="grid_4">
<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>
</li>
{% endif %}
@@ -35,10 +35,10 @@
<li>
{% if rower.defaultlandingpage == 'workout_edit_view' %}
<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 %}
<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 %}
</li>
</ul>

View File

@@ -12,11 +12,11 @@
{% block main %}
<p>
{% 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;
{% endif %}
{% 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>
{% endif %}
</p>
@@ -38,7 +38,7 @@
</tr><tr>
<th>Public link to this workout</th>
<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>
</tr>
</table>

View File

@@ -43,11 +43,11 @@ $('#id_workouttype').change();
<p>
{% 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;
{% endif %}
{% 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>
{% endif %}
</p>
@@ -57,7 +57,7 @@ $('#id_workouttype').change();
<li class="grid_4">
<p>
<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">
<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>
@@ -86,7 +86,7 @@ $('#id_workouttype').change();
</tr><tr>
<th>Public link to this workout:</th>
<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>
</tr>
</table>
@@ -123,7 +123,7 @@ $('#id_workouttype').change();
<h1>Racing</h1>
{% for race in indoorraces %}
<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>
{% endfor %}
</li>

View File

@@ -42,7 +42,7 @@
{% for record in records %}
<p>
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>
{% endfor %}
{% endif %}
@@ -50,7 +50,7 @@
{% for record in recordsindoor %}
<p>
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>
{% endfor %}
{% endif %}
@@ -94,7 +94,7 @@
<tr>
<th>Comments</th>
<td>
<a href="/rowers/workout/{{ workout.id }}/comment">Comment ({{ aantalcomments }})</a>
<a href="/rowers/workout/{{ workout.id }}/comment/">Comment ({{ aantalcomments }})</a>
</td>
</tr>
{% endif %}

View File

@@ -399,7 +399,7 @@ def is_final(race):
@register.filter
def userurl(path,member):
pattern = re.compile('user\/\d+')
userstring = 'user/%s' % member.id
userstring = 'user/%s/' % member.id
# remove team
tpattern = re.compile('\/team\/\d+')
@@ -416,7 +416,7 @@ def userurl(path,member):
@register.filter
def teamurl(path,team):
pattern = re.compile('team\/\d+')
teamstring = 'team/%s' % team.id
teamstring = 'team/%s/' % team.id
# remove user
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.dataprep import delete_strokedata
from rowers.tests.mocks import *
from redis import StrictRedis
redis_connection = StrictRedis()
tested = [
'/rowers/me/delete/'
]
#@pytest.mark.django_db
class URLTests(TestCase):
def setUp(self):
@@ -182,7 +186,7 @@ class URLTests(TestCase):
'/rowers/partners/',
'/rowers/physics/',
'/rowers/planrequired/',
'/rowers/promembership/',
# '/rowers/promembership/',
'/rowers/register/',
'/rowers/register/thankyou/',
'/rowers/sessions/',
@@ -263,7 +267,7 @@ class URLTests(TestCase):
'/rowers/workout/1/view/',
'/rowers/workout/1/wind/',
'/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/2016-01-01/2016-12-31/',
'/rowers/workout/upload/',
@@ -280,22 +284,46 @@ class URLTests(TestCase):
lijst.append(
(url,200)
)
@parameterized.expand(lijst)
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.read_df_sql')
@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,
mocked_sqlalchemy,
mocked_read_df_sql,
mocked_getsmallrowdata_db):
login = self.c.login(username='john',password='koeinsloot')
self.assertTrue(login)
response = self.c.get(url,follow=True)
if response.status_code != expected:
print url
print response.status_code
self.assertEqual(response.status_code,
mocked_getsmallrowdata_db,
mock_get,
mock_post):
if url not in tested:
login = self.c.login(username='john',password='koeinsloot')
self.assertTrue(login)
response = self.c.get(url,follow=True)
if response.status_code != expected:
print url
print response.status_code
self.assertEqual(response.status_code,
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'^upgradecheckouts/$',views.upgrade_checkouts_view,name='upgrade_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'^startplantrial/$',views.start_plantrial_view),
# 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):
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",
message="This functionality requires a Coach or Self-Coach plan",
@@ -3576,7 +3576,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -3646,7 +3646,7 @@ def workout_histo_view(request,id=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -3855,7 +3855,7 @@ def addmanual_view(request):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -6051,7 +6051,7 @@ def team_comparison_select(request,
if id:
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -6066,7 +6066,7 @@ def team_comparison_select(request,
else:
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -6369,7 +6369,7 @@ def multi_compare_view(request,id=0,userid=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -7709,7 +7709,7 @@ def workouts_view(request,message='',successmessage='',
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
]
@@ -7891,7 +7891,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -7988,7 +7988,7 @@ def workout_view(request,id=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -8122,7 +8122,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
r = getrower(request.user)
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -8332,7 +8332,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
r = getrower(request.user)
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -8520,7 +8520,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -8652,7 +8652,7 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -8692,7 +8692,7 @@ def instroke_view(request,id=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -9170,7 +9170,7 @@ def workout_data_view(request, id=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -9272,7 +9272,7 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -9807,7 +9807,7 @@ def workout_workflow_view(request,id):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -10093,7 +10093,7 @@ def workout_flexchart3_view(request,*args,**kwargs):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -10187,7 +10187,7 @@ def workout_otwpowerplot_view(request,id=0,message="",successmessage=""):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -10414,7 +10414,7 @@ def workout_comment_view(request,id=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -10854,7 +10854,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -10902,7 +10902,7 @@ def workout_map_view(request,id=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11128,7 +11128,7 @@ def workout_uploadimage_view(request,id):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11394,7 +11394,7 @@ def workout_stravaimport_view(request,message="",userid=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11450,7 +11450,7 @@ def workout_runkeeperimport_view(request,message="",userid=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11502,7 +11502,7 @@ def workout_underarmourimport_view(request,message="",userid=0):
rower = getrower(request.user)
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11555,7 +11555,7 @@ def workout_polarimport_view(request,userid=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11627,7 +11627,7 @@ def workout_sporttracksimport_view(request,message="",userid=0):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -11772,7 +11772,7 @@ def workout_c2import_view(request,page=1,userid=0,message=""):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -12082,7 +12082,7 @@ def workout_upload_view(request,
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -12508,7 +12508,7 @@ def team_workout_upload_view(request,message="",
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -12816,7 +12816,7 @@ def graph_show_view(request,id):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -12908,7 +12908,7 @@ def workout_split_view(request,id=id):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -13041,7 +13041,7 @@ def workout_fusion_view(request,id1=0,id2=1):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -13079,7 +13079,7 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
r = getrower(request.user)
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -13575,7 +13575,7 @@ def rower_exportsettings_view(request,userid=0):
breadcrumbs = [
{
'url':'/rowers/me',
'url':'/rowers/me/edit/',
'name': 'Profile'
},
{
@@ -13601,7 +13601,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""):
breadcrumbs = [
{
'url':'/rowers/me/edit',
'url':'/rowers/me/edit/',
'name': 'Profile'
},
{
@@ -13906,7 +13906,7 @@ def rower_prefs_view(request,userid=0,message=""):
breadcrumbs = [
{
'url':'/rowers/me/edit',
'url':'/rowers/me/edit/',
'name': 'Profile'
},
{
@@ -16142,7 +16142,10 @@ def plannedsessions_manage_view(request,userid=0,
initialsession=0
if initialsession:
ps0 = PlannedSession.objects.get(id=initialsession)
try:
ps0 = PlannedSession.objects.get(id=initialsession)
except PlannedSession.DoesNotExist:
ps0 = None
else:
ps0 = None
@@ -18667,7 +18670,7 @@ class GraphDelete(DeleteView):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{
@@ -18713,7 +18716,7 @@ class WorkoutDelete(DeleteView):
breadcrumbs = [
{
'url':'/rowers/list-workouts',
'url':'/rowers/list-workouts/',
'name':'Workouts'
},
{

View File

@@ -149,13 +149,13 @@
<user class="main-user">
<ul>
<li>
<a class="" href="/rowers/help" title="Help">
<a class="" href="/rowers/help/" title="Help">
<i class="fas fa-question-circle "></i>
</a>
</li>
{% if user.is_authenticated %}
<li>
<a href="/rowers/me/preferences" title="Profile">
<a href="/rowers/me/preferences/" title="Profile">
{% if user.rower.rowerplan == 'pro' %}
<i class="fas fa-user-ninja "></i>
{% elif user.rower.rowerplan == 'coach' %}
@@ -163,19 +163,19 @@
{% elif user.rower.rowerplan == 'plan' %}
<i class="fas fa-user-chart "></i>
{% else %}
<a href="/rowers/me/preferences" title="Profile">
<a href="/rowers/me/preferences/" title="Profile">
<i class="fas fa-user"></i>
{% endif %}
</a>
</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>
</a>
</li>
{% else %}
<li>
<a href="/rowers/register" title="Sign Up">
<a href="/rowers/register/" title="Sign Up">
<i class="fas fa-user-plus "></i>
</a>
</li>
@@ -195,12 +195,12 @@
<nav class="main-nav">
<ul>
<li id="nav-workouts">
<a href="/rowers/list-workouts">
<a href="/rowers/list-workouts/">
<i class="fas fa-clipboard-list"></i>&nbsp;Workouts
</a>
</li>
<li id="nav-racing">
<a href="/rowers/virtualevents">
<a href="/rowers/virtualevents/">
<i class="fas fa-flag-checkered"></i>&nbsp;Racing
</a>
</li>
@@ -215,7 +215,7 @@
</a>
</li>
<li id="nav-teams">
<a href="/rowers/me/teams">
<a href="/rowers/me/teams/">
<i class="fas fa-bullhorn"></i>&nbsp;Teams
</a>
</li>
@@ -236,7 +236,7 @@
{% if user.rower.planexpires|date_dif|ddays < 4 %}
<li class="grid_4">
<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>
{% endif %}
{% endif %}
@@ -245,14 +245,14 @@
{% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %}
<li class="grid_4">
<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>
</li>
{% else %}
{% if user.rower.rowerplan == 'basic' %}
<li class="grid_4">
<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>
</li>
{% endif %}
@@ -335,7 +335,7 @@
<h1>Help</h1>
<ul>
<li>
<a href="/rowers/help">Help</a>
<a href="/rowers/help/">Help</a>
</li>
<li>
<a href="https://analytics.rowsandall.com/">
@@ -347,7 +347,7 @@
Rowing Data Facebook Group</a>
</li>
<li>
<a href="/rowers/physics">Rowing Physics</a>
<a href="/rowers/physics/">Rowing Physics</a>
</li>
</ul>
</li>
@@ -361,13 +361,13 @@
<a href="/rowers/email/">Rowsandall s.r.o.</a>
</li>
<li>
<a href="/rowers/brochure">Brochure</a>
<a href="/rowers/brochure/">Brochure</a>
</li>
<li>
<a href="/rowers/partners">Partnering?</a>
<a href="/rowers/partners/">Partnering?</a>
</li>
<li>
<a href="/rowers/developers">Developers Info</a>
<a href="/rowers/developers/">Developers Info</a>
</li>
</ul>
</li>
@@ -375,7 +375,7 @@
<h1>Paid Plans</h1>
<ul>
<li>
<a href="/rowers/paidplans">Paid Plans</a>
<a href="/rowers/paidplans/">Paid Plans</a>
</li>
</ul>
</li>
@@ -383,10 +383,10 @@
<h1>Legal</h1>
<ul>
<li>
<a href="/rowers/legal">Terms and Conditions</a>
<a href="/rowers/legal/">Terms and Conditions</a>
</li>
<li>
<a href="/rowers/legal">Privacy Policy</a>
<a href="/rowers/legal/">Privacy Policy</a>
</li>
</ul>
</ul>

View File

@@ -159,13 +159,13 @@
<user class="main-user">
<ul>
<li>
<a class="" href="/rowers/help" title="Help">
<a class="" href="/rowers/help/" title="Help">
<i class="fas fa-question-circle "></i>
</a>
</li>
{% if user.is_authenticated %}
<li>
<a href="/rowers/me/preferences" title="Profile">
<a href="/rowers/me/preferences/" title="Profile">
{% if user.rower.rowerplan == 'pro' %}
<i class="fas fa-user-ninja "></i>
{% elif user.rower.rowerplan == 'coach' %}
@@ -173,19 +173,19 @@
{% elif user.rower.rowerplan == 'plan' %}
<i class="fas fa-user-tie "></i>
{% else %}
<a href="/rowers/me/preferences" title="Profile">
<a href="/rowers/me/preferences/" title="Profile">
<i class="fas fa-user"></i>
{% endif %}
</a>
</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>
</a>
</li>
{% else %}
<li>
<a href="/rowers/register" title="Sign Up">
<a href="/rowers/register/" title="Sign Up">
<i class="fas fa-user-plus "></i>
</a>
</li>
@@ -206,12 +206,12 @@
<nav class="main-nav">
<ul>
<li id="nav-workouts">
<a href="/rowers/list-workouts">
<a href="/rowers/list-workouts/">
<i class="fas fa-clipboard-list"></i>&nbsp;Workouts
</a>
</li>
<li id="nav-racing">
<a href="/rowers/virtualevents">
<a href="/rowers/virtualevents/">
<i class="fas fa-flag-checkered"></i>&nbsp;Racing
</a>
</li>
@@ -226,7 +226,7 @@
</a>
</li>
<li id="nav-teams">
<a href="/rowers/me/teams">
<a href="/rowers/me/teams/">
<i class="fas fa-bullhorn"></i>&nbsp;Teams
</a>
</li>
@@ -247,14 +247,14 @@
{% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %}
<li class="grid_5">
<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>
</li>
{% else %}
{% if user.rower.rowerplan == 'basic' %}
<li class="grid_5">
<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>
</li>
{% endif %}
@@ -307,7 +307,7 @@
<h1>Help</h1>
<ul>
<li>
<a href="/rowers/help">Help</a>
<a href="/rowers/help/">Help</a>
</li>
<li>
<a href="https://analytics.rowsandall.com/">
@@ -333,13 +333,13 @@
<a href="/rowers/email/">Rowsandall s.r.o.</a>
</li>
<li>
<a href="/rowers/brochure">Brochure</a>
<a href="/rowers/brochure/">Brochure</a>
</li>
<li>
<a href="/rowers/partners">Partnering?</a>
<a href="/rowers/partners/">Partnering?</a>
</li>
<li>
<a href="/rowers/developers">Developers Info</a>
<a href="/rowers/developers/">Developers Info</a>
</li>
</ul>
</li>
@@ -347,7 +347,7 @@
<h1>Paid Plans</h1>
<ul>
<li>
<a href="/rowers/paidplans">Paid Plans</a>
<a href="/rowers/paidplans/">Paid Plans</a>
</li>
</ul>
</li>
@@ -355,10 +355,10 @@
<h1>Legal</h1>
<ul>
<li>
<a href="/rowers/legal">Terms and Conditions</a>
<a href="/rowers/legal/">Terms and Conditions</a>
</li>
<li>
<a href="/rowers/legal">Privacy Policy</a>
<a href="/rowers/legal/">Privacy Policy</a>
</li>
</ul>
</ul>