Class: Dommy::Fragment
Constant Summary
collapse
- JS_METHOD_NAMES =
Methods routed through js_call (keep in sync with its when-arms).
%w[cloneNode querySelector querySelectorAll getElementById appendChild].freeze
Constants included
from Node
Node::ATTRIBUTE_NODE, Node::CDATA_SECTION_NODE, Node::COMMENT_NODE, Node::DOCUMENT_FRAGMENT_NODE, Node::DOCUMENT_NODE, Node::DOCUMENT_POSITION_CONTAINED_BY, Node::DOCUMENT_POSITION_CONTAINS, Node::DOCUMENT_POSITION_DISCONNECTED, Node::DOCUMENT_POSITION_FOLLOWING, Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, Node::DOCUMENT_POSITION_PRECEDING, Node::DOCUMENT_TYPE_NODE, Node::ELEMENT_NODE, Node::PROCESSING_INSTRUCTION_NODE, Node::TEXT_NODE
Instance Attribute Summary collapse
Instance Method Summary
collapse
#__internal_deliver_event__, #add_event_listener, #dispatch_event, #invoke_listener, #remove_event_listener
Constructor Details
#initialize(document, nokogiri_node) ⇒ Fragment
Returns a new instance of Fragment.
16
17
18
19
|
# File 'lib/dommy/element.rb', line 16
def initialize(document, nokogiri_node)
@document = document
@__node__ = nokogiri_node
end
|
Instance Attribute Details
#document ⇒ Object
Returns the value of attribute document.
12
13
14
|
# File 'lib/dommy/element.rb', line 12
def document
@document
end
|
Instance Method Details
#__dommy_backend_node__ ⇒ Object
14
|
# File 'lib/dommy/element.rb', line 14
def __dommy_backend_node__ = @__node__
|
#__js_call__(method, args) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/dommy/element.rb', line 109
def __js_call__(method, args)
case method
when "cloneNode"
deep = args.empty? ? false : !!args[0]
deep ? @document.wrap_node(Parser.fragment(@__node__.to_html, owner_doc: @document.nokogiri_doc)) : @document
.wrap_node(Parser.fragment("", owner_doc: @document.nokogiri_doc))
when "querySelector"
query_selector(args[0])
when "querySelectorAll"
query_selector_all(args[0])
when "getElementById"
get_element_by_id(args[0])
when "appendChild"
append_child(args[0])
else
nil
end
end
|
#__js_get__(key) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/dommy/element.rb', line 80
def __js_get__(key)
case key
when "nodeType"
11
when "children"
element_children
when "childNodes"
child_nodes
when "childElementCount"
child_element_count
when "firstChild"
first_child
when "lastChild"
last_child
when "firstElementChild"
first_element_child
when "lastElementChild"
last_element_child
when "textContent"
@__node__.text
end
end
|
#__js_method_names__ ⇒ Object
105
106
107
|
# File 'lib/dommy/element.rb', line 105
def __js_method_names__
JS_METHOD_NAMES
end
|
#append_child(child) ⇒ Object
55
56
57
58
59
60
|
# File 'lib/dommy/element.rb', line 55
def append_child(child)
nodes = detach_dom_nodes(child)
nodes.each { |n| @__node__.add_child(n) }
@document.notify_child_list_mutation(target_node: @__node__, added_nodes: nodes, removed_nodes: [])
child
end
|
#child_element_count ⇒ Object
27
28
29
|
# File 'lib/dommy/element.rb', line 27
def child_element_count
@__node__.element_children.size
end
|
#child_nodes ⇒ Object
31
32
33
|
# File 'lib/dommy/element.rb', line 31
def child_nodes
NodeList.new(@__node__.children.map { |n| @document.wrap_node(n) }.compact)
end
|
#children ⇒ Object
Public Ruby API (DocumentFragment surface)
23
24
25
|
# File 'lib/dommy/element.rb', line 23
def children
element_children
end
|
128
129
130
131
132
|
# File 'lib/dommy/element.rb', line 128
def
nodes = @__node__.children.to_a
nodes.each(&:unlink)
nodes
end
|
#first_child ⇒ Object
35
36
37
|
# File 'lib/dommy/element.rb', line 35
def first_child
@document.wrap_node(@__node__.children.first)
end
|
#first_element_child ⇒ Object
43
44
45
|
# File 'lib/dommy/element.rb', line 43
def first_element_child
@document.wrap_node(@__node__.children.find(&:element?))
end
|
#get_element_by_id(id) ⇒ Object
74
75
76
77
78
|
# File 'lib/dommy/element.rb', line 74
def get_element_by_id(id)
return nil if id.nil?
@document.wrap_node(@__node__.at_css("##{id}"))
end
|
#last_child ⇒ Object
39
40
41
|
# File 'lib/dommy/element.rb', line 39
def last_child
@document.wrap_node(@__node__.children.last)
end
|
#last_element_child ⇒ Object
47
48
49
|
# File 'lib/dommy/element.rb', line 47
def last_element_child
@document.wrap_node(@__node__.element_children.last)
end
|
#query_selector(selector) ⇒ Object
62
63
64
65
66
|
# File 'lib/dommy/element.rb', line 62
def query_selector(selector)
return nil if selector.nil? || selector.to_s.empty?
@document.wrap_node(@__node__.at_css(selector.to_s))
end
|
#query_selector_all(selector) ⇒ Object
68
69
70
71
72
|
# File 'lib/dommy/element.rb', line 68
def query_selector_all(selector)
return NodeList.new if selector.nil? || selector.to_s.empty?
NodeList.new(@__node__.css(selector.to_s).map { |n| @document.wrap_node(n) }.compact)
end
|
#text_content ⇒ Object
51
52
53
|
# File 'lib/dommy/element.rb', line 51
def text_content
@__node__.text
end
|