Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const screen = document.querySelector('.screen');
  2. const digitBtns = document.querySelectorAll('.btn-grey');
  3. const equalBtn = document.querySelector('.btn-equal');
  4. const clearBtn = document.querySelector('.btn-clear');
  5. const mathBtns = document.querySelectorAll('.btn-math');
  6.  
  7. let a, b;
  8. let result;
  9. let operator;
  10. let keyName;
  11. let number;
  12. let digitBtnClicked = false;
  13. let equalBtnClicked = false;
  14. screen.value = 0;
  15.  
  16. function digitKey () {
  17.     if (screen.value === '-') {
  18.         screen.value += number
  19.     } else {
  20.         if (equalBtnClicked && result) {
  21.             clear();
  22.             screen.value = '';
  23.             screen.value += number;
  24.         } else {
  25.             if (!b && !digitBtnClicked ||
  26.                 !digitBtnClicked && result ||
  27.                 screen.value === '0' ||
  28.                 (a && b && !result)) {
  29.                 screen.value = '';
  30.                 screen.value += number
  31.             } else {
  32.                 screen.value += number
  33.             }
  34.         }
  35.     }
  36.     digitBtnClicked = true;
  37. }
  38.  
  39. function mathKey() {
  40.     if (!a && !digitBtnClicked && keyName === '-') {
  41.         screen.value = '-'
  42.     } else {
  43.         if (!a) {
  44.             a = Number(screen.value);
  45.             operator = keyName;
  46.         } else {
  47.             b = Number(screen.value);
  48.             math();
  49.             operator = keyName;
  50.         }
  51.     }
  52.     digitBtnClicked = false;
  53. }
  54.  
  55. for (let x = 0; x < mathBtns.length; x++) {
  56.     mathBtns[x].addEventListener('click', (event) => {
  57.         if (!a && !digitBtnClicked && event.target.innerText === '-') {
  58.             screen.value = '-'
  59.         } else {
  60.             if (!a) {
  61.                 a = Number(screen.value);
  62.                 operator = event.target.innerText;
  63.             } else {
  64.                 b = Number(screen.value);
  65.                 math();
  66.                 operator = event.target.innerText;
  67.             }
  68.             digitBtnClicked = false;
  69.         }
  70.     })
  71. }
  72.  
  73. function math() {
  74.     if (digitBtnClicked) {
  75.         switch (operator) {
  76.             case '+':
  77.                 result = a + b;
  78.                 break;
  79.             case '-':
  80.                 result = a - b;
  81.                 break;
  82.             case '*':
  83.                 result = a * b;
  84.                 break;
  85.             case '/':
  86.                 result = a / b;
  87.                 break;
  88.         }
  89.         screen.value = result;
  90.         a = result;
  91.         digitBtnClicked = false;
  92.         console.log(`Math is done. a = ${a}, b = ${b}, result = ${result};
  93.         digitBtn = ${digitBtnClicked}, equalBtn = ${equalBtnClicked}` )
  94.     }
  95. }
  96.  
  97. function equal() {
  98.     if (equalBtnClicked === false && a && digitBtnClicked === true || equalBtnClicked === true && digitBtnClicked === true && !operator) {
  99.         b = Number(screen.value);
  100.         digitBtnClicked = true;
  101.         math();
  102.         console.log('if 1');
  103.     } else {
  104.         if (!a) {
  105.             console.log(`else if !a; a = ${a}`);
  106.             a = Number(screen.value);
  107.             result = a;
  108.             digitBtnClicked = true;
  109.         } else {
  110.             if (!b) {
  111.                 console.log('else if 2');
  112.                 b = a;
  113.                 digitBtnClicked = true;
  114.                 math();
  115.             } else {
  116.                 console.log('else');
  117.                 digitBtnClicked = true;
  118.                 math();
  119.             }
  120.         }
  121.  
  122.     }
  123.     equalBtnClicked = true;
  124.     console.log(`equalBtn is ${equalBtnClicked}`);
  125. }
  126.  
  127. for (let i = 0; i < digitBtns.length; i++) {
  128.     digitBtns[i].addEventListener('click', () => {
  129.         number = digitBtns[i].getAttribute('data-num');
  130.         digitKey()
  131.     })
  132. }
  133.  
  134. equalBtn.addEventListener('click', () => equal());
  135.  
  136. clearBtn.addEventListener('click', () => clear());
  137.  
  138. document.addEventListener('keyup',(event) => {
  139.         keyName = event.key;
  140.         switch (keyName) {
  141.             case '.' :
  142.                 number = '.';
  143.                 digitKey();
  144.                 break;
  145.             case '1':
  146.             case '2':
  147.             case '3':
  148.             case '4':
  149.             case '5':
  150.             case '6':
  151.             case '7':
  152.             case '8':
  153.             case '9':
  154.             case '0':
  155.                 number = Number(keyName);
  156.                 digitKey();
  157.                 break;
  158.             case '/' :
  159.             case '*' :
  160.             case '+' :
  161.             case '-' :
  162.                 mathKey();
  163.                 break;
  164.             case '=':
  165.             case 'Enter':
  166.                 equal();
  167.                 break;
  168.             case 'Escape':
  169.                 clear();
  170.                 break;
  171.         }
  172.     });
  173.  
  174. function clear() {
  175.     digitBtnClicked = false;
  176.     equalBtnClicked = false;
  177.     operator = undefined;
  178.     screen.value = 0;
  179.     a = 0;
  180.     b = 0;
  181.     result = 0;
  182. }
  183.  
  184. screen.addEventListener('input', () => console.log('changed'));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement