Board(
:vr="vr"
:last-move="lastMove"
- :analyze="analyze"
+ :analyze="game.mode=='analyze'"
+ :score="game.score"
:user-color="game.mycolor"
:orientation="orientation"
:vname="game.vname"
:incheck="incheck"
@play-move="play"
)
- #turnIndicator(v-if="game.vname=='Dark' && game.score=='*'") {{ turn }}
+ #turnIndicator(v-if="showTurn") {{ turn }}
#controls
button(@click="gotoBegin()") <<
button(@click="undo()") <
button(@click="play()") >
button(@click="gotoEnd()") >>
#belowControls
- #downloadDiv(v-if="game.vname!='Dark' || game.score!='*'")
+ #downloadDiv(v-if="allowDownloadPGN")
a#download(href="#")
button(@click="download()") {{ st.tr["Download"] }} PGN
button(onClick="window.doClick('modalAdjust')") ⤢
button(
- v-if="game.vname!='Dark' && game.mode!='analyze'"
+ v-if="canAnalyze"
@click="analyzePosition()"
)
| {{ st.tr["Analyse"] }}
- // NOTE: rather ugly hack to avoid showing twice "rules" link...
+ // NOTE: variants pages already have a "Rules" link on top
button(
v-if="!$route.path.match('/variants/')"
@click="showRules()"
"game.fenStart": function() {
this.re_setVariables();
},
- // Received a new move to play:
- "game.moveToPlay": function(move) {
- if (move) this.play(move, "receive");
- },
- // ...Or to undo (corr game, move not validated)
- "game.moveToUndo": function(move) {
- if (move) this.undo(move);
- }
},
computed: {
showMoves: function() {
- return this.game.vname != "Dark" || this.game.score != "*";
+ return this.game.score != "*" || (window.V && V.ShowMoves == "all");
+ },
+ showTurn: function() {
+ return this.game.score == '*' && window.V && V.ShowMoves != "all";
},
turn: function() {
return this.st.tr[(this.vr.turn == 'w' ? "White" : "Black") + " to move"];
},
- analyze: function() {
- return (
- this.game.mode == "analyze" ||
- // From Board viewpoint, a finished Dark game == analyze (TODO: unclear)
- (this.game.vname == "Dark" && this.game.score != "*")
- );
+ canAnalyze: function() {
+ return this.game.mode != "analyze" && window.V && V.CanAnalyze;
+ },
+ allowDownloadPGN: function() {
+ return this.game.score != "*" || (window.V && V.ShowMoves == "all");
}
},
created: function() {
},
re_setVariables: function() {
this.endgameMessage = "";
- this.orientation = this.game.mycolor || "w"; //default orientation for observed games
+ // "w": default orientation for observed games
+ this.orientation = this.game.mycolor || "w";
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)
- 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
- );
+ // Post-processing: decorate each move with color, notation and FEN
+ let vr_tmp = new V(this.game.fenStart);
+ const parsedFen = V.ParseFen(this.game.fenStart);
+ const firstMoveColor = parsedFen.turn;
+ this.firstMoveNumber = Math.floor(parsedFen.movesCount / 2);
this.moves.forEach(move => {
- // NOTE: this is doing manually what play() function below achieve,
- // but in a lighter "fast-forward" way
move.color = vr_tmp.turn;
move.notation = vr_tmp.getNotation(move);
vr_tmp.play(move);
move.fen = vr_tmp.getFen();
});
- if (
- (this.moves.length > 0 && this.moves[0].color == "b") ||
- (this.moves.length == 0 && vr_tmp.turn == "b")
- ) {
+ if (firstMoveColor == "b") {
// 'end' is required for Board component to check lastMove for e.p.
this.moves.unshift({
color: "w",
if (!navigate && this.game.mode != "analyze")
this.$emit("newmove", move); //post-processing (e.g. computer play)
};
- if (!!receive && this.game.vname != "Dark")
+ if (!!receive && V.ShowMoves == "all")
this.animateMove(move, doPlayMove);
else doPlayMove();
},