-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript2.js
More file actions
126 lines (110 loc) · 4.37 KB
/
script2.js
File metadata and controls
126 lines (110 loc) · 4.37 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
120
121
122
123
124
125
126
const calculator = {
displayPreviousOperandTextElement: document.querySelector('[data-previous-operand]'),
displayCurrentOperandTextElement: document.querySelector('[data-current-operand]'),
clearButton: document.querySelector('[data-all-clear]'),
deleteButton: document.querySelector('[data-delete]'),
operationButtons: document.querySelectorAll('[data-operation]'),
numberButtons: document.querySelectorAll('[data-number]'),
equalsButton: document.querySelector('[data-equals]'),
previousOperand: '',
currentOperand: '',
operation: undefined,
};
calculator.clearButton.addEventListener('click', () => {
calculator.currentOperand = '';
calculator.previousOperand = '';
calculator.operation = undefined;
updateDisplay();
});
calculator.deleteButton.addEventListener('click', () => {
calculator.currentOperand = calculator.currentOperand.toString().slice(0, -1);
updateDisplay();
});
calculator.operationButtons.forEach((button) => {
button.addEventListener('click', (event) => {
const operation = event.target.innerText;
if (calculator.currentOperand === '') return;
if (calculator.previousOperand !== '') {
calculate();
}
calculator.operation = operation;
calculator.previousOperand = calculator.currentOperand;
calculator.currentOperand = '';
updateDisplay();
});
});
calculator.numberButtons.forEach((button) => {
button.addEventListener('click', (event) => {
const number = event.target.innerText;
calculator.currentOperand = calculator.currentOperand.toString() + number.toString();
updateDisplay();
});
});
calculator.equalsButton.addEventListener('click', (event) => {
calculate();
updateDisplay();
});
function calculate() {
let computation;
const prev = parseFloat(calculator.previousOperand);
const current = parseFloat(calculator.currentOperand);
if (isNaN(prev) || isNaN(current)) return;
switch (calculator.operation) {
case '+':
computation = prev + current;
break;
case '-':
computation = prev - current;
break;
case '*':
computation = prev * current;
break;
case '÷':
computation = prev / current;
break;
default:
return;
}
calculator.currentOperand = computation;
calculator.operation = undefined;
calculator.previousOperand = '';
}
function updateDisplay() {
const currentOperandElement = document.querySelector("[data-current-operand]");
const previousOperandElement = document.querySelector("[data-previous-operand]");
currentOperandElement.innerText = calculator.currentOperand;
if (calculator.previousOperand !== "") {
previousOperandElement.innerText = `${calculator.previousOperand} ${calculator.operation}`;
} else {
previousOperandElement.innerText = "";
}
}
const numberButtons = document.querySelectorAll("[data-number]");
numberButtons.forEach(button => {
button.addEventListener("click", () => {
calculator.appendNumber(button.innerText);
updateDisplay();
});
});
const operationButtons = document.querySelectorAll("[data-operation]");
operationButtons.forEach(button => {
button.addEventListener("click", () => {
calculator.chooseOperation(button.innerText);
updateDisplay();
});
});
const equalsButton = document.querySelector("[data-equals]");
equalsButton.addEventListener("click", button => {
calculator.compute();
updateDisplay();
});
const deleteButton = document.querySelector("[data-delete]");
deleteButton.addEventListener("click", button => {
calculator.delete();
updateDisplay();
});
const allClearButton = document.querySelector("[data-all-clear]");
allClearButton.addEventListener("click", button => {
calculator.clear();
updateDisplay();
});