+ },
+ handleScroll: function(e) {
+ // NOTE: since game.mode=="analyze" => no score, next condition is enough
+ if (this.game.score != "*") {
+ e.preventDefault();
+ if (e.deltaY < 0) this.undo();
+ else if (e.deltaY > 0) this.play();
+ }
+ },
+ showRules: function() {
+ //this.$router.push("/variants/" + this.game.vname);
+ window.open("#/variants/" + this.game.vname, "_blank"); //better
+ },
+ re_setVariables: function() {
+ this.endgameMessage = "";
+ // "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, 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 => {
+ move.color = vr_tmp.turn;
+ move.notation = vr_tmp.getNotation(move);
+ vr_tmp.play(move);
+ move.fen = vr_tmp.getFen();
+ });
+ if (firstMoveColor == "b") {
+ // 'end' is required for Board component to check lastMove for e.p.
+ this.moves.unshift({
+ color: "w",
+ notation: "...",
+ end: { x: -1, y: -1 }
+ });
+ }
+ const L = this.moves.length;
+ this.cursor = L - 1;
+ this.lastMove = L > 0 ? this.moves[L - 1] : null;
+ this.incheck = this.vr.getCheckSquares(this.vr.turn);
+ },
+ analyzePosition: function() {
+ const newUrl =
+ "/analyse/" +
+ this.game.vname +
+ "/?fen=" +
+ this.vr.getFen().replace(/ /g, "_");
+ // Open in same tab in live games (against cheating)
+ if (this.game.type == "live") this.$router.push(newUrl);
+ else window.open("#" + newUrl);