Sha256: 25678014cac4173b20c322306d47dd9d2871af902a360ad49b86075fa3bfa1c4

Contents?: true

Size: 1.58 KB

Versions: 16

Compression:

Stored size: 1.58 KB

Contents

require 'emoji'

module HTML
  class Pipeline
    # HTML filter that replaces :emoji: with images.
    #
    # Context:
    #   :asset_root (required) - base url to link to emoji sprite
    class EmojiFilter < Filter
      # Build a regexp that matches all valid :emoji: names.
      EmojiPattern = /:(#{Emoji.names.map { |name| Regexp.escape(name) }.join('|')}):/

      def call
        doc.search('text()').each do |node|
          content = node.to_html
          next if !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
      
      # Implementation of validate hook.
      # Errors should raise exceptions or use an existing validator.
      def validate
        needs :asset_root
      end

      # Replace :emoji: with corresponding images.
      #
      # text - String text to replace :emoji: in.
      #
      # Returns a String with :emoji: replaced with images.
      def emoji_image_filter(text)
        return text unless text.include?(':')

        text.gsub EmojiPattern do |match|
          name = $1
          "<img class='emoji' title=':#{name}:' alt=':#{name}:' src='#{File.join(asset_root, "emoji", "#{name}.png")}' height='20' width='20' align='absmiddle' />"
        end
      end

      # The base url to link emoji sprites
      #
      # Raises ArgumentError if context option has not been provided.
      # Returns the context's asset_root.
      def asset_root
        context[:asset_root]
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 3 rubygems

Version Path
html-pipeline-0.3.1 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.3.0 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.2.1 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.2.0 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.1.0 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.14 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.13 lib/html/pipeline/emoji_filter.rb
geothird-html-pipeline-0.0.12 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.12 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.11 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.10 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.8 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.7 lib/html/pipeline/emoji_filter.rb
html-pipeline-no-charlock-0.0.6 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.6 lib/html/pipeline/emoji_filter.rb
html-pipeline-0.0.5 lib/html/pipeline/emoji_filter.rb