X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FRules.vue;h=4daebf9d80e7bdfcbb3aa09bb1327f9f50256cfc;hb=6808d7a16ec1e761c6a2dffec2281c96953e4d89;hp=8056ba3211333d5ee3ccffc09c3a3544f23f50f0;hpb=5157ce0b8872417fbeecd736c9d1ae750b24acdc;p=vchess.git diff --git a/client/src/views/Rules.vue b/client/src/views/Rules.vue index 8056ba32..4daebf9d 100644 --- a/client/src/views/Rules.vue +++ b/client/src/views/Rules.vue @@ -3,15 +3,17 @@ main .row .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2 .button-group - button(@click="clickReadRules") Rules - button(v-show="!gameInProgress" @click="() => startGame('auto')") - | Sample game - button(v-show="!gameInProgress" @click="() => startGame('versus')") - | Practice! - button(v-show="gameInProgress" @click="() => stopGame()") - | Stop game - button(@click="gotoAnalyze") Analyze - .section-content(v-show="display=='rules'" v-html="content") + button(@click="clickReadRules()") {{ st.tr["Rules"] }} + button(v-show="!gameInProgress" @click="startGame('auto')") + | {{ st.tr["Example game"] }} + button(v-show="!gameInProgress" @click="startGame('versus')") + | {{ st.tr["Practice"] }} + button(v-show="gameInProgress" @click="stopGame()") + | {{ st.tr["Stop game"] }} + button(v-if="display=='rules' && gameInfo.vname!='Dark'" + @click="gotoAnalyze()") + | {{ st.tr["Analyse"] }} + div(v-show="display=='rules'" v-html="content") ComputerGame(v-show="display=='computer'" :game-info="gameInfo" @game-over="stopGame" @game-stopped="gameStopped") @@ -20,42 +22,57 @@ main import ComputerGame from "@/components/ComputerGame.vue"; import { store } from "@/store"; import { getDiagram } from "@/utils/printDiagram"; - export default { - name: 'my-rules', + name: "my-rules", components: { - ComputerGame, + ComputerGame }, data: function() { return { st: store.state, - content: "", display: "rules", gameInProgress: false, // variables passed to ComputerGame: gameInfo: { - vname: "_unknown", + vname: "", mode: "versus", fen: "", - score: "*", + score: "*" } }; }, watch: { - "$route": function(newRoute) { - this.tryChangeVariant(newRoute.params["vname"]); - }, + $route: function(newRoute) { + this.re_setVariant(newRoute.params["vname"]); + } }, - created: async function() { + created: function() { // NOTE: variant cannot be set before store is initialized - this.tryChangeVariant(this.$route.params["vname"]); + this.re_setVariant(this.$route.params["vname"]); + }, + computed: { + content: function() { + if (!this.gameInfo.vname) return ""; //variant not set yet + // (AJAX) Request to get rules content (plain text, HTML) + return ( + require("raw-loader!@/translations/rules/" + + this.gameInfo.vname + + "/" + + this.st.lang + + ".pug") + // Next two lines fix a weird issue after last update (2019-11) + .replace(/\\n/g, " ") + .replace(/\\"/g, '"') + .replace('module.exports = "', "") + .replace(/"$/, "") + .replace(/(fen:)([^:]*):/g, this.replaceByDiag) + ); + } }, methods: { clickReadRules: function() { - if (this.display != "rules") - this.display = "rules"; - else if (this.gameInProgress) - this.display = "computer"; + if (this.display != "rules") this.display = "rules"; + else if (this.gameInProgress) this.display = "computer"; }, parseFen(fen) { const fenParts = fen.split(" "); @@ -63,31 +80,21 @@ export default { position: fenParts[0], marks: fenParts[1], orientation: fenParts[2], - shadow: fenParts[3], + shadow: fenParts[3] }; }, - tryChangeVariant: async function(vname) { - if (!vname || vname == "_unknown") - return; - this.gameInfo.vname = vname; + // Method to replace diagrams in loaded HTML + replaceByDiag: function(match, p1, p2) { + const args = this.parseFen(p2); + return getDiagram(args); + }, + re_setVariant: async function(vname) { const vModule = await import("@/variants/" + vname + ".js"); window.V = vModule.VariantRules; - // Method to replace diagrams in loaded HTML - const replaceByDiag = (match, p1, p2) => { - const args = this.parseFen(p2); - return getDiagram(args); - }; - // (AJAX) Request to get rules content (plain text, HTML) - this.content = - require("raw-loader!@/translations/rules/" + vname + "/" + this.st.lang + ".pug") - // Next two lines fix a weird issue after last update (2019-11) - .replace(/\\[n"]/g, " ") - .replace('module.exports = "', '').replace(/"$/, "") - .replace(/(fen:)([^:]*):/g, replaceByDiag); + this.gameInfo.vname = vname; }, startGame: function(mode) { - if (this.gameInProgress) - return; + if (this.gameInProgress) return; this.gameInProgress = true; this.display = "computer"; this.gameInfo.mode = mode; @@ -97,20 +104,21 @@ export default { // user is willing to stop the game: stopGame: function(score) { this.gameInfo.score = score || "?"; - this.gameInfo.mode = "analyze"; }, // The game is effectively stopped: gameStopped: function() { this.gameInProgress = false; }, gotoAnalyze: function() { - this.$router.push("/analyze/" + this.gameInfo.vname - + "/?fen=" + V.GenRandInitFen()); - }, - }, + this.$router.push( + "/analyse/" + this.gameInfo.vname + "/?fen=" + V.GenRandInitFen() + ); + } + } }; +