Sha256: 0e496e5b4124ef132b6aa691ab899c3a8278c24ed6d97bf704d5de9cb134f9c7

Contents?: true

Size: 1.41 KB

Versions: 6

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

module StimulusReflex
  module HTML
    class Document
      DEFAULT_HTML_WITHOUT_FORMAT = Nokogiri::XML::Node::SaveOptions::DEFAULT_HTML & ~Nokogiri::XML::Node::SaveOptions::FORMAT

      delegate :element, to: :@document

      def document_element
        @document&.root
      end

      def outer_html
        document_element ? document_element.to_html(save_with: DEFAULT_HTML_WITHOUT_FORMAT) : ""
      end
      alias_method :to_html, :outer_html

      def inner_html
        document_element ? document_element.inner_html(save_with: DEFAULT_HTML_WITHOUT_FORMAT) : ""
      end

      def initialize(html)
        @document = parsing_class.parse(html.to_s)
        @matches = {
          "body" => Match.new(@document.at_css("body"))
        }
      end

      def empty?
        @document.content.empty?
      end

      def parsing_class
        Nokogiri::HTML5::Document
      end

      def match(selector)
        @matches[selector] ||= Match.new(@document.at_css(selector))
      end

      Match = Struct.new(:element) do
        delegate :present?, to: :element

        def outer_html
          element&.to_html(save_with: DEFAULT_HTML_WITHOUT_FORMAT)
        end

        def to_html
          element&.to_html(save_with: DEFAULT_HTML_WITHOUT_FORMAT)
        end

        def inner_html
          element&.inner_html(save_with: DEFAULT_HTML_WITHOUT_FORMAT)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
stimulus_reflex-3.5.3 lib/stimulus_reflex/html/document.rb
stimulus_reflex-3.5.0.rc4 lib/stimulus_reflex/html/document.rb
stimulus_reflex-3.5.0.rc3 lib/stimulus_reflex/html/document.rb
stimulus_reflex-3.5.0.rc2 lib/stimulus_reflex/html/document.rb
stimulus_reflex-3.5.0.rc1 lib/stimulus_reflex/html/document.rb
stimulus_reflex-3.5.0.pre10 lib/stimulus_reflex/html/document.rb