Sha256: 88581fe11e1d340eb8cba16f2654d404407c0b66c807aff914b33466c0612f43

Contents?: true

Size: 639 Bytes

Versions: 7

Compression:

Stored size: 639 Bytes

Contents

require 'kramdown'
require 'kramdown-parser-gfm'

class Kramdown::Parser::NoopenerGFM < Kramdown::Parser::GFM
  SAFE_OPTS = { "target" => "_blank", "rel"=>"nofollow noopener noreferrer" }.freeze

  def initialize(source, options)
    super
    @same_tab_domains = options.fetch(:same_tab_domains, [])
  end

  def update_elements(element)
    if element.type == :a && \
       element.attr.respond_to?(:[]) && \
       (href = element.attr['href']) && \
       URI::DEFAULT_PARSER.regexp[:ABS_URI].match(href) && \
       !@same_tab_domains.include?(URI::parse(href).host)

      element.attr.merge!(SAFE_OPTS)
    end
    super
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
jekyll-octopod-0.9.23 lib/kramdown/parser/noopener_gfm.rb
jekyll-octopod-0.9.22 lib/kramdown/parser/noopener_gfm.rb
jekyll-octopod-0.9.21 lib/kramdown/parser/noopener_gfm.rb
jekyll-octopod-0.9.20 lib/kramdown/parser/noopener_gfm.rb
jekyll-octopod-0.9.19 lib/kramdown/parser/noopener_gfm.rb
jekyll-octopod-0.9.18 lib/kramdown/parser/noopener_gfm.rb
jekyll-octopod-0.9.17 lib/kramdown/parser/noopener_gfm.rb