-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
93 lines (77 loc) · 2.44 KB
/
index.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
const radios = document.getElementsByName('theme');
const result = document.querySelector('#result');
const operators = ['/', '*', '+', '-'];
let calcul = '0';
let display = '0';
result.textContent = display;
const addOperators = (op) => {
let nbOperators = calcul.split('').filter(elt => operators.includes(elt)).length;
if (nbOperators >= 1) {
if (operators.includes(calcul[calcul.length - 1])) {
calcul.slice(0, -1);
calcul[calcul.length - 1] = op;
} else {
calculate();
}
}
if (!operators.includes(calcul[calcul.length - 1]) && calcul[calcul.length - 1] !== '.') {
calcul += op;
} else {
calcul = calcul.slice(0, -1) + op;
}
result.textContent = display;
}
const addNumber = (num) => {
let indexOperator = [
calcul.indexOf('+'),
calcul.indexOf('-'),
calcul.indexOf('*'),
calcul.indexOf('/')
].filter(i => i !== -1);
let lastNumber = indexOperator.length === 0 ? calcul : calcul.slice(indexOperator[0] + 1);
if (calcul.length === 1 && calcul === '0') {
calcul = num;
display = num;
} else if (!(lastNumber.split('').includes(num) && num === '.')) {
calcul += num;
display += num;
}
if (operators.includes(calcul[calcul.length - 2])) {
display = calcul.slice(calcul.length - 1);
}
result.textContent = display;
}
const calculate = () => {
calcul = eval(calcul).toString();
display = calcul;
result.textContent = display;
}
const reset = () => {
calcul = '0';
display = '0';
result.textContent = display;
}
const deleteNumber = () => {
if (display.length !== 1 && calcul.length !== 1) {
calcul = calcul.slice(0, -1);
display = calcul;
} else {
calcul = '0';
display = '0';
}
result.textContent = display;
}
radios.forEach(radio => {
radio.addEventListener('change', (e) => {
document.body.className = e.target.value;
})
})
document.querySelector('#del').addEventListener('click', deleteNumber);
document.querySelector('#reset').addEventListener('click', reset);
document.querySelector('#eval').addEventListener('click', calculate);
document.querySelectorAll('.number').forEach(btn => {
btn.addEventListener('click', (e) => addNumber(e.target.value))
})
document.querySelectorAll('.operator').forEach(op => {
op.addEventListener('click', (e) => addOperators(e.target.value))
})