class Sirens::LayoutBuilder

Attributes

built_components[R]
built_props[R]

Accessing

Public Class Methods

new(root_component: nil) click to toggle source

Initializing

Calls superclass method
# File lib/components_builder/layout_builder.rb, line 6
def initialize(root_component: nil)
    super()

    @root_component = root_component
    @built_props = Hash[]
    @built_components = []
end

Public Instance Methods

button(props = Hash[], &build_block) click to toggle source

Widgets

# File lib/components_builder/layout_builder.rb, line 129
def button(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        @built_components << Button.new(builder.built_props)
    end
end
checkbox(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 137
def checkbox(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        @built_components << Checkbox.new(builder.built_props)
    end
end
choices_list(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 171
def choices_list(props = Hash[], &build_block)
    columns_builder = ColumnsBuilder.new.render(props, &build_block)

    props[:popup_menu] = columns_builder.popup_menu unless columns_builder.popup_menu.nil?

    ListChoice.new(props).tap { |list|
        list.define_columns(columns_builder.columns)

        @built_components << list
    }
end
choices_tree(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 199
def choices_tree(props = Hash[], &build_block)
    columns_builder = ColumnsBuilder.new.render(props, &build_block)

    props[:popup_menu] = columns_builder.get_popup_menu unless columns_builder.get_popup_menu.nil?

    TreeChoice.new(props).tap { |tree|
        tree.define_columns(columns_builder.columns)

        @built_components << tree
    }
end
component(component) click to toggle source

Containers

# File lib/components_builder/layout_builder.rb, line 51
def component(component)
    @built_components << component
end
eval(props: Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 29
def eval(props: Hash[], &build_block)
    merge_props(props)

    instance_exec(@root_component, &build_block) unless build_block.nil?

    self
end
horizontal_splitter(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 91
def horizontal_splitter(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        Splitter.horizontal(builder.built_props).tap do |splitter|
            splitter.add_all_components(builder.built_components)

            @built_components << splitter
        end
    end
end
horizontal_stack(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 67
def horizontal_stack(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        Stack.horizontal(builder.built_props).tap do |stack|
            stack.add_all_components(builder.built_components)

            @built_components << stack
        end
    end
end
input_text(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 183
def input_text(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        @built_components << InputText.new(builder.built_props)
    end
end
list(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 159
def list(props = Hash[], &build_block)
    columns_builder = ColumnsBuilder.new.render(props, &build_block)

    props[:popup_menu] = columns_builder.popup_menu unless columns_builder.popup_menu.nil?

    List.new(props).tap { |list|
        list.define_columns(columns_builder.columns)

        @built_components << list
    }
end
merge_props(props) click to toggle source
# File lib/components_builder/layout_builder.rb, line 45
def merge_props(props)
    @built_props.merge!(props)
end
model(model) click to toggle source
# File lib/components_builder/layout_builder.rb, line 41
def model(model)
    merge_props(model: model)
end
popup_menu(&block) click to toggle source
radio_button(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 145
def radio_button(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        @built_components << RadioButton.new(builder.built_props)
    end
end
radio_buttons_group(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 153
def radio_buttons_group(props = Hash[], &build_block)
    buttons = RadioButtonGroupBuilder.new.render(&build_block)

    @built_components.concat(buttons)
end
render(props: Hash[], &build_block) click to toggle source

Building

# File lib/components_builder/layout_builder.rb, line 21
def render(props: Hash[], &build_block)
    eval(props: props, &build_block)

    @root_component.add_all_components(built_components)

    self
end
styles(props) click to toggle source
# File lib/components_builder/layout_builder.rb, line 37
def styles(props)
    merge_props(props)
end
tabs(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 115
def tabs(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        Tabs.new(builder.built_props).tap do |tabs|
            tabs.add_all_components(builder.built_components)

            @built_components << tabs
        end
    end
end
text(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 191
def text(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        @built_components << Text.new(builder.built_props)
    end
end
vertical_splitter(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 103
def vertical_splitter(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        Splitter.vertical(builder.built_props).tap do |splitter|
            splitter.add_all_components(builder.built_components)

            @built_components << splitter
        end
    end
end
vertical_stack(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 79
def vertical_stack(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        Stack.vertical(builder.built_props).tap do |stack|
            stack.add_all_components(builder.built_components)

            @built_components << stack
        end
    end
end
window(props = Hash[], &build_block) click to toggle source
# File lib/components_builder/layout_builder.rb, line 55
def window(props = Hash[], &build_block)
    LayoutBuilder.new.tap do |builder|
        builder.eval(props: props, &build_block)

        Window.new(builder.built_props).tap do |window|
            window.add_all_components(builder.built_components)

            @built_components << window
        end
    end
end