Class: Nokogiri::HTML5::DocumentFragment

Inherits:
Nokogiri::HTML4::DocumentFragment show all
Defined in:
lib/nokogiri/html5/document_fragment.rb

Overview

Note:

HTML5 functionality is not available when running JRuby.

Since:

  • v1.12.0

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(doc, tags = nil, ctx = nil, options = {}) ⇒ DocumentFragment

Create a document fragment.

Since:

  • v1.12.0



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/nokogiri/html5/document_fragment.rb', line 29

def initialize(doc, tags = nil, ctx = nil, options = {})
  self.document = doc
  self.errors = []
  return self unless tags

  max_attributes = options[:max_attributes] || Nokogiri::Gumbo::DEFAULT_MAX_ATTRIBUTES
  max_errors = options[:max_errors] || Nokogiri::Gumbo::DEFAULT_MAX_ERRORS
  max_depth = options[:max_tree_depth] || Nokogiri::Gumbo::DEFAULT_MAX_TREE_DEPTH
  tags = Nokogiri::HTML5.read_and_encode(tags, nil)
  Nokogiri::Gumbo.fragment(self, tags, ctx, max_attributes, max_errors, max_depth)
end

Instance Attribute Details

#documentObject

Since:

  • v1.12.0



25
26
27
# File 'lib/nokogiri/html5/document_fragment.rb', line 25

def document
  @document
end

#errorsObject

Since:

  • v1.12.0



26
27
28
# File 'lib/nokogiri/html5/document_fragment.rb', line 26

def errors
  @errors
end

Class Method Details

.parse(tags, encoding = nil, options = {}) ⇒ Object

Parse a document fragment from tags, returning a Nodeset.

Since:

  • v1.12.0



48
49
50
51
52
53
# File 'lib/nokogiri/html5/document_fragment.rb', line 48

def self.parse(tags, encoding = nil, options = {})
  doc = HTML5::Document.new
  tags = HTML5.read_and_encode(tags, encoding)
  doc.encoding = "UTF-8"
  new(doc, tags, nil, options)
end

Instance Method Details

#extract_params(params) ⇒ Object

:nodoc:

Since:

  • v1.12.0



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/nokogiri/html5/document_fragment.rb', line 55

def extract_params(params) # :nodoc:
  handler = params.find do |param|
    ![Hash, String, Symbol].include?(param.class)
  end
  params -= [handler] if handler

  hashes = []
  while Hash === params.last || params.last.nil?
    hashes << params.pop
    break if params.empty?
  end
  ns, binds = hashes.reverse

  ns ||=
    begin
      ns = {}
      children.each { |child| ns.merge!(child.namespaces) }
      ns
    end

  [params, handler, ns, binds]
end

#serialize(options = {}, &block) ⇒ Object

Since:

  • v1.12.0



41
42
43
44
45
# File 'lib/nokogiri/html5/document_fragment.rb', line 41

def serialize(options = {}, &block)
  # Bypass XML::Document.serialize which doesn't support options even
  # though XML::Node.serialize does!
  XML::Node.instance_method(:serialize).bind(self).call(options, &block)
end