diff --git a/app/assets/javascripts/discourse/controllers/topic-bulk-actions.js.es6 b/app/assets/javascripts/discourse/controllers/topic-bulk-actions.js.es6 index 4c0ddcfdebb..3d5285017eb 100644 --- a/app/assets/javascripts/discourse/controllers/topic-bulk-actions.js.es6 +++ b/app/assets/javascripts/discourse/controllers/topic-bulk-actions.js.es6 @@ -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 }; diff --git a/app/assets/javascripts/discourse/templates/modal/bulk_actions_buttons.hbs b/app/assets/javascripts/discourse/templates/modal/bulk_actions_buttons.hbs index 40ace4bc376..6cd4580a538 100644 --- a/app/assets/javascripts/discourse/templates/modal/bulk_actions_buttons.hbs +++ b/app/assets/javascripts/discourse/templates/modal/bulk_actions_buttons.hbs @@ -1,10 +1,7 @@ -

- - - - -

-

- - -

+{{#each row in buttonRows}} +

+ {{#each button in row}} + {{d-button action=button.action label=button.label}} + {{/each}} +

+{{/each}} diff --git a/app/assets/javascripts/discourse/templates/modal/bulk_change_category.hbs b/app/assets/javascripts/discourse/templates/modal/bulk_change_category.hbs index e67173ff701..6239773fd9f 100644 --- a/app/assets/javascripts/discourse/templates/modal/bulk_change_category.hbs +++ b/app/assets/javascripts/discourse/templates/modal/bulk_change_category.hbs @@ -1,10 +1,7 @@ -

Choose the new category for the topics:

+

{{i18n "topics.bulk.choose_new_category"}}

{{category-chooser value=newCategoryId}}

-{{#if loading}} -
{{i18n 'loading'}}
-{{else}} - -{{/if}} - +{{#loading-spinner condition=loading}} + {{d-button action="changeCategory" label="topics.bulk.change_category"}} +{{/loading-spinner}} diff --git a/app/assets/javascripts/discourse/views/topic-bulk-actions.js.es6 b/app/assets/javascripts/discourse/views/topic-bulk-actions.js.es6 new file mode 100644 index 00000000000..dd6490a71f8 --- /dev/null +++ b/app/assets/javascripts/discourse/views/topic-bulk-actions.js.es6 @@ -0,0 +1,4 @@ +export default Discourse.ModalBodyView.extend({ + templateName: 'modal/topic-bulk-actions', + title: I18n.t('topics.bulk.actions') +}); diff --git a/app/assets/javascripts/discourse/views/topic_bulk_actions_view.js b/app/assets/javascripts/discourse/views/topic_bulk_actions_view.js deleted file mode 100644 index a72348415e3..00000000000 --- a/app/assets/javascripts/discourse/views/topic_bulk_actions_view.js +++ /dev/null @@ -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') -}); diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 04b0dd324da..79e67bb94a6 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -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 1 topic." other: "You have selected {{count}} topics." diff --git a/lib/topics_bulk_action.rb b/lib/topics_bulk_action.rb index 71defb0e3d7..337c32eac1a 100644 --- a/lib/topics_bulk_action.rb +++ b/lib/topics_bulk_action.rb @@ -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!