Support for plugins to add bulk operations

This commit is contained in:
Robin Ward 2015-03-06 15:54:00 -05:00
parent ddbe1c017b
commit 7a508b201a
7 changed files with 52 additions and 30 deletions

View File

@ -1,11 +1,39 @@
import ModalFunctionality from 'discourse/mixins/modal-functionality';
const _buttons = [];
function addBulkButton(action, key) {
_buttons.push({ action: action, label: "topics.bulk." + key });
}
// Default buttons
addBulkButton('showChangeCategory', 'change_category');
addBulkButton('deleteTopics', 'delete');
addBulkButton('closeTopics', 'close_topics');
addBulkButton('archiveTopics', 'archive_topics');
addBulkButton('showNotificationLevel', 'notification_level');
addBulkButton('resetRead', 'reset_read');
// Modal for performing bulk actions on topics
export default Ember.ArrayController.extend(ModalFunctionality, {
needs: ['discovery/topics'],
buttonRows: null,
onShow: function() {
this.set('controllers.modal.modalClass', 'topic-bulk-actions-modal small');
const buttonRows = [];
let row = [];
_buttons.forEach(function(b) {
row.push(b);
if (row.length === 4) {
buttonRows.push(row);
row = [];
}
});
if (row.length) { buttonRows.push(row); }
this.set('buttonRows', buttonRows);
},
perform: function(operation) {
@ -89,3 +117,5 @@ export default Ember.ArrayController.extend(ModalFunctionality, {
}
}
});
export { addBulkButton };

View File

@ -1,10 +1,7 @@
<p>
<button class='btn' {{action "showChangeCategory"}}>{{i18n 'topics.bulk.change_category'}}</button>
<button class='btn' {{action "deleteTopics"}}>{{i18n 'topics.bulk.delete'}}</button>
<button class='btn' {{action "closeTopics"}}>{{i18n 'topics.bulk.close_topics'}}</button>
<button class='btn' {{action "archiveTopics"}}>{{i18n 'topics.bulk.archive_topics'}}</button>
</p>
<p>
<button class='btn' {{action "showNotificationLevel"}}>{{i18n 'topics.bulk.notification_level'}}</button>
<button class='btn' {{action "resetRead"}}>{{i18n 'topics.bulk.reset_read'}}</button>
</p>
{{#each row in buttonRows}}
<p>
{{#each button in row}}
{{d-button action=button.action label=button.label}}
{{/each}}
</p>
{{/each}}

View File

@ -1,10 +1,7 @@
<p>Choose the new category for the topics:</p>
<p>{{i18n "topics.bulk.choose_new_category"}}</p>
<p>{{category-chooser value=newCategoryId}}</p>
{{#if loading}}
<div class='loading'>{{i18n 'loading'}}</div>
{{else}}
<button class='btn' {{action "changeCategory"}}>Change Category</button>
{{/if}}
{{#loading-spinner condition=loading}}
{{d-button action="changeCategory" label="topics.bulk.change_category"}}
{{/loading-spinner}}

View File

@ -0,0 +1,4 @@
export default Discourse.ModalBodyView.extend({
templateName: 'modal/topic-bulk-actions',
title: I18n.t('topics.bulk.actions')
});

View File

@ -1,12 +0,0 @@
/**
Handles the view for the topic bulk actions modal
@class TopicBulkActionsView
@extends Discourse.ModalBodyView
@namespace Discourse
@module Discourse
**/
Discourse.TopicBulkActionsView = Discourse.ModalBodyView.extend({
templateName: 'modal/topic_bulk_actions',
title: I18n.t('topics.bulk.actions')
});

View File

@ -814,6 +814,7 @@ en:
close_topics: "Close Topics"
archive_topics: "Archive Topics"
notification_level: "Change Notification Level"
choose_new_category: "Choose the new category for the topics:"
selected:
one: "You have selected <b>1</b> topic."
other: "You have selected <b>{{count}}</b> topics."

View File

@ -8,7 +8,12 @@ class TopicsBulkAction
end
def self.operations
%w(change_category close archive change_notification_level reset_read dismiss_posts delete)
@operations ||= %w(change_category close archive change_notification_level reset_read dismiss_posts delete)
end
def self.register_operation(name, &block)
operations << name
define_method(name, &block)
end
def perform!