Module: Nokogiri::HTML5::Node
- Defined in:
- lib/nokogumbo/html5/node.rb
Instance Method Summary collapse
-
#add_child_node_and_reparent_attrs(node) ⇒ Object
HTML elements can have attributes that contain colons.
- #fragment(tags) ⇒ Object
- #inner_html(options = {}) ⇒ Object
- #write_to(io, *options) {|config| ... } ⇒ Object
Instance Method Details
#add_child_node_and_reparent_attrs(node) ⇒ Object
HTML elements can have attributes that contain colons. Nokogiri::XML::Node#[]= treats names with colons as a prefixed QName and tries to create an attribute in a namespace. This is especially annoying with attribute names like xml:lang since libxml2 will actually create the xml namespace if it doesn’t exist already.
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/nokogumbo/html5/node.rb', line 11 def add_child_node_and_reparent_attrs(node) return super(node) unless document.is_a?(HTML5::Document) # I'm not sure what this method is supposed to do. Reparenting # namespaces is handled by libxml2, including child namespaces which # this method wouldn't handle. # https://github.com/sparklemotion/nokogiri/issues/1790 add_child_node(node) #node.attribute_nodes.find_all { |a| a.namespace }.each do |attr| # attr.remove # ns = attr.namespace # a["#{ns.prefix}:#{attr.name}"] = attr.value #end end |
#fragment(tags) ⇒ Object
62 63 64 65 |
# File 'lib/nokogumbo/html5/node.rb', line 62 def fragment() return super() unless document.is_a?(HTML5::Document) DocumentFragment.new(document, , self) end |
#inner_html(options = {}) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/nokogumbo/html5/node.rb', line 25 def inner_html( = {}) return super() unless document.is_a?(HTML5::Document) result = [:preserve_newline] && HTML5.prepend_newline?(self) ? "\n" : "" result << children.map { |child| child.to_html() }.join result end |
#write_to(io, *options) {|config| ... } ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/nokogumbo/html5/node.rb', line 32 def write_to(io, *) return super(io, *) unless document.is_a?(HTML5::Document) = .first.is_a?(Hash) ? .shift : {} encoding = [:encoding] || [0] if Nokogiri.jruby? = [:save_with] || [1] indent_times = [:indent] || 0 else = [:save_with] || [1] || XML::Node::SaveOptions::FORMAT indent_times = [:indent] || 2 end indent_string = ([:indent_text] || ' ') * indent_times config = XML::Node::SaveOptions.new(.to_i) yield config if block_given? = config. if ( & (XML::Node::SaveOptions::AS_XML | XML::Node::SaveOptions::AS_XHTML) != 0) # Use Nokogiri's serializing code. native_write_to(io, encoding, indent_string, ) else # Serialize including the current node. encoding ||= document.encoding || Encoding::UTF_8 internal_ops = { preserve_newline: [:preserve_newline] || false } HTML5.serialize_node_internal(self, io, encoding, internal_ops) end end |