diff --git a/rowers/templates/about_us.html b/rowers/templates/about_us.html index b2b2d03c..1d64d9b4 100644 --- a/rowers/templates/about_us.html +++ b/rowers/templates/about_us.html @@ -1,10 +1,9 @@ - {% extends "base.html" %} - {% block title %}Rowsandall - About us{% endblock title %} - {% block content %} +{% extends "newbase.html" %} +{% block title %}Rowsandall - About us{% endblock title %} +{% block main %} {% load rowerfilters %} -

Welcome to Rowsandall.com

Rowsandall.com is an online tool for indoor and On The Water (OTW) rowers. It accepts workout data from a number of devices and applications. It @@ -78,19 +77,13 @@ here. -

- - -
-

Credits

The project is based on python plotting code by Greg Smith (https://quantifiedrowing.wordpress.com/) and inspired by the RowPro Dan Burpee spreadsheet (http://www.sub7irc.com/RP_Split_Template.zip).

-
-
+

Advanced Analysis, Coaching and Planning (Premium Features)

@@ -119,12 +112,9 @@ and inspired by the RowPro Dan Burpee spreadsheet -
-
-
- {% if user.rower.rowerplan == 'basic' and user.rower.protrialexpires|date_dif == 1 %} -

Free Trial

+{% if user.rower.rowerplan == 'basic' and user.rower.protrialexpires|date_dif == 1 %} +

Free Trial

You qualify for a 14 day free trial. No credit card needed. Try out Pro membership for two weeks. Click the button below to @@ -188,5 +178,10 @@ and inspired by the RowPro Dan Burpee spreadsheet

If, for any reason, you are not happy with your Pro membership, please let me know through the contact form. I will contact you as soon as possible to discuss how we can make things better.

-
- {% endblock content %} + +{% endblock main %} + +{% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} + diff --git a/rowers/templates/brochure.html b/rowers/templates/brochure.html index 6beddbad..b1b1f166 100644 --- a/rowers/templates/brochure.html +++ b/rowers/templates/brochure.html @@ -1,5 +1,5 @@ - {% extends "base.html" %} +{% extends "newbase.html" %} {% block title %}Rowsandall Brochure{% endblock title %} {% block meta %} {% endblock meta %} - {% block content %} +{% block main %} -
-

Read our Brochure

+

Read our Brochure

-
- - object can't be rendered - -
- +
+ + object can't be rendered +
+ +{% endblock %} - {% endblock content %} +{% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} diff --git a/rowers/templates/developers.html b/rowers/templates/developers.html index 8ee6a523..889080ae 100644 --- a/rowers/templates/developers.html +++ b/rowers/templates/developers.html @@ -1,126 +1,123 @@ -{% extends "base.html" %} -{% block title %}About us{% endblock title %} -{% block content %} +{% extends "newbase.html" %} +{% block title %}Rowsandall Developers Info{% endblock title %} +{% block main %} -
-

Resources for developers

+

Resources for developers

-

On this page, a work in progress, I will collect useful information - for developers of rowing data apps and hardware.

- -

I presume you have an app (smartphone app, dedicated hardware, web site) - where your users (customers) generate, collect or store their rowing - related workout data. You can now offer your users easy ways to get - their data on this site.

- -

There are three ways to allow your users to get data to Rowsandall.com.

+
- - - -
-
+ +
  • Quick Links

    -
    Accepted file formats
    +

    Accepted file formats

    All files adhering to the standards TCX and FIT formats will be parsed.

    However, some rowing related parameters are not supported by TCX and FIT. Therefore, we are supporting the CSV format that is documented in the following link.

    - +

    Using this standard will guarantee that your user's data are accepted without complaints.

    -
    API related documentation
    +

    API related documentation

    -
    Registering an app
    +

    Registering an app

    We have disabled the self service app link for security reasons. We will replace it with a secure self service app link soon. If you need to register an app, please send email to info@rowsandall.com

    -
    Authentication
    +

    Authentication

    Standard Oauth2 authentication. Get authorization code by pointing your user to the authorization URL. @@ -128,19 +125,19 @@ expires, use the refresh token to refresh it.

    -

    The redirect URI for user authentication has to be https. +

    The redirect URI for user authentication has to be https. Developers of iOS or Android apps should contact me directly if this doesn't work for them. I can add exceptions.

    -
      +
      • Authorization URL: https://{{ request.get_host }}/rowers/o/authorize
      • Access Token request: https://{{ request.get_host }}/rowers/o/token/
      • Access Token refresh: https://{{ request.get_host }}/rowers/o/token/
      • Handy utility for testing: http://django-oauth-toolkit.herokuapp.com/consumer/
      -
      API documentation
      +

      API documentation

      Once you have a registered app, you have gone through the authorization and have successfully obtained an access token, you can use it to place @@ -149,7 +146,7 @@

      The workout summary data and the stroke data are obtained and sent separately.

      -
        +
        • API documentation (But refer to the below for stroke data.)
        • Try out the workout summary API
        • @@ -162,7 +159,7 @@ future to enable updating stroke data. Stroke data for workout {id} are posted to:

          -
            +
            • https://{{ request.get_host }}/rowers/api/workouts/{id}/strokedata
            @@ -180,14 +177,14 @@

            Mandatory data fields are:

            -
              +
              • time: Time (milliseconds since workout start)
              • distance: Distance (meters)
              • pace: Pace (milliseconds per 500m)
              • spm Stroke rate (strokes per minute)

              Optional data fiels are:

              -
                +
                • power: Power (Watt)
                • drivelength: Drive length (meters)
                • dragfactor: Drag factor
                • @@ -201,7 +198,7 @@
                • catch: Catch angle per Empower oarlock (degrees)
                • finish: Finish angle per Empower oarlock (degrees)
                • peakforceangle: Peak Force Angle per Empower oarlock (degrees)
                • -
                • slip: Wash as defined per Empower oarlock (degrees)
                • +
                • slip: Slip as defined per Empower oarlock (degrees)
                @@ -211,7 +208,12 @@ must have the same number of records. If an optional data field fails a test, its values are silently replaced by zeros.

                -
  • -
    + + + +{% endblock %} + +{% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} - {% endblock content %} diff --git a/rowers/templates/email.html b/rowers/templates/email.html index 562f8615..ad105bc0 100644 --- a/rowers/templates/email.html +++ b/rowers/templates/email.html @@ -1,104 +1,117 @@ - {% extends "base.html" %} - {% block title %}Contact Us{% endblock title %} - {% block content %} -
    -

    Contact us through email

    +{% extends "newbase.html" %} +{% block title %}Contact Us{% endblock title %} +{% block main %} +

    Contact us through email

    + +{% endblock %} + +{% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} -
    -

    Bug reporting, feature requests

    - -

    -Bug reports and feature requests can be done through our BitBucket page. Please check on the following link if your bug or issue is a known one. Feel free to file any feature request. -

    -

    - -

    Facebook Group

    - -

    We run a facebook group where you can post questions and report problems, - especially if you think the wider user community benefits from the answers.

    - - -

    Twitter

    - -

    You can also check me on Twitter: -

    -When the site is down, this is the appropriate channel to look for apologies, updates, and offer help. -

    - -

    Rowsandall s.r.o.

    - -

    Rowsandall s.r.o.
    - Nové sady 988/2
    - 602 00 Brno
    - Czech Republic
    - IČ: 070 48 572
    - DIČ: CZ 070 48 572 (Nejsme plátce DPH)
    - Datová schránka: 7897syr
    - Email: info@rowsandall.com
    - The company is registered in the business register at the - Regional Court in Brno (Společnost je zapsána v obchodním rejstříku vedeném u Krajského soudu v Brně, oddíl C, vložka 105845)
    -

    - -
    - {% endblock content %} diff --git a/rowers/templates/favoritecharts.html b/rowers/templates/favoritecharts.html index b9ffd6eb..63fc02e5 100644 --- a/rowers/templates/favoritecharts.html +++ b/rowers/templates/favoritecharts.html @@ -3,7 +3,7 @@ {% block title %}Change Favorite Charts{% endblock %} {% block main %} -

    Change Your Favorite Charts

    +

    Change Favorite Charts of {{ rower.user.first_name }} {{ rower.user.last_name }}

      diff --git a/rowers/templates/menu_profile.html b/rowers/templates/menu_profile.html index 7afa79d9..88c78261 100644 --- a/rowers/templates/menu_profile.html +++ b/rowers/templates/menu_profile.html @@ -8,22 +8,22 @@
    • - +  Import/Export
    • - +  Account
    • - +  Favorite Charts
    • - +  Manage Workflow
    • diff --git a/rowers/templates/thankyou.html b/rowers/templates/thankyou.html index 25823e25..5d2e57e6 100644 --- a/rowers/templates/thankyou.html +++ b/rowers/templates/thankyou.html @@ -1,8 +1,12 @@ - {% extends "base.html" %} + {% extends "newbase.html" %} {% block title %}Contact Us - Thank You{% endblock title %} - {% block content %} + {% block main %}

      Thank you.

      Your email was sent and I will get back to you as soon as I can.

      Return home

      - {% endblock content %} \ No newline at end of file + {% endblock %} + + {% block sidebar %} +{% include 'menu_help.html' %} +{% endblock %} diff --git a/rowers/templates/workflowconfig2.html b/rowers/templates/workflowconfig2.html index abdfe052..5d8e2bf3 100644 --- a/rowers/templates/workflowconfig2.html +++ b/rowers/templates/workflowconfig2.html @@ -1,66 +1,52 @@ -{% extends "base.html" %} +{% extends "newbase.html" %} -{% block title %}Change Rower Export Settings{% endblock %} +{% block title %}Change Rower Workflow Page Settings{% endblock %} -{% block content %} +{% block main %} +

      Change Workflow Page Layout for {{ rower.user.first_name }} {{ rower.user.last_name }}

      -
      +
        {% if workoutid %} - + {% endif %} -
        -

        Workflow Page Configuration

        +
      • On this page, you can configure the content of your "Workflow" page for each workout. If you want to remove an element, change it to "None". You can add one new element at a time.

        -
        -

        Left Panel

        - - {{ leftpanel_formset.management_form }} - - {{ leftpanel_formset.as_table }} -
        - {% csrf_token %} - +
      • +
      • + + {{ middlepanel_formset.management_form }} + + {{ middlepanel_formset.as_table }} +
        + {% csrf_token %} +
      • -
        - -
        -

        Middle Panel

        -
        - {{ middlepanel_formset.management_form }} - - {{ middlepanel_formset.as_table }} -
        - {% csrf_token %} - -
        -
        - -
        -
        - {% if rower.defaultlandingpage == 'workout_edit_view' %} -

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

        - Workflow View - {% else %} -

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

        - Edit View - {% endif %} -
        -
        - -
      -
    - - + +
  • + {% if rower.defaultlandingpage == 'workout_edit_view' %} +

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

    + Workflow View + {% else %} +

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

    + Edit View + {% endif %} +
  • + {% endblock %} + + +{% block sidebar %} +{% include 'menu_profile.html' %} +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index c15018fb..81548234 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -377,8 +377,10 @@ urlpatterns = [ url(r'^me/tprefresh/$',views.rower_tp_token_refresh), url(r'^me/c2refresh/$',views.rower_c2_token_refresh), url(r'^me/favoritecharts/$',views.rower_favoritecharts_view), + url(r'^me/favoritecharts/user/(?P\d+)$',views.rower_favoritecharts_view), # url(r'^me/workflowconfig$',views.workout_workflow_config_view), - url(r'^me/workflowconfig2$',views.workout_workflow_config2_view), + url(r'^me/workflowconfig2/$',views.workout_workflow_config2_view), + url(r'^me/workflowconfig2/user/(?P\d+)$',views.workout_workflow_config2_view), url(r'^me/workflowdefault$',views.workflow_default_view), url(r'^email/send/$', views.sendmail), url(r'^email/thankyou/$', TemplateView.as_view(template_name='thankyou.html'), name='thankyou'), diff --git a/rowers/views.py b/rowers/views.py index 63e36bf1..9c2490bf 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -8379,7 +8379,7 @@ def workout_workflow_config_view(request): }) @login_required() -def workout_workflow_config2_view(request): +def workout_workflow_config2_view(request,userid=0): request.session['referer'] = absolute(request)['PATH'] request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE try: @@ -8388,7 +8388,7 @@ def workout_workflow_config2_view(request): workoutid = 0 - r = getrower(request.user) + r = getrequestrower(request,userid=userid,notpermanent=True) MiddlePanelFormSet = formset_factory(WorkFlowMiddlePanelElement,extra=1) LeftPanelFormSet = formset_factory(WorkFlowLeftPanelElement,extra=1) @@ -8449,7 +8449,7 @@ def workout_workflow_config2_view(request): return render(request,tmplt, { - 'rower':getrower(request.user), + 'rower':r, 'leftpanel_formset':leftpanel_formset, 'middlepanel_formset':middlepanel_formset, 'workoutid': workoutid, @@ -11929,6 +11929,17 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): rowerid = r.id + breadcrumbs = [ + { + 'url':'/rowers/me/edit', + 'name': 'Profile' + }, + { + 'url': reverse(rower_edit_view), + 'name': 'Account Settings' + } + ] + if request.method == 'POST' and "ut2" in request.POST: form = RowerForm(request.POST) if form.is_valid(): @@ -11963,6 +11974,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): 'teams':get_my_teams(request.user), 'powerform':powerform, 'rower':r, + 'breadcrumbs':breadcrumbs, 'accountform':accountform, 'userform':userform, }) @@ -11981,6 +11993,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): return render(request, 'rower_form.html', {'form':form, 'teams':get_my_teams(request.user), + 'breadcrumbs':breadcrumbs, 'powerzonesform':powerzonesform, 'userform':userform, 'accountform':accountform, @@ -12039,6 +12052,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): 'teams':get_my_teams(request.user), 'powerform':powerform, 'rower':r, + 'breadcrumbs':breadcrumbs, 'userform':userform, 'accountform':accountform, }) @@ -12081,6 +12095,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): 'teams':get_my_teams(request.user), 'powerzonesform':powerzonesform, 'powerform':powerform, + 'breadcrumbs':breadcrumbs, 'userform':userform, 'accountform':accountform, 'rower':r, @@ -12103,6 +12118,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): 'teams':get_my_teams(request.user), 'powerform':powerform, 'powerzonesform':powerzonesform, + 'breadcrumbs':breadcrumbs, 'accountform':accountform, 'userform':userform, 'rower':r, @@ -12161,6 +12177,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): {'form':form, 'teams':get_my_teams(request.user), 'powerzonesform':powerzonesform, + 'breadcrumbs':breadcrumbs, 'powerform':powerform, 'accountform':accountform, 'userform':userform, @@ -12174,6 +12191,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): {'form':form, 'teams':get_my_teams(request.user), 'powerzonesform':powerzonesform, + 'breadcrumbs':breadcrumbs, 'powerform':powerform, 'accountform':accountform, 'userform':userform, @@ -12194,6 +12212,7 @@ def rower_edit_view(request,rowerid=0,userid=0,message=""): 'form':form, 'teams':get_my_teams(request.user), 'powerform':powerform, + 'breadcrumbs':breadcrumbs, 'powerzonesform':powerzonesform, 'userform':userform, 'accountform':accountform, @@ -12211,6 +12230,17 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): rowerid = r.id + breadcrumbs = [ + { + 'url':'/rowers/me/edit', + 'name': 'Profile' + }, + { + 'url': reverse(rower_prefs_view), + 'name': 'Zones' + } + ] + if request.method == 'POST' and "ut2" in request.POST: form = RowerForm(request.POST) if form.is_valid(): @@ -12243,6 +12273,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): {'form':form, 'powerzonesform':powerzonesform, 'teams':get_my_teams(request.user), + 'breadcrumbs':breadcrumbs, 'powerform':powerform, 'rower':r, 'accountform':accountform, @@ -12264,6 +12295,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): {'form':form, 'teams':get_my_teams(request.user), 'powerzonesform':powerzonesform, + 'breadcrumbs':breadcrumbs, 'userform':userform, 'accountform':accountform, 'powerform':powerform, @@ -12319,6 +12351,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): return render(request, 'rower_preferences.html', {'form':form, 'teams':get_my_teams(request.user), + 'breadcrumbs':breadcrumbs, 'powerform':powerform, 'rower':r, 'userform':userform, @@ -12364,6 +12397,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): 'powerzonesform':powerzonesform, 'powerform':powerform, 'userform':userform, + 'breadcrumbs':breadcrumbs, 'accountform':accountform, 'rower':r, }) @@ -12384,6 +12418,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): {'form':form, 'teams':get_my_teams(request.user), 'powerform':powerform, + 'breadcrumbs':breadcrumbs, 'powerzonesform':powerzonesform, 'accountform':accountform, 'userform':userform, @@ -12443,6 +12478,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): {'form':form, 'teams':get_my_teams(request.user), 'powerzonesform':powerzonesform, + 'breadcrumbs':breadcrumbs, 'powerform':powerform, 'accountform':accountform, 'userform':userform, @@ -12457,6 +12493,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): 'teams':get_my_teams(request.user), 'powerzonesform':powerzonesform, 'powerform':powerform, + 'breadcrumbs':breadcrumbs, 'accountform':accountform, 'userform':userform, 'rower':r, @@ -12477,6 +12514,7 @@ def rower_prefs_view(request,rowerid=0,userid=0,message=""): 'teams':get_my_teams(request.user), 'powerform':powerform, 'powerzonesform':powerzonesform, + 'breadcrumbs':breadcrumbs, 'userform':userform, 'accountform':accountform, 'grants':grants, diff --git a/static/css/rowsandall2.css b/static/css/rowsandall2.css index bf555be9..babefdd9 100644 --- a/static/css/rowsandall2.css +++ b/static/css/rowsandall2.css @@ -243,6 +243,15 @@ th.rotate > div > span { border: solid 1px #333; } + + +.contentli { + margin-left: 30px; + display: list-item; + list-style-type: circle; +} + + .dot { border-radius: 50%; display: block; diff --git a/static/css/styles2.css b/static/css/styles2.css index f1ecf61c..5dd4dcad 100644 --- a/static/css/styles2.css +++ b/static/css/styles2.css @@ -392,6 +392,7 @@ } + .main-content li.grid_2 { grid-column-end: span 1; } diff --git a/templates/newbase.html b/templates/newbase.html index 524b4263..a8ef01cc 100644 --- a/templates/newbase.html +++ b/templates/newbase.html @@ -339,7 +339,7 @@ Partnering?
  • - Developers Info + Developers Info