diff --git a/app/styles/play/ladder/team.sass b/app/styles/play/ladder/team.sass index 03121d576..f4de7584d 100644 --- a/app/styles/play/ladder/team.sass +++ b/app/styles/play/ladder/team.sass @@ -1,4 +1,7 @@ #ladder-team-view + #rank-button + margin-top: 15px + #competitors-column .well font-size: 16px font-weight: bold diff --git a/app/templates/play/ladder/team.jade b/app/templates/play/ladder/team.jade index 58f448e4d..902144e32 100644 --- a/app/templates/play/ladder/team.jade +++ b/app/templates/play/ladder/team.jade @@ -8,11 +8,25 @@ block content a(href="/play/ladder/#{levelID}")= level.get('name') li.active= teamName - + p + | In this level, you play against everyone who has ever written strategies for the opposing forces. + | Choose from the suggested players on the right, playing as many and as long as you like, + | and when you're ready to test your grand strategy against the whole ladder, return and click the rank button. + + p + | After your first submission, your code will also continuously run against other players as they rank themselves. div#columns.row div#matches-column.col-md-6 - h3 Ranked Games + h3.pull-left Ranked Games + button.btn.btn-warning.pull-right#rank-button + span.unavailable.hidden No New Code to Rank + span.rank.hidden Rank My Game! + span.ranking.hidden Submitting... + span.ranked.hidden Submitted for Ranking + span.failed.hidden Failed to Rank + + hr.clearfix(style="clear: both") if matches.length table.table.table-bordered.table-condensed diff --git a/app/views/play/ladder/team_view.coffee b/app/views/play/ladder/team_view.coffee index 2c59d9716..66de5f04b 100644 --- a/app/views/play/ladder/team_view.coffee +++ b/app/views/play/ladder/team_view.coffee @@ -3,11 +3,14 @@ Level = require 'models/Level' LevelSession = require 'models/LevelSession' LeaderboardCollection = require 'collections/LeaderboardCollection' -module.exports = class LadderView extends RootView +module.exports = class LadderTeamView extends RootView id: 'ladder-team-view' template: require 'templates/play/ladder/team' startsLoading: true + events: + 'click #rank-button': 'rankSession' + # PART 1: Loading Level/Session constructor: (options, @levelID, @team) -> @@ -68,6 +71,7 @@ module.exports = class LadderView extends RootView ctx.teamName = _.string.titleize @team ctx.teamID = @team ctx.challengers = if not @startsLoading then @getChallengers() else {} + ctx.readyToRank = @readyToRank() convertMatch = (match) -> opponent = match.opponent[0] @@ -83,9 +87,17 @@ module.exports = class LadderView extends RootView } ctx.matches = (convertMatch(match) for match in @session.get('matches') or []) - console.log 'context is', ctx ctx - + + afterRender: -> + super() + @setRankingButtonText(if @readyToRank() then 'rank' else 'unavailable') + + readyToRank: -> + c1 = @session.get('code') + c2 = @session.get('submittedCode') + c1 and not _.isEqual(c1, c2) + getChallengers: -> # make an object of challengers to everything needed to link to them challengers = {} @@ -108,6 +120,7 @@ module.exports = class LadderView extends RootView addChallenger: (info, challengers, title) -> # check for duplicates first + return unless info for key, value of challengers return if value.sessionID is info.sessionID challengers[title] = info @@ -130,7 +143,26 @@ module.exports = class LadderView extends RootView opponentName: opponent.userName or 'Anoner' opponentID: opponent.userID } + + rankSession: -> + return unless @readyToRank() + @setRankingButtonText('ranking') + success = => @setRankingButtonText('ranked') + failure = => @setRankingButtonText('failed') + + $.ajax '/queue/scoring', { + type: 'POST' + data: { session: @session.id } + success: success + failure: failure + } + + setRankingButtonText: (spanClass) -> + rankButton = $('#rank-button') + rankButton.find('span').addClass('hidden') + rankButton.find(".#{spanClass}").removeClass('hidden') + rankButton.toggleClass 'disabled', spanClass isnt 'rank' class ChallengersData constructor: (@level, @team, @session) ->