diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py
index 5e358a15..7228a80e 100644
--- a/rowers/interactiveplots.py
+++ b/rowers/interactiveplots.py
@@ -5,6 +5,8 @@ from rowingdata import cumcpdata,histodata
from rowingdata import rowingdata as rrdata
+from django.utils import timezone
+
from bokeh.plotting import figure, ColumnDataSource, Figure,curdoc
from bokeh.models import CustomJS,Slider
from bokeh.charts import Histogram,HeatMap
@@ -570,7 +572,6 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
datadf = dataprep.smalldataprep(theworkouts,xparam,yparam1,yparam2)
-
axlabels = {
'time': 'Time',
'distance': 'Distance (m)',
@@ -631,11 +632,16 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
return ['','
No non-zero data in selection
','','']
- datadf['x1'] = datadf.ix[:,xparam]
-
- datadf['y1'] = datadf.ix[:,yparam1]
+ # datadf['x1'] = datadf.ix[:,xparam]
+ datadf = datadf.rename(columns={
+ xparam:'x1',
+ yparam1:'y1',
+ })
+
+ # datadf['y1'] = datadf.ix[:,yparam1]
if yparam2 != 'None':
- datadf['y2'] = datadf.ix[:,yparam2]
+ # datadf['y2'] = datadf.ix[:,yparam2]
+ datadf = datadf.rename(columns={yparam2:'y2'})
else:
datadf['y2'] = datadf['y1']
@@ -674,6 +680,8 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
datadf.copy()
)
+ print "jet",timezone.now()
+
# Add hover to this comma-separated string and see what changes
if (promember==1):
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize,crosshair'
diff --git a/rowers/templates/comparison_list.html b/rowers/templates/comparison_list.html
index a0fbcadb..9db40a2a 100644
--- a/rowers/templates/comparison_list.html
+++ b/rowers/templates/comparison_list.html
@@ -30,6 +30,14 @@
Weight Category: | {{ workout.weightcategory }} |
+
+
@@ -73,5 +81,21 @@
{% else %}
No workouts found
{% endif %}
+
+
+
+ {% if workouts.has_previous %}
+ <
+ {% endif %}
+
+
+ Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
+
+
+ {% if workouts.has_next %}
+ >
+ {% endif %}
+
+
{% endblock %}
diff --git a/rowers/templates/list_graphs.html b/rowers/templates/list_graphs.html
index 921960cc..bfc1e571 100644
--- a/rowers/templates/list_graphs.html
+++ b/rowers/templates/list_graphs.html
@@ -6,6 +6,14 @@
{% block content %}
Recent Graphs
+
+
{% if graphs1 %}
diff --git a/rowers/templates/list_workouts.html b/rowers/templates/list_workouts.html
index 0b4334ef..31c1ce88 100644
--- a/rowers/templates/list_workouts.html
+++ b/rowers/templates/list_workouts.html
@@ -5,8 +5,10 @@
{% block title %}Workouts{% endblock %}
{% block content %}
+
My Workouts
- {% if workouts %}
+
+{% if workouts %}
@@ -49,4 +51,35 @@
{% else %}
No workouts found
{% endif %}
+
+
+
+
+ {% if workouts.has_previous %}
+ <
+ {% endif %}
+
+
+ Page {{ workouts.number }} of {{ workouts.paginator.num_pages }}.
+
+
+ {% if workouts.has_next %}
+ >
+ {% endif %}
+
+
+
+
{% endblock %}
diff --git a/rowers/views.py b/rowers/views.py
index 96bf21ee..1fe4f108 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -1,11 +1,14 @@
import time
+import operator
from django.views.generic.base import TemplateView
+from django.db.models import Q
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth import authenticate, login, logout
from rowers.forms import LoginForm,DocumentsForm,UploadOptionsForm
from django.core.urlresolvers import reverse
from django.template import RequestContext
+from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.conf import settings
from django.utils.datastructures import MultiValueDictKeyError
from django.utils import timezone,translation
@@ -1772,7 +1775,26 @@ def workouts_view(request,message='',successmessage=''):
# successmessage = 'New Workouts have been created from email'
workouts = Workout.objects.filter(user=r).order_by("-date", "-starttime")
-
+ 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,25) # 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)
+
return render(request, 'list_workouts.html',
{'workouts': workouts,
'message': message,
@@ -1787,6 +1809,27 @@ def workout_comparison_list(request,id=0,message='',successmessage=''):
r = Rower.objects.get(user=request.user)
u = User.objects.get(id=r.user.id)
workouts = Workout.objects.filter(user=r).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 = Workout.objects.get(id=id)
return render(request, 'comparison_list.html',
@@ -3942,6 +3985,16 @@ def graphs_view(request):
try:
r = Rower.objects.get(user=request.user)
workouts = Workout.objects.filter(user=r).order_by("-date", "-starttime")
+ 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))
+ )
+
g = GraphImage.objects.filter(workout__in=workouts).order_by("-creationdatetime")
if (len(g)<=5):
return render(request, 'list_graphs.html',
diff --git a/static/css/rowsandall.css b/static/css/rowsandall.css
index dcfe9580..d163a455 100644
--- a/static/css/rowsandall.css
+++ b/static/css/rowsandall.css
@@ -17,14 +17,19 @@ a {
text-decoration: none;
}
+
a:visited { color:#000; }
a:link { color: #000; }
+
a:hover {
text-decoration: underline;
}
+
+
+
h1 {
/* font-family: Georgia, serif; */
font-weight: normal;
@@ -471,4 +476,16 @@ a.button {
.flexplot {
position: relative;
z-index: 10;
-}
\ No newline at end of file
+}
+
+a.wh:link {
+ color: #e9e9e9;
+}
+
+a.wh:visited {
+ color: #e9e9e9;
+}
+
+a.wh:hover {
+ color: #e9e9e9;
+}