Sha256: be2a5b9a106093026f0b4195202e1436d12656170e5a843ca3fba1575fc90120

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module Trestle
  class Toolbar
    class Builder
      def initialize(template)
        @template = template
      end

      def button(content, options={})
        options[:class] = button_classes_from_options(options)

        button_tag(button_label(content, options), options)
      end

      def link(content, instance_or_url={}, options={})
        options = instance_or_url if instance_or_url.is_a?(Hash)
        options[:class] = button_classes_from_options(options)

        admin_link_to(button_label(content, options), instance_or_url, options)
      end

      # Only methods explicitly tagged as builder methods will be automatically
      # appended to the toolbar when called by Toolbar::Context.

      class_attribute :builder_methods
      self.builder_methods = []

      def self.builder_method(*methods)
        self.builder_methods += methods
      end

      builder_method :button, :link

    private
      delegate :admin_link_to, :button_tag, :content_tag, :safe_join, :icon, to: :@template

      def button_classes_from_options(options)
        classes = (options[:class] || "").split("\s")
        classes.unshift("btn-#{options.delete(:style) || "default"}")
        classes.unshift("btn") unless classes.include?("btn")
        classes.push("has-icon") if options[:icon]
        classes
      end

      def button_label(content, options)
        icon = icon(options.delete(:icon)) if options[:icon]
        label = content_tag(:span, content, class: "btn-label")

        safe_join([icon, label].compact, " ")
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
trestle-0.8.11 lib/trestle/toolbar/builder.rb
trestle-0.8.10 lib/trestle/toolbar/builder.rb