X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FRules.vue;h=556ea863881ffc95fa5100b6bb8c9060fc10a11c;hb=a97bdbda4ecf83645d409b717e36828784d1450d;hp=55564ffdee6292361cc0fe7cadf591591182c0fe;hpb=910d631b73cad5ffef1b4461157b704e7e7057d8;p=vchess.git diff --git a/client/src/views/Rules.vue b/client/src/views/Rules.vue index 55564ffd..556ea863 100644 --- a/client/src/views/Rules.vue +++ b/client/src/views/Rules.vue @@ -20,18 +20,20 @@ main ) | {{ st.tr["Stop game"] }} button( - v-if="display=='rules' && gameInfo.vname!='Dark'" + v-if="showAnalyzeBtn" @click="gotoAnalyze()" ) - | {{ st.tr["Analyse"] }} + | {{ st.tr["Analysis mode"] }} + .row + .col-sm-12.col-md-8.col-md-offset-2.col-lg-6.col-lg-offset-3 div( v-show="display=='rules'" v-html="content" ) ComputerGame( + ref="compgame" v-show="display=='computer'" :game-info="gameInfo" - @game-over="stopGame" @game-stopped="gameStopped" ) @@ -40,6 +42,7 @@ main import ComputerGame from "@/components/ComputerGame.vue"; import { store } from "@/store"; import { getDiagram } from "@/utils/printDiagram"; +import { CompgameStorage } from "@/utils/compgameStorage"; export default { name: "my-rules", components: { @@ -54,9 +57,8 @@ export default { gameInfo: { vname: "", mode: "versus", - fen: "", - score: "*" - } + }, + V: null, }; }, watch: { @@ -69,6 +71,9 @@ export default { this.re_setVariant(this.$route.params["vname"]); }, computed: { + showAnalyzeBtn: function() { + return this.V && this.V.CanAnalyze; + }, content: function() { if (!this.gameInfo.vname) return ""; //variant not set yet // (AJAX) Request to get rules content (plain text, HTML) @@ -107,25 +112,44 @@ export default { return getDiagram(args); }, re_setVariant: async function(vname) { - const vModule = await import("@/variants/" + vname + ".js"); - window.V = vModule.VariantRules; - this.gameInfo.vname = vname; + await import("@/variants/" + vname + ".js") + .then((vModule) => { + this.V = window.V = vModule.VariantRules; + this.gameInfo.vname = vname; + }) + .catch((err) => { + // Soon after component creation, st.tr might be uninitialized. + // Set a timeout to let a chance for the message to show translated. + const text = "Mispelled variant name"; + setTimeout(() => { + alert(this.st.tr[text] || text); + this.$router.replace("/variants"); + }, 500); + }); }, startGame: function(mode) { if (this.gameInProgress) return; this.gameInProgress = true; this.display = "computer"; this.gameInfo.mode = mode; - this.gameInfo.score = "*"; - this.gameInfo.fen = V.GenRandInitFen(); + if (this.gameInfo.mode == "versus") { + CompgameStorage.get(this.gameInfo.vname, (game) => { + // NOTE: game might be null + this.$refs["compgame"].launchGame(game); + }); + } else { + this.$refs["compgame"].launchGame(); + } }, - // user is willing to stop the game: - stopGame: function(score) { - this.gameInfo.score = score || "?"; + // user wants to stop the game: + stopGame: function() { + this.$refs["compgame"].gameOver("?", "Undetermined result"); }, // The game is effectively stopped: gameStopped: function() { this.gameInProgress = false; + if (this.gameInfo.mode == "versus") + CompgameStorage.remove(this.gameInfo.vname); }, gotoAnalyze: function() { this.$router.push(