From: Benjamin Auder Date: Thu, 30 Jan 2020 10:35:36 +0000 (+0100) Subject: Smooth scrolling in moves, template to render moveList X-Git-Url: https://git.auder.net/variants/Cwda/complete_rules.html?a=commitdiff_plain;h=430a203855578f9bbf4c851165c6066a741ff1f8;p=vchess.git Smooth scrolling in moves, template to render moveList --- diff --git a/client/src/App.vue b/client/src/App.vue index 4fc3b48b..77fed7af 100644 --- a/client/src/App.vue +++ b/client/src/App.vue @@ -140,6 +140,10 @@ nav width: 36px height: 27px +@media screen and (max-width: 767px) + nav + border: none + [type="checkbox"].drawer+* right: -767px @@ -168,4 +172,8 @@ footer & > p display: inline-block margin: 0 0 0 10px + +@media screen and (max-width: 767px) + footer + border: none diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index 5c82b0b1..e04f5082 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -22,7 +22,7 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" @keydown="handleKeys") a#download(href="#") button(@click="download") {{ st.tr["Download PGN"] }} .col-sm-12.col-md-3 - MoveList(v-if="showMoves" + MoveList(v-if="showMoves" :score="game.score" :message="game.scoreMsg" :moves="moves" :cursor="cursor" @goto-move="gotoMove") @@ -51,7 +51,6 @@ export default { moves: [], cursor: -1, //index of the move just played lastMove: null, - gameHasEnded: false, //to avoid showing end message twice }; }, watch: { @@ -63,13 +62,6 @@ export default { "game.moveToPlay": function() { this.play(this.game.moveToPlay, "receive", this.game.vname=="Dark"); }, - "game.score": function(score) { - if (!this.gameHasEnded && score != "*") - { - // "false" says "don't bubble up": the parent already knows - this.endGame(score, this.game.scoreMsg, false); - } - }, }, computed: { showMoves: function() { @@ -77,10 +69,10 @@ export default { //return window.innerWidth >= 768; }, showFen: function() { - return this.game.vname != "Dark" || this.score != "*"; + return this.game.vname != "Dark" || this.game.score != "*"; }, analyze: function() { - return this.game.mode == "analyze" || this.score != "*"; + return this.game.mode == "analyze" || this.game.score != "*"; }, }, created: function() { @@ -117,8 +109,6 @@ export default { re_setVariables: function() { this.endgameMessage = ""; this.orientation = this.game.mycolor || "w"; //default orientation for observed games - this.score = this.game.score || "*"; //mutable (if initially "*") - this.gameHasEnded = (this.score != "*"); this.moves = JSON.parse(JSON.stringify(this.game.moves || [])); // Post-processing: decorate each move with color + current FEN: // (to be able to jump to any position quickly) @@ -142,8 +132,9 @@ export default { this.lastMove = (L > 0 ? this.moves[L-1] : null); }, gotoFenContent: function(event) { - this.$router.push("/analyze/" + this.game.vname + - "/?fen=" + event.target.innerText.replace(/ /g, "_")); + const newUrl = "#/analyze/" + this.game.vname + + "/?fen=" + event.target.innerText.replace(/ /g, "_"); + window.open(newUrl); //to open in a new tab }, download: function() { const content = this.getPgn(); @@ -161,7 +152,7 @@ export default { pgn += '[White "' + this.game.players[0].name + '"]\n'; pgn += '[Black "' + this.game.players[1].name + '"]\n'; pgn += '[Fen "' + this.game.fenStart + '"]\n'; - pgn += '[Result "' + this.score + '"]\n\n'; + pgn += '[Result "' + this.game.score + '"]\n\n'; let counter = 1; let i = 0; while (i < this.moves.length) @@ -203,15 +194,6 @@ export default { modalBox.checked = true; setTimeout(() => { modalBox.checked = false; }, 2000); }, - endGame: function(score, message, bubbleUp) { - this.gameHasEnded = true; - this.score = score; - if (!message) - message = this.getScoreMessage(score); - this.showEndgameMsg(score + " . " + message); - if (bubbleUp) - this.$emit("gameover", score); - }, animateMove: function(move) { let startSquare = document.getElementById(getSquareId(move.start)); let endSquare = document.getElementById(getSquareId(move.end)); @@ -275,7 +257,7 @@ export default { if (!navigate) { move.fen = this.vr.getFen(); - if (this.score == "*" || this.analyze) + if (this.game.score == "*" || this.analyze) { // Stack move on movesList at current cursor if (this.cursor == this.moves.length) @@ -291,14 +273,11 @@ export default { const score = this.vr.getCurrentScore(); if (score != "*") { + const message = this.getScoreMessage(score); if (!this.analyze) - this.endGame(score, undefined, true); - else - { - // Just show score on screen (allow undo) - const message = this.getScoreMessage(score); + this.$emit("gameover", score, message); + else //just show score on screen (allow undo) this.showEndgameMsg(score + " . " + message); - } } }, undo: function(move) { @@ -366,7 +345,7 @@ export default { width: 20% margin: 0 #boardContainer - margin-top: 5px + //margin-top: 5px >div margin-left: auto margin-right: auto diff --git a/client/src/components/ComputerGame.vue b/client/src/components/ComputerGame.vue index 941016b7..46b672bb 100644 --- a/client/src/components/ComputerGame.vue +++ b/client/src/components/ComputerGame.vue @@ -123,8 +123,9 @@ export default { this.playComputerMove(); } }, - gameOver: function(score) { + gameOver: function(score, scoreMsg) { this.game.score = score; + this.game.scoreMsg = scoreMsg; this.game.mode = "analyze"; this.$emit("game-over", score); //bubble up to Rules.vue }, diff --git a/client/src/components/MoveList.vue b/client/src/components/MoveList.vue index a4e1ca41..70756cc3 100644 --- a/client/src/components/MoveList.vue +++ b/client/src/components/MoveList.vue @@ -1,9 +1,65 @@ + + + + + + diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue index 00414d91..1ffcda41 100644 --- a/client/src/views/Game.vue +++ b/client/src/views/Game.vue @@ -1,14 +1,11 @@