Module: Goat::DOMTools
Defined Under Namespace
Modules: DiffTools
Classes: DOMAttrs, DOMDiff, HTMLBuilder, InvalidBodyError, PartialUpdateFailed, Traverser
Class Method Summary
collapse
Class Method Details
.attrs(node) ⇒ Object
7
|
# File 'lib/goat/dom.rb', line 7
def attrs(node); node[1] if is_attrs?(node[1]); end
|
.body(node) ⇒ Object
8
|
# File 'lib/goat/dom.rb', line 8
def body(node); is_attrs?(node[1]) ? node[2..-1] : node[1..-1]; end
|
.car_tag(tree) ⇒ Object
13
14
15
16
17
18
|
# File 'lib/goat/dom.rb', line 13
def car_tag(tree)
if (b = tree).is_a?(Array)
b = b.first while b.is_a?(Array)
b
end
end
|
.dom_components(tree) ⇒ Object
188
189
190
191
192
193
194
195
196
197
198
|
# File 'lib/goat/dom.rb', line 188
def self.dom_components(tree)
c = []
DOMTools.traverse(tree) do |elt|
if dom_node?(elt) && (attrs = attrs(elt)) && attrs.include?(:id) && attrs[:id] =~ /^dom_\w{10}$/
c << attrs[:id]
end
end
c
end
|
.dom_node?(node) ⇒ Boolean
10
|
# File 'lib/goat/dom.rb', line 10
def dom_node?(node); node.is_a?(Array) && node.first.is_a?(Symbol); end
|
.domid(node) ⇒ Object
9
|
# File 'lib/goat/dom.rb', line 9
def domid(node); attrs(node) ? attrs(node)[:id] : nil; end
|
.expanded_dom(dom) ⇒ Object
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/goat/dom.rb', line 143
def self.expanded_dom(dom)
DOMTools.transpose(dom) do |elt, update|
if elt.kind_of?(Component)
raise "Component #{elt} has no ID: was super's initialize called?" unless elt.id
Dynamic[:expander].component_used(elt)
update.call(elt.component(elt.expanded_dom))
elsif dom_node?(elt)
tag = tag(elt)
if tag == :tbody
b = body(elt)
b = b.first while b.is_a?(Array)
if b == :tbody
update.call(expanded_dom(body(elt)))
end
elsif tag == :table
a = attrs(elt)
tbody_id = (a && a[:id]) ? "#{a[:id]}_tbody" : 'tbody_' + String.random
update.call([:table, a ? a : {}, [:tbody, {:id => tbody_id}, expanded_dom(body(elt))]])
end
end
true
end
end
|
.find_component(tree, id) ⇒ Object
200
201
202
203
204
205
206
207
208
209
|
# File 'lib/goat/dom.rb', line 200
def self.find_component(tree, id)
catch(:find_component) do
DOMTools.traverse(tree) do |elt|
if dom_node?(elt) & (attrs = attrs(elt)) && attrs[:id] == id
throw :find_component, elt
end
nil
end
end
end
|
.inject_prefixes(id, dom) ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
# File 'lib/goat/dom.rb', line 168
def self.inject_prefixes(id, dom)
DOMTools.traverse(dom) do |elt|
if elt.kind_of?(Array) && elt.first.is_a?(Symbol) && elt[1].kind_of?(Hash)
attrs = elt[1]
elt[1] = attrs.map_to_hash do |k, v|
if v.kind_of?(String)
[k, v.prefix_ns(id)]
elsif v.kind_of?(Array) && HTMLBuilder::ARRAY_ATTRS.include?(k)
[k, v]
elsif v.kind_of?(Integer) && HTMLBuilder::INTEGER_ATTRS.include?(k)
[k, v]
else
raise "Invalid object #{v.inspect} to get a prefix in dom:\n#{dom.inspect}"
end
end
end
end
dom
end
|
.is_attrs?(x) ⇒ Boolean
6
|
# File 'lib/goat/dom.rb', line 6
def is_attrs?(x); x.kind_of?(Hash) || x.kind_of?(DOMAttrs); end
|
.nested_body?(node) ⇒ Boolean
11
|
# File 'lib/goat/dom.rb', line 11
def nested_body?(node); node.is_a?(Array) && !node.first.is_a?(Symbol); end
|
12
|
# File 'lib/goat/dom.rb', line 12
def normalized_tags(body); nested_body?(body) ? body.map{|b| normalized_tags(b)}.flatten(1) : [body]; end
|
.tag(node) ⇒ Object
5
|
# File 'lib/goat/dom.rb', line 5
def tag(node); node[0]; end
|
.transpose(tree, dlg = nil, &blk) ⇒ Object
141
|
# File 'lib/goat/dom.rb', line 141
def self.transpose(tree, dlg=nil, &blk); Traverser.transpose(tree, dlg, &blk); end
|
.traverse(tree, dlg = nil, &blk) ⇒ Object
140
|
# File 'lib/goat/dom.rb', line 140
def self.traverse(tree, dlg=nil, &blk); Traverser.traverse(tree, dlg, &blk); end
|