-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
125 lines (114 loc) · 3.99 KB
/
script.js
File metadata and controls
125 lines (114 loc) · 3.99 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
/*
Script that runs the calculator. We register callbacks for buttons based on
their IDs and/or classes, and use the eval() function hand in hand with DOM
element updates to dislay the computed value
*/
// Get references to DOM elements
let displayScreen = document.getElementById("display-value");
let decButton = document.getElementById("decimal");
let clrButton = document.getElementById("clear");
console.log(decButton);
let backSpaceButton = document.getElementById("backspace");
let zeroButton = document.getElementById("zero");
let oneButton = document.getElementById("one");
let twoButton = document.getElementById("two");
let threeButton = document.getElementById("three");
let fourButton = document.getElementById("four");
let fiveButton = document.getElementById("five");
let sixButton = document.getElementById("six");
let sevenButton = document.getElementById("seven");
let eightButton = document.getElementById("eight");
let nineButton = document.getElementById("nine");
let numberButtons = document.getElementsByClassName("number");
let operatorButtons = document.getElementsByClassName("operator");
/* The following statements generated an error: it turns out using
forEach hacks with nodeLists isn't such a good idea after all
https://ultimatecourses.com/blog/ditch-the-array-foreach-call-nodelist-hack
numberButtons.forEach(button => button.addEventListener("click", updateDisplay, false));
operatorButtons.forEach(button => button.addEventListener("click", operate, false));
*/
for (let i=0; i<numberButtons.length; i++) {
numberButtons[i].addEventListener("click", updateDisplay, false);
}
for (let j=0; j<operatorButtons.length; j++) {
operatorButtons[j].addEventListener("click", operate, false);
}
let displayValue = '0';
let intermediate;
let stringEvalAcc = [];
function updateDisplay(clicker) {
let clicked = clicker.target.innerText;
if (displayValue === '0') {
displayValue= '';
}
displayValue += clicked;
displayScreen.innerText = displayValue;
}
function operate(clicker) {
let op = clicker.target.innerText;
console.log(op);
switch (op) {
/* Operators */
case '+':
intermediate = displayValue;
displayValue = '0';
displayScreen.innerText = displayValue;
stringEvalAcc.push(intermediate);
stringEvalAcc.push(op);
break;
case '-':
intermediate = displayValue;
displayValue = '0';
displayScreen.innerText = displayValue;
stringEvalAcc.push(intermediate);
stringEvalAcc.push(op);
break;
case 'x':
intermediate = displayValue;
displayValue = '0';
displayScreen.innerText = displayValue;
stringEvalAcc.push(intermediate);
stringEvalAcc.push('*');
break;
case '÷':
intermediate = displayValue;
displayValue = '0';
displayScreen.innerText = displayValue;
stringEvalAcc.push(intermediate);
stringEvalAcc.push('/');
break;
/* Evaluation */
case '=':
stringEvalAcc.push(displayValue);
console.log(stringEvalAcc.join(' '));
let result = eval(stringEvalAcc.join(' '));
displayValue = `${result}`;
displayScreen.innerText = displayValue;
stringEvalAcc = [];
break;
default:
break;
}
}
/*
clrButton.onclick = () => {
displayValue = '0';
displayScreen.innerText = displayValue;
intermediate = undefined;
stringEvalAcc = [];
}
backSpaceButton.onclick = () => {
let length = displayValue.length;
displayValue = displayValue.slice(0, length-1);
if (displayValue == '') {
displayValue = '0';
}
displayScreen.innerText = displayValue;
}
*/
decButton.onclick = () => {
if (!displayValue.includes('.')) {
displayValue == '.';
displayScreen.innerText = displayValue;
}
}