Private
Public Access
1
0

hopefully completing types features

This commit is contained in:
2024-01-24 16:08:18 +01:00
parent aec9c8e341
commit 8a0f419ae5
12 changed files with 611 additions and 333 deletions

View File

@@ -1076,7 +1076,7 @@ def checkbreakthrough(w, r):
# Processes painsled CSV file to database # Processes painsled CSV file to database
def save_workout_database(f2, r, dosmooth=True, workouttype='rower', def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
boattype='1x', boattype='static',
adaptiveclass='None', adaptiveclass='None',
weightcategory='hwt', weightcategory='hwt',
dosummary=True, title='Workout', dosummary=True, title='Workout',
@@ -1366,7 +1366,7 @@ def new_workout_from_file(r, f2,
workouttype='rower', workouttype='rower',
workoutsource=None, workoutsource=None,
title='Workout', title='Workout',
boattype='1x', boattype='static',
rpe=-1, rpe=-1,
makeprivate=False, makeprivate=False,
startdatetime='', startdatetime='',
@@ -1552,7 +1552,7 @@ def new_workout_from_file(r, f2,
def new_workout_from_df(r, df, def new_workout_from_df(r, df,
title='New Workout', title='New Workout',
workoutsource='unknown', workoutsource='unknown',
boattype='1x', boattype='static',
workouttype='rower', workouttype='rower',
parent=None, parent=None,
workoutid='', workoutid='',

View File

@@ -1120,7 +1120,7 @@ workouttypes = tuple(ww)
class DataFrameColumnsForm(forms.Form): class DataFrameColumnsForm(forms.Form):
cols = ['ftime', 'cumdist', 'fpace', 'spm', cols = ['ftime', 'cumdist', 'fpace', 'spm',
'hr', 'power', 'driveenergy', 'drivelength', 'averageforce', 'hr', 'grpower', 'driveenergy', 'drivelength', 'averageforce',
'peakforce', 'distance', 'drivespeed', 'workoutstate', 'peakforce', 'distance', 'drivespeed', 'workoutstate',
'catch', 'finish', 'peakforceangle', 'wash', 'slip', 'rhythm', 'catch', 'finish', 'peakforceangle', 'wash', 'slip', 'rhythm',
'effectiveangle', 'totalangle', 'distanceperstroke', 'velo'] 'effectiveangle', 'totalangle', 'distanceperstroke', 'velo']
@@ -1157,7 +1157,7 @@ class TrendFlexModalForm(forms.Form):
modality = forms.ChoiceField(choices=workouttypes, modality = forms.ChoiceField(choices=workouttypes,
label='Workout Type', label='Workout Type',
initial='all') initial='all')
waterboattype = forms.MultipleChoiceField(choices=boattypes, waterboattype = forms.MultipleChoiceField(choices=boattypes+ergtypes,
label='Water Boat Type', label='Water Boat Type',
initial=mytypes.waterboattype) initial=mytypes.waterboattype)

View File

@@ -3569,6 +3569,11 @@ class Workout(models.Model):
if self.timezone == 'tzutc()': if self.timezone == 'tzutc()':
self.timezone = 'UTC' # pragma: no cover self.timezone = 'UTC' # pragma: no cover
if self.workouttype in mytypes.otwtypes and self.boattype in mytypes.ergtypes:
self.boattype = '1x'
elif self.workouttype in mytypes.otetypes and self.boattype in mytypes.boattypes:
self.boattype = 'static'
super(Workout, self).save(*args, **kwargs) super(Workout, self).save(*args, **kwargs)
def __str__(self): def __str__(self):

View File

@@ -340,8 +340,6 @@ otwtypes = (
otetypes = ( otetypes = (
'rower', 'rower',
'dynamic',
'slides'
) )
rowtypes = ( rowtypes = (

View File

@@ -65,26 +65,85 @@
deleteText: '<div><p>&nbsp;</p></div><div>remove</div>' deleteText: '<div><p>&nbsp;</p></div><div>remove</div>'
}); });
</script> </script>
<script> <script>
$( document ).ready(function() { $( document ).ready(function() {
$('#id_workouttype').on('change', function(){ var boattypes = {
if ( '1x': '1x (single)',
$(this).val() == 'water' '2x': '2x (double)',
|| $(this).val() == 'coastal' '2x+': '2x+ (coxed double)',
|| $(this).val() == 'c-boat' '2-': '2- (pair)',
|| $(this).val() == 'churchboat' '2+': '2+ (coxed pair)',
) { '3x+': '3x+ (coxed triple)',
$('#id_boattype').toggle(true); '3x-': '3x- (triple)',
} else { '4x': '4x (quad)',
$('#id_boattype').toggle(false); '4x+': '4x+ (coxed quad)',
$('#id_boattype').val('1x'); '4-': '4- (four)',
} '4+': '4+ (coxed four)',
'8+': '8+ (eight)',
'8x+': '8x+ (octuple scull)',
}
}); var ergtypes = {
$('#id_workouttype').change(); 'static': 'Concept2 static',
}); 'dynamic': 'Concept2 dynamic',
</script> 'slides': 'Concept2 slides',
'rp3': 'RP3',
'waterrower': 'Water Rower',
'other': 'Other Indoor Rower',
}
$('#id_workouttype').on('change', function(){
if (
$(this).val() == 'water'
|| $(this).val() == 'coastal'
|| $(this).val() == 'c-boat'
|| $(this).val() == 'churchboat'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(boattypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else if (
$(this).val() == 'rower'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(ergtypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else {
$('#id_boattype').toggle(false);
$('#id_boattype').val('1x');
}
if (
$(this).val() == 'rower'
|| $(this).val() == 'dynamic'
|| $(this).val() == 'slides'
) {
$('#id_dragfactor').toggle(true);
} else {
$('#id_dragfactor').toggle(false);
$('#id_dragfactor').val('0');
}
});
$('#id_workouttype').change();
});
</script>
{% endblock %} {% endblock %}

View File

@@ -63,26 +63,86 @@
addText: '<div>&nbsp;</div><div>add filter</div>', addText: '<div>&nbsp;</div><div>add filter</div>',
deleteText: '<div><p>&nbsp;</p></div><div>remove</div>' deleteText: '<div><p>&nbsp;</p></div><div>remove</div>'
}); });
</script> </script>
<script> <script>
$( document ).ready(function() { $( document ).ready(function() {
$('#id_workouttype').on('change', function(){ var boattypes = {
if ( '1x': '1x (single)',
$(this).val() == 'water' '2x': '2x (double)',
|| $(this).val() == 'coastal' '2x+': '2x+ (coxed double)',
|| $(this).val() == 'c-boat' '2-': '2- (pair)',
|| $(this).val() == 'churchboat' '2+': '2+ (coxed pair)',
) { '3x+': '3x+ (coxed triple)',
$('#id_boattype').toggle(true); '3x-': '3x- (triple)',
} else { '4x': '4x (quad)',
$('#id_boattype').toggle(false); '4x+': '4x+ (coxed quad)',
$('#id_boattype').val('1x'); '4-': '4- (four)',
} '4+': '4+ (coxed four)',
'8+': '8+ (eight)',
'8x+': '8x+ (octuple scull)',
}
}); var ergtypes = {
$('#id_workouttype').change(); 'static': 'Concept2 static',
}); 'dynamic': 'Concept2 dynamic',
</script> 'slides': 'Concept2 slides',
'rp3': 'RP3',
'waterrower': 'Water Rower',
'other': 'Other Indoor Rower',
}
$('#id_workouttype').on('change', function(){
if (
$(this).val() == 'water'
|| $(this).val() == 'coastal'
|| $(this).val() == 'c-boat'
|| $(this).val() == 'churchboat'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(boattypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else if (
$(this).val() == 'rower'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(ergtypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else {
$('#id_boattype').toggle(false);
$('#id_boattype').val('1x');
}
if (
$(this).val() == 'rower'
|| $(this).val() == 'dynamic'
|| $(this).val() == 'slides'
) {
$('#id_dragfactor').toggle(true);
} else {
$('#id_dragfactor').toggle(false);
$('#id_dragfactor').val('0');
}
});
$('#id_workouttype').change();
});
</script>
{% endblock %} {% endblock %}

View File

@@ -11,8 +11,6 @@
<script type='text/javascript' <script type='text/javascript'
src='https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js'> src='https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js'>
</script> </script>
<script>
</script>
{% endblock %} {% endblock %}
{% block main %} {% block main %}
@@ -80,244 +78,304 @@
{% block scripts %} {% block scripts %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script> <script>
$( document ).ready(function() { $( document ).ready(function() {
$('#id_workouttype').on('change', function(){ var boattypes = {
if ( '1x': '1x (single)',
$(this).val() == 'water' '2x': '2x (double)',
|| $(this).val() == 'coastal' '2x+': '2x+ (coxed double)',
|| $(this).val() == 'c-boat' '2-': '2- (pair)',
|| $(this).val() == 'churchboat' '2+': '2+ (coxed pair)',
) { '3x+': '3x+ (coxed triple)',
$('#id_boattype').toggle(true); '3x-': '3x- (triple)',
} else { '4x': '4x (quad)',
$('#id_boattype').toggle(false); '4x+': '4x+ (coxed quad)',
$('#id_boattype').val('1x'); '4-': '4- (four)',
} '4+': '4+ (coxed four)',
}); '8+': '8+ (eight)',
$('#id_workouttype').change(); '8x+': '8x+ (octuple scull)',
}); }
</script> var ergtypes = {
'static': 'Concept2 static',
'dynamic': 'Concept2 dynamic',
'slides': 'Concept2 slides',
'rp3': 'RP3',
'waterrower': 'Water Rower',
'other': 'Other Indoor Rower',
}
<script> $('#id_workouttype').on('change', function(){
var td = new FormData(); if (
var formdatasetok = false; $(this).val() == 'water'
try { || $(this).val() == 'coastal'
|| $(this).val() == 'c-boat'
|| $(this).val() == 'churchboat'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(boattypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else if (
$(this).val() == 'rower'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(ergtypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else {
$('#id_boattype').toggle(false);
$('#id_boattype').val('1x');
}
if (
$(this).val() == 'rower'
|| $(this).val() == 'dynamic'
|| $(this).val() == 'slides'
) {
$('#id_dragfactor').toggle(true);
} else {
$('#id_dragfactor').toggle(false);
$('#id_dragfactor').val('0');
}
});
$('#id_workouttype').change();
});
</script>
<script>
var td = new FormData();
var formdatasetok = false;
try {
td.set('aap','noot'); td.set('aap','noot');
formdatasetok = true; formdatasetok = true;
console.log('FormData.set OK'); console.log('FormData.set OK');
} }
catch(err) { catch(err) {
console.log('FormData.set not OK'); console.log('FormData.set not OK');
formdatasetok = false; formdatasetok = false;
} }
if (!formdatasetok) { if (!formdatasetok) {
$("#id_dropregion").remove(); $("#id_dropregion").remove();
} }
if (formdatasetok) { if (formdatasetok) {
$(document).ready(function() { $(document).ready(function() {
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val(); var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
console.log("CSRF token",csrftoken); console.log("CSRF token",csrftoken);
function csrfSafeMethod(method) { function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection // these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
} }
$.ajaxSetup({ $.ajaxSetup({
beforeSend: function(xhr, settings) { beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken); xhr.setRequestHeader("X-CSRFToken", csrftoken);
} }
} }
}); });
console.log("Loading dropper"); console.log("Loading dropper");
jQuery.event.props.push('dataTransfer'); jQuery.event.props.push('dataTransfer');
$(window).on('dragenter', function() { $(window).on('dragenter', function() {
$("#id_drop-files").css("background-color","#E9E9E4"); $("#id_drop-files").css("background-color","#E9E9E4");
$("#id_dropregion").addClass("watermark").removeClass("invisible");}) $("#id_dropregion").addClass("watermark").removeClass("invisible");})
$(window).on('dragleave', function() { $(window).on('dragleave', function() {
$("#id_drop-files").css("background-color","#FFFFFF"); $("#id_drop-files").css("background-color","#FFFFFF");
$("#id_dropregion").removeClass("watermark").addClass("invisible");}) $("#id_dropregion").removeClass("watermark").addClass("invisible");})
var frm = $("#file_form"); var frm = $("#file_form");
if( window.FormData === undefined ) { if( window.FormData === undefined ) {
console.log('no formdata'); console.log('no formdata');
alert("No FormData"); alert("No FormData");
} else { } else {
console.log('we have formdata'); console.log('we have formdata');
} }
var data = new FormData(frm[0]); var data = new FormData(frm[0]);
$('#id_file').on('change', function(evt) { $('#id_file').on('change', function(evt) {
var f = this.files[0]; var f = this.files[0];
console.log(f); console.log(f);
var istcx = false; var istcx = false;
var isgzip = false; var isgzip = false;
var size1 = 10485760; var size1 = 10485760;
var size2 = 2097152; var size2 = 2097152;
if ((/\.(tcx|TCX)/i).test(f.name)) { if ((/\.(tcx|TCX)/i).test(f.name)) {
istcx = true; istcx = true;
console.log('tcx'); console.log('tcx');
if ((/\.(gz|GZ)/i).test(f.name)) { if ((/\.(gz|GZ)/i).test(f.name)) {
isgzip = true; isgzip = true;
console.log('gzip'); console.log('gzip');
size1 /= 5; size1 /= 5;
size2 /= 5; size2 /= 5;
} }
} }
console.log(size1) console.log(size1)
console.log(size2) console.log(size2)
if (f.size > size1) { if (f.size > size1) {
alert("File Size must be smaller than 10 MB"); alert("File Size must be smaller than 10 MB");
this.value = null; this.value = null;
} else { } else {
if (f.size > size2) { if (f.size > size2) {
$('#id_offline').val('True'); $('#id_offline').val('True');
$('#id_offline').prop('checked','True'); $('#id_offline').prop('checked','True');
data.set($('#id_offline').attr('name'),$('#id_offline').prop('checked')); data.set($('#id_offline').attr('name'),$('#id_offline').prop('checked'));
console.log("Set offline to True"); console.log("Set offline to True");
$('#extra_message').text('Because of the large size, we recommend to use background processing. You will receive email when it is done.'); $('#extra_message').text('Because of the large size, we recommend to use background processing. You will receive email when it is done.');
$('#extra_message').addClass('message'); $('#extra_message').addClass('message');
} }
} }
}); });
$('input').each(function( i ) { $('input').each(function( i ) {
$(this).change(function() { $(this).change(function() {
if ($(this).attr('type') == 'checkbox') { if ($(this).attr('type') == 'checkbox') {
data.set($(this).attr('name'),$(this).prop('checked')); data.set($(this).attr('name'),$(this).prop('checked'));
console.log($(this).attr('id'),$(this).attr('name'),$(this).prop('checked')); console.log($(this).attr('id'),$(this).attr('name'),$(this).prop('checked'));
} else { } else {
data.set($(this).attr('name'),$(this).val()); data.set($(this).attr('name'),$(this).val());
if ($(this).attr('id') == 'id_file') { if ($(this).attr('id') == 'id_file') {
data.set("file",this.files[0]); data.set("file",this.files[0]);
} }
console.log($(this).attr('id'),$(this).attr('name'),$(this).val()); console.log($(this).attr('id'),$(this).attr('name'),$(this).val());
}; };
});}); });});
$('textarea').each(function( i ) { $('textarea').each(function( i ) {
$(this).change(function() { $(this).change(function() {
data.set($(this).attr('name'),$(this).val()); data.set($(this).attr('name'),$(this).val());
console.log($(this).attr('id'),$(this).attr('name'),$(this).val()); console.log($(this).attr('id'),$(this).attr('name'),$(this).val());
});}); });});
$('select').each(function( i ) { $('select').each(function( i ) {
console.log($(this).attr('name'),$(this).val()); console.log($(this).attr('name'),$(this).val());
$(this).change(function() { $(this).change(function() {
data.set($(this).attr('name'),$(this).val()); data.set($(this).attr('name'),$(this).val());
console.log($(this).attr('id'),$(this).attr('name'),$(this).val()); console.log($(this).attr('id'),$(this).attr('name'),$(this).val());
}); });
}); });
frm.submit(function() { frm.submit(function() {
console.log("Form submission"); console.log("Form submission");
$(data.values()).each(function(value) { $(data.values()).each(function(value) {
console.log(value); console.log(value);
}); });
$("#id_main").replaceWith( $("#id_main").replaceWith(
'<div id="id_waiting"><img src="/static/img/rowingtimer.gif" width="60" height="50" style="width:60px">' '<div id="id_waiting"><img src="/static/img/rowingtimer.gif" width="60" height="50" style="width:60px">'
); );
$.ajax({ $.ajax({
data: data, data: data,
type: $(this).attr('method'), type: $(this).attr('method'),
url: '/rowers/workout/upload/', url: '/rowers/workout/upload/',
contentType: false, contentType: false,
processData: false, processData: false,
error: function(result) { error: function(result) {
$("#id_waiting").replaceWith( $("#id_waiting").replaceWith(
'<div id="id_failed" class="grid_12 alpha message">Your upload failed</div>' '<div id="id_failed" class="grid_12 alpha message">Your upload failed</div>'
); );
setTimeout(function() { setTimeout(function() {
location.reload(); location.reload();
},1000); },1000);
}, },
success: function(result) { success: function(result) {
console.log('got something back'); console.log('got something back');
console.log(result); console.log(result);
if (result.result == 1) { if (result.result == 1) {
window.location.href = result.url; window.location.href = result.url;
} else { } else {
console.log(result," reloading"); console.log(result," reloading");
location.reload(); location.reload();
}; };
} }
}); });
return false; return false;
}); });
$('#id_drop-files').bind({ $('#id_drop-files').bind({
drop: function(e) { drop: function(e) {
e.preventDefault(); e.preventDefault();
console.log("you dropped something"); console.log("you dropped something");
var files = e.dataTransfer.files; var files = e.dataTransfer.files;
console.log(files[0]); console.log(files[0]);
var f = files[0]; var f = files[0];
var istcx = false; var istcx = false;
var isgzip = false; var isgzip = false;
var size1 = 10485760; var size1 = 10485760;
var size2 = 1048576; var size2 = 1048576;
if ((/\.(tcx|TCX)/i).test(f.name)) { if ((/\.(tcx|TCX)/i).test(f.name)) {
istcx = true; istcx = true;
console.log('tcx'); console.log('tcx');
if ((/\.(gz|GZ)/i).test(f.name)) { if ((/\.(gz|GZ)/i).test(f.name)) {
isgzip = true; isgzip = true;
console.log('gzip'); console.log('gzip');
size1 /= 5; size1 /= 5;
size2 /= 5; size2 /= 5;
} }
} }
console.log(f); console.log(f);
console.log(size1) console.log(size1)
console.log(size2) console.log(size2)
if (f.size > size1) { if (f.size > size1) {
alert("File Size must be smaller than 10 MB"); alert("File Size must be smaller than 10 MB");
$("#id_file").value = 0; $("#id_file").value = 0;
return false; return false;
} }
if (f.size > size2) { if (f.size > size2) {
$('#id_offline').val('True'); $('#id_offline').val('True');
$('#id_offline').prop('checked','True'); $('#id_offline').prop('checked','True');
data.set($('#id_offline').attr('name'),$('#id_offline').prop('checked')); data.set($('#id_offline').attr('name'),$('#id_offline').prop('checked'));
console.log("Set offline to True"); console.log("Set offline to True");
$('#extra_message').text('Because of the large size, we recommend to use background processing. You will receive email when it is done.'); $('#extra_message').text('Because of the large size, we recommend to use background processing. You will receive email when it is done.');
$('#extra_message').addClass('message'); $('#extra_message').addClass('message');
} }
data.set("file",f); data.set("file",f);
// data.append("file",f); // data.append("file",f);
$("#id_file").replaceWith('<div id="id_file">'+files[0].name+'&nbsp; <a class="remove" href="javascript:void(0);"><b><font color="red">X</font></b></a></div>'); $("#id_file").replaceWith('<div id="id_file">'+files[0].name+'&nbsp; <a class="remove" href="javascript:void(0);"><b><font color="red">X</font></b></a></div>');
}, },
mouseenter:function(){$("#id_drop-files").css("background-color","#E9E9E4");}, mouseenter:function(){$("#id_drop-files").css("background-color","#E9E9E4");},
mouseleave:function(){$("#id_drop-files").css("background-color","#FFFFFF");}, mouseleave:function(){$("#id_drop-files").css("background-color","#FFFFFF");},
dragover:function(e){ dragover:function(e){
e.preventDefault(); e.preventDefault();
$("#id_drop-files").css("background-color","#E9E9E4");}, $("#id_drop-files").css("background-color","#E9E9E4");},
dragleave:function(e){ e.preventDefault();}, dragleave:function(e){ e.preventDefault();},
}); });
$(document).on("click", "a.remove", function() { $(document).on("click", "a.remove", function() {
$(this).parent().replaceWith('<td><input id="id_file" name="file" type="file" /></td>'); $(this).parent().replaceWith('<td><input id="id_file" name="file" type="file" /></td>');
}); });
}); });
}; };
</script> </script>
{% endblock %} {% endblock %}
{% block sidebar %} {% block sidebar %}
{% include 'menu_workouts.html' %} {% include 'menu_workouts.html' %}
{% endblock %} {% endblock %}

View File

@@ -76,22 +76,82 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script> <script>
$( document ).ready(function() { $( document ).ready(function() {
$('#id_workouttype').on('change', function(){ var boattypes = {
if ( '1x': '1x (single)',
$(this).val() == 'water' '2x': '2x (double)',
|| $(this).val() == 'coastal' '2x+': '2x+ (coxed double)',
|| $(this).val() == 'c-boat' '2-': '2- (pair)',
|| $(this).val() == 'churchboat' '2+': '2+ (coxed pair)',
) { '3x+': '3x+ (coxed triple)',
$('#id_boattype').toggle(true); '3x-': '3x- (triple)',
} else { '4x': '4x (quad)',
$('#id_boattype').toggle(false); '4x+': '4x+ (coxed quad)',
$('#id_boattype').val('1x'); '4-': '4- (four)',
} '4+': '4+ (coxed four)',
}); '8+': '8+ (eight)',
$('#id_workouttype').change(); '8x+': '8x+ (octuple scull)',
}); }
</script> var ergtypes = {
'static': 'Concept2 static',
'dynamic': 'Concept2 dynamic',
'slides': 'Concept2 slides',
'rp3': 'RP3',
'waterrower': 'Water Rower',
'other': 'Other Indoor Rower',
}
$('#id_workouttype').on('change', function(){
if (
$(this).val() == 'water'
|| $(this).val() == 'coastal'
|| $(this).val() == 'c-boat'
|| $(this).val() == 'churchboat'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(boattypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else if (
$(this).val() == 'rower'
) {
var $el = $('#id_boattype');
$el.empty();
$.each(ergtypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else {
$('#id_boattype').toggle(false);
$('#id_boattype').val('1x');
}
if (
$(this).val() == 'rower'
|| $(this).val() == 'dynamic'
|| $(this).val() == 'slides'
) {
$('#id_dragfactor').toggle(true);
} else {
$('#id_dragfactor').toggle(false);
$('#id_dragfactor').val('0');
}
});
$('#id_workouttype').change();
});
</script>
{% endblock %} {% endblock %}

View File

@@ -16,58 +16,93 @@
</script> </script>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script> <script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script> <script>
$(function() { $( document ).ready(function() {
var boattypes = {
'1x': '1x (single)',
'2x': '2x (double)',
'2x+': '2x+ (coxed double)',
'2-': '2- (pair)',
'2+': '2+ (coxed pair)',
'3x+': '3x+ (coxed triple)',
'3x-': '3x- (triple)',
'4x': '4x (quad)',
'4x+': '4x+ (coxed quad)',
'4-': '4- (four)',
'4+': '4+ (coxed four)',
'8+': '8+ (eight)',
'8x+': '8x+ (octuple scull)',
}
// Get the form fields and hidden div var ergtypes = {
var modality = $("#id_modality"); 'static': 'Concept2 static',
var hidden = $("#id_waterboattype"); 'dynamic': 'Concept2 dynamic',
'slides': 'Concept2 slides',
'rp3': 'RP3',
'waterrower': 'Water Rower',
'other': 'Other Indoor Rower',
}
$('#id_modality').on('change', function(){
if (
$(this).val() == 'water'
|| $(this).val() == 'coastal'
|| $(this).val() == 'c-boat'
|| $(this).val() == 'churchboat'
) {
var $el = $('#id_waterboattype');
$el.empty();
$.each(boattypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
// Hide the fields. }
// Use JS to do this in case the user doesn't have JS else if (
// enabled. $(this).val() == 'rower'
) {
var $el = $('#id_waterboattype');
$el.empty();
$.each(ergtypes, function(key,value) {
if ( key == '{{ workout.boattype }}') {
$el.append($("<option></option").attr("value", key).attr("selected", "selected").text(value));
} else {
$el.append($("<option></option").attr("value", key).text(value));
}
});
$el.toggle(true);
}
else {
$('#id_waterboattype').toggle(false);
$('#id_waterboattype').val('1x');
}
if (
$(this).val() == 'rower'
|| $(this).val() == 'dynamic'
|| $(this).val() == 'slides'
) {
$('#id_dragfactor').toggle(true);
} else {
$('#id_dragfactor').toggle(false);
$('#id_dragfactor').val('0');
}
hidden.hide(); });
$('#id_modality').change();
// Setup an event listener for when the state of the
// checkbox changes.
modality.change(function() {
// Check to see if the checkbox is checked.
// If it is, show the fields and populate the input.
// If not, hide the fields.
var Value = modality.val();
if (Value=='water') {
// Show the hidden fields.
hidden.show();
} else {
// Make sure that the hidden fields are indeed
// hidden.
hidden.hide();
// You may also want to clear the value of the
// hidden fields here. Just in case somebody
// shows the fields, enters data to them and then
// unticks the checkbox.
//
// This would do the job:
//
// $("#hidden_field").val("");
}
}); });
</script>
<script>
});
$(document).ready(function(){ $(document).ready(function(){
console.log('kill parents') console.log('kill parents')
$("#id_killparents").change(function() { $("#id_killparents").change(function() {
if (this.checked) { if (this.checked) {
$("#id_killparentswarning").html("<p><em>Warning: Deleted workouts cannot be recovered</em></p>"); $("#id_killparentswarning").html("<p><em>Warning: Deleted workouts cannot be recovered</em></p>");
}; };
}); });
}); });
</script> </script>

Binary file not shown.

View File

@@ -1,4 +1,4 @@
from rowers.mytypes import workouttypes, boattypes, otwtypes, workoutsources, workouttypes_ordered from rowers.mytypes import workouttypes, boattypes, ergtypes, otwtypes, workoutsources, workouttypes_ordered
from rowers.rower_rules import is_promember from rowers.rower_rules import is_promember

View File

@@ -1219,6 +1219,9 @@ def workouts_join_select(request,
for b in mytypes.boattypes: for b in mytypes.boattypes:
if b[0] not in waterboattype: if b[0] not in waterboattype:
negtypes.append(b[0]) negtypes.append(b[0])
for b in mytypes.ergtypes:
if b[0] not in waterboattype: # pragma: no cover
negtypes.append(b[0])
startdate = datetime.datetime.combine(startdate, datetime.time()) startdate = datetime.datetime.combine(startdate, datetime.time())
enddate = datetime.datetime.combine(enddate, datetime.time(23, 59, 59)) enddate = datetime.datetime.combine(enddate, datetime.time(23, 59, 59))