diff --git a/app/assets/javascripts/discourse/components/topic-category.js.es6 b/app/assets/javascripts/discourse/components/topic-category.js.es6 index 97fcde13cda..58e58e0d1be 100644 --- a/app/assets/javascripts/discourse/components/topic-category.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-category.js.es6 @@ -1,2 +1,7 @@ -// Injections don't occur without a class -export default Ember.Component.extend(); +import computed from 'ember-addons/ember-computed-decorators'; + +export default Ember.Component.extend({ + + @computed('topic.isPrivateMessage') + +}); diff --git a/app/assets/javascripts/discourse/controllers/composer.js.es6 b/app/assets/javascripts/discourse/controllers/composer.js.es6 index 68b5a75bac4..9416e8df576 100644 --- a/app/assets/javascripts/discourse/controllers/composer.js.es6 +++ b/app/assets/javascripts/discourse/controllers/composer.js.es6 @@ -140,7 +140,8 @@ export default Ember.Controller.extend({ return !this.site.mobileView && this.site.get('can_tag_topics') && canEditTitle && - !creatingPrivateMessage; + !creatingPrivateMessage && + (!this.get('model.topic.isPrivateMessage') || this.site.get('can_tag_pms')); }, @computed('model.whisper', 'model.unlistTopic') diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6 index 49110ce83bf..a4e6b2e08d8 100644 --- a/app/assets/javascripts/discourse/controllers/topic.js.es6 +++ b/app/assets/javascripts/discourse/controllers/topic.js.es6 @@ -104,7 +104,7 @@ export default Ember.Controller.extend(BufferedContent, { @computed('model.isPrivateMessage') canEditTags(isPrivateMessage) { - return !isPrivateMessage && this.site.get('can_tag_topics'); + return this.site.get('can_tag_topics') && (!isPrivateMessage || this.site.get('can_tag_pms')); }, actions: { diff --git a/app/assets/javascripts/discourse/lib/render-tag.js.es6 b/app/assets/javascripts/discourse/lib/render-tag.js.es6 index 127dc5c9fe4..70fa81179f3 100644 --- a/app/assets/javascripts/discourse/lib/render-tag.js.es6 +++ b/app/assets/javascripts/discourse/lib/render-tag.js.es6 @@ -3,7 +3,12 @@ export default function renderTag(tag, params) { tag = Handlebars.Utils.escapeExpression(tag); const classes = ['tag-' + tag, 'discourse-tag']; const tagName = params.tagName || "a"; - const href = (tagName === "a" && !params.noHref) ? " href='" + Discourse.getURL("/tags/" + tag) + "' " : ""; + let path; + if (tagName === "a" && !params.noHref) { + const current_user = Discourse.User.current(); + path = params.isPrivateMessage ? `/u/${current_user.username}/messages/tag/${tag}` : `/tags/${tag}`; + } + const href = path ? ` href='${Discourse.getURL(path)}' ` : ""; if (Discourse.SiteSettings.tag_style || params.style) { classes.push(params.style || Discourse.SiteSettings.tag_style); diff --git a/app/assets/javascripts/discourse/lib/render-tags.js.es6 b/app/assets/javascripts/discourse/lib/render-tags.js.es6 index 6989eab57b1..ef86b502d31 100644 --- a/app/assets/javascripts/discourse/lib/render-tags.js.es6 +++ b/app/assets/javascripts/discourse/lib/render-tags.js.es6 @@ -20,6 +20,7 @@ export function addTagsHtmlCallback(callback, options) { export default function(topic, params){ let tags = topic.tags; let buffer = ""; + const isPrivateMessage = topic.get('isPrivateMessage'); if (params && params.mode === "list") { tags = topic.get("visibleListTags"); @@ -43,7 +44,7 @@ export default function(topic, params){ buffer = "