class Esvg::Svg
Attributes
asset[R]
name[R]
vesion[R]
Public Class Methods
new(name, symbols, parent)
click to toggle source
# File lib/esvg/svg.rb, line 10 def initialize(name, symbols, parent) @parent = parent @name = name @symbols = symbols @symbol_defs = [] @asset = File.basename(name).start_with?('_') @version = parent.config[:version] || Digest::MD5.hexdigest(symbols.map(&:mtime).join) end
Public Instance Methods
config()
click to toggle source
# File lib/esvg/svg.rb, line 25 def config @parent.config end
embed()
click to toggle source
# File lib/esvg/svg.rb, line 19 def embed %Q{if (!document.querySelector('#esvg-#{id}')) { document.querySelector('body').insertAdjacentHTML('afterbegin', '#{svg}') }} end
id()
click to toggle source
# File lib/esvg/svg.rb, line 35 def id if @name == '.' 'symbols' else dasherize "#{config[:prefix]}-#{name_key}" end end
named?(names=[])
click to toggle source
# File lib/esvg/svg.rb, line 29 def named?(names=[]) [names].flatten.map { |n| dasherize(n) }.include? dasherize(@name) end
path()
click to toggle source
# File lib/esvg/svg.rb, line 43 def path @path ||= begin name = name_key if name.start_with?('_') # Is it an asset? File.join config[:assets], "#{name}.js" else # or a build file? # User doesn't want a fingerprinted build file and hasn't set a version if !config[:fingerprint] && !config[:version] File.join config[:build], "#{name}.js" else File.join config[:build], "#{name}-#{@version}.js" end end end end
Private Instance Methods
name_key()
click to toggle source
# File lib/esvg/svg.rb, line 63 def name_key if @name == '_' # Root level asset file "_#{config[:filename]}".sub(/_+/, '_') elsif @name == '.' # Root level build file config[:filename] else @name end end
svg()
click to toggle source
# File lib/esvg/svg.rb, line 73 def svg if @svg && @symbols.select(&:changed?).empty? @svg else attr = { "data-symbol-class" => config[:class], "data-prefix" => config[:prefix], "version" => "1.1", "style" => "height:0;position:absolute" } defs = @symbols.map(&:defs).compact.join defs = "<defs>#{defs}</defs>" unless defs.empty? symbols = @symbols.map(&:symbol).join.gsub("\n",'') @svg = %Q{<svg id="esvg-#{id}" #{attributes(attr)} data-turbolinks-permanent>#{defs}#{symbols}</svg>} end end