X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FGameList.vue;h=549e2a1ddd018033b7debb18b326c3681b4d10db;hb=0234201fb338fc239d6f613c677fa932c7c3697c;hp=0a8bd8ce78faadb6466f52a576de49f764ff9887;hpb=aae89b49a846b2c101d74db7dff9151392d6db34;p=vchess.git diff --git a/client/src/components/GameList.vue b/client/src/components/GameList.vue index 0a8bd8ce..549e2a1d 100644 --- a/client/src/components/GameList.vue +++ b/client/src/components/GameList.vue @@ -9,9 +9,9 @@ div th {{ st.tr["Result"] }} tbody tr( - v-for="g in sortedGames" + v-for="g in sortedGames()" @click="$emit('show-game',g)" - :class="{'my-turn': g.myTurn}" + :class="{'my-turn': !!g.myTurn}" ) td {{ g.vname }} td {{ player_s(g) }} @@ -52,55 +52,6 @@ export default { } }); }, - computed: { - sortedGames: function() { - // Show in order: games where it's my turn, my running games, my games, other games - let minCreated = Number.MAX_SAFE_INTEGER; - let maxCreated = 0; - const isMyTurn = (g, myColor) => { - const rem = g.movesCount % 2; - return ( - (rem == 0 && myColor == "w") || - (rem == 1 && myColor == "b") - ); - }; - let augmentedGames = this.games - .filter(g => !this.deleted[g.id]) - .map(g => { - let priority = 0; - let myColor = undefined; - if ( - g.players.some( - p => p.uid == this.st.user.id || p.sid == this.st.user.sid - ) - ) { - priority++; - myColor = - g.players[0].uid == this.st.user.id || - g.players[0].sid == this.st.user.sid - ? "w" - : "b"; - if (g.score == "*") { - priority++; - if (isMyTurn(g, myColor)) priority++; - } - } - if (g.created < minCreated) minCreated = g.created; - if (g.created > maxCreated) maxCreated = g.created; - return Object.assign({}, g, { - priority: priority, - myTurn: priority == 3, - myColor: myColor - }); - }); - const deltaCreated = maxCreated - minCreated; - return augmentedGames.sort((g1, g2) => { - return ( - g2.priority - g1.priority + (g2.created - g1.created) / deltaCreated - ); - }); - } - }, methods: { player_s: function(g) { if (this.showBoth) @@ -111,11 +62,33 @@ export default { ); if ( this.st.user.sid == g.players[0].sid || - this.st.user.id == g.players[0].uid + this.st.user.id == g.players[0].id ) return g.players[1].name || "@nonymous"; return g.players[0].name || "@nonymous"; }, + 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 + (g2.created - g1.created) / deltaCreated + ); + }); + }, scoreClass: function(g) { if (g.score == "*" || !g.myColor) return {}; // Ok it's my finished game: determine if I won, drew or lost. @@ -140,8 +113,7 @@ export default { if ( // My game ? game.players.some(p => - p.sid == this.st.user.sid || - p.uid == this.st.user.id + p.sid == this.st.user.sid || p.id == this.st.user.id ) ) { const message = @@ -150,7 +122,7 @@ export default { : "Abort and remove game?"; if (confirm(this.st.tr[message])) { const afterDelete = () => { - if (game.score == "*") this.$emit("abort", game); + if (game.score == "*") this.$emit("abortgame", game); this.$set(this.deleted, game.id, true); }; if (game.type == "live") @@ -158,7 +130,7 @@ export default { GameStorage.remove(game.id, afterDelete); else { const mySide = - game.players[0].uid == this.st.user.id + game.players[0].id == this.st.user.id ? "White" : "Black"; game["deletedBy" + mySide] = true; @@ -168,10 +140,12 @@ export default { "/games", "PUT", { - gid: game.id, - newObj: { removeFlag: true } - }, - afterDelete + data: { + gid: game.id, + newObj: { removeFlag: true } + }, + success: afterDelete + } ); } }