Don't show page until fully loaded
This commit is contained in:
@@ -9,6 +9,9 @@
|
||||
|
||||
module.exports = class BaseModel extends Backbone.Model
|
||||
|
||||
@_loadingQueue = []
|
||||
@_isDraining = false
|
||||
|
||||
constructor: (attributes={}, options={})->
|
||||
options.logEvents ?= true
|
||||
super attributes, options
|
||||
@@ -72,8 +75,7 @@ module.exports = class BaseModel extends Backbone.Model
|
||||
if @fileCache?
|
||||
@loading = @fileCache.loading.then =>
|
||||
if @fileCache.hasFile url
|
||||
@onLoadSucceeded @fileCache.getFile(url), 'success', {url:url}
|
||||
return w.resolve(true)
|
||||
return @_addToLoadingQueue @fileCache.getFile(url), 'success', {url:url}
|
||||
else
|
||||
@loading = loadFromServer()
|
||||
else
|
||||
@@ -98,3 +100,30 @@ module.exports = class BaseModel extends Backbone.Model
|
||||
|
||||
toString: ->
|
||||
return "#{@constructor.name}.#{@cid}"
|
||||
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_addToLoadingQueue: (text, status, xhr)->
|
||||
deferred = w.defer()
|
||||
|
||||
BaseModel._loadingQueue.push resolve:deferred.resolve, func:(=> @onLoadSucceeded text, status, xhr)
|
||||
@_drainLoadingQueue()
|
||||
return deferred.promise
|
||||
|
||||
_drainLoadingQueue: ->
|
||||
return if @_isDraining
|
||||
@_isDraining = true
|
||||
|
||||
drainDelay = 50
|
||||
drain = =>
|
||||
toLoad = BaseModel._loadingQueue.shift()
|
||||
if not toLoad?
|
||||
@_isDraining = false
|
||||
else
|
||||
toLoad.func()
|
||||
toLoad.resolve(true)
|
||||
|
||||
_.delay drain, drainDelay
|
||||
|
||||
_.delay drain, drainDelay
|
||||
|
||||
|
||||
@@ -29,8 +29,6 @@ module.exports = class Mod extends BaseModel
|
||||
@_modVersions = []
|
||||
@_tutorials = []
|
||||
|
||||
@once c.event.sync, => @_verifyActiveModVersion()
|
||||
|
||||
# Class Methods ##################################################################################
|
||||
|
||||
@Version: Version =
|
||||
@@ -144,6 +142,9 @@ module.exports = class Mod extends BaseModel
|
||||
for modVersion in @_modVersions
|
||||
callback modVersion
|
||||
|
||||
getAllModVersions: ->
|
||||
return @_modVersions[..]
|
||||
|
||||
getModVersion: (version)->
|
||||
return null if version is Mod.Version.None
|
||||
return @_modVersions[0] if version is Mod.Version.Latest
|
||||
@@ -202,6 +203,8 @@ module.exports = class Mod extends BaseModel
|
||||
@_parser ?= new ModParser model:this
|
||||
@_parser.parse text
|
||||
|
||||
@_verifyActiveModVersion()
|
||||
|
||||
return null # prevent calling `set`
|
||||
|
||||
url: ->
|
||||
|
||||
@@ -6,9 +6,10 @@
|
||||
#
|
||||
|
||||
BaseModel = require '../base_model'
|
||||
SimpleInventory = require '../crafting/simple_inventory'
|
||||
Mod = require './mod'
|
||||
ModVersionParser = require '../parsing/mod_version_parser'
|
||||
Recipe = require './recipe'
|
||||
SimpleInventory = require '../crafting/simple_inventory'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
@@ -165,12 +166,18 @@ module.exports = class ModPack extends BaseModel
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_onModVersionLoaded: (modVersion)->
|
||||
working = true
|
||||
@eachMod (mod)->
|
||||
mod.eachModVersion (modVersion)->
|
||||
working = working and (modVersion.isUnloaded or modVersion.isLoading)
|
||||
mods = @getAllMods()
|
||||
return true unless mods.length > 0
|
||||
|
||||
return if working
|
||||
for mod in mods
|
||||
modVersions = mod.getAllModVersions()
|
||||
return true unless modVersions.length > 0
|
||||
continue if mod.activeVersion is Mod.Version.None
|
||||
|
||||
activeModVersion = mod.activeModVersion
|
||||
return true unless activeModVersion?
|
||||
return true if activeModVersion.isUnloaded
|
||||
return true if activeModVersion.isLoading
|
||||
|
||||
@trigger c.event.change, this
|
||||
@trigger c.event.sync, this
|
||||
|
||||
@@ -212,7 +212,11 @@ module.exports = class Recipe extends BaseModel
|
||||
_computeQuantities: (pattern)->
|
||||
quantityMap = {}
|
||||
|
||||
for c in pattern.split ''
|
||||
index = 0
|
||||
while index < pattern.length
|
||||
c = pattern[index]
|
||||
index += 1
|
||||
|
||||
continue if c is '.'
|
||||
continue if c is ' '
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ html
|
||||
.page
|
||||
.view__header
|
||||
|
||||
.content(style="display: none")
|
||||
.content.hidden
|
||||
.content-loading
|
||||
img(src="/images/wait.gif")
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@ module.exports = class SiteController extends BaseController
|
||||
|
||||
if global.env isnt 'prerender'
|
||||
@modPack.once c.event.sync, =>
|
||||
@$pageContent.css 'display', ''
|
||||
@$pageContentLoading.css 'display', 'none'
|
||||
@$pageContent.removeClass 'hidden'
|
||||
@$pageContentLoading.addClass 'hidden'
|
||||
|
||||
loadCurrentUser: ->
|
||||
@client.fetchCurrentUser()
|
||||
@@ -144,6 +144,8 @@ module.exports = class SiteController extends BaseController
|
||||
$pageContent = $('.page > .content')
|
||||
$pageContent.removeClass()
|
||||
$pageContent.addClass 'content'
|
||||
if not @$pageContentLoading.hasClass 'hidden'
|
||||
$pageContent.addClass 'hidden'
|
||||
|
||||
window.scrollTo 0, 0
|
||||
|
||||
|
||||
@@ -69,6 +69,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.page > .content {
|
||||
min-height: $size-skyscraper-height;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user