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