:vname="game.vname"
:incheck="incheck"
@play-move="play"
+ @click-square="clickSquare"
)
#turnIndicator(v-if="showTurn") {{ turn }}
#controls.button-group
@showrules="showRules"
@analyze="analyzePosition"
@goto-move="gotoMove"
+ @reset-arrows="resetArrows"
)
.clearer
</template>
if (e.deltaY < 0) this.undo();
else if (e.deltaY > 0) this.play();
},
+ resetArrows: function() {
+ // TODO: make arrows scale with board, and remove this
+ this.$refs["board"].cancelResetArrows();
+ },
showRules: function() {
//this.$router.push("/variants/" + this.game.vname);
window.open("#/variants/" + this.game.vname, "_blank"); //better
this.incheck = this.vr.getCheckSquares(this.vr.turn);
const score = this.vr.getCurrentScore();
if (L > 0 && this.moves[L - 1].notation != "...") {
- if (["1-0","0-1"].includes(score))
- this.moves[L - 1].notation += "#";
- else if (this.vr.getCheckSquares(this.vr.turn).length > 0)
- this.moves[L - 1].notation += "+";
+ if (["1-0","0-1"].includes(score)) this.moves[L - 1].notation += "#";
+ else if (this.incheck.length > 0) this.moves[L - 1].notation += "+";
}
},
positionCursorTo: function(index) {
this.game.vname +
"/?fen=" +
this.vr.getFen().replace(/ /g, "_");
- if (this.game.mycolor)
- newUrl += "&side=" + this.game.mycolor;
- // Open in same tab in live games (against cheating)
- if (this.game.type == "live") this.$router.push(newUrl);
- else window.open("#" + newUrl);
+ if (!!this.game.mycolor) newUrl += "&side=" + this.game.mycolor;
+ window.open("#" + newUrl);
},
download: function() {
const content = this.getPgn();
pgn += '\n';
for (let i = 0; i < this.moves.length; i += 2) {
if (i > 0) pgn += " ";
- pgn += (i/2+1) + "." + getFullNotation(this.moves[i]);
+ // Adjust dots notation for a better display:
+ let fullNotation = getFullNotation(this.moves[i]);
+ if (fullNotation == "...") fullNotation = "..";
+ pgn += (i/2+1) + "." + fullNotation;
if (i+1 < this.moves.length)
pgn += " " + getFullNotation(this.moves[i+1]);
}
pgn += "\n\n";
for (let i = 0; i < this.moves.length; i += 2) {
- pgn += getFullNotation(this.moves[i], "unambiguous") + "\n";
- if (i+1 < this.moves.length)
- pgn += getFullNotation(this.moves[i+1], "unambiguous") + "\n";
+ const moveNumber = i / 2 + 1;
+ pgn += moveNumber + "." + i + " " +
+ getFullNotation(this.moves[i], "unambiguous") + "\n";
+ if (i+1 < this.moves.length) {
+ pgn += moveNumber + "." + (i+1) + " " +
+ getFullNotation(this.moves[i+1], "unambiguous") + "\n";
+ }
}
return pgn;
},
);
}
},
+ clickSquare: function(square) {
+ // Some variants make use of a single click at specific times:
+ const move = this.vr.doClick(square);
+ if (!!move) this.play(move);
+ },
// "light": if gotoMove() or gotoEnd()
play: function(move, received, light, noemit) {
// Freeze while choices are shown:
const computeScore = () => {
const score = this.vr.getCurrentScore();
if (!navigate) {
- if (["1-0","0-1"].includes(score))
- this.lastMove.notation += "#";
- else if (this.vr.getCheckSquares(this.vr.turn).length > 0)
- this.lastMove.notation += "+";
+ if (["1-0","0-1"].includes(score)) this.lastMove.notation += "#";
+ else if (this.incheck.length > 0) this.lastMove.notation += "+";
}
if (score != "*" && this.game.mode == "analyze") {
const message = getScoreMessage(score);