71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
document.querySelectorAll(".calc-container input[type=button]").forEach((e) => {
|
|
e.onclick = () => {
|
|
const c = e.value;
|
|
const out = document.querySelector(".calc-container input[name=out]");
|
|
if (c == "=") {
|
|
try {
|
|
out.value = calc(out.value);
|
|
} catch (e) {
|
|
out.value = "Error";
|
|
}
|
|
}
|
|
else if (e.name == "clear") {
|
|
if (out.value.length > 0)
|
|
out.value = out.value.substring(0, out.value.length - 1);
|
|
} else out.value += e.value;
|
|
}
|
|
});
|
|
|
|
let clearScreenTimmer = null;
|
|
|
|
const createTimmer = () => {
|
|
clearScreenTimmer = setTimeout(() => {
|
|
const out = document.querySelector(".calc-container input[name=out]");
|
|
out.value = "";
|
|
}, 1000);
|
|
}
|
|
|
|
const removeTimmer = () => {
|
|
if (clearScreenTimmer) clearTimeout(clearScreenTimmer);
|
|
}
|
|
|
|
document.querySelector(".calc-container input[name=clear]").onmousedown = createTimmer;
|
|
document.querySelector(".calc-container input[name=clear]").onmouseup = removeTimmer;
|
|
document.querySelector(".calc-container input[name=clear]").ontouchstart = createTimmer;
|
|
document.querySelector(".calc-container input[name=clear]").ontouchend = removeTimmer;
|
|
|
|
const oprs = ["-", "+", "*", "/"];
|
|
|
|
const calc = (infix, opr = 0) => {
|
|
infix = infix.replace(" ", "");
|
|
let answer = null;
|
|
let parts = infix.split(oprs[opr]);
|
|
|
|
for (let i = 0; i < parts.length; i++) {
|
|
let num = Number(parts[i]);
|
|
if (isNaN(num) && opr < oprs.length)
|
|
num = calc(parts[i], opr + 1);
|
|
|
|
if (answer == null) {
|
|
answer = num;
|
|
continue;
|
|
}
|
|
|
|
switch (opr) {
|
|
case 3:
|
|
answer /= num;
|
|
break;
|
|
case 2:
|
|
answer *= num;
|
|
break;
|
|
case 1:
|
|
answer += num;
|
|
break;
|
|
case 0:
|
|
answer -= num;
|
|
break;
|
|
}
|
|
}
|
|
return answer;
|
|
}
|