A gem to save the day: 
html-pipeline

Tamas Michelberger

 

 

SSP

@tmichelberger

What is this?

Chainable DOM based content filtering with pipes and filters. Mostly filters...

Pipes and filters

A simple example

MarkdownPipeline = HTML::Pipeline.new [
  MarkdownFilter,
  SanitizationFilter,
  ImageMaxWidthFilter,
  HttpsFilter,
  MentionFilter,
  EmojiFilter,
  SyntaxHighlightFilter
], :gfm => true # enable github formatted markdown

result = MarkdownPipeline.call <<-CODE
This is *great*:

    some_code(:first)

CODE
puts result[:output].to_s

A custom filter

class IHeartRubyFilter < HTML::Pipeline::Filter
  def call
    doc.search("a").each do |a|
      a['title'] = 'I <3 Ruby!'
    end
    doc
  end
end

result = IHeartRubyFilter.call(%(<a href="https://www.ruby-lang.org">Ruby</a>))
puts result[:output].to_s

A class inheriting from HTML::Pipeline::Filter and implements a call method. 

passing values between filters

contexts and validation

def validate
  needs :url_options unless url_options
end

def url_options
  context[:url_options]
end

Rich built-in filters

  • MentionFilter - replace @user mentions with links
  • AutolinkFilter - auto_linking urls in HTML
  • EmojiFilter - everyone loves emoji!
  • HttpsFilter - HTML Filter for replacing http github urls with https versions.
  • MarkdownFilter - convert markdown to html
  • SanitizationFilter - whitelist sanitize user markup
  • SyntaxHighlightFilter - code syntax highlighter

and some more...

Links

Thanks!

Questions?

and also we are hiring!

Made with Slides.com