module ActiveAdmin::Iconic

Constants

ICONS

Public Class Methods

icon(name, options = {}) click to toggle source

Render an icon:

Iconic.icon :loop, width: 100, height: 100, color: "#5E6469"
Iconic.icon :loop, width: "1em", height: "1em", color: "#5E6469"

NOTE: you can omit the dimensions if they are specified in css

# File lib/active_admin/iconic.rb, line 15
def self.icon(name, options = {})
  options = {
    color: default_color,
    id: ""
  }.merge(options)

  options[:style] = "fill:#{options[:color]};"
  options[:fill] = options.delete(:color)

  css = options.delete(:css) || {}

  # extract desired dimensions to be used as the wrapper's inline styles
  # Convert to strings representations of pixels
  [:width, :height].each do |key|
    value = options.delete key
    css[key] ||= "#{value}px" unless value.blank? || value.is_a?(String)
  end
  css_str = css.map {|k,v| "#{k}:#{v}"}.join(";")
  css_str = "style=\"#{css_str}\"" if css_str.present?

  
  # make the svg itself expand to its parent
  options[:width] = options[:height] = "100%"

  template = ICONS[name.to_sym]

  if template
    svg = template.dup
    options.each do |key, value|
      svg.gsub!("{#{key}}", value)
    end

    "<span class=\"icon icon_#{name}\" #{css_str}>#{svg}</span>".html_safe
  else
    raise "Could not find the icon named #{name}"
  end
end