From 6796b1585797306cff8bb0a9104f7bb7f19ac919 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Mon, 30 May 2016 16:37:06 -0400 Subject: [PATCH] FEATURE: restrict tags to be used in a category --- .../components/edit-category-tags.js.es6 | 4 ++ .../discourse/components/tag-chooser.js.es6 | 6 +- .../discourse/models/category.js.es6 | 3 +- .../components/edit-category-tags.hbs | 4 ++ .../discourse/templates/composer.hbs | 2 +- .../templates/modal/edit-category.hbs | 3 + .../javascripts/discourse/templates/topic.hbs | 2 +- app/controllers/categories_controller.rb | 3 +- app/controllers/tags_controller.rb | 21 +++---- app/models/category.rb | 9 +++ app/models/category_tag.rb | 4 ++ app/models/tag.rb | 7 ++- app/serializers/category_serializer.rb | 11 +++- config/locales/client.en.yml | 3 + .../20160527191614_create_category_tags.rb | 12 ++++ lib/discourse_tagging.rb | 51 +++++++++++++---- spec/integration/category_tag_spec.rb | 55 +++++++++++++++++++ 17 files changed, 168 insertions(+), 32 deletions(-) create mode 100644 app/assets/javascripts/discourse/components/edit-category-tags.js.es6 create mode 100644 app/assets/javascripts/discourse/templates/components/edit-category-tags.hbs create mode 100644 app/models/category_tag.rb create mode 100644 db/migrate/20160527191614_create_category_tags.rb create mode 100644 spec/integration/category_tag_spec.rb diff --git a/app/assets/javascripts/discourse/components/edit-category-tags.js.es6 b/app/assets/javascripts/discourse/components/edit-category-tags.js.es6 new file mode 100644 index 0000000000..22bf364e96 --- /dev/null +++ b/app/assets/javascripts/discourse/components/edit-category-tags.js.es6 @@ -0,0 +1,4 @@ +import { buildCategoryPanel } from 'discourse/components/edit-category-panel'; + +export default buildCategoryPanel('tags', { +}); diff --git a/app/assets/javascripts/discourse/components/tag-chooser.js.es6 b/app/assets/javascripts/discourse/components/tag-chooser.js.es6 index 88e7577d1e..e69ba2df5c 100644 --- a/app/assets/javascripts/discourse/components/tag-chooser.js.es6 +++ b/app/assets/javascripts/discourse/components/tag-chooser.js.es6 @@ -6,7 +6,7 @@ function formatTag(t) { export default Ember.TextField.extend({ classNameBindings: [':tag-chooser'], - attributeBindings: ['tabIndex'], + attributeBindings: ['tabIndex', 'placeholderKey', 'categoryId'], _setupTags: function() { const tags = this.get('tags') || []; @@ -25,7 +25,7 @@ export default Ember.TextField.extend({ this.$().select2({ tags: true, - placeholder: I18n.t('tagging.choose_for_topic'), + placeholder: I18n.t(this.get('placeholderKey') || 'tagging.choose_for_topic'), maximumInputLength: this.siteSettings.max_tag_length, maximumSelectionSize: this.siteSettings.max_tags_per_topic, initSelection(element, callback) { @@ -78,7 +78,7 @@ export default Ember.TextField.extend({ url: Discourse.getURL("/tags/filter/search"), dataType: 'json', data: function (term) { - return { q: term, limit: self.siteSettings.max_tag_search_results, filterForInput: true }; + return { q: term, limit: self.siteSettings.max_tag_search_results, filterForInput: true, categoryId: self.get('categoryId') }; }, results: function (data) { if (self.siteSettings.tags_sort_alphabetically) { diff --git a/app/assets/javascripts/discourse/models/category.js.es6 b/app/assets/javascripts/discourse/models/category.js.es6 index 37cfd9f297..0e013cf833 100644 --- a/app/assets/javascripts/discourse/models/category.js.es6 +++ b/app/assets/javascripts/discourse/models/category.js.es6 @@ -86,7 +86,8 @@ const Category = RestModel.extend({ allow_badges: this.get('allow_badges'), custom_fields: this.get('custom_fields'), topic_template: this.get('topic_template'), - suppress_from_homepage: this.get('suppress_from_homepage') + suppress_from_homepage: this.get('suppress_from_homepage'), + allowed_tags: this.get('allowed_tags') }, type: this.get('id') ? 'PUT' : 'POST' }); diff --git a/app/assets/javascripts/discourse/templates/components/edit-category-tags.hbs b/app/assets/javascripts/discourse/templates/components/edit-category-tags.hbs new file mode 100644 index 0000000000..632690bedc --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/edit-category-tags.hbs @@ -0,0 +1,4 @@ +
+

{{i18n 'category.tags_allowed_tags'}}

+ {{tag-chooser placeholderKey="category.tags_placeholder" tags=category.allowed_tags}} +
diff --git a/app/assets/javascripts/discourse/templates/composer.hbs b/app/assets/javascripts/discourse/templates/composer.hbs index 44c91b570c..eb72ca673b 100644 --- a/app/assets/javascripts/discourse/templates/composer.hbs +++ b/app/assets/javascripts/discourse/templates/composer.hbs @@ -98,7 +98,7 @@
{{plugin-outlet "composer-fields-below"}} {{#if canEditTags}} - {{tag-chooser tags=model.tags tabIndex="4"}} + {{tag-chooser tags=model.tags tabIndex="4" categoryId=model.categoryId}} {{/if}} {{i18n 'cancel'}} diff --git a/app/assets/javascripts/discourse/templates/modal/edit-category.hbs b/app/assets/javascripts/discourse/templates/modal/edit-category.hbs index 6cde3451da..10282704c8 100644 --- a/app/assets/javascripts/discourse/templates/modal/edit-category.hbs +++ b/app/assets/javascripts/discourse/templates/modal/edit-category.hbs @@ -7,6 +7,9 @@ {{edit-category-tab panels=panels selectedTab=selectedTab tab="settings"}} {{edit-category-tab panels=panels selectedTab=selectedTab tab="images"}} {{edit-category-tab panels=panels selectedTab=selectedTab tab="topic-template"}} + {{#if siteSettings.tagging_enabled}} + {{edit-category-tab panels=panels selectedTab=selectedTab tab="tags"}} + {{/if}}