-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
88 lines (79 loc) · 2.8 KB
/
script.js
File metadata and controls
88 lines (79 loc) · 2.8 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
const calculatorDisplay = document.querySelector("h1");
const inputBtns = document.querySelectorAll("button"); // Array of buttons
const clearBtn = document.getElementById("clear-btn");
// Calculate operation
const calculate = {
"/": (firstNumber, secondNumber) => firstNumber / secondNumber,
"*": (firstNumber, secondNumber) => firstNumber * secondNumber,
"+": (firstNumber, secondNumber) => firstNumber + secondNumber,
"-": (firstNumber, secondNumber) => firstNumber - secondNumber,
"=": (firstNumber, secondNumber) => secondNumber,
};
// Global variables to keep track of calculator state
let firstValue = 0;
let operatorValue = "";
let awaitNextValue = false;
const setNumberValue = (number) => {
if (awaitNextValue) {
// Replace current display value once a value is entered
calculatorDisplay.textContent = number;
awaitNextValue = false; // turns back true after pressing operator
} else {
const displayValue = calculatorDisplay.textContent;
calculatorDisplay.textContent =
displayValue === "0" ? number : displayValue + number;
}
};
const addDecimal = () => {
// If operator is pressed, don't add decimal
if (awaitNextValue) return;
// Handles the logic for decimal (dot) operator
if (!calculatorDisplay.textContent.includes(".")) {
calculatorDisplay.textContent = `${calculatorDisplay.textContent}.`;
}
};
const useOperator = (operator) => {
const currentValue = Number(calculatorDisplay.textContent);
// Prevent multiple consecutive operators
if (operatorValue && awaitNextValue) {
operatorValue = operator;
return;
}
// Assign firstValue if no value
if (!firstValue) {
firstValue = currentValue;
} else {
console.log(firstValue, operatorValue, currentValue);
const calculation = calculate[operatorValue](firstValue, currentValue);
calculatorDisplay.textContent = `${operator} ${calculation}`;
firstValue = calculation;
}
awaitNextValue = true; // Ready for the next value
operatorValue = operator; // Store the operator
};
// Reset all values, display
const resetAll = () => {
firstValue = 0;
operatorValue = "";
awaitNextValue = false;
calculatorDisplay.textContent = "0";
};
// Add Event Listeners for numbers, operators, decimal buttons
inputBtns.forEach((inputBtn) => {
// Number buttons (have no class)
if (inputBtn.classList.length === 0) {
inputBtn.addEventListener("click", () => {
setNumberValue(inputBtn.value);
});
// Operator buttons
} else if (inputBtn.classList.contains("operator")) {
inputBtn.addEventListener("click", () => {
useOperator(inputBtn.value);
});
// The decimal (dot) operator
} else if (inputBtn.classList.contains("decimal")) {
inputBtn.addEventListener("click", () => addDecimal());
}
});
// Clear the screen
clearBtn.addEventListener("click", resetAll);