Private
Public Access
1
0

works with remove thru trash can

This commit is contained in:
Sander Roosendaal
2022-04-05 14:25:29 +02:00
parent 5ba43564f8
commit fdcad2a3f1
2 changed files with 108 additions and 42 deletions

View File

@@ -7,8 +7,12 @@
{% block main %} {% block main %}
<h2>Plan Training Steps</h2> <h2>Plan Training Steps</h2>
<div class="stepcontainer" id="list"> <div class="stepcontainer" id="list">
<section class="drop-zone">
<h2>Training</h2>
</section>
<section class="library">
<h2>Library</h2>
{% for step in steps %} {% for step in steps %}
<div draggable="true" class="trainingstep" style="background-color: {{ step.color }}"> <div draggable="true" class="trainingstep" style="background-color: {{ step.color }}">
<div id="{{ forloop.counter }}" class="stepcontent"> <div id="{{ forloop.counter }}" class="stepcontent">
@@ -17,6 +21,10 @@
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
</section>
<section class="trash-can">
<h2>Remove</h2>
</section>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
@@ -24,69 +32,111 @@
src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'> src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'>
</script> </script>
<script> <script>
document.addEventListener('DOMContentLoaded', (event) => { let dragged;
var list = document.getElementById('list')
function handleDragStart(e) { function handleDragStart(event) {
this.style.opacity = '0.4'; let target = event.target;
dragSrcEl = this; if (target) {
dragged = target;
e.dataTransfer.effectAllowed = 'move'; event.dataTransfer.setData('text', target.id);
e.dataTransfer.setData('text/html', this.innerHTML); event.dataTransfer.dropEffect = 'move';
// Make it half transparent
event.target.style.opacity = .3;
}
} }
function handleDragEnd(e) { function handleDragEnd(event) {
this.style.opacity = '1'; if (event.target) {
// Reset the transparency
items.forEach(function (item) { event.target.style.opacity = ''; // reset opacity when drag ends
item.classList.remove('over'); dragged = null;
}); }
} }
function handleDragOver(e) { function handleDragOver(event) {
if (e.preventDefault) { if (event.preventDefault) {
e.preventDefault(); event.preventDefault();
} }
return false; return false;
} }
function handleDragEnter(e) { function handleDragEnter(event) {
this.classList.add('over'); const target = event.target;
if (target && dragged) {
event.preventDefault();
// Set the dropEffect to move
event.dataTransfer.dropEffect = 'move'
target.style.background = '#1f904e';
}
} }
function handleDragLeave(e) { function handleDragLeave(event) {
this.classList.remove('over'); console.log(event.target.nodeName);
event.target.style.background = '';
} }
function handleDrop(e) { function trash(event) {
e.stopPropagation(); const target = event.target;
console.log("trash", target)
target.style.backgroundColor = '';
if (target && dragged) {
event.preventDefault();
console.log(dragged.parentNode.className);
if (dragged.parentNode.className == "drop-zone") {
dragged.remove();
}
}
}
if (dragSrcEl !== this) { function handleDrop(event) {
dragSrcEl.innerHTML = this.innerHTML; const target = event.target;
this.innerHTML = e.dataTransfer.getData('text/html'); if (target && dragged) {
var steps = [] target.style.backgroundColor = '';
var nl = document.querySelectorAll(".stepcontainer .trainingstep .stepcontent"); event.preventDefault();
nl.forEach((s) => { // Get the id of the target and add the moved element to the target's DOM
console.log(s.id); // dragged.parentNode.removeChild(dragged);
steps.push(s.id) if (target.nodeName == "SECTION") {
}) dragged.style.opacity = '';
console.log(steps); var dropped = dragged.cloneNode(true);
target.appendChild(dropped);
}
if (target.nodeName == 'DIV') {
// insert after
dragged.style.opacity = '';
var dropped = dragged.cloneNode(true);
if (target.parentNode.nodeName == 'SECTION') {
target.after(dropped);
}
}
}
} }
return false; function noDrop(event) {
} 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 trashcan = document.querySelector('.trash-can');
trashcan.addEventListener('drop', trash)
trashcan.addEventListener('dragenter', handleDragEnter);
trashcan.addEventListener('dragleave', handleDragLeave);
trashcan.addEventListener('dragover', handleDragOver);
let items = document.querySelectorAll('.stepcontainer .trainingstep'); let items = document.querySelectorAll('.stepcontainer .trainingstep');
items.forEach(function(item) { items.forEach(function(item) {
item.addEventListener('dragstart', handleDragStart); item.addEventListener('dragstart', handleDragStart);
item.addEventListener('dragover', handleDragOver);
item.addEventListener('dragenter', handleDragEnter);
item.addEventListener('dragleave', handleDragLeave);
item.addEventListener('dragend', handleDragEnd); item.addEventListener('dragend', handleDragEnd);
item.addEventListener('drop', handleDrop); item.addEventListener('drop',noDrop);
item.addEventListener('dragenter',noDrop);
}); });
});
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -325,7 +325,7 @@ th.rotate > div > span {
.stepcontainer { .stepcontainer {
display: grid; display: grid;
grid-template-columns: repeat(5, 1fr); grid-template-columns: repeat(2, 1fr);
gap: 10px; gap: 10px;
} }
@@ -341,6 +341,22 @@ th.rotate > div > span {
border: 3px dotted #666; border: 3px dotted #666;
} }
.drop-zone {
position: relative;
overflow: hidden;
background: #878787;
color: white;
padding: 10px;
}
.trash-can {
position: relative;
overflow: hidden;
background: red;
color: white;
padding: 10px;
}
.divlines { .divlines {
display: block; display: block;
overflow-x: hidden; overflow-x: hidden;