diff --git a/app/assets/javascripts/admin/views/admin-backups-logs.js.es6 b/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 similarity index 82% rename from app/assets/javascripts/admin/views/admin-backups-logs.js.es6 rename to app/assets/javascripts/admin/components/admin-backups-logs.js.es6 index 1929abf5a22..cb9e39eb603 100644 --- a/app/assets/javascripts/admin/views/admin-backups-logs.js.es6 +++ b/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 @@ -2,17 +2,20 @@ import debounce from 'discourse/lib/debounce'; import { renderSpinner } from 'discourse/helpers/loading-spinner'; import { escapeExpression } from 'discourse/lib/utilities'; -export default Ember.View.extend({ +export default Ember.Component.extend({ classNames: ["admin-backups-logs"], - _initialize: function() { this._reset(); }.on("init"), + init() { + this._super(); + this._reset(); + }, _reset() { this.setProperties({ formattedLogs: "", index: 0 }); }, _updateFormattedLogs: debounce(function() { - const logs = this.get("controller.model"); + const logs = this.get("logs"); if (logs.length === 0) { this._reset(); // reset the cached logs whenever the model is reset } else { @@ -28,7 +31,7 @@ export default Ember.View.extend({ // force rerender this.rerender(); } - }, 150).observes("controller.model.[]"), + }, 150).observes("logs.[]").on('init'), render(buffer) { const formattedLogs = this.get("formattedLogs"); @@ -40,14 +43,14 @@ export default Ember.View.extend({ buffer.push("
" + I18n.t("admin.backups.logs.none") + "
"); } // add a loading indicator - if (this.get("controller.status.model.isOperationRunning")) { + if (this.get("status.isOperationRunning")) { buffer.push(renderSpinner('small')); } }, - _forceScrollToBottom: function() { + didInsertElement() { + this._super(); const $div = this.$()[0]; $div.scrollTop = $div.scrollHeight; - }.on("didInsertElement") - + }, }); diff --git a/app/assets/javascripts/admin/controllers/admin-api-keys.js.es6 b/app/assets/javascripts/admin/controllers/admin-api-keys.js.es6 index 82366d3bd78..529538263c8 100644 --- a/app/assets/javascripts/admin/controllers/admin-api-keys.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-api-keys.js.es6 @@ -1,66 +1,30 @@ import ApiKey from 'admin/models/api-key'; -/** - This controller supports the interface for dealing with API keys - - @class AdminApiController - @extends Ember.ArrayController - @namespace Discourse - @module Discourse -**/ -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ actions: { - /** - Generates a master api key - - @method generateMasterKey - **/ - generateMasterKey: function() { - var self = this; - ApiKey.generateMasterKey().then(function (key) { - self.get('model').pushObject(key); - }); + generateMasterKey() { + ApiKey.generateMasterKey().then(key => this.get('model').pushObject(key)); }, - /** - Creates an API key instance with internal user object - - @method regenerateKey - @param {ApiKey} key the key to regenerate - **/ - regenerateKey: function(key) { - bootbox.confirm(I18n.t("admin.api.confirm_regen"), I18n.t("no_value"), I18n.t("yes_value"), function(result) { + regenerateKey(key) { + bootbox.confirm(I18n.t("admin.api.confirm_regen"), I18n.t("no_value"), I18n.t("yes_value"), result => { if (result) { key.regenerate(); } }); }, - /** - Revokes an API key - - @method revokeKey - @param {ApiKey} key the key to revoke - **/ - revokeKey: function(key) { - var self = this; - bootbox.confirm(I18n.t("admin.api.confirm_revoke"), I18n.t("no_value"), I18n.t("yes_value"), function(result) { + revokeKey(key) { + bootbox.confirm(I18n.t("admin.api.confirm_revoke"), I18n.t("no_value"), I18n.t("yes_value"), result => { if (result) { - key.revoke().then(function() { - self.get('model').removeObject(key); - }); + key.revoke().then(() => this.get('model').removeObject(key)); } }); } }, - /** - Has a master key already been generated? - - @property hasMasterKey - @type {Boolean} - **/ + // Has a master key already been generated? hasMasterKey: function() { return !!this.get('model').findBy('user', null); }.property('model.[]') diff --git a/app/assets/javascripts/admin/controllers/admin-backups-index.js.es6 b/app/assets/javascripts/admin/controllers/admin-backups-index.js.es6 index 98f76405a2f..605ebe83af1 100644 --- a/app/assets/javascripts/admin/controllers/admin-backups-index.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-backups-index.js.es6 @@ -1,19 +1,20 @@ import { ajax } from 'discourse/lib/ajax'; -export default Ember.ArrayController.extend({ - needs: ["adminBackups"], - status: Ember.computed.alias("controllers.adminBackups"), + +export default Ember.Controller.extend({ + adminBackups: Ember.inject.controller(), + status: Ember.computed.alias('adminBackups.model'), uploadLabel: function() { return I18n.t("admin.backups.upload.label"); }.property(), restoreTitle: function() { - if (!this.get('status.model.allowRestore')) { + if (!this.get('status.allowRestore')) { return "admin.backups.operations.restore.is_disabled"; - } else if (this.get("status.model.isOperationRunning")) { + } else if (this.get("status.isOperationRunning")) { return "admin.backups.operations.is_running"; } else { return "admin.backups.operations.restore.title"; } - }.property("status.model.{allowRestore,isOperationRunning}"), + }.property("status.{allowRestore,isOperationRunning}"), actions: { diff --git a/app/assets/javascripts/admin/controllers/admin-backups-logs.js.es6 b/app/assets/javascripts/admin/controllers/admin-backups-logs.js.es6 index 1b3d90346a1..38bdd6f5713 100644 --- a/app/assets/javascripts/admin/controllers/admin-backups-logs.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-backups-logs.js.es6 @@ -1,4 +1,5 @@ -export default Ember.ArrayController.extend({ - needs: ["adminBackups"], - status: Em.computed.alias("controllers.adminBackups") +export default Ember.Controller.extend({ + logs: [], + adminBackups: Ember.inject.controller(), + status: Em.computed.alias("adminBackups.model") }); diff --git a/app/assets/javascripts/admin/controllers/admin-badges-show.js.es6 b/app/assets/javascripts/admin/controllers/admin-badges-show.js.es6 index 5ec2cb45410..122a63c42d1 100644 --- a/app/assets/javascripts/admin/controllers/admin-badges-show.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-badges-show.js.es6 @@ -3,14 +3,14 @@ import BufferedContent from 'discourse/mixins/buffered-content'; import { propertyNotEqual } from 'discourse/lib/computed'; export default Ember.Controller.extend(BufferedContent, { - needs: ['admin-badges'], + adminBadges: Ember.inject.controller(), saving: false, savingStatus: '', - badgeTypes: Em.computed.alias('controllers.admin-badges.badgeTypes'), - badgeGroupings: Em.computed.alias('controllers.admin-badges.badgeGroupings'), - badgeTriggers: Em.computed.alias('controllers.admin-badges.badgeTriggers'), - protectedSystemFields: Em.computed.alias('controllers.admin-badges.protectedSystemFields'), + badgeTypes: Em.computed.alias('adminBadges.badgeTypes'), + badgeGroupings: Em.computed.alias('adminBadges.badgeGroupings'), + badgeTriggers: Em.computed.alias('adminBadges.badgeTriggers'), + protectedSystemFields: Em.computed.alias('adminBadges.protectedSystemFields'), readOnly: Ember.computed.alias('buffered.system'), showDisplayName: propertyNotEqual('name', 'displayName'), @@ -30,16 +30,15 @@ export default Ember.Controller.extend(BufferedContent, { }.observes('model.id'), actions: { - save: function() { + save() { if (!this.get('saving')) { - var fields = ['allow_title', 'multiple_grant', - 'listable', 'auto_revoke', - 'enabled', 'show_posts', - 'target_posts', 'name', 'description', - 'long_description', - 'icon', 'image', 'query', 'badge_grouping_id', - 'trigger', 'badge_type_id'], - self = this; + let fields = ['allow_title', 'multiple_grant', + 'listable', 'auto_revoke', + 'enabled', 'show_posts', + 'target_posts', 'name', 'description', + 'long_description', + 'icon', 'image', 'query', 'badge_grouping_id', + 'trigger', 'badge_type_id']; if (this.get('buffered.system')){ var protectedFields = this.get('protectedSystemFields'); @@ -51,54 +50,55 @@ export default Ember.Controller.extend(BufferedContent, { this.set('saving', true); this.set('savingStatus', I18n.t('saving')); - var boolFields = ['allow_title', 'multiple_grant', - 'listable', 'auto_revoke', - 'enabled', 'show_posts', - 'target_posts' ]; + const boolFields = ['allow_title', 'multiple_grant', + 'listable', 'auto_revoke', + 'enabled', 'show_posts', + 'target_posts' ]; - var data = {}, - buffered = this.get('buffered'); + const data = {}; + const buffered = this.get('buffered'); fields.forEach(function(field){ var d = buffered.get(field); if (_.include(boolFields, field)) { d = !!d; } data[field] = d; }); - var newBadge = !this.get('id'), - model = this.get('model'); - this.get('model').save(data).then(function() { + const newBadge = !this.get('id'); + const model = this.get('model'); + this.get('model').save(data).then(() => { if (newBadge) { - var adminBadgesController = self.get('controllers.admin-badges'); - if (!adminBadgesController.contains(model)) adminBadgesController.pushObject(model); - self.transitionToRoute('adminBadges.show', model.get('id')); + const adminBadges = this.get('adminBadges.model'); + if (!adminBadges.contains(model)) { + adminBadges.pushObject(model); + } + this.transitionToRoute('adminBadges.show', model.get('id')); } else { - self.commitBuffer(); - self.set('savingStatus', I18n.t('saved')); + this.commitBuffer(); + this.set('savingStatus', I18n.t('saved')); } - }).catch(popupAjaxError).finally(function() { - self.set('saving', false); - self.set('savingStatus', ''); + }).catch(popupAjaxError).finally(() => { + this.set('saving', false); + this.set('savingStatus', ''); }); } }, - destroy: function() { - var self = this, - adminBadgesController = this.get('controllers.admin-badges'), - model = this.get('model'); + destroy() { + const adminBadges = this.get('adminBadges.model'); + const model = this.get('model'); if (!model.get('id')) { - self.transitionToRoute('adminBadges.index'); + this.transitionToRoute('adminBadges.index'); return; } - return bootbox.confirm(I18n.t("admin.badges.delete_confirm"), I18n.t("no_value"), I18n.t("yes_value"), function(result) { + return bootbox.confirm(I18n.t("admin.badges.delete_confirm"), I18n.t("no_value"), I18n.t("yes_value"), result => { if (result) { - model.destroy().then(function() { - adminBadgesController.removeObject(model); - self.transitionToRoute('adminBadges.index'); - }).catch(function() { + model.destroy().then(() => { + adminBadges.removeObject(model); + this.transitionToRoute('adminBadges.index'); + }).catch(() => { bootbox.alert(I18n.t('generic_error')); }); } diff --git a/app/assets/javascripts/admin/controllers/admin-badges.js.es6 b/app/assets/javascripts/admin/controllers/admin-badges.js.es6 index 24c4c051390..77c79b724a7 100644 --- a/app/assets/javascripts/admin/controllers/admin-badges.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-badges.js.es6 @@ -1 +1 @@ -export default Ember.ArrayController.extend(); +export default Ember.Controller.extend(); diff --git a/app/assets/javascripts/admin/controllers/admin-customize-colors.js.es6 b/app/assets/javascripts/admin/controllers/admin-customize-colors.js.es6 index 4a6a58021bb..ae253aec843 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-colors.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-customize-colors.js.es6 @@ -1,4 +1,4 @@ -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ onlyOverridden: false, baseColorScheme: function() { @@ -13,8 +13,8 @@ export default Ember.ArrayController.extend({ return baseColorsHash; }.property('baseColorScheme'), - removeSelected: function() { - this.removeObject(this.get('selectedItem')); + removeSelected() { + this.get('model').removeObject(this.get('selectedItem')); this.set('selectedItem', null); }, @@ -26,8 +26,7 @@ export default Ember.ArrayController.extend({ return; } - var matches = Em.A(); - + const matches = []; _.each(this.get('selectedItem.colors'), function(color){ if (color.get('overridden')) matches.pushObject(color); }); @@ -58,10 +57,10 @@ export default Ember.ArrayController.extend({ this.filterContent(); }, - newColorScheme: function() { - var newColorScheme = Em.copy(this.get('baseColorScheme'), true); + newColorScheme() { + const newColorScheme = Em.copy(this.get('baseColorScheme'), true); newColorScheme.set('name', I18n.t('admin.customize.colors.new_name')); - this.pushObject(newColorScheme); + this.get('model').pushObject(newColorScheme); this.send('selectColorScheme', newColorScheme); this.set('onlyOverridden', false); }, @@ -86,10 +85,10 @@ export default Ember.ArrayController.extend({ this.updateEnabled(); }, - copy: function(colorScheme) { + copy(colorScheme) { var newColorScheme = Em.copy(colorScheme, true); newColorScheme.set('name', I18n.t('admin.customize.colors.copy_name_prefix') + ' ' + colorScheme.get('name')); - this.pushObject(newColorScheme); + this.get('model').pushObject(newColorScheme); this.send('selectColorScheme', newColorScheme); }, diff --git a/app/assets/javascripts/admin/controllers/admin-emojis.js.es6 b/app/assets/javascripts/admin/controllers/admin-emojis.js.es6 index b111a5952ba..29aecc47734 100644 --- a/app/assets/javascripts/admin/controllers/admin-emojis.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-emojis.js.es6 @@ -1,23 +1,23 @@ import { ajax } from 'discourse/lib/ajax'; -export default Ember.ArrayController.extend({ - sortProperties: ["name"], +export default Ember.Controller.extend({ + sortedEmojis: Ember.computed.sort('model', 'emojiSorting'), + emojiSorting: ['name'], actions: { emojiUploaded(emoji) { emoji.url += "?t=" + new Date().getTime(); - this.pushObject(Ember.Object.create(emoji)); + this.get('model').pushObject(Ember.Object.create(emoji)); }, destroy(emoji) { - const self = this; return bootbox.confirm( I18n.t("admin.emoji.delete_confirm", { name: emoji.get("name") }), I18n.t("no_value"), I18n.t("yes_value"), - function(destroy) { + destroy => { if (destroy) { - return ajax("/admin/customize/emojis/" + emoji.get("name"), { type: "DELETE" }).then(function() { - self.removeObject(emoji); + return ajax("/admin/customize/emojis/" + emoji.get("name"), { type: "DELETE" }).then(() => { + this.get('model').removeObject(emoji); }); } } diff --git a/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 b/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 index 0c85749775a..e3101e2fa32 100644 --- a/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 @@ -1,6 +1,6 @@ import FlaggedPost from 'admin/models/flagged-post'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ query: null, adminOldFlagsView: Em.computed.equal("query", "old"), @@ -8,18 +8,16 @@ export default Ember.ArrayController.extend({ actions: { disagreeFlags(flaggedPost) { - var self = this; - flaggedPost.disagreeFlags().then(function () { - self.removeObject(flaggedPost); + flaggedPost.disagreeFlags().then(() => { + this.get('model').removeObject(flaggedPost); }, function () { bootbox.alert(I18n.t("admin.flags.error")); }); }, deferFlags(flaggedPost) { - var self = this; - flaggedPost.deferFlags().then(function () { - self.removeObject(flaggedPost); + flaggedPost.deferFlags().then(() => { + this.get('model').removeObject(flaggedPost); }, function () { bootbox.alert(I18n.t("admin.flags.error")); }); @@ -29,7 +27,7 @@ export default Ember.ArrayController.extend({ this.send("disagreeFlags", item); }, - loadMore(){ + loadMore() { const flags = this.get('model'); return FlaggedPost.findAll(this.get('query'), flags.length+1).then(data => { if (data.length===0) { diff --git a/app/assets/javascripts/admin/controllers/admin-group.js.es6 b/app/assets/javascripts/admin/controllers/admin-group.js.es6 index bf192931174..e7d53800e7d 100644 --- a/app/assets/javascripts/admin/controllers/admin-group.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-group.js.es6 @@ -4,7 +4,7 @@ import { escapeExpression } from 'discourse/lib/utilities'; import computed from 'ember-addons/ember-computed-decorators'; export default Ember.Controller.extend({ - needs: ['adminGroupsType'], + adminGroupsType: Ember.inject.controller(), disableSave: false, savingStatus: '', @@ -131,13 +131,13 @@ export default Ember.Controller.extend({ save() { const group = this.get('model'), - groupsController = this.get("controllers.adminGroupsType"), + groupsController = this.get("adminGroupsType"), groupType = groupsController.get("type"); this.set('disableSave', true); this.set('savingStatus', I18n.t('saving')); - let promise = group.get("id") ? group.save() : group.create().then(() => groupsController.addObject(group)); + let promise = group.get("id") ? group.save() : group.create().then(() => groupsController.get('model').addObject(group)); promise.then(() => { this.transitionToRoute("adminGroup", groupType, group.get('name')); @@ -148,7 +148,7 @@ export default Ember.Controller.extend({ destroy() { const group = this.get('model'), - groupsController = this.get('controllers.adminGroupsType'), + groupsController = this.get('adminGroupsType'), self = this; if (!group.get('id')) { diff --git a/app/assets/javascripts/admin/controllers/admin-groups-type.js.es6 b/app/assets/javascripts/admin/controllers/admin-groups-type.js.es6 index 9a5962cccfa..10d7ad01cfe 100644 --- a/app/assets/javascripts/admin/controllers/admin-groups-type.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-groups-type.js.es6 @@ -1,18 +1,18 @@ import { ajax } from 'discourse/lib/ajax'; -export default Ember.ArrayController.extend({ - sortProperties: ['name'], +export default Ember.Controller.extend({ + sortedGroups: Ember.computed.sort('model', 'groupSorting'), + groupSorting: ['name'], + refreshingAutoGroups: false, - isAuto: function(){ - return this.get('type') === 'automatic'; - }.property('type'), + + isAuto: Ember.computed.equal('type', 'automatic'), actions: { - refreshAutoGroups: function(){ - var self = this; + refreshAutoGroups() { this.set('refreshingAutoGroups', true); - ajax('/admin/groups/refresh_automatic_groups', {type: 'POST'}).then(function() { - self.transitionToRoute("adminGroupsType", "automatic").then(function() { - self.set('refreshingAutoGroups', false); + ajax('/admin/groups/refresh_automatic_groups', {type: 'POST'}).then(() => { + this.transitionToRoute("adminGroupsType", "automatic").then(() => { + this.set('refreshingAutoGroups', false); }); }); } diff --git a/app/assets/javascripts/admin/controllers/admin-logs-screened-emails.js.es6 b/app/assets/javascripts/admin/controllers/admin-logs-screened-emails.js.es6 index fe158a33aba..13685f16b95 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-screened-emails.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-logs-screened-emails.js.es6 @@ -2,12 +2,12 @@ import { exportEntity } from 'discourse/lib/export-csv'; import { outputExportResult } from 'discourse/lib/export-result'; import ScreenedEmail from 'admin/models/screened-email'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ loading: false, actions: { clearBlock(row){ - row.clearBlock().then(function(){ + row.clearBlock().then(function() { // feeling lazy window.location.reload(); }); @@ -19,11 +19,10 @@ export default Ember.ArrayController.extend({ }, show() { - var self = this; - self.set('loading', true); - ScreenedEmail.findAll().then(function(result) { - self.set('model', result); - self.set('loading', false); + this.set('loading', true); + ScreenedEmail.findAll().then(result => { + this.set('model', result); + this.set('loading', false); }); } }); diff --git a/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 b/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 index 88f46d6ccbc..b654e6d65f7 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-logs-screened-ip-addresses.js.es6 @@ -3,7 +3,7 @@ import { outputExportResult } from 'discourse/lib/export-result'; import { exportEntity } from 'discourse/lib/export-csv'; import ScreenedIpAddress from 'admin/models/screened-ip-address'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ loading: false, filter: null, savedIpAddress: null, @@ -63,16 +63,15 @@ export default Ember.ArrayController.extend({ }, destroy(record) { - const self = this; return bootbox.confirm( I18n.t("admin.logs.screened_ips.delete_confirm", { ip_address: record.get('ip_address') }), I18n.t("no_value"), I18n.t("yes_value"), - function (result) { + result => { if (result) { record.destroy().then(deleted => { if (deleted) { - self.get("content").removeObject(record); + this.get("model").removeObject(record); } else { bootbox.alert(I18n.t("generic_error")); } diff --git a/app/assets/javascripts/admin/controllers/admin-logs-screened-urls.js.es6 b/app/assets/javascripts/admin/controllers/admin-logs-screened-urls.js.es6 index 5f5e3339608..d57a151d219 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-screened-urls.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-logs-screened-urls.js.es6 @@ -2,15 +2,14 @@ import { exportEntity } from 'discourse/lib/export-csv'; import { outputExportResult } from 'discourse/lib/export-result'; import ScreenedUrl from 'admin/models/screened-url'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ loading: false, show() { - const self = this; - self.set('loading', true); - ScreenedUrl.findAll().then(function(result) { - self.set('model', result); - self.set('loading', false); + this.set('loading', true); + ScreenedUrl.findAll().then(result => { + this.set('model', result); + this.set('loading', false); }); }, diff --git a/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 b/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 index 956a737e578..98f135dc57c 100644 --- a/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-logs-staff-action-logs.js.es6 @@ -2,7 +2,7 @@ import { exportEntity } from 'discourse/lib/export-csv'; import { outputExportResult } from 'discourse/lib/export-result'; import StaffActionLog from 'admin/models/staff-action-log'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ loading: false, filters: null, diff --git a/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 b/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 index 9c5ab4bb3e8..6bfcc669227 100644 --- a/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-permalinks.js.es6 @@ -1,16 +1,14 @@ import debounce from 'discourse/lib/debounce'; import Permalink from 'admin/models/permalink'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ loading: false, filter: null, show: debounce(function() { - var self = this; - self.set('loading', true); - Permalink.findAll(self.get("filter")).then(function(result) { - self.set('model', result); - self.set('loading', false); + Permalink.findAll(this.get("filter")).then(result => { + this.set('model', result); + this.set('loading', false); }); }, 250).observes("filter"), @@ -20,12 +18,11 @@ export default Ember.ArrayController.extend({ }, destroy: function(record) { - const self = this; - return bootbox.confirm(I18n.t("admin.permalink.delete_confirm"), I18n.t("no_value"), I18n.t("yes_value"), function(result) { + return bootbox.confirm(I18n.t("admin.permalink.delete_confirm"), I18n.t("no_value"), I18n.t("yes_value"), result => { if (result) { - record.destroy().then(function(deleted) { + record.destroy().then(deleted => { if (deleted) { - self.removeObject(record); + this.get('model').removeObject(record); } else { bootbox.alert(I18n.t("generic_error")); } diff --git a/app/assets/javascripts/admin/controllers/admin-plugins.js.es6 b/app/assets/javascripts/admin/controllers/admin-plugins.js.es6 index b2eb1335ed8..5393a27c8f6 100644 --- a/app/assets/javascripts/admin/controllers/admin-plugins.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-plugins.js.es6 @@ -1,10 +1,9 @@ -export default Ember.ArrayController.extend({ - +export default Ember.Controller.extend({ adminRoutes: function() { - return this.get('model').map(function(p) { - if (p.get('enabled')) { - return p.admin_route; - } + return this.get('model').map(p => { + if (p.get('enabled')) { + return p.admin_route; + } }).compact(); }.property() }); diff --git a/app/assets/javascripts/admin/controllers/admin-site-settings-category.js.es6 b/app/assets/javascripts/admin/controllers/admin-site-settings-category.js.es6 index b16db34e3e6..3feb90f40ea 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-settings-category.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-site-settings-category.js.es6 @@ -1,11 +1,11 @@ export default Ember.Controller.extend({ categoryNameKey: null, - needs: ['adminSiteSettings'], + adminSiteSettings: Ember.inject.controller(), filteredContent: function() { if (!this.get('categoryNameKey')) { return []; } - const category = this.get('controllers.adminSiteSettings.content').findProperty('nameKey', this.get('categoryNameKey')); + const category = this.get('adminSiteSettings.allSiteSettings').findProperty('nameKey', this.get('categoryNameKey')); if (category) { return category.siteSettings; } else { diff --git a/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 b/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 index b7c4302e87c..02a907d7af9 100644 --- a/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-site-settings.js.es6 @@ -1,6 +1,6 @@ import debounce from 'discourse/lib/debounce'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ filter: null, onlyOverridden: false, filtered: Ember.computed.notEmpty('filter'), diff --git a/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 b/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 index c8c0ba6219e..a2b7c94f175 100644 --- a/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6 @@ -1,10 +1,11 @@ import UserBadge from 'discourse/models/user-badge'; -export default Ember.ArrayController.extend({ - needs: ["adminUser"], - user: Em.computed.alias('controllers.adminUser.model'), - sortProperties: ['granted_at'], - sortAscending: false, +export default Ember.Controller.extend({ + adminUser: Ember.inject.controller(), + user: Ember.computed.alias('adminUser.model'), + + sortedBadges: Ember.computed.sort('model', 'badgeSortOrder'), + badgeSortOrder: ['granted_at:desc'], groupedBadges: function(){ const allBadges = this.get('model'); @@ -38,8 +39,6 @@ export default Ember.ArrayController.extend({ }); return _(expanded).sortBy(group => group.granted_at).reverse().value(); - - }.property('model', 'model.[]', 'model.expandedBadges.[]'), /** @@ -80,22 +79,15 @@ export default Ember.ArrayController.extend({ model.get('expandedBadges').pushObject(userBadge.badge.id); }, - /** - Grant the selected badge to the user. - - @method grantBadge - @param {Integer} badgeId id of the badge we want to grant. - **/ - grantBadge: function(badgeId) { - var self = this; - UserBadge.grant(badgeId, this.get('user.username'), this.get('badgeReason')).then(function(userBadge) { - self.set('badgeReason', ''); - self.pushObject(userBadge); - Ember.run.next(function() { + grantBadge(badgeId) { + UserBadge.grant(badgeId, this.get('user.username'), this.get('badgeReason')).then(userBadge => { + this.set('badgeReason', ''); + this.get('model').pushObject(userBadge); + Ember.run.next(() => { // Update the selected badge ID after the combobox has re-rendered. - var newSelectedBadge = self.get('grantableBadges')[0]; + const newSelectedBadge = this.get('grantableBadges')[0]; if (newSelectedBadge) { - self.set('selectedBadgeId', newSelectedBadge.get('id')); + this.set('selectedBadgeId', newSelectedBadge.get('id')); } }); }, function() { @@ -104,12 +96,11 @@ export default Ember.ArrayController.extend({ }); }, - revokeBadge: function(userBadge) { - var self = this; - return bootbox.confirm(I18n.t("admin.badges.revoke_confirm"), I18n.t("no_value"), I18n.t("yes_value"), function(result) { + revokeBadge(userBadge) { + return bootbox.confirm(I18n.t("admin.badges.revoke_confirm"), I18n.t("no_value"), I18n.t("yes_value"), result => { if (result) { - userBadge.revoke().then(function() { - self.get('model').removeObject(userBadge); + userBadge.revoke().then(() => { + this.get('model').removeObject(userBadge); }); } }); diff --git a/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 b/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 index af4a0297ef6..d3ea899d81b 100644 --- a/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-users-list-show.js.es6 @@ -2,7 +2,7 @@ import debounce from 'discourse/lib/debounce'; import { i18n } from 'discourse/lib/computed'; import AdminUser from 'admin/models/admin-user'; -export default Ember.ArrayController.extend({ +export default Ember.Controller.extend({ query: null, showEmails: false, refreshing: false, diff --git a/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 index 2924eb66998..7f1f4f2e49a 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 @@ -1,16 +1,15 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality'; export default Ember.Controller.extend(ModalFunctionality, { - needs: ["admin-flags-list"], + adminFlagsList: Ember.inject.controller(), _agreeFlag: function (actionOnPost) { - var adminFlagController = this.get("controllers.admin-flags-list"); - var post = this.get("content"); - var self = this; + const adminFlagController = this.get("adminFlagsList"); + const post = this.get("content"); - return post.agreeFlags(actionOnPost).then(function () { - adminFlagController.removeObject(post); - self.send("closeModal"); + return post.agreeFlags(actionOnPost).then(() => { + adminFlagController.get('model').removeObject(post); + this.send("closeModal"); }, function () { bootbox.alert(I18n.t("admin.flags.error")); }); diff --git a/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 index 284b8bfd09d..fc2e0627946 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 @@ -1,36 +1,31 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality'; export default Ember.Controller.extend(ModalFunctionality, { - needs: ["admin-flags-list"], + adminFlagsList: Ember.inject.controller(), actions: { + deletePostDeferFlag() { + const adminFlagController = this.get("adminFlagsList"); + const post = this.get("content"); - deletePostDeferFlag: function () { - var adminFlagController = this.get("controllers.admin-flags-list"); - var post = this.get("content"); - var self = this; - - return post.deferFlags(true).then(function () { - adminFlagController.removeObject(post); - self.send("closeModal"); + return post.deferFlags(true).then(() => { + adminFlagController.get('model').removeObject(post); + this.send("closeModal"); }, function () { bootbox.alert(I18n.t("admin.flags.error")); }); }, - deletePostAgreeFlag: function () { - var adminFlagController = this.get("controllers.admin-flags-list"); - var post = this.get("content"); - var self = this; + deletePostAgreeFlag() { + const adminFlagController = this.get("adminFlagsList"); + const post = this.get("content"); - return post.agreeFlags("delete").then(function () { - adminFlagController.removeObject(post); - self.send("closeModal"); + return post.agreeFlags("delete").then(() => { + adminFlagController.get('model').removeObject(post); + this.send("closeModal"); }, function () { bootbox.alert(I18n.t("admin.flags.error")); }); } - } - }); diff --git a/app/assets/javascripts/admin/models/backup.js.es6 b/app/assets/javascripts/admin/models/backup.js.es6 index d7baceebacf..7fe81441c37 100644 --- a/app/assets/javascripts/admin/models/backup.js.es6 +++ b/app/assets/javascripts/admin/models/backup.js.es6 @@ -2,7 +2,6 @@ import { ajax } from 'discourse/lib/ajax'; import PreloadStore from 'preload-store'; const Backup = Discourse.Model.extend({ - destroy() { return ajax("/admin/backups/" + this.get("filename"), { type: "DELETE" }); }, @@ -13,11 +12,9 @@ const Backup = Discourse.Model.extend({ data: { client_id: window.MessageBus.clientId } }); } - }); Backup.reopenClass({ - find() { return PreloadStore.getAndRemove("backups", () => ajax("/admin/backups.json")) .then(backups => backups.map(backup => Backup.create(backup))); diff --git a/app/assets/javascripts/admin/routes/admin-backups-logs.js.es6 b/app/assets/javascripts/admin/routes/admin-backups-logs.js.es6 index cd01295f5de..c036a107429 100644 --- a/app/assets/javascripts/admin/routes/admin-backups-logs.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-backups-logs.js.es6 @@ -5,17 +5,17 @@ export default Ember.Route.extend({ // since the logs are pushed via the message bus // we only want to preload them (hence the beforeModel hook) beforeModel() { - const logsController = this.controllerFor("adminBackupsLogs"); + const logs = this.controllerFor("adminBackupsLogs").get('logs'); // preload the logs if any PreloadStore.getAndRemove("logs").then(function (preloadedLogs) { if (preloadedLogs && preloadedLogs.length) { // we need to filter out message like: "[SUCCESS]" // and convert POJOs to Ember Objects - const logs = _.chain(preloadedLogs) - .reject(function (log) { return log.message.length === 0 || log.message[0] === "["; }) - .map(function (log) { return Em.Object.create(log); }) - .value(); - logsController.pushObjects(logs); + const newLogs = _.chain(preloadedLogs) + .reject(function (log) { return log.message.length === 0 || log.message[0] === "["; }) + .map(function (log) { return Em.Object.create(log); }) + .value(); + logs.pushObjects(newLogs); } }); }, diff --git a/app/assets/javascripts/admin/routes/admin-backups.js.es6 b/app/assets/javascripts/admin/routes/admin-backups.js.es6 index d590019431e..ad6f79a8cb3 100644 --- a/app/assets/javascripts/admin/routes/admin-backups.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-backups.js.es6 @@ -15,7 +15,7 @@ export default Discourse.Route.extend({ _processLogMessage(log) { if (log.message === "[STARTED]") { this.controllerFor("adminBackups").set("model.isOperationRunning", true); - this.controllerFor("adminBackupsLogs").clear(); + this.controllerFor("adminBackupsLogs").get('logs').clear(); } else if (log.message === "[FAILED]") { this.controllerFor("adminBackups").set("model.isOperationRunning", false); bootbox.alert(I18n.t("admin.backups.operations.failed", { operation: log.operation })); @@ -27,7 +27,7 @@ export default Discourse.Route.extend({ window.location.pathname = Discourse.getURL("/"); } } else { - this.controllerFor("adminBackupsLogs").pushObject(Em.Object.create(log)); + this.controllerFor("adminBackupsLogs").get('logs').pushObject(Em.Object.create(log)); } }, diff --git a/app/assets/javascripts/admin/routes/admin-badges.js.es6 b/app/assets/javascripts/admin/routes/admin-badges.js.es6 index 68da5edb6b1..96ecddab234 100644 --- a/app/assets/javascripts/admin/routes/admin-badges.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-badges.js.es6 @@ -5,21 +5,20 @@ import BadgeGrouping from 'discourse/models/badge-grouping'; export default Discourse.Route.extend({ _json: null, - model: function() { - var self = this; - return ajax('/admin/badges.json').then(function(json) { - self._json = json; + model() { + return ajax('/admin/badges.json').then(json => { + this._json = json; return Badge.createFromJson(json); }); }, - setupController: function(controller, model) { - var json = this._json, - triggers = [], - badgeGroupings = []; + setupController(controller, model) { + const json = this._json; + const badgeTriggers = []; + const badgeGroupings = []; _.each(json.admin_badges.triggers,function(v,k){ - triggers.push({id: v, name: I18n.t('admin.badges.trigger_type.'+k)}); + badgeTriggers.push({id: v, name: I18n.t('admin.badges.trigger_type.'+k)}); }); json.badge_groupings.forEach(function(badgeGroupingJson) { @@ -30,8 +29,8 @@ export default Discourse.Route.extend({ badgeGroupings: badgeGroupings, badgeTypes: json.badge_types, protectedSystemFields: json.admin_badges.protected_system_fields, - badgeTriggers: triggers, - model: model + badgeTriggers, + model }); } }); diff --git a/app/assets/javascripts/admin/templates/api-keys.hbs b/app/assets/javascripts/admin/templates/api-keys.hbs index 4123e576389..60449052bb9 100644 --- a/app/assets/javascripts/admin/templates/api-keys.hbs +++ b/app/assets/javascripts/admin/templates/api-keys.hbs @@ -30,5 +30,4 @@ {{#unless hasMasterKey}} -{{/unless }} - +{{/unless}} diff --git a/app/assets/javascripts/admin/templates/backups-logs.hbs b/app/assets/javascripts/admin/templates/backups-logs.hbs new file mode 100644 index 00000000000..34ec15f84a7 --- /dev/null +++ b/app/assets/javascripts/admin/templates/backups-logs.hbs @@ -0,0 +1 @@ +{{admin-backups-logs logs=logs status=status}} diff --git a/app/assets/javascripts/admin/templates/backups_index.hbs b/app/assets/javascripts/admin/templates/backups_index.hbs index c7323ebea02..308e73f0fdb 100644 --- a/app/assets/javascripts/admin/templates/backups_index.hbs +++ b/app/assets/javascripts/admin/templates/backups_index.hbs @@ -6,9 +6,9 @@{{emoji-uploader done="emojiUploaded"}}
- {{#if model}} + {{#if sortedEmojis}}:{{e.name}}: | diff --git a/app/assets/javascripts/admin/templates/groups_type.hbs b/app/assets/javascripts/admin/templates/groups_type.hbs index 45bb054ad73..d1d2223c2b3 100644 --- a/app/assets/javascripts/admin/templates/groups_type.hbs +++ b/app/assets/javascripts/admin/templates/groups_type.hbs @@ -2,7 +2,7 @@
---|