FEATURE: remap emojis back for push notifications and desktop alerts

This commit is contained in:
Sam 2016-10-11 13:03:21 +11:00
parent 6031e692f0
commit 89daa43754
5 changed files with 28 additions and 7 deletions

View File

@ -173,6 +173,19 @@ class Emoji
@unicode_replacements
end
def self.lookup_unicode(name)
@reverse_map ||= begin
map = {}
db['emojis'].each do |e|
next if e['name'] == 'tm'
code = replacement_code(e['code'])
map[e['name']] = code if code
end
map
end
@reverse_map[name]
end
def self.unicode_replacements_json
@unicode_replacements_json ||= unicode_replacements.to_json
end

View File

@ -382,7 +382,7 @@ class PostAlerter
post_number: original_post.post_number,
topic_title: original_post.topic.title,
topic_id: original_post.topic.id,
excerpt: original_post.excerpt(400, text_entities: true, strip_links: true),
excerpt: original_post.excerpt(400, text_entities: true, strip_links: true, remap_emoji: true),
username: original_username,
post_url: post_url
}

View File

@ -14,6 +14,7 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
@markdown_images = options[:markdown_images] == true
@keep_newlines = options[:keep_newlines] == true
@keep_emoji_images = options[:keep_emoji_images] == true
@remap_emoji = options[:remap_emoji] == true
@start_excerpt = false
end
@ -51,7 +52,11 @@ class ExcerptParser < Nokogiri::XML::SAX::Document
attributes = Hash[*attributes.flatten]
if attributes["class"] == 'emoji'
if @keep_emoji_images
if @remap_emoji
title = (attributes["alt"] || "").gsub(":", "")
title = Emoji.lookup_unicode(title) || attributes["alt"]
return characters(title)
elsif @keep_emoji_images
return include_tag(name, attributes)
else
return characters(attributes["alt"])

View File

@ -265,6 +265,11 @@ HTML
expect(PrettyText.excerpt(emoji_image, 100, { keep_emoji_images: true })).to match_html(emoji_image)
end
it "should have an option to remap emoji to code points" do
emoji_image = "I <img src='/images/emoji/emoji_one/heart.png?v=1' title=':heart:' class='emoji' alt=':heart:'> you <img src='/images/emoji/emoji_one/heart.png?v=1' title=':unknown:' class='emoji' alt=':unknown:'> "
expect(PrettyText.excerpt(emoji_image, 100, { remap_emoji: true })).to match_html("I ❤ you :unknown:")
end
it "should have an option to preserve emoji codes" do
emoji_code = "<img src='/images/emoji/emoji_one/heart.png?v=1' title=':heart:' class='emoji' alt=':heart:'>"
expect(PrettyText.excerpt(emoji_code, 100)).to eq(":heart:")

View File

@ -327,7 +327,7 @@ describe PostAlerter do
end
describe "push_notification" do
let(:mention_post) { create_post_with_alerts(user: user, raw: 'Hello @eviltrout')}
let(:mention_post) { create_post_with_alerts(user: user, raw: 'Hello @eviltrout :heart:')}
let(:topic) { mention_post.topic }
it "correctly pushes notifications if configured correctly" do
@ -344,8 +344,6 @@ describe PostAlerter do
push_url: "https://site2.com/push")
end
body = nil
headers = nil
@ -368,7 +366,7 @@ describe PostAlerter do
'post_number' => 1,
'topic_title' => topic.title,
'topic_id' => topic.id,
'excerpt' => 'Hello @eviltrout',
'excerpt' => 'Hello @eviltrout',
'username' => user.username,
'url' => UrlHelper.absolute(mention_post.url),
'client_id' => 'xxx0'
@ -378,7 +376,7 @@ describe PostAlerter do
'post_number' => 1,
'topic_title' => topic.title,
'topic_id' => topic.id,
'excerpt' => 'Hello @eviltrout',
'excerpt' => 'Hello @eviltrout',
'username' => user.username,
'url' => UrlHelper.absolute(mention_post.url),
'client_id' => 'xxx1'