Add emoji to Rails

作者:周星 发布:2017-10-07

        bowtie现在很多网站都支持 emoji 表情,比如我们在 github 在 commit message 的时候就可以加上 emoji,你可以看这个 pull request 的 commit message 最后面的表情https://github.com/Dogzhou/xingishere/pull/7,emoji 提供了大量的表情,你可以在[这里](http://www.emoji-cheat-sheet.com/)查找所有表情,今天我们来看如何在 Rails 项目中支持 emoji 表情stuck_out_tongue

首先我们引入 gemoji 这个 gem:

gem 'gemoji'

在 Rakefile 里添加

# Rakefile
load 'tasks/emoji.rake'

然后执行

$ rake emoji

         这个命令把 emoji 表情图片从 gem 的源码中复制到 Rails 的 public 目录下smile_cat,把图片保存在一个固定的地方,这种方式是被官方推荐的sunglasses,当然你也可以手动把所有图片添加到 assets 加载的目录angry

# config/application.rb
config.assets.paths << Emoji.images_path

然后在部署的时候把它们编译一下 worried

# config/application.rb
config.assets.precompile << "emoji/**/*.png"

        但是因为图片数量过大scream,把它们都添加到 path 中可能会降低应用程序对其它文件的查找fearful,即使 emoji 没有变化,但是在 deploy 的时候编译所有的 emoji 仍然会增加开销,遍历那么多的 emoji,所以不推荐这样做thumbsdown

下面是官方给的 Rails module helper 示例:

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

从字符串中用正则表达式提取出所有两个冒号(包括两个冒号)之间的内容,如果它是一个 emoji,则把它对应的图片地址找出来并替换,当然你可以把它写的更复杂或者更简单一些。

gemoji 提供了一些方法来使 emoji 在 name 和 unicode 之间互相转换:

>> Emoji.find_by_alias("cat").raw
=> "cat"  # Don't see a cat? That's U+1F431.

>> Emoji.find_by_unicode("\u{1f431}").name
=> "cat"

博主昨天刚给本站的博文增加了对 emoji 的支持,所以你才可以看到本文中有大量的有趣表情laughing

支付宝扫码赞助博主


评论(2)

Qq3

jiaji第1楼

❤️

2015-09-04 10:44:01

Qq3

高老庄第2楼

:cat: , :heart: , :dog:

2015-09-16 02:32:12