+ },
+ loadMore: function(type, cb) {
+ if (type == "corr") {
+ ajax(
+ "/completedgames",
+ "GET",
+ {
+ credentials: true,
+ data: { cursor: this.cursor["corr"] },
+ success: (res) => {
+ const L = res.games.length;
+ if (L > 0) {
+ this.cursor["corr"] = res.games[L - 1].created;
+ let moreGames = res.games;
+ moreGames.forEach(g => g.type = "corr");
+ this.decorate(moreGames);
+ this.corrGames = this.corrGames.concat(moreGames);
+ } else this.hasMore["corr"] = false;
+ if (!!cb) cb();
+ }
+ }
+ );
+ } else if (type == "live") {
+ GameStorage.getNext(this.cursor["live"], localGames => {
+ const L = localGames.length;
+ if (L > 0) {
+ // Add "-1" because IDBKeyRange.upperBound seems to include boundary
+ this.cursor["live"] = localGames[L - 1].created - 1;
+ localGames.forEach(g => g.type = "live");
+ this.decorate(localGames);
+ this.liveGames = this.liveGames.concat(localGames);
+ } else this.hasMore["live"] = false;
+ if (!!cb) cb();
+ });
+ }