mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-27 14:33:59 -04:00
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
|
||||
tr
|
||||
th
|
||||
th(data-i18n="general.player").name-col-cell Player
|
||||
th(data-i18n="ladder.games_simulated") Games simulated
|
||||
th(data-i18n="ladder.games_played") Games played
|
||||
|
@ -68,9 +69,10 @@ block content
|
|||
- var topSimulators = simulatorsLeaderboardData.topSimulators.models;
|
||||
- var showJustTop = simulatorsLeaderboardData.inTopSimulators() || me.get('anonymous');
|
||||
- if(!showJustTop) topSimulators = topSimulators.slice(0, 10);
|
||||
for user in topSimulators
|
||||
for user, rank in topSimulators
|
||||
- var myRow = user.id == me.id
|
||||
tr(class=myRow ? "success" : "")
|
||||
td.simulator-leaderboard-cell= rank + 1
|
||||
td.name-col-cell= user.get('name') || "Anonymous"
|
||||
td.simulator-leaderboard-cell= user.get('simulatedBy')
|
||||
td.simulator-leaderboard-cell= user.get('simulatedFor')
|
||||
|
@ -78,12 +80,13 @@ block content
|
|||
|
||||
if !showJustTop && simulatorsLeaderboardData.nearbySimulators().length
|
||||
tr(class="active")
|
||||
td(colspan=4).ellipsis-row ...
|
||||
td(colspan=5).ellipsis-row ...
|
||||
for user in simulatorsLeaderboardData.nearbySimulators()
|
||||
- var myRow = user.id == me.id
|
||||
- var ratio = user.get('simulatedBy') / user.get('simulatedFor');
|
||||
tr(class=myRow ? "success" : "")
|
||||
td.simulator-leaderboard-cell= user.rank
|
||||
td.name-col-cell= user.get('name') || "Anonymous"
|
||||
td.simulator-leaderboard-cell= user.get('simulatedBy')
|
||||
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
|
||||
@playersBelow = new SimulatorsLeaderboardCollection({order:-1, scoreOffset: score, limit: 4})
|
||||
promises.push @playersBelow.fetch()
|
||||
success = (@myRank) =>
|
||||
promises.push $.ajax "/db/user/me/simulator_leaderboard_rank?scoreOffset=#{score}", {success}
|
||||
@promise = $.when(promises...)
|
||||
@promise.then @onLoad
|
||||
@promise.fail @onFail
|
||||
|
@ -207,6 +209,9 @@ class SimulatorsLeaderboardData extends CocoClass
|
|||
l = l.concat(above)
|
||||
l.push @me
|
||||
l = l.concat(@playersBelow.models) if @playersBelow
|
||||
if @myRank
|
||||
startRank = @myRank - 4
|
||||
user.rank = startRank + i for user, i in l
|
||||
l
|
||||
|
||||
allResources: ->
|
||||
|
|
|
@ -155,6 +155,22 @@ UserHandler = class UserHandler extends Handler
|
|||
res.end()
|
||||
|
||||
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)
|
||||
|
||||
query = {}
|
||||
|
@ -167,14 +183,7 @@ UserHandler = class UserHandler extends Handler
|
|||
sortOrder = 1 if req.query.order is 1
|
||||
else
|
||||
query.simulatedBy = {"$exists": true}
|
||||
|
||||
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()
|
||||
|
||||
{query: query, sortOrder: sortOrder, limit: limit}
|
||||
|
||||
validateSimulateLeaderboardRequestParameters: (req) ->
|
||||
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 @getCandidates(req, res) if args[1] is 'candidates'
|
||||
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)
|
||||
super(arguments...)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue