diff --git a/index.html b/index.html index 6088c850..8b1fee82 100644 --- a/index.html +++ b/index.html @@ -31,31 +31,36 @@

Calculator

- +
+ +
+
+
+
diff --git a/scripts/script.js b/scripts/script.js index 67931195..60ff9ad9 100644 --- a/scripts/script.js +++ b/scripts/script.js @@ -4,9 +4,14 @@ const sunIcon = "assets/SunIcon.svg"; const moonIcon = "assets/MoonIcon.svg"; const themeIcon = document.getElementById("theme-icon"); const res = document.getElementById("result"); +var lastNumber = ""; +var currentNumber = ""; +var isPositive = true; const toast = document.getElementById("toast"); function calculate(value) { + value = value.replace('²',"**2") + value = value.replace("--",'+') const calculatedValue = eval(value || null); if (isNaN(calculatedValue)) { res.value = "Can't divide 0 with 0"; @@ -16,6 +21,10 @@ function calculate(value) { } else { res.value = calculatedValue; } + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true } // Swaps the stylesheet to achieve dark mode. @@ -40,7 +49,33 @@ function liveScreen(enteredValue) { if (!res.value) { res.value = ""; } - res.value += enteredValue; + + if(enteredValue == '+' || enteredValue == '-' || enteredValue == '*' || enteredValue == '/'){ + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true + } + else if(enteredValue == 'C'){ + lastNumber = "" + currentNumber = "" + res.value = '' + isPositive = true + } + else if(enteredValue == '+/-'){ + res.value = res.value.substring(0, res.value.length - currentNumber.length - (!isPositive ? 1 : 0)); + res.value += currentNumber * (isPositive ? -1 : 1); + isPositive = !isPositive; + } + else if(enteredValue != '%'){ + currentNumber += enteredValue + res.value += enteredValue; + } + else { + res.value = res.value.substring(0, res.value.length - currentNumber.length); + enteredValue = lastNumber / 100 * currentNumber * (isPositive ? -1 : 1); + res.value += enteredValue; + } } //adding event handler on the document to handle keyboard inputs @@ -81,12 +116,28 @@ function keyboardInputHandler(e) { //operators if (e.key === "+") { res.value += "+"; + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true } else if (e.key === "-") { res.value += "-"; + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true } else if (e.key === "*") { res.value += "*"; + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true } else if (e.key === "/") { res.value += "/"; + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true } //decimal key @@ -97,6 +148,10 @@ function keyboardInputHandler(e) { //press enter to see result if (e.key === "Enter") { calculate(result.value); + lastNumber = currentNumber; + currentNumber = ""; + res.value += enteredValue; + isPositive = true } //backspace for removing the last input diff --git a/styles/dark.css b/styles/dark.css index 0fe1e6d1..6b32495b 100644 --- a/styles/dark.css +++ b/styles/dark.css @@ -29,7 +29,7 @@ h1 { } .container { - width: 350px; + width: 450px; display: flex; justify-content: center; flex-direction: column; @@ -97,4 +97,4 @@ a { .theme-button { all: unset; cursor: pointer; -} \ No newline at end of file +} diff --git a/styles/light.css b/styles/light.css index 218ca857..960ada55 100644 --- a/styles/light.css +++ b/styles/light.css @@ -25,7 +25,7 @@ h1 { } .container { - width: 350px; + width: 450px; display: flex; justify-content: center; flex-direction: column; @@ -96,4 +96,4 @@ a { .theme-button { all: unset; cursor: pointer; -} \ No newline at end of file +}