diff --git a/calculator/js/script.js b/calculator/js/script.js index 3c37b9a..702f78b 100644 --- a/calculator/js/script.js +++ b/calculator/js/script.js @@ -1,205 +1,205 @@ -let display = document.querySelector('.display'); -const buttons = document.querySelectorAll('.btn'); +let display = document.querySelector(".display"); +const buttons = document.querySelectorAll(".btn"); const ops = { - firstNum: String(), - secondNum: String(), - operator: undefined, - lastOperator: undefined, - numFlag: false, - onSecondNumber: false, - stringLength: 8, - periodClicked: false, - result: String(), + firstNum: String(), + secondNum: String(), + operator: undefined, + lastOperator: undefined, + numFlag: false, + onSecondNumber: false, + stringLength: 8, + periodClicked: false, + result: String(), - toggleNumFlag: function() { - this.numFlag = !this.numFlag - }, - clear: function(){ + toggleNumFlag: function () { + this.numFlag = !this.numFlag; + }, + clear: function () { this.firstNum = String(); this.secondNum = String(); this.operator = undefined; - this.numFlag = false; + this.numFlag = false; this.onSecondNumber = false; this.result = String(); display.textContent = "0"; - }, - appendNumber: function(num) { - if(num === "0" && display.textContent.trim() === "0") return - if(!ops.numFlag && ops.checkLength(ops.firstNum)) { - ops.firstNum += num; - updateDisplay(ops.firstNum); - } else if(this.numFlag) { - if (this.checkLength(ops.secondNum)) { - ops.secondNum += num; - updateDisplay(ops.secondNum); - } + }, + appendNumber: function (num) { + if (num === "0" && display.textContent.trim() === "0") return; + if (!ops.numFlag && ops.checkLength(ops.firstNum)) { + ops.firstNum += num; + updateDisplay(ops.firstNum); + } else if (this.numFlag) { + if (this.checkLength(ops.secondNum)) { + ops.secondNum += num; + updateDisplay(ops.secondNum); + } } - }, - checkLength: function(string) { + }, + checkLength: function (string) { return string.length < this.stringLength; - } + }, }; function add(x, y) { - return x + y; + return x + y; } function subtract(x, y) { - return x - y; + return x - y; } function multiply(x, y) { - return x * y; + return x * y; } function divede(x, y) { - if (x === 0) { - return 0 - } else if (y === 0) { - alert("Cannot divide by 0!"); - return "Error" - } - return x / y; + if (x === 0) { + return 0; + } else if (y === 0) { + alert("Cannot divide by 0!"); + return "Error"; + } + return x / y; } function operate(firstNum, secondNum, operator) { - switch (operator) { - case '+': - return add(firstNum, secondNum); - case '-': - return subtract(firstNum, secondNum); - case '*': - return multiply(firstNum, secondNum); - case '/': - return divede(firstNum, secondNum); - } + switch (operator) { + case "+": + return add(firstNum, secondNum); + case "-": + return subtract(firstNum, secondNum); + case "*": + return multiply(firstNum, secondNum); + case "/": + return divede(firstNum, secondNum); + } } function handleOperation() { - const first = Number(ops.firstNum); - const second = Number(ops.secondNum); - let result = operate(first, second, ops.operator); + const first = Number(ops.firstNum); + const second = Number(ops.secondNum); + console.log(`last operator: ${ops.operator}`); + let result = operate(first, second, ops.operator); - if (result === "error") { - ops.clear(); - return; - } + if (result === "Error") { + ops.clear(); + return; + } - result = roundThreeDecimals(result); - updateDisplay(result); - - // store result - ops.result = result; + result = roundThreeDecimals(result); + updateDisplay(result); - if (ops.lastOperator === '=') { - ops.firstNum = String(); - ops.secondNum = String(); - ops.numFlag = false; - ops.onSecondNumber = !ops.onSecondNumber; - } else { - ops.firstNum = ops.result; - ops.secondNum = ""; - ops.onSecondNumber = true; - } - // ops.operator = undefined; + // store result + ops.result = result; + + if (ops.operator === "=") { + ops.firstNum = String(); + ops.secondNum = String(); + ops.numFlag = false; + ops.onSecondNumber = false; + } else { + ops.firstNum = ops.result; + ops.secondNum = ""; + ops.operator = ""; + ops.onSecondNumber = true; + } + ops.operator = undefined; + ops.lastOperator = undefined; } function updateDisplay(displayValue) { - display.textContent = displayValue; + display.textContent = displayValue; } function roundThreeDecimals(number) { - if (!Number.isInteger(number) && Number.isFinite(number) - ) { - return parseFloat(number.toPrecision(3)); - } else { - return number; - } + if (!Number.isInteger(number) && Number.isFinite(number)) { + return parseFloat(number.toPrecision(3)); + } else { + return number; + } } function handleOperatorClick(operatorClicked) { - - ops.lastOperator = operatorClicked; - // TODO handle ops for = or clear - if (operatorClicked === 'cls') { - ops.clear(); - return; - } else if (operatorClicked === '=') { - ops.lastOperator = '='; - handleOperation(); - return; - } else if (operatorClicked === '+/-') { - negateNumber(); - return; - } else if (operatorClicked === '%') { - percentageNumber(); - return; - } else { - if(ops.secondNum && ops.numFlag){ - handleOperation(); - return; - } + ops.operator = operatorClicked; + // TODO handle ops for = or clear + if (operatorClicked === "cls") { + ops.clear(); + return; + } else if (operatorClicked === "=") { + if (ops.lastOperator) { + ops.operator = ops.lastOperator; } + handleOperation(); + return; + } else if (operatorClicked === "+/-") { + negateNumber(); + return; + } else if (operatorClicked === "%") { + percentageNumber(); + return; + } else { + if (ops.secondNum && ops.numFlag) { + ops.lastOperator = operatorClicked; + handleOperation(); + return; + } + } - - ops.operator = operatorClicked; - //TODO fix this conditional should be if numFlag and a check if = or additional ops - if(!ops.onSecondNumber ){ - ops.numFlag = true; - if (ops.result !== "" ) { - console.log('this is running the ops.result'); - ops.firstNum = ops.result; - ops.onSecondNumber = true; - return - } + //TODO fix this conditional should be if numFlag and a check if = or additional ops + if (!ops.onSecondNumber) { + ops.numFlag = true; + if (ops.result !== "") { + console.log("this is running the ops.result"); + ops.firstNum = ops.result; + ops.onSecondNumber = true; + return; } - ops.onSecondNumber = !ops.onSecondNumber; + } + // ops.onSecondNumber = !ops.onSecondNumber; } -function calculator(event){ - - if(event.target.dataset.ops === "") { - handleOperatorClick(event.target.value); - } else if (event.target.value === '.') { - if (display.textContent.includes('.')) { - return - } else { - ops.appendNumber(event.target.value) - } - - } else if(event.target.dataset.num === "") { - ops.appendNumber(event.target.value) +function calculator(event) { + if (event.target.dataset.ops === "") { + handleOperatorClick(event.target.value); + } else if (event.target.value === ".") { + if (display.textContent.includes(".")) { + return; + } else { + ops.appendNumber(event.target.value); } + } else if (event.target.dataset.num === "") { + ops.appendNumber(event.target.value); + } } -function negateNumber(){ - // returns a negated number - let negated; - if (!ops.numFlag || !ops.onSecondNumber) { - negated = Number(ops.firstNum) * -1; - ops.firstNum = String(negated); - } else { - negated = Number(ops.secondNum) * -1; - ops.secondNum = String(negated); - } - updateDisplay(negated); +function negateNumber() { + // returns a negated number + let negated; + if (!ops.numFlag || ops.secondNum === "") { + negated = Number(ops.firstNum) * -1; + ops.firstNum = String(negated); + } else { + negated = Number(ops.secondNum) * -1; + ops.secondNum = String(negated); + } + updateDisplay(negated); } function percentageNumber() { - let percent; - if ((!ops.numFlag || !ops.onSecondNumber)) { - percent = Number(ops.firstNum) / 100; - ops.firstNum = String(percent); - } else if (ops.result !== "" ) { - percent = Number(ops.result) / 100; - } else { - percent = Number(ops.secondNum) / 100; - ops.secondNum = String(percent); - } - updateDisplay(percent); + let percent; + if (!ops.numFlag || !ops.secondNum === "") { + percent = Number(ops.firstNum) / 100; + ops.firstNum = String(percent); + } else if (ops.result !== "") { + percent = Number(ops.result) / 100; + } else { + percent = Number(ops.secondNum) / 100; + ops.secondNum = String(percent); + } + updateDisplay(percent); } -buttons.forEach(btn => { - btn.addEventListener('click', calculator); +buttons.forEach((btn) => { + btn.addEventListener("click", calculator); }); diff --git a/inventory/bun.lockb b/inventory/bun.lockb new file mode 100755 index 0000000..6a514fa Binary files /dev/null and b/inventory/bun.lockb differ diff --git a/inventory/package.json b/inventory/package.json new file mode 100644 index 0000000..bcfb118 --- /dev/null +++ b/inventory/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "ejs": "^3.1.10", + "express": "^4.21.2", + "express-validator": "^7.2.1", + "pg": "^8.13.1" + } +} \ No newline at end of file diff --git a/inventory/src/app.js b/inventory/src/app.js new file mode 100644 index 0000000..a8d9bad --- /dev/null +++ b/inventory/src/app.js @@ -0,0 +1,31 @@ +const express = require("express"); +const path = require("node:path"); + +const app = express(); +const port = 8080; + +const { indexRouter } = require("./routes/indexRouter"); +const assetsPath = path.join(path.dirname(__dirname), "public"); + +app.set("views", path.join(__dirname, "views")); +app.set(express.static(assetsPath)); + +app.use(express.urlencoded({ extended: true })); + +app.use("/", indexRouter); + +const server = app.listen(port, () => { + console.log(`Server started at ${port}`); +}); + +const gracefulShutdownHandler = (signal) => { + console.log(`Caught ${signal}, gracefully shutting down`); + + server.close(() => { + console.log("shutting down server."); + process.exit(); + }); +}; + +process.on("SIGINT", gracefulShutdownHandler); +process.on("SIGTERM", gracefulShutdownHandler); diff --git a/inventory/src/routes/indexRouter.js b/inventory/src/routes/indexRouter.js new file mode 100644 index 0000000..7302a08 --- /dev/null +++ b/inventory/src/routes/indexRouter.js @@ -0,0 +1,9 @@ +const { Router } = require("express"); + +const indexRouter = Router(); + +indexRouter.get("/", (req, res) => { + res.send("index"); +}); + +module.exports = { indexRouter };