diff --git a/app/templates/play/ladder/ladder-tab-view.jade b/app/templates/play/ladder/ladder-tab-view.jade index 3240c2609..784d296f9 100644 --- a/app/templates/play/ladder/ladder-tab-view.jade +++ b/app/templates/play/ladder/ladder-tab-view.jade @@ -1,16 +1,21 @@ +- var league = view.options.league .row - for team, teamIndex in teams + for team, teamIndex in view.teams div.column.col-md-6 div(id="histogram-display-#{team.name}", class="histogram-display", data-team-name=team.name) table.table.table-bordered.table-condensed.table-hover.ladder-table(data-team=team.id) + - var levelType = view.level.get('type', true) + - var topSessions = team.leaderboard.topPlayers.models; + - var showJustTop = team.leaderboard.inTopSessions() || me.get('anonymous'); + - if(!showJustTop && topSessions.length == 20) topSessions = topSessions.slice(0, 10); thead tr - th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2) + th(colspan=levelType == 'hero-ladder' ? 3 : 2) th(colspan=4, style="color: #{team.primaryColor}") span= team.displayName span.spl(data-i18n="ladder.leaderboard") Leaderboard tr - th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2) + th(colspan=levelType == 'hero-ladder' ? 3 : 2) th(data-i18n="general.score") Score th(data-i18n="general.name").name-col-cell Name th(data-i18n="general.when") When @@ -18,23 +23,20 @@ th.iconic-cell .glyphicon.glyphicon-eye-open - tbody - - var topSessions = team.leaderboard.topPlayers.models; - - var showJustTop = team.leaderboard.inTopSessions() || me.get('anonymous'); - - if(!showJustTop && topSessions.length == 20) topSessions = topSessions.slice(0, 10); + tbody for session, rank in topSessions - var myRow = session.get('creator') == me.id - var sessionStats = league ? (_.find(session.get('leagues') || [], {leagueID: league.id}) || {}).stats || {} : session.attributes; tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id) - td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)" title=capitalize(session.get('submittedCodeLanguage'))) - if level.get('type', true) == 'hero-ladder' + td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)" title=view.capitalize(session.get('submittedCodeLanguage'))) + if levelType == 'hero-ladder' td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)") td.rank-cell= rank + 1 td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100) td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous" td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '') td.fight-cell - a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : "")) + a(href="/play/level/#{view.level.get('slug') || view.level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : "")) span(data-i18n="ladder.fight") Fight! td.spectate-cell.iconic-cell .glyphicon.glyphicon-eye-open @@ -47,14 +49,14 @@ - var sessionStats = league ? (_.find(session.get('leagues'), {leagueID: league.id}) || {}).stats || {} : session.attributes; tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id) td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)") - if level.get('type', true) == 'hero-ladder' + if levelType == 'hero-ladder' td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)") td.rank-cell= session.rank td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100) td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous" td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '') td.fight-cell - a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : "")) + a(href="/play/level/#{view.level.get('slug') || view.level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : "")) span(data-i18n="ladder.fight") Fight! td.spectate-cell.iconic-cell .glyphicon.glyphicon-eye-open @@ -77,8 +79,8 @@ if !onGPlus button.btn.btn-sm.connect-google-plus(data-i18n="community.gplus") Google+ - if friends.length - for friend in friends + if view.friends + for friend in view.friends p.friend-entry img(src=friend.imageSource).img-thumbnail span= friend.creatorName + ' (' + friend.name + ')' @@ -87,7 +89,7 @@ span : span= friend.team br - a(href="/play/level/#{level.get('slug') || level.id}/?team=#{friend.otherTeam}&opponent=#{friend._id}" + (league ? "&league=" + league.id : "")) + a(href="/play/level/#{view.level.get('slug') || view.level.id}/?team=#{friend.otherTeam}&opponent=#{friend._id}" + (league ? "&league=" + league.id : "")) span(data-i18n="ladder.fight") Fight! else if onFacebook || onGPlus diff --git a/app/views/ladder/LadderTabView.coffee b/app/views/ladder/LadderTabView.coffee index 82feb23c0..06180c450 100644 --- a/app/views/ladder/LadderTabView.coffee +++ b/app/views/ladder/LadderTabView.coffee @@ -29,11 +29,13 @@ module.exports = class LadderTabView extends CocoView # 'auth:logged-in-with-facebook': 'onConnectedWithFacebook' # 'auth:logged-in-with-gplus': 'onConnectedWithGPlus' - constructor: (options, @level, @sessions) -> - super(options) + initialize: (options, @level, @sessions) -> @teams = teamDataFromLevel @level - @leaderboards = {} + @leaderboards = [] @refreshLadder() + + @capitalize = _.string.capitalize + # Trying not loading the FP/G+ stuff for now to see if anyone complains they were using it so we can have just two columns. #@socialNetworkRes = @supermodel.addSomethingResource('social_network_apis', 0) #@checkFriends() @@ -51,7 +53,8 @@ module.exports = class LadderTabView extends CocoView FB.getLoginStatus (response) => return if @destroyed @facebookStatus = response.status - @loadFacebookFriends() if @facebookStatus is 'connected' + @onFacebook = view.facebookStatus is 'connected' + @loadFacebookFriends() if @onFacebook @fbStatusRes.markLoaded() if application.gplusHandler.loggedIn is undefined @@ -102,6 +105,7 @@ module.exports = class LadderTabView extends CocoView friend.otherTeam = if friend.team is 'humans' then 'ogres' else 'humans' friend.imageSource = "http://graph.facebook.com/#{friend.facebookID}/picture" @facebookFriendSessions = result + @friends = @consolidateFriends() @render() # because the ladder tab renders before waiting for fb to finish # GOOGLE PLUS @@ -115,6 +119,7 @@ module.exports = class LadderTabView extends CocoView gplusSessionStateLoaded: -> if application.gplusHandler.loggedIn + @onGPlus = true #@addSomethingToLoad('gplus_friends') @gpFriendRes = @supermodel.addSomethingResource('gplus_friends', 0) @gpFriendRes.load() @@ -145,6 +150,7 @@ module.exports = class LadderTabView extends CocoView friend.otherTeam = if friend.team is 'humans' then 'ogres' else 'humans' friend.imageSource = friendsMap[friend.gplusID].image.url @gplusFriendSessions = result + @friends = @consolidateFriends() @render() # because the ladder tab renders before waiting for gplus to finish # LADDER LOADING @@ -161,6 +167,7 @@ module.exports = class LadderTabView extends CocoView oldLeaderboard.destroy() teamSession = _.find @sessions.models, (session) -> session.get('team') is team.id @leaderboards[team.id] = new LeaderboardData(@level, team.id, teamSession, @ladderLimit, @options.league) + team.leaderboard = @leaderboards[team.id] @leaderboardRes = @supermodel.addModelResource(@leaderboards[team.id], 'leaderboard', {cache: false}, 3) @leaderboardRes.load() @@ -179,22 +186,6 @@ module.exports = class LadderTabView extends CocoView ).then => @generateHistogram(histogramWrapper, histogramData, team.name.toLowerCase()) unless @destroyed - getRenderData: -> - ctx = super() - ctx.level = @level - ctx.link = "/play/level/#{@level.get('name')}" - ctx.teams = @teams - team.leaderboard = @leaderboards[team.id] for team in @teams - ctx.levelID = @levelID - ctx.friends = @consolidateFriends() - ctx.onFacebook = @facebookStatus is 'connected' - ctx.onGPlus = application.gplusHandler.loggedIn - ctx.capitalize = _.string.capitalize - ctx.league = @options.league - ctx._ = _ - ctx.moment = moment - ctx - generateHistogram: (histogramElement, histogramData, teamName) -> #renders twice, hack fix if $('#' + histogramElement.attr('id')).has('svg').length then return diff --git a/app/views/ladder/LadderView.coffee b/app/views/ladder/LadderView.coffee index 28076bc4a..b2bb6e9c6 100644 --- a/app/views/ladder/LadderView.coffee +++ b/app/views/ladder/LadderView.coffee @@ -43,6 +43,7 @@ module.exports = class LadderView extends RootView @level = @supermodel.loadModel(new Level(_id: @levelID)).model @level.once 'sync', => @levelDescription = marked(@level.get('description')) if @level.get('description') + @teams = teamDataFromLevel @level @sessions = @supermodel.loadCollection(new LevelSessionsCollection(@levelID), 'your_sessions', {cache: false}).model @winners = require('./tournament_results')[@levelID] @@ -70,10 +71,6 @@ module.exports = class LadderView extends RootView @course = @supermodel.loadModel(course).model @listenToOnce @course, 'sync', @render - onLoaded: -> - @teams = teamDataFromLevel @level - super() - afterRender: -> super() return unless @supermodel.finished()