discourse/app/assets/javascripts/discourse/controllers/flag_controller.js

67 lines
1.9 KiB
JavaScript
Raw Normal View History

/**
This controller supports actions related to flagging
@class FlagController
@extends Discourse.ObjectController
@namespace Discourse
@uses Discourse.ModalFunctionality
@module Discourse
**/
Discourse.FlagController = Discourse.ObjectController.extend(Discourse.ModalFunctionality, {
changePostActionType: function(action) {
this.set('selected', action);
},
submitEnabled: function() {
var selected = this.get('selected');
if (!selected) return false;
if (selected.get('is_custom_flag')) {
var len = this.get('message.length') || 0;
return len >= Discourse.PostActionType.MIN_MESSAGE_LENGTH &&
len <= Discourse.PostActionType.MAX_MESSAGE_LENGTH;
}
return true;
}.property('selected.is_custom_flag', 'message.length'),
submitDisabled: Em.computed.not('submitEnabled'),
// Staff accounts can "take action"
canTakeAction: function() {
// We can only take actions on non-custom flags
if (this.get('selected.is_custom_flag')) return false;
return Discourse.User.current('staff');
}.property('selected.is_custom_flag'),
submitText: function(){
if (this.get('selected.is_custom_flag')) {
return Em.String.i18n("flagging.notify_action");
} else {
return Em.String.i18n("flagging.action");
}
}.property('selected.is_custom_flag'),
takeAction: function() {
this.createFlag({takeAction: true})
this.set('hidden', true);
},
createFlag: function(opts) {
var flagController = this;
var postAction = this.get('actionByName.' + this.get('selected.name_key'));
var params = this.get('selected.is_custom_flag') ? {message: this.get('message')} : {}
if (opts) params = $.extend(params, opts);
postAction.act(params).then(function() {
flagController.closeModal();
}, function(errors) {
flagController.displayErrors(errors);
});
}
});