From a7ee5c24ab6b173cd0f60585364d97e96fa8e72c Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 28 Feb 2016 03:18:28 +0100 Subject: [PATCH] Overhauled leaderboard screen --- client/templates/leaderboard.jade | 179 ++++++++++++++++++-------- public/Sprites/images/bronzecrown.png | Bin 0 -> 18495 bytes public/Sprites/images/goldcrown.png | Bin 0 -> 3119 bytes public/Sprites/images/silvercrown.png | Bin 0 -> 3120 bytes server/index.coffee | 28 ++-- server/ratings.coffee | 43 +++++-- 6 files changed, 174 insertions(+), 76 deletions(-) create mode 100644 public/Sprites/images/bronzecrown.png create mode 100644 public/Sprites/images/goldcrown.png create mode 100644 public/Sprites/images/silvercrown.png diff --git a/client/templates/leaderboard.jade b/client/templates/leaderboard.jade index f7e981f..c17f0cd 100644 --- a/client/templates/leaderboard.jade +++ b/client/templates/leaderboard.jade @@ -1,58 +1,127 @@ -style - body { - font-family: Verdana; - font-size: 13px; - background: #eee; - } - td { - padding: 10px; - } - tr { - background-color: #d3d3d3; - } - table { - border: 2px solid gray; - border-radius: 10px; - text-align: center; - margin-left: auto; - margin-right: auto; - border-collapse: collapse; - border-style: hidden; - box-shadow: 0 0 0 1px #666; - } - tr:nth-child(even) { - background-color: #c3c3c3; - } - th{ - width: 200px; - border-bottom: 1px solid gray; - } - table tr:first-child th:first-child, - table.Info tr:first-child td:first-child { - border-top-left-radius: 10px; - } - table tr:first-child th:last-child, - table.Info tr:first-child td:last-child { - border-top-right-radius: 10px; - } +style + @font-face { + font-family: 'origicideregular'; + src: url('http://p-insurgence.com/fonts/Origicide-webfont.eot'); + src: url('http://p-insurgence.com/fonts/Origicide-webfont.eot?#iefix') format('embedded-opentype'), + url('http://p-insurgence.com/fonts/Origicide-webfont.woff') format('woff'), + url('http://p-insurgence.com/fonts/Origicide-webfont.ttf') format('truetype'), + url('http://p-insurgence.com/fonts/Origicide-webfont.svg#origicideregular') format('svg'); + font-weight: normal; + font-style: normal; + } + body { + font-family: 'Helvetica Neue', Helvetica, Arial; + font-size: 14px; + line-height: 20px; + font-weight: 400; + color: #3b3b3b; + -webkit-font-smoothing: antialiased; + font-smoothing: antialiased; + background: #2b2b2b; + } + .wrapper { + margin: 0 auto; + padding: 40px; + max-width: 800px; + } + table { + margin: 0 0 40px 0; + width: 100%; + box-shadow: 0 1px 3px rgba(0,0,0,0.2); + display: table; + } + @media screen and (max-width: 580px) { + .table { + display: block; + } + } + .row { + display: table-row; + background: #f6f6f6; + } + .row:nth-of-type(odd) { + background: #e9e9e9; + } + .row.header { + font-weight: 900; + color: #fff; + background: #ea6153; + } + .row.header.name { + font-family: 'origicideregular'; + font-size: large; + font-weight: 100; + } + .row.green { + background: #27ae60; + } + .row.blue { + background: #2980b9; + } + @media screen and (max-width: 580px) { + .row { + padding: 8px 0; + display: block; + } + } + .cell { + padding: 6px 12px; + display: table-cell; + width: 50px; + } + @media screen and (max-width: 580px) { + .cell { + padding: 2px 12px; + display: block; + } + } + a { + color: black; + text-decoration: none; + } + .crown { + vertical-align: bottom; + width: 25px; + float: right; + } - table tr:last-child td:first-child { - border-bottom-left-radius: 10px; - } - - table tr:last-child td:last-child { - border-bottom-right-radius: 10px; - } div - table - thead - tr - th Rank - th Player - th Score - tbody + .wrapper + .table + .row.header.name + .cell + .cell Insurgence + .cell OU + .cell + .cell + .row.header + .cell + | Rank + .cell + | Player + .cell + | Score + .cell + | Win Ratio + .cell + | Total Battles each member, i in players - tr - td #{i + 1} - td #{member.username} - td #{member.score} \ No newline at end of file + .row + .cell + | #{i + 1} + if i == 0 + img.crown(src="../Sprites/images/goldcrown.png") + else if i == 1 + img.crown(src="../Sprites/images/silvercrown.png") + else if i == 2 + img.crown(src="../Sprites/images/bronzecrown.png") + .cell + | #{member.username} + .cell + | #{member.score} + - var totalbattles = member.ratio.win + member.ratio.draw + member.ratio.lose + - var winratio = ((member.ratio.win / totalbattles) * 100).toFixed(2) + .cell + | #{winratio}% + .cell + | #{totalbattles} \ No newline at end of file diff --git a/public/Sprites/images/bronzecrown.png b/public/Sprites/images/bronzecrown.png new file mode 100644 index 0000000000000000000000000000000000000000..bddf4a8b45d1dc547fe51075bf80b4125047a6ef GIT binary patch literal 18495 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 VDuOO4k3WZPZEkOtZ@OvczW|&4cai`A literal 0 HcmV?d00001 diff --git a/public/Sprites/images/goldcrown.png b/public/Sprites/images/goldcrown.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f7c8bc2434add614a55d9b81bde6022001fbca GIT binary patch literal 3119 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 JPDHLkV1gE1!0Z43 literal 0 HcmV?d00001 diff --git a/public/Sprites/images/silvercrown.png b/public/Sprites/images/silvercrown.png new file mode 100644 index 0000000000000000000000000000000000000000..45f27d567b0fcdd0b83b9cffabaf8813bb7a6800 GIT binary patch literal 3120 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 - if err - res.json(500, err.message) - else - res.render('leaderboard.jade', players: results) + temparr = results.map((e) -> e.username) + ratioarr = [] + ratings.getRatios temparr, (err, ratios)-> + for username in temparr + index = temparr.indexOf(username) + results[index].ratio = ratios[username] + if err + res.json(500, err.message) + else + res.render('leaderboard.jade', players: results) app.get '/leaderboard/json', (req, res) -> page = req.param('page') perPage = req.param('per_page') ratings.listRatings page, perPage, (err, results) -> - if err - res.json(500, err.message) - else - res.json(players: results) + temparr = results.map((e) -> e.username) + ratioarr = [] + ratings.getRatios temparr, (err, ratios)-> + for username in temparr + index = temparr.indexOf(username) + results[index].ratio = ratios[username] + if err + res.json(500, err.message) + else + res.json(players: results) app.get '/pokeuse/json', (req, res) -> user= req.user diff --git a/server/ratings.coffee b/server/ratings.coffee index 41cd379..9556cf5 100644 --- a/server/ratings.coffee +++ b/server/ratings.coffee @@ -14,7 +14,7 @@ RATINGS_SUBKEYS = {} for attribute in RATINGS_ATTRIBUTES RATINGS_SUBKEYS[attribute] = [RATINGS_KEY, attribute].join(':') RATINGS_MAXKEY = "ratings:max" -RATINGS_PER_PAGE = 15 +RATINGS_PER_PAGE = 20 ALGORITHM_OPTIONS = systemConstant: 0.2 # Glicko2 tau @@ -203,6 +203,35 @@ updateMaxStreak = (id, next) => return next(err) if err updateMaxRatings(idArray, next) +@getRatio = (id, next) -> + id = id.toLowerCase() + multi = redis.multi() + for attribute, key of RATIOS_SUBKEYS + multi = multi.hget(key, id) + multi.exec (err, results) -> + return next(err) if err + hash = {} + for attribute, i in RATIOS_ATTRIBUTES + hash[attribute] = Number(results[i]) || 0 + return next(null, hash) + +@getRatios = (users, next) -> + multi = redis.multi() + for id in users + for attribute, key of RATIOS_SUBKEYS + multi = multi.hget(key, id) + multi.exec (err, results) -> + return next(err) if err + hasharray = {} + iter = 0 + for id, i in users + hash = {} + for attribute, j in RATIOS_ATTRIBUTES + hash[attribute] = Number(results[iter]) || 0 + iter++ + hasharray[id] = hash + next(null, hasharray) + @listRatings = (page = 1, perPage = RATINGS_PER_PAGE, next) -> if arguments.length == 2 && typeof perPage == 'function' [perPage, next] = [RATINGS_PER_PAGE, perPage] @@ -218,18 +247,6 @@ updateMaxStreak = (id, next) => array.push(username: username, score: score) next(null, array) -@getRatio = (id, next) -> - id = id.toLowerCase() - multi = redis.multi() - for attribute, key of RATIOS_SUBKEYS - multi = multi.hget(key, id) - multi.exec (err, results) -> - return next(err) if err - hash = {} - for attribute, i in RATIOS_ATTRIBUTES - hash[attribute] = Number(results[i]) || 0 - return next(null, hash) - @getStreak = (id, next) -> id = id.toLowerCase() multi = redis.multi()