module SvgHeartsYou::Helpers
Public Instance Methods
svg_inline(filename, options={})
click to toggle source
# File lib/svg_hearts_you/helpers.rb, line 37 def svg_inline(filename, options={}) # Add .svg extension if missing filename += '.svg' unless filename.end_with?('.svg') svg_file = SvgHeartsYou::find_svg_file(filename) doc = Nokogiri::HTML::DocumentFragment.parse(svg_file) svg = doc.at_css 'svg' # Attributes are added after options.each do |key, value| svg[key.to_s] = value end stringify(svg) end
svg_symbol(filename, options={}) { |attributes| ... }
click to toggle source
# File lib/svg_hearts_you/helpers.rb, line 54 def svg_symbol(filename, options={}) folder_mode = options.delete(:folder) if folder_mode folders = [*filename] read_files = [] folders.each do |folder_name| read_files += SvgHeartsYou::svgs_for_folder(folder_name) end symbols = read_files.map do |file| doc = Nokogiri::HTML::DocumentFragment.parse(file[:file]) { node: doc.at_css('svg'), filename: file[:filename] } end else files = [*filename] symbols = files.map do |file| svg_file = SvgHeartsYou::find_svg_file(file) doc = Nokogiri::HTML::DocumentFragment.parse(svg_file) { node: doc.at_css('svg'), filename: file } end end doc = Nokogiri::HTML::DocumentFragment.parse('') wrapper_svg = Nokogiri::XML::Node.new 'svg', doc wrapper_svg['version'] = '1.1' wrapper_svg['xmlns'] = 'http://www.w3.org/2000/svg' wrapper_svg['style'] = 'display: none;' symbols.each do |symbol| node = symbol[:node] # Convert node.name = 'symbol' node['id'] = symbol[:filename].chomp('.svg') # add `each` items here if options[:each] options[:each].each do |key, value| node[key.to_s] = value end end %w(version xmlns xmlns:xlink).each do |attr| node.delete attr end if block_given? attributes = {} node.entries.each do |item| attributes[item[0].to_sym] = item[1] end # Allow each symbol to be configured if block given yield(attributes) attributes.each do |key, value| node[key.to_s] = value end end wrapper_svg.add_child(node) end options.delete(:each) # Put remaining options on parent svg tag options.each do |key, value| wrapper_svg[key.to_s] = value end stringify(wrapper_svg) end
svg_use(id, options={})
click to toggle source
# File lib/svg_hearts_you/helpers.rb, line 130 def svg_use(id, options={}) # Strip .svg extension if necessary id.gsub!(/\.svg\z/, '') # Add hash symbol to beginning if necessary id = '#' + id unless id.include?('#') doc = Nokogiri::HTML::DocumentFragment.parse <<-YAYUSE <svg version="1.1" xmlns="http://www.w3.org/2000/svg"> <use xlink:href="#{id}"> </svg> YAYUSE svg = doc.at_css 'svg' # TODO allow for the title and desc stuff options.delete :title options.delete :desc options.each do |key, value| svg[key.to_s] = value end stringify(svg) end
Private Instance Methods
stringify(node)
click to toggle source
# File lib/svg_hearts_you/helpers.rb, line 157 def stringify(node) str = node.to_html str = str.html_safe if str.respond_to? :html_safe str end