Draft Hiddenqueen, Grasshopper and Knightmate chess (rules unwritten)
[vchess.git] / client / src / views / Rules.vue
index 015df7b..556ea86 100644 (file)
@@ -23,7 +23,7 @@ main
           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(
@@ -57,7 +57,8 @@ export default {
       gameInfo: {
         vname: "",
         mode: "versus",
-      }
+      },
+      V: null,
     };
   },
   watch: {
@@ -71,7 +72,7 @@ export default {
   },
   computed: {
     showAnalyzeBtn: function() {
-      return (this.display=='rules' && (!window.V || V.CanAnalyze));
+      return this.V && this.V.CanAnalyze;
     },
     content: function() {
       if (!this.gameInfo.vname) return ""; //variant not set yet
@@ -111,9 +112,20 @@ 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;