+ // Helpers:
+ filterChallenges: function(type) {
+ return this.challenges.filter(c => c.type == type);
+ },
+ filterGames: function(type) {
+ return this.games.filter(g => g.type == type);
+ },
+ classifyObject: function(o) { //challenge or game
+ // Heuristic: should work for most cases... (TODO)
+ return (o.timeControl.indexOf('d') === -1 ? "live" : "corr");
+ },
+ showGame: function(g) {
+ // NOTE: we are an observer, since only games I don't play are shown here
+ // ==> Moves sent by connected remote player(s) if live game
+ let url = "/game/" + g.id;
+ if (g.type == "live")
+ url += "?rid=" + g.rid;
+ this.$router.push(url);
+ },
+ setDisplay: function(letter, type, e) {
+ this[letter + "display"] = type;
+ e.target.classList.add("active");
+ if (!!e.target.previousElementSibling)
+ e.target.previousElementSibling.classList.remove("active");
+ else
+ e.target.nextElementSibling.classList.remove("active");
+ },
+ getVname: function(vid) {
+ const variant = this.st.variants.find(v => v.id == vid);
+ // this.st.variants might be uninitialized (variant == null)
+ return (!!variant ? variant.name : "");
+ },
+ processChat: function(chat) {
+ // When received on server, this will trigger a "notifyRoom"
+ this.st.conn.send(JSON.stringify({code:"newchat", chat: chat}));
+ },
+ sendSomethingTo: function(to, code, obj, warnDisconnected) {
+ const doSend = (code, obj, sid) => {
+ this.st.conn.send(JSON.stringify(Object.assign(
+ {code: code},
+ obj,
+ {target: sid}
+ )));
+ };
+ if (!to || (!to.sid && !to.name))
+ {
+ // Open challenge: send to all connected players (me excepted)
+ Object.keys(this.people).forEach(sid => {
+ if (sid != this.st.user.sid)
+ doSend(code, obj, sid);
+ });
+ }
+ else
+ {
+ let targetSid = "";
+ if (!!to.sid)
+ targetSid = to.sid;
+ else
+ {
+ if (to.name == this.st.user.name)
+ return alert(this.st.tr["Cannot challenge self"]);
+ // Challenge with targeted players
+ targetSid =
+ Object.keys(this.people).find(sid => this.people[sid].name == to.name);
+ if (!targetSid)
+ {
+ if (!!warnDisconnected)
+ alert(this.st.tr["Warning: target is not connected"]);
+ return false;
+ }
+ }
+ doSend(code, obj, targetSid);
+ }
+ return true;
+ },
+ // Messaging center: