+ sortedGames: function() {
+ // Show in order: it's my turn, running games, completed games
+ let minCreated = Number.MAX_SAFE_INTEGER;
+ let maxCreated = 0;
+ let remGames = this.games.filter(g => !this.deleted[g.id]);
+ remGames.forEach(g => {
+ if (g.created < minCreated) minCreated = g.created;
+ if (g.created > maxCreated) maxCreated = g.created;
+ g.priority = 0;
+ if (g.score == "*") {
+ g.priority++;
+ if (!!g.myColor) g.priority++;
+ if (!!g.myTurn) g.priority++;
+ }
+ });
+ const deltaCreated = maxCreated - minCreated;
+ return remGames.sort((g1, g2) => {
+ return (
+ g2.priority - g1.priority +
+ // Modulate with creation time (value in ]0,1[)
+ (g2.created - g1.created) / (deltaCreated + 1)
+ );
+ });
+ },
+ scoreClass: function(g) {
+ if (g.score == "*" || !g.myColor) return {};
+ // Ok it's my finished game: determine if I won, drew or lost.
+ let res = {};
+ switch (g.score) {
+ case "1-0":
+ res[g.myColor == "w" ? "won" : "lost"] = true;
+ break;
+ case "0-1":
+ res[g.myColor == "b" ? "won" : "lost"] = true;
+ break;
+ case "1/2":
+ res["draw"] = true;
+ break;
+ // default case: "?" for unknown finished
+ default:
+ res["unknown"] = true;
+ }
+ return res;
+ },