works with remove thru trash can
This commit is contained in:
@@ -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 %}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user