hopefully completing types features
This commit is contained in:
@@ -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='',
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -340,8 +340,6 @@ otwtypes = (
|
|||||||
|
|
||||||
otetypes = (
|
otetypes = (
|
||||||
'rower',
|
'rower',
|
||||||
'dynamic',
|
|
||||||
'slides'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
rowtypes = (
|
rowtypes = (
|
||||||
|
|||||||
@@ -65,26 +65,85 @@
|
|||||||
deleteText: '<div><p> </p></div><div>remove</div>'
|
deleteText: '<div><p> </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 %}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -63,26 +63,86 @@
|
|||||||
addText: '<div> </div><div>add filter</div>',
|
addText: '<div> </div><div>add filter</div>',
|
||||||
deleteText: '<div><p> </p></div><div>remove</div>'
|
deleteText: '<div><p> </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 %}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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+' <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+' <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 %}
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user