From 9ee2c121c12e9e3bfad0d5a6bc2552b7808b4583 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 3 Jul 2019 09:23:40 +0200 Subject: [PATCH] FIX: ensures emoji helper is working with custom emojis (#7843) --- app/helpers/emoji_helper.rb | 5 ++++- app/models/emoji.rb | 5 +++++ lib/plugin/instance.rb | 4 ++++ spec/helpers/emoji_helper_spec.rb | 8 ++++++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/helpers/emoji_helper.rb b/app/helpers/emoji_helper.rb index f1f13b1e579..fcf0462f349 100644 --- a/app/helpers/emoji_helper.rb +++ b/app/helpers/emoji_helper.rb @@ -7,7 +7,10 @@ module EmojiHelper str = str.gsub(/:([\w\-+]*(?::t\d)?):/) do |name| code = $1 - if Emoji.exists?(code) + if code && Emoji.custom?(code) + emoji = Emoji[code] + "\"#{code}\"" + elsif code && Emoji.exists?(code) "\"#{code}\"" else name diff --git a/app/models/emoji.rb b/app/models/emoji.rb index 22076c03851..94f58128c26 100644 --- a/app/models/emoji.rb +++ b/app/models/emoji.rb @@ -38,6 +38,11 @@ class Emoji Discourse.cache.fetch(cache_key("tonable_emojis")) { db['tonableEmojis'] } end + def self.custom?(name) + name = name.delete_prefix(':').delete_suffix(':') + Emoji.custom.detect { |e| e.name == name }.present? + end + def self.exists?(name) Emoji[name].present? end diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb index dea2adbb878..33da7defb7d 100644 --- a/lib/plugin/instance.rb +++ b/lib/plugin/instance.rb @@ -19,6 +19,10 @@ class Plugin::CustomEmoji emojis[name] = url end + def self.unregister(name) + emojis.delete(name) + end + def self.translations @@translations ||= {} end diff --git a/spec/helpers/emoji_helper_spec.rb b/spec/helpers/emoji_helper_spec.rb index 7d7fa32d6c5..7dec3b3c55d 100644 --- a/spec/helpers/emoji_helper_spec.rb +++ b/spec/helpers/emoji_helper_spec.rb @@ -7,10 +7,14 @@ describe EmojiHelper do describe "emoji_codes_to_img" do it "replaces emoji codes by images" do - str = "This is a good day :woman: :man:t4:" + Plugin::CustomEmoji.register("xxxxxx", "/public/xxxxxx.png") + + str = "This is a good day :xxxxxx: :woman: :man:t4:" replaced_str = helper.emoji_codes_to_img(str) - expect(replaced_str).to eq("This is a good day \"woman\" \"man:t4\"") + expect(replaced_str).to eq("This is a good day \"xxxxxx\" \"woman\" \"man:t4\"") + + Plugin::CustomEmoji.unregister("xxxxxx") end it "doesn't replace if code doesn't exist" do