Sha256: 77aa3120a423aa7e89e855892168627881b1192e0be0eb642d907c37a549cad4

Contents?: true

Size: 1.74 KB

Versions: 11

Compression:

Stored size: 1.74 KB

Contents

include_set Abstract::BsBadge

format :html do
  view :tabs, cache: :never do
    tabs tab_map, default_tab, load: :lazy do
      _render! tab_map.dig(default_tab, :view)
    end
  end

  def tab_map
    @tab_map ||= generate_tab_map
  end

  def tab_list
    []
  end

  def tab_options
    {}
  end

  def default_tab
    tab_from_params || tab_map.keys.first
  end

  def tab_badge count, label, opts={}
    haml :tab_badge, badge_haml_opts(count, label, opts)
  end

  def tab_title label, opts
    opts ||= {}
    label = tab_badge opts[:count], label, opts if opts[:count]
    wrap_with(:div, class: "tab-title") { label }
  end

  private

  def generate_tab_map
    options = tab_options
    tab_list.each_with_object({}) do |tab_key, hash|
      hash[tab_key] = {
        view: (options.dig(tab_key, :view) || "#{tab_key}_tab"),
        title: tab_title_from_map(tab_key, options[tab_key])
      }
    end
  end

  def tab_from_params
    Env.params[:tab]&.to_sym
  end

  def tab_url tab
    path tab: tab
  end

  def tab_title_from_map tab_key, opts
    opts ||= {}
    if Codename.exists? tab_key
      tab_title_from_fieldcode tab_key, opts
    else
      label = opts[:label] || tab_key
      tab_title label, opts
    end
  end

  def tab_title_from_fieldcode fieldcode, opts={}
    field_card = card.fetch fieldcode, new: {}

    %i[label count klass].each do |part|
      opts[part] = send("tab_title_#{part}", field_card) unless opts.key? part
    end

    tab_title opts[:label], opts
  end

  def tab_title_klass field_card
    css_classes field_card.safe_set_keys
  end

  def tab_title_count field_card
    field_card.try(:cached_count) || field_card.try(:count)
  end

  def tab_title_label field_card
    field_card.name.right_name.vary :plural
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
card-mod-tabs-0.17.0 set/abstract/tabs.rb
card-mod-tabs-0.16.0 set/abstract/tabs.rb
card-mod-tabs-0.15.6 set/abstract/tabs.rb
card-mod-tabs-0.15.5 set/abstract/tabs.rb
card-mod-tabs-0.15.4 set/abstract/tabs.rb
card-mod-tabs-0.15.3 set/abstract/tabs.rb
card-mod-tabs-0.15.1.2 set/abstract/tabs.rb
card-mod-tabs-0.15.2.pre1 set/abstract/tabs.rb
card-mod-tabs-0.15.1.1 set/abstract/tabs.rb
card-mod-tabs-0.15.1 set/abstract/tabs.rb
card-mod-tabs-0.15.0 set/abstract/tabs.rb