diff --git a/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 b/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 index 5484dbae8e2..07825a3bca0 100644 --- a/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 +++ b/app/assets/javascripts/select-kit/components/mini-tag-chooser.js.es6 @@ -214,28 +214,6 @@ export default ComboBox.extend(TagsMixin, { this.destroyTags(tags); }, - _sanitizeContent(content, property) { - switch (typeof content) { - case "string": - // See lib/discourse_tagging#clean_tag. - return content - .trim() - .replace(/\s+/, "-") - .replace(/[\/\?#\[\]@!\$&'\(\)\*\+,;=\.%\\`^\s|\{\}"<>]+/, "") - .substring(0, this.siteSettings.max_tag_length); - default: - return get(content, this.get(property)); - } - }, - - valueForContentItem(content) { - return this._sanitizeContent(content, "valueAttribute"); - }, - - _nameForContent(content) { - return this._sanitizeContent(content, "nameProperty"); - }, - actions: { onSelect(tag) { this.set("tags", makeArray(this.get("tags")).concat(tag)); diff --git a/app/assets/javascripts/select-kit/mixins/tags.js.es6 b/app/assets/javascripts/select-kit/mixins/tags.js.es6 index 0f0bef09ad4..26438da9f8e 100644 --- a/app/assets/javascripts/select-kit/mixins/tags.js.es6 +++ b/app/assets/javascripts/select-kit/mixins/tags.js.es6 @@ -68,5 +68,20 @@ export default Ember.Mixin.create({ } return true; + }, + + createContentFromInput(input) { + // See lib/discourse_tagging#clean_tag. + var content = input + .trim() + .replace(/\s+/g, "-") + .replace(/[\/\?#\[\]@!\$&'\(\)\*\+,;=\.%\\`^\s|\{\}"<>]+/g, "") + .substring(0, this.siteSettings.max_tag_length); + + if (this.siteSettings.force_lowercase_tags) { + content = content.toLowerCase(); + } + + return content; } }); diff --git a/config/site_settings.yml b/config/site_settings.yml index 4af22bda68a..28c616ac89b 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -1801,4 +1801,5 @@ tags: remove_muted_tags_from_latest: default: false force_lowercase_tags: - default: true \ No newline at end of file + default: true + client: true diff --git a/test/javascripts/components/mini-tag-chooser-test.js.es6 b/test/javascripts/components/mini-tag-chooser-test.js.es6 index d08379be6c1..194f9591ae9 100644 --- a/test/javascripts/components/mini-tag-chooser-test.js.es6 +++ b/test/javascripts/components/mini-tag-chooser-test.js.es6 @@ -12,6 +12,7 @@ componentTest("default", { beforeEach() { this.siteSettings.max_tag_length = 24; + this.siteSettings.force_lowercase_tags = true; this.site.set("can_create_tag", true); this.set("tags", ["jeff", "neil", "arpit"]); @@ -85,11 +86,11 @@ componentTest("default", { ); await this.get("subject").expand(); - await this.get("subject").fillInFilter("invalid'tag"); + await this.get("subject").fillInFilter("invalid' Tag"); await this.get("subject").keyboard("enter"); assert.deepEqual( this.get("tags"), - ["jeff", "neil", "arpit", "régis", "joffrey", "invalidtag"], + ["jeff", "neil", "arpit", "régis", "joffrey", "invalid-tag"], "it strips invalid characters in tag" ); @@ -98,7 +99,7 @@ componentTest("default", { await this.get("subject").keyboard("enter"); assert.deepEqual( this.get("tags"), - ["jeff", "neil", "arpit", "régis", "joffrey", "invalidtag"], + ["jeff", "neil", "arpit", "régis", "joffrey", "invalid-tag"], "it does not allow creating long tags" );