Sha256: faebf11f602d76ae8873850472b1dab4797b0571e4de40f1d4dd42df0e321712

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

module MicroMicro
  module Parsers
    class UrlPropertyParser < BasePropertyParser
      HTML_ATTRIBUTES_MAP = {
        "href"   => ["a", "area", "link"],
        "src"    => ["audio", "iframe", "img", "source", "video"],
        "poster" => ["video"],
        "data"   => ["object"]
      }.freeze

      EXTENDED_HTML_ATTRIBUTES_MAP = {
        "title" => ["abbr"],
        "value" => ["data", "input"]
      }.freeze

      # @see https://microformats.org/wiki/microformats2-parsing#parsing_a_u-_property
      #   microformats.org: microformats2 parsing specification § Parsing a +u-+ property
      # @see https://microformats.org/wiki/microformats2-parsing#parse_an_img_element_for_src_and_alt
      #   microformats.org: microformats2 parsing specification § Parse an img element for src and alt
      #
      # @return [String, Hash{Symbol => String}]
      def value
        @value ||=
          if node.matches?("img[alt], img[srcset]")
            ImageElementParser.new(node, resolved_value).to_h
          else
            resolved_value
          end
      end

      private

      # @return [String, nil]
      def attribute_value
        Helpers.attribute_value_from(node, HTML_ATTRIBUTES_MAP)
      end

      # @return [String, nil]
      def extended_attribute_value
        Helpers.attribute_value_from(node, EXTENDED_HTML_ATTRIBUTES_MAP)
      end

      # @return [String]
      def resolved_value
        @resolved_value ||= node.document.resolve_relative_url(unresolved_value.strip)
      end

      # @return [String]
      def text_content
        Helpers.text_content_from(node)
      end

      # @return [String]
      def unresolved_value
        attribute_value || value_class_pattern_value || extended_attribute_value || text_content
      end

      # @return [String, nil]
      def value_class_pattern_value
        ValueClassPatternParser.new(node).value
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
micromicro-5.0.1 lib/micro_micro/parsers/url_property_parser.rb