const calculator = {
displayValue: "0",
firstOperand: null,
waitingForSecondOperand: false,
operator: null,
};
function inputDigit(digit) {
const { displayValue, waitingForSecondOperand } = calculator;
if (waitingForSecondOperand === true) {
calculator.displayValue = digit;
calculator.waitingForSecondOperand = false;
} else {
calculator.displayValue =
displayValue === "0" ? digit : displayValue + digit;
}
}
function inputDecimal(dot) {
if (calculator.waitingForSecondOperand === true) return;
// If the `displayValue` does not contain a decimal point
if (!calculator.displayValue.includes(dot)) {
// Append the decimal point
calculator.displayValue += dot;
}
}
function handleOperator(nextOperator) {
const { firstOperand, displayValue, operator } = calculator;
const inputValue = parseFloat(displayValue);
if (operator && calculator.waitingForSecondOperand) {
calculator.operator = nextOperator;
return;
}
if (firstOperand == null) {
calculator.firstOperand = inputValue;
} else if (operator) {
const result = performCalculation[operator](firstOperand, inputValue);
calculator.displayValue = String(result);
calculator.firstOperand = result;
}
calculator.waitingForSecondOperand = true;
calculator.operator = nextOperator;
}
const performCalculation = {
"/": (firstOperand, secondOperand) => firstOperand / secondOperand,
"*": (firstOperand, secondOperand) => firstOperand * secondOperand,
"+": (firstOperand, secondOperand) => firstOperand + secondOperand,
"-": (firstOperand, secondOperand) => firstOperand - secondOperand,
"=": (firstOperand, secondOperand) => secondOperand,
};
function resetCalculator() {
calculator.displayValue = "0";
calculator.firstOperand = null;
calculator.waitingForSecondOperand = false;
calculator.operator = null;
}
function updateDisplay() {
const display = document.querySelector(".calculator-screen");
display.value = calculator.displayValue;
}
updateDisplay();
const keys = document.querySelector(".calculator-keys");
keys.addEventListener("click", (event) => {
const { target } = event;
if (!target.matches("button")) {
return;
}
if (target.classList.contains("operator")) {
handleOperator(target.value);
updateDisplay();
return;
}
if (target.classList.contains("decimal")) {
inputDecimal(target.value);
updateDisplay();
return;
}
if (target.classList.contains("all-clear
Login Username: Password: Login
Comments
Post a Comment