X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FAnalyse.vue;h=baf1036441af17a7b4c3e8a5e8fcadc5a9621379;hb=7ba4a5bc5b64e19a1e7f26aa232d5c50770d07ad;hp=4307b9d039512f257f1079dc3ae8de5ea0c6d3b4;hpb=310b83c9857f2efa48cbdb80919a8d3cbe257ea7;p=vchess.git diff --git a/client/src/views/Analyse.vue b/client/src/views/Analyse.vue index 4307b9d0..baf10364 100644 --- a/client/src/views/Analyse.vue +++ b/client/src/views/Analyse.vue @@ -41,23 +41,44 @@ export default { // then it doesn't trigger BaseGame.re_init() and the result is weird. created: function() { this.gameRef.vname = this.$route.params["vname"]; - this.gameRef.fen = this.$route.query["fen"].replace(/_/g, " "); - this.initialize(); + 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 + const orientation = this.$route.query["side"]; + this.initialize(orientation); + } }, methods: { - initialize: async function() { + 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); + setTimeout(() => { + alert(this.st.tr[text] || text); + this.$router.replace(newUrl); + }, 500); + }, + initialize: async function(orientation) { // Obtain VariantRules object - const vModule = await import("@/variants/" + this.gameRef.vname + ".js"); - window.V = vModule.VariantRules; - this.loadGame(); + await import("@/variants/" + this.gameRef.vname + ".js") + .then((vModule) => { + window.V = vModule.VariantRules; + 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(orientation); + }) + .catch((err) => { this.alertAndQuit("Mispelled variant name", true); }); }, - loadGame: function() { + loadGame: function(orientation) { // NOTE: no need to set score (~unused) this.game.vname = this.gameRef.vname; this.game.fen = this.gameRef.fen; this.curFen = this.game.fen; this.adjustFenSize(); - this.game.mycolor = V.ParseFen(this.gameRef.fen).turn; + this.game.mycolor = orientation || V.ParseFen(this.gameRef.fen).turn; this.$set(this.game, "fenStart", this.gameRef.fen); }, // Triggered by "fenchange" emitted in BaseGame: