lib/active_admin/iconic.rb in activeadmin-0.6.6 vs lib/active_admin/iconic.rb in activeadmin-1.0.0.pre1

- old
+ new

@@ -5,44 +5,46 @@ # Default color to use for icons @@default_color = "#5E6469" mattr_accessor :default_color - # Default width to use for icons - @@default_width = 15 - mattr_accessor :default_width - # Default height to use for icons - @@default_height = 15 - mattr_accessor :default_height - # Render an icon: - # Iconic.icon :loop + # 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 def self.icon(name, options = {}) options = { - :color => default_color, - :width => default_width, - :height => default_height, - :id => "" + 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| - options[key] = "#{options[key]}px" unless options[key].is_a?(String) + 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}\">#{svg}</span>".html_safe + + "<span class=\"icon icon_#{name}\" #{css_str}>#{svg}</span>".html_safe else raise "Could not find the icon named #{name}" end end