X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FAnalyse.vue;h=39022e8a6d480c67e16b9851ce412675e9d0e56e;hb=07052665845283c65b50a76537669d0602ba436b;hp=0a66ffc19d63341e6db7d47b28000ac624a93ca8;hpb=a97bdbda4ecf83645d409b717e36828784d1450d;p=vchess.git diff --git a/client/src/views/Analyse.vue b/client/src/views/Analyse.vue index 0a66ffc1..39022e8a 100644 --- a/client/src/views/Analyse.vue +++ b/client/src/views/Analyse.vue @@ -8,6 +8,7 @@ main @input="adjustFenSize(); tryGotoFen()" ) BaseGame( + ref="basegame" :game="game" @fenchange="setFen" ) @@ -18,6 +19,8 @@ import BaseGame from "@/components/BaseGame.vue"; import { store } from "@/store"; export default { name: "my-analyse", + // TODO: game import ==> require some adjustments, like + // the ability to analyse from a list of moves... components: { BaseGame }, @@ -26,7 +29,6 @@ export default { return { st: store.state, gameRef: { - //given in URL (rid = remote ID) vname: "", fen: "" }, @@ -37,47 +39,59 @@ export default { curFen: "" }; }, - // NOTE: no watcher for $route change, because if fenStart doesn't change - // then it doesn't trigger BaseGame.re_init() and the result is weird. - created: function() { - this.gameRef.vname = this.$route.params["vname"]; - const routeFen = this.$route.query["fen"]; - if (!routeFen) this.alertAndQuit("Missing FEN"); - else { - this.gameRef.fen = routeFen.replace(/_/g, " "); - this.initialize(); + watch: { + $route: function() { + this.initFromUrl(); } }, + created: function() { + this.initFromUrl(); + }, methods: { alertAndQuit: function(text, wrongVname) { // Soon after component creation, st.tr might be uninitialized. // Set a timeout to let a chance for the message to show translated. - const newUrl = "/variants" + (wrongVname ? "" : "/" + this.gameRef.vname); + const newUrl = + "/variants" + (wrongVname ? "" : "/" + this.gameRef.vname); setTimeout(() => { alert(this.st.tr[text] || text); this.$router.replace(newUrl); }, 500); }, - initialize: async function() { + initFromUrl: function() { + this.gameRef.vname = this.$route.params["vname"]; + const routeFen = this.$route.query["fen"]; + if (!routeFen) this.alertAndQuit("Missing FEN"); + else { + this.gameRef.fen = routeFen.replace(/_/g, " "); + // orientation is optional: taken from FEN if missing. + // NOTE: currently no internal usage of 'side', but could be used by + // manually settings the URL (TODO?). + const orientation = this.$route.query["side"]; + this.initialize(orientation); + } + }, + initialize: async function(orientation) { // Obtain VariantRules object await import("@/variants/" + this.gameRef.vname + ".js") .then((vModule) => { - window.V = vModule.VariantRules; + window.V = vModule[this.gameRef.vname + "Rules"]; if (!V.CanAnalyze) // Late check, in case the user tried to enter URL by hand this.alertAndQuit("Analysis disabled for this variant"); - else this.loadGame(); + else this.loadGame(orientation); }) .catch((err) => { this.alertAndQuit("Mispelled variant name", true); }); }, - loadGame: function() { - // NOTE: no need to set score (~unused) + loadGame: function(orientation) { this.game.vname = this.gameRef.vname; + this.game.fenStart = this.gameRef.fen; this.game.fen = this.gameRef.fen; + this.game.score = "*"; //never change this.curFen = this.game.fen; this.adjustFenSize(); - this.game.mycolor = V.ParseFen(this.gameRef.fen).turn; - this.$set(this.game, "fenStart", this.gameRef.fen); + this.game.mycolor = orientation || V.ParseFen(this.gameRef.fen).turn; + this.$refs["basegame"].re_setVariables(this.game); }, // Triggered by "fenchange" emitted in BaseGame: setFen: function(fen) { @@ -86,11 +100,10 @@ export default { }, adjustFenSize: function() { let fenInput = document.getElementById("fen"); - fenInput.style.width = this.curFen.length + "ch"; + fenInput.style.width = (this.curFen.length+3) + "ch"; }, tryGotoFen: function() { - if (V.IsGoodFen(this.curFen)) - { + if (V.IsGoodFen(this.curFen)) { this.gameRef.fen = this.curFen; this.loadGame(); } @@ -98,3 +111,9 @@ export default { } }; + +