--- /dev/null
+// Javascript for index page: mostly counters updating
+new Vue({
+ el: "#VueElement",
+ data: {
+ counts: {},
+ curPrefix: "",
+ conn: null,
+ display: "variants",
+ },
+ computed: {
+ sortedCounts: function () {
+ const capitalizedPrefix = this.curPrefix.replace(/^\w/, c => c.toUpperCase());
+ const variantsCounts = variantArray
+ .filter( v => {
+ return v.name.startsWith(capitalizedPrefix);
+ })
+ .map( v => {
+ return {
+ name: v.name,
+ desc: v.description,
+ count: this.counts[v.name] || 0,
+ };
+ });
+ return variantsCounts.sort((a,b) => {
+ if (a.count != b.count)
+ return b.count - a.count;
+ // Else, alphabetic ordering
+ return a.name.localeCompare(b.name);
+ });
+ },
+ },
+ created: function() {
+ this.setDisplay();
+ window.onhashchange = this.setDisplay;
+
+ 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.vid]++;
+ else if (data.code == "decrease")
+ this.counts[data.vid]--;
+ };
+ 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;
+
+ // TODO: AJAX call get corr games (all variants)
+ // si dernier lastMove sur serveur n'est pas le mien et nextColor == moi, alors background orange
+ // ==> background orange si à moi de jouer par corr (sur main index)
+ // (helper: static fonction "GetNextCol()" dans base_rules.js)
+
+ },
+ methods: {
+ setDisplay: function() {
+ if (!location.hash)
+ location.hash = "#variants"; //default
+ this.display = location.hash.substr(1);
+ },
+
+ },
+});