mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-13 22:49:51 -04:00
Fix style and supermodel based on #815.
Fix ladder_view and ladder_tab. Change error handling functions in CocoView.
This commit is contained in:
parent
65a32a262d
commit
7ae3bd5a60
9 changed files with 151 additions and 128 deletions
|
@ -5,5 +5,4 @@ module.exports = class ModelFiles extends CocoCollection
|
|||
super()
|
||||
url = model.constructor.prototype.urlRoot
|
||||
url += "/#{model.get('original') or model.id}/files"
|
||||
@url = url
|
||||
@name = model.name
|
||||
@url = url
|
|
@ -620,4 +620,8 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr
|
|||
user_schema: "User Schema"
|
||||
user_profile: "User Profile"
|
||||
level_session: "LevelSession"
|
||||
opponent_session: "OpponentSession"
|
||||
level_sessions_collection: 'LevelSessionsCollection'
|
||||
opponent_session: "OpponentSession"
|
||||
simulator: 'Simulator'
|
||||
level_document: 'Level Document'
|
||||
thang_document: 'Thang Document'
|
|
@ -1,5 +1,12 @@
|
|||
module.exports = class SuperModel extends Backbone.Model
|
||||
constructor: ->
|
||||
@num = 0
|
||||
@denom = 0
|
||||
@showing = false
|
||||
@progress = 0
|
||||
@resources = {}
|
||||
@rid = 0
|
||||
|
||||
@models = {}
|
||||
@collections = {}
|
||||
@schemas = {}
|
||||
|
@ -17,7 +24,7 @@ module.exports = class SuperModel extends Backbone.Model
|
|||
schema = model.schema()
|
||||
schemaRes = @addModelResource(schema, schema.urlRoot)
|
||||
@schemas[schema.urlRoot] = schema
|
||||
modelRes.addDependency(schemaRes.name)
|
||||
modelRes.addDependency(schemaRes)
|
||||
|
||||
modelRes.load()
|
||||
|
||||
|
@ -36,8 +43,9 @@ module.exports = class SuperModel extends Backbone.Model
|
|||
@removeEventsFromModel(model)
|
||||
|
||||
removeEventsFromModel: (model) ->
|
||||
model.off 'sync', @modelLoaded, @
|
||||
model.off 'error', @modelErrored, @
|
||||
# "Something" resource may have no model.
|
||||
model?.off 'sync', @modelLoaded, @
|
||||
model?.off 'error', @modelErrored, @
|
||||
|
||||
getModel: (ModelClass_or_url, id) ->
|
||||
return @getModelByURL(ModelClass_or_url) if _.isString(ModelClass_or_url)
|
||||
|
@ -86,45 +94,45 @@ module.exports = class SuperModel extends Backbone.Model
|
|||
collection
|
||||
|
||||
finished: ->
|
||||
return ResourceManager.progress is 1.0 or Object.keys(ResourceManager.resources).length is 0
|
||||
return @progress is 1.0 or Object.keys(@resources).length is 0
|
||||
|
||||
|
||||
addModelResource: (modelOrCollection, name, fetchOptions, value=1)->
|
||||
addModelResource: (modelOrCollection, name, fetchOptions, value=1) ->
|
||||
@checkName(name)
|
||||
res = new ModelResource(modelOrCollection, name, fetchOptions, value)
|
||||
@storeResource(name, res, value)
|
||||
@storeResource(res, value)
|
||||
return res
|
||||
|
||||
addRequestResource: (name, jqxhrOptions, value=1)->
|
||||
addRequestResource: (name, jqxhrOptions, value=1) ->
|
||||
@checkName(name)
|
||||
res = new RequestResource(name, jqxhrOptions, value)
|
||||
@storeResource(name, res, value)
|
||||
@storeResource(res, value)
|
||||
return res
|
||||
|
||||
addSomethingResource: (name, value=1)->
|
||||
addSomethingResource: (name, value=1) ->
|
||||
@checkName(name)
|
||||
res = new SomethingResource(name, value)
|
||||
@storeResource(name, res, value)
|
||||
@storeResource(res, value)
|
||||
return res
|
||||
|
||||
checkName: (name)->
|
||||
checkName: (name) ->
|
||||
if not name
|
||||
throw new Error('Resource name should not be empty.')
|
||||
if name in ResourceManager.resources
|
||||
throw new Error('Resource name has been used.')
|
||||
|
||||
storeResource: (name, resource, value)->
|
||||
console.debug 'gintau', 'storeResource', name
|
||||
ResourceManager.resources[name] = resource
|
||||
storeResource: (resource, value) ->
|
||||
@rid++
|
||||
resource.rid = @rid
|
||||
@resources[@rid] = resource
|
||||
@listenToOnce(resource, 'resource:loaded', @onResourceLoaded)
|
||||
@listenToOnce(resource, 'resource:failed', @onResourceFailed)
|
||||
ResourceManager.denom += value
|
||||
@denom += value
|
||||
|
||||
loadResources: ()->
|
||||
for name, res of ResourceManager.resources
|
||||
loadResources: ->
|
||||
for rid, res of @resources
|
||||
res.load()
|
||||
|
||||
onResourceLoaded: (r)=>
|
||||
onResourceLoaded: (r) ->
|
||||
console.debug 'gintau', 'supermodel-onResourceLoaded', r
|
||||
@modelLoaded(r.model)
|
||||
# Check if the model has references
|
||||
if r.constructor.name is 'ModelResource'
|
||||
|
@ -134,10 +142,11 @@ module.exports = class SuperModel extends Backbone.Model
|
|||
else
|
||||
@updateProgress(r)
|
||||
|
||||
onResourceFailed: (r)=>
|
||||
@modelErrored(r.model)
|
||||
onResourceFailed: (source) ->
|
||||
@trigger('resource:failed', source)
|
||||
@modelErrored(source.resource.model)
|
||||
|
||||
addModelRefencesToLoad: (model)->
|
||||
addModelRefencesToLoad: (model) ->
|
||||
schema = model.schema?()
|
||||
return unless schema
|
||||
|
||||
|
@ -151,61 +160,52 @@ module.exports = class SuperModel extends Backbone.Model
|
|||
continue if @models[refURL]
|
||||
|
||||
@models[refURL] = ref
|
||||
console.debug 'gintau', 'addModelRefencesToLoad', ref
|
||||
res = @addModelResource(ref, refURL)
|
||||
res.load()
|
||||
|
||||
updateProgress: (r)=>
|
||||
ResourceManager.num += r.value
|
||||
ResourceManager.progress = ResourceManager.num / ResourceManager.denom
|
||||
updateProgress: (r) =>
|
||||
@num += r.value
|
||||
@progress = @num / @denom
|
||||
|
||||
@trigger('superModel:updateProgress', ResourceManager.progress)
|
||||
@trigger 'loaded-all' if @finished()
|
||||
console.debug 'gintau', 'superModel-updateProgress', @progress
|
||||
@trigger('superModel:updateProgress', @progress)
|
||||
@trigger('loaded-all') if @finished()
|
||||
|
||||
getResource: (name)->
|
||||
return ResourceManager.resources[name]
|
||||
getResource: (rid)->
|
||||
return @resources[rid]
|
||||
|
||||
getProgress: ()-> return ResourceManager.progress
|
||||
|
||||
# Both SuperModel and Resource access this class.
|
||||
# Set resources as static so no need to load resources multiple times when more than one view is used.
|
||||
class ResourceManager
|
||||
@num = 0
|
||||
@denom = 0
|
||||
@showing = false
|
||||
@progress = 0
|
||||
@resources: {}
|
||||
getProgress: -> return @progress
|
||||
|
||||
|
||||
class Resource extends Backbone.Model
|
||||
constructor: (name, value=1)->
|
||||
constructor: (name, value=1) ->
|
||||
@name = name
|
||||
@value = value
|
||||
@dependencies = []
|
||||
@rid = -1 # Used for checking state and reloading
|
||||
@isLoading = false
|
||||
@isLoaded = false
|
||||
@model = null
|
||||
@loadDeferred = null
|
||||
@value = 1
|
||||
|
||||
addDependency: (name)->
|
||||
depRes = ResourceManager.resources[name]
|
||||
throw new Error('Resource not found') unless depRes
|
||||
return if (depRes.isLoaded or name is @name)
|
||||
@dependencies.push(name)
|
||||
addDependency: (depRes) ->
|
||||
return if depRes.isLoaded
|
||||
@dependencies.push(depRes)
|
||||
|
||||
markLoaded: ()->
|
||||
markLoaded: ->
|
||||
@trigger('resource:loaded', @) if not @isLoaded
|
||||
@isLoaded = true
|
||||
@isLoading = false
|
||||
|
||||
markFailed: ()->
|
||||
@trigger('resource:failed', @) if not @isLoaded
|
||||
markFailed: (error) ->
|
||||
@trigger('resource:failed', {resource: @, error: error}) if not @isLoaded
|
||||
@isLoaded = false
|
||||
@isLoading = false
|
||||
|
||||
load: ()->
|
||||
isReadyForLoad: ()-> return not (@isloaded and @isLoading)
|
||||
getModel: ()-> @model
|
||||
load: ->
|
||||
isReadyForLoad: -> return not (@isloaded and @isLoading)
|
||||
getModel: -> @model
|
||||
|
||||
class ModelResource extends Resource
|
||||
constructor: (modelOrCollection, name, fetchOptions, value)->
|
||||
|
@ -213,7 +213,7 @@ class ModelResource extends Resource
|
|||
@model = modelOrCollection
|
||||
@fetchOptions = fetchOptions
|
||||
|
||||
load: ()->
|
||||
load: ->
|
||||
return @loadDeferred.promise() if @isLoading or @isLoaded
|
||||
|
||||
@isLoading = true
|
||||
|
@ -224,17 +224,16 @@ class ModelResource extends Resource
|
|||
|
||||
return @loadDeferred.promise()
|
||||
|
||||
loadDependencies: ()->
|
||||
loadDependencies: ->
|
||||
promises = []
|
||||
|
||||
for resName in @dependencies
|
||||
dep = ResourceManager.resources[resName]
|
||||
for dep in @dependencies
|
||||
continue if not dep.isReadyForLoad()
|
||||
promises.push(dep.load())
|
||||
|
||||
return promises
|
||||
|
||||
onLoadDependenciesSuccess: ()=>
|
||||
onLoadDependenciesSuccess: =>
|
||||
@model.fetch(@fetchOptions)
|
||||
|
||||
@listenToOnce(@model, 'sync', ->
|
||||
|
@ -243,23 +242,23 @@ class ModelResource extends Resource
|
|||
)
|
||||
|
||||
@listenToOnce(@model, 'error', ->
|
||||
@markFailed()
|
||||
@markFailed('Failed to load resource.')
|
||||
@loadDeferred.reject(@)
|
||||
)
|
||||
|
||||
onLoadDependenciesFailed: ()=>
|
||||
@markFailed()
|
||||
onLoadDependenciesFailed: =>
|
||||
@markFailed('Failed to load dependencies.')
|
||||
@loadDeferred.reject(@)
|
||||
|
||||
|
||||
class RequestResource extends Resource
|
||||
constructor: (name, jqxhrOptions, value)->
|
||||
constructor: (name, jqxhrOptions, value) ->
|
||||
super(name, value)
|
||||
@model = $.ajax(jqxhrOptions)
|
||||
@jqxhrOptions = jqxhrOptions
|
||||
@loadDeferred = @model
|
||||
|
||||
load: ()->
|
||||
load: ->
|
||||
return @loadDeferred.promise() if @isLoading or @isLoaded
|
||||
|
||||
@isLoading = true
|
||||
|
@ -269,36 +268,36 @@ class RequestResource extends Resource
|
|||
|
||||
return @loadDeferred.promise()
|
||||
|
||||
loadDependencies: ()->
|
||||
loadDependencies: ->
|
||||
promises = []
|
||||
for depName in @dependecies
|
||||
dep = ResourceManager.resources[depName]
|
||||
|
||||
for dep in @dependecies
|
||||
continue if not dep.isReadyForLoad()
|
||||
promises.push(dep.load())
|
||||
|
||||
return promises
|
||||
|
||||
onLoadDependenciesSuccess: ()->
|
||||
onLoadDependenciesSuccess: ->
|
||||
@model = $.ajax(@jqxhrOptions)
|
||||
@model.done(()=> @markLoaded()).failed(()=> @markFailed())
|
||||
@model.done(=> @markLoaded()).failed((jqXHR, textStatus, errorThrown) => @markFailed(errorThrown))
|
||||
|
||||
onLoadDependenciesFailed: ()->
|
||||
@markFailed()
|
||||
onLoadDependenciesFailed: ->
|
||||
@markFailed('Failed to load dependencies.')
|
||||
|
||||
|
||||
class SomethingResource extends Resource
|
||||
constructor: (name, value)->
|
||||
constructor: (name, value) ->
|
||||
super(value)
|
||||
@name = name
|
||||
@loadDeferred = $.Deferred()
|
||||
|
||||
load: ()->
|
||||
load: ->
|
||||
return @loadDeferred.promise()
|
||||
|
||||
markLoaded: ()->
|
||||
markLoaded: ->
|
||||
@loadDeferred.resolve()
|
||||
super()
|
||||
|
||||
markFailed: ()->
|
||||
markFailed: (error) ->
|
||||
@loadDeferred.reject()
|
||||
super()
|
||||
super(error)
|
|
@ -58,7 +58,7 @@ module.exports = class EditorLevelView extends View
|
|||
|
||||
onLevelLoaded: ->
|
||||
@files = new DocumentFiles(@level)
|
||||
@supermodel.addModelResource(@files, @files.url).load()
|
||||
@supermodel.addModelResource(@files, 'level_document').load()
|
||||
|
||||
onAllLoaded: ->
|
||||
@level.unset('nextLevel') if _.isString(@level.get('nextLevel'))
|
||||
|
|
|
@ -56,11 +56,11 @@ module.exports = class ThangTypeEditView extends View
|
|||
@insertSubView(new ErrorView())
|
||||
)
|
||||
|
||||
thang_res = @supermodel.addModelResource(@thangType, 'thang_type')
|
||||
thang_schema_res = @supermodel.addModelResource(@thangType.schema(), 'thang_type_schema')
|
||||
thang_res.addDependency('thang_type_schema')
|
||||
thangRes = @supermodel.addModelResource(@thangType, 'thang_type')
|
||||
thangSchemaRes = @supermodel.addModelResource(@thangType.schema(), 'thang_type_schema')
|
||||
thangRes.addDependency(thangSchemaRes)
|
||||
|
||||
thang_res.load()
|
||||
thangRes.load()
|
||||
@listenToOnce(@thangType.schema(), 'sync', @onThangTypeSync)
|
||||
@listenToOnce(@thangType, 'sync', @onThangTypeSync)
|
||||
|
||||
|
@ -70,7 +70,7 @@ module.exports = class ThangTypeEditView extends View
|
|||
return unless @thangType.loaded and ThangType.hasSchema()
|
||||
@startsLoading = false
|
||||
@files = new DocumentFiles(@thangType)
|
||||
@supermodel.addModelResource(@files, @files.url).load()
|
||||
@supermodel.addModelResource(@files, 'thang_document').load()
|
||||
@render()
|
||||
|
||||
getRenderData: (context={}) ->
|
||||
|
|
|
@ -43,8 +43,9 @@ module.exports = class CocoView extends Backbone.View
|
|||
@updateProgressBar = _.debounce @updateProgressBar, 100
|
||||
# Backbone.Mediator handles subscription setup/teardown automatically
|
||||
|
||||
@listenToOnce(@supermodel, 'loaded-all', ()=>@onLoaded)
|
||||
@listenToOnce(@supermodel, 'loaded-all', @onLoaded)
|
||||
@listenToOnce(@supermodel, 'superModel:updateProgress', @updateProgress)
|
||||
@listenToOnce(@supermodel, 'resource:failed', @onResourceLoadFailed)
|
||||
|
||||
super options
|
||||
|
||||
|
@ -117,38 +118,21 @@ module.exports = class CocoView extends Backbone.View
|
|||
@$el.find('.loading-screen .progress-bar').css('width', prog)
|
||||
|
||||
onLoaded: ->
|
||||
#@render()
|
||||
console.debug 'gintau', 'CocoView-onLoaded()'
|
||||
@render()
|
||||
|
||||
# Error handling for loading
|
||||
|
||||
onResourceLoadFailed: (resource, jqxhr) ->
|
||||
for r, index in @loadProgress.resources
|
||||
break if r.resource is resource
|
||||
onResourceLoadFailed: (source) ->
|
||||
@$el.find('.loading-screen .errors').append(loadingErrorTemplate({
|
||||
status:jqxhr.status,
|
||||
name: r.name
|
||||
resourceIndex: index,
|
||||
responseText: jqxhr.responseText
|
||||
status: 'error',
|
||||
name: source.resource.name
|
||||
resourceIndex: source.resource.rid,
|
||||
responseText: source.error
|
||||
})).i18n()
|
||||
|
||||
onRetryResource: (e) ->
|
||||
r = @loadProgress.resources[$(e.target).data('resource-index')]
|
||||
r.resource.fetch()
|
||||
$(e.target).closest('.loading-error-alert').remove()
|
||||
|
||||
onRequestLoadFailed: (jqxhr) =>
|
||||
for r, index in @loadProgress.requests
|
||||
break if r.request is jqxhr
|
||||
@$el.find('.loading-screen .errors').append(loadingErrorTemplate({
|
||||
status:jqxhr.status,
|
||||
name: r.name
|
||||
requestIndex: index,
|
||||
responseText: jqxhr.responseText
|
||||
}))
|
||||
|
||||
onRetryRequest: (e) ->
|
||||
r = @loadProgress.requests[$(e.target).data('request-index')]
|
||||
@[r.retryFunc]?()
|
||||
res = @supermodel.getResource($(e.target).data('resource-index'))
|
||||
res.load()
|
||||
$(e.target).closest('.loading-error-alert').remove()
|
||||
|
||||
# Modals
|
||||
|
|
|
@ -32,7 +32,8 @@ module.exports = class LadderTabView extends CocoView
|
|||
|
||||
constructor: (options, @level, @sessions) ->
|
||||
super(options)
|
||||
@addSomethingToLoad("social_network_apis")
|
||||
@socialNetworkRes = @supermodel.addSomethingResource("social_network_apis")
|
||||
|
||||
@teams = teamDataFromLevel @level
|
||||
@leaderboards = {}
|
||||
@refreshLadder()
|
||||
|
@ -42,17 +43,22 @@ module.exports = class LadderTabView extends CocoView
|
|||
return if @checked or (not window.FB) or (not window.gapi)
|
||||
@checked = true
|
||||
|
||||
@addSomethingToLoad("facebook_status")
|
||||
# @addSomethingToLoad("facebook_status")
|
||||
|
||||
@fbStatusRes = @supermodel.addSomethingResource("facebook_status")
|
||||
@fbStatusRes.load()
|
||||
|
||||
FB.getLoginStatus (response) =>
|
||||
@facebookStatus = response.status
|
||||
@loadFacebookFriends() if @facebookStatus is 'connected'
|
||||
@somethingLoaded("facebook_status")
|
||||
@fbStatusRes.markLoaded()
|
||||
|
||||
if application.gplusHandler.loggedIn is undefined
|
||||
@listenToOnce(application.gplusHandler, 'checked-state', @gplusSessionStateLoaded)
|
||||
else
|
||||
@gplusSessionStateLoaded()
|
||||
@somethingLoaded("social_network_apis")
|
||||
|
||||
@socialNetworkRes.markLoaded()
|
||||
|
||||
# FACEBOOK
|
||||
|
||||
|
@ -63,23 +69,39 @@ module.exports = class LadderTabView extends CocoView
|
|||
onConnectedWithFacebook: -> location.reload() if @connecting
|
||||
|
||||
loadFacebookFriends: ->
|
||||
@addSomethingToLoad("facebook_friends")
|
||||
# @addSomethingToLoad("facebook_friends")
|
||||
|
||||
@fbFriendRes = @supermodel.addSomethingResource("facebook_friends")
|
||||
@fbFriendRes.load()
|
||||
|
||||
FB.api '/me/friends', @onFacebookFriendsLoaded
|
||||
|
||||
onFacebookFriendsLoaded: (response) =>
|
||||
@facebookData = response.data
|
||||
@loadFacebookFriendSessions()
|
||||
@somethingLoaded("facebook_friends")
|
||||
@fbFriendRes.markLoaded()
|
||||
|
||||
loadFacebookFriendSessions: ->
|
||||
levelFrag = "#{@level.get('original')}.#{@level.get('version').major}"
|
||||
url = "/db/level/#{levelFrag}/leaderboard_facebook_friends"
|
||||
|
||||
###
|
||||
jqxhr = $.ajax url, {
|
||||
data: { friendIDs: (f.id for f in @facebookData) }
|
||||
method: 'POST'
|
||||
success: @onFacebookFriendSessionsLoaded
|
||||
}
|
||||
|
||||
@addRequestToLoad(jqxhr, 'facebook_friend_sessions', 'loadFacebookFriendSessions')
|
||||
###
|
||||
|
||||
@fbFriendSessionRes = @supermodel.addRequestResource('facebook_friend_sessions', {
|
||||
url: url
|
||||
data: { friendIDs: (f.id for f in @facebookData) }
|
||||
method: 'POST'
|
||||
success: @onFacebookFriendSessionsLoaded
|
||||
})
|
||||
@fbFriendSessionRes.load()
|
||||
|
||||
onFacebookFriendSessionsLoaded: (result) =>
|
||||
friendsMap = {}
|
||||
|
@ -101,23 +123,34 @@ module.exports = class LadderTabView extends CocoView
|
|||
|
||||
gplusSessionStateLoaded: ->
|
||||
if application.gplusHandler.loggedIn
|
||||
@addSomethingToLoad("gplus_friends")
|
||||
#@addSomethingToLoad("gplus_friends")
|
||||
@gpFriendRes = @supermodel.addSomethingResource("gplus_friends")
|
||||
@gpFriendRes.load()
|
||||
application.gplusHandler.loadFriends @gplusFriendsLoaded
|
||||
|
||||
gplusFriendsLoaded: (friends) =>
|
||||
@gplusData = friends.items
|
||||
@loadGPlusFriendSessions()
|
||||
@somethingLoaded("gplus_friends")
|
||||
@gpFriendRes.markLoaded()
|
||||
|
||||
loadGPlusFriendSessions: ->
|
||||
levelFrag = "#{@level.get('original')}.#{@level.get('version').major}"
|
||||
url = "/db/level/#{levelFrag}/leaderboard_gplus_friends"
|
||||
###
|
||||
jqxhr = $.ajax url, {
|
||||
data: { friendIDs: (f.id for f in @gplusData) }
|
||||
method: 'POST'
|
||||
success: @onGPlusFriendSessionsLoaded
|
||||
}
|
||||
@addRequestToLoad(jqxhr, 'gplus_friend_sessions', 'loadGPlusFriendSessions')
|
||||
###
|
||||
@gpFriendSessionRes = @supermodel.addRequestResource('gplus_friend_sessions', {
|
||||
url: url
|
||||
data: { friendIDs: (f.id for f in @gplusData) }
|
||||
method: 'POST'
|
||||
success: @onGPlusFriendSessionsLoaded
|
||||
})
|
||||
@gpFriendSessionRes.load()
|
||||
|
||||
onGPlusFriendSessionsLoaded: (result) =>
|
||||
friendsMap = {}
|
||||
|
@ -135,8 +168,9 @@ module.exports = class LadderTabView extends CocoView
|
|||
@leaderboards[team.id]?.destroy()
|
||||
teamSession = _.find @sessions.models, (session) -> session.get('team') is team.id
|
||||
@leaderboards[team.id] = new LeaderboardData(@level, team.id, teamSession)
|
||||
|
||||
@addResourceToLoad @leaderboards[team.id], 'leaderboard', 3
|
||||
# @addResourceToLoad @leaderboards[team.id], 'leaderboard', 3
|
||||
@leaderboardRes = @supermodel.addModelResource(@leaderboards[team.id], 'leaderboard', 3)
|
||||
@leaderboardRes.load()
|
||||
|
||||
render: ->
|
||||
super()
|
||||
|
|
|
@ -37,11 +37,13 @@ module.exports = class LadderView extends RootView
|
|||
constructor: (options, @levelID) ->
|
||||
super(options)
|
||||
@level = new Level(_id:@levelID)
|
||||
@level.fetch()
|
||||
levelRes = @supermodel.addModelResource(@level, 'level')
|
||||
levelRes.load()
|
||||
|
||||
@sessions = new LevelSessionsCollection(levelID)
|
||||
@sessions.fetch({})
|
||||
@addResourceToLoad(@sessions, 'your_sessions')
|
||||
@addResourceToLoad(@level, 'level')
|
||||
sessionRes = @supermodel.addModelResource(@sessions, 'level_sessions_collection')
|
||||
sessionRes.load()
|
||||
|
||||
@simulator = new Simulator()
|
||||
@listenTo(@simulator, 'statusUpdate', @updateSimulationStatus)
|
||||
@teams = []
|
||||
|
@ -62,7 +64,8 @@ module.exports = class LadderView extends RootView
|
|||
|
||||
afterRender: ->
|
||||
super()
|
||||
return if @loading()
|
||||
console.debug 'gintau', 'ladder_view_finished', @supermodel.finished()
|
||||
return unless @supermodel.finished()
|
||||
@insertSubView(@ladderTab = new LadderTabView({}, @level, @sessions))
|
||||
@insertSubView(@myMatchesTab = new MyMatchesTabView({}, @level, @sessions))
|
||||
@refreshInterval = setInterval(@fetchSessionsAndRefreshViews.bind(@), 10 * 1000)
|
||||
|
@ -71,7 +74,7 @@ module.exports = class LadderView extends RootView
|
|||
@showPlayModal(hash) if @sessions.loaded
|
||||
|
||||
fetchSessionsAndRefreshViews: ->
|
||||
return if @destroyed or application.userIsIdle or @$el.find('#simulate.active').length or (new Date() - 2000 < @lastRefreshTime) or @loading()
|
||||
return if @destroyed or application.userIsIdle or @$el.find('#simulate.active').length or (new Date() - 2000 < @lastRefreshTime) or not @supermodel.finished()
|
||||
@sessions.fetch({"success": @refreshViews})
|
||||
|
||||
refreshViews: =>
|
||||
|
|
|
@ -23,7 +23,7 @@ module.exports = class LevelLoadingView extends View
|
|||
@updateProgressBar()
|
||||
|
||||
updateProgressBar: ->
|
||||
@$el.find('.progress-bar').css('width', (100 * @progress) + '%')
|
||||
@$el?.find('.progress-bar').css('width', (100 * @progress) + '%')
|
||||
|
||||
showReady: ->
|
||||
ready = $.i18n.t('play_level.loading_ready', defaultValue: 'Ready!')
|
||||
|
|
Loading…
Reference in a new issue