diff --git a/app/assets/javascripts/discourse/controllers/login_controller.js b/app/assets/javascripts/discourse/controllers/login.js.es6 similarity index 98% rename from app/assets/javascripts/discourse/controllers/login_controller.js rename to app/assets/javascripts/discourse/controllers/login.js.es6 index 4a2b8dab7f8..46af88878ee 100644 --- a/app/assets/javascripts/discourse/controllers/login_controller.js +++ b/app/assets/javascripts/discourse/controllers/login.js.es6 @@ -7,7 +7,7 @@ @uses Discourse.ModalFunctionality @module Discourse **/ -Discourse.LoginController = Discourse.Controller.extend(Discourse.ModalFunctionality, { +export default Discourse.Controller.extend(Discourse.ModalFunctionality, { needs: ['modal', 'createAccount'], authenticate: null, loggingIn: false, diff --git a/app/assets/javascripts/discourse/controllers/merge-topic.js.es6 b/app/assets/javascripts/discourse/controllers/merge-topic.js.es6 new file mode 100644 index 00000000000..0af0ae0fb4a --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/merge-topic.js.es6 @@ -0,0 +1,65 @@ +/** + Modal related to merging of topics + + @class MergeTopicController + @extends Discourse.ObjectController + @namespace Discourse + @uses Discourse.ModalFunctionality + @module Discourse +**/ +export default Discourse.ObjectController.extend(Discourse.SelectedPostsCount, Discourse.ModalFunctionality, { + needs: ['topic'], + + topicController: Em.computed.alias('controllers.topic'), + selectedPosts: Em.computed.alias('topicController.selectedPosts'), + selectedReplies: Em.computed.alias('topicController.selectedReplies'), + allPostsSelected: Em.computed.alias('topicController.allPostsSelected'), + + buttonDisabled: function() { + if (this.get('saving')) return true; + return this.blank('selectedTopicId'); + }.property('selectedTopicId', 'saving'), + + buttonTitle: function() { + if (this.get('saving')) return I18n.t('saving'); + return I18n.t('topic.merge_topic.title'); + }.property('saving'), + + onShow: function() { + this.set('controllers.modal.modalClass', 'split-modal'); + }, + + actions: { + movePostsToExistingTopic: function() { + this.set('saving', true); + + var promise = null; + if (this.get('allPostsSelected')) { + promise = Discourse.Topic.mergeTopic(this.get('id'), this.get('selectedTopicId')); + } else { + var postIds = this.get('selectedPosts').map(function(p) { return p.get('id'); }), + replyPostIds = this.get('selectedReplies').map(function(p) { return p.get('id'); }); + + promise = Discourse.Topic.movePosts(this.get('id'), { + destination_topic_id: this.get('selectedTopicId'), + post_ids: postIds, + reply_post_ids: replyPostIds + }); + } + + var mergeTopicController = this; + promise.then(function(result) { + // Posts moved + mergeTopicController.send('closeModal'); + mergeTopicController.get('topicController').send('toggleMultiSelect'); + Em.run.next(function() { Discourse.URL.routeTo(result.url); }); + }, function() { + // Error moving posts + mergeTopicController.flash(I18n.t('topic.merge_topic.error')); + mergeTopicController.set('saving', false); + }); + return false; + } + } + +}); diff --git a/app/assets/javascripts/discourse/controllers/merge_topic_controller.js b/app/assets/javascripts/discourse/controllers/merge_topic_controller.js deleted file mode 100644 index 481b66a601c..00000000000 --- a/app/assets/javascripts/discourse/controllers/merge_topic_controller.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - Modal related to auto closing of topics - - @class MergeTopicController - @extends Discourse.ObjectController - @namespace Discourse - @uses Discourse.ModalFunctionality - @module Discourse -**/ -Discourse.MergeTopicController = Discourse.ObjectController.extend(Discourse.SelectedPostsCount, Discourse.ModalFunctionality, { - needs: ['topic'], - - topicController: Em.computed.alias('controllers.topic'), - selectedPosts: Em.computed.alias('topicController.selectedPosts'), - selectedReplies: Em.computed.alias('topicController.selectedReplies'), - allPostsSelected: Em.computed.alias('topicController.allPostsSelected'), - - buttonDisabled: function() { - if (this.get('saving')) return true; - return this.blank('selectedTopicId'); - }.property('selectedTopicId', 'saving'), - - buttonTitle: function() { - if (this.get('saving')) return I18n.t('saving'); - return I18n.t('topic.merge_topic.title'); - }.property('saving'), - - onShow: function() { - this.set('controllers.modal.modalClass', 'split-modal'); - }, - - movePostsToExistingTopic: function() { - this.set('saving', true); - - var promise = null; - if (this.get('allPostsSelected')) { - promise = Discourse.Topic.mergeTopic(this.get('id'), this.get('selectedTopicId')); - } else { - var postIds = this.get('selectedPosts').map(function(p) { return p.get('id'); }), - replyPostIds = this.get('selectedReplies').map(function(p) { return p.get('id'); }); - - promise = Discourse.Topic.movePosts(this.get('id'), { - destination_topic_id: this.get('selectedTopicId'), - post_ids: postIds, - reply_post_ids: replyPostIds - }); - } - - var mergeTopicController = this; - promise.then(function(result) { - // Posts moved - mergeTopicController.send('closeModal'); - mergeTopicController.get('topicController').send('toggleMultiSelect'); - Em.run.next(function() { Discourse.URL.routeTo(result.url); }); - }, function() { - // Error moving posts - mergeTopicController.flash(I18n.t('topic.merge_topic.error')); - mergeTopicController.set('saving', false); - }); - return false; - } - -}); diff --git a/app/assets/javascripts/discourse/controllers/modal.js.es6 b/app/assets/javascripts/discourse/controllers/modal.js.es6 new file mode 100644 index 00000000000..7d9d1db3ef7 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/modal.js.es6 @@ -0,0 +1,9 @@ +/** + Related to showing a modal and its title. + + @class ModalController + @extends Discourse.Controller + @namespace Discourse + @module Discourse +**/ +export default Discourse.Controller.extend({}); diff --git a/app/assets/javascripts/discourse/controllers/modal_controller.js b/app/assets/javascripts/discourse/controllers/modal_controller.js deleted file mode 100644 index d6cb21ef745..00000000000 --- a/app/assets/javascripts/discourse/controllers/modal_controller.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - This controller supports actions related to showing modals - - @class ModalController - @extends Discourse.Controller - @namespace Discourse - @module Discourse -**/ -Discourse.ModalController = Discourse.Controller.extend({}); - - diff --git a/app/assets/javascripts/discourse/views/choose_topic_view.js b/app/assets/javascripts/discourse/views/choose_topic_view.js index 066e9c01a33..5a44f09d2a6 100644 --- a/app/assets/javascripts/discourse/views/choose_topic_view.js +++ b/app/assets/javascripts/discourse/views/choose_topic_view.js @@ -25,29 +25,34 @@ Discourse.ChooseTopicView = Discourse.View.extend({ }.observes('topics'), search: Discourse.debounce(function(title) { - var chooseTopicView = this; + var self = this; + if (Em.isEmpty(title)) { + self.setProperties({ topics: null, loading: false }); + return; + } Discourse.Search.forTerm(title, {typeFilter: 'topic'}).then(function (facets) { if (facets && facets[0] && facets[0].results) { - chooseTopicView.set('topics', facets[0].results); + self.set('topics', facets[0].results); } else { - chooseTopicView.set('topics', null); - chooseTopicView.set('loading', false); + self.setProperties({ topics: null, loading: false }); } }); }, 300), - chooseTopic: function (topic) { - var topicId = Em.get(topic, 'id'); - this.set('selectedTopicId', topicId); + actions: { + chooseTopic: function (topic) { + var topicId = Em.get(topic, 'id'); + this.set('selectedTopicId', topicId); - Em.run.next(function () { - $('#choose-topic-' + topicId).prop('checked', 'true'); - }); + Em.run.next(function () { + $('#choose-topic-' + topicId).prop('checked', 'true'); + }); - return false; + return false; + } } }); -Discourse.View.registerHelper('chooseTopic', Discourse.ChooseTopicView); \ No newline at end of file +Discourse.View.registerHelper('chooseTopic', Discourse.ChooseTopicView);