emoji.json with minimal raw representations
If a raw representation of emoji includes VARIATION SELECTOR 16, but a browser would render it as a color emoji even without that character, drop the VARIATION SELECTOR 16 from the raw representation.
gemoji
This library contains character information about native emoji, as well as image files for a few custom emoji.
Installation
Add gemoji to your Gemfile.
gem 'gemoji'
Extract images
To obtain image files as fallbacks for browsers and OS's that don't support
emoji, run the gemoji extract command on macOS Sierra or later:
bundle exec gemoji extract public/images/emoji
This will extract images into filenames such as:
public/images/emoji/octocat.pngpublic/images/emoji/unicode/1f9c0.png(the:cheese:emoji)
Example Rails Helper
This would allow emojifying content such as: it's raining :cat:s and :dog:s!
See the Emoji cheat sheet for more examples.
module EmojiHelper
def emojify(content)
h(content).to_str.gsub(/:([\w+-]+):/) do |match|
if emoji = Emoji.find_by_alias($1)
%(<img alt="#$1" src="#{image_path("emoji/#{emoji.image_filename}")}" style="vertical-align:middle" width="20" height="20" />)
else
match
end
end.html_safe if content.present?
end
end
Unicode mapping
Translate emoji names to unicode and vice versa.
>> Emoji.find_by_alias("cat").raw
=> "🐱" # Don't see a cat? That's U+1F431.
>> Emoji.find_by_unicode("\u{1f431}").name
=> "cat"
Adding new emoji
You can add new emoji characters to the Emoji.all list:
emoji = Emoji.create("music") do |char|
char.add_alias "song"
char.add_unicode_alias "\u{266b}"
char.add_tag "notes"
end
emoji.name #=> "music"
emoji.raw #=> "♫"
emoji.image_filename #=> "unicode/266b.png"
# Creating custom emoji (no Unicode aliases):
emoji = Emoji.create("music") do |char|
char.add_tag "notes"
end
emoji.custom? #=> true
emoji.image_filename #=> "music.png"
As you create new emoji, you must ensure that you also create and put the images
they reference by their image_filename to your assets directory.
You can customize image_filename with:
emoji = Emoji.create("music") do |char|
char.image_filename = "subdirectory/my_emoji.gif"
end
For existing emojis, you can edit the list of aliases or add new tags in an edit block:
emoji = Emoji.find_by_alias "musical_note"
Emoji.edit_emoji(emoji) do |char|
char.add_alias "music"
char.add_unicode_alias "\u{266b}"
char.add_tag "notes"
end
Emoji.find_by_alias "music" #=> emoji
Emoji.find_by_unicode "\u{266b}" #=> emoji
octocat, squirrel, shipit Copyright (c) 2013 GitHub Inc. All rights reserved. bowtie, neckbeard, fu Copyright (c) 2013 37signals, LLC. All rights reserved. feelsgood, finnadie, goberserk, godmode, hurtrealbad, rage 1-4, suspect Copyright (c) 2013 id Software. All rights reserved. trollface Copyright (c) 2013 whynne@deviantart. All rights reserved. Source code: Copyright (c) 2013 GitHub, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.