-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
69 lines (58 loc) · 2.16 KB
/
main.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
const calculator = document.querySelector('.calculator');
const screen = document.querySelector('.cal-screen');
const buttons = document.querySelector('.cal-buttons');
let previousTypedButton = '';
let typedAfterOperator = false;
buttons.addEventListener('click', (e) => {
if (e.target.matches('button')) {
const buttonContent = e.target.textContent;
const numDisplayed = screen.textContent;
const action = e.target.dataset.action;
if (!action) {
if (numDisplayed === '0' || previousTypedButton === 'operator') {
if (numDisplayed !== '0' && typedAfterOperator) {
screen.textContent += buttonContent;
} else {
if (previousTypedButton === 'operator')
typedAfterOperator = true;
screen.textContent = buttonContent;
}
} else {
screen.textContent += buttonContent;
}
}
if (action === 'decimal') {
screen.textContent += '.';
}
if (action === 'add' || action === 'subtract' || action === 'multiply' || action === 'divide') {
previousTypedButton = 'operator';
calculator.dataset.firstValue = numDisplayed;
calculator.dataset.operator = action;
}
if (action === 'calculate') {
const firstValue = calculator.dataset.firstValue;
const operator = calculator.dataset.operator;
const secondValue = numDisplayed;
screen.textContent = calculate(firstValue, operator, secondValue);
}
if (action === 'clear') {
screen.textContent = '0';
typedAfterOperator = false;
previousTypedButton = "";
}
}
})
const calculate = (n1, operator, n2) => {
if (operator === 'add') {
return parseFloat(n1) + parseFloat(n2);
}
if (operator === 'subtract') {
return parseFloat(n1) - parseFloat(n2);
}
if (operator === 'multiply') {
return parseFloat(n1) * parseFloat(n2);
}
if (operator === 'divide') {
return parseFloat(n1) / parseFloat(n2);
}
}