diff --git a/rowers/models.py b/rowers/models.py
index b805b234..b69cb380 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -2755,6 +2755,12 @@ class PlannedSessionStep(models.Model):
return d
+ # string
+ def __str__(self):
+ str = 'Step {id} {name} {intensity}'.format(id=self.pk, name=self.name, intensity=self.intensity)
+
+ return str
+
class StepEditorForm(ModelForm):
class Meta:
model = PlannedSessionStep
diff --git a/rowers/templates/stepeditor.html b/rowers/templates/stepeditor.html
index efc9daf1..9500219b 100644
--- a/rowers/templates/stepeditor.html
+++ b/rowers/templates/stepeditor.html
@@ -20,9 +20,9 @@
-Training Steps for {{ ps.name }}
${name}
${txt}
` + const div = document.getElementById("stepinfo"); + div.innerHTML = divstring; + } + } + + return false; + } + + function handleMouseLeave(event) { if (event.preventDefault) { - const id = event.target.id; - if (id) { - var name = mysteps[id]['name']; - var txt = descriptions[id]; - var divstring = `${name}
${txt}
` const div = document.getElementById("stepinfo"); - div.innerHTML = divstring; - } + div.innerHTML = 'Hover over a step to get details
' } return false; - } - - function handleMouseLeave(event) { - if (event.preventDefault) { - const div = document.getElementById("stepinfo"); - div.innerHTML = 'Hover over a step to get details
' - } - - return false; - } - - function handleDragOver(event) { + } + + function handleDragOver(event) { event.preventDefault(); - } - - function handleDragEnter(event) { + } + + function handleDragEnter(event) { this.classList.add('over'); const target = event.target; overcolor = event.target.style.backgroundColor; - + if (target && dragged) { - event.preventDefault(); - // Set the dropEffect to move - event.dataTransfer.dropEffect = 'move' - target.style.background = '#1f904e'; + event.preventDefault(); + // Set the dropEffect to move + event.dataTransfer.dropEffect = 'move' + target.style.background = '#1f904e'; } - } - - function handleDragLeave(event) { + } + + function handleDragLeave(event) { event.target.style.backgroundColor = ''; - + if (dragged.parentNode.className.includes("drop-zone")) { - trash(event); + trash(event); } saveState(); - } - - function trash(event) { + } + + function trash(event) { const target = event.target; event.target.style.backgroundColor = ''; if (target && dragged) { - event.preventDefault(); - if (dragged.parentNode.className.includes("drop-zone")) { - dragged.remove(); - } + event.preventDefault(); + if (dragged.parentNode.className.includes("drop-zone")) { + dragged.remove(); + } } - } - - function handleDrop(event) { + } + + function handleDrop(event) { const target = event.target; if (target && dragged) { - target.style.backgroundColor = ''; - event.preventDefault(); - // Get the id of the target and add the moved element to the target's DOM - // dragged.parentNode.removeChild(dragged); - if (target.nodeName == "SECTION") { - dragged.style.opacity = ''; - dragged.style.backgroundColor = origcolor; - var dropped = dragged.cloneNode(true); - dropped.id = 0; - target.appendChild(dropped); - } - if (target.nodeName == 'DIV') { - // insert after - dragged.style.opacity = ''; - dragged.style.backgroundColor = origcolor; - var dropped = dragged.cloneNode(true); - if (target.parentNode.nodeName == 'SECTION') { - target.after(dropped); + target.style.backgroundColor = ''; + event.preventDefault(); + // Get the id of the target and add the moved element to the targets DOM + // dragged.parentNode.removeChild(dragged); + if (target.nodeName == "SECTION") { + dragged.style.opacity = ''; + dragged.style.backgroundColor = origcolor; + var dropped = dragged.cloneNode(true); + dropped.id = 0; + target.appendChild(dropped); } - if (target.parentNode.parentNode.nodeName == 'SECTION') { - target.parentNode.after(dropped); + if (target.nodeName == 'DIV') { + // insert after + dragged.style.opacity = ''; + dragged.style.backgroundColor = origcolor; + var dropped = dragged.cloneNode(true); + if (target.parentNode.nodeName == 'SECTION') { + target.after(dropped); + } + if (target.parentNode.parentNode.nodeName == 'SECTION') { + target.parentNode.after(dropped); + } } - } } saveState(); } - + function noDrop(event) { - event.preventDefault(); + event.preventDefault(); } - - - let dropzone = document.querySelector('.drop-zone') - dropzone.addEventListener('dragenter', handleDragEnter); - dropzone.addEventListener('dragleave', handleDragLeave); - dropzone.addEventListener('drop', handleDrop) - dropzone.addEventListener('dragover', handleDragOver); - dropzone.addEventListener('dragstart', handleDragStart); - dropzone.addEventListener('dragend', handleDragEnd); - - let items = document.querySelectorAll('.stepcontainer .trainingstep'); - items.forEach(function(item) { + + + let dropzone = document.querySelector('.drop-zone') + dropzone.addEventListener('dragenter', handleDragEnter); + dropzone.addEventListener('dragleave', handleDragLeave); + dropzone.addEventListener('drop', handleDrop) + dropzone.addEventListener('dragover', handleDragOver); + dropzone.addEventListener('dragstart', handleDragStart); + dropzone.addEventListener('dragend', handleDragEnd); + + let items = document.querySelectorAll('.stepcontainer .trainingstep'); + items.forEach(function(item) { item.addEventListener('dragstart', handleDragStart); item.addEventListener('dragend', handleDragEnd); item.addEventListener('dragleave', handleDragLeave); @@ -392,10 +395,10 @@ item.addEventListener('dragenter',noDrop); item.addEventListener('mouseover',handleMouseOver); item.addEventListener('mouseleave',handleMouseLeave); - }); - - - + }); + + + {% endblock %} {% block sidebar %} diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index 33255a17..8ba2c0ba 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -3077,6 +3077,7 @@ def rower_create_trainingplan(request, id=0): 'old_targets': old_targets, }) +@csrf_exempt @user_passes_test(can_plan, login_url="/rowers/paidplans", message="This functionality requires a Coach or Self-Coach plan", redirect_field_name=None) @@ -3116,6 +3117,7 @@ def stepadder(request, id=0): 'message': 'permission denied for host '+hostt[0]} return JSONResponse(status=403, data=message) + if ps.steps: filename = ps.steps.get('filename','') sport = ps.steps.get('sport','rowing') @@ -3208,6 +3210,7 @@ def stepedit(request, id=0, psid=0): ps.fitfile = None ps.interval_string = "" + ps.save() step.durationtype = form.cleaned_data['durationtype']