Merge branch 'release/v2.0'
@@ -667,6 +667,7 @@ def new_workout_from_df(r,df,
|
|||||||
starttimeunix = mktime(startdatetime.utctimetuple())
|
starttimeunix = mktime(startdatetime.utctimetuple())
|
||||||
df[' ElapsedTime (sec)'] = df['TimeStamp (sec)']
|
df[' ElapsedTime (sec)'] = df['TimeStamp (sec)']
|
||||||
df['TimeStamp (sec)'] = df['TimeStamp (sec)']+starttimeunix
|
df['TimeStamp (sec)'] = df['TimeStamp (sec)']+starttimeunix
|
||||||
|
print df.info()
|
||||||
|
|
||||||
row = rrdata(df=df)
|
row = rrdata(df=df)
|
||||||
row.write_csv(csvfilename,gzip=True)
|
row.write_csv(csvfilename,gzip=True)
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ class WorkoutMultipleCompareForm(forms.Form):
|
|||||||
workouts = forms.ModelMultipleChoiceField(queryset=Workout.objects.all(),
|
workouts = forms.ModelMultipleChoiceField(queryset=Workout.objects.all(),
|
||||||
widget=forms.CheckboxSelectMultiple())
|
widget=forms.CheckboxSelectMultiple())
|
||||||
|
|
||||||
from rowers.interactiveplots import axlabels
|
from rowers.metrics import axlabels
|
||||||
|
|
||||||
formaxlabels = axlabels.copy()
|
formaxlabels = axlabels.copy()
|
||||||
formaxlabels.pop('None')
|
formaxlabels.pop('None')
|
||||||
|
|||||||
@@ -50,36 +50,7 @@ import stravastuff
|
|||||||
from rowers.dataprep import rdata
|
from rowers.dataprep import rdata
|
||||||
import rowers.dataprep as dataprep
|
import rowers.dataprep as dataprep
|
||||||
|
|
||||||
axes = (
|
from rowers.metrics import axes,axlabels,yaxminima,yaxmaxima
|
||||||
('time','Time',0,1e5,'basic'),
|
|
||||||
('distance', 'Distance (m)',0,1e5,'basic'),
|
|
||||||
('cumdist', 'Cumulative Distance (m)',0,1e5,'basic'),
|
|
||||||
('hr','Heart Rate (bpm)',100,200,'basic'),
|
|
||||||
('spm', 'Stroke Rate (spm)',15,45,'basic'),
|
|
||||||
('pace', 'Pace (/500m)',1.0e3*210,1.0e3*75,'basic'),
|
|
||||||
('power', 'Power (Watt)',0,600,'basic'),
|
|
||||||
('averageforce', 'Average Drive Force (lbs)',0,200,'pro'),
|
|
||||||
('drivelength', 'Drive Length (m)',0.5,2.0,'pro'),
|
|
||||||
('peakforce', 'Peak Drive Force (lbs)',0,400,'pro'),
|
|
||||||
('forceratio', 'Average/Peak Force Ratio',0,1,'pro'),
|
|
||||||
('driveenergy', 'Work per Stroke (J)',0,1000,'pro'),
|
|
||||||
('drivespeed', 'Drive Speed (m/s)',0,4,'pro'),
|
|
||||||
('slip', 'Slip (degrees)',0,20,'pro'),
|
|
||||||
('catch', 'Catch (degrees)',-40,-75,'pro'),
|
|
||||||
('finish', 'Finish (degrees)',20,55,'pro'),
|
|
||||||
('wash', 'Wash (degrees)',0,30,'pro'),
|
|
||||||
('peakforceangle', 'Peak Force Angle (degrees)',-20,20,'pro'),
|
|
||||||
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
|
||||||
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
|
||||||
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
|
||||||
('None', 'None',0,1,'basic'),
|
|
||||||
)
|
|
||||||
|
|
||||||
axlabels = {ax[0]:ax[1] for ax in axes}
|
|
||||||
|
|
||||||
yaxminima = {ax[0]:ax[2] for ax in axes}
|
|
||||||
|
|
||||||
yaxmaxima = {ax[0]:ax[3] for ax in axes}
|
|
||||||
|
|
||||||
def tailwind(bearing,vwind,winddir):
|
def tailwind(bearing,vwind,winddir):
|
||||||
""" Calculates head-on head/tailwind in direction of rowing
|
""" Calculates head-on head/tailwind in direction of rowing
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
axes = (
|
||||||
|
('time','Time',0,1e5,'basic'),
|
||||||
|
('distance', 'Distance (m)',0,1e5,'basic'),
|
||||||
|
('cumdist', 'Cumulative Distance (m)',0,1e5,'basic'),
|
||||||
|
('hr','Heart Rate (bpm)',100,200,'basic'),
|
||||||
|
('spm', 'Stroke Rate (spm)',15,45,'basic'),
|
||||||
|
('pace', 'Pace (/500m)',1.0e3*210,1.0e3*75,'basic'),
|
||||||
|
('power', 'Power (Watt)',0,600,'basic'),
|
||||||
|
('averageforce', 'Average Drive Force (lbs)',0,200,'pro'),
|
||||||
|
('drivelength', 'Drive Length (m)',0.5,2.0,'pro'),
|
||||||
|
('peakforce', 'Peak Drive Force (lbs)',0,400,'pro'),
|
||||||
|
('forceratio', 'Average/Peak Force Ratio',0,1,'pro'),
|
||||||
|
('driveenergy', 'Work per Stroke (J)',0,1000,'pro'),
|
||||||
|
('drivespeed', 'Drive Speed (m/s)',0,4,'pro'),
|
||||||
|
('slip', 'Slip (degrees)',0,20,'pro'),
|
||||||
|
('catch', 'Catch (degrees)',-40,-75,'pro'),
|
||||||
|
('finish', 'Finish (degrees)',20,55,'pro'),
|
||||||
|
('wash', 'Wash (degrees)',0,30,'pro'),
|
||||||
|
('peakforceangle', 'Peak Force Angle (degrees)',-20,20,'pro'),
|
||||||
|
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
||||||
|
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
||||||
|
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
||||||
|
('None', 'None',0,1,'basic'),
|
||||||
|
)
|
||||||
|
|
||||||
|
axlabels = {ax[0]:ax[1] for ax in axes}
|
||||||
|
|
||||||
|
yaxminima = {ax[0]:ax[2] for ax in axes}
|
||||||
|
|
||||||
|
yaxmaxima = {ax[0]:ax[3] for ax in axes}
|
||||||
@@ -243,63 +243,17 @@ def auto_delete_teams_on_change(sender, instance, **kwargs):
|
|||||||
for team in teams:
|
for team in teams:
|
||||||
team.delete()
|
team.delete()
|
||||||
|
|
||||||
|
from rowers.metrics import axlabels
|
||||||
|
favchartlabelsx = axlabels.copy()
|
||||||
|
favchartlabelsy1 = axlabels.copy()
|
||||||
|
favchartlabelsy2 = axlabels.copy()
|
||||||
|
favchartlabelsy1.pop('None')
|
||||||
|
parchoicesy1 = list(sorted(favchartlabelsy1.items(), key = lambda x:x[1]))
|
||||||
|
parchoicesy2 = list(sorted(favchartlabelsy2.items(), key = lambda x:x[1]))
|
||||||
|
parchoicesx = list(sorted(favchartlabelsx.items(), key = lambda x:x[1]))
|
||||||
|
|
||||||
# Saving a chart as a favorite chart
|
# Saving a chart as a favorite chart
|
||||||
class FavoriteChart(models.Model):
|
class FavoriteChart(models.Model):
|
||||||
y1params = (
|
|
||||||
('hr','Heart Rate'),
|
|
||||||
('pace','Pace'),
|
|
||||||
('spm','SPM'),
|
|
||||||
('driveenergy','Work per Stroke'),
|
|
||||||
('power','Power'),
|
|
||||||
('drivelength','Drivelength'),
|
|
||||||
('averageforce','Average Force'),
|
|
||||||
('peakforce','Peak Force'),
|
|
||||||
('forceratio','Average/Peak Force Ratio'),
|
|
||||||
('drivespeed','Drive Speed'),
|
|
||||||
('wash','Wash'),
|
|
||||||
('slip','Slip'),
|
|
||||||
('catch','Catch Angle'),
|
|
||||||
('finish','Finish Angle'),
|
|
||||||
('peakforceangle','Peak Force Angle')
|
|
||||||
)
|
|
||||||
|
|
||||||
y2params = (
|
|
||||||
('hr','Heart Rate'),
|
|
||||||
('spm','SPM'),
|
|
||||||
('driveenergy','Work per Stroke'),
|
|
||||||
('power','Power'),
|
|
||||||
('drivelength','Drivelength'),
|
|
||||||
('averageforce','Average Force'),
|
|
||||||
('peakforce','Peak Force'),
|
|
||||||
('forceratio','Average/Peak Force Ratio'),
|
|
||||||
('drivespeed','Drive Speed'),
|
|
||||||
('wash','Wash'),
|
|
||||||
('slip','Slip'),
|
|
||||||
('catch','Catch Angle'),
|
|
||||||
('finish','Finish Angle'),
|
|
||||||
('peakforceangle','Peak Force Angle'),
|
|
||||||
('None','None')
|
|
||||||
)
|
|
||||||
|
|
||||||
xparams = (
|
|
||||||
('time','Time'),
|
|
||||||
('distance','Distance'),
|
|
||||||
('hr','Heart Rate'),
|
|
||||||
('spm','SPM'),
|
|
||||||
('driveenergy','Work per Stroke'),
|
|
||||||
('power','Power'),
|
|
||||||
('drivelength','Drivelength'),
|
|
||||||
('averageforce','Average Force'),
|
|
||||||
('peakforce','Peak Force'),
|
|
||||||
('forceratio','Average/Peak Force Ratio'),
|
|
||||||
('drivespeed','Drive Speed'),
|
|
||||||
('wash','Wash'),
|
|
||||||
('slip','Slip'),
|
|
||||||
('catch','Catch Angle'),
|
|
||||||
('finish','Finish Angle'),
|
|
||||||
('peakforceangle','Peak Force Angle'),
|
|
||||||
)
|
|
||||||
|
|
||||||
workouttypechoices = (
|
workouttypechoices = (
|
||||||
('ote','Erg/SkiErg'),
|
('ote','Erg/SkiErg'),
|
||||||
('otw','On The Water'),
|
('otw','On The Water'),
|
||||||
@@ -311,9 +265,9 @@ class FavoriteChart(models.Model):
|
|||||||
('scatter','Scatter Chart')
|
('scatter','Scatter Chart')
|
||||||
)
|
)
|
||||||
|
|
||||||
yparam1 = models.CharField(max_length=50,choices=y1params,verbose_name='Y1')
|
yparam1 = models.CharField(max_length=50,choices=parchoicesy1,verbose_name='Y1')
|
||||||
yparam2 = models.CharField(max_length=50,choices=y2params,verbose_name='Y2',default='None',blank=True)
|
yparam2 = models.CharField(max_length=50,choices=parchoicesy2,verbose_name='Y2',default='None',blank=True)
|
||||||
xparam = models.CharField(max_length=50,choices=xparams,verbose_name='X')
|
xparam = models.CharField(max_length=50,choices=parchoicesx,verbose_name='X')
|
||||||
plottype = models.CharField(max_length=50,choices=plottypes,
|
plottype = models.CharField(max_length=50,choices=plottypes,
|
||||||
default='line',
|
default='line',
|
||||||
verbose_name='Chart Type')
|
verbose_name='Chart Type')
|
||||||
|
|||||||
@@ -116,8 +116,8 @@ of a rowers technique.</p>
|
|||||||
<p>The online logbook provide the ability to record OTW sessions
|
<p>The online logbook provide the ability to record OTW sessions
|
||||||
manually, but none of the data from these sessions is captured.</p>
|
manually, but none of the data from these sessions is captured.</p>
|
||||||
|
|
||||||
<p>The Premium Features are available for only 5 EURO per year.
|
<p>The Premium Features are available for only 15 EURO per year.
|
||||||
Your 5 EURO will be used
|
Your 15 EURO will be used
|
||||||
to cover the hosting costs of the site.
|
to cover the hosting costs of the site.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,11 @@
|
|||||||
<link rel="stylesheet" href="/static/css/bokeh-0.12.3.min.css" type="text/css" />
|
<link rel="stylesheet" href="/static/css/bokeh-0.12.3.min.css" type="text/css" />
|
||||||
<link rel="stylesheet" href="/static/css/bokeh-widgets-0.12.3.min.css" type="text/css" />
|
<link rel="stylesheet" href="/static/css/bokeh-widgets-0.12.3.min.css" type="text/css" />
|
||||||
|
|
||||||
<link rel="shortcut icon" href="/static/img/myicon.png" />
|
<link rel="shortcut icon" href="/static/img/favicon.ico" type="image/x-icon" />
|
||||||
<link rel="shortcut icon" href="/static/img/favicon.ico" />
|
<link rel="icon" sizes="32x32" href="/static/img/favicon-32x32.png" type="image/png"/>
|
||||||
|
<link rel="icon" sizes="64x64" href="/static/img/favicon-64x64.png" type="image/png"/>
|
||||||
|
<link rel="icon" sizes="192x192" href="/static/img/favicon-192x192.png" type="image/png"/>
|
||||||
|
<link rel="icon" sizes="16x16" href="/static/img/favicon-16x16.png" type="image/png"/>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="initial-scale=0.67">
|
<meta name="viewport" content="initial-scale=0.67">
|
||||||
<title>Rowsandall</title>
|
<title>Rowsandall</title>
|
||||||
@@ -26,64 +29,71 @@
|
|||||||
<body>
|
<body>
|
||||||
{% analytical_body_top %}
|
{% analytical_body_top %}
|
||||||
<div class="container_12">
|
<div class="container_12">
|
||||||
<div id="logo" class="grid_2">
|
<div class="grid_12">
|
||||||
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
|
||||||
<p><a href="/"><img src="/static/img/logocroppedpro.gif"
|
|
||||||
alt="Rowsandall logo" width="110" heigt="110"></a></p>
|
|
||||||
{% else %}
|
|
||||||
<p><a href="/"><img src="/static/img/logocropped.gif"
|
|
||||||
alt="Rowsandall logo" width="110" heigt="110"></a></p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_10 omega">
|
<div class="grid_12">
|
||||||
<div class="grid_8 alpha">
|
<div id="logo" class="grid_6 alpha">
|
||||||
<div class="grid_1 prefix_4 alpha">
|
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
||||||
<p id="header">
|
<p><a href="/"><img src="/static/img/logo7.png"
|
||||||
<a class="button gray small" href="/rowers/videos">Videos</a></p>
|
alt="Rowsandall logo" height="80"></a></p>
|
||||||
</div>
|
{% else %}
|
||||||
<div class="grid_2">
|
<p><a href="/"><img src="/static/img/logo7.png"
|
||||||
<p id="header">
|
alt="Rowsandall logo" height="80"></a></p>
|
||||||
<a class="button gray small" href="http://analytics.rowsandall.com/">Rowing Analytics BLOG</a></p>
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_6 omega">
|
||||||
|
<div class="grid_4 alpha">
|
||||||
|
<div class="grid_1 alpha">
|
||||||
|
<p id="header">
|
||||||
|
<a class="button gray small" href="/rowers/videos">Videos</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_2">
|
||||||
|
<p id="header">
|
||||||
|
<a class="button gray small" href="http://analytics.rowsandall.com/">Rowing Analytics BLOG</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 omega">
|
||||||
|
<p id="header">
|
||||||
|
<a class="button gray small" href="/rowers/email">Contact</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_4 alpha">
|
||||||
|
<p>Free Data and Analysis. For Rowers. By Rowers.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid_1">
|
||||||
|
<div class="grid_1 tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/me/edit">{{ user.first_name }}</a>
|
||||||
|
</p>
|
||||||
|
<span class="tooltiptext">Edit user account, e.g. heart rate zones, power zones, email, teams</span>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
<p><a class="button gray small" href="{% url 'login' %}">login</a> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_1">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p><a class="button gray small" href="{% url 'logout' %}">logout</a></p>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_1 omega">
|
<div class="grid_1 omega">
|
||||||
<p id="header">
|
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
||||||
<a class="button gray small" href="/rowers/email">Contact</a></p>
|
<h6 class="graytext">Pro Member</h6>
|
||||||
</div>
|
{% else %}
|
||||||
|
<div class="grid_1"><a class="button green small" href="/rowers/promembership">Upgrade to Pro</a></div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_2 omega">
|
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<p><a class="button gray small" href="/password_change/">Password Change</a></p>
|
|
||||||
{% else %}
|
|
||||||
<p><a class="button gray small" href="/password_reset/">Forgot Password?</a></p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="grid_10 omega">
|
<div class="grid_12">
|
||||||
<div class="grid_4 suffix_2 alpha">
|
|
||||||
<p>Free Data and Analysis. For Rowers. By Rowers.</p>
|
|
||||||
</div>
|
|
||||||
<div class="grid_3">
|
|
||||||
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
|
||||||
<h6>Pro Member</h6>
|
|
||||||
{% else %}
|
|
||||||
<div class="grid_2 alpha"><a class="button green small" href="/rowers/promembership">Upgrade to Pro</a></div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<div class="grid_1 omega">
|
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<p><a class="button gray small" href="{% url 'logout' %}">logout</a></p>
|
|
||||||
|
|
||||||
{% else %}
|
|
||||||
<p> </p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid_10" omega>
|
|
||||||
<div class="grid_1 alpha tooltip">
|
<div class="grid_1 alpha tooltip">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<p><a class="button gray small" href="/rowers/workout/upload/">Upload</a></p>
|
<p><a class="button gray small" href="/rowers/workout/upload/">Upload</a></p>
|
||||||
@@ -112,7 +122,7 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_2 tooltip">
|
<div class="grid_1 tooltip">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<p>
|
<p>
|
||||||
<a class="button gray small" href="/rowers/list-graphs/">Graphs</a>
|
<a class="button gray small" href="/rowers/list-graphs/">Graphs</a>
|
||||||
@@ -161,17 +171,6 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_1 omega tooltip">
|
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<p>
|
|
||||||
<a class="button gray small" href="/rowers/me/edit">{{ user.first_name }}</a>
|
|
||||||
</p>
|
|
||||||
<span class="tooltiptext">Edit user account, e.g. heart rate zones, power zones, email, teams</span>
|
|
||||||
|
|
||||||
{% else %}
|
|
||||||
<p><a class="button gray small" href="{% url 'login' %}">login</a> </p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,261 @@
|
|||||||
|
{% load cookielaw_tags %}
|
||||||
|
{% load analytical %}
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<script src="/static/cookielaw/js/cookielaw.js"></script>
|
||||||
|
{% analytical_head_top %}
|
||||||
|
{% if GOOGLE_ANALYTICS_PROPERTY_ID %}
|
||||||
|
{% include "ga.html" %}
|
||||||
|
{% endif %}
|
||||||
|
<link rel="stylesheet" href="/static/css/bokeh-0.12.3.min.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/bokeh-widgets-0.12.3.min.css" type="text/css" />
|
||||||
|
|
||||||
|
<link rel="shortcut icon" href="/static/img/favicon.ico" type="image/x-icon" />
|
||||||
|
<link rel="icon" sizes="32x32" href="/static/img/favicon-32x32.png" type="image/png"/>
|
||||||
|
<link rel="icon" sizes="64x64" href="/static/img/favicon-64x64.png" type="image/png"/>
|
||||||
|
<link rel="icon" sizes="192x192" href="/static/img/favicon-192x192.png" type="image/png"/>
|
||||||
|
<link rel="icon" sizes="16x16" href="/static/img/favicon-16x16.png" type="image/png"/>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="initial-scale=0.67">
|
||||||
|
<title>Rowsandall</title>
|
||||||
|
<link rel="stylesheet" href="/static/css/reset.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/text.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/960_12_col.css" />
|
||||||
|
<link rel="stylesheet" href="/static/css/rowsandall.css" />
|
||||||
|
{% block meta %} {% endblock %}
|
||||||
|
{% analytical_head_bottom %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.splash {
|
||||||
|
background-color: transparent;
|
||||||
|
background-image: url("/static/img/landing1.jpg");
|
||||||
|
-webkit-background-size: cover;
|
||||||
|
-moz-background-size: cover;
|
||||||
|
-o-background-size: cover;
|
||||||
|
background-size: cover;
|
||||||
|
min-height: 759px;
|
||||||
|
min-width: 1024px;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
.container_12 {background-color: rgba(255,255,255,0.0);}
|
||||||
|
.container_top {background-color: rgba(255,255,255,0.7);}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="splash">
|
||||||
|
{% analytical_body_top %}
|
||||||
|
<div class="container_top">
|
||||||
|
<div class="container_12">
|
||||||
|
<div class="grid_12">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="grid_12">
|
||||||
|
<div id="logo" class="grid_6 alpha">
|
||||||
|
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
||||||
|
<p><a href="/"><img src="/static/img/logo7.png"
|
||||||
|
alt="Rowsandall logo" height="80"></a></p>
|
||||||
|
{% else %}
|
||||||
|
<p><a href="/"><img src="/static/img/logo7.png"
|
||||||
|
alt="Rowsandall logo" height="80"></a></p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_6 omega">
|
||||||
|
<div class="grid_4 alpha">
|
||||||
|
<div class="grid_1 alpha">
|
||||||
|
<p id="header">
|
||||||
|
<a class="button gray small" href="/rowers/videos">Videos</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_2">
|
||||||
|
<p id="header">
|
||||||
|
<a class="button gray small" href="http://analytics.rowsandall.com/">Rowing Analytics BLOG</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 omega">
|
||||||
|
<p id="header">
|
||||||
|
<a class="button gray small" href="/rowers/email">Contact</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_4 alpha">
|
||||||
|
<p>Free Data and Analysis. For Rowers. By Rowers.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid_1">
|
||||||
|
<div class="grid_1 tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/me/edit">{{ user.first_name }}</a>
|
||||||
|
</p>
|
||||||
|
<span class="tooltiptext">Edit user account, e.g. heart rate zones, power zones, email, teams</span>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
<p><a class="button gray small" href="{% url 'login' %}">login</a> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_1">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p><a class="button gray small" href="{% url 'logout' %}">logout</a></p>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 omega">
|
||||||
|
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
||||||
|
<h6 class="graytext">Pro Member</h6>
|
||||||
|
{% else %}
|
||||||
|
<div class="grid_1"><a class="button green small" href="/rowers/promembership">Upgrade to Pro</a></div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid_12">
|
||||||
|
<div class="grid_1 alpha tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p><a class="button gray small" href="/rowers/workout/upload/">Upload</a></p>
|
||||||
|
<span class="tooltiptext">Upload CSV, TCX, FIT data files to rowsandall.com</span>
|
||||||
|
{% else %}
|
||||||
|
<p><a class="button green small" href="/rowers/register">Register (free)</a></p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/imports/">Import</a>
|
||||||
|
</p>
|
||||||
|
<span class="tooltiptext">Import workouts from Strava, SportTracks, and C2 logbook</span>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2 tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/list-workouts/">Workouts</a>
|
||||||
|
</p>
|
||||||
|
<span class="tooltiptext">See your list of workouts</span>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/list-graphs/">Graphs</a>
|
||||||
|
</p>
|
||||||
|
<span class="tooltiptext">See your most recent charts</span>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_2 tooltip">
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/analysis">Analysis</a>
|
||||||
|
</p>
|
||||||
|
<span class="tooltiptext">Analysis of workouts over a period of time</span>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 tooltip">
|
||||||
|
{% if user.is_authenticated and teams %}
|
||||||
|
<div class="grid_1 alpha dropdown">
|
||||||
|
<button class="grid_1 alpha button gray small dropbtn">
|
||||||
|
Teams
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for t in teams %}
|
||||||
|
<a class="button gray small" href="/rowers/list-workouts/team/{{ t.id }}/">{{ t.name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span class="tooltiptext">See recent workouts for your team</span>
|
||||||
|
{% elif user.is_authenticated and user.rower.team.all %}
|
||||||
|
<div class="grid_1 alpha dropdown">
|
||||||
|
<button class="grid_1 alpha button gray small dropbtn">
|
||||||
|
Teams
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-content">
|
||||||
|
{% for t in user.rower.team.all %}
|
||||||
|
<a class="button gray small" href="/rowers/list-workouts/team/{{ t.id }}/">{{ t.name }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span class="tooltiptext">See recent workouts for your team</span>
|
||||||
|
{% else %}
|
||||||
|
<p> </p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="clear"></div>
|
||||||
|
<div class="grid_12">
|
||||||
|
{% block message %}
|
||||||
|
{% if message %}
|
||||||
|
<p class="message">
|
||||||
|
{{ message }}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
{% if successmessage %}
|
||||||
|
<p class="successmessage">
|
||||||
|
{{ successmessage }}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div class="grid_12">
|
||||||
|
{% load tz %}
|
||||||
|
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
|
||||||
|
<div class="grid_12 omega" >
|
||||||
|
{% block footer %}
|
||||||
|
<p id="footer">{{ versionstring }}</p>
|
||||||
|
<div class="grid_2 alpha">
|
||||||
|
<p id="footer"><a href="/rowers/email/">© Sander Roosendaal</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="/rowers/about">About</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_2">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="/rowers/developers">Developers</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="/rowers/legal">Legal</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_2">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="/rowers/partners">Partners</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="/rowers/physics">Physics</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_2">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="http://analytics.rowsandall.com/">Rowing Analytics BLOG</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="grid_1 omega">
|
||||||
|
<p id="footer">
|
||||||
|
<a href="/rowers/email">Contact</a></p>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% cookielaw_banner %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- end container -->
|
||||||
|
{% analytical_body_bottom %}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "basefront.html" %}
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
{% load rowerfilters %}
|
{% load rowerfilters %}
|
||||||
|
|
||||||
@@ -6,11 +6,6 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="grid_12">
|
|
||||||
<p class="midden">
|
|
||||||
<a title="By Photoglob Zurich, reprinted by Detroit Publishing Co. [Public domain], via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File%3AHenley_Regatta%2C_Henley-on-Thames%2C_England%2C_1890s.jpg"><img width="512" alt="Henley Regatta, Henley-on-Thames, England, 1890s" src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Henley_Regatta%2C_Henley-on-Thames%2C_England%2C_1890s.jpg/512px-Henley_Regatta%2C_Henley-on-Thames%2C_England%2C_1890s.jpg"/></a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid_12">
|
<div class="grid_12">
|
||||||
<p class="midden">
|
<p class="midden">
|
||||||
Compatible with:
|
Compatible with:
|
||||||
@@ -27,4 +22,5 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
</table>
|
</table>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_2 suffix_6 omega">
|
<div class="grid_2 suffix_6 alpha">
|
||||||
<input name='daterange' class="button green" type="submit" value="Submit"> </form>
|
<input name='daterange' class="button green" type="submit" value="Submit"> </form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -42,10 +42,10 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if workouts %}
|
{% if workouts %}
|
||||||
<table width="100%" class="listtable">
|
<table width="100%" class="listtable shortpadded">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th> Date</th>
|
<th style="width:80px"> Date</th>
|
||||||
<th> Time</th>
|
<th> Time</th>
|
||||||
<th> Name</th>
|
<th> Name</th>
|
||||||
<th> Type</th>
|
<th> Type</th>
|
||||||
@@ -54,8 +54,8 @@
|
|||||||
<th> Avg HR </th>
|
<th> Avg HR </th>
|
||||||
<th> Max HR </th>
|
<th> Max HR </th>
|
||||||
{% if not team %}
|
{% if not team %}
|
||||||
<th> Delete</th>
|
<th> </th>
|
||||||
<th> Export</th>
|
<th> </th>
|
||||||
{% else %}
|
{% else %}
|
||||||
<th colspan="2">
|
<th colspan="2">
|
||||||
Owner
|
Owner
|
||||||
@@ -89,17 +89,17 @@
|
|||||||
<td> {{ workout.maxhr }} </td>
|
<td> {{ workout.maxhr }} </td>
|
||||||
{% if not team %}
|
{% if not team %}
|
||||||
<td>
|
<td>
|
||||||
<a class="button red small" href="/rowers/workout/{{ workout.id }}/deleteconfirm">Delete
|
<a class="small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/export">Export</a>
|
|
||||||
</td>
|
</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
{{ workout.user.user.first_name }} {{ workout.user.user.last_name }}
|
{{ workout.user.user.first_name }} {{ workout.user.user.last_name }}
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td> <a class="button blue small" href="/rowers/workout/{{ workout.id }}/flexchart">Flex</a> </td>
|
<td> <a class="small" href="/rowers/workout/{{ workout.id }}/flexchart">Flex</a> </td>
|
||||||
|
<td>
|
||||||
|
<a class="small" href="/rowers/workout/{{ workout.id }}/deleteconfirm">Delete
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
@@ -116,7 +116,9 @@
|
|||||||
{% if team %}
|
{% if team %}
|
||||||
<div class="grid_4" id="teambuttons">
|
<div class="grid_4" id="teambuttons">
|
||||||
<div class="grid_3 alpha">
|
<div class="grid_3 alpha">
|
||||||
<a class="button gray small" href="/rowers/team-compare-select/team/{{ team.id }}/">Multi Workout Compare</a>
|
<p>
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<div class="grid_6 alpha">
|
<div class="grid_6 alpha">
|
||||||
|
|
||||||
<p>Donations are welcome to keep this web site going. To help cover the hosting
|
<p>Donations are welcome to keep this web site going. To help cover the hosting
|
||||||
costs, I have created a <q>Pro</q> membership option (for only 5 EURO per year). Once I process your
|
costs, I have created a <q>Pro</q> membership option (for only 15 EURO per year). Once I process your
|
||||||
donation, I will give you access to some <q>special</q> features on this
|
donation, I will give you access to some <q>special</q> features on this
|
||||||
website. </p>
|
website. </p>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "basefront.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,14 @@
|
|||||||
<div class="grid_6 alpha">
|
<div class="grid_6 alpha">
|
||||||
<p>
|
<p>
|
||||||
<h2>Account Information</h2>
|
<h2>Account Information</h2>
|
||||||
|
<div class="grid_6 alpha">
|
||||||
|
<div class="grid_2 suffix_4 alpha">
|
||||||
|
<p>
|
||||||
|
<a class="button gray small" href="/password_change/">Password Change</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
{% if userform.errors %}
|
{% if userform.errors %}
|
||||||
<p style="color: red;">
|
<p style="color: red;">
|
||||||
Please correct the error{{ form.errors|pluralize }} below.
|
Please correct the error{{ form.errors|pluralize }} below.
|
||||||
@@ -113,6 +121,8 @@
|
|||||||
<input class="button green" type="submit" value="Save">
|
<input class="button green" type="submit" value="Save">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_6 omega">
|
<div class="grid_6 omega">
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
<div class="grid_12">
|
<div class="grid_12 alpha">
|
||||||
<div class="grid_8 suffix_4">
|
<div class="grid_8 suffix_4 alpha">
|
||||||
{% include "teambuttons.html" with teamid=team.id %}
|
{% include "teambuttons.html" with teamid=team.id %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
<div class="grid_2 alpha">
|
<div class="grid_2 alpha">
|
||||||
<a class="button gray small" href="/rowers/list-workouts/team/{{ teamid }}/">Team Workouts</a>
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/list-workouts/team/{{ teamid }}/">Team Workouts</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_2">
|
<div class="grid_2">
|
||||||
<a class="button gray small" href="/rowers/team-compare-select/team/{{ teamid }}/">Multi Compare</a>
|
<p>
|
||||||
|
<a class="button gray small" href="/rowers/team-compare-select/team/{{ teamid }}/">Multi Compare</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_2 suffix_2 omega">
|
<div class="grid_2 suffix_2 omega">
|
||||||
|
<p>
|
||||||
<a class="button gray small" href="/rowers/team/{{ teamid }}/">Team Page</a>
|
<a class="button gray small" href="/rowers/team/{{ teamid }}/">Team Page</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
body {
|
body {
|
||||||
min-width: 960px;
|
min-width: 960px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* `Container
|
/* `Container
|
||||||
|
|||||||
@@ -5,13 +5,14 @@ html {
|
|||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background: #edc;
|
/* background: #edc; */
|
||||||
color: #333;
|
color: #333;
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
height: auto;
|
height: auto;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
a {
|
a {
|
||||||
/* color: #fff; */
|
/* color: #fff; */
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -58,6 +59,9 @@ th {
|
|||||||
.listtable thead th {
|
.listtable thead th {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.shortpadded td { padding: 3px 3px }
|
||||||
|
|
||||||
.paddedtable td { padding: 1px 20px }
|
.paddedtable td { padding: 1px 20px }
|
||||||
|
|
||||||
.cortable {
|
.cortable {
|
||||||
@@ -155,6 +159,11 @@ th.rotate > div > span {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.transparentbutton {
|
||||||
|
padding: 1px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.tooltip {
|
.tooltip {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@@ -193,9 +202,9 @@ th.rotate > div > span {
|
|||||||
display: block;
|
display: block;
|
||||||
padding: .2em .5em .2em .5em;
|
padding: .2em .5em .2em .5em;
|
||||||
zoom: 1;
|
zoom: 1;
|
||||||
border-radius: .5em;
|
/* border-radius: .5em; */
|
||||||
-moz-border-radius: .5em;
|
/* -moz-border-radius: .5em; */
|
||||||
-webkit-border-radius: .5em;
|
/* -webkit-border-radius: .5em; */
|
||||||
text-align: left;
|
text-align: left;
|
||||||
border: solid 1px #333;
|
border: solid 1px #333;
|
||||||
}
|
}
|
||||||
@@ -208,13 +217,13 @@ th.rotate > div > span {
|
|||||||
color: white;
|
color: white;
|
||||||
padding: 0.2em 0.0em 0.2em 0.0em;
|
padding: 0.2em 0.0em 0.2em 0.0em;
|
||||||
zoom: 1;
|
zoom: 1;
|
||||||
border-radius: .5em;
|
/* border-radius: .5em; */
|
||||||
-moz-border-radius: .5em;
|
/* -moz-border-radius: .5em; */
|
||||||
-webkit-border-radius: .5em;
|
/* -webkit-border-radius: .5em; */
|
||||||
-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
|
/* -box-shadow: 0 1px 3px rgba(0,0,0,0.5); */
|
||||||
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
|
/* -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5); */
|
||||||
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
|
/* -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5); /*
|
||||||
text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
|
/* text-shadow: 0 -1px 1px rgba(0,0,0,0.25); */
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,10 +238,10 @@ th.rotate > div > span {
|
|||||||
border-radius: .5em;
|
border-radius: .5em;
|
||||||
-moz-border-radius: .5em;
|
-moz-border-radius: .5em;
|
||||||
-webkit-border-radius: .5em;
|
-webkit-border-radius: .5em;
|
||||||
-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
|
/* -box-shadow: 0 1px 3px rgba(0,0,0,0.5); */
|
||||||
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
|
/* -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5); */
|
||||||
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5);
|
/* -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5); */
|
||||||
text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
|
/* text-shadow: 0 -1px 1px rgba(0,0,0,0.25); */
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,9 +251,6 @@ a.button {
|
|||||||
|
|
||||||
.button:hover {
|
.button:hover {
|
||||||
background: #d8e6ff; /* old browsers */
|
background: #d8e6ff; /* old browsers */
|
||||||
background: -moz-linear-gradient(top, #d8e6ff 0%, #8da8d7 100%); /* firefox */
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d8e6ff), color-stop(100%,#8da8d7)); /* webkit */
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d8e6ff', endColorstr='#8da8d7',GradientType=0 ); /* ie */
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,43 +276,25 @@ a.button {
|
|||||||
color: #d7d7d7;
|
color: #d7d7d7;
|
||||||
border: solid 1px #333;
|
border: solid 1px #333;
|
||||||
background: #333;
|
background: #333;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#666), to(#000));
|
|
||||||
background: -moz-linear-gradient(top, #666, #000);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#000000');
|
|
||||||
}
|
}
|
||||||
.black:hover {
|
.black:hover {
|
||||||
background: #000;
|
background: #000;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#444), to(#000));
|
|
||||||
background: -moz-linear-gradient(top, #444, #000);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#444444', endColorstr='#000000');
|
|
||||||
}
|
}
|
||||||
.black:active {
|
.black:active {
|
||||||
color: #666;
|
color: #666;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#000), to(#444));
|
|
||||||
background: -moz-linear-gradient(top, #000, #444);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#000000', endColorstr='#666666');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* gray */
|
/* gray */
|
||||||
.gray {
|
.blue {
|
||||||
color: #e9e9e9;
|
color: #e9e9e9;
|
||||||
border: solid 1px #555;
|
border: solid 1px #555;
|
||||||
background: #6e6e6e;
|
background: #6e6e6e;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#888), to(#575757));
|
|
||||||
background: -moz-linear-gradient(top, #888, #575757);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#888888', endColorstr='#575757');
|
|
||||||
}
|
}
|
||||||
.gray:hover {
|
.blue:hover {
|
||||||
background: #616161;
|
background: #616161;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#757575), to(#4b4b4b));
|
|
||||||
background: -moz-linear-gradient(top, #757575, #4b4b4b);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#757575', endColorstr='#4b4b4b');
|
|
||||||
}
|
}
|
||||||
.gray:active {
|
.blue:active {
|
||||||
color: #afafaf;
|
color: #afafaf;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#575757), to(#888));
|
|
||||||
background: -moz-linear-gradient(top, #575757, #888);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#575757', endColorstr='#888888');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* white */
|
/* white */
|
||||||
@@ -314,21 +302,12 @@ a.button {
|
|||||||
color: #606060;
|
color: #606060;
|
||||||
border: solid 1px #b7b7b7;
|
border: solid 1px #b7b7b7;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
|
|
||||||
background: -moz-linear-gradient(top, #fff, #ededed);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
|
|
||||||
}
|
}
|
||||||
.white:hover {
|
.white:hover {
|
||||||
background: #ededed;
|
background: #ededed;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dcdcdc));
|
|
||||||
background: -moz-linear-gradient(top, #fff, #dcdcdc);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dcdcdc');
|
|
||||||
}
|
}
|
||||||
.white:active {
|
.white:active {
|
||||||
color: #999;
|
color: #999;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#fff));
|
|
||||||
background: -moz-linear-gradient(top, #ededed, #fff);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#ffffff');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* orange */
|
/* orange */
|
||||||
@@ -336,21 +315,12 @@ a.button {
|
|||||||
color: #fef4e9;
|
color: #fef4e9;
|
||||||
border: solid 1px #da7c0c;
|
border: solid 1px #da7c0c;
|
||||||
background: #f78d1d;
|
background: #f78d1d;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#faa51a), to(#f47a20));
|
|
||||||
background: -moz-linear-gradient(top, #faa51a, #f47a20);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#faa51a', endColorstr='#f47a20');
|
|
||||||
}
|
}
|
||||||
.orange:hover {
|
.orange:hover {
|
||||||
background: #f47c20;
|
background: #f47c20;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#f88e11), to(#f06015));
|
|
||||||
background: -moz-linear-gradient(top, #f88e11, #f06015);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f88e11', endColorstr='#f06015');
|
|
||||||
}
|
}
|
||||||
.orange:active {
|
.orange:active {
|
||||||
color: #fcd3a5;
|
color: #fcd3a5;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#f47a20), to(#faa51a));
|
|
||||||
background: -moz-linear-gradient(top, #f47a20, #faa51a);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f47a20', endColorstr='#faa51a');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* red */
|
/* red */
|
||||||
@@ -358,43 +328,30 @@ a.button {
|
|||||||
color: #faddde;
|
color: #faddde;
|
||||||
border: solid 1px #980c10;
|
border: solid 1px #980c10;
|
||||||
background: #d81b21;
|
background: #d81b21;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#ed1c24), to(#aa1317));
|
|
||||||
background: -moz-linear-gradient(top, #ed1c24, #aa1317);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed1c24', endColorstr='#aa1317');
|
|
||||||
}
|
}
|
||||||
.red:hover {
|
.red:hover {
|
||||||
background: #b61318;
|
background: #b61318;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#c9151b), to(#a11115));
|
|
||||||
background: -moz-linear-gradient(top, #c9151b, #a11115);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#c9151b', endColorstr='#a11115');
|
|
||||||
}
|
}
|
||||||
.red:active {
|
.red:active {
|
||||||
color: #de898c;
|
color: #de898c;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#aa1317), to(#ed1c24));
|
|
||||||
background: -moz-linear-gradient(top, #aa1317, #ed1c24);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#aa1317', endColorstr='#ed1c24');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* blue */
|
/* blue */
|
||||||
.blue {
|
.graytext {
|
||||||
color: #d9eef7;
|
color: #27aae2;
|
||||||
border: solid 1px #0076a3;
|
|
||||||
background: #0095cd;
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#00adee), to(#0078a5));
|
|
||||||
background: -moz-linear-gradient(top, #00adee, #0078a5);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
|
|
||||||
}
|
}
|
||||||
.blue:hover {
|
|
||||||
background: #007ead;
|
.gray {
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#0095cc), to(#00678e));
|
color: #fae7e9;
|
||||||
background: -moz-linear-gradient(top, #0095cc, #00678e);
|
border: solid 1px #27aae2;
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0095cc', endColorstr='#00678e');
|
background: #27aae2;
|
||||||
}
|
}
|
||||||
.blue:active {
|
.gray:hover {
|
||||||
color: #80bed6;
|
background: #1c74bb;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#0078a5), to(#00adee));
|
border: solid 1px #27aae2;
|
||||||
background: -moz-linear-gradient(top, #0078a5, #00adee);
|
}
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0078a5', endColorstr='#00adee');
|
.gray:active {
|
||||||
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* rosy */
|
/* rosy */
|
||||||
@@ -402,21 +359,12 @@ a.button {
|
|||||||
color: #fae7e9;
|
color: #fae7e9;
|
||||||
border: solid 1px #b73948;
|
border: solid 1px #b73948;
|
||||||
background: #da5867;
|
background: #da5867;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#f16c7c), to(#bf404f));
|
|
||||||
background: -moz-linear-gradient(top, #f16c7c, #bf404f);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f16c7c', endColorstr='#bf404f');
|
|
||||||
}
|
}
|
||||||
.rosy:hover {
|
.rosy:hover {
|
||||||
background: #ba4b58;
|
background: #ba4b58;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#cf5d6a), to(#a53845));
|
|
||||||
background: -moz-linear-gradient(top, #cf5d6a, #a53845);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cf5d6a', endColorstr='#a53845');
|
|
||||||
}
|
}
|
||||||
.rosy:active {
|
.rosy:active {
|
||||||
color: #dca4ab;
|
color: #dca4ab;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#bf404f), to(#f16c7c));
|
|
||||||
background: -moz-linear-gradient(top, #bf404f, #f16c7c);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#bf404f', endColorstr='#f16c7c');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* green */
|
/* green */
|
||||||
@@ -424,21 +372,12 @@ a.button {
|
|||||||
color: #e8f0de;
|
color: #e8f0de;
|
||||||
border: solid 1px #538312;
|
border: solid 1px #538312;
|
||||||
background: #64991e;
|
background: #64991e;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#7db72f), to(#4e7d0e));
|
|
||||||
background: -moz-linear-gradient(top, #7db72f, #4e7d0e);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7db72f', endColorstr='#4e7d0e');
|
|
||||||
}
|
}
|
||||||
.green:hover {
|
.green:hover {
|
||||||
background: #538018;
|
background: #538018;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#6b9d28), to(#436b0c));
|
|
||||||
background: -moz-linear-gradient(top, #6b9d28, #436b0c);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6b9d28', endColorstr='#436b0c');
|
|
||||||
}
|
}
|
||||||
.green:active {
|
.green:active {
|
||||||
color: #a9c08c;
|
color: #a9c08c;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#4e7d0e), to(#7db72f));
|
|
||||||
background: -moz-linear-gradient(top, #4e7d0e, #7db72f);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e7d0e', endColorstr='#7db72f');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pink */
|
/* pink */
|
||||||
@@ -446,21 +385,12 @@ a.button {
|
|||||||
color: #feeef5;
|
color: #feeef5;
|
||||||
border: solid 1px #d2729e;
|
border: solid 1px #d2729e;
|
||||||
background: #f895c2;
|
background: #f895c2;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#feb1d3), to(#f171ab));
|
|
||||||
background: -moz-linear-gradient(top, #feb1d3, #f171ab);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#feb1d3', endColorstr='#f171ab');
|
|
||||||
}
|
}
|
||||||
.pink:hover {
|
.pink:hover {
|
||||||
background: #d57ea5;
|
background: #d57ea5;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#f4aacb), to(#e86ca4));
|
|
||||||
background: -moz-linear-gradient(top, #f4aacb, #e86ca4);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f4aacb', endColorstr='#e86ca4');
|
|
||||||
}
|
}
|
||||||
.pink:active {
|
.pink:active {
|
||||||
color: #f3c3d9;
|
color: #f3c3d9;
|
||||||
background: -webkit-gradient(linear, left top, left bottom, from(#f171ab), to(#feb1d3));
|
|
||||||
background: -moz-linear-gradient(top, #f171ab, #feb1d3);
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f171ab', endColorstr='#feb1d3');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -509,7 +439,7 @@ a.button {
|
|||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
min-width: 160px;
|
min-width: 160px;
|
||||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
/* box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); */
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 541 KiB |
|
After Width: | Height: | Size: 518 KiB |
|
After Width: | Height: | Size: 429 KiB |
|
After Width: | Height: | Size: 459 KiB |
|
After Width: | Height: | Size: 535 KiB |
|
After Width: | Height: | Size: 616 KiB |
|
After Width: | Height: | Size: 885 KiB |
|
After Width: | Height: | Size: 190 KiB |
|
After Width: | Height: | Size: 754 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"name": "App",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-36x36.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "0.75"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-48x48.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-72x72.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "1.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-96x96.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "2.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-144x144.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "4.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 525 KiB |