Selaa lähdekoodia

subtraction: changed numbers overview to left alignment

Bernadette Elena Hammerle 2 vuotta sitten
vanhempi
commit
a096721a5d
1 muutettua tiedostoa jossa 33 lisäystä ja 18 poistoa
  1. 33 18
      src/Subtraction.js

+ 33 - 18
src/Subtraction.js

@@ -132,19 +132,20 @@ function Subtraction() {
     let numbersCopy = [...numbers];
 
     if(pressedKey === 37){ // left arrow
-      if(numbersCopy[noId].includes(".")){
-        numbersCopy[noId].push("0");
-      }else{
-        numbersCopy[noId].push(".");
+      // add one space before all numbers to shift this one
+      if(numbersCopy[noId][0] !== " "){
+        for(let idx in numbersCopy){
+          numbersCopy[idx].unshift(" ")
+        }
       }
+      numbersCopy[noId].shift();
       setNumbers(numbersCopy);
       setTimeout(() => {
         document.getElementById(tdId).focus();
       }, 100);
 
-    }else if(pressedKey === 39 && // right arrow
-             [".", "0"].includes(numbersCopy[noId][numbersCopy[noId].length-1])){
-      numbersCopy[noId].pop();
+    }else if(pressedKey === 39){ // right arrow
+      numbersCopy[noId].unshift(" ");
       setNumbers(numbersCopy);
       setTimeout(() => {
         document.getElementById(tdId).focus();
@@ -483,20 +484,23 @@ function Subtraction() {
     let numbersCopy = [...numbers];
     let commaPositions = [];
 
-    // reset numbers to calculate new length after error
-    for(let noIdx in numbersCopy){
-      while(numbersCopy[noIdx][0] === " "){
-        numbersCopy[noIdx].shift();
-      }
-    }
-
     // get all numbers up to the same length
     let numbersLen = Math.max(...numbers.map(n => n.length));
     for(let noIdx in numbersCopy){
-      while(numbersCopy[noIdx].length <= numbersLen){
-        numbersCopy[noIdx].unshift("&nbsp;");
+      while(numbersCopy[noIdx].length < numbersLen){
+        numbersCopy[noIdx].push("&nbsp;");
       }
-      commaPositions.push(numbersCopy[noIdx].indexOf("."));
+      let commaPos = numbersCopy[noIdx].indexOf(".");
+      if(commaPos < 0){
+        for(let idx=numbersCopy[noIdx].length-1; idx>0; idx--){
+          if(numbersCopy[noIdx][idx-1] !== "&nbsp;" &&
+             numbersCopy[noIdx][idx] === "&nbsp;"){
+            commaPos = idx;
+            break;
+          }
+        }
+      }
+      commaPositions.push(commaPos);
     }
     setNumbers(numbersCopy);
 
@@ -505,11 +509,22 @@ function Subtraction() {
 
     // if no commas in numbers
     if(commaPositions.length === 1 && commaPositions[0] !== numbersLen){
-      setCommaIdx(commaPositions[0]);
+      setCommaIdx(commaPositions[0] + 1);
       commaCorrect = true;
     }
 
     if(commaCorrect){
+      for(let idx=numbersLen-1; idx>=0; idx--){
+        let nos = numbersCopy.map(n => n[idx])
+        if(nos.every(n => n === "&nbsp;")){
+          for(let noIdx in numbersCopy){
+            numbersCopy[noIdx].splice(idx, 1);
+          }
+        }
+      }
+      for(let noIdx in numbersCopy){
+        numbersCopy[noIdx].unshift("&nbsp;");
+      }
       document.getElementById("commaSubmit").style.display = "none";
       commaIsSet = true;
     }else{