Set up course-ladder level handling

* LadderView displays course info, different style for course-ladder levels
* LadderView hides simulate tab for course-ladder levels
* HeroVictoryModal links to LadderView for course-ladder levels
* CourseDetails page links to LadderView for course-ladder levels
* Enable course instances for league simulation
This commit is contained in:
Scott Erickson 2015-11-18 14:02:45 -08:00
parent 890d528d80
commit 7a6c42b89f
8 changed files with 80 additions and 19 deletions
app
server/queues/scoring

View file

@ -5,6 +5,22 @@
margin: -14px -12px 20px -12px
padding-bottom: 30px
border-bottom: 1px solid #888
#course-header
background-color: black
font-size: 24px
padding: 6px 4px 8px
font-weight: bold
#course-details-link
position: absolute
background-color: white
padding: 2px 5px
a
color: black
#course-name
color: white
#level-column
padding-top: 14px
@ -13,6 +29,12 @@
img
margin-top: -14px
width: 100%
#course-h1
color: black
font-size: 72px
text-transform: capitalize
margin-top: 0
h1
text-align: center

View file

@ -273,7 +273,7 @@ mixin levels-tab
tr
td
if lastLevelCompleted || adminMode
button.btn.btn-success.btn-play-level(data-level-slug=level.slug, data-i18n="home.play")
button.btn.btn-success.btn-play-level(data-level-slug=level.slug, data-i18n="home.play", data-level-id=levelID)
td
if userLevelStateMap[me.id]
div= userLevelStateMap[me.id][levelID]

View file

@ -3,14 +3,28 @@ block content
- var base = "/images/pages/play/ladder/prize_";
div#ladder-top
if leagueType == 'course'
#course-header
#course-details-link
a(href="/courses/"+view.course.id+"/"+view.league.id)
span.glyphicon.glyphicon-arrow-left
span.spl Levels
.text-center
span#course-name
span= view.course.get('name')
span.spl - Arena
div#level-column
if leagueType === 'course'
h1#course-h1= (level.get('name') || '').toUpperCase()
if levelDescription
div!= levelDescription
else
h1= level.get('name')
if league
if leagueType === 'clan'
h1.league-header
a(href="/#{leagueType == 'clan' ? 'clans' : leagueType}/#{league.id}")= league.get('name')
span.spl(data-i18n="ladder.league") League
@ -132,9 +146,10 @@ block content
span= team.displayName
div.column.col-md-2
.spectate-button-container
a(href="/play/spectate/#{level.get('slug')}" + (league ? "?league=" + league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
span(data-i18n="play.spectate") Spectate
if leagueType !== 'course'
.spectate-button-container
a(href="/play/spectate/#{level.get('slug')}" + (league ? "?league=" + league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
span(data-i18n="play.spectate") Spectate
ul.nav.nav-pills
li.active
@ -142,8 +157,9 @@ block content
if !me.get('anonymous')
li
a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches
li
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
if leagueType !== 'course'
li
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
if level.get('name') == 'Greed'
li
a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes

View file

@ -218,11 +218,18 @@ module.exports = class CourseDetailsView extends RootView
onClickPlayLevel: (e) ->
levelSlug = $(e.target).data('level-slug')
Backbone.Mediator.publish 'router:navigate', {
route: @getLevelURL levelSlug
viewClass: 'views/play/level/PlayLevelView'
viewArgs: [{courseID: @courseID, courseInstanceID: @courseInstanceID}, levelSlug]
}
levelID = $(e.target).data('level-id')
level = @campaign.get('levels')[levelID]
if level.type is 'course-ladder'
Backbone.Mediator.publish 'router:navigate', {
route: '/play/ladder/' + levelSlug + '/course/' + @courseInstance.id
}
else
Backbone.Mediator.publish 'router:navigate', {
route: @getLevelURL levelSlug
viewClass: 'views/play/level/PlayLevelView'
viewArgs: [{courseID: @courseID, courseInstanceID: @courseInstanceID}, levelSlug]
}
getLevelURL: (levelSlug) ->
"/play/level/#{levelSlug}?course=#{@courseID}&course-instance=#{@courseInstanceID}"

View file

@ -81,6 +81,7 @@ module.exports = class LadderPlayModal extends ModalView
# PART 4: Render
finishRendering: ->
return if @destroyed
@checkTutorialLevelExists (exists) =>
@tutorialLevelExists = exists
@render()

View file

@ -13,7 +13,8 @@ LadderPlayModal = require './LadderPlayModal'
CocoClass = require 'core/CocoClass'
Clan = require 'models/Clan'
#CourseInstance = require 'models/CourseInstance'
CourseInstance = require 'models/CourseInstance'
Course = require 'models/Course'
HIGHEST_SCORE = 1000000
@ -44,13 +45,20 @@ module.exports = class LadderView extends RootView
@sessions = @supermodel.loadCollection(new LevelSessionsCollection(@levelID), 'your_sessions', {cache: false}).model
@teams = []
@loadLeague()
@course = new Course()
loadLeague: ->
@leagueID = @leagueType = null unless @leagueType in ['clan'] #, 'course']
@leagueID = @leagueType = null unless @leagueType in ['clan', 'course']
return unless @leagueID
modelClass = if @leagueType is 'clan' then Clan else null# else CourseInstance
resourceString = if @leagueType is 'clan' then 'clans.clan' else null# else 'courses.course'
modelClass = if @leagueType is 'clan' then Clan else CourseInstance
resourceString = if @leagueType is 'clan' then 'clans.clan' else 'courses.course'
@league = @supermodel.loadModel(new modelClass(_id: @leagueID), resourceString).model
if @leagueType is 'course'
@listenToOnce @league, 'sync', @onCourseInstanceLoaded
onCourseInstanceLoaded: (courseInstance) ->
course = new Course({_id: courseInstance.get('courseID')})
@course = @supermodel.loadModel(course, 'courses.course').model
onLoaded: ->
@teams = teamDataFromLevel @level

View file

@ -441,6 +441,13 @@ module.exports = class HeroVictoryModal extends ModalView
viewClass = require 'views/courses/CourseDetailsView'
viewArgs.push @courseID
viewArgs.push @courseInstanceID if @courseInstanceID
else if @level.get('type', true) is 'course-ladder'
leagueID = @getQueryVariable 'league'
link = "/play/ladder/"+@level.get('slug')+"/course/"+leagueID
Backbone.Mediator.publish 'router:navigate', {
route: link
}
return
else
viewClass = require 'views/play/CampaignView'
viewArgs = [options, @getNextLevelCampaign()]

View file

@ -67,7 +67,7 @@ updateSessionToSubmit = (transpiledCode, user, sessionToUpdate, callback) ->
# Reset all league stats as well, and enter the session into any leagues the user is currently part of (not retroactive when joining new leagues)
leagueIDs = user.get('clans') or []
#leagueIDs = leagueIDs.concat user.get('courseInstances') or []
leagueIDs = leagueIDs.concat user.get('courseInstances') or []
leagueIDs = (leagueID + '' for leagueID in leagueIDs) # Make sure to save them as strings.
newLeagues = []
for leagueID in leagueIDs