hrefs added trailing slashes
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
{% 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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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> 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> 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> 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> 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> 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> Trend Flex
|
||||
</a>
|
||||
</li>
|
||||
<li id="stats-cumstats">
|
||||
<a href="/rowers/cumstats">
|
||||
<a href="/rowers/cumstats/">
|
||||
<i class="fal fa-table fa-fw"></i> Statistics
|
||||
</a>
|
||||
</li>
|
||||
<li id="stats-histopower">
|
||||
<a href="/rowers/histo">
|
||||
<a href="/rowers/histo/">
|
||||
<i class="fas fa-chart-bar"></i> Power Histogram
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/rowers/flexall">
|
||||
<a href="/rowers/flexall/">
|
||||
<i class="fas fa-chart-line fa-fw"></i> Cumulative Flex Chart
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -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> 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> Contact
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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/">
|
||||
|
||||
@@ -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> 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> 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> 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> 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> 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> 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> 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> 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> Submit Workout</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/rowers/workout/upload">
|
||||
<a href="/rowers/workout/upload/">
|
||||
<i class="fas fa-file-upload fa-fw"></i> 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> 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> 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> 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> Edit Race
|
||||
<a href="/rowers/virtualevent/{{ race.id }}/edit/"><i class="fas fa-pencil-alt fa-fw"></i> Edit Race
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/rowers/virtualevent/{{ race.id }}/editindoor"><i class="fas fa-pencil-alt fa-fw"></i> Edit Race
|
||||
<a href="/rowers/virtualevent/{{ race.id }}/editindoor/"><i class="fas fa-pencil-alt fa-fw"></i> 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> Courses
|
||||
</a>
|
||||
</li>
|
||||
@@ -99,32 +99,32 @@
|
||||
<label for="group-course"><i class="fas fa-route fa-fw"></i> {{ 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> 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> 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> 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> 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> 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> Update Markers</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
@@ -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> 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> 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> 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> 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> 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> 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> 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> 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> Leave
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> Update Summary
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -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> Workouts List</a>
|
||||
<a href="/rowers/list-workouts/"><i class="fas fa-clipboard-list fa-fw"></i> Workouts List</a>
|
||||
</li>
|
||||
<li id="charts">
|
||||
<a href="/rowers/list-graphs"><i class="fas fa-chart-pie fa-fw"></i> Charts</a>
|
||||
<a href="/rowers/list-graphs/"><i class="fas fa-chart-pie fa-fw"></i> 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> Glue Workouts
|
||||
</a>
|
||||
@@ -35,12 +35,12 @@
|
||||
<label for="group-1"><i class="fas fa-cloud-download fa-fw"></i> 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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
{% 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>
|
||||
|
||||
<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>
|
||||
|
||||
@@ -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> </td>
|
||||
{% endif %}
|
||||
|
||||
@@ -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>
|
||||
<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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
{% 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>
|
||||
|
||||
@@ -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>
|
||||
{% 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>
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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+')
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
574
rowers/tests/testdata/testdata.gpx
vendored
Normal file
574
rowers/tests/testdata/testdata.gpx
vendored
Normal 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
2523
rowers/tests/testdata/testdata.tcx
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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'),
|
||||
|
||||
@@ -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'
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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> Workouts
|
||||
</a>
|
||||
</li>
|
||||
<li id="nav-racing">
|
||||
<a href="/rowers/virtualevents">
|
||||
<a href="/rowers/virtualevents/">
|
||||
<i class="fas fa-flag-checkered"></i> 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> 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>
|
||||
|
||||
@@ -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> Workouts
|
||||
</a>
|
||||
</li>
|
||||
<li id="nav-racing">
|
||||
<a href="/rowers/virtualevents">
|
||||
<a href="/rowers/virtualevents/">
|
||||
<i class="fas fa-flag-checkered"></i> 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> 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>
|
||||
|
||||
Reference in New Issue
Block a user