Advertisement
kstoyanov

06. Numpad Calculator

Sep 29th, 2020 (edited)
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2.  
  3.     const expressionOutput = document.getElementById('expressionOutput');
  4.     const resultOutput = document.getElementById('resultOutput');
  5.     let keys = document.getElementsByClassName('keys')[0].childNodes;
  6.     let num1 = '';
  7.     let num2 = '';
  8.     let operator = null;
  9.  
  10.     [...keys].forEach( key => key.addEventListener('click', clickHandler));
  11.     document.getElementsByClassName('clear')[0].addEventListener('click', function () {
  12.         resetValues();
  13.         expressionOutput.textContent = null;
  14.         resultOutput.textContent = null;
  15.     });
  16.  
  17.  
  18.     function clickHandler(e) {
  19.         handleInput(e.target.value);
  20.     }
  21.  
  22.     function handleInput(currentChar) {
  23.         if ( currentChar === '=') {
  24.             handleResult();
  25.             return;
  26.         }
  27.  
  28.         if ( !isNaN(currentChar) || currentChar === '.') {
  29.             expressionOutput.textContent += currentChar;
  30.             if (!operator) {
  31.                 num1 += currentChar;
  32.             } else {
  33.                 num2 += currentChar;
  34.             }
  35.         } else {
  36.             expressionOutput.textContent += ` ${currentChar} `;
  37.             operator = currentChar;
  38.         }
  39.     }
  40.  
  41.     function handleResult() {
  42.        
  43.         if (!num1 || !num2 || !operator) {
  44.             resultOutput.textContent = 'NaN';
  45.             return;
  46.         }
  47.  
  48.         const funcObj = {
  49.             '+': (a, b) => a + b,
  50.             '*': (a, b) => a * b,
  51.             '-': (a, b) => a - b,
  52.             '/': (a, b) => a / b,
  53.         };
  54.  
  55.         resultOutput.textContent = funcObj[operator](Number(num1), Number(num2));
  56.         resetValues();
  57.     }
  58.  
  59.     function resetValues() {
  60.         num1 = '';
  61.         num2 = '';
  62.         operator = null;
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement