1 import { ajax
} from "./utils/ajax";
2 import { getRandString
} from "./utils/alea";
4 // Global store: see https://medium.com/fullstackio/managing-state-in-vue-js-23a0352b1c87
13 socketCloseListener: null,
15 ajax("/variants", "GET", res
=> {
16 this.state
.variants
= res
.variantArray
.sort(
17 (v1
,v2
) => v1
.name
.localeCompare(v2
.name
));
19 let mysid
= localStorage
.getItem("mysid");
20 // Assign mysid only once (until next time user clear browser data)
22 mysid
= getRandString();
23 localStorage
.setItem("mysid", mysid
);
25 // Quick user setup using local storage:
27 id: localStorage
.getItem("myid") || 0,
28 name: localStorage
.getItem("myname") || "", //"" for "anonymous"
29 email: "", //unknown yet
30 notify: false, //email notifications
33 // Slow verification through the server:
34 // NOTE: still superficial identity usurpation possible, but difficult.
35 ajax("/whoami", "GET", res
=> {
36 this.state
.user
.id
= res
.id
;
37 const storedId
= localStorage
.getItem("myid");
38 if (res
.id
> 0 && !storedId
)
39 // User cleared localStorage
40 localStorage
.setItem("myid", res
.id
);
41 else if (res
.id
== 0 && !!storedId
)
42 // User cleared cookie
43 localStorage
.removeItem("myid");
44 this.state
.user
.name
= res
.name
;
45 const storedName
= localStorage
.getItem("myname");
46 if (!!res
.name
&& !storedName
)
47 // User cleared localStorage
48 localStorage
.setItem("myname", res
.name
);
49 else if (!res
.name
&& !!storedName
)
50 // User cleared cookie
51 localStorage
.removeItem("myname");
52 this.state
.user
.email
= res
.email
;
53 this.state
.user
.notify
= res
.notify
;
55 // Settings initialized with values from localStorage
56 this.state
.settings
= {
57 bcolor: localStorage
.getItem("bcolor") || "lichess",
58 sound: parseInt(localStorage
.getItem("sound")) || 1,
59 hints: localStorage
.getItem("hints") == "true",
60 highlight: localStorage
.getItem("highlight") == "true"
62 const supportedLangs
= ["en", "es", "fr"];
63 const navLanguage
= navigator
.language
.substr(0,2);
65 localStorage
["lang"] ||
66 (supportedLangs
.includes(navLanguage
) ? navLanguage : "en");
67 this.setTranslations();
69 updateSetting: function(propName
, value
) {
70 this.state
.settings
[propName
] = value
;
71 localStorage
.setItem(propName
, value
);
73 setTranslations: async
function() {
74 // Import translations from "./translations/$lang.js"
75 const tModule
= await
import("@/translations/" + this.state
.lang
+ ".js");
76 this.state
.tr
= tModule
.translations
;
79 this.state
.lang
= lang
;
80 this.setTranslations();