Class: Hatemile::Util::Html::NokogiriLib::NokogiriHTMLDOMElement
Overview
The NokogiriHTMLDOMElement class is official implementation of HTMLDOMElement interface for the Nokogiri library.
Constant Summary
collapse
- SELF_CLOSING_TAGS =
Tags that are self closing.
%w[
area base br col embed hr img input keygen
link menuitem meta param source track wbr
].freeze
Instance Method Summary
collapse
#get_data, #get_parent_element, #get_text_content, #init, #insert_after, #insert_before, #remove_node, #replace_node, #set_node
Methods inherited from HTMLDOMNode
#get_data, #get_parent_element, #get_text_content, #insert_after, #insert_before, #remove_node, #replace_node
Constructor Details
Initializes a new object that encapsulate the Nokogiri element.
Instance Method Details
#==(other) ⇒ Boolean
Compare if two elements object reference the same element.
293
294
295
296
297
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 293
def ==(other)
return false if other.nil?
return false unless other.is_a?(HTMLDOMElement)
get_data == other.get_data
end
|
#append_element(element) ⇒ Object
99
100
101
102
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 99
def append_element(element)
@data.add_child(element.get_data)
self
end
|
#append_text(text) ⇒ Object
154
155
156
157
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 154
def append_text(text)
@data.add_child(Nokogiri::XML::Text.new(text, @data.document))
self
end
|
#clone_element ⇒ Object
206
207
208
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 206
def clone_element
NokogiriHTMLDOMElement.new(@data.clone)
end
|
#get_attribute(name) ⇒ Object
69
70
71
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 69
def get_attribute(name)
@data.get_attribute(name)
end
|
#get_children ⇒ Object
123
124
125
126
127
128
129
130
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 123
def get_children
array = []
@data.children.each do |child|
array.push(NokogiriHTMLDOMElement.new(child)) if child.element?
array.push(NokogiriHTMLDOMTextNode.new(child)) if child.text?
end
array
end
|
#get_children_elements ⇒ Object
113
114
115
116
117
118
119
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 113
def get_children_elements
array = []
@data.element_children.each do |child|
array.push(NokogiriHTMLDOMElement.new(child))
end
array
end
|
#get_first_element_child ⇒ Object
212
213
214
215
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 212
def get_first_element_child
return nil unless has_children_elements?
get_children_elements.first
end
|
#get_first_node_child ⇒ Object
226
227
228
229
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 226
def get_first_node_child
return nil unless has_children?
get_children.first
end
|
#get_inner_html ⇒ Object
183
184
185
186
187
188
189
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 183
def get_inner_html
html = ''
@data.children.each do |child|
html += to_string(child)
end
html
end
|
#get_last_element_child ⇒ Object
219
220
221
222
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 219
def get_last_element_child
return nil unless has_children_elements?
get_children_elements.last
end
|
#get_last_node_child ⇒ Object
233
234
235
236
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 233
def get_last_node_child
return nil unless has_children?
get_children.last
end
|
#get_outer_html ⇒ Object
193
194
195
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 193
def get_outer_html
to_string(@data)
end
|
#get_tag_name ⇒ Object
63
64
65
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 63
def get_tag_name
@data.name.upcase
end
|
#has_attribute?(name) ⇒ Boolean
87
88
89
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 87
def has_attribute?(name)
!@data.attributes[name].nil?
end
|
#has_attributes? ⇒ Boolean
93
94
95
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 93
def has_attributes?
!@data.attributes.empty?
end
|
#has_children? ⇒ Boolean
174
175
176
177
178
179
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 174
def has_children?
@data.children.each do |child|
return true if child.element? || child.text?
end
false
end
|
#has_children_elements? ⇒ Boolean
168
169
170
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 168
def has_children_elements?
@data.element_children.empty? == false
end
|
#normalize ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 134
def normalize
return self unless has_children?
last = nil
get_children.each do |child|
if child.is_a?(NokogiriHTMLDOMElement)
child.normalize
elsif child.is_a?(NokogiriHTMLDOMTextNode) &&
last.is_a?(NokogiriHTMLDOMTextNode)
child.prepend_text(last.get_text_content)
last.remove_node
end
last = child
end
self
end
|
#prepend_element(element) ⇒ Object
106
107
108
109
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 106
def prepend_element(element)
@data.prepend_child(element.get_data)
self
end
|
#prepend_text(text) ⇒ Object
161
162
163
164
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 161
def prepend_text(text)
@data.prepend_child(Nokogiri::XML::Text.new(text, @data.document))
self
end
|
#remove_attribute(name) ⇒ Object
81
82
83
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 81
def remove_attribute(name)
@data.remove_attribute(name) if has_attribute?(name)
end
|
#self_closing_tag?(tag) ⇒ Boolean
Returns if the tag is self closing.
282
283
284
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 282
def self_closing_tag?(tag)
SELF_CLOSING_TAGS.include?(tag.downcase)
end
|
#set_attribute(name, value) ⇒ Object
75
76
77
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 75
def set_attribute(name, value)
@data.set_attribute(name, value)
end
|
#set_data(data) ⇒ Object
199
200
201
202
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 199
def set_data(data)
@data = data
set_node(data)
end
|
#to_string(node) ⇒ String
Convert a Nokogiri Node to a HTML code.
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
|
# File 'lib/hatemile/util/html/nokogiri/nokogiri_html_dom_element.rb', line 243
def to_string(node)
string = ''
if node.element?
string += "<#{node.name.downcase}"
node.attributes.each do |attribute, value|
string += " #{attribute}=\"#{value}\""
end
string += if node.children.empty? && self_closing_tag?(node.name)
' />'
else
'>'
end
elsif node.
string += node.to_s
elsif node.cdata?
string += node.to_s
elsif node.html?
document = node.to_s
string += document.split("\n")[0] + "\n"
elsif node.text?
string += node.text
end
node.children.each do |child|
string += to_string(child)
end
if node.element? &&
!(node.children.empty? && self_closing_tag?(node.name))
string += "</#{node.name.downcase}>"
end
string
end
|