Sha256: 3e8d51db4a72ffb60ff99ef87918118be98036ab1d99688d9fa964bada26e391

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

class BootstrapBuilders::Panel
  def initialize(args)
    @title = args.fetch(:title)
    @controls = args[:controls]
    @table = args[:table]
    @block = args.fetch(:block)
    @context = args.fetch(:context)
    @class = args[:class]
    @data = args[:data]

    @css = {}
    @css[:width] = args.fetch(:width) if args[:width]
  end

  def html
    @panel = HtmlGen::Element.new(:div, inden: "  ", classes: container_classes, css: @css, data: @data)

    add_heading if @title || @controls

    if @table
      add_table
    else
      add_body
    end

    html = @panel.html

    if html.respond_to?(:html_safe)
      html.html_safe
    else
      html
    end
  end

private

  def add_heading
    heading = @panel.add_ele(:div, classes: ["panel-heading", "clearfix"])

    if !@title || @title.to_s.strip.empty?
      heading.add_ele(:div, classes: ["panel-title", "pull-left"], str_html: " ") if @controls
    else
      heading.add_ele(:div, classes: ["panel-title", "pull-left"], str: @title)
    end

    heading.add_ele(:div, classes: ["pull-right"], str_html: controls_content) if @controls
  end

  def controls_content
    if @controls.is_a?(Array)
      @controls.join(" ")
    else
      @controls.to_s
    end
  end

  def add_table
    table_responsive = @panel.add_ele(:div, classes: ["table-responsive"])

    table_args = {
      class: "bb-panel-table",
      bs_classes: ["table-striped", "table-hover", "bb-panel-table"],
      context: @context,
      blk: @block
    }

    table_args.merge!(@table) if @table.is_a?(Hash)

    table = BootstrapBuilders::Table.new(table_args)
    table_responsive.add_html(table.html)
  end

  def add_body
    @panel.add_html(@context.content_tag(:div, nil, class: ["panel-body"], &@block))
  end

  def container_classes
    classes = ["panel", "panel-default", "bb-panel"]

    if @class.is_a?(String)
      classes += @class.split(/\s+/)
    elsif @class.is_a?(Array)
      classes += @class
    end

    classes
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bootstrap_builders-0.0.4 lib/bootstrap_builders/panel.rb