diff --git a/app/assets/javascripts/admin/controllers/admin-email-preview-digest.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-preview-digest.js.es6 index 2e57f8baf12..84d1f3e4b58 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-preview-digest.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-preview-digest.js.es6 @@ -1,13 +1,5 @@ import ObjectController from 'discourse/controllers/object'; -/** - This controller previews an email digest - - @class AdminEmailPreviewDigestController - @extends ObjectController - @namespace Discourse - @module Discourse -**/ export default ObjectController.extend({ actions: { diff --git a/app/assets/javascripts/admin/templates/email_preview_digest.hbs b/app/assets/javascripts/admin/templates/email_preview_digest.hbs index 1e56304d859..b9119e5ead8 100644 --- a/app/assets/javascripts/admin/templates/email_preview_digest.hbs +++ b/app/assets/javascripts/admin/templates/email_preview_digest.hbs @@ -18,14 +18,10 @@ -{{#if loading}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=loading}} {{#if showHtml}} {{{html_content}}} {{else}}
{{{text_content}}}
{{/if}} -{{/if}} - - +{{/loading-spinner}} diff --git a/app/assets/javascripts/admin/templates/flags-list.hbs b/app/assets/javascripts/admin/templates/flags-list.hbs index 76eec581f6b..3afa757d080 100644 --- a/app/assets/javascripts/admin/templates/flags-list.hbs +++ b/app/assets/javascripts/admin/templates/flags-list.hbs @@ -146,10 +146,8 @@ - {{#if view.loading}} - {{loading-spinner}} - {{/if}} + {{loading-spinner condition=view.loading}} {{else}}

{{i18n admin.flags.no_results}}

{{/if}} diff --git a/app/assets/javascripts/admin/templates/logs/screened_emails.hbs b/app/assets/javascripts/admin/templates/logs/screened_emails.hbs index a3a2bb8bd49..d61eb445747 100644 --- a/app/assets/javascripts/admin/templates/logs/screened_emails.hbs +++ b/app/assets/javascripts/admin/templates/logs/screened_emails.hbs @@ -1,8 +1,6 @@

{{i18n admin.logs.screened_emails.description}}

-{{#if loading}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=loading}} {{#if model.length}}
@@ -23,4 +21,4 @@ {{else}} {{i18n search.no_results}} {{/if}} -{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/admin/templates/logs/screened_ip_addresses.hbs b/app/assets/javascripts/admin/templates/logs/screened_ip_addresses.hbs index 7b61f357bf4..438e51b3950 100644 --- a/app/assets/javascripts/admin/templates/logs/screened_ip_addresses.hbs +++ b/app/assets/javascripts/admin/templates/logs/screened_ip_addresses.hbs @@ -3,9 +3,7 @@ {{screened-ip-address-form action="recordAdded"}}
-{{#if loading}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=loading}} {{#if model.length}}
@@ -25,4 +23,4 @@ {{else}} {{i18n search.no_results}} {{/if}} -{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/admin/templates/logs/screened_urls.hbs b/app/assets/javascripts/admin/templates/logs/screened_urls.hbs index 077ae151ed0..4a87eaf9ce5 100644 --- a/app/assets/javascripts/admin/templates/logs/screened_urls.hbs +++ b/app/assets/javascripts/admin/templates/logs/screened_urls.hbs @@ -1,10 +1,7 @@

{{i18n admin.logs.screened_urls.description}}

-{{#if loading}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=loading}} {{#if model.length}} -
{{i18n admin.logs.screened_urls.domain}}
@@ -17,8 +14,7 @@ {{view 'screened-urls-list' content=controller}}
- {{else}} {{i18n search.no_results}} {{/if}} -{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/admin/templates/logs/staff_action_logs.hbs b/app/assets/javascripts/admin/templates/logs/staff_action_logs.hbs index e422308d620..c12978703a8 100644 --- a/app/assets/javascripts/admin/templates/logs/staff_action_logs.hbs +++ b/app/assets/javascripts/admin/templates/logs/staff_action_logs.hbs @@ -43,14 +43,11 @@
- {{#if loading}} -
- {{loading-spinner}} - {{else}} + {{#loading-spinner condition=loading}} {{#if model.length}} {{view "staff-action-logs-list" content=controller}} {{else}} {{i18n search.no_results}} {{/if}} - {{/if}} + {{/loading-spinner}}
diff --git a/app/assets/javascripts/admin/templates/reports.hbs b/app/assets/javascripts/admin/templates/reports.hbs index a675a74480d..e1f011b5a4a 100644 --- a/app/assets/javascripts/admin/templates/reports.hbs +++ b/app/assets/javascripts/admin/templates/reports.hbs @@ -3,7 +3,7 @@
{{i18n admin.dashboard.reports.start_date}} {{input type="date" value=startDate}} {{i18n admin.dashboard.reports.end_date}} {{input type="date" value=endDate}} - +
@@ -20,9 +20,7 @@ {{/if}}
-{{#if refreshing}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=refreshing}} @@ -45,4 +43,4 @@ {{/each}}
{{xaxis}}
-{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/admin/templates/user_badges.hbs b/app/assets/javascripts/admin/templates/user_badges.hbs index dfe9ed4690f..c454e4a7dba 100644 --- a/app/assets/javascripts/admin/templates/user_badges.hbs +++ b/app/assets/javascripts/admin/templates/user_badges.hbs @@ -6,9 +6,7 @@
-{{#if loading}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=loading}}

{{i18n admin.badges.grant_badge}}

{{#if noBadges}} @@ -56,4 +54,4 @@ {{/each}}
-{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/admin/templates/users_list.hbs b/app/assets/javascripts/admin/templates/users_list.hbs index 352f15b3ab1..c4ab6dac64d 100644 --- a/app/assets/javascripts/admin/templates/users_list.hbs +++ b/app/assets/javascripts/admin/templates/users_list.hbs @@ -37,9 +37,7 @@ - {{#if loading}} - {{loading-spinner}} - {{else}} + {{#loading-spinner condition=loading}} {{#if model.length}} @@ -101,5 +99,5 @@ {{else}}

{{i18n search.no_results}}

{{/if}} - {{/if}} + {{/loading-spinner}} diff --git a/app/assets/javascripts/discourse/components/basic-topic-list.js.es6 b/app/assets/javascripts/discourse/components/basic-topic-list.js.es6 index 07b7a687211..1b505c6130b 100644 --- a/app/assets/javascripts/discourse/components/basic-topic-list.js.es6 +++ b/app/assets/javascripts/discourse/components/basic-topic-list.js.es6 @@ -7,6 +7,7 @@ @module Discourse **/ export default Ember.Component.extend({ + loading: Ember.computed.not('loaded'), loaded: function() { var topicList = this.get('topicList'); diff --git a/app/assets/javascripts/discourse/components/conditional-loading-spinner.js.es6 b/app/assets/javascripts/discourse/components/conditional-loading-spinner.js.es6 new file mode 100644 index 00000000000..4f927121531 --- /dev/null +++ b/app/assets/javascripts/discourse/components/conditional-loading-spinner.js.es6 @@ -0,0 +1,3 @@ +export default Ember.Component.extend({ + layoutName: 'components/conditional-loading-spinner' +}); diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6 index 548fb692ee0..668274fc67e 100644 --- a/app/assets/javascripts/discourse/controllers/topic.js.es6 +++ b/app/assets/javascripts/discourse/controllers/topic.js.es6 @@ -486,6 +486,7 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, { }.property('selectedPostsCount'), hasError: Ember.computed.or('notFoundHtml', 'message'), + noErrorYet: Ember.computed.not('hasError'), multiSelectChanged: function() { // Deselect all posts when multi select is turned off diff --git a/app/assets/javascripts/discourse/ember/resolver.js.es6 b/app/assets/javascripts/discourse/ember/resolver.js.es6 index 0dc7254a335..6fa05c6ecbb 100644 --- a/app/assets/javascripts/discourse/ember/resolver.js.es6 +++ b/app/assets/javascripts/discourse/ember/resolver.js.es6 @@ -3,7 +3,8 @@ var classify = Ember.String.classify; var get = Ember.get; -var LOADING_WHITELIST = ['badges', 'userActivity', 'userPrivateMessages', 'admin', 'adminFlags', 'user', 'preferences'], +var LOADING_WHITELIST = ['badges', 'userActivity', 'userPrivateMessages', 'admin', 'adminFlags', + 'user', 'preferences', 'adminEmail'], _dummyRoute, _loadingView; diff --git a/app/assets/javascripts/discourse/helpers/loading-spinner.es6 b/app/assets/javascripts/discourse/helpers/loading-spinner.es6 index fd93335b389..05a18fb463e 100644 --- a/app/assets/javascripts/discourse/helpers/loading-spinner.es6 +++ b/app/assets/javascripts/discourse/helpers/loading-spinner.es6 @@ -1,7 +1,25 @@ +import ConditionalLoadingSpinner from 'discourse/components/conditional-loading-spinner'; var spinnerHTML = "
"; -Handlebars.registerHelper('loading-spinner', function() { - return new Handlebars.SafeString(spinnerHTML); +/** + If you use it as a regular helper {{loading-spinner}} you'll just get the + HTML for a spinner. + + If you provide an `condition=xyz` parameter, it will be bound to that property + and only show when it's truthy. + + If you use the block form `{{#loading-spinner}} ... {{/loading-spinner}`, + the contents will shown when the loading condition finishes. + **/ +Handlebars.registerHelper('loading-spinner', function(options) { + var hash = options.hash; + if (hash && hash.condition) { + var types = options.hashTypes; + Discourse.Utilities.normalizeHash(hash, types); + return Ember.Handlebars.helpers.view.call(this, ConditionalLoadingSpinner, options); + } else { + return new Handlebars.SafeString(spinnerHTML); + } }); export { spinnerHTML }; diff --git a/app/assets/javascripts/discourse/templates/badges/show.hbs b/app/assets/javascripts/discourse/templates/badges/show.hbs index ac3780e1fa7..d36ae914176 100644 --- a/app/assets/javascripts/discourse/templates/badges/show.hbs +++ b/app/assets/javascripts/discourse/templates/badges/show.hbs @@ -35,10 +35,10 @@ {{/each}} - {{#if canLoadMore}} - {{loading-spinner}} - {{else}} + + {{loading-spinner condition=canLoadMore}} + {{#unless canLoadMore}} {{custom-html "footer"}} - {{/if}} + {{/unless}} {{/if}} diff --git a/app/assets/javascripts/discourse/templates/components/basic-topic-list.hbs b/app/assets/javascripts/discourse/templates/components/basic-topic-list.hbs index 1203205d38f..a29a6b4f90c 100644 --- a/app/assets/javascripts/discourse/templates/components/basic-topic-list.hbs +++ b/app/assets/javascripts/discourse/templates/components/basic-topic-list.hbs @@ -1,4 +1,4 @@ -{{#if loaded}} +{{#loading-spinner condition=loading}} {{#if topics}}
@@ -55,6 +55,4 @@ {{i18n choose_topic.none_found}} {{/if}} -{{else}} - {{loading-spinner}} -{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/discourse/templates/components/conditional-loading-spinner.hbs b/app/assets/javascripts/discourse/templates/components/conditional-loading-spinner.hbs new file mode 100644 index 00000000000..4d0c7131511 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/conditional-loading-spinner.hbs @@ -0,0 +1,5 @@ +{{#if condition}} + {{loading-spinner}} +{{else}} + {{yield}} +{{/if}} diff --git a/app/assets/javascripts/discourse/templates/discovery.hbs b/app/assets/javascripts/discourse/templates/discovery.hbs index 32daec93867..49b41514837 100644 --- a/app/assets/javascripts/discourse/templates/discovery.hbs +++ b/app/assets/javascripts/discourse/templates/discovery.hbs @@ -10,9 +10,7 @@ -{{#if loading}} - {{loading-spinner}} -{{/if}} +{{loading-spinner condition=loading}}
diff --git a/app/assets/javascripts/discourse/templates/discovery/topics.hbs b/app/assets/javascripts/discourse/templates/discovery/topics.hbs index 121fb1da573..a122bc2a58a 100644 --- a/app/assets/javascripts/discourse/templates/discovery/topics.hbs +++ b/app/assets/javascripts/discourse/templates/discovery/topics.hbs @@ -71,9 +71,7 @@
@@ -53,6 +53,4 @@ {{i18n choose_topic.none_found}} {{/if}} -{{else}} - {{loading-spinner}} -{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/discourse/templates/mobile/discovery/topics.hbs b/app/assets/javascripts/discourse/templates/mobile/discovery/topics.hbs index 1462f58f405..10f7529a152 100644 --- a/app/assets/javascripts/discourse/templates/mobile/discovery/topics.hbs +++ b/app/assets/javascripts/discourse/templates/mobile/discovery/topics.hbs @@ -24,9 +24,7 @@
- {{#if invitesLoading}} - {{loading-spinner}} - {{/if}} + {{loading-spinner condition=invitesLoading}} {{else}} {{#if canBulkInvite}} diff --git a/app/assets/javascripts/discourse/templates/user/notifications.hbs b/app/assets/javascripts/discourse/templates/user/notifications.hbs index 9865e88eb7c..2a8816a57b9 100644 --- a/app/assets/javascripts/discourse/templates/user/notifications.hbs +++ b/app/assets/javascripts/discourse/templates/user/notifications.hbs @@ -23,9 +23,7 @@ {{/each}} -{{#if loading}} - {{loading-spinner}} -{{else}} +{{#loading-spinner condition=loading}} {{#unless canLoadMore}} {{#if showDismissButton}}
@@ -33,4 +31,4 @@
{{/if}} {{/unless}} -{{/if}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/discourse/templates/user/posts.hbs b/app/assets/javascripts/discourse/templates/user/posts.hbs index 42220d48997..4dc27bb7d6c 100644 --- a/app/assets/javascripts/discourse/templates/user/posts.hbs +++ b/app/assets/javascripts/discourse/templates/user/posts.hbs @@ -26,6 +26,3 @@

{{/each}} -{{#if loading}} - {{loading-spinner}} -{{/if}} diff --git a/app/assets/javascripts/main_include.js b/app/assets/javascripts/main_include.js index 0423e7040af..102cba9b5c5 100644 --- a/app/assets/javascripts/main_include.js +++ b/app/assets/javascripts/main_include.js @@ -43,6 +43,7 @@ //= require ./discourse/components/top-title //= require ./discourse/components/text-field //= require ./discourse/components/visible +//= require ./discourse/components/conditional-loading-spinner //= require ./discourse/helpers/user-avatar //= require ./discourse/helpers/cold-age-class //= require ./discourse/helpers/loading-spinner