Merge branch 'release/v18.1.1'
This commit is contained in:
@@ -251,7 +251,8 @@ class HistorySelectForm(forms.Form):
|
|||||||
metricchoices = (
|
metricchoices = (
|
||||||
("time","duration"),
|
("time","duration"),
|
||||||
("TRIMP","trimp"),
|
("TRIMP","trimp"),
|
||||||
("rScore","rscore")
|
("rScore","rscore"),
|
||||||
|
("distance","distance")
|
||||||
)
|
)
|
||||||
|
|
||||||
yaxis = forms.ChoiceField(initial='time',choices=metricchoices,label="Measure by")
|
yaxis = forms.ChoiceField(initial='time',choices=metricchoices,label="Measure by")
|
||||||
|
|||||||
@@ -683,7 +683,7 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
rscores = []
|
rscores = []
|
||||||
trimps = []
|
trimps = []
|
||||||
links = []
|
links = []
|
||||||
|
distances = []
|
||||||
|
|
||||||
rowersinitials = {}
|
rowersinitials = {}
|
||||||
seen = ['seen']
|
seen = ['seen']
|
||||||
@@ -719,6 +719,7 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
du = w.duration.hour*60+w.duration.minute
|
du = w.duration.hour*60+w.duration.minute
|
||||||
trimp = w.trimp
|
trimp = w.trimp
|
||||||
rscore = w.rscore
|
rscore = w.rscore
|
||||||
|
distance = w.distance
|
||||||
if rscore == 0: # pragma: no cover
|
if rscore == 0: # pragma: no cover
|
||||||
rscore = w.hrtss
|
rscore = w.hrtss
|
||||||
|
|
||||||
@@ -731,6 +732,7 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
durations.append(du)
|
durations.append(du)
|
||||||
trimps.append(trimp)
|
trimps.append(trimp)
|
||||||
rscores.append(rscore)
|
rscores.append(rscore)
|
||||||
|
distances.append(distance)
|
||||||
links.append(
|
links.append(
|
||||||
"{siteurl}/rowers/workout/{code}/".format(
|
"{siteurl}/rowers/workout/{code}/".format(
|
||||||
siteurl = settings.SITE_URL,
|
siteurl = settings.SITE_URL,
|
||||||
@@ -769,6 +771,7 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
durations.append(0)
|
durations.append(0)
|
||||||
trimps.append(0)
|
trimps.append(0)
|
||||||
rscores.append(0)
|
rscores.append(0)
|
||||||
|
distances.append(0)
|
||||||
links.append('')
|
links.append('')
|
||||||
types.append('rower')
|
types.append('rower')
|
||||||
|
|
||||||
@@ -791,6 +794,7 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
'rscore':rscores,
|
'rscore':rscores,
|
||||||
'type':types,
|
'type':types,
|
||||||
'rower':rowers,
|
'rower':rowers,
|
||||||
|
'distance':distances,
|
||||||
'link':links,
|
'link':links,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -805,9 +809,15 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
elif yaxis == 'TRIMP':
|
elif yaxis == 'TRIMP':
|
||||||
df.drop('duration',inplace=True,axis='columns')
|
df.drop('duration',inplace=True,axis='columns')
|
||||||
df.drop('rscore',inplace=True,axis='columns')
|
df.drop('rscore',inplace=True,axis='columns')
|
||||||
|
df.drop('distance',inplace=True, axis='columns')
|
||||||
elif yaxis == 'rScore': # pragma: no cover
|
elif yaxis == 'rScore': # pragma: no cover
|
||||||
df.drop('duration',inplace=True,axis='columns')
|
df.drop('duration',inplace=True,axis='columns')
|
||||||
df.drop('trimp',inplace=True,axis='columns' )
|
df.drop('trimp',inplace=True,axis='columns' )
|
||||||
|
df.drop('distance',inplace=True, axis='columns')
|
||||||
|
elif yaxis == 'distance':
|
||||||
|
df.drop('duration',inplace=True,axis='columns')
|
||||||
|
df.drop('trimp', inplace=True,axis='columns')
|
||||||
|
df.drop('rscore',inplace=True,axis='columns')
|
||||||
|
|
||||||
df['color'] = df['type'].apply(lambda x:mapcolors(x))
|
df['color'] = df['type'].apply(lambda x:mapcolors(x))
|
||||||
|
|
||||||
@@ -848,11 +858,15 @@ def interactive_activitychart2(workouts,startdate,enddate,stack='type',toolbar_l
|
|||||||
p.yaxis.axis_label = 'Duration (h)'
|
p.yaxis.axis_label = 'Duration (h)'
|
||||||
elif yaxis == 'TRIMP':
|
elif yaxis == 'TRIMP':
|
||||||
p.yaxis.axis_label = 'TRIMP'
|
p.yaxis.axis_label = 'TRIMP'
|
||||||
|
elif yaxis == 'distance':
|
||||||
|
p.yaxis.axis_label = 'Distance (m)'
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
p.yaxis.axis_label = 'rScore'
|
p.yaxis.axis_label = 'rScore'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
p.plot_width=550
|
p.plot_width=550
|
||||||
p.plot_height=350
|
p.plot_height=350
|
||||||
p.toolbar_location = toolbar_location
|
p.toolbar_location = toolbar_location
|
||||||
|
|||||||
@@ -520,7 +520,7 @@ class TeamRequest(models.Model):
|
|||||||
|
|
||||||
from rowers.utils import (
|
from rowers.utils import (
|
||||||
workflowleftpanel,workflowmiddlepanel,
|
workflowleftpanel,workflowmiddlepanel,
|
||||||
defaultleft,defaultmiddle,landingpages,
|
defaultleft,defaultmiddle,landingpages,landingpages2,
|
||||||
steps_read_fit, steps_write_fit, ps_dict_order
|
steps_read_fit, steps_write_fit, ps_dict_order
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -993,6 +993,10 @@ class Rower(models.Model):
|
|||||||
max_length=200,
|
max_length=200,
|
||||||
choices=landingpages,
|
choices=landingpages,
|
||||||
verbose_name="Default Landing Page")
|
verbose_name="Default Landing Page")
|
||||||
|
defaultlandingpage2 = models.CharField(default='workout_flexchart_stacked_view',
|
||||||
|
max_length=200,
|
||||||
|
choices=landingpages2,
|
||||||
|
verbose_name="Alternative Landing Page")
|
||||||
|
|
||||||
# Access tokens
|
# Access tokens
|
||||||
c2token = models.CharField(default='',max_length=200,blank=True,null=True)
|
c2token = models.CharField(default='',max_length=200,blank=True,null=True)
|
||||||
@@ -4280,6 +4284,7 @@ class AccountRowerForm(ModelForm):
|
|||||||
'fav_analysis',
|
'fav_analysis',
|
||||||
'usersmooth',
|
'usersmooth',
|
||||||
'defaultlandingpage',
|
'defaultlandingpage',
|
||||||
|
'defaultlandingpage2',
|
||||||
'offercoaching','autojoin','emailalternatives']
|
'offercoaching','autojoin','emailalternatives']
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
|
|||||||
@@ -35,46 +35,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li class="grid_2" style="min-height:200px;">
|
<li class="grid_4">
|
||||||
<p>
|
|
||||||
Total meters: {{ totalmeters }}. Total time {{ totalhours }}:{{ totalminutes }}h.
|
|
||||||
<a href="/rowers/history/">Dig deeper</a>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Activity chart by
|
|
||||||
<a href="{{ request.get_path }}?yaxis=trimp">TRIMP</a>,
|
|
||||||
<a href="{{ request.get_path }}?yaxis=rscore">rScore</a>,
|
|
||||||
<a href="{{ request.get_path }}?yaxis=duration">Time</a>.
|
|
||||||
</p>
|
|
||||||
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-widgets-2.2.3.min.css" type="text/css" />
|
|
||||||
<script src="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.js"></script>
|
|
||||||
<script async="true" type="text/text/javascript">
|
|
||||||
Bokeh.set_log_level("info")
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{{ interactiveplot |safe }}
|
|
||||||
|
|
||||||
{{ the_div |safe }}
|
|
||||||
</li>
|
|
||||||
<li class="grid_2">
|
|
||||||
<p>Filter on date
|
|
||||||
<form enctype="multipart/form-data" method="post">
|
|
||||||
<table>
|
|
||||||
{{ dateform.as_table }}
|
|
||||||
</table>
|
|
||||||
{% csrf_token %}
|
|
||||||
</p>
|
|
||||||
<p>and keyword</p>
|
|
||||||
<p>
|
|
||||||
{{ searchform }}
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<input name='daterange' type="submit" value="Select workouts">
|
|
||||||
</form>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<p>
|
|
||||||
<span>
|
<span>
|
||||||
{% if workouts.has_previous %}
|
{% if workouts.has_previous %}
|
||||||
{% if request.GET.q %}
|
{% if request.GET.q %}
|
||||||
@@ -118,7 +79,6 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</p>
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if workouts %}
|
{% if workouts %}
|
||||||
@@ -137,7 +97,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="workoutcontainer">
|
<div class="workoutcontainer">
|
||||||
<div>
|
<div class="icondiv">
|
||||||
{% with workout.workouttype|icon|safe as templateName %}
|
{% with workout.workouttype|icon|safe as templateName %}
|
||||||
{% include templateName %}
|
{% include templateName %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
@@ -154,8 +114,25 @@
|
|||||||
{% if workout|may_edit:request %}
|
{% if workout|may_edit:request %}
|
||||||
<a class="small"
|
<a class="small"
|
||||||
href={% url rower.defaultlandingpage id=workout.id|encode %}
|
href={% url rower.defaultlandingpage id=workout.id|encode %}
|
||||||
title="Edit">
|
title="{{ rower.defaultlandingpage|verbose }}">
|
||||||
<i class="fas fa-search fa-fw"></i></a>
|
<i class="{{ rower.defaultlandingpage|landingicon }}"></i></a>
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="workoutelement">
|
||||||
|
{% if workout|may_edit:request %}
|
||||||
|
{% if rower.defaultlandingpage2 != 'workout_delete' %}
|
||||||
|
<a class="small"
|
||||||
|
href={% url rower.defaultlandingpage2 id=workout.id|encode %}
|
||||||
|
title="{{ rower.defaultlandingpage2|verbose }}">
|
||||||
|
<i class="{{ rower.defaultlandingpage2|landingicon }}"></i></a>
|
||||||
|
{% else %}
|
||||||
|
<a class="small"
|
||||||
|
href={% url rower.defaultlandingpage2 pk=workout.id|encode %}
|
||||||
|
title="{{ rower.defaultlandingpage2|verbose }}">
|
||||||
|
<i class="{{ rower.defaultlandingpage2|landingicon }}"></i></a>
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -168,6 +145,45 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<li> No workouts found </li>
|
<li> No workouts found </li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<li class="grid_4">
|
||||||
|
<p>Filter on date
|
||||||
|
<form enctype="multipart/form-data" method="post">
|
||||||
|
<table>
|
||||||
|
{{ dateform.as_table }}
|
||||||
|
</table>
|
||||||
|
{% csrf_token %}
|
||||||
|
</p>
|
||||||
|
<p>and keyword</p>
|
||||||
|
<p>
|
||||||
|
{{ searchform }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<input name='daterange' type="submit" value="Select workouts">
|
||||||
|
</form>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li class="grid_4" style="min-height:400px;">
|
||||||
|
<p>
|
||||||
|
Total meters: {{ totalmeters }}. Total time {{ totalhours }}:{{ totalminutes }}h.
|
||||||
|
<a href="/rowers/history/">Dig deeper</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Activity chart by
|
||||||
|
<a href="{{ request.get_path }}?yaxis=trimp">TRIMP</a>,
|
||||||
|
<a href="{{ request.get_path }}?yaxis=rscore">rScore</a>,
|
||||||
|
<a href="{{ request.get_path }}?yaxis=duration">Time</a>.
|
||||||
|
</p>
|
||||||
|
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-widgets-2.2.3.min.css" type="text/css" />
|
||||||
|
<script src="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.js"></script>
|
||||||
|
<script async="true" type="text/text/javascript">
|
||||||
|
Bokeh.set_log_level("info")
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{{ interactiveplot |safe }}
|
||||||
|
|
||||||
|
{{ the_div |safe }}
|
||||||
|
</li>
|
||||||
{% if announcements %}
|
{% if announcements %}
|
||||||
<li class="grid_4">
|
<li class="grid_4">
|
||||||
<h3>What's New?</h3>
|
<h3>What's New?</h3>
|
||||||
|
|||||||
@@ -8,6 +8,11 @@
|
|||||||
<li id="charts">
|
<li id="charts">
|
||||||
<a href="/rowers/list-graphs/"><i class="fas fa-chart-pie fa-fw"></i> Charts</a>
|
<a href="/rowers/list-graphs/"><i class="fas fa-chart-pie fa-fw"></i> Charts</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="history">
|
||||||
|
<a href="/rowers/history/">
|
||||||
|
<i class="fas fa-history fa-fw"></i> History
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li id="compare">
|
<li id="compare">
|
||||||
{% if team %}
|
{% if team %}
|
||||||
<a href="/rowers/user-analysis-select/compare/team/{{ team.id }}/">
|
<a href="/rowers/user-analysis-select/compare/team/{{ team.id }}/">
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ from rowers.mytypes import (
|
|||||||
otwtypes,adaptivetypes,sexcategories,weightcategories,workouttypes,
|
otwtypes,adaptivetypes,sexcategories,weightcategories,workouttypes,
|
||||||
workouttypes_icons,
|
workouttypes_icons,
|
||||||
)
|
)
|
||||||
from rowers.utils import NoTokenError, step_to_string
|
from rowers.utils import NoTokenError, step_to_string, landingpages2
|
||||||
|
|
||||||
import rowers.payments as payments
|
import rowers.payments as payments
|
||||||
|
|
||||||
@@ -72,16 +72,29 @@ favanalysisdict = {}
|
|||||||
for key,value in favanalysischoices:
|
for key,value in favanalysischoices:
|
||||||
favanalysisdict[key] = value
|
favanalysisdict[key] = value
|
||||||
|
|
||||||
favanalysisicons = {
|
landingpagedict = {}
|
||||||
'compare':'fa-balance-scale',
|
for key, value in landingpages2:
|
||||||
'stats':'fa-table',
|
landingpagedict[key] = value
|
||||||
'boxplot':'fa-box-open',
|
|
||||||
'trendflex':'fa-chart-line',
|
landingpageicons = {
|
||||||
'histogram':'fa-chart-bar',
|
'workout_view':'fas fa-search fa-fw',
|
||||||
'flexall':'fa-chart-line',
|
'workout_edit_view':'fas fa-pencil-alt fa-fw',
|
||||||
'cp':'fa-user-chart',
|
'workout_workflow_view':'fas fa-tachometer-alt fa-fw',
|
||||||
|
'workout_stats_view':'fal fa-table fa-fw',
|
||||||
|
'workout_data_view':'fal fa-table fa-fw',
|
||||||
|
'workout_summary_edit_view':'fas fa-pause fa-fw',
|
||||||
|
'workout_flexchart_stacked_view':'fas fa-align-justify fa-fw',
|
||||||
|
'workout_flexchart3_view':'fas fa-chart-line fa-fw',
|
||||||
|
'workout_delete':'fas fa-trash-alt fa-fw'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def landingicon(landingpage):
|
||||||
|
try:
|
||||||
|
return landingpageicons[landingpage]
|
||||||
|
except KeyError:
|
||||||
|
return 'fas fa-search fa-fw'
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def steptostring(steps):
|
def steptostring(steps):
|
||||||
res = ps_dict_get_description_html(steps,short=True)
|
res = ps_dict_get_description_html(steps,short=True)
|
||||||
@@ -91,16 +104,9 @@ def steptostring(steps):
|
|||||||
@register.filter
|
@register.filter
|
||||||
def verbose(s):
|
def verbose(s):
|
||||||
try:
|
try:
|
||||||
return favanalysisdict[s]
|
return landingpagedict[s]
|
||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
return ''
|
return 'Details'
|
||||||
|
|
||||||
@register.filter
|
|
||||||
def icon(s):
|
|
||||||
try:
|
|
||||||
return favanalysisicons[s]
|
|
||||||
except KeyError: # pragma: no cover
|
|
||||||
return 'fa-chart-line'
|
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def datarows(data): # pragma: no cover
|
def datarows(data): # pragma: no cover
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ class UserPreferencesTest(TestCase):
|
|||||||
'fav_analysis':'compare',
|
'fav_analysis':'compare',
|
||||||
'usersmooth':2,
|
'usersmooth':2,
|
||||||
'defaultlandingpage':'workout_edit_view',
|
'defaultlandingpage':'workout_edit_view',
|
||||||
|
'defaultlandingpage2':'workout_delete',
|
||||||
'first_name': self.u.first_name,
|
'first_name': self.u.first_name,
|
||||||
'last_name': self.u.last_name,
|
'last_name': self.u.last_name,
|
||||||
'email':self.u.email
|
'email':self.u.email
|
||||||
|
|||||||
@@ -46,6 +46,19 @@ landingpages = (
|
|||||||
('workout_flexchart3_view','Workout Flex Chart')
|
('workout_flexchart3_view','Workout Flex Chart')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
landingpages2 = (
|
||||||
|
('workout_view', 'Workout View'),
|
||||||
|
('workout_edit_view','Edit View'),
|
||||||
|
('workout_workflow_view','Workflow View'),
|
||||||
|
('workout_stats_view','Stats View'),
|
||||||
|
('workout_data_view','Data Explore View'),
|
||||||
|
('workout_summary_edit_view','Intervals Editor'),
|
||||||
|
('workout_flexchart_stacked_view','Workout Stacked Chart'),
|
||||||
|
('workout_flexchart3_view','Workout Flex Chart'),
|
||||||
|
('workout_delete','Remove Workout')
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
workflowmiddlepanel = (
|
workflowmiddlepanel = (
|
||||||
|
|||||||
@@ -2336,6 +2336,7 @@ def history_view(request,userid=0):
|
|||||||
wminutes=wminutes,
|
wminutes=wminutes,
|
||||||
wseconds=wseconds,
|
wseconds=wseconds,
|
||||||
)
|
)
|
||||||
|
ddict['distance'] = wmeters
|
||||||
ddict['nrworkouts'] = a_workouts.count()
|
ddict['nrworkouts'] = a_workouts.count()
|
||||||
listofdicts.append(ddict)
|
listofdicts.append(ddict)
|
||||||
|
|
||||||
@@ -2439,9 +2440,11 @@ def history_view_data(request,userid=0):
|
|||||||
|
|
||||||
yaxis = request.GET.get('yaxis','duration')
|
yaxis = request.GET.get('yaxis','duration')
|
||||||
|
|
||||||
if yaxis.lower() not in ['duration','rscore','trimp']: # pragma: no cover
|
|
||||||
|
if yaxis.lower() not in ['duration','rscore','trimp','distance']: # pragma: no cover
|
||||||
yaxis = 'duration'
|
yaxis = 'duration'
|
||||||
|
|
||||||
|
|
||||||
g_workouts = Workout.objects.filter(
|
g_workouts = Workout.objects.filter(
|
||||||
user=r,
|
user=r,
|
||||||
startdatetime__gte=activity_startdate,
|
startdatetime__gte=activity_startdate,
|
||||||
@@ -2535,9 +2538,11 @@ def history_view_data(request,userid=0):
|
|||||||
|
|
||||||
totalsdict['nrworkouts'] = g_workouts.count()
|
totalsdict['nrworkouts'] = g_workouts.count()
|
||||||
|
|
||||||
|
|
||||||
# activity chart
|
# activity chart
|
||||||
activity_script, activity_div = interactive_activitychart2(g_workouts,startdate,enddate,yaxis=yaxis)
|
activity_script, activity_div = interactive_activitychart2(g_workouts,startdate,enddate,yaxis=yaxis)
|
||||||
|
|
||||||
|
|
||||||
# interactive hr pie chart
|
# interactive hr pie chart
|
||||||
if typeselect == 'All':
|
if typeselect == 'All':
|
||||||
totalseconds = 3600*totalhours+60*totalminutes+totalseconds
|
totalseconds = 3600*totalhours+60*totalminutes+totalseconds
|
||||||
|
|||||||
@@ -1981,7 +1981,7 @@ def workouts_view(request,message='',successmessage='',
|
|||||||
else:
|
else:
|
||||||
searchform = SearchForm()
|
searchform = SearchForm()
|
||||||
|
|
||||||
paginator = Paginator(workouts,10) # show 25 workouts per page
|
paginator = Paginator(workouts,12) # show 25 workouts per page
|
||||||
page = request.GET.get('page',1)
|
page = request.GET.get('page',1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -328,20 +328,28 @@ th.rotate > div > span {
|
|||||||
border-width: 1px 0 0 0;
|
border-width: 1px 0 0 0;
|
||||||
border-color: #333 #333 #333 #333;
|
border-color: #333 #333 #333 #333;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
padding: 2px;
|
padding: 0px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.workoutcontainer {
|
.workoutcontainer {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 50px repeat(auto-fit, minmax(calc((100% - 100px)/4), 1fr));
|
grid-template-columns: 50px repeat(auto-fit, minmax(calc((100% - 100px)/5), 1fr));
|
||||||
/* grid-template-columns: 50px repeat(auto-fit, minmax(100px, 1fr)) 50px; ????*/
|
/* grid-template-columns: 50px repeat(auto-fit, minmax(100px, 1fr)) 50px; ????*/
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.workoutelement {
|
.workoutelement {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icondiv {
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.divlines h3 {
|
.divlines h3 {
|
||||||
|
|||||||
Reference in New Issue
Block a user