Class: SimpleFormat::Emoji
- Inherits:
-
Object
- Object
- SimpleFormat::Emoji
- Defined in:
- lib/simple_format/emoji.rb
Instance Method Summary collapse
-
#asset_delimiter ⇒ Object
分隔符.
- #asset_delimiter=(delimiter) ⇒ Object
-
#asset_host ⇒ Object
主机地址.
-
#asset_host=(host) ⇒ Object
设置主机地址.
-
#asset_path ⇒ Object
资源路径.
-
#asset_path=(path) ⇒ Object
设置路径.
-
#asset_size ⇒ Object
图标尺寸.
-
#asset_size=(size) ⇒ Object
设置图标尺寸.
-
#find_by_name(name) ⇒ Object
通过(名称)表情.
-
#find_by_unicode(moji) ⇒ Object
通过(字符)找表情.
-
#image_url_for_name(name) ⇒ Object
通过(名称)合成图片地址.
-
#image_url_for_unicode(unicode) ⇒ Object
通过(字符)合成图片地址.
-
#initialize(mapping = nil) ⇒ Emoji
constructor
A new instance of Emoji.
-
#names ⇒ Object
名称列表.
-
#names_regex ⇒ Object
名称匹配表达式.
-
#replace_emoji_with_images(string) ⇒ Object
通过(名称、字符)替换表情.
-
#replace_name_with_images(string) ⇒ Object
通过(名称)替换表情.
-
#replace_unicode_with_images(string) ⇒ Object
通过(字符)替换表情.
-
#unicodes ⇒ Object
字符列表.
-
#unicodes_regex ⇒ Object
字符匹配表达式.
Constructor Details
#initialize(mapping = nil) ⇒ Emoji
Returns a new instance of Emoji.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/simple_format/emoji.rb', line 8 def initialize(mapping=nil) mapping ||= begin emoji_json = File.read(File.absolute_path(File.dirname(__FILE__) + '/../../config/index.json')) MultiJson.load(emoji_json, symbolize_keys: true) end @emoji_by_name = {} @emoji_by_unicode = {} mapping.each do |emoji_hash| name = emoji_hash[:name] @emoji_by_name[name] = emoji_hash if name unicode = emoji_hash[:unicode] @emoji_by_unicode[unicode] = emoji_hash if unicode end @emoji_name_regex = /:([a-z0-9\+\-_]+):/ @emoji_unicode_regex = /#{@emoji_by_unicode.keys.join('|')}/ end |
Instance Method Details
#asset_delimiter ⇒ Object
分隔符
54 55 56 |
# File 'lib/simple_format/emoji.rb', line 54 def asset_delimiter @asset_delimiter || '_' end |
#asset_delimiter=(delimiter) ⇒ Object
57 58 59 |
# File 'lib/simple_format/emoji.rb', line 57 def asset_delimiter=(delimiter) @asset_delimiter = delimiter end |
#asset_host ⇒ Object
主机地址
30 31 32 |
# File 'lib/simple_format/emoji.rb', line 30 def asset_host @asset_host || 'emoji.qiniudn.com' end |
#asset_host=(host) ⇒ Object
设置主机地址
34 35 36 |
# File 'lib/simple_format/emoji.rb', line 34 def asset_host=(host) @asset_host = host end |
#asset_path ⇒ Object
资源路径
38 39 40 |
# File 'lib/simple_format/emoji.rb', line 38 def asset_path @asset_path || '/' end |
#asset_path=(path) ⇒ Object
设置路径
42 43 44 |
# File 'lib/simple_format/emoji.rb', line 42 def asset_path=(path) @asset_path = path end |
#asset_size ⇒ Object
图标尺寸
46 47 48 |
# File 'lib/simple_format/emoji.rb', line 46 def asset_size @asset_size || '' end |
#asset_size=(size) ⇒ Object
设置图标尺寸
50 51 52 |
# File 'lib/simple_format/emoji.rb', line 50 def asset_size=(size) @asset_size = size end |
#find_by_name(name) ⇒ Object
通过(名称)表情
113 114 115 |
# File 'lib/simple_format/emoji.rb', line 113 def find_by_name(name) @emoji_by_name[name] end |
#find_by_unicode(moji) ⇒ Object
通过(字符)找表情
109 110 111 |
# File 'lib/simple_format/emoji.rb', line 109 def find_by_unicode(moji) @emoji_by_unicode[moji] end |
#image_url_for_name(name) ⇒ Object
通过(名称)合成图片地址
94 95 96 97 98 99 100 101 102 |
# File 'lib/simple_format/emoji.rb', line 94 def image_url_for_name(name) image_url = "#{asset_host}#{ File.join(asset_path, name) }.png" if image_url.present? if asset_size.present? && asset_size.in?(sizes) image_url = [image_url, asset_size].join(asset_delimiter) end end return image_url end |
#image_url_for_unicode(unicode) ⇒ Object
通过(字符)合成图片地址
104 105 106 107 |
# File 'lib/simple_format/emoji.rb', line 104 def image_url_for_unicode(unicode) emoji = find_by_unicode(unicode) image_url_for_name(emoji[:name]) unless emoji.nil? end |
#names ⇒ Object
名称列表
117 118 119 |
# File 'lib/simple_format/emoji.rb', line 117 def names @emoji_by_name.keys end |
#names_regex ⇒ Object
名称匹配表达式
125 126 127 |
# File 'lib/simple_format/emoji.rb', line 125 def names_regex @emoji_name_regex end |
#replace_emoji_with_images(string) ⇒ Object
通过(名称、字符)替换表情
61 62 63 64 65 66 67 |
# File 'lib/simple_format/emoji.rb', line 61 def replace_emoji_with_images(string) return string unless string html ||= string.dup html = replace_name_with_images(html) html = replace_unicode_with_images(html.to_str) return html end |
#replace_name_with_images(string) ⇒ Object
通过(名称)替换表情
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/simple_format/emoji.rb', line 69 def replace_name_with_images(string) unless string && string.match(names_regex) return string end string.to_str.gsub(names_regex) do |match| if names.include?($1) %Q{<img class="emoji" src="//#{ image_url_for_name($1) }" />} else match end end end |
#replace_unicode_with_images(string) ⇒ Object
通过(字符)替换表情
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/simple_format/emoji.rb', line 83 def replace_unicode_with_images(string) unless string && string.match(unicodes_regex) return string end html ||= string.dup html.gsub!(unicodes_regex) do |unicode| %Q{<img class="emoji" src="//#{ image_url_for_unicode(unicode) }" />} end end |
#unicodes ⇒ Object
字符列表
121 122 123 |
# File 'lib/simple_format/emoji.rb', line 121 def unicodes @emoji_by_unicode.keys end |
#unicodes_regex ⇒ Object
字符匹配表达式
129 130 131 |
# File 'lib/simple_format/emoji.rb', line 129 def unicodes_regex @emoji_unicode_regex end |