Skip to content

Commit b4d0c5f

Browse files
committed
la til hastighet og endret litt på hvordan fargen oppfører seg
1 parent 68b43fa commit b4d0c5f

9 files changed

+134
-44
lines changed

MergeSort/MergeSort.html

+3-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ <h1 id="header">MergeSort</h1>
3838
<button id="togglePause" class="btn btn-primary" onclick="viewer.pause()">Play/Pause</button>
3939
<button id="backward" class="btn btn-primary" onclick="viewer.backward()">Backward</button>
4040
<button id="forward" class="btn btn-primary" onclick="viewer.forward()">Forward</button>
41-
<!-- TODO: speed buttons -->
41+
<button id="slow" class="btn btn-primary" onclick="viewer.slow()">Slow</button>
42+
<button id="medium" class="btn btn-primary" onclick="viewer.medium()">Medium</button>
43+
<button id="fast" class="btn btn-primary" onclick="viewer.fast()">Fast</button>
4244
</div>
4345
<br>
4446

MergeSort/js/EventManager.js

+25
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var eventManager = /** @class */ (function () {
88
this.delayTime = 1000; // Original value
99
this.nextEvents = [];
1010
this.previousEvents = [];
11+
this.paused = true;
1112
}
1213
// Executing the next event in the queue, adding it to 'previous'
1314
eventManager.prototype.next = function () {
@@ -35,15 +36,18 @@ var eventManager = /** @class */ (function () {
3536
};
3637
eventManager.prototype.start = function () {
3738
var manager = this; // Anonymous functions cannot access this...
39+
this.paused = false;
3840
this.eventThread = setInterval(function () {
3941
manager.next();
4042
}, manager.delayTime);
4143
};
4244
eventManager.prototype.pause = function () {
45+
this.paused = true;
4346
clearInterval(this.eventThread);
4447
};
4548
eventManager.prototype.unpause = function () {
4649
var manager = this;
50+
this.paused = false;
4751
this.eventThread = setInterval(function () {
4852
manager.next();
4953
}, manager.delayTime);
@@ -53,6 +57,27 @@ var eventManager = /** @class */ (function () {
5357
this.nextEvents = [];
5458
this.previousEvents = [];
5559
};
60+
eventManager.prototype.slow = function () {
61+
this.delayTime = 1500;
62+
this.helpSetInterval();
63+
};
64+
eventManager.prototype.medium = function () {
65+
this.delayTime = 1000;
66+
this.helpSetInterval();
67+
};
68+
eventManager.prototype.fast = function () {
69+
this.delayTime = 500;
70+
this.helpSetInterval();
71+
};
72+
eventManager.prototype.helpSetInterval = function () {
73+
if (!this.paused) {
74+
this.pause();
75+
this.start();
76+
}
77+
};
78+
eventManager.prototype.getDelayTime = function () {
79+
return this.delayTime;
80+
};
5681
return eventManager;
5782
}());
5883
var FrontendEvent = /** @class */ (function () {

MergeSort/js/EventManager.ts

+33-1
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
*
44
*/
55

6-
declare var $;
6+
declare var $: any;
77

88
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
99
class eventManager {
1010
delayTime: number = 1000; // Original value
1111
nextEvents: FrontendEvent[] = [];
1212
previousEvents: FrontendEvent[] = [];
1313
eventThread: number;
14+
paused: boolean = true;
1415

1516
// Executing the next event in the queue, adding it to 'previous'
1617
next() {
@@ -41,17 +42,20 @@ class eventManager {
4142

4243
start() {
4344
let manager = this; // Anonymous functions cannot access this...
45+
this.paused = false;
4446
this.eventThread = setInterval(function () {
4547
manager.next();
4648
}, manager.delayTime);
4749
}
4850

4951
pause() {
52+
this.paused = true;
5053
clearInterval(this.eventThread);
5154
}
5255

5356
unpause() {
5457
let manager = this;
58+
this.paused = false;
5559
this.eventThread = setInterval(function () {
5660
manager.next();
5761
}, manager.delayTime);
@@ -62,6 +66,34 @@ class eventManager {
6266
this.nextEvents = [];
6367
this.previousEvents = [];
6468
}
69+
70+
slow() {
71+
72+
this.delayTime = 1500;
73+
this.helpSetInterval();
74+
}
75+
76+
medium() {
77+
this.delayTime = 1000;
78+
this.helpSetInterval();
79+
}
80+
81+
fast(){
82+
this.delayTime = 500;
83+
this.helpSetInterval();
84+
}
85+
86+
helpSetInterval() {
87+
if(!this.paused) {
88+
this.pause();
89+
this.start();
90+
}
91+
}
92+
93+
getDelayTime() {
94+
return this.delayTime;
95+
}
96+
6597
}
6698

6799
class FrontendEvent {

MergeSort/js/MergeSortAlgorithm.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ function startMergeSort() {
1717
checkIfAlreadyRunning();
1818
copyArray = returnArray();
1919
mergesort(copyArray);
20+
viewer.setColorInArrayElements(copyArray, 3, true);
2021
}
2122
function mergesort(array) {
2223
if (array.length < 2) {
@@ -37,8 +38,7 @@ function mergesort(array) {
3738
viewer.setColorInArrayElements(right, 2, true);
3839
viewer.lowerElements(left);
3940
viewer.lowerElements(right);
40-
viewer.setColorInArrayElements(left, 1, false);
41-
viewer.setColorInArrayElements(right, 2, false);
41+
viewer.setColorInArrayElements(array, 1, false);
4242
//Split until there is only 1 element left
4343
return merge(mergesort(left), mergesort(right));
4444
}
@@ -88,7 +88,8 @@ function merge(left, right) {
8888
counter++;
8989
}
9090
}
91-
viewer.setColorInArrayElements(testing, 3, false);
91+
if (!isSorted(testing))
92+
viewer.setColorInArrayElements(testing, 3, false);
9293
copyArray = testing.slice(0);
9394
return result.concat(left.slice(tempLeftIndex)).concat(right.slice(tempRightIndex));
9495
}

MergeSort/js/MergeSortAlgorithm.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function startMergeSort() {
2424
mergesort(copyArray);
2525
}
2626

27-
function mergesort(array: number[]) {
27+
function mergesort(array: number[]):any {
2828
if (array.length < 2) {
2929
//denne er ekkel
3030
viewer.deselectPivotElement(array[0]);
@@ -49,8 +49,7 @@ function mergesort(array: number[]) {
4949
viewer.lowerElements(left);
5050
viewer.lowerElements(right);
5151

52-
viewer.setColorInArrayElements(left, 1, false);
53-
viewer.setColorInArrayElements(right, 2, false);
52+
viewer.setColorInArrayElements(array, 1, false);
5453

5554
//Split until there is only 1 element left
5655
return merge(mergesort(left), mergesort(right));
@@ -112,8 +111,8 @@ function merge(left: number[], right: number[]) {
112111
counter++;
113112
}
114113
}
115-
116-
viewer.setColorInArrayElements(testing, 3, false);
114+
if (!isSorted(testing))
115+
viewer.setColorInArrayElements(testing, 3, false);
117116

118117
copyArray = testing.slice(0);
119118
return result.concat(left.slice(tempLeftIndex)).concat(right.slice(tempRightIndex));

MergeSort/js/Methods.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ var defaultColor = "#fff";
55
var colors = ["#f1f500", "#f4a742", "#f49050", "#3adb04"];
66
function lowerElements(elements) {
77
for (var i = 0; i < elements.length; i++) {
8-
var newTop;
8+
var newTop = void 0;
99
var $elem = $("#" + insElemNr + elements[i]);
1010
newTop = parseInt($elem.css('top'), 10) + LEVEL_HEIGHT;
1111
$elem.animate({ top: newTop + "px" }, 500);

MergeSort/js/Methods.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
///<reference path="InitArray.ts"/>
22

33
declare var $;
4-
var insElemNr = "insElemNr";
4+
let insElemNr: string = "insElemNr";
55
let LEVEL_HEIGHT: number = 85;
66
let defaultColor: string = "#fff";
77
let colors: string[] = ["#f1f500", "#f4a742", "#f49050", "#3adb04"];
88

99
function lowerElements(elements: number[]) {
1010
for (let i = 0; i < elements.length; i++) {
11-
var newTop: number;
12-
var $elem = $("#" + insElemNr + elements[i]);
11+
let newTop: number;
12+
let $elem = $("#" + insElemNr + elements[i]);
1313
newTop = parseInt($elem.css('top'), 10) + LEVEL_HEIGHT;
1414
$elem.animate({top: newTop + "px"}, 500);
1515
}
1616
}
1717

1818
function liftElements(elements: number[]) {
1919
for (let i = 0; i < elements.length; i++) {
20-
var $elem = $("#" + insElemNr + elements[i]);
20+
let $elem = $("#" + insElemNr + elements[i]);
2121
if ($elem.offset().top > 170) {
22-
var newTop: number = parseInt($elem.css('top'), 10) - LEVEL_HEIGHT;
22+
let newTop: number = parseInt($elem.css('top'), 10) - LEVEL_HEIGHT;
2323
$elem.animate({top: newTop + "px"}, 500);
2424
}
2525
}

MergeSort/js/View.js

+29-14
Original file line numberDiff line numberDiff line change
@@ -80,55 +80,70 @@ var view = /** @class */ (function () {
8080
}(element, back);
8181
manager.addEvent(new FrontendEvent(forwardSteps, backwardSteps, this.animSpeed));
8282
};
83-
view.prototype.setColorInArrayElement = function (index, i, colorOn) {
84-
var forwardSteps = function (index, i, colorOn, colors) {
83+
view.prototype.setColorInArrayElement = function (index, color, colorOn) {
84+
var forwardSteps = function (index, color, colorOn) {
8585
return function () {
86-
setColor(index, i, colorOn);
86+
setColor(index, color, colorOn);
8787
};
88-
}(index, i, colorOn, colors);
89-
var backwardSteps = function (index, i, colorOn, colors) {
88+
}(index, color, colorOn);
89+
var backwardSteps = function (index, color, colorOn) {
9090
return function () {
91-
setColor(index, i, !colorOn);
91+
setColor(index, color, !colorOn);
9292
};
93-
}(index, i, colorOn, colors);
93+
}(index, color, colorOn);
9494
manager.addEvent(new FrontendEvent(forwardSteps, backwardSteps, this.animSpeed));
9595
};
96-
view.prototype.setColorInArrayElements = function (index, i, colorOn) {
97-
var forwardSteps = function (index, i, colorOn, colors) {
96+
view.prototype.setColorInArrayElements = function (index, color, colorOn) {
97+
var forwardSteps = function (index, color, colorOn) {
9898
return function () {
99-
setColors(index, i, colorOn);
99+
setColors(index, color, colorOn);
100100
};
101-
}(index, i, colorOn, colors);
102-
var backwardSteps = function (index, i, colorOn, colors) {
101+
}(index, color, colorOn);
102+
var backwardSteps = function (index, color, colorOn) {
103103
return function () {
104-
setColors(index, i, !colorOn);
104+
setColors(index, color, !colorOn);
105105
};
106-
}(index, i, colorOn, colors);
106+
}(index, color, colorOn);
107107
manager.addEvent(new FrontendEvent(forwardSteps, backwardSteps, this.animSpeed));
108108
};
109109
view.prototype.pause = function () {
110110
if (!this.paused) {
111111
this.paused = true;
112112
manager.pause();
113+
$('#backward').removeAttr('disabled');
114+
$('#forward').removeAttr('disabled');
113115
$("#togglePause").html("Resume");
114116
}
115117
else {
116118
this.paused = false;
117119
manager.unpause();
120+
$('#backward').attr('disabled', 'disabled');
121+
$('#forward').attr('disabled', 'disabled');
118122
$("#togglePause").html("Pause");
119123
}
120124
};
121125
view.prototype.setPause = function () {
122126
this.paused = true;
123127
manager.pause();
124128
$("#togglePause").html("Start");
129+
$('#backward').removeAttr('disabled');
130+
$('#forward').removeAttr('disabled');
125131
};
126132
view.prototype.forward = function () {
127133
manager.next();
128134
};
129135
view.prototype.backward = function () {
130136
manager.previous();
131137
};
138+
view.prototype.slow = function () {
139+
manager.slow();
140+
};
141+
view.prototype.medium = function () {
142+
manager.medium();
143+
};
144+
view.prototype.fast = function () {
145+
manager.fast();
146+
};
132147
return view;
133148
}());
134149
//Craete a global variable

0 commit comments

Comments
 (0)