diff --git a/js/script.js b/js/script.js
index a816ac6..ac30aa1 100644
--- a/js/script.js
+++ b/js/script.js
@@ -4,19 +4,143 @@ const display_output = document.querySelector('.display .output');
let input = "";
-for (let key of keys){
- const value = key.dataset.key;
-
- key.addEventListener('click', () => {
- if(value == 'clear'){
- input = "";
- display_input.innerHTML = "";
- display_output.innerHTML = "";
- }else if(value == 'backspace'){
- input = input.slice(0, -1);
- display_input.innerHTML = input;
- });
+// Add click event listeners for each key
+for (let key of keys) {
+ const value = key.dataset.key;
+
+ key.addEventListener('click', () => {
+ handleInput(value);
+ });
+}
+
+// Add keyboard event listener
+document.addEventListener('keydown', (event) => {
+ const keyMap = {
+ '0': '0', '1': '1', '2': '2', '3': '3', '4': '4',
+ '5': '5', '6': '6', '7': '7', '8': '8', '9': '9',
+ '+': '+', '-': '-', '*': '*', '/': '/', '%': '%',
+ '(': 'brackets', ')': 'brackets', '.': '.',
+ 'Enter': '=', 'Backspace': 'backspace', 'Delete': 'clear',
+ '=': '='
+ };
+
+ if (keyMap[event.key]) {
+ handleInput(keyMap[event.key]);
+ event.preventDefault();
+ }
+});
+
+function handleInput(value) {
+ if (value == "clear") {
+ input = "";
+ display_input.innerHTML = "";
+ display_output.innerHTML = "";
+ } else if (value == "backspace") {
+ input = input.slice(0, -1);
+ display_input.innerHTML = CleanInput(input);
+ } else if (value == "=") {
+ let result = eval(PerpareInput(input));
+ display_output.innerHTML = CleanOutput(result);
+ } else if (value == "brackets") {
+ if (
+ input.indexOf("(") == -1 ||
+ input.indexOf("(") != -1 &&
+ input.indexOf(")") != -1 &&
+ input.lastIndexOf("(") < input.lastIndexOf(")")
+ ) {
+ input += "(";
+ } else if (
+ input.indexOf("(") != -1 &&
+ input.indexOf(")") == -1 ||
+ input.indexOf("(") != -1 &&
+ input.indexOf(")") != -1 &&
+ input.lastIndexOf("(") > input.lastIndexOf(")")
+ ) {
+ input += ")";
+ }
+
+ display_input.innerHTML = CleanInput(input);
+ } else {
+ if (ValidateInput(value)) {
+ input += value;
+ display_input.innerHTML = CleanInput(input);
+ }
+ }
}
+function CleanInput(input) {
+ let input_array = input.split("");
+ let input_array_length = input_array.length;
+
+ for (let i = 0; i < input_array_length; i++) {
+ if (input_array[i] == "*") {
+ input_array[i] = ` x `;
+ } else if (input_array[i] == "/") {
+ input_array[i] = ` รท `;
+ } else if (input_array[i] == "+") {
+ input_array[i] = ` + `;
+ } else if (input_array[i] == "-") {
+ input_array[i] = ` - `;
+ } else if (input_array[i] == "(") {
+ input_array[i] = `(`;
+ } else if (input_array[i] == ")") {
+ input_array[i] = `)`;
+ } else if (input_array[i] == "%") {
+ input_array[i] = `%`;
+ }
+ }
+
+ return input_array.join("");
+}
+
+function CleanOutput(output) {
+ let output_string = output.toString();
+ let decimal = output_string.split(".")[1];
+ output_string = output_string.split(".")[0];
+
+ let output_array = output_string.split("");
+
+ if (output_array.length > 3) {
+ for (let i = output_array.length - 3; i > 0; i -= 3) {
+ output_array.splice(i, 0, ",");
+ }
+ }
+ if (decimal) {
+ output_array.push(".");
+ output_array.push(decimal);
+ }
+ return output_array.join("");
+}
+
+function ValidateInput(value) {
+ let last_input = input.slice(-1);
+ let operators = ["+", "-", "*", "/"];
+
+ if (value == "." && last_input == ".") {
+ return false;
+ }
+
+ if (operators.includes(value)) {
+ if (operators.includes(last_input)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+function PerpareInput(input) {
+ let input_array = input.split("");
+
+ for (let i = 0; i < input_array.length; i++) {
+ if (input_array[i] == "%") {
+ input_array[i] = "/100";
+ }
+ }
+
+ return input_array.join("");
+}
diff --git a/style/style.css b/style/style.css
index 11fbb38..ea38bcc 100644
--- a/style/style.css
+++ b/style/style.css
@@ -35,11 +35,15 @@ body {
display: flex;
justify-content: flex-end;
align-items: flex-end;
- color: white;
+ color: rgb(0, 0, 0);
text-align: right;
flex: 1 1 0%;
}
+.input {
+color: #696161;
+}
+
.display .content {
display: flex;
flex-direction: column;