class Heroicon::Icon
Attributes
name[R]
options[R]
path_options[R]
variant[R]
Public Class Methods
new(name:, variant:, options:, path_options:)
click to toggle source
# File lib/heroicon/icon.rb, line 7 def initialize(name:, variant:, options:, path_options:) @name = name @variant = safe_variant(variant) @options = options @path_options = path_options end
Private Class Methods
render(**kwargs)
click to toggle source
# File lib/heroicon/icon.rb, line 99 def render(**kwargs) new(**kwargs).render end
Public Instance Methods
render()
click to toggle source
# File lib/heroicon/icon.rb, line 14 def render return warning unless file.present? doc = Nokogiri::HTML::DocumentFragment.parse(file) svg = doc.at_css "svg" path_options.each do |key, value| attribute = key.to_s.dasherize svg.css("path[#{attribute}]").each do |item| item[attribute] = value.to_s end end prepend_default_class_name options.each do |key, value| svg[key.to_s] = value end doc end
Private Instance Methods
disable_default_class?()
click to toggle source
# File lib/heroicon/icon.rb, line 62 def disable_default_class? @disable_default_class ||= !!options.delete(:disable_default_class) end
file()
click to toggle source
# File lib/heroicon/icon.rb, line 74 def file @file ||= File.read(file_path).force_encoding("UTF-8") rescue nil end
file_path()
click to toggle source
# File lib/heroicon/icon.rb, line 80 def file_path File.join(Heroicon.root, "app/assets/images/heroicon/#{variant}/#{name}.svg") end
prepend_default_class_name()
click to toggle source
Prepends the default CSS class name for an icon. You can provide a String, which will apply to all icons, or a Hash, which will apply to the specified variant.
@example
Heroicon.configure do |config| config.default_class = { solid: "h-5 w-5", outline: "h-6 w-6" } end #=> <svg class="h-5 w-5">...</svg>
# File lib/heroicon/icon.rb, line 48 def prepend_default_class_name return if disable_default_class? default_class_config = Heroicon.configuration.default_class default_class = if default_class_config.is_a?(String) default_class_config elsif default_class_config.is_a?(Hash) default_class_config[variant] end options[:class] = "#{default_class} #{options[:class]}".strip if default_class.present? end
safe_variant(provided_variant)
click to toggle source
# File lib/heroicon/icon.rb, line 66 def safe_variant(provided_variant) if %i[solid outline].include?(provided_variant.to_sym) provided_variant else :solid end end
warning()
click to toggle source
# File lib/heroicon/icon.rb, line 84 def warning return unless Rails.env.development? script = <<-HTML <script type="text/javascript"> //<![CDATA[ console.warn("Heroicon: Failed to find heroicon: #{name}") //]]> </script> HTML script.strip end