Merge branch 'release/v8.07'
@@ -313,7 +313,8 @@ def interactive_activitychart(workouts,startdate,enddate,stack='type'):
|
|||||||
|
|
||||||
p.legend.location = "top_left"
|
p.legend.location = "top_left"
|
||||||
p.legend.background_fill_alpha = 0.7
|
p.legend.background_fill_alpha = 0.7
|
||||||
p.sizing_mode = 'scale_width'
|
# p.sizing_mode = 'scale_width'
|
||||||
|
p.sizing_mode = 'stretch_both'
|
||||||
|
|
||||||
p.yaxis.axis_label = 'Minutes'
|
p.yaxis.axis_label = 'Minutes'
|
||||||
|
|
||||||
@@ -3104,7 +3105,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
plot.title.text = row.name
|
plot.title.text = row.name
|
||||||
plot.title.text_font_size=value("1.0em")
|
plot.title.text_font_size=value("1.0em")
|
||||||
|
|
||||||
|
plot.sizing_mode = 'scale_width'
|
||||||
plot.xaxis.axis_label = xaxlabel
|
plot.xaxis.axis_label = xaxlabel
|
||||||
|
|
||||||
plot.yaxis.axis_label = yaxlabel
|
plot.yaxis.axis_label = yaxlabel
|
||||||
@@ -3338,17 +3339,21 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
title="Max Distance",callback=callback)
|
title="Max Distance",callback=callback)
|
||||||
callback.args["maxdist"] = slider_dist_max
|
callback.args["maxdist"] = slider_dist_max
|
||||||
|
|
||||||
layout = layoutrow([layoutcolumn([annotation,
|
thesliders = layoutcolumn([annotation,
|
||||||
slider_spm_min,
|
slider_spm_min,
|
||||||
slider_spm_max,
|
slider_spm_max,
|
||||||
slider_dist_min,
|
slider_dist_min,
|
||||||
slider_dist_max,
|
slider_dist_max,
|
||||||
slider_work_min,
|
slider_work_min,
|
||||||
slider_work_max,
|
slider_work_max,
|
||||||
],
|
])
|
||||||
),
|
|
||||||
|
thesliders.sizing_mode = 'scale_width'
|
||||||
|
|
||||||
|
layout = layoutrow([thesliders,
|
||||||
plot])
|
plot])
|
||||||
|
|
||||||
|
# layout.sizing_mode = 'scale_width'
|
||||||
layout.sizing_mode = 'scale_width'
|
layout.sizing_mode = 'scale_width'
|
||||||
|
|
||||||
script, div = components(layout)
|
script, div = components(layout)
|
||||||
@@ -3795,7 +3800,7 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line',
|
|||||||
# add watermark
|
# add watermark
|
||||||
plot.extra_y_ranges = {"watermark": watermarkrange}
|
plot.extra_y_ranges = {"watermark": watermarkrange}
|
||||||
plot.extra_x_ranges = {"watermark": watermarkrange}
|
plot.extra_x_ranges = {"watermark": watermarkrange}
|
||||||
plot.sizing_mode = 'scale_width'
|
plot.sizing_mode = 'stretch_both'
|
||||||
|
|
||||||
plot.image_url([watermarkurl],0.05,0.9,
|
plot.image_url([watermarkurl],0.05,0.9,
|
||||||
watermarkw,watermarkh,
|
watermarkw,watermarkh,
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li class="grid_4">
|
<li class="grid_4">
|
||||||
<div id="theplot" class="flexplot">
|
<div id="theplot" class="flexplot" style="min-width:300px;">
|
||||||
{{ the_div|safe }}
|
{{ the_div|safe }}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -76,51 +76,20 @@
|
|||||||
<li class="grid_5">
|
<li class="grid_5">
|
||||||
<h2 class="midden">WHAT WE OFFER</h2>
|
<h2 class="midden">WHAT WE OFFER</h2>
|
||||||
</li>
|
</li>
|
||||||
|
{% for offering in offerings %}
|
||||||
<li class="frontitem">
|
<li class="frontitem">
|
||||||
<h3 class="midden">SYNC</h3>
|
<h3 class="midden">{{ offering.name }}</h3>
|
||||||
<div class="midden">
|
<div class="midden">
|
||||||
<img src="/static/img/upload.png"
|
<img src="{{ offering.image }}"
|
||||||
alt="Analyze" width="62px">
|
alt="Analyze" width="62px">
|
||||||
</div>
|
</div>
|
||||||
<p class="midden">
|
<p class="midden">
|
||||||
Easily upload data from the most popular devices and apps.
|
{{ offering.text }}
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li class="frontitem">
|
{% endfor %}
|
||||||
<h3 class="midden">LOG</h3>
|
<li class="grid_5">
|
||||||
<div class="midden">
|
<p class="midden">and more</p>
|
||||||
<img src="/static/img/log.png"
|
|
||||||
alt="Analyze" width="62px">
|
|
||||||
</div>
|
|
||||||
<p class="midden">
|
|
||||||
Maintain
|
|
||||||
a consistent log for all your rowing (indoor and on the water).
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li class="frontitem">
|
|
||||||
<h3 class="midden">ANALYZE</h3>
|
|
||||||
<div class="midden">
|
|
||||||
<img src="/static/img/analyze.png"
|
|
||||||
alt="Analyze" width="62px">
|
|
||||||
</div>
|
|
||||||
<p class="midden">
|
|
||||||
Analyze your workouts with a consistent set of tools
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li class="frontitem">
|
|
||||||
<h3 class="midden">COMPARE</h3>
|
|
||||||
<div class="midden">
|
|
||||||
<img src="/static/img/compare.png"
|
|
||||||
alt="Analyze" width="62px">
|
|
||||||
</div>
|
|
||||||
<p class="midden">
|
|
||||||
Compare your results between workouts and with other rowers in your team
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="button midden" href="">
|
|
||||||
<h2 class="midden"><div class="rounder whiteborder">and more</div></h2>
|
|
||||||
</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
||||||
|
|||||||
@@ -48,32 +48,41 @@ xo
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
{% if team %}
|
||||||
|
<h1>{{ team.name }} Team Workouts</h1>
|
||||||
|
{% else %}
|
||||||
|
<h1>
|
||||||
|
Workouts of {{ rower.user.first_name }} {{ rower.user.last_name }}
|
||||||
|
</h1>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li class="grid_2">
|
<li>
|
||||||
<p>
|
<p>
|
||||||
<form enctype="multipart/form-data" method="post">
|
<form enctype="multipart/form-data" method="post">
|
||||||
<table>
|
<table>
|
||||||
{{ dateform.as_table }}
|
{{ dateform.as_table }}
|
||||||
</table>
|
</table>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input name='daterange' type="submit" value="Submit">
|
<input name='daterange' type="submit" value="Submit">
|
||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
{% if team %}
|
{% if team %}
|
||||||
<p>
|
<p>
|
||||||
<form id="searchform" action="/rowers/list-workouts/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
<form id="searchform" action="/rowers/list-workouts/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||||
method="get" accept-charset="utf-8">
|
|
||||||
{% else %}
|
|
||||||
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
|
||||||
method="get" accept-charset="utf-8">
|
method="get" accept-charset="utf-8">
|
||||||
{% endif %}
|
{% else %}
|
||||||
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||||
<input type="submit">
|
method="get" accept-charset="utf-8">
|
||||||
|
{% endif %}
|
||||||
|
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
||||||
|
<input type="submit">
|
||||||
</input>
|
</input>
|
||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li class="grid_2">
|
<li style="min-height:200px;">
|
||||||
<script type="text/javascript" src="/static/js/bokeh-0.12.3.min.js"></script>
|
<script type="text/javascript" src="/static/js/bokeh-0.12.3.min.js"></script>
|
||||||
<script async="true" type="text/javascript">
|
<script async="true" type="text/javascript">
|
||||||
Bokeh.set_log_level("info");
|
Bokeh.set_log_level("info");
|
||||||
@@ -83,15 +92,6 @@ xo
|
|||||||
|
|
||||||
{{ the_div |safe }}
|
{{ the_div |safe }}
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
{% if team %}
|
|
||||||
<h3>{{ team.name }} Team Workouts</h3>
|
|
||||||
{% else %}
|
|
||||||
<h3>
|
|
||||||
Workouts of {{ rower.user.first_name }} {{ rower.user.last_name }}
|
|
||||||
</h3>
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<p>
|
<p>
|
||||||
<span>
|
<span>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
/
|
/
|
||||||
<a href="/rowers/deletemacrocycle/{{ macrocycle.0.id }}/">delete</a>
|
<a href="/rowers/deletemacrocycle/{{ macrocycle.0.id }}/">delete</a>
|
||||||
/
|
/
|
||||||
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</table>
|
</table>
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
/
|
/
|
||||||
<a href="/rowers/deletemacrocycle/{{ macrocycle.0.id }}/">delete</a>
|
<a href="/rowers/deletemacrocycle/{{ macrocycle.0.id }}/">delete</a>
|
||||||
/
|
/
|
||||||
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
/
|
/
|
||||||
<a href="/rowers/deletemesocycle/{{ mesocycle.0.id }}/">delete</a>
|
<a href="/rowers/deletemesocycle/{{ mesocycle.0.id }}/">delete</a>
|
||||||
/
|
/
|
||||||
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</table>
|
</table>
|
||||||
@@ -201,7 +201,7 @@
|
|||||||
/
|
/
|
||||||
<a href="/rowers/deletemesocycle/{{ mesocycle.0.id }}/">delete</a>
|
<a href="/rowers/deletemesocycle/{{ mesocycle.0.id }}/">delete</a>
|
||||||
/
|
/
|
||||||
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -251,7 +251,7 @@
|
|||||||
/
|
/
|
||||||
<a href="/rowers/deletemicrocycle/{{ microcycle.id }}/">delete</a>
|
<a href="/rowers/deletemicrocycle/{{ microcycle.id }}/">delete</a>
|
||||||
/
|
/
|
||||||
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -310,7 +310,7 @@
|
|||||||
/
|
/
|
||||||
<a href="/rowers/deletemicrocycle/{{ microcycle.id }}">delete</a>
|
<a href="/rowers/deletemicrocycle/{{ microcycle.id }}">delete</a>
|
||||||
/
|
/
|
||||||
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -319,7 +319,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}'>sessions</a>
|
<a href='/rowers/sessions/{{ microcycle.startdate|date:"Y-m-d" }}/{{ microcycle.enddate|date:"Y-m-d" }}/user/{{ rower.user.id }}'>sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -483,6 +483,10 @@ urlpatterns = [
|
|||||||
url(r'^sessions/print/user/(?P<userid>\d+)$',views.plannedsessions_print_view),
|
url(r'^sessions/print/user/(?P<userid>\d+)$',views.plannedsessions_print_view),
|
||||||
url(r'^sessions/$',views.plannedsessions_view),
|
url(r'^sessions/$',views.plannedsessions_view),
|
||||||
url(r'^sessions/user/(?P<userid>\d+)$',views.plannedsessions_view),
|
url(r'^sessions/user/(?P<userid>\d+)$',views.plannedsessions_view),
|
||||||
|
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',
|
||||||
|
views.plannedsessions_view),
|
||||||
|
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)$',
|
||||||
|
views.plannedsessions_view),
|
||||||
url(r'^courses/(?P<id>\d+)/edit$',views.course_edit_view,
|
url(r'^courses/(?P<id>\d+)/edit$',views.course_edit_view,
|
||||||
name='course_edit_view'),
|
name='course_edit_view'),
|
||||||
url(r'^courses/(?P<id>\d+)/delete$',views.course_delete_view),
|
url(r'^courses/(?P<id>\d+)/delete$',views.course_delete_view),
|
||||||
|
|||||||
@@ -6678,7 +6678,6 @@ def workouts_view(request,message='',successmessage='',
|
|||||||
'name':'Workouts'
|
'name':'Workouts'
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
return render(request, 'list_workouts.html',
|
return render(request, 'list_workouts.html',
|
||||||
{'workouts': workouts,
|
{'workouts': workouts,
|
||||||
'active': 'nav-workouts',
|
'active': 'nav-workouts',
|
||||||
@@ -14395,7 +14394,7 @@ def plannedsessions_coach_view(request,
|
|||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def plannedsessions_view(request,
|
def plannedsessions_view(request,
|
||||||
userid=0):
|
userid=0,startdatestring='',enddatestring=''):
|
||||||
|
|
||||||
r = getrequestrower(request,userid=userid)
|
r = getrequestrower(request,userid=userid)
|
||||||
|
|
||||||
@@ -14407,6 +14406,18 @@ def plannedsessions_view(request,
|
|||||||
|
|
||||||
startdate,enddate = get_dates_timeperiod(timeperiod)
|
startdate,enddate = get_dates_timeperiod(timeperiod)
|
||||||
|
|
||||||
|
if startdatestring:
|
||||||
|
try:
|
||||||
|
startdate = iso8601.parse_date(startdatestring)
|
||||||
|
except ParseError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if enddatestring:
|
||||||
|
try:
|
||||||
|
enddate = iso8601.parse_date(enddatestring)
|
||||||
|
except ParseError:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
trainingplan = TrainingPlan.objects.filter(
|
trainingplan = TrainingPlan.objects.filter(
|
||||||
startdate__lte = startdate,
|
startdate__lte = startdate,
|
||||||
|
|||||||
@@ -5,14 +5,77 @@ from rowers.forms import LoginForm
|
|||||||
|
|
||||||
from rowingdata import main as rmain
|
from rowingdata import main as rmain
|
||||||
|
|
||||||
|
import random
|
||||||
|
|
||||||
def rootview(request):
|
def rootview(request):
|
||||||
magicsentence = rmain()
|
magicsentence = rmain()
|
||||||
loginform = LoginForm()
|
loginform = LoginForm()
|
||||||
|
|
||||||
|
planoffering = {
|
||||||
|
'name': 'PLAN',
|
||||||
|
'image':'/static/img/Plan.png',
|
||||||
|
'text':'We offer a fully integrated way for you or your coach to set up a training plan. Compare plan vs execution based on time, distance, heart rate or power.'
|
||||||
|
}
|
||||||
|
|
||||||
|
uploadoffering = {
|
||||||
|
'name': 'SYNC',
|
||||||
|
'image':'/static/img/upload.png',
|
||||||
|
'text':'Easily upload data from the most popular devices and apps'
|
||||||
|
}
|
||||||
|
|
||||||
|
logoffering = {
|
||||||
|
'name': 'LOG',
|
||||||
|
'image':'/static/img/log.png',
|
||||||
|
'text':'Maintain a consistent log for all your rowing (indoor and on the water)'
|
||||||
|
}
|
||||||
|
|
||||||
|
analyzeoffering = {
|
||||||
|
'name': 'ANALYZE',
|
||||||
|
'image':'/static/img/analyze.png',
|
||||||
|
'text':'Analyze your workouts with a consistent set of tools'
|
||||||
|
}
|
||||||
|
|
||||||
|
compareoffering = {
|
||||||
|
'name': 'COMPARE',
|
||||||
|
'image':'/static/img/compare.png',
|
||||||
|
'text':'Compare your results between workouts and with other rowers in your team'
|
||||||
|
}
|
||||||
|
|
||||||
|
raceoffering = {
|
||||||
|
'name': 'RACE',
|
||||||
|
'image':'/static/img/Race 01.png',
|
||||||
|
'text':'Virtual regattas are an informal way to add a competitive element to your training and can be used as a quick way to set up small regattas'
|
||||||
|
}
|
||||||
|
|
||||||
|
coachoffering = {
|
||||||
|
'name': 'COACHING',
|
||||||
|
'image':'/static/img/Remote coaching.png',
|
||||||
|
'text':'Rowsandall.com is the ideal platform for remote rowing coaching. As a coach, you can easily manage your athletes, set up plans and monitor execution and technique'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
allofferings = [
|
||||||
|
planoffering,
|
||||||
|
uploadoffering,
|
||||||
|
logoffering,
|
||||||
|
analyzeoffering,
|
||||||
|
raceoffering,
|
||||||
|
compareoffering,
|
||||||
|
coachoffering,
|
||||||
|
]
|
||||||
|
|
||||||
|
aux = list(allofferings)
|
||||||
|
random.shuffle(aux)
|
||||||
|
|
||||||
|
offerings = aux[0:5]
|
||||||
|
|
||||||
return render(request,
|
return render(request,
|
||||||
'frontpage.html',
|
'frontpage.html',
|
||||||
{
|
{
|
||||||
'versionstring': magicsentence,
|
'versionstring': magicsentence,
|
||||||
'form':loginform,
|
'form':loginform,
|
||||||
|
'offerings':offerings,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ th.rotate > div > span {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.frontitem {
|
.frontitem {
|
||||||
background-color: rgba(255,255,255,0.5);
|
background-color: rgba(255,255,255,0.7);
|
||||||
border: solid 1px wite;
|
border: solid 1px wite;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
|
|||||||
@@ -438,6 +438,19 @@
|
|||||||
color: #dddddd;
|
color: #dddddd;
|
||||||
padding: 1em 1em 1em 1em;
|
padding: 1em 1em 1em 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ad img {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ad a {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.main-footer {
|
.main-footer {
|
||||||
grid-area: footer;
|
grid-area: footer;
|
||||||
background: #ededed;
|
background: #ededed;
|
||||||
|
|||||||
BIN
static/img/Plan.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
static/img/Race 01.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
static/img/Race 02.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
static/img/Remote coaching.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
BIN
static/img/prygl.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -291,7 +291,10 @@
|
|||||||
|
|
||||||
<div class="ad">
|
<div class="ad">
|
||||||
{% block ad %}
|
{% block ad %}
|
||||||
Advertising
|
<a href="https://pryglrowing.com">
|
||||||
|
<img src="/static/img/prygl.jpg">
|
||||||
|
<p style="text-align: center">Prygl Rowing Camps</p>
|
||||||
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||