mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 02:06:29 +08:00
a25087b62a
* Query param to allow linking. * Better handling of deleting unsaved badges. * New badge list item style improvement.
106 lines
2.4 KiB
JavaScript
106 lines
2.4 KiB
JavaScript
/**
|
|
This controller supports the interface for dealing with badges.
|
|
|
|
@class AdminBadgesController
|
|
@extends Ember.ArrayController
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
Discourse.AdminBadgesController = Ember.ArrayController.extend({
|
|
itemController: 'adminBadge',
|
|
queryParams: ['badgeId'],
|
|
|
|
/**
|
|
ID of the currently selected badge.
|
|
|
|
@property badgeId
|
|
@type {Integer}
|
|
**/
|
|
badgeId: Em.computed.alias('selectedItem.id'),
|
|
|
|
/**
|
|
We don't allow setting a description if a translation for the given badge
|
|
name exists.
|
|
|
|
@property canEditDescription
|
|
@type {Boolean}
|
|
**/
|
|
canEditDescription: Em.computed.none('selectedItem.translatedDescription'),
|
|
|
|
/**
|
|
Disable saving if the currently selected item is being saved.
|
|
|
|
@property disableSave
|
|
@type {Boolean}
|
|
**/
|
|
disableSave: Em.computed.alias('selectedItem.saving'),
|
|
|
|
actions: {
|
|
|
|
/**
|
|
Create a new badge and select it.
|
|
|
|
@method newBadge
|
|
**/
|
|
newBadge: function() {
|
|
var badge = Discourse.Badge.create({
|
|
name: I18n.t('admin.badges.new_badge')
|
|
});
|
|
this.pushObject(badge);
|
|
this.send('selectBadge', badge);
|
|
},
|
|
|
|
/**
|
|
Select a particular badge.
|
|
|
|
@method selectBadge
|
|
@param {Discourse.Badge} badge The badge to be selected
|
|
**/
|
|
selectBadge: function(badge) {
|
|
this.set('selectedItem', badge);
|
|
},
|
|
|
|
/**
|
|
Save the selected badge.
|
|
|
|
@method save
|
|
**/
|
|
save: function() {
|
|
if (!this.get('disableSave')) {
|
|
this.get('selectedItem').save();
|
|
}
|
|
},
|
|
|
|
/**
|
|
Confirm before destroying the selected badge.
|
|
|
|
@method destroy
|
|
**/
|
|
destroy: function() {
|
|
// Delete immediately if the selected badge is new.
|
|
if (!this.get('selectedItem.id')) {
|
|
this.get('model').removeObject(this.get('selectedItem'));
|
|
this.set('selectedItem', null);
|
|
return;
|
|
}
|
|
|
|
var self = this;
|
|
return bootbox.confirm(I18n.t("admin.badges.delete_confirm"), I18n.t("no_value"), I18n.t("yes_value"), function(result) {
|
|
if (result) {
|
|
var selected = self.get('selectedItem');
|
|
selected.destroy().then(function() {
|
|
// Success.
|
|
self.set('selectedItem', null);
|
|
self.get('model').removeObject(selected);
|
|
}, function() {
|
|
// Failure.
|
|
bootbox.alert(I18n.t('generic_error'));
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
});
|