+ // For Analyse mode:
+ emitFenIfAnalyze: function() {
+ if (this.game.mode == "analyze") {
+ let fen = this.game.fenStart;
+ if (!!this.lastMove) {
+ if (Array.isArray(this.lastMove)) {
+ const L = this.lastMove.length;
+ fen = this.lastMove[L-1].fen;
+ }
+ else fen = this.lastMove.fen;
+ }
+ this.$emit("fenchange", fen);
+ }
+ },
+ clickSquare: function(square) {
+ // Some variants make use of a single click at specific times:
+ const move_s = this.vr.doClick(square);
+ if (!!move_s) {
+ const playMove = () => {
+ if (!Array.isArray(move_s)) this.play(move_s);
+ else this.$refs["board"].choices = move_s;
+ }
+ if ("ontouchstart" in window) {
+ const squareId = "sq-" + square[0] + "-" + square[1];
+ const highlight = function(on, sq) {
+ let elt = document.getElementById(sq);
+ if (!!elt) {
+ if (on) elt.classList.add("touch-hover");
+ else elt.classList.remove("touch-hover");
+ }
+ }
+ // Touch screen (smartphone): require confirmation
+ const squareStr = square[0] + "_" + square[1]
+ if (this.touchLastClick == squareId) {
+ highlight(false, squareId);
+ playMove();
+ }
+ else {
+ highlight(true, squareId);
+ highlight(false, this.touchLastClick);
+ }
+ this.touchLastClick = squareId;
+ }
+ else playMove();
+ }
+ },
+ // "light": if gotoMove() or gotoEnd()
+ play: function(move, received, light, autoplay) {
+ // Freeze while choices are shown:
+ if (
+ !!this.$refs["board"].selectedPiece ||
+ this.$refs["board"].choices.length > 0
+ ) {
+ return;
+ }