-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtier.js
More file actions
121 lines (107 loc) · 3.75 KB
/
Copy pathtier.js
File metadata and controls
121 lines (107 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
let currentDraggedItem = null;
const tierForm = document.getElementById('frm1');
tierForm.addEventListener('submit', (event) => {
event.preventDefault()
const tierName = document.getElementById('tierName');
const a = tierName.value;
if (a === '') {
alert("The tier name can't be empty.");
}
else {
createTierList(a);
tierName.value = '';
}
});
function createTierList(a) {
const tierDiv = document.createElement('div');
tierDiv.classList.add('tier');
const tierName2 = document.createElement('h1');
tierName2.textContent = a;
tierDiv.appendChild(tierName2);
const tierItemDiv = document.createElement('div')
tierItemDiv.classList.add('tierItems')
tierDiv.appendChild(tierItemDiv)
const tierBox = document.getElementById('sec4')
tierBox.appendChild(tierDiv);
tierName2.addEventListener('dblclick', (event) => {
const newName = prompt("Enter new name for the tier:", event.target.textContent);
if (newName !== null && newName.trim() !== '') {
event.target.textContent = newName;
}
})
const deleteBtn = document.createElement('button');
deleteBtn.classList.add('delete-btn');
deleteBtn.textContent = "🗑️";
tierDiv.appendChild(deleteBtn);
deleteBtn.addEventListener('click', () => {
if (confirm(`Delete tier??`)) {
tierDiv.remove();
assignColors();
}
});
setupDropZone(tierItemDiv);
assignColors();
}
const imageForm = document.getElementById('frm2');
imageForm.addEventListener('submit', (event) => {
event.preventDefault();
const link = document.getElementById('imgLink');
const imageURL = link.value;
if (imageURL === "") {
alert("Enter a valid image link/url.")
}
else {
addImage(imageURL);
}
});
function addImage(imageURL) {
const imgDiv = document.createElement('div');
imgDiv.classList.add('imgDiv');
const imgElem = document.createElement('img');
imgElem.src = imageURL;
imgElem.classList.add("img");
imgDiv.appendChild(imgElem);
const imgBox = document.getElementById('sec3')
imgBox.appendChild(imgDiv);
// Makes the image draggable by 1st allowing and then tracking
imgDiv.setAttribute("draggable", "true")
dragSetup(imgDiv);
imgDiv.addEventListener('dblclick', (event) => {
imgBox.appendChild(event.target.parentNode);
})
}
function dragSetup(imgDiv) {
imgDiv.addEventListener('dragstart', (event) => {
console.log("Dragging started.", event.target.parentNode);
if(currentDraggedItem != event.target.parentNode){
currentDraggedItem = event.target.parentNode;
}
})
}
// These codes were for understanding, it works only for already added img
// We can enable this if we want to use some img/tierList that pre exists.
// const imgDivs = document.getElementsByClassName('imgDiv');
// for (const imgDiv of imgDivs) {
// dragSetup(imgDiv)
// }
// const tierList = document.querySelectorAll('.tier');
// tierList.forEach(setupDropZone);
function setupDropZone(tierList) {
tierList.addEventListener('drop', (event) => {
event.preventDefault(); //we should disable default setting of not allowing dropping
console.log('Dropped');
event.target.appendChild(currentDraggedItem);
});
tierList.addEventListener('dragover', (event) => {
event.preventDefault();
console.log("Dragover ....");
});
}
function assignColors() {
const tiers = document.querySelectorAll('.tier');
const total = tiers.length;
tiers.forEach((tier, index) => {
const hue = Math.round((index / Math.max(1, total - 1)) * 120); // from red to blue
tier.style.backgroundColor = `hsl(${hue}, 100%, 50%)`;
});
}