-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
129 lines (105 loc) · 2.68 KB
/
Copy pathscript.js
File metadata and controls
129 lines (105 loc) · 2.68 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
127
128
129
//Math module
function add(a, b) {
return +a + +b;
}
function subtract(a, b) {
return +a - +b;
}
function multiply(a, b) {
return a*b;
}
function divide(a, b) {
return a/b;
}
function operate(operator, a, b) {
if (operator === 'add') {
return add(a, b);
} else if (operator === 'subtract') {
return subtract(a, b);
} else if (operator === 'multiply') {
return multiply(a, b);
} else if (operator === 'divide') {
return divide(a, b);
} else {
return 'ERROR';
}
}
//Calculator interactivity module
const numpad = document.querySelectorAll('button');
const display = document.querySelector('.display');
let operator;
let buffer;
function enterNumber(key) {
if (display.textContent == buffer && operator) {
display.textContent = '';
}
display.textContent += key;
};
function overflow() {
if (display.textContent.length > 11) {
if (+display.textContent % 1 !== 0) {
display.textContent = (+display.textContent).toFixed(11);
} else {
display.textContent = (+display.textContent).toExponential(6);
}
}
}
function clear() {
display.textContent = '';
operator = null;
buffer = null;
}
function operateOnBuffer(key) {
if (operator) {
display.textContent = operate(operator, buffer, Number(display.textContent));
overflow();
}
operator = key;
buffer = +display.textContent;
}
function equals() {
display.textContent = operate(operator, buffer, Number(display.textContent));
operator = null;
overflow();
}
//Numpad functionality
numpad.forEach((button) => {
if (button.classList.contains('number')) {
button.addEventListener('click', () => {
enterNumber(button.textContent);
})
}
if (button.id === 'clear') button.addEventListener('click', clear);
if (button.classList.contains('operator')) {
button.addEventListener('click', () => {
operateOnBuffer(button.id);
});
}
if (button.id === 'equals') button.addEventListener('click', equals);
});
//Keyboard support
function keyboardInput(e) {
if (isFinite(e.key)) {
enterNumber(e.key);
}
if (e.key === 'Enter') {
equals();
}
//Operators from keyboard
if (e.key === '+') {
operateOnBuffer('add');
}
if (e.key === '-') {
operateOnBuffer('subtract');
}
if (e.key === '/') {
operateOnBuffer('divide');
}
if (e.key === '*') {
operateOnBuffer('multiply');
}
if (e.key === 'Backspace' || e.key === 'Delete') {
clear();
}
}
window.addEventListener('keydown', keyboardInput);