Sha256: b0aa5bb029e24fa706ad3f20fa54c51c2d49857b9e2a322a43175f3504b8693f

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

require 'zlib'
require 'digest'

module Esvg
  class Svg
    include Esvg::Utils

    attr_reader :asset, :vesion, :name

    def initialize(name, symbols, config={})
      @name = name
      @config = config
      @symbols = symbols
      @asset = File.basename(name).start_with?('_')
      @version = @config[:version] || Digest::MD5.hexdigest(symbols.map(&:mtime).join)
    end

    def embed
      %Q{if (!document.querySelector('#esvg-#{id}')) {
      document.querySelector('body').insertAdjacentHTML('afterbegin', '#{svg}')
    }}
    end

    def named?(names=[])
      [names].flatten.map { 
        |n| dasherize(n) 
      }.include? dasherize(@name)
    end

    def id
      if @name == '.'
        'symbols'
      else
        dasherize "#{@config[:prefix]}-#{name_key}"
      end
    end

    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

    def name_key
      if @name == '_'  # Root level asset file
        "_#{@config[:filename]}".sub(/_+/, '_')
      elsif @name == '.'      # Root level build file
        @config[:filename]
      else
        @name
      end
    end

    def optimize
      @symbols.map(&:optimize).join.gsub("\n",'')
    end

    def svg
      attr = {
        "data-symbol-class": @config[:class],
        "data-prefix": @config[:prefix],
        "version": "1.1",
        "style": "height:0;position:absolute"
      }
      %Q{<svg id="esvg-#{id}" #{attributes(attr)}>#{optimize}</svg>}
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
esvg-4.2.1 lib/esvg/svg.rb
esvg-4.2.0 lib/esvg/svg.rb