fusion done
This commit is contained in:
@@ -1,22 +1,34 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "newbase.html" %}
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
{% load rowerfilters %}
|
{% load rowerfilters %}
|
||||||
|
|
||||||
{% block title %}Workouts{% endblock %}
|
{% block title %}Workouts{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block main %}
|
||||||
|
|
||||||
|
|
||||||
<div class="grid_12 alpha">
|
<h1>Fusion Editor</h1>
|
||||||
<h3>Fusion Editor</h3>
|
<ul class="main-content">
|
||||||
</div>
|
<li class="grid_2">
|
||||||
<div class="grid_12 alpha">
|
|
||||||
<div class="grid_6 alpha">
|
<form enctype="multipart/form-data" action="" method="post">
|
||||||
|
<p>
|
||||||
|
<table>
|
||||||
|
{{ form.as_table }}
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{% csrf_token %}
|
||||||
|
<input name='fusion' class="button green" type="submit" value="Submit">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
<li class="grid_2">
|
||||||
<p>
|
<p>
|
||||||
Adding sensor data from workout {{ workout2.id }} into workout {{ workout1.id }}.
|
Adding sensor data from workout {{ workout2.id }} into workout {{ workout1.id }}.
|
||||||
This will create a new workout. After you submit the form, you will be
|
This will create a new workout. After you submit the form, you will be
|
||||||
taken to the newly created workout. If you are happy with the result, you
|
taken to the newly created workout. If you are happy with the result, you
|
||||||
can delete the two original workouts manually.
|
can delete the two original workouts manually.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Workout 1: {{ workout1.name }}
|
Workout 1: {{ workout1.name }}
|
||||||
@@ -24,21 +36,13 @@
|
|||||||
<p>
|
<p>
|
||||||
Workout 2: {{ workout2.name }}
|
Workout 2: {{ workout2.name }}
|
||||||
</p>
|
</p>
|
||||||
<p>On the right hand side, please select the columns from workout 2 that
|
<p>Please select the columns from workout 2 that
|
||||||
you want to replace the equivalent columns in workout 1. </p>
|
you want to replace the equivalent columns in workout 1. </p>
|
||||||
</div>
|
</li>
|
||||||
<div class="grid_4">
|
</ul>
|
||||||
|
|
||||||
<form enctype="multipart/form-data" action="" method="post">
|
|
||||||
|
|
||||||
<table>
|
|
||||||
{{ form.as_table }}
|
|
||||||
</table>
|
|
||||||
{% csrf_token %}
|
|
||||||
</div>
|
|
||||||
<div class="grid_2 omega">
|
|
||||||
<input name='fusion' class="button green" type="submit" value="Submit"> </form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
{% include 'menu_workout.html' %}
|
||||||
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,36 +1,34 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "newbase.html" %}
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
{% load rowerfilters %}
|
{% load rowerfilters %}
|
||||||
|
|
||||||
{% block title %}Workouts{% endblock %}
|
{% block title %}Workouts{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block main %}
|
||||||
<div id="workouts" class="grid_4 alpha">
|
<h1>Workout {{ id }} Sensor Fusion</h1>
|
||||||
<div class="grid_4 alpha">
|
<ul class="main-content">
|
||||||
<h1>Workout {{ id }}</h1>
|
<li>
|
||||||
<table width=100%>
|
<table width=100%>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Rower:</th><td>{{ first_name }} {{ last_name }}</td>
|
<th>Rower:</th><td>{{ first_name }} {{ last_name }}</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name:</th><td>{{ workout.name }}</td>
|
<th>Name:</th><td>{{ workout.name }}</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Date:</th><td>{{ workout.date }}</td>
|
<th>Date:</th><td>{{ workout.date }}</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<th>Time:</th><td>{{ workout.starttime }}</td>
|
<th>Time:</th><td>{{ workout.starttime }}</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<th>Distance:</th><td>{{ workout.distance }}m</td>
|
<th>Distance:</th><td>{{ workout.distance }}m</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td>
|
<th>Duration:</th><td>{{ workout.duration |durationprint:"%H:%M:%S.%f" }}</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<th>Type:</th><td>{{ workout.workouttype }}</td>
|
<th>Type:</th><td>{{ workout.workouttype }}</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<th>Weight Category:</th><td>{{ workout.weightcategory }}</td>
|
<th>Weight Category:</th><td>{{ workout.weightcategory }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
<div class="grid_4 alpha">
|
|
||||||
<p>
|
<p>
|
||||||
<form id="searchform" action=""
|
<form id="searchform" action=""
|
||||||
method="get" accept-charset="utf-8">
|
method="get" accept-charset="utf-8">
|
||||||
@@ -40,82 +38,108 @@
|
|||||||
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
<input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search">
|
||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
<p>
|
||||||
|
Select start and end date for a date range:
|
||||||
Select start and end date for a date range:
|
</p>
|
||||||
<div class="grid_4 alpha">
|
<p>
|
||||||
<p>
|
<form enctype="multipart/form-data" action="/rowers/workout/fusion/{{ id }}/" method="post">
|
||||||
<form enctype="multipart/form-data" action="/rowers/workout/fusion/{{ id }}/" method="post">
|
|
||||||
|
<table>
|
||||||
<table>
|
{{ dateform.as_table }}
|
||||||
{{ dateform.as_table }}
|
</table>
|
||||||
</table>
|
{% csrf_token %}
|
||||||
{% csrf_token %}
|
</p>
|
||||||
</div>
|
|
||||||
<div class="grid_2 suffix_2 omega">
|
|
||||||
<input name='daterange' class="button green" type="submit" value="Submit"> </form>
|
<input name='daterange' class="button green" type="submit" value="Submit"> </form>
|
||||||
</p>
|
</li>
|
||||||
</div>
|
<li class="grid_3">
|
||||||
|
<h1>Fuse this workout with data from:</h1>
|
||||||
|
{% if workouts %}
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
{% if workouts.has_previous %}
|
||||||
|
{% if request.GET.q %}
|
||||||
|
<a class="wh" href="?page=1&q={{ request.GET.q }}">
|
||||||
|
<i class="fas fa-arrow-alt-to-left"></i>
|
||||||
|
</a>
|
||||||
|
<a class="wh" href="?page={{ workouts.previous_page_number }}&q={{ request.GET.q }}">
|
||||||
|
<i class="fas fa-arrow-alt-left"></i>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="wh" href="?page=1">
|
||||||
|
<i class="fas fa-arrow-alt-to-left"></i>
|
||||||
|
</a>
|
||||||
|
<a class="wh" href="?page={{ workouts.previous_page_number }}">
|
||||||
|
<i class="fas fa-arrow-alt-left"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<span>
|
||||||
|
Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{% if workouts.has_next %}
|
||||||
|
{% if request.GET.q %}
|
||||||
|
<a class="wh" href="?page={{ workouts.next_page_number }}&q={{ request.GET.q }}">
|
||||||
|
<i class="fas fa-arrow-alt-right"></i>
|
||||||
|
</a>
|
||||||
|
<a class="wh" href="?page={{ workouts.paginator.num_pages }}&q={{ request.GET.q }}">
|
||||||
|
<i class="fas fa-arrow-alt-to-right">
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="wh" href="?page={{ workouts.next_page_number }}">
|
||||||
|
<i class="fas fa-arrow-alt-right"></i>
|
||||||
|
</a>
|
||||||
|
<a class="wh" href="?page={{ workouts.paginator.num_pages }}">
|
||||||
|
<i class="fas fa-arrow-alt-to-right"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table width="100%" class="listtable">
|
||||||
</div>
|
<thead>
|
||||||
|
<tr>
|
||||||
<div id="fusion" class="grid_8 omega">
|
<th> Date</th>
|
||||||
<h1>Fuse this workout with data from:</h1>
|
<th> Time</th>
|
||||||
{% if workouts %}
|
<th> Name</th>
|
||||||
<table width="100%" class="listtable">
|
<th> Type</th>
|
||||||
<thead>
|
<th> Distance </th>
|
||||||
<tr>
|
<th> Duration </th>
|
||||||
<th> Date</th>
|
<th> Avg HR </th>
|
||||||
<th> Time</th>
|
<th> Max HR </th>
|
||||||
<th> Name</th>
|
<th> Fusion</th>
|
||||||
<th> Type</th>
|
</tr>
|
||||||
<th> Distance </th>
|
</thead>
|
||||||
<th> Duration </th>
|
<tbody>
|
||||||
<th> Avg HR </th>
|
{% for cworkout in workouts %}
|
||||||
<th> Max HR </th>
|
<tr>
|
||||||
<th> Fusion</th>
|
<td> {{ cworkout.date }} </td>
|
||||||
</tr>
|
<td> {{ cworkout.starttime }} </td>
|
||||||
</thead>
|
<td> <a href="/rowers/workout/{{ workout.id }}/edit">{{ cworkout.name }}</a> </td>
|
||||||
</tbody>
|
<td> {{ cworkout.workouttype }} </td>
|
||||||
{% for cworkout in workouts %}
|
<td> {{ cworkout.distance }}m</td>
|
||||||
<tr>
|
<td> {{ cworkout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||||
<td> {{ cworkout.date }} </td>
|
<td> {{ cworkout.averagehr }} </td>
|
||||||
<td> {{ cworkout.starttime }} </td>
|
<td> {{ cworkout.maxhr }} </td>
|
||||||
<td> <a href="/rowers/workout/{{ workout.id }}/edit">{{ cworkout.name }}</a> </td>
|
{% if id == cworkout.id %}
|
||||||
<td> {{ cworkout.workouttype }} </td>
|
<td> </td>
|
||||||
<td> {{ cworkout.distance }}m</td>
|
{% else %}
|
||||||
<td> {{ cworkout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
<td> <a class="button blue small" href="/rowers/workout/fusion/{{ id }}/{{ cworkout.id }}">Fusion</a> </td>
|
||||||
<td> {{ cworkout.averagehr }} </td>
|
{% endif %}
|
||||||
<td> {{ cworkout.maxhr }} </td>
|
|
||||||
{% if id == cworkout.id %}
|
</tr>
|
||||||
<td> </td>
|
{% endfor %}
|
||||||
{% else %}
|
</tbody>
|
||||||
<td> <a class="button blue small" href="/rowers/workout/fusion/{{ id }}/{{ cworkout.id }}">Fusion</a> </td>
|
</table>
|
||||||
{% endif %}
|
{% else %}
|
||||||
|
<p> No workouts found </p>
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
{% else %}
|
|
||||||
<p> No workouts found </p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<div class="grid_2 prefix_5 suffix_1 omega">
|
|
||||||
<span class="button gray small">
|
|
||||||
{% if workouts.has_previous %}
|
|
||||||
<a class="wh" href="/rowers/workout/fusion/{{ id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}?page={{ workouts.previous_page_number }}"><</a>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</li>
|
||||||
<span>
|
</ul>
|
||||||
Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
|
{% endblock %}
|
||||||
</span>
|
|
||||||
|
{% block sidebar %}
|
||||||
{% if workouts.has_next %}
|
{% include 'menu_workout.html' %}
|
||||||
<a class="wh" href="/rowers/workout/fusion/{{ id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}?page={{ workouts.next_page_number }}">></a>
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
189
rowers/views.py
189
rowers/views.py
@@ -6528,73 +6528,93 @@ def workout_fusion_list(request,id=0,message='',successmessage='',
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
u = User.objects.get(id=r.user.id)
|
|
||||||
if request.method == 'POST':
|
|
||||||
dateform = DateRangeForm(request.POST)
|
|
||||||
if dateform.is_valid():
|
|
||||||
startdate = dateform.cleaned_data['startdate']
|
|
||||||
enddate = dateform.cleaned_data['enddate']
|
|
||||||
else:
|
|
||||||
dateform = DateRangeForm(initial={
|
|
||||||
'startdate':startdate,
|
|
||||||
'enddate':enddate,
|
|
||||||
})
|
|
||||||
|
|
||||||
if startdatestring:
|
|
||||||
startdate = iso8601.parse_date(startdatestring)
|
|
||||||
if enddatestring:
|
|
||||||
enddate = iso8601.parse_date(enddatestring)
|
|
||||||
|
|
||||||
startdate = datetime.datetime.combine(startdate,datetime.time())
|
|
||||||
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
|
|
||||||
#enddate = enddate+datetime.timedelta(days=1)
|
|
||||||
|
|
||||||
if enddate < startdate:
|
|
||||||
s = enddate
|
|
||||||
enddate = startdate
|
|
||||||
startdate = s
|
|
||||||
|
|
||||||
workouts = Workout.objects.filter(user=r,
|
|
||||||
startdatetime__gte=startdate,
|
|
||||||
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id)
|
|
||||||
|
|
||||||
query = request.GET.get('q')
|
|
||||||
if query:
|
|
||||||
query_list = query.split()
|
|
||||||
workouts = workouts.filter(
|
|
||||||
reduce(operator.and_,
|
|
||||||
(Q(name__icontains=q) for q in query_list)) |
|
|
||||||
reduce(operator.and_,
|
|
||||||
(Q(notes__icontains=q) for q in query_list))
|
|
||||||
)
|
|
||||||
|
|
||||||
paginator = Paginator(workouts,15) # show 25 workouts per page
|
|
||||||
page = request.GET.get('page')
|
|
||||||
|
|
||||||
try:
|
|
||||||
workouts = paginator.page(page)
|
|
||||||
except PageNotAnInteger:
|
|
||||||
workouts = paginator.page(1)
|
|
||||||
except EmptyPage:
|
|
||||||
workouts = paginator.page(paginator.num_pages)
|
|
||||||
row = get_workout(id)
|
|
||||||
|
|
||||||
messages.info(request,successmessage)
|
|
||||||
messages.error(request,message)
|
|
||||||
|
|
||||||
return render(request, 'fusion_list.html',
|
|
||||||
{'id':int(id),
|
|
||||||
'workout':row,
|
|
||||||
'workouts': workouts,
|
|
||||||
'last_name':u.last_name,
|
|
||||||
'first_name':u.first_name,
|
|
||||||
'dateform':dateform,
|
|
||||||
'startdate':startdate,
|
|
||||||
'enddate':enddate,
|
|
||||||
'teams':get_my_teams(request.user),
|
|
||||||
})
|
|
||||||
except Rower.DoesNotExist:
|
except Rower.DoesNotExist:
|
||||||
raise Http404("User has no rower instance")
|
raise Http404("User has no rower instance")
|
||||||
|
|
||||||
|
u = User.objects.get(id=r.user.id)
|
||||||
|
if request.method == 'POST':
|
||||||
|
dateform = DateRangeForm(request.POST)
|
||||||
|
if dateform.is_valid():
|
||||||
|
startdate = dateform.cleaned_data['startdate']
|
||||||
|
enddate = dateform.cleaned_data['enddate']
|
||||||
|
else:
|
||||||
|
dateform = DateRangeForm(initial={
|
||||||
|
'startdate':startdate,
|
||||||
|
'enddate':enddate,
|
||||||
|
})
|
||||||
|
|
||||||
|
if startdatestring:
|
||||||
|
startdate = iso8601.parse_date(startdatestring)
|
||||||
|
if enddatestring:
|
||||||
|
enddate = iso8601.parse_date(enddatestring)
|
||||||
|
|
||||||
|
startdate = datetime.datetime.combine(startdate,datetime.time())
|
||||||
|
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
|
||||||
|
#enddate = enddate+datetime.timedelta(days=1)
|
||||||
|
|
||||||
|
if enddate < startdate:
|
||||||
|
s = enddate
|
||||||
|
enddate = startdate
|
||||||
|
startdate = s
|
||||||
|
|
||||||
|
workouts = Workout.objects.filter(user=r,
|
||||||
|
startdatetime__gte=startdate,
|
||||||
|
startdatetime__lte=enddate).order_by("-date", "-starttime").exclude(id=id)
|
||||||
|
|
||||||
|
query = request.GET.get('q')
|
||||||
|
if query:
|
||||||
|
query_list = query.split()
|
||||||
|
workouts = workouts.filter(
|
||||||
|
reduce(operator.and_,
|
||||||
|
(Q(name__icontains=q) for q in query_list)) |
|
||||||
|
reduce(operator.and_,
|
||||||
|
(Q(notes__icontains=q) for q in query_list))
|
||||||
|
)
|
||||||
|
|
||||||
|
paginator = Paginator(workouts,15) # show 25 workouts per page
|
||||||
|
page = request.GET.get('page')
|
||||||
|
|
||||||
|
try:
|
||||||
|
workouts = paginator.page(page)
|
||||||
|
except PageNotAnInteger:
|
||||||
|
workouts = paginator.page(1)
|
||||||
|
except EmptyPage:
|
||||||
|
workouts = paginator.page(paginator.num_pages)
|
||||||
|
row = get_workout(id)
|
||||||
|
|
||||||
|
messages.info(request,successmessage)
|
||||||
|
messages.error(request,message)
|
||||||
|
|
||||||
|
breadcrumbs = [
|
||||||
|
{
|
||||||
|
'url':'/rowers/list-workouts',
|
||||||
|
'name':'Workouts'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':get_workout_default_page(request,row.id),
|
||||||
|
'name': str(row.id)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse(workout_fusion_list,kwargs={'id':id}),
|
||||||
|
'name': 'Sensor Fusion'
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
return render(request, 'fusion_list.html',
|
||||||
|
{'id':int(id),
|
||||||
|
'workout':row,
|
||||||
|
'rower':r,
|
||||||
|
'active':'nav-workouts',
|
||||||
|
'breadcrumbs':breadcrumbs,
|
||||||
|
'workouts': workouts,
|
||||||
|
'last_name':u.last_name,
|
||||||
|
'first_name':u.first_name,
|
||||||
|
'dateform':dateform,
|
||||||
|
'startdate':startdate,
|
||||||
|
'enddate':enddate,
|
||||||
|
'teams':get_my_teams(request.user),
|
||||||
|
})
|
||||||
|
|
||||||
# Basic view of workout
|
# Basic view of workout
|
||||||
def workout_view(request,id=0):
|
def workout_view(request,id=0):
|
||||||
@@ -11021,6 +11041,9 @@ def workout_split_view(request,id=id):
|
|||||||
# Fuse two workouts
|
# Fuse two workouts
|
||||||
@user_passes_test(ispromember,login_url="/",redirect_field_name=None)
|
@user_passes_test(ispromember,login_url="/",redirect_field_name=None)
|
||||||
def workout_fusion_view(request,id1=0,id2=1):
|
def workout_fusion_view(request,id1=0,id2=1):
|
||||||
|
|
||||||
|
r = getrower(request.user)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
w1 = Workout.objects.get(id=id1)
|
w1 = Workout.objects.get(id=id1)
|
||||||
w2 = Workout.objects.get(id=id2)
|
w2 = Workout.objects.get(id=id2)
|
||||||
@@ -11061,20 +11084,36 @@ def workout_fusion_view(request,id1=0,id2=1):
|
|||||||
})
|
})
|
||||||
|
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
else:
|
else:
|
||||||
return render(request, 'fusion.html',
|
form = FusionMetricChoiceForm(instance=w2)
|
||||||
{'form':form,
|
|
||||||
'teams':get_my_teams(request.user),
|
breadcrumbs = [
|
||||||
'workout1':w1,
|
{
|
||||||
'workout2':w2,
|
'url':'/rowers/list-workouts',
|
||||||
})
|
'name':'Workouts'
|
||||||
|
},
|
||||||
|
{
|
||||||
form = FusionMetricChoiceForm(instance=w2)
|
'url':get_workout_default_page(request,w1.id),
|
||||||
|
'name': str(w1.id)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse(workout_fusion_list,kwargs={'id':id1}),
|
||||||
|
'name': 'Sensor Fusion'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url':reverse(workout_fusion_view,kwargs={'id1':id1,'id2':id2}),
|
||||||
|
'name': 'Sensor Fusion'
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
return render(request, 'fusion.html',
|
return render(request, 'fusion.html',
|
||||||
{'form':form,
|
{'form':form,
|
||||||
'teams':get_my_teams(request.user),
|
'teams':get_my_teams(request.user),
|
||||||
|
'workout':w1,
|
||||||
|
'rower':r,
|
||||||
|
'breadcrumbs':breadcrumbs,
|
||||||
|
'active':'nav-workouts',
|
||||||
'workout1':w1,
|
'workout1':w1,
|
||||||
'workout2':w2,
|
'workout2':w2,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user