module Rabbit::Element::ContainerElement
Attributes
elements[R]
Public Class Methods
new(elems=[])
click to toggle source
Calls superclass method
Rabbit::Element::Base::new
# File lib/rabbit/element/container-element.rb, line 18 def initialize(elems=[]) @elements = [] elems = [elems] unless elems.is_a?(Array) elems.each do |elem| add_element(elem) end super() end
Public Instance Methods
<<(element)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 27 def <<(element) @elements << element element.parent = self dirty! end
Also aliased as: add_element
[](name_or_index)
click to toggle source
Calls superclass method
Rabbit::Element::Base#[]
# File lib/rabbit/element/container-element.rb, line 248 def [](name_or_index) if name_or_index.is_a?(Integer) @elements[name_or_index] else super end end
[]=(name_or_index, value)
click to toggle source
Calls superclass method
Rabbit::Element::Base#[]=
# File lib/rabbit/element/container-element.rb, line 256 def []=(name_or_index, value) if name_or_index.is_a?(Integer) @elements[name_or_index] = value else super end end
_width()
click to toggle source
SLOW!!
# File lib/rabbit/element/container-element.rb, line 178 def _width block_widths = [] block_widths << @elements.inject(0) do |result, elem| if elem.width if elem.inline_element? result + elem.width else block_widths << elem.width elem.width end else result end end block_widths.max.to_i end
clear_theme()
click to toggle source
Calls superclass method
Rabbit::Element::Base#clear_theme
# File lib/rabbit/element/container-element.rb, line 216 def clear_theme @elements.each do |element| element.clear_theme end super end
Also aliased as: container_clear_theme
compile(canvas, x, y, w, h)
click to toggle source
Calls superclass method
Rabbit::Element::Base#compile
# File lib/rabbit/element/container-element.rb, line 109 def compile(canvas, x, y, w, h) super if_dirty do x, y, w, h = setup_padding(@x, @y, @w, @h) compile_elements(canvas, x, y, w, h) x, w = restore_x_padding(x, w) x, w = adjust_x_centering(x, w) y, h = adjust_y_padding(y, h) end end
compile_elements(canvas, x, y, w, h)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 120 def compile_elements(canvas, x, y, w, h) prev_is_inline = false @elements.each do |element| element.compile(canvas, x, y, w, h) compile_horizontal_element(element, canvas, x, y, w, h) x, y, w, h = element.draw(true) end end
compile_horizontal(canvas, x, y, w, h)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 129 def compile_horizontal(canvas, x, y, w, h) @elements.each do |element| compile_horizontal_element(element, canvas, x, y, w, h) end end
compile_horizontal_element(element, canvas, x, y, w, h)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 135 def compile_horizontal_element(element, canvas, x, y, w, h) if do_horizontal_centering? or element.do_horizontal_centering? element.do_horizontal_centering(canvas, x, y, w, h) else element.reset_horizontal_centering(canvas, x, y, w, h) end end
delete(element)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 40 def delete(element) return if @elements.delete(element).nil? element.parent = nil dirty! element end
dirty?()
click to toggle source
Calls superclass method
Rabbit::Element::Base#dirty?
# File lib/rabbit/element/container-element.rb, line 224 def dirty? super or @elements.any?{|x| x.dirty?} end
draw_element(canvas, x, y, w, h, simulation)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 75 def draw_element(canvas, x, y, w, h, simulation) draw_elements(canvas, x, y, w, h, simulation) end
draw_elements(canvas, x, y, w, h, simulation)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 79 def draw_elements(canvas, x, y, w, h, simulation) @centering_adjusted_height = 0 args = [x, y, w, h] if do_vertical_centering? adjust_height = ((h - height - @padding_bottom) / 2.0).ceil if y + adjust_height > 0 args = [x, y + adjust_height, w, h - adjust_height] else adjust_height = 0 end @centering_adjusted_height = adjust_height compile_elements(canvas, *args) end base_x, base_w = x, w @elements.each do |element| x, y, w, h = element.draw(simulation) end last_element = @elements.last if last_element and last_element.inline_element? container_height = height x = base_x y += container_height w = base_w h -= container_height end [x, y, w, h] end
have_tag?(name)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 240 def have_tag?(name) @elements.any? {|element| element.have_tag?(name)} end
have_wait_tag?()
click to toggle source
# File lib/rabbit/element/container-element.rb, line 244 def have_wait_tag? @elements.any? {|element| element.have_wait_tag?} end
height()
click to toggle source
perhaps SLOW!!
# File lib/rabbit/element/container-element.rb, line 196 def height inline_heights = [] @elements.inject(0) do |result, elem| elem_height = elem.height if elem_height if elem.inline_element? inline_heights << elem_height result else prev_inlines_max_height = inline_heights.max.to_i inline_heights.clear h = elem_height + elem.margin_top + elem.margin_bottom result + h + prev_inlines_max_height end else result end end + inline_heights.max.to_i + @padding_top + @padding_bottom end
inspect(verbose=false)
click to toggle source
Calls superclass method
Rabbit::Element::Base#inspect
# File lib/rabbit/element/container-element.rb, line 228 def inspect(verbose=false) elem_info = @elements.collect do |x| _indent(x.inspect(verbose)) end.join("\n") if verbose self_info = super(verbose) else self_info = "<#{self.class.name}>" end self_info + (elem_info.empty? ? "" : "\n") + elem_info end
prop_delete(name)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 161 def prop_delete(name) collect do |elem| elem.prop_delete(name) end end
prop_get(name)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 155 def prop_get(name) collect do |elem| elem.prop_get(name) end end
prop_set(*args)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 149 def prop_set(*args) each do |elem| elem.prop_set(*args) end end
replace_element(child, *targets)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 70 def replace_element(child, *targets) index = @elements.index(child) @elements[index, 1] = targets end
substitute_text(&block)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 59 def substitute_text(&block) substituted = false e = @elements.dup e.each_with_index do |element, i| element_substituted = element.substitute_text(&block) substituted ||= element_substituted end dirty! if substituted substituted end
text()
click to toggle source
# File lib/rabbit/element/container-element.rb, line 47 def text @elements.collect do |element| element.text end.join("\n") end
to_html(generator)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 143 def to_html(generator) collect do |element| element.to_html(generator) end.join("\n") end
to_rd()
click to toggle source
# File lib/rabbit/element/container-element.rb, line 53 def to_rd @elements.collect do |element| element.to_rd end.join("\n") end
unshift(element)
click to toggle source
# File lib/rabbit/element/container-element.rb, line 34 def unshift(element) @elements.unshift(element) element.parent = self dirty! end
width()
click to toggle source
# File lib/rabbit/element/container-element.rb, line 167 def width @elements.collect do |elem| w = elem.w if w w += elem.margin_left + elem.margin_right end w end.compact.max.to_i + @padding_left + @padding_right end