From 97c46e5ef7e8bb9830318480dc8c99918fca312c Mon Sep 17 00:00:00 2001 From: Soumyadeep Das <34862954+somudas@users.noreply.github.com> Date: Fri, 10 Jun 2022 00:18:18 +0530 Subject: [PATCH 1/3] Add files via upload --- index.html | 63 ++++++++++++++ main.js | 244 +++++++++++++++++++++++++++++++++++++++++++++++++++++ style.css | 155 ++++++++++++++++++++++++++++++++++ 3 files changed, 462 insertions(+) create mode 100644 index.html create mode 100644 main.js create mode 100644 style.css diff --git a/index.html b/index.html new file mode 100644 index 0000000..ccb8970 --- /dev/null +++ b/index.html @@ -0,0 +1,63 @@ + + + + + + + Calculator + + + + +
+ +
+
+
+ +
123
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..7eb5db5 --- /dev/null +++ b/main.js @@ -0,0 +1,244 @@ +function format(x) { + let fnl_str = '' + + //finding decimal + let k = x.length-1 + for(let i=x.length-1;i>=0;i--) { + if (x[i] == '.'){ + k = i - 1; + } + } + for(let i = x.length-1; i>k;i--) fnl_str+=x[i]; + + for(let i=k; i>=0; i--){ + if((k-i)%3 == 2 && i!=0){ + fnl_str += x[i] + fnl_str += ',' + }else + fnl_str += x[i] + } + fnl_str = fnl_str.split('').reverse().join('') + return fnl_str +} + + + + +console.log("running") + +let numbers = document.querySelectorAll('[btn-numbers]') +let prevDisplay = document.getElementsByClassName('prev')[0] +let currDisplay = document.getElementsByClassName('curr')[0] +let operators = document.querySelectorAll('[binary-operator]') +let eval = document.getElementsByClassName('result')[0] +let AC = document.querySelector('[clear]') +let u_operators = document.querySelectorAll('[unary-operator]') +let Ans = document.getElementById('Ans') +let backspace = document.getElementById('backspace') + +let isEquals = false +let currentString = '' +let currentNumber = '' +let prevString = '' +let prevNumber = '' +let isDot = false + +let operand1 +let operand2 +let operator + +currDisplay.innerHTML = '0' +prevDisplay.innerHTML = '' + + +backspace.addEventListener('click', ()=>{ + currentNumber = currentNumber.substring(0, currentNumber.length-1) + currDisplay.innerHTML = format(currentNumber) +}) + +numbers.forEach(btn => { + btn.addEventListener('click', ()=> { + + let num = btn.innerHTML + + if (num === '.'){ + if(!isDot) + isDot = true + else return + } + + + //console.log(num) + currentNumber = currentNumber + num.toString(); + //console.log(currentString) + + + currentString = format(currentNumber) + currDisplay.innerHTML = currentString.toString() + }) +}) + +operators.forEach(btn => { + btn.addEventListener('click', () => { + let op = btn.innerHTML + if (operator != undefined){ + operator = op + prevNumber = operand1 + ' ' + op.toString() + ' ' + prevDisplay.innerHTML = prevNumber + isEquals = false; + return + } + + prevNumber = currentNumber + ' ' + op.toString() + ' ' + prevDisplay.innerHTML = prevNumber + currDisplay.innerHTML = '0' + operand1 = currentNumber + operator = op + currentNumber = '' + isEquals = false; + }) +}) + +eval.addEventListener('click', ()=>{ + //console.log(currentNumber) + //console.log(operand1) + if (!isEquals) isEquals = true; + else return + if (operand1 != undefined && operator != undefined && currentNumber != ''){ + // console.log(78) + operand2 = parseFloat(currentNumber) + operand1 = parseFloat(operand1) + prevDisplay.innerHTML = prevDisplay.innerHTML + ' ' + currentNumber + ' =' + let res + if(operator == '+'){ + res = operand1 + operand2 + }else if (operator == '-'){ + res = operand1 - operand2 + }else if (operator == '÷'){ + res = operand1 / operand2 + }else if (operator == 'x'){ + res = operand1 * operand2 + }else if (operator == '^'){ + res = Math.pow(operand1,operand2) + } + currDisplay.innerHTML = res + isDot = false + currentNumber = res + } +}) + + +u_operators.forEach(btn => { + btn.addEventListener('click', () => { + + if (currentNumber == ''){ + return + } + + let num = parseFloat(currentNumber) + let op = btn.innerHTML + let res + if (op == 'sin'){ + res = Math.sin(num) + prevDisplay.innerHTML = 'sin( ' + currentString + ' )' + currDisplay.innerHTML = res.toString() + } + else if (op == 'cos'){ + res = Math.cos(num) + prevDisplay.innerHTML = 'cos( ' + currentString + ' )' + currDisplay.innerHTML = res.toString() + } + else if (op == 'ln'){ + res = Math.log(num) + prevDisplay.innerHTML = 'ln( ' + currentString + ' )' + currDisplay.innerHTML = res.toString() + } + else if (op == 'log'){ + res = Math.log10(num) + prevDisplay.innerHTML = 'log( ' + currentString + ' )' + currDisplay.innerHTML = res.toString() + } + else if (op == 'tan'){ + res = Math.tan(num) + prevDisplay.innerHTML = 'tan( ' + currentString + ' )' + currDisplay.innerHTML = res.toString() + } + else if (op == 'Inv'){ + res = 1/num + prevDisplay.innerHTML = '( ' + currentString + ' )^-1' + currDisplay.innerHTML = res.toString() + } + else if (op == '√'){ + res = Math.sqrt(num) + prevDisplay.innerHTML = '√( ' + currentString + ' )' + currDisplay.innerHTML = res.toString() + } + else if (op == 'x!'){ + res = 1 + for (let i = 1;i { + currDisplay.innerHTML='0' + prevDisplay.innerHTML='' + currentNumber='' + currentString='' + prevString = '' + prevNumber = '' + operand1 = undefined + operand2 = undefined + operator = undefined + isDot = false + isEquals = false +}) + +Ans.addEventListener('click', () => { + currDisplay.innerHTML = currentString + prevDisplay.innerHTML = 'Ans' +}) + + + +let checkbox = document.getElementById('checkbox') +checkbox.addEventListener('change', ()=>{ + let body = document.getElementsByTagName("BODY")[0]; + let disp = document.getElementsByClassName('display')[0] + let prev = document.getElementsByClassName('prev')[0] + let curr = document.getElementsByClassName('curr')[0] + + if (checkbox.checked){ + body.style.backgroundColor = "#FFFFFF" + disp.style.backgroundColor = "#FFFFFF" + prev.style.color = "#000" + curr.style.color = "#000" + }else{ + body.style.backgroundColor = "#32322F" + disp.style.backgroundColor = "#32322F" + prev.style.color = "#888" + curr.style.color = "#FFF" + } +}) diff --git a/style.css b/style.css new file mode 100644 index 0000000..ff6c92f --- /dev/null +++ b/style.css @@ -0,0 +1,155 @@ +body{ + background-color: #32322F; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} + +.display{ + padding-top: 5%; + position: relative; + left: 50%; + transform: translate(-50%, 0); + text-align: right; + background-color: #32322F; + width: 584px; + border: #fff; +} +.prev{ + color: #888; + font-size: 18px; +} + +.curr{ + margin-bottom: 10px; + color: #fff; + font-size: 45px; + font-weight: bolder; + word-wrap: break-word; + word-break: break-all; +} + +button{ + cursor: pointer; + /* border-radius: 50%; */ + width: 80px; + height: 80px; + /* border-color: #464543; */ + /*box-shadow: 0px 0px 10px #888888;*/ + border-width: 0ch; + font-size: large; + font-weight: bold; + color: #ffffff; + background-color: #464543; +} + +button:hover{ + background-color: #32322F; + color: #FFF; +} + +button:active{ + background-color: #8B8989; + color: #FFF; +} + +.last{ + background-color: #FFA00B; +} + +.numbers{ + background-color: #757575 ; +} + +.buttons{ + display: grid; + width: auto; + justify-content: center; + align-items: center; + grid-template-columns: repeat(7, 84px); + grid-template-rows: repeat(5, 84px); +} + +.result{ + background-color: #3FABFF; +} + +.result:hover{ + background-color: rgba(0, 255, 255, 0.9); +} +#backspace{ + width: 164px; + grid-column: span 2; +} + +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; +} + + +.switch input { +opacity: 0; +width: 0; +height: 0; +} + + +.slider { +position: absolute; +cursor: pointer; +top: 0; +left: 0; +right: 0; +bottom: 0; +background-color: #ccc; +-webkit-transition: .4s; +transition: .4s; +} + +.slider:before { +position: absolute; +content: ""; +height: 26px; +width: 26px; +left: 4px; +bottom: 4px; +background-color: white; +-webkit-transition: .4s; +transition: .4s; +} + +input:checked + .slider { +background-color: #2196F3; +} + +input:focus + .slider { +box-shadow: 0 0 1px #2196F3; +} + +input:checked + .slider:before { +-webkit-transform: translateX(26px); +-ms-transform: translateX(26px); +transform: translateX(26px); +} + + +.slider.round { +border-radius: 34px; +} + +.slider.round:before { +border-radius: 50%; +} + +.toggle{ + position: absolute; + left: 90%; +} + +.container{ + position: fixed; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} \ No newline at end of file From 9e590d114fdd53a03277bdc1144e8ef4d22585ae Mon Sep 17 00:00:00 2001 From: Soumyadeep Das <34862954+somudas@users.noreply.github.com> Date: Fri, 10 Jun 2022 00:21:04 +0530 Subject: [PATCH 2/3] Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index dc2beda..c63c487 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,7 +5,7 @@ - [ ] Android - [ ] Flutter -- [ ] Web Devlopment +- [x] Web Devlopment ### Task Completed @@ -19,14 +19,14 @@ #### Calculator -- [ ] **Task 1**: Create a simple calculator with basic mathematical operations. -- [ ] **Task 2**: Add complex operations including exponentiation, logarithms, trigonometry, etc. -- [ ] **Task 3:** Add an option to change settings, say from radians to degrees and vice versa, and an option to change the theme of the app. +- [x] **Task 1**: Create a simple calculator with basic mathematical operations. +- [x] **Task 2**: Add complex operations including exponentiation, logarithms, trigonometry, etc. +- [x] **Task 3:** Add an option to change settings, say from radians to degrees and vice versa, and an option to change the theme of the app. - [ ] **Task 4:** Feature to show a history of previous calculations. - [ ] **Extras:** Add feature for matrix calculations and plotting of simple basic graphs using equations. ### Submission -[Repo](link) -[APK|Web Site](link) +[Repo](https://github.com/somudas/Calculator) +[APK|Web Site](https://calculator-ivory-five.vercel.app/) From aa3475ea7fd8d6d0de3cea5d970edee0af9daa3e Mon Sep 17 00:00:00 2001 From: Soumyadeep Das <34862954+somudas@users.noreply.github.com> Date: Fri, 10 Jun 2022 00:23:32 +0530 Subject: [PATCH 3/3] Update WebDev.md --- WebDev.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WebDev.md b/WebDev.md index cb78c5f..9ec8974 100644 --- a/WebDev.md +++ b/WebDev.md @@ -51,5 +51,9 @@ Remember, the deadline for this week's task is June 7th, 2022, at 23:59. +[Calculator](https://github.com/somudas/Calculator) + + +[Vercel-Web Site](https://calculator-ivory-five.vercel.app/)