Commit | Line | Data |
---|---|---|
f5d3e4f5 | 1 | new Vue({ |
b57dbd12 | 2 | el: "#VueElement", |
c794dbb8 | 3 | data: { |
a3ab5fdb | 4 | display: "", //default to main hall; see "created()" function |
97da8720 BA |
5 | gameRef: undefined, //...for now |
6 | probId: undefined, | |
81bc1102 | 7 | conn: null, |
a3ab5fdb BA |
8 | mode: "analyze", |
9 | allowChat: false, | |
10 | allowMovelist: true, | |
582df349 BA |
11 | // Settings initialized with values from localStorage |
12 | settings: { | |
13 | bcolor: localStorage["bcolor"] || "lichess", | |
14 | sound: parseInt(localStorage["sound"]) || 2, | |
15 | hints: parseInt(localStorage["hints"]) || 1, | |
16 | coords: !!eval(localStorage["coords"]), | |
17 | highlight: !!eval(localStorage["highlight"]), | |
18 | sqSize: parseInt(localStorage["sqSize"]), | |
19 | }, | |
c794dbb8 | 20 | }, |
d449ae46 | 21 | created: function() { |
97da8720 | 22 | window.onhashchange = this.setDisplay; |
582df349 | 23 | if (!!localStorage["variant"]) |
582df349 | 24 | location.hash = "#game?id=" + localStorage["gameId"]; |
582df349 BA |
25 | else |
26 | this.setDisplay(); | |
a3ab5fdb BA |
27 | // Our ID, always set (DB id if registered, collision-free random string otherwise) |
28 | this.myid = user.id || localStorage["myid"] || "anon-" + getRandString(); | |
d44df0b0 | 29 | this.conn = new WebSocket(socketUrl + "/?sid=" + this.myid + "&page=" + variant.id); |
81bc1102 | 30 | const socketCloseListener = () => { |
d44df0b0 | 31 | this.conn = new WebSocket(socketUrl + "/?sid=" + this.myid + "&page=" + variant.id); |
81bc1102 BA |
32 | } |
33 | this.conn.onclose = socketCloseListener; | |
d449ae46 | 34 | }, |
4ecf423b | 35 | methods: { |
582df349 BA |
36 | updateSettings: function(event) { |
37 | const propName = | |
38 | event.target.id.substr(3).replace(/^\w/, c => c.toLowerCase()) | |
39 | localStorage[propName] = ["highlight","coords"].includes(propName) | |
40 | ? event.target.checked | |
41 | : event.target.value; | |
42 | }, | |
a3ab5fdb BA |
43 | // Game is over, clear storage and put it in indexedDB |
44 | archiveGame: function() { | |
45 | // TODO: ... | |
46 | //clearStorage(); | |
47 | }, | |
d44df0b0 | 48 | setDisplay: function() { |
582df349 BA |
49 | // Prevent set display if there is a running game |
50 | if (!!localStorage["variant"]) | |
51 | return; | |
4608eed9 BA |
52 | if (!location.hash) |
53 | location.hash = "#room"; //default | |
582df349 BA |
54 | const hashParts = location.hash.substr(1).split("?"); |
55 | this.display = hashParts[0]; | |
97da8720 BA |
56 | if (hashParts[0] == "problems" && !!hashParts[1]) |
57 | { | |
58 | // Show a specific problem | |
59 | this.probId = hashParts[1].split("=")[1]; | |
60 | } | |
61 | else if (hashParts[0] == "game" && !!hashParts[1]) | |
62 | { | |
63 | // Show a specific game, maybe with a user ID | |
64 | const params = hashParts[1].split("&").filter(h => h.split("=")[1]); | |
65 | // TODO: Vue.set(...) probably required here | |
66 | this.gameRef = { | |
67 | id: params[0], | |
68 | uid: params[1], //may be undefined | |
69 | }; | |
70 | } | |
b6487fb9 | 71 | // Close menu on small screens: |
a5d56686 BA |
72 | let menuToggle = document.getElementById("drawer-control"); |
73 | if (!!menuToggle) | |
74 | menuToggle.checked = false; | |
e6dcb115 | 75 | }, |
4ecf423b | 76 | }, |
f5d3e4f5 | 77 | }); |