Sha256: db442053dc788a1b8c05bdeccd9768005c9abfc317b7940e4349e2b78ab5a1ca

Contents?: true

Size: 1.34 KB

Versions: 30

Compression:

Stored size: 1.34 KB

Contents

require "addressable/uri"
require "kramdown/options"

module Kramdown
  module Options
    class AlwaysEqual
      def ==(_other)
        true
      end
    end

    define(:document_domains, Object, %w[www.gov.uk], <<~DESCRIPTION) do |val|
      Defines the domains which are considered local to the document

      Default: www.gov.uk
      Used by: KramdownWithAutomaticExternalLinks
    DESCRIPTION
      simple_array_validator(val, :document_domains, AlwaysEqual.new)
    end
  end

  module Parser
    class Govuk < Kramdown::Parser::Kramdown
      CUSTOM_INLINE_ELEMENTS = %w[govspeak-embed-attachment-link].freeze

      def initialize(source, options)
        @document_domains = options[:document_domains] || %w[www.gov.uk]
        super
      end

      def add_link(element, href, title, alt_text = nil, ial = nil)
        if element.type == :a
          begin
            host = Addressable::URI.parse(href).host
            unless host.nil? || @document_domains.compact.include?(host)
              element.attr["rel"] = "external"
            end
          rescue Addressable::URI::InvalidURIError
            # it's safe to ignore these very *specific* exceptions
          end

        end
        super
      end

      def parse_block_html
        return false if CUSTOM_INLINE_ELEMENTS.include?(@src[1].downcase)

        super
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
govspeak-8.2.1 lib/kramdown/parser/govuk.rb
govspeak-8.2.0 lib/kramdown/parser/govuk.rb
govspeak-8.1.0 lib/kramdown/parser/govuk.rb
govspeak-8.0.1 lib/kramdown/parser/govuk.rb
govspeak-8.0.0 lib/kramdown/parser/govuk.rb
govspeak-7.1.1 lib/kramdown/parser/govuk.rb
govspeak-7.1.0 lib/kramdown/parser/govuk.rb
govspeak-7.0.2 lib/kramdown/parser/govuk.rb
govspeak-7.0.1 lib/kramdown/parser/govuk.rb
govspeak-7.0.0 lib/kramdown/parser/govuk.rb
govspeak-6.8.4 lib/kramdown/parser/govuk.rb
govspeak-6.8.3 lib/kramdown/parser/govuk.rb
govspeak-6.8.2 lib/kramdown/parser/govuk.rb
govspeak-6.8.1 lib/kramdown/parser/govuk.rb
govspeak-6.8.0 lib/kramdown/parser/govuk.rb
govspeak-6.7.8 lib/kramdown/parser/govuk.rb
govspeak-6.7.7 lib/kramdown/parser/govuk.rb
govspeak-6.7.6 lib/kramdown/parser/govuk.rb
govspeak-6.7.5 lib/kramdown/parser/govuk.rb
govspeak-6.7.4 lib/kramdown/parser/govuk.rb