Class: SimpleFormat::Emoji

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_format/emoji.rb

Instance Method Summary collapse

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_delimiterObject

分隔符



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_hostObject

主机地址



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_pathObject

资源路径



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_sizeObject

图标尺寸



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

#namesObject

名称列表



117
118
119
# File 'lib/simple_format/emoji.rb', line 117

def names
  @emoji_by_name.keys
end

#names_regexObject

名称匹配表达式



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

#unicodesObject

字符列表



121
122
123
# File 'lib/simple_format/emoji.rb', line 121

def unicodes
  @emoji_by_unicode.keys
end

#unicodes_regexObject

字符匹配表达式



129
130
131
# File 'lib/simple_format/emoji.rb', line 129

def unicodes_regex
  @emoji_unicode_regex
end