final
This commit is contained in:
commit
ee3ad076fa
4 changed files with 298 additions and 0 deletions
3
README.md
Normal file
3
README.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# js-calculator
|
||||||
|
|
||||||
|
Simple calculator made in ES6 Javascript
|
||||||
16
index.html
Normal file
16
index.html
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel = "stylesheet" type = "text/css" href = "style.css">
|
||||||
|
<title>Calculator</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<div id="container"></div>
|
||||||
|
<script src="main.js"></script>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
218
main.js
Normal file
218
main.js
Normal file
|
|
@ -0,0 +1,218 @@
|
||||||
|
/* our beloved variables */
|
||||||
|
let buffer = '';
|
||||||
|
let operator = '';
|
||||||
|
let workBuffer = '';
|
||||||
|
let oldBackgroundColor = '';
|
||||||
|
let buttonArray = [];
|
||||||
|
const container = document.querySelector("#container");
|
||||||
|
|
||||||
|
/* make header */
|
||||||
|
const header = document.createElement('h1');
|
||||||
|
header.textContent = "Calculator";
|
||||||
|
header.setAttribute('id', 'header');
|
||||||
|
container.appendChild(header);
|
||||||
|
/* make results div */
|
||||||
|
const results = document.createElement('div');
|
||||||
|
results.textContent = buffer;
|
||||||
|
results.setAttribute ('id', 'results');
|
||||||
|
container.appendChild(results);
|
||||||
|
/* eye candy for buttons */
|
||||||
|
function highlightCell() {
|
||||||
|
oldBackgroundColor = this.style.backgroundColor;
|
||||||
|
this.style.backgroundColor = 'darkgray';
|
||||||
|
}
|
||||||
|
function normalizeCell() {
|
||||||
|
this.style.backgroundColor = oldBackgroundColor;
|
||||||
|
}
|
||||||
|
/* make grid */
|
||||||
|
const theGrid = document.createElement('div');
|
||||||
|
theGrid.setAttribute('id', 'theGrid');
|
||||||
|
for (i = 0; i < 20; i++) {
|
||||||
|
const button = document.createElement('div');
|
||||||
|
button.addEventListener('mouseenter', highlightCell);
|
||||||
|
button.addEventListener('mouseleave', normalizeCell);
|
||||||
|
button.setAttribute('id', 'button'+i);
|
||||||
|
theGrid.appendChild(button);
|
||||||
|
buttonArray.push(button);
|
||||||
|
}
|
||||||
|
container.appendChild(theGrid);
|
||||||
|
|
||||||
|
/* ez pz refresh function */
|
||||||
|
function refresh() {
|
||||||
|
results.textContent = buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cheater function for below */
|
||||||
|
function clear() {
|
||||||
|
operator = '';
|
||||||
|
workBuffer = '';
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
/* determine results */
|
||||||
|
function resolve() {
|
||||||
|
switch(operator) {
|
||||||
|
case "/" :
|
||||||
|
buffer = workBuffer / buffer;
|
||||||
|
clear();
|
||||||
|
break;
|
||||||
|
case "*" :
|
||||||
|
buffer = workBuffer * buffer;
|
||||||
|
clear();
|
||||||
|
break;
|
||||||
|
case "+" :
|
||||||
|
buffer = parseFloat(workBuffer) + parseFloat(buffer);
|
||||||
|
clear();
|
||||||
|
break;
|
||||||
|
case "-" :
|
||||||
|
buffer = workBuffer - buffer;
|
||||||
|
clear();
|
||||||
|
break;
|
||||||
|
case "SQRT":
|
||||||
|
buffer = Math.sqrt(parseFloat(buffer));
|
||||||
|
clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* the actual calculator */
|
||||||
|
function operate(string) {
|
||||||
|
switch(string) {
|
||||||
|
case "." :
|
||||||
|
if ((buffer.includes(string)) === false) {
|
||||||
|
buffer += string;
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "*" :
|
||||||
|
case "/" :
|
||||||
|
case "+" :
|
||||||
|
case "-" :
|
||||||
|
if (operator === '') {
|
||||||
|
operator = string;
|
||||||
|
workBuffer = buffer;
|
||||||
|
buffer = '';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resolve();
|
||||||
|
operator = string;
|
||||||
|
workBuffer = buffer;
|
||||||
|
buffer = '';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "=" :
|
||||||
|
resolve();
|
||||||
|
break;
|
||||||
|
case "DEL" :
|
||||||
|
buffer = buffer.substring(0, buffer.length - 1);
|
||||||
|
refresh();
|
||||||
|
break;
|
||||||
|
case "SQRT" :
|
||||||
|
operator = string;
|
||||||
|
resolve();
|
||||||
|
break;
|
||||||
|
case "CLR" :
|
||||||
|
buffer = '';
|
||||||
|
workBuffer = '';
|
||||||
|
operator = '';
|
||||||
|
refresh();
|
||||||
|
break;
|
||||||
|
case "NEG" :
|
||||||
|
if (buffer.charAt(0) != "-") {
|
||||||
|
buffer = "-" + buffer;
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
buffer = buffer.substring(1, buffer.length);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
buffer += string;
|
||||||
|
refresh();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* assign our buttons */
|
||||||
|
const button0 = document.querySelector("#button0");
|
||||||
|
button0.textContent = "SQRT";
|
||||||
|
const button1 = document.querySelector("#button1");
|
||||||
|
button1.textContent = "CLR";
|
||||||
|
const button2 = document.querySelector("#button2");
|
||||||
|
button2.textContent = "DEL";
|
||||||
|
const button3 = document.querySelector("#button3");
|
||||||
|
button3.textContent = "/";
|
||||||
|
const button4 = document.querySelector("#button4");
|
||||||
|
button4.textContent = "7";
|
||||||
|
const button5 = document.querySelector("#button5");
|
||||||
|
button5.textContent = "8";
|
||||||
|
const button6 = document.querySelector("#button6");
|
||||||
|
button6.textContent = "9";
|
||||||
|
const button7 = document.querySelector("#button7");
|
||||||
|
button7.textContent = "*";
|
||||||
|
const button8 = document.querySelector("#button8");
|
||||||
|
button8.textContent = "4";
|
||||||
|
const button9 = document.querySelector("#button9");
|
||||||
|
button9.textContent = "5";
|
||||||
|
const button10 = document.querySelector("#button10");
|
||||||
|
button10.textContent = "6";
|
||||||
|
const button11 = document.querySelector("#button11");
|
||||||
|
button11.textContent = "-";
|
||||||
|
const button12 = document.querySelector("#button12");
|
||||||
|
button12.textContent = "1";
|
||||||
|
const button13 = document.querySelector("#button13");
|
||||||
|
button13.textContent = "2";
|
||||||
|
const button14 = document.querySelector("#button14");
|
||||||
|
button14.textContent = "3";
|
||||||
|
const button15 = document.querySelector("#button15");
|
||||||
|
button15.textContent = "+";
|
||||||
|
const button16 = document.querySelector("#button16");
|
||||||
|
button16.textContent = "NEG";
|
||||||
|
const button17 = document.querySelector("#button17");
|
||||||
|
button17.textContent = "0";
|
||||||
|
const button18 = document.querySelector("#button18");
|
||||||
|
button18.textContent = ".";
|
||||||
|
const button19 = document.querySelector("#button19");
|
||||||
|
button19.textContent = "=";
|
||||||
|
/* assign listeners to buttons */
|
||||||
|
buttonArray.forEach (function (element) {
|
||||||
|
element.addEventListener('click', function() {
|
||||||
|
operate(element.textContent);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
/* same thing as above but for keypresses */
|
||||||
|
function keyboardEntry(key) {
|
||||||
|
switch (key) {
|
||||||
|
case "Enter" :
|
||||||
|
operate("=");
|
||||||
|
break;
|
||||||
|
case "Backspace" :
|
||||||
|
operate("DEL");
|
||||||
|
break;
|
||||||
|
case "Delete" :
|
||||||
|
operate("CLR");
|
||||||
|
break;
|
||||||
|
case "1" :
|
||||||
|
case "2" :
|
||||||
|
case "3" :
|
||||||
|
case "4" :
|
||||||
|
case "5" :
|
||||||
|
case "6" :
|
||||||
|
case "7" :
|
||||||
|
case "8" :
|
||||||
|
case "9" :
|
||||||
|
case "0" :
|
||||||
|
case "+" :
|
||||||
|
case "-" :
|
||||||
|
case "/" :
|
||||||
|
case "*" :
|
||||||
|
case "." :
|
||||||
|
operate(key);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* listen for keyboard presses */
|
||||||
|
document.addEventListener("keydown", function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
keyboardEntry(event.key);
|
||||||
|
});
|
||||||
61
style.css
Normal file
61
style.css
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
*{
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
background-color: rgb(35, 35, 35);
|
||||||
|
font-family: Helvetica;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header, #results {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header, #theGrid {
|
||||||
|
width: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#results {
|
||||||
|
width: 334px;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 28px;
|
||||||
|
text-align: left;
|
||||||
|
font-weight: bolder;
|
||||||
|
border: 2px solid white;
|
||||||
|
height: 50px;
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#theGrid {
|
||||||
|
display: grid;
|
||||||
|
height: 350px;
|
||||||
|
grid-template-rows: repeat(5, auto);
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
[id^="button"] {
|
||||||
|
border-width: 1px;
|
||||||
|
color: white;
|
||||||
|
border: 1px solid rgb(35, 35, 35);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#button0, #button1, #button2, #button3, #button7, #button11, #button15 {
|
||||||
|
background-color: rgb(20, 20, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
#button4, #button5, #button6, #button8, #button9, #button10, #button12, #button13, #button14, #button16, #button17, #button18 {
|
||||||
|
background-color: rgb(7, 7, 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
#button19 {
|
||||||
|
background-color: rgb(51, 50, 49);
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue