• Ranking Pieces

    - +
    Ranking Piece @@ -25,7 +25,7 @@
  • Stroke Analysis

    -
    +
    Stroke Analysis @@ -37,7 +37,7 @@
  • Power Histogram

    -
    +
    Power Histogram
    @@ -48,7 +48,7 @@
  • Statistics

    -
    +
    Statistics
    @@ -59,7 +59,7 @@
  • Box Chart

    -
    +
    Box Chart
    @@ -71,7 +71,7 @@
  • OTW Critical Power

    -
    +
    OTW Critical Power
    @@ -82,7 +82,7 @@
  • OTE Critical Power

    -
    +
    OTE Critical Power
    @@ -94,7 +94,7 @@
  • Trend Flex

    -
    +
    Trend Flex
    diff --git a/rowers/templates/flexchart3otw.html b/rowers/templates/flexchart3otw.html index e675ca2d..2eb32cf0 100644 --- a/rowers/templates/flexchart3otw.html +++ b/rowers/templates/flexchart3otw.html @@ -21,11 +21,11 @@

    {% if workout|previousworkout:rower.user %} - Previous  {% endif %} {% if workout|nextworkout:rower.user %} - Next {% endif %}

    @@ -61,12 +61,12 @@
    {% if favoritenr > 0 %} + href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ favoritenr|add:-1 }}"> {% else %} + href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ maxfav }}"> {% endif %} @@ -80,12 +80,12 @@ {% if favoritenr < maxfav %} + href="/rowers/workout/{{ id }}/flexchart/?favoritechart={{ favoritenr|add:1 }}"> {% else %} + href="/rowers/workout/{{ id }}/flexchart/?favoritechart=0"> {% endif %} diff --git a/rowers/templates/help.html b/rowers/templates/help.html index a755360d..d7835320 100644 --- a/rowers/templates/help.html +++ b/rowers/templates/help.html @@ -75,7 +75,7 @@ (CSV, FIT, TCX, etc). The details are described in this blog post. A straightforward way to upload your data is to use the - Upload Page. + Upload Page.

    @@ -142,7 +142,7 @@

    Teams

    - The Teams tab brings you to + The Teams tab brings you to functionality related to interaction with your team, if you are part of one.

    diff --git a/rowers/templates/list_courses.html b/rowers/templates/list_courses.html index 53648139..28b44e50 100644 --- a/rowers/templates/list_courses.html +++ b/rowers/templates/list_courses.html @@ -37,9 +37,9 @@ {{ course.country }} {% if course.manager.user == user %} - {{ course.name }} + {{ course.name }} {% else %} - {{ course.name }} + {{ course.name }} {% endif %} @@ -65,7 +65,7 @@

    - Add Courses + Add Courses

    {% if announcements %}

    What's New?

    @@ -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 Google Earth + To create a course, you use Google Earth to mark the start and finish lines using polygons. The process is identical to creating custom courses for the CrewNerd diff --git a/rowers/templates/list_workouts.html b/rowers/templates/list_workouts.html index f93e2d9f..7699a488 100644 --- a/rowers/templates/list_workouts.html +++ b/rowers/templates/list_workouts.html @@ -93,11 +93,11 @@

    {% if rankingonly and not team %} - + Show All Workouts {% elif not team %} - + Show Only Ranking Pieces {% endif %} @@ -129,7 +129,7 @@ {% if workouts.has_next %} {% if request.GET.q %} - + {% else %} - + @@ -215,15 +215,15 @@ {{ workout.maxhr }} {% if team %} - + {{ workout.user.user.first_name }} {{ workout.user.user.last_name }} {% endif %} - Flex + Flex - Delete + Delete diff --git a/rowers/templates/menu_analytics.html b/rowers/templates/menu_analytics.html index 1d018b69..f1475a76 100644 --- a/rowers/templates/menu_analytics.html +++ b/rowers/templates/menu_analytics.html @@ -1,6 +1,6 @@ {% load staticfiles %} {% load rowerfilters %} -

    Analysis

    +

    Analysis

    • @@ -8,17 +8,17 @@  Fitness
      • - +  Ranking Pieces
      • - +  CP Chart OTE
      • - +  CP Chart OTW
      • @@ -36,29 +36,29 @@
      • - +  Cumulative Flex Chart
      • diff --git a/rowers/templates/menu_help.html b/rowers/templates/menu_help.html index 8e33ced9..197501df 100644 --- a/rowers/templates/menu_help.html +++ b/rowers/templates/menu_help.html @@ -1,7 +1,7 @@ -

        Help

        +

        Help

        • - +  Getting Started
        • @@ -11,7 +11,7 @@
        • - +  Contact
        • diff --git a/rowers/templates/menu_plan.html b/rowers/templates/menu_plan.html index 83b6b01c..c46e0c0f 100644 --- a/rowers/templates/menu_plan.html +++ b/rowers/templates/menu_plan.html @@ -1,6 +1,6 @@ {% load staticfiles %} {% load rowerfilters %} -

          Plan

          +

          Plan

          • diff --git a/rowers/templates/menu_profile.html b/rowers/templates/menu_profile.html index 90bd73b9..5da7d5fe 100644 --- a/rowers/templates/menu_profile.html +++ b/rowers/templates/menu_profile.html @@ -1,6 +1,6 @@ {% load staticfiles %} {% load rowerfilters %} -

            Profile

            +

            Profile

            • diff --git a/rowers/templates/menu_racing.html b/rowers/templates/menu_racing.html index c9c61cd8..c66bcd7f 100644 --- a/rowers/templates/menu_racing.html +++ b/rowers/templates/menu_racing.html @@ -1,34 +1,34 @@ -

              Racing

              +

              Racing

              • - +  Races
              • - +  New Race
              • - +  New Indoor Race
              • {% if race %} {% if results %}
              • - +  Compare Results
              • {% endif %} {% if reguest.user.is_anonymous %}
              • {% if race.sessiontype == 'race' %} - +  Register {% else %} - +  Register {% endif %}
              • @@ -37,51 +37,51 @@ {% if button == 'registerbutton' %}
              • {% if race.sessiontype == 'race' %} - +  Register {% else %} - +  Register {% endif %}
              • {% endif %} {% if button == 'submitbutton' %}
              • - +  Submit Workout
              • - +  Upload your race result
              • - +  Enter Result
              • {% endif %} {% if button == 'resubmitbutton' %}
              • - Submit New Result + Submit New Result
              • {% endif %} {% if button == 'withdrawbutton' %} - +  Withdraw {% endif %} {% if button == 'adddisciplinebutton' %} - +  Register New Boat {% endif %} {% if button == 'editbutton' %}
              • {% if race.sessiontype == 'race' %} -  Edit Race +  Edit Race {% else %} -  Edit Race +  Edit Race {% endif %}
              • @@ -89,7 +89,7 @@ {% endfor %} {% endif %}
              • - +  Courses
              • @@ -99,32 +99,32 @@
                • - +  View
                • - +  Map View
                • {% if course.manager == rower %}
                • - +  Download as KML
                • - +  Edit
                • {% if nosessions %}
                • - +  Delete
                • {% endif %}
                • - +  Update Markers
                • {% endif %} diff --git a/rowers/templates/menu_teams.html b/rowers/templates/menu_teams.html index dda6ce6d..84551097 100644 --- a/rowers/templates/menu_teams.html +++ b/rowers/templates/menu_teams.html @@ -1,16 +1,16 @@ {% load staticfiles %} {% load rowerfilters %} -

                  Teams

                  +

                  Teams

                  • - +  Overview
                  • {% if user|is_manager %}
                  • - +  New Team
                  • @@ -27,17 +27,17 @@
                    • - +  View
                    • - +  Edit
                    • - +  Member Stats
                    • @@ -47,12 +47,12 @@
                    • - +  Leave
                    • - +  Delete
                    • @@ -72,7 +72,7 @@
                      • - +  View
                      • @@ -82,7 +82,7 @@
                      • - +  Leave
                      • diff --git a/rowers/templates/menu_workout.html b/rowers/templates/menu_workout.html index 093b9b6d..01a372b7 100644 --- a/rowers/templates/menu_workout.html +++ b/rowers/templates/menu_workout.html @@ -7,53 +7,53 @@
                        • {% if user.is_authenticated and workout|may_edit:request %} - +  View {% else %} - +  View {% endif %}
                        • {% if user.is_authenticated and workout|may_edit:request %}
                        • - +  Edit
                        • - +  Intervals
                        • {% endif %} {% if user.is_authenticated %}
                        • - +  Comments ({{ workout|aantalcomments }})
                        • {% endif %}
                        • - +  Statistics
                        • - +  Compare
                        • {% if user.is_authenticated and workout|may_edit:request %}
                        • - +  Upload Image
                        • - +  Delete
                        • @@ -65,23 +65,23 @@
                          • - +  Flex Chart
                          • {% if workout|water %}
                          • - +  Map
                          • - +  Force Curve
                          • - +  Corrected Pace Plot
                          • @@ -94,28 +94,28 @@
                            • - +  Time
                            • - +  Distance
                            • - +  Power (Pie)
                            • - +  Heart Rate (Pie)
                            • {% if workout|water %}
                            • - +  OTW Power
                            • @@ -136,7 +136,7 @@ Connect to Concept2 {% else %} - + Concept2 {% endif %} @@ -151,7 +151,7 @@ Connect to Strava {% else %} - + Strava {% endif %} @@ -166,7 +166,7 @@ Connect to SportTracks {% else %} - + SportTracks {% endif %} @@ -181,7 +181,7 @@ Connect to Runkeeper {% else %} - + Runkeeper {% endif %} @@ -196,7 +196,7 @@ Connect to MapMyFitness {% else %} - + MapMyFitness {% endif %} @@ -211,23 +211,23 @@ Connect to TrainingPeaks {% else %} - + TrainingPeaks {% endif %}
                            • - + CSV
                            • - + GPX
                            • - + TCX
                            • @@ -238,12 +238,12 @@ @@ -269,28 +269,28 @@
                                {% if workout|water %}
                              • - +  Wind
                              • - +  Stream
                              • - +  OTW Power
                              • {% endif %}
                              • - +  In-Stroke Metrics
                              • - +  Update Summary
                              • diff --git a/rowers/templates/menu_workouts.html b/rowers/templates/menu_workouts.html index 1721f0bd..f7e2cd66 100644 --- a/rowers/templates/menu_workouts.html +++ b/rowers/templates/menu_workouts.html @@ -1,12 +1,12 @@ {% load staticfiles %} {% load rowerfilters %} -

                                Workouts

                                +

                                Workouts

                                diff --git a/rowers/templates/oterankings.html b/rowers/templates/oterankings.html index 68f3e313..628bb9b1 100644 --- a/rowers/templates/oterankings.html +++ b/rowers/templates/oterankings.html @@ -97,7 +97,7 @@ {{ workout.averagehr }} {{ workout.maxhr }} - {{ workout.name }} + {{ workout.name }} diff --git a/rowers/templates/otwrankings.html b/rowers/templates/otwrankings.html index 5ca5321e..e51aad90 100644 --- a/rowers/templates/otwrankings.html +++ b/rowers/templates/otwrankings.html @@ -96,7 +96,7 @@ {{ workout.averagehr }} {{ workout.maxhr }} - {{ workout.name }} + {{ workout.name }} diff --git a/rowers/templates/paidplans.html b/rowers/templates/paidplans.html index 331792e9..3ad4c821 100644 --- a/rowers/templates/paidplans.html +++ b/rowers/templates/paidplans.html @@ -180,11 +180,11 @@ {% if user.is_anonymous %} {% elif rower and rower.rowerplan == 'basic' and rower.protrialexpires|date_dif == 1 %} {% else %}   @@ -193,11 +193,11 @@ {% if user.is_anonymous %} {% elif rower and rower.rowerplan == 'basic' and rower.plantrialexpires|date_dif == 1 %} {% else %}   @@ -217,16 +217,16 @@ {% if user.is_anonymous %} {% elif rower and rower.rowerplan == 'basic' %} @@ -235,9 +235,9 @@ @@ -247,9 +247,9 @@ @@ -259,9 +259,9 @@ diff --git a/rowers/templates/plannedsessioncreate.html b/rowers/templates/plannedsessioncreate.html index 1e7b0900..93f6ba61 100644 --- a/rowers/templates/plannedsessioncreate.html +++ b/rowers/templates/plannedsessioncreate.html @@ -62,10 +62,10 @@ {% if ps.name != '' %} {{ ps.name }} + href="/rowers/sessions/{{ ps.id }}/">{{ ps.name }} {% else %} Unnamed Session + href="/rowers/sessions/{{ ps.id }}/">Unnamed Session {% endif %} {{ ps.sessionvalue }} @@ -78,7 +78,7 @@ - Delete + Delete {% endfor %} diff --git a/rowers/templates/plannedsessionteamcreate.html b/rowers/templates/plannedsessionteamcreate.html index 0a437804..534e2602 100644 --- a/rowers/templates/plannedsessionteamcreate.html +++ b/rowers/templates/plannedsessionteamcreate.html @@ -65,23 +65,23 @@ {% if ps.name != '' %} {{ ps.name }} + href="/rowers/sessions/{{ ps.id }}/">{{ ps.name }} {% else %} Unnamed Session + href="/rowers/sessions/{{ ps.id }}/">Unnamed Session {% endif %} {{ ps.sessionvalue }} {{ ps.sessionunit }} - Edit + Edit - Clone + Clone - Delete + Delete {% endfor %} diff --git a/rowers/templates/promembership.html b/rowers/templates/promembership.html index 391d9f51..9d87da11 100644 --- a/rowers/templates/promembership.html +++ b/rowers/templates/promembership.html @@ -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.

                                -

                                Yes, I want to try Pro membership for 14 days for free. No strings attached.

                                -

                                Yes, I want to try Self-Coach membership for 14 days for free. No strings attached.

                                +

                                Yes, I want to try Pro membership for 14 days for free. No strings attached.

                                +

                                Yes, I want to try Self-Coach membership for 14 days for free. No strings attached.

                                {% endif %}
                              • -

                                Click on the PayPal button to pay for your Pro membership. Before you pay, please register for the free Basic membership and add your user name to the form. +

                                Click on the PayPal button to pay for your Pro membership. Before you pay, please register for the free Basic membership and add your user name to the form. Your payment will be valid for one year. You will be taken to the secure PayPal payment site.

                                diff --git a/rowers/templates/rankings.html b/rowers/templates/rankings.html index ee1bc30b..fbdf682b 100644 --- a/rowers/templates/rankings.html +++ b/rowers/templates/rankings.html @@ -73,7 +73,7 @@ {{ workout.averagehr }} {{ workout.maxhr }} - + {{ workout.name }} @@ -90,13 +90,13 @@

                                Missing your best pieces? Upload stroke data of any Concept2 ranking piece and they will be automatically added to this page.

                                Don't have stroke data for official Concept2 ranking pieces? - The PRO membership ranking piece functionality + The PRO membership ranking piece functionality allows you to include your best non ranking pieces and even use parts of workouts for improved calculation accuracy.

                                Want to add race results but you don't have stroke data? - Click here.

                                + Click here.

                                Scroll down for the chart and pace predictions for ranking pieces.

                                @@ -207,91 +207,91 @@ 100m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/100m/">100m 500m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/500m/">500m 1000m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1000m/">1000m 2000m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/2000m/">2000m 5000m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/5000m/">5000m 6000m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/6000m/">6000m 10000m + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/10000m/">10000m Half Marathon + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/21097m/">Half Marathon Full Marathon + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/42195m/">Full Marathon 1 minute + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/1min/">1 minute 4 minutes + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/4min/">4 minutes 30 minutes + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/30min/">30 minutes 1 hour + href="/rowers/agegrouprecords/{{ sex }}/{{ weightcategory }}/60min/">1 hour diff --git a/rowers/templates/registration/login.html b/rowers/templates/registration/login.html index eef08c5e..aa650e83 100644 --- a/rowers/templates/registration/login.html +++ b/rowers/templates/registration/login.html @@ -25,7 +25,7 @@ -

                                Register New User

                                +

                                Register New User

                                diff --git a/rowers/templates/registration_form.html b/rowers/templates/registration_form.html index e09e9365..6ddf9632 100644 --- a/rowers/templates/registration_form.html +++ b/rowers/templates/registration_form.html @@ -22,7 +22,7 @@ {{ form.as_table }}
                                - Terms of Service + Terms of Service diff --git a/rowers/templates/rower_form.html b/rowers/templates/rower_form.html index b58f18fb..df55dc5b 100644 --- a/rowers/templates/rower_form.html +++ b/rowers/templates/rower_form.html @@ -54,7 +54,7 @@ {% csrf_token %} {% if rower.clubsize < 100 and rower.user == user %}

                                - Upgrade + Upgrade

                                {% else %}

                                @@ -63,7 +63,7 @@ {% endif %} {% if rower.rowerplan != 'basic' and rower.user == user %}

                                - Cancel Subscription + Cancel Subscription

                                {% endif %} @@ -73,13 +73,13 @@
                              • GDPR - Data Protection

                                - Download your data + Download your data

                                - Deactivate Account + Deactivate Account

                                - Delete Account + Delete Account

                              • @@ -99,7 +99,7 @@ {{ grant.application }} {{ grant.scope }} - Revoke + Revoke {% endfor %} diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 32d7b067..b40482cd 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -8,11 +8,11 @@ {% block main %}

                                {% if workout|previousworkout:rower.user %} - Previous  {% endif %} {% if workout|nextworkout:rower.user %} - Next {% endif %}

                                @@ -30,7 +30,7 @@ Public link to this workout - https://rowsandall.com/rowers/workout/{{ workout.id }} + https://rowsandall.com/rowers/workout/{{ workout.id }} @@ -89,7 +89,7 @@ Reset to last saved   - Restore Original data + Restore Original data

                                diff --git a/rowers/templates/team.html b/rowers/templates/team.html index 35d82bc5..24085d5b 100644 --- a/rowers/templates/team.html +++ b/rowers/templates/team.html @@ -16,13 +16,13 @@

                                You have requested access to this team

                                {% elif team not in myteams and team not in memberteams %}

                                You can request access to this team. By requesting access, you - agree to the Privacy Policy regarding + agree to the Privacy Policy regarding team functionality. You agree to share your workout data (except workouts marked as "private") to all team members and the team manager. You also grant the team manager access to your heart rate and power zone settings, as well as your functional threshold information. You are granting the team manager permission to edit your workouts.

                                - Join + Join A request will be sent to the team manager {% endif %}
                              • @@ -38,9 +38,9 @@ {% for member in members %} - {{ member.user.first_name }} {{ member.user.last_name }} + {{ member.user.first_name }} {{ member.user.last_name }} {% if team.manager == user %} - Drop + Drop {% else %}   {% endif %} diff --git a/rowers/templates/teams.html b/rowers/templates/teams.html index e3094b70..7db3247f 100644 --- a/rowers/templates/teams.html +++ b/rowers/templates/teams.html @@ -21,7 +21,7 @@ {{ team.name }} - Leave + Leave {% endfor %} @@ -76,14 +76,14 @@ {{ team.name }} - Delete + Delete {% endfor %} {% endif %} - New Team + New Team {% endif %} {% if invites or requests or myrequests or myinvites %} @@ -92,11 +92,11 @@

                                This section lists open invites to join a team. By accepting a team invite, you are agreeing with the sharing of personal data between team members and coaches according to - our privacy policy. + our privacy policy.

                                As a team manager, by accepting a team invite, you are agreeing - with our privacy policy regarding teams and + with our privacy policy regarding teams and personal data owned by team members.

                                @@ -112,39 +112,39 @@ {% for i in invites %} - + - {% endfor %} {% for i in requests %} - + - {% endfor %} {% for i in myrequests %} - + - {% endfor %} {% for i in myinvites %} - + {% if i.user %} @@ -153,7 +153,7 @@ {% endif %} {% endfor %} diff --git a/rowers/templates/windedit.html b/rowers/templates/windedit.html index 933f5705..e509ff2e 100644 --- a/rowers/templates/windedit.html +++ b/rowers/templates/windedit.html @@ -41,9 +41,9 @@
                              • Closest Airport Weather: {{ airport }} ({{ airportdistance | floatformat:-1 }} km) - Airport Data

                                + Airport Data

                                - Dark Sky Data + Dark Sky Data

                                Download wind speed and bearing from The Dark Sky

                                diff --git a/rowers/templates/workflowconfig.html b/rowers/templates/workflowconfig.html index d5795eb4..d4dc7988 100644 --- a/rowers/templates/workflowconfig.html +++ b/rowers/templates/workflowconfig.html @@ -12,7 +12,7 @@ {% if workoutid %} {% endif %} diff --git a/rowers/templates/workflowconfig2.html b/rowers/templates/workflowconfig2.html index 5d8e2bf3..9dff8e1a 100644 --- a/rowers/templates/workflowconfig2.html +++ b/rowers/templates/workflowconfig2.html @@ -13,7 +13,7 @@ {% if workoutid %}
                              • - Return to Workout + Return to Workout

                              • {% endif %} @@ -35,10 +35,10 @@
                              • {% if rower.defaultlandingpage == 'workout_edit_view' %}

                                Default landing page is Edit View. Set default landing page to

                                - Workflow View + Workflow View {% else %}

                                Default landing page is Workflow View. Set default landing page to

                                - Edit View + Edit View {% endif %}
                              • diff --git a/rowers/templates/workout_comments.html b/rowers/templates/workout_comments.html index 10c88061..1eae9f00 100644 --- a/rowers/templates/workout_comments.html +++ b/rowers/templates/workout_comments.html @@ -12,11 +12,11 @@ {% block main %}

                                {% if workout|previousworkout:rower.user %} - Previous  {% endif %} {% if workout|nextworkout:rower.user %} - Next {% endif %}

                                @@ -38,7 +38,7 @@
                                {{ i.team.name }}{{ i.team.name }} {{ i.team.manager.first_name }} {{ i.team.manager.last_name }} {{ user.first_name }} {{ user.last_name }}Accept + Accept - Reject + Reject
                                {{ i.team.name }}{{ i.team.name }} {{ i.team.manager.first_name }} {{ i.team.manager.last_name }} {{ user.first_name }} {{ user.last_name }} Revoke + Revoke
                                {{ i.team.name }}{{ i.team.name }} {{ i.team.manager.first_name }} {{ i.team.manager.last_name }} {{ i.user.first_name }} {{ i.user.last_name }}Accept + Accept - Reject + Reject
                                {{ i.team.name }}{{ i.team.name }} {{ i.team.manager.first_name }} {{ i.team.manager.last_name }}{{ i.user.first_name }} {{ i.user.last_name }}  - Revoke + Revoke
                                Public link to this workout - https://rowsandall.com/rowers/workout/{{ workout.id }} + https://rowsandall.com/rowers/workout/{{ workout.id }}/
                                diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index 59136d08..155759f0 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -43,11 +43,11 @@ $('#id_workouttype').change();

                                {% if workout|previousworkout:rower.user %} - Previous  {% endif %} {% if workout|nextworkout:rower.user %} - Next {% endif %}

                                @@ -57,7 +57,7 @@ $('#id_workouttype').change();
                              • @@ -86,7 +86,7 @@ $('#id_workouttype').change(); Public link to this workout: - https://rowsandall.com/rowers/workout/{{ workout.id }} + https://rowsandall.com/rowers/workout/{{ workout.id }}/ @@ -123,7 +123,7 @@ $('#id_workouttype').change();

                                Racing

                                {% for race in indoorraces %}

                                - Submit this to Indoor Race {{ race.name }} + Submit this to Indoor Race {{ race.name }}

                                {% endfor %}
                              • diff --git a/rowers/templates/workout_view.html b/rowers/templates/workout_view.html index 2bf749df..0252f485 100644 --- a/rowers/templates/workout_view.html +++ b/rowers/templates/workout_view.html @@ -42,7 +42,7 @@ {% for record in records %}

                                This workout was a race. See race result here: - {{ record.race.name }} + {{ record.race.name }}

                                {% endfor %} {% endif %} @@ -50,7 +50,7 @@ {% for record in recordsindoor %}

                                This workout was a race. See race result here: - {{ record.race.name }} + {{ record.race.name }}

                                {% endfor %} {% endif %} @@ -94,7 +94,7 @@ Comments - Comment ({{ aantalcomments }}) + Comment ({{ aantalcomments }}) {% endif %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 207363ce..fc70957e 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -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+') diff --git a/rowers/tests/test_urls.py b/rowers/tests/test_urls.py index 6d568e3f..d589c0e1 100644 --- a/rowers/tests/test_urls.py +++ b/rowers/tests/test_urls.py @@ -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) diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index 6e920ea03370e26b4dfc373a17311ef732a8dc63..557cb81602d35a46b6a34f1f0537286b3b59657e 100644 GIT binary patch literal 11457 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 bE%OG|dV_eM5SB%T-Ol@e0koFQfOh}@E-x1e literal 11511 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 diff --git a/rowers/tests/testdata/testdata.gpx b/rowers/tests/testdata/testdata.gpx new file mode 100644 index 00000000..462f2508 --- /dev/null +++ b/rowers/tests/testdata/testdata.gpx @@ -0,0 +1,574 @@ +Garmin InternationalExport by rowingdata + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rowers/tests/testdata/testdata.tcx b/rowers/tests/testdata/testdata.tcx new file mode 100644 index 00000000..4b1b7907 --- /dev/null +++ b/rowers/tests/testdata/testdata.tcx @@ -0,0 +1,2523 @@ + + + + + 2016-05-20T13:41:26.962390+00:00 + + 537 + 2000 + 1 + + 148 + + + 156 + + Active + 21 + Manual + + + + 5.4 + + 127 + + 0 + + + 19 + + + + + + 13.1 + + 127 + + 19 + + + 26 + + + + + + 21.0 + + 128 + + 20 + + + 45 + + + + + + 30.3 + + 129 + + 20 + + + 64 + + + + + + 39.0 + + 130 + + 20 + + + 74 + + + + + + 48.2 + + 131 + + 21 + + + 80 + + + + + + 57.6 + + 131 + + 20 + + + 83 + + + + + + 66.4 + + 132 + + 20 + + + 87 + + + + + + 75.5 + + 132 + + 21 + + + 86 + + + + + + 85.1 + + 132 + + 20 + + + 88 + + + + + + 95.0 + + 132 + + 21 + + + 100 + + + + + + 105.0 + + 133 + + 22 + + + 127 + + + + + + 115.3 + + 134 + + 21 + + + 135 + + + + + + 125.8 + + 135 + + 21 + + + 139 + + + + + + 136.6 + + 136 + + 21 + + + 146 + + + + + + 147.2 + + 137 + + 22 + + + 150 + + + + + + 157.6 + + 139 + + 22 + + + 152 + + + + + + 167.8 + + 140 + + 21 + + + 146 + + + + + + 178.5 + + 140 + + 22 + + + 150 + + + + + + 188.5 + + 141 + + 21 + + + 155 + + + + + + 199.3 + + 141 + + 21 + + + 148 + + + + + + 209.4 + + 142 + + 22 + + + 151 + + + + + + 219.4 + + 142 + + 22 + + + 151 + + + + + + 230.2 + + 143 + + 22 + + + 148 + + + + + + 240.2 + + 144 + + 22 + + + 147 + + + + + + 250.1 + + 145 + + 23 + + + 150 + + + + + + 259.6 + + 145 + + 23 + + + 152 + + + + + + 270.3 + + 145 + + 23 + + + 152 + + + + + + 280.6 + + 145 + + 22 + + + 149 + + + + + + 290.7 + + 144 + + 22 + + + 150 + + + + + + 300.8 + + 145 + + 23 + + + 149 + + + + + + 311.1 + + 145 + + 22 + + + 152 + + + + + + 321.2 + + 145 + + 22 + + + 157 + + + + + + 331.9 + + 145 + + 21 + + + 150 + + + + + + 342.0 + + 146 + + 22 + + + 151 + + + + + + 352.4 + + 146 + + 22 + + + 151 + + + + + + 363.0 + + 146 + + 22 + + + 153 + + + + + + 373.4 + + 147 + + 22 + + + 152 + + + + + + 383.9 + + 147 + + 22 + + + 153 + + + + + + 394.6 + + 147 + + 22 + + + 152 + + + + + + 405.0 + + 147 + + 21 + + + 149 + + + + + + 415.3 + + 148 + + 22 + + + 152 + + + + + + 426.0 + + 148 + + 22 + + + 151 + + + + + + 436.5 + + 148 + + 21 + + + 149 + + + + + + 446.9 + + 148 + + 22 + + + 149 + + + + + + 456.9 + + 149 + + 22 + + + 156 + + + + + + 467.6 + + 149 + + 22 + + + 155 + + + + + + 478.5 + + 150 + + 22 + + + 156 + + + + + + 489.0 + + 150 + + 21 + + + 154 + + + + + + 499.1 + + 150 + + 21 + + + 148 + + + + + + 510.0 + + 150 + + 22 + + + 151 + + + + + + 519.9 + + 149 + + 22 + + + 153 + + + + + + 530.6 + + 149 + + 22 + + + 151 + + + + + + 540.8 + + 149 + + 22 + + + 148 + + + + + + 550.8 + + 148 + + 22 + + + 149 + + + + + + 560.8 + + 148 + + 22 + + + 144 + + + + + + 571.0 + + 147 + + 22 + + + 149 + + + + + + 580.7 + + 147 + + 22 + + + 150 + + + + + + 591.2 + + 147 + + 22 + + + 151 + + + + + + 601.4 + + 147 + + 22 + + + 150 + + + + + + 611.4 + + 147 + + 23 + + + 153 + + + + + + 621.8 + + 147 + + 23 + + + 151 + + + + + + 632.1 + + 147 + + 22 + + + 155 + + + + + + 642.3 + + 147 + + 22 + + + 154 + + + + + + 652.0 + + 148 + + 23 + + + 157 + + + + + + 662.7 + + 148 + + 23 + + + 162 + + + + + + 673.1 + + 148 + + 23 + + + 163 + + + + + + 683.6 + + 149 + + 22 + + + 163 + + + + + + 693.8 + + 149 + + 22 + + + 162 + + + + + + 703.8 + + 149 + + 22 + + + 164 + + + + + + 714.7 + + 150 + + 23 + + + 162 + + + + + + 724.9 + + 150 + + 22 + + + 162 + + + + + + 735.2 + + 151 + + 23 + + + 159 + + + + + + 745.4 + + 151 + + 22 + + + 158 + + + + + + 756.0 + + 151 + + 23 + + + 164 + + + + + + 766.3 + + 150 + + 22 + + + 163 + + + + + + 776.5 + + 150 + + 22 + + + 161 + + + + + + 786.9 + + 150 + + 23 + + + 163 + + + + + + 797.2 + + 150 + + 22 + + + 165 + + + + + + 807.8 + + 150 + + 23 + + + 166 + + + + + + 818.2 + + 150 + + 23 + + + 166 + + + + + + 828.4 + + 150 + + 22 + + + 168 + + + + + + 839.2 + + 150 + + 23 + + + 169 + + + + + + 849.6 + + 151 + + 23 + + + 166 + + + + + + 860.1 + + 151 + + 22 + + + 172 + + + + + + 870.3 + + 152 + + 22 + + + 172 + + + + + + 881.1 + + 152 + + 22 + + + 169 + + + + + + 891.7 + + 152 + + 23 + + + 167 + + + + + + 902.1 + + 152 + + 22 + + + 164 + + + + + + 913.1 + + 152 + + 22 + + + 161 + + + + + + 923.9 + + 153 + + 22 + + + 158 + + + + + + 934.6 + + 154 + + 21 + + + 158 + + + + + + 945.4 + + 154 + + 21 + + + 154 + + + + + + 956.0 + + 155 + + 21 + + + 155 + + + + + + 966.7 + + 155 + + 21 + + + 152 + + + + + + 977.4 + + 156 + + 21 + + + 150 + + + + + + 988.1 + + 156 + + 21 + + + 157 + + + + + + 998.8 + + 156 + + 21 + + + 155 + + + + + + 1009.6 + + 156 + + 21 + + + 151 + + + + + + 1020.6 + + 156 + + 21 + + + 147 + + + + + + 1031.5 + + 156 + + 20 + + + 145 + + + + + + 1042.5 + + 156 + + 21 + + + 144 + + + + + + 1053.3 + + 155 + + 20 + + + 145 + + + + + + 1064.1 + + 155 + + 21 + + + 147 + + + + + + 1075.3 + + 155 + + 20 + + + 142 + + + + + + 1086.1 + + 155 + + 20 + + + 136 + + + + + + 1097.5 + + 155 + + 21 + + + 141 + + + + + + 1108.5 + + 155 + + 20 + + + 146 + + + + + + 1119.2 + + 155 + + 20 + + + 143 + + + + + + 1130.6 + + 155 + + 20 + + + 143 + + + + + + 1141.3 + + 155 + + 20 + + + 143 + + + + + + 1152.4 + + 155 + + 21 + + + 142 + + + + + + 1163.3 + + 155 + + 20 + + + 138 + + + + + + 1173.8 + + 154 + + 20 + + + 141 + + + + + + 1184.8 + + 154 + + 21 + + + 146 + + + + + + 1195.8 + + 153 + + 21 + + + 146 + + + + + + 1206.6 + + 152 + + 21 + + + 141 + + + + + + 1217.3 + + 153 + + 21 + + + 141 + + + + + + 1227.8 + + 152 + + 21 + + + 140 + + + + + + 1238.7 + + 152 + + 21 + + + 143 + + + + + + 1249.5 + + 151 + + 21 + + + 149 + + + + + + 1260.1 + + 151 + + 20 + + + 141 + + + + + + 1270.9 + + 151 + + 21 + + + 141 + + + + + + 1281.8 + + 150 + + 21 + + + 145 + + + + + + 1292.7 + + 151 + + 20 + + + 142 + + + + + + 1303.4 + + 151 + + 20 + + + 141 + + + + + + 1314.3 + + 151 + + 21 + + + 141 + + + + + + 1325.2 + + 151 + + 21 + + + 146 + + + + + + 1336.1 + + 152 + + 20 + + + 143 + + + + + + 1346.9 + + 152 + + 21 + + + 144 + + + + + + 1357.4 + + 152 + + 20 + + + 141 + + + + + + 1368.1 + + 152 + + 21 + + + 138 + + + + + + 1379.0 + + 152 + + 20 + + + 142 + + + + + + 1389.5 + + 153 + + 21 + + + 145 + + + + + + 1399.9 + + 152 + + 21 + + + 138 + + + + + + 1410.7 + + 152 + + 20 + + + 139 + + + + + + 1422.0 + + 152 + + 20 + + + 139 + + + + + + 1432.8 + + 151 + + 20 + + + 141 + + + + + + 1443.6 + + 151 + + 21 + + + 146 + + + + + + 1454.4 + + 152 + + 20 + + + 143 + + + + + + 1465.1 + + 151 + + 21 + + + 143 + + + + + + 1475.9 + + 152 + + 21 + + + 145 + + + + + + 1486.6 + + 152 + + 21 + + + 148 + + + + + + 1497.4 + + 153 + + 21 + + + 143 + + + + + + 1508.2 + + 153 + + 20 + + + 140 + + + + + + 1519.2 + + 154 + + 20 + + + 144 + + + + + + 1530.0 + + 154 + + 21 + + + 143 + + + + + + 1540.9 + + 153 + + 20 + + + 141 + + + + + + 1551.3 + + 153 + + 21 + + + 143 + + + + + + 1562.6 + + 153 + + 21 + + + 146 + + + + + + 1573.3 + + 153 + + 20 + + + 141 + + + + + + 1584.2 + + 152 + + 20 + + + 139 + + + + + + 1594.6 + + 152 + + 21 + + + 145 + + + + + + 1606.0 + + 152 + + 21 + + + 143 + + + + + + 1616.2 + + 152 + + 20 + + + 138 + + + + + + 1627.4 + + 152 + + 21 + + + 140 + + + + + + 1638.0 + + 152 + + 21 + + + 144 + + + + + + 1649.2 + + 151 + + 20 + + + 143 + + + + + + 1660.2 + + 152 + + 20 + + + 143 + + + + + + 1670.8 + + 151 + + 20 + + + 142 + + + + + + 1681.4 + + 151 + + 21 + + + 140 + + + + + + 1692.1 + + 151 + + 21 + + + 140 + + + + + + 1702.5 + + 150 + + 21 + + + 141 + + + + + + 1713.7 + + 150 + + 21 + + + 144 + + + + + + 1724.4 + + 150 + + 21 + + + 146 + + + + + + 1735.1 + + 150 + + 20 + + + 141 + + + + + + 1745.6 + + 150 + + 21 + + + 140 + + + + + + 1756.3 + + 150 + + 21 + + + 141 + + + + + + 1766.2 + + 151 + + 20 + + + 142 + + + + + + 1777.1 + + 150 + + 22 + + + 138 + + + + + + 1787.5 + + 150 + + 21 + + + 138 + + + + + + 1797.7 + + 150 + + 22 + + + 140 + + + + + + 1808.4 + + 150 + + 21 + + + 140 + + + + + + 1818.4 + + 149 + + 21 + + + 138 + + + + + + 1828.9 + + 149 + + 22 + + + 146 + + + + + + 1839.9 + + 149 + + 21 + + + 142 + + + + + + 1850.5 + + 148 + + 21 + + + 142 + + + + + + 1861.2 + + 148 + + 21 + + + 145 + + + + + + 1871.9 + + 147 + + 21 + + + 143 + + + + + + 1882.6 + + 147 + + 20 + + + 139 + + + + + + 1893.3 + + 148 + + 20 + + + 140 + + + + + + 1904.3 + + 149 + + 21 + + + 144 + + + + + + 1915.4 + + 149 + + 20 + + + 148 + + + + + + 1926.2 + + 150 + + 20 + + + 139 + + + + + + 1937.3 + + 151 + + 20 + + + 140 + + + + + + 1947.8 + + 152 + + 20 + + + 144 + + + + + + 1959.1 + + 152 + + 20 + + + 142 + + + + + + 1969.8 + + 153 + + 20 + + + 140 + + + + + + 1980.6 + + 153 + + 21 + + + 143 + + + + + + 1991.4 + + 153 + + 21 + + + 143 + + + + + + 2000.0 + + 154 + + 21 + + + 147 + + + + + + <Element 'Notes' at 0x1499d4e0> + + + + rowsandall.com/rowingdata + + + rowingdata + + + 0 + 75 + + Release + + EN + 000-00000-00 + + diff --git a/rowers/urls.py b/rowers/urls.py index 6a43039e..7328859b 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -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'), diff --git a/rowers/views.py b/rowers/views.py index e5b7efe9..ad59b882 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -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' }, { diff --git a/templates/newbase.html b/templates/newbase.html index 462a2e02..74608dff 100644 --- a/templates/newbase.html +++ b/templates/newbase.html @@ -149,13 +149,13 @@ diff --git a/templates/newbasefront.html b/templates/newbasefront.html index 55303389..b09db75d 100644 --- a/templates/newbasefront.html +++ b/templates/newbasefront.html @@ -159,13 +159,13 @@