Some code cleaning + clarifying (TODO: work on variables names)
[vchess.git] / public / javascripts / index.js
index a05ad47..29e48f7 100644 (file)
@@ -1,24 +1,10 @@
-const url = socketUrl;
-// random enough (TODO: function)
-const sid = (Date.now().toString(36) + Math.random().toString(36).substr(2, 7)).toUpperCase();
-const conn = new WebSocket(url + "/?sid=" + sid + "&page=index");
-
-conn.onmessage = msg => {
-       const data = JSON.parse(msg.data);
-       if (data.code == "counts")
-               //V.counts = data.counts;
-               Vue.set(V, "counts", data.counts);
-       else if (data.code == "increase")
-               V.counts[data.vname]++;
-       else if (data.code == "decrease")
-               V.counts[data.vname]--;
-}
-
-let V = new Vue({
+// Javascript for index page: mostly counters updating
+new Vue({
        el: "#indexPage",
        data: {
                counts: {},
                curPrefix: "",
+               conn: null,
        },
        computed: {
                sortedCounts: function () {
@@ -37,6 +23,27 @@ let V = new Vue({
                        });
                },
        },
+       created: function() {
+               const url = socketUrl;
+               const sid = getRandString();
+               this.conn = new WebSocket(url + "/?sid=" + sid + "&page=index");
+               const socketMessageListener = msg => {
+                       const data = JSON.parse(msg.data);
+                       if (data.code == "counts")
+                               this.counts = data.counts;
+                       else if (data.code == "increase")
+                               this.counts[data.vname]++;
+                       else if (data.code == "decrease")
+                               this.counts[data.vname]--;
+               };
+               const socketCloseListener = () => {
+                       this.conn = new WebSocket(url + "/?sid=" + sid + "&page=index");
+                       this.conn.addEventListener('message', socketMessageListener);
+                       this.conn.addEventListener('close', socketCloseListener);
+               };
+               this.conn.onmessage = socketMessageListener;
+               this.conn.onclose = socketCloseListener;
+       },
        mounted: function() {
                // Handle key stroke
                document.onkeydown = event => {
@@ -63,5 +70,19 @@ let V = new Vue({
                        }
                        // ...ignore everything else
                };
+               // Show welcome dialog box if "first visit"
+               const visited = getCookie("visited");
+               if (!visited || visited !== "1")
+                       document.getElementById("modal-b4welcome").checked = true;
+       },
+       methods: {
+               showWelcomeMsg: function() {
+                       document.getElementById("modal-b4welcome").checked = false;
+                       document.getElementById("modal-welcome").checked = true;
+               },
+               markAsVisited: function() {
+                       setCookie('visited', '1');
+                       document.getElementById('modal-welcome').checked = false;
+               },
        },
 });