This commit is contained in:
Piyush मिश्रः 2024-02-28 19:09:07 +05:30
commit 33cfdbde40
5 changed files with 183 additions and 0 deletions

6
README.md Normal file
View File

@ -0,0 +1,6 @@
# Ugly Calculator
It is a Calculator written in javascript while getting bored in college. Enjoy?!
![Screenshot](./screenshot.jpg)

40
index.html Normal file
View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Calculator</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="#">
<link href="style.css" rel="stylesheet">
</head>
<body>
<div class="calc-container">
<div>
<input type="text" name="out">
<input type="button" value="<" name="clear">
</div>
<div>
<input type="button" value="1">
<input type="button" value="2">
<input type="button" value="3">
<input type="button" value="/">
<input type="button" value="4">
<input type="button" value="5">
<input type="button" value="6">
<input type="button" value="*">
<input type="button" value="7">
<input type="button" value="8">
<input type="button" value="9">
<input type="button" value="-">
<input type="button" value="0">
<input type="button" value=".">
<input type="button" value="+">
<input type="button" value="=">
</div>
</div>
<script src="main.js"></script>
</body>
</html>

70
main.js Normal file
View File

@ -0,0 +1,70 @@
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 = () => {
clearTimmer = setTimeout(() => {
const out = document.querySelector(".calc-container input[name=out]");
out.value = "";
}, 1000);
}
const removeTimmer = () => {
if (clearTimmer) clearTimeout(clearTimmer);
}
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;
}

BIN
screenshot.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

67
style.css Normal file
View File

@ -0,0 +1,67 @@
body {
padding: 0;
margin: 0.5rem;
}
.calc-container {
border: 2px solid black;
width: calc(100% - 0.3rem);
max-width: 500px;
aspect-ratio: 8 / 10;
display: grid;
grid-template-rows: 0.3fr 1fr;
}
.calc-container>div:nth-child(1) {
width: 100%;
display: grid;
grid-template-columns: 3fr 1fr;
}
.calc-container>div:nth-child(2) {
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
}
.calc-container input {
border-radius: 0;
border: none;
background-color: #ebebeb;
font-size: 2rem;
width: 100%;
}
@media (hover: hover) {
.calc-container input:hover {
background-color: #dddddd;
}
}
.calc-container input:active {
background-color: #fff;
}
.calc-container input[name=clear] {
background-color: white;
}
@media (hover: hover) {
.calc-container input[name=clear]:hover {
color: white;
background-color: #ff6161;
}
}
.calc-container input[name=clear]:active {
background-color: #ff8383;
}
.calc-container input[name=out] {
background-color: white;
padding: 0 1rem;
width: calc(100%-2rem);
}