Work on sizes, CSS
[vchess.git] / client / src / components / BaseGame.vue
index 608a98d..27821c3 100644 (file)
@@ -5,8 +5,8 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" @keydown="handleKeys")
     .card.smallpad.small-modal.text-center
       label.modal-close(for="modalEog")
       h3#eogMessage.section {{ endgameMessage }}
-  .row
-    #boardContainer.col-sm-12.col-md-9
+  #gameContainer
+    #boardContainer
       Board(:vr="vr" :last-move="lastMove" :analyze="game.mode=='analyze'"
         :user-color="game.mycolor" :orientation="orientation"
         :vname="game.vname" @play-move="play")
@@ -21,9 +21,12 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" @keydown="handleKeys")
         button(@click="download") {{ st.tr["Download PGN"] }}
         button(v-if="game.mode!='analyze'" @click="analyzePosition")
           | {{ st.tr["Analyze"] }}
-    .col-sm-12.col-md-3
+    #movesList
       MoveList(v-if="showMoves" :score="game.score" :message="game.scoreMsg"
-        :moves="moves" :cursor="cursor" @goto-move="gotoMove")
+        :firstNum="firstMoveNumber" :moves="moves" :cursor="cursor"
+        @goto-move="gotoMove")
+  // TODO: clearer required ?!
+  .clearer
 </template>
 
 <script>
@@ -51,6 +54,7 @@ export default {
       moves: [],
       cursor: -1, //index of the move just played
       lastMove: null,
+      firstMoveNumber: 0, //for printing
     };
   },
   watch: {
@@ -73,6 +77,11 @@ export default {
     if (!!this.game.fenStart)
       this.re_setVariables();
   },
+  mounted: function() {
+    const boardSize = localStorage.getItem("boardSize");
+    if (!!boardSize)
+      document.getElementById("boardContainer").style.width = boardSize + "px";
+  },
   methods: {
     focusBg: function() {
       // TODO: small blue border appears...
@@ -107,6 +116,8 @@ export default {
       // Post-processing: decorate each move with color + current FEN:
       // (to be able to jump to any position quickly)
       let vr_tmp = new V(this.game.fenStart); //vr is already at end of game
+      this.firstMoveNumber =
+        Math.floor(V.ParseFen(this.game.fenStart).movesCount / 2);
       this.moves.forEach(move => {
         // NOTE: this is doing manually what play() function below achieve,
         // but in a lighter "fast-forward" way
@@ -297,6 +308,8 @@ export default {
       this.lastMove = this.moves[index];
     },
     gotoBegin: function() {
+      if (this.cursor == -1)
+        return;
       this.vr.re_init(this.game.fenStart);
       if (this.moves.length > 0 && this.moves[0].notation == "...")
       {
@@ -310,6 +323,8 @@ export default {
       }
     },
     gotoEnd: function() {
+      if (this.cursor == this.moves.length - 1)
+        return;
       this.gotoMove(this.moves.length-1);
     },
     flip: function() {
@@ -320,27 +335,38 @@ export default {
 </script>
 
 <style lang="sass">
-#modal-eog+div .card
-  overflow: hidden
-#pgnDiv
-  text-align: center
+#baseGame
+  width: 100%
+
+#gameContainer
   margin-left: auto
   margin-right: auto
+
+#modal-eog+div .card
+  overflow: hidden
 @media screen and (min-width: 768px)
   #controls
     width: 400px
-@media screen and (max-width: 767px)
-  .game
-    width: 100%
+    margin-left: auto
+    margin-right: auto
 #controls
   margin-top: 10px
+  margin-left: auto
+  margin-right: auto
   button
     display: inline-block
     width: 20%
     margin: 0
+#pgnDiv
+  text-align: center
+  margin-left: auto
+  margin-right: auto
 #boardContainer
-  //margin-top: 5px
-  >div
-    margin-left: auto
-    margin-right: auto
+  float: left
+#movesList
+  width: 280px
+  float: left
+
+.clearer
+  clear: both
 </style>