diff --git a/index.html b/index.html
new file mode 100644
index 00000000..fe287dde
--- /dev/null
+++ b/index.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+ JS Calculator
+
+
+
+
+
+
+
+
+
+
diff --git a/normalize.css b/normalize.css
new file mode 100644
index 00000000..192eb9ce
--- /dev/null
+++ b/normalize.css
@@ -0,0 +1,349 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input { /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select { /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
diff --git a/reset.css b/reset.css
new file mode 100644
index 00000000..2ee7ab0f
--- /dev/null
+++ b/reset.css
@@ -0,0 +1,47 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/script.js b/script.js
new file mode 100644
index 00000000..3b3f4392
--- /dev/null
+++ b/script.js
@@ -0,0 +1,87 @@
+//Create a NodeList of all html elements with .button class
+const btns = document.querySelectorAll(".button");
+const display = document.getElementById("display");
+let storedNumber = null;
+let displayNumber = "";
+let operator = null;
+let operator2 = null;
+display.value = "";
+let equalEntered = false;
+//map through node list and add an eventListener that fires on click.
+// anonymous function so that the actual function with an argument (buttonPress) can be attached to the event listener
+btns.forEach((btn) =>
+ btn.addEventListener("click", () => {
+ buttonPress(btn.textContent);
+ })
+);
+//calculate function
+function computation() {
+ switch (operator) {
+ case "+":
+ display.value = +storedNumber + Number(displayNumber);
+ break;
+ case "-":
+ display.value = +storedNumber - Number(displayNumber);
+ break;
+ case "X":
+ display.value = +storedNumber * Number(displayNumber);
+ break;
+ case "/":
+ display.value = +storedNumber / Number(displayNumber);
+ break;
+ }
+ storedNumber = display.value; //store the calculated number
+ operator = operator2; //in scenario where user is entering values and operators without pushing =
+ operator2 = null;
+ displayNumber = ""; //resets the displayNumber variable
+}
+
+//evaluate when keypress is an operator
+function operatorEval(buttonValue) {
+ //check to make sure no number is stored from previous calculation
+ if (storedNumber == null) {
+ operator = buttonValue;
+ storedNumber = displayNumber;
+ }
+ //run if there is a stored number from previous calculation
+ else {
+ //scenario: previous calculation completed with equal
+ if (equalEntered) {
+ operator = buttonValue;
+ equalEntered = false; //reset flag for equal being pushed.
+ }
+ //scenario: previous calculation not completed because = wasn't entered.
+ //instead operator was entered again.
+ //must store operator2 and run computation with operator1
+ //eg user enters, 2+2+ (when second operator is pressed store it and must compute 2+2)
+ else {
+ operator2 = buttonValue;
+ computation();
+ }
+ }
+ displayNumber = "";
+}
+
+function displayScreen(buttonValue) {
+ display.value = "";
+ displayNumber += buttonValue;
+ display.value = displayNumber;
+ if (equalEntered) equalEntered = false;
+}
+
+//evaluate button entered and call appropriate function
+function buttonPress(buttonValue) {
+ if (buttonValue == "=") {
+ equalEntered = true;
+ computation();
+ } else if (
+ buttonValue == "+" ||
+ buttonValue == "-" ||
+ buttonValue == "X" ||
+ buttonValue == "/"
+ ) {
+ operatorEval(buttonValue);
+ } else {
+ displayScreen(buttonValue);
+ }
+}
diff --git a/style.css b/style.css
new file mode 100644
index 00000000..af4bf17c
--- /dev/null
+++ b/style.css
@@ -0,0 +1,49 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ font-family: Arial;
+ font-size: 2.5em;
+ font-weight: bold;
+}
+.calculator {
+ display: flex;
+ flex-direction: column;
+ height: 600px;
+ width: 450px;
+ background-color: black;
+ border-radius: 30px;
+}
+
+.window {
+ flex: 2;
+ margin: 20% 10% 0 10%;
+}
+input {
+ width: 100%;
+ height: 80%;
+}
+
+.button-container {
+ flex: 8;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+ margin-bottom: 10%;
+}
+
+.button-container div {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-evenly;
+ height: 100%;
+ margin: 2.5% 12%;
+}
+
+button {
+ height: 100%;
+ width: 100%;
+ margin: 0 5px;
+ padding: 0px;
+ border-radius: 50%;
+}