-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
122 lines (118 loc) · 3.21 KB
/
script.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
class Calculator {
constructor(currentText, previousText) {
this.currentText = currentText;
this.previousText = previousText;
this.clear();
}
clear() {
this.currentNumber = "0";
this.previousNumber = "";
this.operation = undefined;
}
deleteLast() {
let last = this.currentNumber.toString().slice(-1);
if (last != 0) {
this.currentNumber = this.currentNumber.toString().slice(0, -1);
}
}
giveOperation(operation) {
if(this.currentNumber == "0"){
this.operation = operation
return
}
if (this.previousNumber && this.currentNumber) {
this.compute();
}
this.operation = operation;
this.previousNumber = this.currentNumber;
this.currentNumber = "0";
}
compute() {
let current = Number(this.currentNumber);
let previous = Number(this.previousNumber);
let operations = this.operation;
let computition;
switch (operations) {
case "÷":
computition = previous / current;
break;
case "+":
computition = previous + current;
break;
case "-":
computition = previous - current;
break;
case "x":
computition = previous * current;
break;
default:
computition = "";
break;
}
this.currentNumber = computition.toString();
this.previousNumber = "";
this.operation = undefined;
}
appendNumber(number) {
if (number == "." && this.currentNumber.includes(".")) return;
this.currentNumber = this.currentNumber.toString() + number.toString();
}
getFormetedNumber(number) {
let firstNumber = parseFloat(number.toString().split(".")[0]);
let secondNumber = number.toString().split(".")[1];
let finalOfFirstNumber;
if (isNaN(firstNumber)) {
finalOfFirstNumber = "";
} else {
finalOfFirstNumber = firstNumber.toLocaleString("en", {
maximumFractionDigits: 0,
});
}
if (secondNumber != undefined) {
return `${finalOfFirstNumber}.${secondNumber}`;
} else {
return finalOfFirstNumber;
}
}
updateDisplay() {
this.currentText.innerHTML = this.getFormetedNumber(this.currentNumber);
if (this.operation) {
this.previousText.innerHTML =
this.getFormetedNumber(this.previousNumber) + " " + this.operation;
} else {
this.previousText.innerHTML = "";
}
}
}
const currentText = document.querySelector("[data-current]"),
previousText = document.querySelector("[data-previous]"),
numbers = document.querySelectorAll("[data-number]"),
operations = document.querySelectorAll("[data-operation]"),
allClear = document.querySelector("[data-all-clear]"),
deleteBtn = document.querySelector("[data-delete]"),
equal = document.querySelector("[data-equal]");
let calculator = new Calculator(currentText, previousText);
numbers.forEach((button) => {
button.addEventListener("click", (e) => {
calculator.appendNumber(e.target.innerHTML);
calculator.updateDisplay();
});
});
operations.forEach((button) => {
button.addEventListener("click", (e) => {
calculator.giveOperation(e.target.innerHTML);
calculator.updateDisplay();
});
});
equal.addEventListener("click", () => {
calculator.compute();
calculator.updateDisplay();
});
allClear.addEventListener("click", () => {
calculator.clear();
calculator.updateDisplay();
});
deleteBtn.addEventListener("click", () => {
calculator.deleteLast();
calculator.updateDisplay();
});