class Wedge::DOM
Attributes
dom[RW]
raw_html[RW]
Public Class Methods
[](html)
click to toggle source
Shortcut for creating dom @param html [String] @return dom [DOM]
# File lib/wedge/dom.rb, line 18 def [] html new html end
new(html)
click to toggle source
# File lib/wedge/dom.rb, line 23 def initialize html html = '' if html.nil? html = html.to_html if html.is_a? HTML::DSL @raw_html = html if server? @dom = raw_html.is_a?(String) ? HTML[raw_html.dup] : raw_html else @dom = raw_html.is_a?(String) ? Element[raw_html.dup] : raw_html end end
Public Instance Methods
<<(d)
click to toggle source
# File lib/wedge/dom.rb, line 89 def << d if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n << d } else node << d end end
[]=(key, value)
click to toggle source
# File lib/wedge/dom.rb, line 81 def []= key, value if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n[key] = value } else node[key] = value end end
add_class(classes)
click to toggle source
# File lib/wedge/dom.rb, line 208 def add_class classes classes = (classes || '').split ' ' unless classes.is_a? Array if node.is_a? Nokogiri::XML::NodeSet node.each do |n| new_classes = ((n.attr('class') || '').split(' ') << classes).uniq.join(' ') n['class'] = new_classes end else new_classes = ((node.attr('class') || '').split(' ') << classes).uniq.join(' ') node['class'] = new_classes end end
append(d)
click to toggle source
# File lib/wedge/dom.rb, line 123 def append d if node.is_a? Nokogiri::XML::NodeSet node.each do |n| if nn = n.children.last nn.add_next_sibling d else n << d end end else if n = node.children.last n.add_next_sibling d else node.content << d end end end
attr(key, value = false)
click to toggle source
Calls superclass method
# File lib/wedge/dom.rb, line 231 def attr key, value = false if value value = value.join ' ' if value.is_a? Array if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n[key] = value } else node[key] = value end else super key end end
data(key = false, value = false)
click to toggle source
# File lib/wedge/dom.rb, line 182 def data key = false, value = false d = Hash[node.xpath("@*[starts-with(name(), 'data-')]").map{|a| [a.name, a.value]}] if !key d elsif key && !value d[key] else key = "data-#{key}" if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n[key] = value } else node[key] = value end end end
find(string, &block)
click to toggle source
# File lib/wedge/dom.rb, line 36 def find string, &block if client? node = Wedge::DOM.new dom.find(string) elsif server? node = Wedge::DOM.new dom.css(string) end if block_given? node.each_with_index do |n, i| block.call Wedge::DOM.new(n), i end end node end
hide()
click to toggle source
# File lib/wedge/dom.rb, line 141 def hide if node.is_a? Nokogiri::XML::NodeSet node.each do |n| DOM.new(n).style 'display', 'none' end else node.style 'display', 'none' end node end
html(content = false)
click to toggle source
# File lib/wedge/dom.rb, line 282 def html content = false # if the value is nil nokogiri will not update the dom content = '' if content.nil? if !content if server? node.inner_html else node ? node.html : dom.html end else self.html = content end end
html=(content)
click to toggle source
# File lib/wedge/dom.rb, line 245 def html= content if server? # if the value is nil nokogiri will not update the dom content = '' if content.nil? if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n.inner_html = content } else node.inner_html = content end else content = content.dom if content.is_a? Wedge::DOM node.html content end node rescue binding.pry end
method_missing(method, *args, &block)
click to toggle source
This allows you to use all the nokogiri or opal jquery methods if a global one isn't set
Calls superclass method
# File lib/wedge/dom.rb, line 303 def method_missing method, *args, &block # respond_to?(symbol, include_all=false) if dom.respond_to? method, true dom.send method, *args, &block else super end end
node()
click to toggle source
# File lib/wedge/dom.rb, line 297 def node @node || dom end
prepend(d)
click to toggle source
def prepend d
if n = node.children.first n.add_previous_sibling d else node << d end
end
# File lib/wedge/dom.rb, line 105 def prepend d if node.is_a? Nokogiri::XML::NodeSet node.each do |n| if nn = n.children.first nn.add_previous_sibling d else n << d end end else if n = node.children.first n.add_previous_sibling d else node << d end end end
remove_class(classes)
click to toggle source
# File lib/wedge/dom.rb, line 221 def remove_class classes classes = (classes || '').split ' ' unless classes.is_a? Array if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n['class'] = (n.attr('class') || '').split(' ').reject { |c| classes.include? c }.join(' ') } else node['class'] = (node.attr('class') || '').split(' ').reject { |c| classes.include? c }.join(' ') end end
replace_with(*args)
click to toggle source
# File lib/wedge/dom.rb, line 73 def replace_with *args if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n.replace(*args) } else node.replace(*args) end end
style(*args)
click to toggle source
# File lib/wedge/dom.rb, line 153 def style *args style_object = DOM.new(node).styles if args.length == 1 style_object[args.first] else style_object[args.first] = args.last node['style'] = style_object.map { |k, v| [k, v].join(': ') }.join('; ') end end
styles()
click to toggle source
# File lib/wedge/dom.rb, line 164 def styles style_array = node['style'].to_s. split(';'). reject { |s| s.strip.empty? }. map do |s| parts = s.split(':', 2) return nil if parts.nil? return nil if parts.length != 2 return nil if parts.any? { |s| s.nil? } [parts[0].strip, parts[1].strip] end. reject { |s| s.empty? } style_object = {} style_array.each { |key, value| style_object[key] = value } style_object end
to_html()
click to toggle source
# File lib/wedge/dom.rb, line 275 def to_html @dom ||= Wedge::DOM.new '<div>' el = dom.first Wedge::DOM.new('<div>').append(el).html end
val(value)
click to toggle source
# File lib/wedge/dom.rb, line 200 def val value if node.is_a? Nokogiri::XML::NodeSet node.each { |n| n.content = value } else node.content = value end end