Failed attempt for marseilleChess with a template: back to render function
[vchess.git] / client / src / components / MoveList.vue
index c63f2cd..73c10f0 100644 (file)
@@ -3,16 +3,17 @@ div
   #scoreInfo(v-if="score!='*'")
     p {{ score }}
     p {{ message }}
-  table#movesList
+  table.moves-list
     tbody
-      tr(v-for="moveIdx in evenNumbers")
-        td {{ firstNum + moveIdx / 2 + 1 }}
+      tr(v-for="gmove,index in groupedMoves")
+        td(v-if="index%2==0")
+          | {{ firstNum + index / 2 + 1 }}
         td(:class="{'highlight-lm': cursor == moveIdx}"
-            data-label="White move" @click="() => gotoMove(moveIdx)")
+            @click="() => gotoMove(moveIdx)")
           | {{ moves[moveIdx].notation }}
         td(v-if="moveIdx < moves.length-1"
             :class="{'highlight-lm': cursor == moveIdx+1}"
-            data-label="Black move" @click="() => gotoMove(moveIdx+1)")
+            @click="() => gotoMove(moveIdx+1)")
           | {{ moves[moveIdx+1].notation }}
         // Else: just add an empty cell
         td(v-else)
@@ -25,6 +26,8 @@ export default {
        props: ["moves","cursor","score","message","firstNum"],
   watch: {
     cursor: function(newValue) {
+      if (window.innerWidth <= 767)
+        return; //moves list is below: scrolling would hide chessboard
       if (newValue < 0)
         newValue = 0; //avoid rows[-1] --> error
       // $nextTick to wait for table > tr to be rendered
@@ -41,8 +44,24 @@ export default {
     },
   },
   computed: {
-    evenNumbers: function() {
-      return [...Array(this.moves.length).keys()].filter(i => i%2==0);
+    groupedMoves: function() {
+      let groups = [];
+      let curCol = undefined;
+      for (let idx=0; idx < this.moves.length; idx++)
+      {
+        const m = this.moves[idx];
+        if (m.color == curCol)
+        {
+          const gidx = groups.length - 1;
+          groups[gidx].moves.push(m);
+        }
+        else
+        {
+          curCol = m.color;
+          groups.push({moves: [m], idx: groups.length});
+        }
+      }
+      return groups;
     },
   },
   methods: {
@@ -56,6 +75,14 @@ export default {
 <style lang="sass" scoped>
 .moves-list
   min-width: 250px
+@media screen and (max-width: 767px)
+  .moves-list
+    tr
+      display: flex
+      margin: 0
+      padding: 0
+      td
+        text-align: left
 td.highlight-lm
   background-color: plum
 </style>