Implement rank column in simulators leaderboard
This commit is contained in:
parent
f762d95ab8
commit
a74f89c30c
3 changed files with 29 additions and 11 deletions
|
@ -61,6 +61,7 @@ block content
|
||||||
|
|
||||||
table.table.table-bordered.table-condensed.table-hover
|
table.table.table-bordered.table-condensed.table-hover
|
||||||
tr
|
tr
|
||||||
|
th
|
||||||
th(data-i18n="general.player").name-col-cell Player
|
th(data-i18n="general.player").name-col-cell Player
|
||||||
th(data-i18n="ladder.games_simulated") Games simulated
|
th(data-i18n="ladder.games_simulated") Games simulated
|
||||||
th(data-i18n="ladder.games_played") Games played
|
th(data-i18n="ladder.games_played") Games played
|
||||||
|
@ -68,9 +69,10 @@ block content
|
||||||
- var topSimulators = simulatorsLeaderboardData.topSimulators.models;
|
- var topSimulators = simulatorsLeaderboardData.topSimulators.models;
|
||||||
- var showJustTop = simulatorsLeaderboardData.inTopSimulators() || me.get('anonymous');
|
- var showJustTop = simulatorsLeaderboardData.inTopSimulators() || me.get('anonymous');
|
||||||
- if(!showJustTop) topSimulators = topSimulators.slice(0, 10);
|
- if(!showJustTop) topSimulators = topSimulators.slice(0, 10);
|
||||||
for user in topSimulators
|
for user, rank in topSimulators
|
||||||
- var myRow = user.id == me.id
|
- var myRow = user.id == me.id
|
||||||
tr(class=myRow ? "success" : "")
|
tr(class=myRow ? "success" : "")
|
||||||
|
td.simulator-leaderboard-cell= rank + 1
|
||||||
td.name-col-cell= user.get('name') || "Anonymous"
|
td.name-col-cell= user.get('name') || "Anonymous"
|
||||||
td.simulator-leaderboard-cell= user.get('simulatedBy')
|
td.simulator-leaderboard-cell= user.get('simulatedBy')
|
||||||
td.simulator-leaderboard-cell= user.get('simulatedFor')
|
td.simulator-leaderboard-cell= user.get('simulatedFor')
|
||||||
|
@ -78,12 +80,13 @@ block content
|
||||||
|
|
||||||
if !showJustTop && simulatorsLeaderboardData.nearbySimulators().length
|
if !showJustTop && simulatorsLeaderboardData.nearbySimulators().length
|
||||||
tr(class="active")
|
tr(class="active")
|
||||||
td(colspan=4).ellipsis-row ...
|
td(colspan=5).ellipsis-row ...
|
||||||
for user in simulatorsLeaderboardData.nearbySimulators()
|
for user in simulatorsLeaderboardData.nearbySimulators()
|
||||||
- var myRow = user.id == me.id
|
- var myRow = user.id == me.id
|
||||||
- var ratio = user.get('simulatedBy') / user.get('simulatedFor');
|
- var ratio = user.get('simulatedBy') / user.get('simulatedFor');
|
||||||
tr(class=myRow ? "success" : "")
|
tr(class=myRow ? "success" : "")
|
||||||
|
td.simulator-leaderboard-cell= user.rank
|
||||||
td.name-col-cell= user.get('name') || "Anonymous"
|
td.name-col-cell= user.get('name') || "Anonymous"
|
||||||
td.simulator-leaderboard-cell= user.get('simulatedBy')
|
td.simulator-leaderboard-cell= user.get('simulatedBy')
|
||||||
td.simulator-leaderboard-cell= user.get('simulatedFor')
|
td.simulator-leaderboard-cell= user.get('simulatedFor')
|
||||||
td.simulator-leaderboard-cell= _.isNaN(ratio) || ratio == Infinity ? '' : ratio.toFixed(1)
|
td.simulator-leaderboard-cell= _.isNaN(ratio) || ratio == Infinity ? '' : ratio.toFixed(1)
|
||||||
|
|
|
@ -183,6 +183,8 @@ class SimulatorsLeaderboardData extends CocoClass
|
||||||
if score
|
if score
|
||||||
@playersBelow = new SimulatorsLeaderboardCollection({order:-1, scoreOffset: score, limit: 4})
|
@playersBelow = new SimulatorsLeaderboardCollection({order:-1, scoreOffset: score, limit: 4})
|
||||||
promises.push @playersBelow.fetch()
|
promises.push @playersBelow.fetch()
|
||||||
|
success = (@myRank) =>
|
||||||
|
promises.push $.ajax "/db/user/me/simulator_leaderboard_rank?scoreOffset=#{score}", {success}
|
||||||
@promise = $.when(promises...)
|
@promise = $.when(promises...)
|
||||||
@promise.then @onLoad
|
@promise.then @onLoad
|
||||||
@promise.fail @onFail
|
@promise.fail @onFail
|
||||||
|
@ -207,6 +209,9 @@ class SimulatorsLeaderboardData extends CocoClass
|
||||||
l = l.concat(above)
|
l = l.concat(above)
|
||||||
l.push @me
|
l.push @me
|
||||||
l = l.concat(@playersBelow.models) if @playersBelow
|
l = l.concat(@playersBelow.models) if @playersBelow
|
||||||
|
if @myRank
|
||||||
|
startRank = @myRank - 4
|
||||||
|
user.rank = startRank + i for user, i in l
|
||||||
l
|
l
|
||||||
|
|
||||||
allResources: ->
|
allResources: ->
|
||||||
|
|
|
@ -155,6 +155,22 @@ UserHandler = class UserHandler extends Handler
|
||||||
res.end()
|
res.end()
|
||||||
|
|
||||||
getSimulatorLeaderboard: (req, res) ->
|
getSimulatorLeaderboard: (req, res) ->
|
||||||
|
queryParameters = @getSimulatorLeaderboardQueryParameters(req)
|
||||||
|
leaderboardQuery = User.find(queryParameters.query).select("name simulatedBy simulatedFor").sort({"simulatedBy":queryParameters.sortOrder}).limit(queryParameters.limit)
|
||||||
|
leaderboardQuery.exec (err, otherUsers) ->
|
||||||
|
otherUsers = _.reject otherUsers, _id: req.user._id if req.query.scoreOffset isnt -1
|
||||||
|
otherUsers ?= []
|
||||||
|
res.send(otherUsers)
|
||||||
|
res.end()
|
||||||
|
|
||||||
|
getMySimulatorLeaderboardRank: (req, res) ->
|
||||||
|
req.query.order = 1
|
||||||
|
queryParameters = @getSimulatorLeaderboardQueryParameters(req)
|
||||||
|
User.count queryParameters.query, (err, count) =>
|
||||||
|
return @sendDatabaseError(res, err) if err
|
||||||
|
res.send JSON.stringify(count + 1)
|
||||||
|
|
||||||
|
getSimulatorLeaderboardQueryParameters: (req) ->
|
||||||
@validateSimulateLeaderboardRequestParameters(req)
|
@validateSimulateLeaderboardRequestParameters(req)
|
||||||
|
|
||||||
query = {}
|
query = {}
|
||||||
|
@ -167,14 +183,7 @@ UserHandler = class UserHandler extends Handler
|
||||||
sortOrder = 1 if req.query.order is 1
|
sortOrder = 1 if req.query.order is 1
|
||||||
else
|
else
|
||||||
query.simulatedBy = {"$exists": true}
|
query.simulatedBy = {"$exists": true}
|
||||||
|
{query: query, sortOrder: sortOrder, limit: limit}
|
||||||
leaderboardQuery = User.find(query).select("name simulatedBy simulatedFor").sort({"simulatedBy":sortOrder}).limit(limit)
|
|
||||||
leaderboardQuery.exec (err, otherUsers) ->
|
|
||||||
otherUsers = _.reject otherUsers, _id: req.user._id if req.query.scoreOffset isnt -1
|
|
||||||
otherUsers ?= []
|
|
||||||
res.send(otherUsers)
|
|
||||||
res.end()
|
|
||||||
|
|
||||||
|
|
||||||
validateSimulateLeaderboardRequestParameters: (req) ->
|
validateSimulateLeaderboardRequestParameters: (req) ->
|
||||||
req.query.order = parseInt(req.query.order) ? -1
|
req.query.order = parseInt(req.query.order) ? -1
|
||||||
|
@ -202,6 +211,7 @@ UserHandler = class UserHandler extends Handler
|
||||||
return @getLevelSessions(req, res, args[0]) if args[1] is 'level.sessions'
|
return @getLevelSessions(req, res, args[0]) if args[1] is 'level.sessions'
|
||||||
return @getCandidates(req, res) if args[1] is 'candidates'
|
return @getCandidates(req, res) if args[1] is 'candidates'
|
||||||
return @getSimulatorLeaderboard(req, res, args[0]) if args[1] is 'simulatorLeaderboard'
|
return @getSimulatorLeaderboard(req, res, args[0]) if args[1] is 'simulatorLeaderboard'
|
||||||
|
return @getMySimulatorLeaderboardRank(req, res, args[0]) if args[1] is 'simulator_leaderboard_rank'
|
||||||
return @sendNotFoundError(res)
|
return @sendNotFoundError(res)
|
||||||
super(arguments...)
|
super(arguments...)
|
||||||
|
|
||||||
|
|
Reference in a new issue