diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 3605d0557..7f9a3a201 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -686,3 +686,9 @@ user_profile: "User Profile" patches: "Patches" model: "Model" + system: "System" + component: "Component" + thang: "Thang" + level_session: "Your Session" + opponent_session: "Opponent Session" + article: "Article" diff --git a/app/models/CocoModel.coffee b/app/models/CocoModel.coffee index 1c93ea125..39bf58308 100644 --- a/app/models/CocoModel.coffee +++ b/app/models/CocoModel.coffee @@ -16,6 +16,7 @@ class CocoModel extends Backbone.Model @markToRevert() @addSchemaDefaults() @once 'sync', @onLoaded, @ + @on 'error', @onError, @ @saveBackup = _.debounce(@saveBackup, 500) type: -> @@ -26,6 +27,9 @@ class CocoModel extends Backbone.Model clone = super() clone.set($.extend(true, {}, if withChanges then @attributes else @_revertAttributes)) clone + + onError: -> + @loading = false onLoaded: -> @loaded = true diff --git a/app/models/SuperModel.coffee b/app/models/SuperModel.coffee index b57f7f6ba..f45520554 100644 --- a/app/models/SuperModel.coffee +++ b/app/models/SuperModel.coffee @@ -109,7 +109,10 @@ module.exports = class SuperModel extends Backbone.Model getProgress: -> return @progress - + getResource: (rid) -> + return @resources[rid] + + class Resource extends Backbone.Model constructor: (name, value=1) -> @@ -131,11 +134,12 @@ class Resource extends Backbone.Model return if @isLoaded @trigger('failed', {resource: @}) @isLoaded = @isLoading = false + @isFailed = true markLoading: -> - @isLoaded = false + @isLoaded = @isFailed = false @isLoading = true - + load: -> @ diff --git a/app/styles/base.sass b/app/styles/base.sass index afa9fbcc9..f68a75aba 100644 --- a/app/styles/base.sass +++ b/app/styles/base.sass @@ -168,22 +168,26 @@ a[data-toggle="modal"] .icon-cog.big background-position: 0px 0px +// loading screens for everything but the play view .loading-screen - text-align: center .progress width: 50% margin: 0 25% + +// all loading screens +.loading-container + text-align: center .progress-bar width: 0% transition: width 0.1s ease - .errors .alert padding: 5px display: block margin: 10px auto .btn margin-left: 10px - + + .modal overflow-y: auto !important .wait diff --git a/app/templates/loading.jade b/app/templates/loading.jade index df2fc0eb5..ea7c1fce4 100644 --- a/app/templates/loading.jade +++ b/app/templates/loading.jade @@ -1,4 +1,4 @@ -.loading-screen +.loading-screen.loading-container h1(data-i18n="common.loading") Loading... .progress .progress-bar diff --git a/app/templates/loading_error.jade b/app/templates/loading_error.jade index b56ede4ac..2e9a8edfe 100644 --- a/app/templates/loading_error.jade +++ b/app/templates/loading_error.jade @@ -25,7 +25,7 @@ strong(data-i18n="loading_error.unknown") Unknown error. if resourceIndex !== undefined - button.btn.btn-sm.retry-loading-resource(data-i18n="common.retry", data-resource-index=resourceIndex) Retry + button.btn.btn-xs.retry-loading-resource(data-i18n="common.retry", data-resource-index=resourceIndex) Retry if requestIndex !== undefined - button.btn.btn-sm.retry-loading-request(data-i18n="common.retry", data-request-index=requestIndex) Retry + button.btn.btn-xs.retry-loading-request(data-i18n="common.retry", data-request-index=requestIndex) Retry \ No newline at end of file diff --git a/app/templates/play/level/level_loading.jade b/app/templates/play/level/level_loading.jade index cfd949909..9cfc3622d 100644 --- a/app/templates/play/level/level_loading.jade +++ b/app/templates/play/level/level_loading.jade @@ -2,7 +2,7 @@ .right-wing -.loading-details +.loading-details.loading-container .load-progress .progress.progress-striped.active @@ -40,3 +40,6 @@ strong.tip.rare span(data-i18n='play_level.tip_harry') Yer a Wizard, span= me.get('name') || 'Anoner' + + .errors + \ No newline at end of file diff --git a/app/views/kinds/CocoView.coffee b/app/views/kinds/CocoView.coffee index adc705a04..1fcb2b1c6 100644 --- a/app/views/kinds/CocoView.coffee +++ b/app/views/kinds/CocoView.coffee @@ -116,22 +116,24 @@ module.exports = class CocoView extends Backbone.View updateProgressBar: (progress) => prog = "#{parseInt(progress*100)}%" - @$el?.find('.loading-screen .progress-bar').css('width', prog) + @$el?.find('.loading-container .progress-bar').css('width', prog) onLoaded: -> @render() # Error handling for loading - onResourceLoadFailed: (source) -> - # console.debug 'gintau', 'onResourceLoadFailed', source - @$el.find('.loading-screen .errors').append(loadingErrorTemplate({ - status: 'error', - name: source.resource.name - resourceIndex: source.resource.rid, - responseText: source.error + onResourceLoadFailed: (e) -> + r = e.resource + @$el.find('.loading-container .errors').append(loadingErrorTemplate({ + status: r.jqxhr?.status + name: r.name + resourceIndex: r.rid, + responseText: r.jqxhr?.responseText })).i18n() onRetryResource: (e) -> res = @supermodel.getResource($(e.target).data('resource-index')) + # different views may respond to this call, and not all have the resource to reload + return unless res and res.isFailed res.load() $(e.target).closest('.loading-error-alert').remove() diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee index 1044fe16c..1c5f5f965 100644 --- a/app/views/play/level_view.coffee +++ b/app/views/play/level_view.coffee @@ -111,7 +111,6 @@ module.exports = class PlayLevelView extends View load: -> @loadStartTime = new Date() @levelLoader = new LevelLoader supermodel: @supermodel, levelID: @levelID, sessionID: @sessionID, opponentSessionID: @getQueryVariable('opponent'), team: @getQueryVariable("team") -# @listenTo(@levelLoader, 'progress', @onLevelLoaderProgressChanged) # TODO NOW: transfer to supermodel system @god = new God() getRenderData: -> @@ -154,8 +153,6 @@ module.exports = class PlayLevelView extends View _.defer => @onLevelLoaded() onLevelLoaded: -> - console.debug 'level_view', 'onLevelLoaderLoaded', @levelLoader.progress() - return unless @levelLoader.progress() is 1 # double check, since closing the guide may trigger this early @loadingView.showReady() if window.currentModal and not window.currentModal.destroyed