Commit | Line | Data |
---|---|---|
7f3484bd | 1 | <template lang="pug"> |
7aa548e7 | 2 | main |
63ca2b89 BA |
3 | .row |
4 | .col-sm-12 | |
9a3049f3 | 5 | .text-center |
910d631b BA |
6 | input#fen( |
7 | v-model="curFen" | |
725da57f | 8 | @input="adjustFenSize(); tryGotoFen()" |
910d631b | 9 | ) |
910d631b BA |
10 | BaseGame( |
11 | :game="game" | |
8055eabd | 12 | @fenchange="setFen" |
910d631b | 13 | ) |
7f3484bd BA |
14 | </template> |
15 | ||
16 | <script> | |
17 | import BaseGame from "@/components/BaseGame.vue"; | |
7f3484bd | 18 | import { store } from "@/store"; |
7f3484bd | 19 | export default { |
6808d7a1 | 20 | name: "my-analyse", |
7f3484bd | 21 | components: { |
6808d7a1 | 22 | BaseGame |
7f3484bd BA |
23 | }, |
24 | // gameRef: to find the game in (potentially remote) storage | |
25 | data: function() { | |
26 | return { | |
27 | st: store.state, | |
6808d7a1 BA |
28 | gameRef: { |
29 | //given in URL (rid = remote ID) | |
652f40de BA |
30 | vname: "", |
31 | fen: "" | |
32 | }, | |
33 | game: { | |
6808d7a1 BA |
34 | players: [{ name: "Analyse" }, { name: "Analyse" }], |
35 | mode: "analyze" | |
7f3484bd | 36 | }, |
6808d7a1 | 37 | curFen: "" |
7f3484bd BA |
38 | }; |
39 | }, | |
8055eabd BA |
40 | // NOTE: no watcher for $route change, because if fenStart doesn't change |
41 | // then it doesn't trigger BaseGame.re_init() and the result is weird. | |
7f3484bd | 42 | created: function() { |
652f40de | 43 | this.gameRef.vname = this.$route.params["vname"]; |
a97bdbda BA |
44 | const routeFen = this.$route.query["fen"]; |
45 | if (!routeFen) this.alertAndQuit("Missing FEN"); | |
46 | else { | |
47 | this.gameRef.fen = routeFen.replace(/_/g, " "); | |
48 | this.initialize(); | |
49 | } | |
7f3484bd BA |
50 | }, |
51 | methods: { | |
a97bdbda BA |
52 | alertAndQuit: function(text, wrongVname) { |
53 | // Soon after component creation, st.tr might be uninitialized. | |
54 | // Set a timeout to let a chance for the message to show translated. | |
55 | const newUrl = "/variants" + (wrongVname ? "" : "/" + this.gameRef.vname); | |
56 | setTimeout(() => { | |
57 | alert(this.st.tr[text] || text); | |
58 | this.$router.replace(newUrl); | |
59 | }, 500); | |
60 | }, | |
a0c41e7e | 61 | initialize: async function() { |
5157ce0b | 62 | // Obtain VariantRules object |
a97bdbda BA |
63 | await import("@/variants/" + this.gameRef.vname + ".js") |
64 | .then((vModule) => { | |
65 | window.V = vModule.VariantRules; | |
66 | if (!V.CanAnalyze) | |
67 | // Late check, in case the user tried to enter URL by hand | |
68 | this.alertAndQuit("Analysis disabled for this variant"); | |
69 | else this.loadGame(); | |
70 | }) | |
71 | .catch((err) => { this.alertAndQuit("Mispelled variant name", true); }); | |
5157ce0b BA |
72 | }, |
73 | loadGame: function() { | |
0e16cb26 | 74 | // NOTE: no need to set score (~unused) |
652f40de BA |
75 | this.game.vname = this.gameRef.vname; |
76 | this.game.fen = this.gameRef.fen; | |
5157ce0b BA |
77 | this.curFen = this.game.fen; |
78 | this.adjustFenSize(); | |
8055eabd | 79 | this.game.mycolor = V.ParseFen(this.gameRef.fen).turn; |
77c50966 | 80 | this.$set(this.game, "fenStart", this.gameRef.fen); |
7f3484bd | 81 | }, |
8055eabd BA |
82 | // Triggered by "fenchange" emitted in BaseGame: |
83 | setFen: function(fen) { | |
84 | this.curFen = fen; | |
85 | this.adjustFenSize(); | |
86 | }, | |
5157ce0b BA |
87 | adjustFenSize: function() { |
88 | let fenInput = document.getElementById("fen"); | |
89 | fenInput.style.width = this.curFen.length + "ch"; | |
90 | }, | |
725da57f BA |
91 | tryGotoFen: function() { |
92 | if (V.IsGoodFen(this.curFen)) | |
93 | { | |
94 | this.gameRef.fen = this.curFen; | |
95 | this.loadGame(); | |
96 | } | |
6808d7a1 BA |
97 | } |
98 | } | |
7f3484bd BA |
99 | }; |
100 | </script> |