img.inline(src="/images/icons/play.svg")
button(@click="gotoEnd()")
img.inline(src="/images/icons/fast-forward.svg")
- #belowControls
- #downloadDiv(v-if="allowDownloadPGN")
- a#download(href="#")
- button(@click="download()") {{ st.tr["Download"] }} PGN
- button(
- v-if="canAnalyze"
- @click="analyzePosition()"
- )
- | {{ st.tr["Analyse"] }}
- // NOTE: variants pages already have a "Rules" link on top
- button(
- v-if="!$route.path.match('/variants/')"
- @click="showRules()"
- )
- | {{ st.tr["Rules"] }}
#movesList
MoveList(
:show="showMoves"
+ :canAnalyze="canAnalyze"
+ :canDownload="allowDownloadPGN"
:score="game.score"
:message="game.scoreMsg"
:firstNum="firstMoveNumber"
:moves="moves"
:cursor="cursor"
+ @download="download"
+ @showrules="showRules"
+ @analyze="analyzePosition"
@goto-move="gotoMove"
)
.clearer
};
},
watch: {
- // game initial FEN changes when a new game starts
- "game.fenStart": function() {
- this.re_setVariables();
+ // game initial FEN changes when a new game starts.
+ // NOTE: when game ID change on Game page, fenStart may be temporarily undefined
+ "game.fenStart": function(fenStart) {
+ if (!!fenStart) this.re_setVariables();
},
},
computed: {
},
showEndgameMsg: function(message) {
this.endgameMessage = message;
- let modalBox = document.getElementById("modalEog");
- modalBox.checked = true;
- setTimeout(() => {
- modalBox.checked = false;
- }, 2000);
+ document.getElementById("modalEog").checked = true;
},
// Animate an elementary move
animateMove: function(move, callback) {
this.emitFenIfAnalyze();
}
this.inMultimove = false;
- const score = this.vr.getCurrentScore();
- if (score != "*") {
- const message = getScoreMessage(score);
- if (!navigate && this.game.mode != "analyze")
- this.$emit("gameover", score, message);
- else if (this.game.mode == "analyze")
+ if (!noemit) {
+ var score = this.vr.getCurrentScore();
+ if (score != "*" && this.game.mode == "analyze") {
+ const message = getScoreMessage(score);
// Just show score on screen (allow undo)
this.showEndgameMsg(score + " . " + this.st.tr[message]);
+ }
}
if (!navigate && this.game.mode != "analyze") {
const L = this.moves.length;
if (!noemit)
- // Post-processing (e.g. computer play)
- this.$emit("newmove", this.moves[L-1]);
+ // Post-processing (e.g. computer play).
+ // NOTE: always emit the score, even in unfinished,
+ // to tell Game::processMove() that it's not a received move.
+ this.$emit("newmove", this.moves[L-1], { score: score });
else {
this.inPlay = false;
if (this.stackToPlay.length > 0)
display: inline-block
#controls
+ user-select: none
margin: 0 auto
text-align: center
display: flex
display: inline-block
width: 20%
margin: 0
- img.inline
- height: 24px
- padding-top: 5px
- @media screen and (max-width: 767px)
- img.inline
- height: 18px
+ padding-top: 5px
+ padding-bottom: 5px
+
+img.inline
+ height: 24px
+ padding-top: 5px
+ @media screen and (max-width: 767px)
+ height: 18px
#turnIndicator
text-align: center
font-weight: bold
-#belowControls
- border-top: 1px solid #2f4f4f
- text-align: center
- margin: 0 auto
- & > #downloadDiv
- margin: 0
- & > button
- margin: 0
- & > button
- border-left: 1px solid #2f4f4f
- margin: 0
-
#boardContainer
float: left
// TODO: later, maybe, allow movesList of variable width