From 6cc092d54cb5504e88bad2d685fbf6e9bc612eef Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Wed, 6 May 2015 18:12:35 +0530 Subject: [PATCH] FEATURE: support category/subcategory name in new-topic route --- .../discourse/controllers/composer.js.es6 | 17 +++++++++++++++++ .../discourse/mixins/open_composer.js | 3 ++- .../discourse/routes/application.js.es6 | 4 ++-- .../discourse/routes/new-topic.js.es6 | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/composer.js.es6 b/app/assets/javascripts/discourse/controllers/composer.js.es6 index 65df35cae1f..bd8316c845d 100644 --- a/app/assets/javascripts/discourse/controllers/composer.js.es6 +++ b/app/assets/javascripts/discourse/controllers/composer.js.es6 @@ -441,6 +441,23 @@ export default DiscourseController.extend({ if (opts.topicCategoryId) { this.set('model.categoryId', opts.topicCategoryId); + } else if (opts.topicCategory) { + const splitCategory = opts.topicCategory.split("/"); + let category; + + if (!splitCategory[1]) { + category = this.site.get('categories').findProperty('nameLower', splitCategory[0].toLowerCase()); + } else { + const categories = Discourse.Category.list(); + const mainCategory = categories.findProperty('nameLower', splitCategory[0].toLowerCase()); + category = categories.find(function(item) { + return item && item.get('nameLower') === splitCategory[1].toLowerCase() && item.get('parent_category_id') === mainCategory.id; + }); + } + + if (category) { + this.set('model.categoryId', category.get('id')); + } } if (opts.topicBody) { diff --git a/app/assets/javascripts/discourse/mixins/open_composer.js b/app/assets/javascripts/discourse/mixins/open_composer.js index 64a79f7965d..8e1906ba930 100644 --- a/app/assets/javascripts/discourse/mixins/open_composer.js +++ b/app/assets/javascripts/discourse/mixins/open_composer.js @@ -17,12 +17,13 @@ Discourse.OpenComposer = Em.Mixin.create({ }); }, - openComposerWithParams: function(controller, title, body, category_id) { + openComposerWithParams: function(controller, title, body, category_id, category) { this.controllerFor('composer').open({ action: Discourse.Composer.CREATE_TOPIC, topicTitle: title, topicBody: body, topicCategoryId: category_id, + topicCategory: category, draftKey: controller.get('draft_key'), draftSequence: controller.get('draft_sequence') }); diff --git a/app/assets/javascripts/discourse/routes/application.js.es6 b/app/assets/javascripts/discourse/routes/application.js.es6 index 4e6a61e1c01..22f97dc2c55 100644 --- a/app/assets/javascripts/discourse/routes/application.js.es6 +++ b/app/assets/javascripts/discourse/routes/application.js.es6 @@ -148,8 +148,8 @@ const ApplicationRoute = Discourse.Route.extend(Discourse.OpenComposer, { this.render(w, {into: 'modal/topic-bulk-actions', outlet: 'bulkOutlet', controller: factory ? controllerName : 'topic-bulk-actions'}); }, - createNewTopicViaParams: function(title, body, category_id) { - this.openComposerWithParams(this.controllerFor('discovery/topics'), title, body, category_id); + createNewTopicViaParams: function(title, body, category_id, category) { + this.openComposerWithParams(this.controllerFor('discovery/topics'), title, body, category_id, category); } }, diff --git a/app/assets/javascripts/discourse/routes/new-topic.js.es6 b/app/assets/javascripts/discourse/routes/new-topic.js.es6 index f09dcae0289..4ce26ba279b 100644 --- a/app/assets/javascripts/discourse/routes/new-topic.js.es6 +++ b/app/assets/javascripts/discourse/routes/new-topic.js.es6 @@ -7,7 +7,7 @@ export default Discourse.Route.extend({ if (self.controllerFor('navigation/default').get('canCreateTopic')) { // User can create topic Ember.run.next(function() { - e.send('createNewTopicViaParams', transition.queryParams.title, transition.queryParams.body, transition.queryParams.category_id); + e.send('createNewTopicViaParams', transition.queryParams.title, transition.queryParams.body, transition.queryParams.category_id, transition.queryParams.category); }); } });