mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-25 00:28:31 -05:00
Merge pull request #794 from gintau/feature/loading-views
Refactor CocoView
This commit is contained in:
commit
5c6a0bc252
2 changed files with 116 additions and 105 deletions
160
.gitignore
vendored
160
.gitignore
vendored
|
@ -1,80 +1,80 @@
|
|||
### If you add something here, copy it to the end of .npmignore, too. ###
|
||||
|
||||
# Python
|
||||
*.pyc
|
||||
*.pyo
|
||||
|
||||
# OS X
|
||||
.DS_Store
|
||||
Icon?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
|
||||
# Windows
|
||||
Thumbs.db
|
||||
|
||||
# Emacs
|
||||
*.*~
|
||||
*.#
|
||||
.#*
|
||||
*#
|
||||
|
||||
# Vim
|
||||
.*.sw[a-z]
|
||||
*.un~i
|
||||
|
||||
# Sublime
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
|
||||
# NPM packages folder.
|
||||
node_modules/
|
||||
bower_components/
|
||||
|
||||
# Some other random stuff
|
||||
always-ignore extensions
|
||||
*.diff
|
||||
*.err
|
||||
*.orig
|
||||
*.log
|
||||
*.rej
|
||||
*.vi
|
||||
*.sass-cache
|
||||
|
||||
# OS or Editor folders
|
||||
.cache
|
||||
.project
|
||||
.settings
|
||||
.tmproj
|
||||
.idea
|
||||
nbproject
|
||||
|
||||
# Brunch folder for temporary files.
|
||||
tmp/
|
||||
|
||||
# Brunch output
|
||||
public/
|
||||
|
||||
# Redis?
|
||||
dump.rdb
|
||||
|
||||
# Mongo
|
||||
mongo/
|
||||
|
||||
# Karma coverage
|
||||
coverage/
|
||||
|
||||
# Floo
|
||||
.floo
|
||||
FLOOBITS_README.md
|
||||
|
||||
# mongodb
|
||||
db/
|
||||
bin/node/
|
||||
bin/mongo/
|
||||
|
||||
# windows
|
||||
/SCOCODE.bat
|
||||
|
||||
### If you add something here, copy it to the end of .npmignore, too. ###
|
||||
-### If you add something here, copy it to the end of .npmignore, too. ###
|
||||
-
|
||||
-# Python
|
||||
-*.pyc
|
||||
-*.pyo
|
||||
-
|
||||
-# OS X
|
||||
-.DS_Store
|
||||
-Icon?
|
||||
-._*
|
||||
-.Spotlight-V100
|
||||
-.Trashes
|
||||
-
|
||||
-# Windows
|
||||
-Thumbs.db
|
||||
-
|
||||
-# Emacs
|
||||
-*.*~
|
||||
-*.#
|
||||
-.#*
|
||||
-*#
|
||||
-
|
||||
-# Vim
|
||||
-.*.sw[a-z]
|
||||
-*.un~i
|
||||
-
|
||||
-# Sublime
|
||||
-*.sublime-project
|
||||
-*.sublime-workspace
|
||||
-
|
||||
-# NPM packages folder.
|
||||
-node_modules/
|
||||
-bower_components/
|
||||
-
|
||||
-# Some other random stuff
|
||||
-always-ignore extensions
|
||||
-*.diff
|
||||
-*.err
|
||||
-*.orig
|
||||
-*.log
|
||||
-*.rej
|
||||
-*.vi
|
||||
-*.sass-cache
|
||||
-
|
||||
-# OS or Editor folders
|
||||
-.cache
|
||||
-.project
|
||||
-.settings
|
||||
-.tmproj
|
||||
-.idea
|
||||
-nbproject
|
||||
-
|
||||
-# Brunch folder for temporary files.
|
||||
-tmp/
|
||||
-
|
||||
-# Brunch output
|
||||
-public/
|
||||
-
|
||||
-# Redis?
|
||||
-dump.rdb
|
||||
-
|
||||
-# Mongo
|
||||
-mongo/
|
||||
-
|
||||
-# Karma coverage
|
||||
-coverage/
|
||||
-
|
||||
-# Floo
|
||||
-.floo
|
||||
-FLOOBITS_README.md
|
||||
-
|
||||
-# mongodb
|
||||
-db/
|
||||
-bin/node/
|
||||
-bin/mongo/
|
||||
-
|
||||
-# windows
|
||||
-/SCOCODE.bat
|
||||
-
|
||||
-### If you add something here, copy it to the end of .npmignore, too. ###
|
|
@ -11,7 +11,6 @@ makeScopeName = -> "view-scope-#{classCount++}"
|
|||
doNothing = ->
|
||||
|
||||
module.exports = class CocoView extends Backbone.View
|
||||
startsLoading: false
|
||||
cache: false # signals to the router to keep this view around
|
||||
template: -> ''
|
||||
|
||||
|
@ -89,7 +88,7 @@ module.exports = class CocoView extends Backbone.View
|
|||
return @template if _.isString(@template)
|
||||
@$el.html @template(@getRenderData())
|
||||
@afterRender()
|
||||
@showLoading() if @startsLoading or @loading() # TODO: Remove startsLoading entirely
|
||||
@showLoading() if @loading()
|
||||
@$el.i18n()
|
||||
@
|
||||
|
||||
|
@ -108,25 +107,45 @@ module.exports = class CocoView extends Backbone.View
|
|||
# Resource and request loading management for any given view
|
||||
|
||||
addResourceToLoad: (modelOrCollection, name, value=1) ->
|
||||
@loadProgress.resources.push {resource:modelOrCollection, value:value, name:name}
|
||||
@listenToOnce modelOrCollection, 'sync', @updateProgress
|
||||
res = {resource:modelOrCollection, value:value, name:name, loaded: modelOrCollection.loaded}
|
||||
|
||||
@loadProgress.resources.push res
|
||||
@loadProgress.denom += value
|
||||
|
||||
@listenToOnce modelOrCollection, 'sync', ()=>
|
||||
# Sprite builder only works after rendering, if callback creates sprite, we need to update progress first.
|
||||
res.loaded = true
|
||||
@updateProgress(res)
|
||||
|
||||
@listenTo modelOrCollection, 'error', @onResourceLoadFailed
|
||||
@updateProgress()
|
||||
@updateProgress(res)
|
||||
|
||||
addRequestToLoad: (jqxhr, name, retryFunc, value=1) ->
|
||||
@loadProgress.requests.push {request:jqxhr, value:value, name: name, retryFunc: retryFunc}
|
||||
jqxhr.done @updateProgress
|
||||
jqxhr.fail @onRequestLoadFailed
|
||||
res = {request:jqxhr, value:value, name: name, retryFunc: retryFunc, loaded:false}
|
||||
|
||||
@loadProgress.requests.push res
|
||||
@loadProgress.denom += value
|
||||
|
||||
jqxhr.done ()=>
|
||||
res.loaded = true
|
||||
@updateProgress(res)
|
||||
|
||||
jqxhr.fail ()=>
|
||||
@onRequestLoadFailed(jqxhr)
|
||||
|
||||
addSomethingToLoad: (name, value=1) ->
|
||||
@loadProgress.somethings.push {loaded: false, name: name, value: value}
|
||||
@updateProgress()
|
||||
res = {name: name, value: value, loaded: false}
|
||||
|
||||
@loadProgress.somethings.push res
|
||||
@loadProgress.denom += value
|
||||
|
||||
@updateProgress(res)
|
||||
|
||||
somethingLoaded: (name) ->
|
||||
r = _.find @loadProgress.somethings, {name: name}
|
||||
return console.error 'Could not find something called', name if not r
|
||||
r.loaded = true
|
||||
@updateProgress(name)
|
||||
@updateProgress(r)
|
||||
|
||||
loading: ->
|
||||
return false if @loaded
|
||||
|
@ -138,27 +157,19 @@ module.exports = class CocoView extends Backbone.View
|
|||
return true if not r.loaded
|
||||
return false
|
||||
|
||||
updateProgress: =>
|
||||
console.debug 'Loaded', r.name if arguments[0] and r = _.find @loadProgress.resources, {resource:arguments[0]}
|
||||
console.debug 'Loaded', r.name if arguments[2] and r = _.find @loadProgress.requests, {request:arguments[2]}
|
||||
console.debug 'Loaded', r.name if arguments[0] and r = _.find @loadProgress.somethings, {name:arguments[0]}
|
||||
updateProgress: (r)=>
|
||||
console.debug 'Loaded', r.name, r.loaded
|
||||
|
||||
denom = 0
|
||||
denom += r.value for r in @loadProgress.resources
|
||||
denom += r.value for r in @loadProgress.requests
|
||||
denom += r.value for r in @loadProgress.somethings
|
||||
denom = @loadProgress.denom
|
||||
@loadProgress.num += r.value if r.loaded
|
||||
num = @loadProgress.num
|
||||
num += r.value for r in @loadProgress.resources when r.resource.loaded
|
||||
num += r.value for r in @loadProgress.requests when r.request.status
|
||||
num += r.value for r in @loadProgress.somethings when r.loaded
|
||||
#console.log 'update progress', @, num, denom, arguments
|
||||
|
||||
progress = if denom then num / denom else 0
|
||||
# sometimes the denominator isn't known from the outset, so make sure the overall progress only goes up
|
||||
@loadProgress.progress = progress if progress > @loadProgress.progress
|
||||
@updateProgressBar()
|
||||
if num is denom and not @loaded
|
||||
@loaded = true
|
||||
|
||||
if num is denom
|
||||
@onLoaded()
|
||||
|
||||
updateProgressBar: =>
|
||||
|
|
Loading…
Reference in a new issue