Sha256: 3d980f5050095bc6e88c0d1ddff9d307a65b6dc127620076c7bb469dff5b51ce

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module MicroMicro
  module Parsers
    class ImpliedPhotoPropertyParser < BaseImpliedPropertyParser
      CSS_SELECTORS_ARRAY = ['> img[src]:only-of-type', '> object[data]:only-of-type'].freeze

      HTML_ELEMENTS_MAP = {
        'img'    => 'src',
        'object' => 'data'
      }.freeze

      # @see https://microformats.org/wiki/microformats2-parsing#parsing_for_implied_properties
      #   microformats.org: microformats2 parsing specification § Parsing for implied properties
      # @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}, nil]
      def value
        @value ||=
          if attribute_value
            return attribute_value unless candidate_node.matches?('img[alt]')

            {
              value: attribute_value,
              alt: candidate_node['alt'].strip
            }
          end
      end

      private

      # @return [Array]
      def child_nodes
        nodes = [node.at_css(*CSS_SELECTORS_ARRAY)]

        nodes << node.first_element_child.at_css(*CSS_SELECTORS_ARRAY) if node.element_children.one?

        nodes.compact.reject { |child_node| Helpers.item_node?(child_node) }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
micromicro-3.0.0 lib/micro_micro/parsers/implied_photo_property_parser.rb