-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsorting.js
123 lines (101 loc) · 4.13 KB
/
sorting.js
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
120
121
122
123
// swap function util for sorting algorithms takes input of 2 DOM elements with .style.height feature
function swap(el1, el2) {
console.log('In swap()');
let temp = el1.style.height;
el1.style.height = el2.style.height;
el2.style.height = temp;
}
// Disables sorting buttons used in conjunction with enable, so that we can disable during sorting and enable buttons after it
function disableSortingBtn(){
document.querySelector(".bubbleSort").disabled = true;
document.querySelector(".insertionSort").disabled = true;
document.querySelector(".mergeSort").disabled = true;
document.querySelector(".quickSort").disabled = true;
document.querySelector(".selectionSort").disabled = true;
}
// Enables sorting buttons used in conjunction with disable
function enableSortingBtn(){
document.querySelector(".bubbleSort").disabled = false;
document.querySelector(".insertionSort").disabled = false;
document.querySelector(".mergeSort").disabled = false;
document.querySelector(".quickSort").disabled = false;
document.querySelector(".selectionSort").disabled = false;
}
// Disables size slider used in conjunction with enable, so that we can disable during sorting and enable buttons after it
function disableSizeSlider(){
document.querySelector("#arr_sz").disabled = true;
}
// Enables size slider used in conjunction with disable
function enableSizeSlider(){
document.querySelector("#arr_sz").disabled = false;
}
// Disables newArray buttons used in conjunction with enable, so that we can disable during sorting and enable buttons after it
function disableNewArrayBtn(){
document.querySelector(".newArray").disabled = true;
}
// Enables newArray buttons used in conjunction with disable
function enableNewArrayBtn(){
document.querySelector(".newArray").disabled = false;
}
// Used in async function so that we can so animations of sorting, takes input time in ms (1000 = 1s)
function waitforme(milisec) {
return new Promise(resolve => {
setTimeout(() => { resolve('') }, milisec);
})
}
// Selecting size slider from DOM
let arraySize = document.querySelector('#arr_sz');
// Event listener to update the bars on the UI
arraySize.addEventListener('input', function(){
console.log(arraySize.value, typeof(arraySize.value));
createNewArray(parseInt(arraySize.value));
});
// Default input for waitforme function (260ms)
let delay = 260;
// Selecting speed slider from DOM
let delayElement = document.querySelector('#speed_input');
// Event listener to update delay time
delayElement.addEventListener('input', function(){
console.log(delayElement.value, typeof(delayElement.value));
delay = 320 - parseInt(delayElement.value);
});
// Creating array to store randomly generated numbers
let array = [];
// Call to display bars right when you visit the site
createNewArray();
// To create new array input size of array
function createNewArray(noOfBars = 60) {
// calling helper function to delete old bars from dom
deleteChild();
// creating an array of random numbers
array = [];
for (let i = 0; i < noOfBars; i++) {
array.push(Math.floor(Math.random() * 250) + 1);
}
console.log(array);
// select the div #bars element
const bars = document.querySelector("#bars");
// create multiple element div using loop and adding class 'bar col'
for (let i = 0; i < noOfBars; i++) {
const bar = document.createElement("div");
bar.style.height = `${array[i]*2}px`;
bar.classList.add('bar');
bar.classList.add('flex-item');
bar.classList.add(`barNo${i}`);
bars.appendChild(bar);
}
}
// Helper function to delete all the previous bars so that new can be added
function deleteChild() {
const bar = document.querySelector("#bars");
bar.innerHTML = '';
}
// Selecting newarray button from DOM and adding eventlistener
const newArray = document.querySelector(".newArray");
newArray.addEventListener("click", function(){
console.log("From newArray " + arraySize.value);
console.log("From newArray " + delay);
enableSortingBtn();
enableSizeSlider();
createNewArray(arraySize.value);
});