Base module for HTML elements
Enumerable
expand(data, context=DefaultContext.clone)
|
expand self as a template with a model data.
# File lib/amrita/node_expand.rb, line 267
def expand(data, context=DefaultContext.clone)
case data
when true
self
when nil, false
Null
when DictionaryData
expand1(data, context)
else
raise "Amrita::Node#expand accepts only Hash or ExpandByMember as model data (#{data.type} was passed)"
end
end
expand1(data, context=DefaultContext.clone)
|
# File lib/amrita/node_expand.rb, line 280
def expand1(data, context=DefaultContext.clone)
data.amrita_expand_node(self, context)
end
amrita_expand_node(n, context)
|
# File lib/amrita/node_expand.rb, line 288
def amrita_expand_node(n, context)
self
end
apply_to_children(&block)
|
# File lib/amrita/node_expand.rb, line 292
def apply_to_children(&block)
self
end
init_body(&block) {|| ...}
|
set the block 's result to body
# File lib/amrita/node.rb, line 179
def init_body(&block)
if block_given?
@body = to_node(yield)
else
@body = Null
end
end
# File lib/amrita/node.rb, line 188
def body
if defined? @body
@body
else
Null
end
end
test if it has any children
# File lib/amrita/node.rb, line 197
def no_child?
body.kind_of?(NullNode)
end
return an Array of child Node or an empty Array if
it does not have a body
# File lib/amrita/node.rb, line 202
def children
if no_child?
[]
else
[ body ]
end
end
# File lib/amrita/node.rb, line 211
def to_node(n)
case n
when nil, false
Null
when Node
n
when Array
case n.size()
when 0
Null
when 1
to_node(n[0])
else
NodeArray.new(*n)
end
else
TextElement.new(n.to_s)
end
end
# File lib/amrita/node.rb, line 232
def hid
nil
end
# File lib/amrita/node.rb, line 236
def inspect
to_ruby
end
# File lib/amrita/node.rb, line 241
def +(node)
NodeArray.new(self, to_node(node))
end
# File lib/amrita/node.rb, line 246
def *(n)
raise "can't #{self.class} * #{n}(#{n.class})" unless n.kind_of?(Integer)
a = (0...n).collect { |i| self }
NodeArray.new(*a)
end
each_node(&block) {|self| ...}
|
iterate on self and children
# File lib/amrita/node.rb, line 253
def each_node(&block)
c = children # save children before yield
yield(self)
c.each do |n|
n.each_node(&block)
end
end
each_element(&block) {|node| ...}
|
iterate on child Elements
# File lib/amrita/node.rb, line 262
def each_element(&block)
each_node do |node|
yield(node) if node.kind_of?(Element)
end
end
each_element_with_id(recursive=false, &block)
|
iterate on child Elements with id. If recursive == false, don't go to
children of an Element with id.
# File lib/amrita/node.rb, line 271
def each_element_with_id(recursive=false, &block)
children.each do |node|
node.each_element_with_id(recursive, &block)
end
end
test if an Element or children has any id
# File lib/amrita/node.rb, line 278
def has_id_element?
each_node do |n|
next unless n.kind_of?(Element)
next unless n.hid
return true
end
false
end
# File lib/amrita/format.rb, line 516
def to_s
ret = ""
SingleLineFormatter.new(ret).format(self)
ret
end
pre_format(formatter, expand_attr=false)
|
converts an Element without id to
TextElement to make tree low for performance.
A pre-formatted Node tree will be expanded faster
than original. But, it produces the same output .
# File lib/amrita/format.rb, line 527
def pre_format(formatter, expand_attr=false)
raise "pre_format dose not suport pretty-print" if formatter.kind_of?(PrettyPrintFormatter)
prf = PreFormatter.new(formatter, expand_attr)
prf.pre_format(self)
prf
end
# File lib/amrita/format.rb, line 534
def pre_format1(prf)
prf << self
end
# File lib/amrita/compiler.rb, line 68
def compile(compiler)
compiler << to_s
end
generate_hint_from_template()
|
# File lib/amrita/compiler.rb, line 72
def generate_hint_from_template
hash = {}
each_element_with_id do |e|
hash[e.hid.intern] = HtmlCompiler::AnyData
end
HtmlCompiler::DictionaryHint.new(hash)
end