Class: HTML::Pipeline::EmojiFilter

Inherits:
Filter
  • Object
show all
Defined in:
lib/html/pipeline/emoji_filter.rb

Overview

HTML filter that replaces :emoji: with images.

Context:

:asset_root (required) - base url to link to emoji sprite
:asset_path (optional) - url path to link to emoji sprite. :file_name can be used as a placeholder for the sprite file name. If no asset_path is set "emoji/:file_name" is used.

Instance Attribute Summary

Attributes inherited from Filter

#context, #result

Instance Method Summary collapse

Methods inherited from Filter

#base_url, call, #current_user, #doc, #has_ancestor?, #html, #initialize, #needs, #parse_html, #repository, #search_text_nodes, to_document, to_html

Constructor Details

This class inherits a constructor from HTML::Pipeline::Filter

Instance Method Details

#asset_path(name) ⇒ Object

The url path to link emoji sprites

:file_name can be used in the asset_path as a placeholder for the sprite file name. If no asset_path is set in the context “emoji/:file_name” is used. Returns the context's asset_path or the default path if no context asset_path is given.



59
60
61
62
63
64
65
# File 'lib/html/pipeline/emoji_filter.rb', line 59

def asset_path(name)
  if context[:asset_path]
    context[:asset_path].gsub(":file_name", emoji_filename(name))
  else
    File.join("emoji", emoji_filename(name))
  end
end

#asset_rootObject

The base url to link emoji sprites

Raises ArgumentError if context option has not been provided. Returns the context's asset_root.



51
52
53
# File 'lib/html/pipeline/emoji_filter.rb', line 51

def asset_root
  context[:asset_root]
end

#callObject



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/html/pipeline/emoji_filter.rb', line 17

def call
  search_text_nodes(doc).each do |node|
    content = node.to_html
    next unless content.include?(':')
    next if has_ancestor?(node, %w(pre code))
    html = emoji_image_filter(content)
    next if html == content
    node.replace(html)
  end
  doc
end

#emoji_image_filter(text) ⇒ Object

Replace :emoji: with corresponding images.

text - String text to replace :emoji: in.

Returns a String with :emoji: replaced with images.



40
41
42
43
44
45
# File 'lib/html/pipeline/emoji_filter.rb', line 40

def emoji_image_filter(text)
  text.gsub(emoji_pattern) do |match|
    name = $1
    "<img class='emoji' title=':#{name}:' alt=':#{name}:' src='#{emoji_url(name)}' height='20' width='20' align='absmiddle' />"
  end
end

#validateObject

Implementation of validate hook. Errors should raise exceptions or use an existing validator.



31
32
33
# File 'lib/html/pipeline/emoji_filter.rb', line 31

def validate
  needs :asset_root
end