Fixes some Ember Deprecations for 1.13:

- Remove ArrayController
- Remove {{view}} from templates
- Replace many cases of needs: [‘controller’] with inject
- Enable Ember Legacy Views
This commit is contained in:
Robin Ward
2016-10-20 13:26:41 -04:00
parent 2a61cc8c88
commit bf91532260
50 changed files with 255 additions and 336 deletions

View File

@@ -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.[]')

View File

@@ -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: {

View File

@@ -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")
});

View File

@@ -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'));
});
}

View File

@@ -1 +1 @@
export default Ember.ArrayController.extend();
export default Ember.Controller.extend();

View File

@@ -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);
},

View File

@@ -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);
});
}
}

View File

@@ -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) {

View File

@@ -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')) {

View File

@@ -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);
});
});
}

View File

@@ -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);
});
}
});

View File

@@ -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"));
}

View File

@@ -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);
});
},

View File

@@ -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,

View File

@@ -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"));
}

View File

@@ -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()
});

View File

@@ -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 {

View File

@@ -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'),

View File

@@ -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);
});
}
});

View File

@@ -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,

View File

@@ -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"));
});

View File

@@ -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"));
});
}
}
});