Sha256: e0f9605435d100b1fb65ea4f0c8ea391213deb91f11660874a204a5b7037979c

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

namespace :tao do

  desc 'generate svg icons.'
  task :generate_icons => :environment do
    Dir.mkdir "#{Rails.root}/vendor/assets/javascripts/tao"

    File.open "#{Rails.root}/vendor/assets/javascripts/tao/icons.coffee", 'w' do |f|
      f.puts %{tao.iconsHtml = '''#{svg_html}'''}
    end
  end

  private

  def svg_html
    %{<svg id="tao-icons" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none">\n#{symbols}</svg>}
  end

  def svg_files
    @svg_files ||= Dir.glob(File.expand_path("#{::Rails.root}/app/assets/icons/*.svg")).uniq
  end

  def symbols
    svg_files.map {|file| "  #{symbol(file)}\n"}.join
  end

  def symbol(path)
    name = File.basename(path, ".*").underscore().dasherize()
    content = File.read(path)
    content.gsub(/<?.+\?>/,'')
      .gsub(/<!.+?>/,'')
      .gsub(/<title>.*<\/title>/, '')
      .gsub(/<desc>.*<\/desc>/, '')
      .gsub(/id=/,'class=')
      .gsub(/<svg.+?>/, %Q{<svg id="icon-#{name}" #{dimensions(content)}>})
      .gsub(/svg/,'symbol')
      .gsub(/\sfill=".+?"/,'')
      .gsub(/\n/, '') # Remove endlines
      .gsub(/\s{2,}/, ' ') # Remove whitespace
      .gsub(/>\s+</, '><') # Remove whitespace between tags
  end

  def dimensions(content)
    dimension = content.scan(/<svg.+(viewBox=["'](.+?)["'])/).flatten
    %Q{#{dimension.first} width="100%" height="100%"}
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tao_on_rails-0.3.0 lib/tasks/tao_icons.rake