diff --git a/app/assets/javascripts/discourse/helpers/topic-link.js.es6 b/app/assets/javascripts/discourse/helpers/topic-link.js.es6
index 4af28e7c6be..f0703c6d9ea 100644
--- a/app/assets/javascripts/discourse/helpers/topic-link.js.es6
+++ b/app/assets/javascripts/discourse/helpers/topic-link.js.es6
@@ -1,6 +1,6 @@
import registerUnbound from 'discourse/helpers/register-unbound';
registerUnbound('topic-link', function(topic) {
- var title = topic.get('fancy_title');
+ var title = topic.get('fancyTitle');
return new Handlebars.SafeString("" + title + "");
});
diff --git a/app/assets/javascripts/discourse/lib/emoji/emoji.js.erb b/app/assets/javascripts/discourse/lib/emoji/emoji.js.erb
index 582af89dfe2..1441f0cdcef 100644
--- a/app/assets/javascripts/discourse/lib/emoji/emoji.js.erb
+++ b/app/assets/javascripts/discourse/lib/emoji/emoji.js.erb
@@ -99,7 +99,7 @@ function checkPrev(prev) {
var lastToken = prev[prev.length-1];
if (lastToken && lastToken.charAt) {
var lastChar = lastToken.charAt(lastToken.length-1);
- if (lastChar !== ' ' && lastChar !== "\n") return false;
+ if (!/\s/.test(lastChar)) return false;
}
}
return true;
@@ -140,10 +140,9 @@ Discourse.Dialect.registerInline(':', function(text, match, prev) {
translationColonRegexp.lastIndex = 0;
var m = translationColonRegexp.exec(text);
if (m && m[0] && text.indexOf(m[0]) === 0) {
-
// Check outer edge
var lastChar = text.charAt(m[0].length);
- if (lastChar && (lastChar !== ' ' && lastChar !== "\n")) return;
+ if (lastChar && !/\s/.test(lastChar)) return;
contents = imageFor(translationsWithColon[m[0]]);
if (contents) {
return [m[0].length, contents];
diff --git a/app/assets/javascripts/discourse/models/topic.js.es6 b/app/assets/javascripts/discourse/models/topic.js.es6
index 9823080304b..923e8104acf 100644
--- a/app/assets/javascripts/discourse/models/topic.js.es6
+++ b/app/assets/javascripts/discourse/models/topic.js.es6
@@ -5,6 +5,20 @@ const Topic = RestModel.extend({
errorTitle: null,
errorLoading: false,
+ fancyTitle: function() {
+ let title = this.get("fancy_title");
+
+ if (this.siteSettings.enable_emoji && title.indexOf(":") >= 0) {
+ title = title.replace(/:\S+:?/, function(m) {
+ const emoji = Discourse.Emoji.translations[m] ? Discourse.Emoji.translations[m] : m.slice(1, m.length - 1),
+ url = Discourse.Emoji.urlFor(emoji);
+ return url ? "" : m;
+ });
+ }
+
+ return title;
+ }.property("fancy_title"),
+
// returns createdAt if there's no bumped date
bumpedAt: function() {
const bumpedAt = this.get('bumped_at');
diff --git a/app/assets/javascripts/discourse/templates/components/featured-topic.hbs b/app/assets/javascripts/discourse/templates/components/featured-topic.hbs
index e0475953014..8cbb7ac5181 100644
--- a/app/assets/javascripts/discourse/templates/components/featured-topic.hbs
+++ b/app/assets/javascripts/discourse/templates/components/featured-topic.hbs
@@ -1,5 +1,5 @@
{{topic-status topic=topic}}
-{{{unbound topic.fancy_title}}}
+{{{unbound topic.fancyTitle}}}
{{topic-post-badges newPosts=topic.totalUnread unseen=topic.unseen url=topic.lastUnreadUrl}}
{{#if latestTopicOnly}}
diff --git a/app/assets/javascripts/discourse/templates/components/header-extra-info.hbs b/app/assets/javascripts/discourse/templates/components/header-extra-info.hbs
index 10c176dd6f3..2f6b95c498c 100644
--- a/app/assets/javascripts/discourse/templates/components/header-extra-info.hbs
+++ b/app/assets/javascripts/discourse/templates/components/header-extra-info.hbs
@@ -8,7 +8,7 @@
{{#if topic.details.loaded}}
{{topic-status topic=topic}}
- {{{topic.fancy_title}}}
+ {{{topic.fancyTitle}}}
{{else}}
{{#if topic.errorLoading}}
{{topic.errorTitle}}
diff --git a/app/assets/javascripts/discourse/templates/topic.hbs b/app/assets/javascripts/discourse/templates/topic.hbs
index a5bb12e87a9..26e8bbc0178 100644
--- a/app/assets/javascripts/discourse/templates/topic.hbs
+++ b/app/assets/javascripts/discourse/templates/topic.hbs
@@ -37,7 +37,7 @@
{{#if model.details.loaded}}
{{topic-status topic=model}}
- {{{model.fancy_title}}}
+ {{{model.fancyTitle}}}
{{/if}}
diff --git a/test/javascripts/models/topic-test.js.es6 b/test/javascripts/models/topic-test.js.es6
index 3bd2230171e..a3f31615f99 100644
--- a/test/javascripts/models/topic-test.js.es6
+++ b/test/javascripts/models/topic-test.js.es6
@@ -71,3 +71,8 @@ test("recover", function() {
blank(topic.get('deleted_by'), "it clears deleted_by");
//ok(Discourse.ajax.calledOnce, "it called recover over the wire");
});
+
+test('fancyTitle', function() {
+ var topic = Topic.create({ siteSettings: { enable_emoji: true }, fancy_title: ":smile: with all the emojis" });
+ equal(topic.get('fancyTitle'), " with all the emojis", "supports emojis");
+});