Sha256: a21645f09f8217cab745a5aa2ef8fdc2ab972d02cf8b72ad76add273fe93fd9d

Contents?: true

Size: 1.51 KB

Versions: 5

Compression:

Stored size: 1.51 KB

Contents

require 'css_parser'
require 'awesome_print'
require 'pry'

class Sprite < Thor
  include Thor::Actions

  desc "build WIDGET", "Build CSS helpers for sprites generated by Fireworks exported to 'app/assets/images/WIDGET/sprite.*'"
  def build widget = 'default'
    parser = CssParser::Parser.new
    css    = File.read File.join 'app/assets/images', widget, 'sprite.css'

    css.gsub! 'sprite.png', "/assets/#{widget}/sprite.png"
    parser.add_block! css

    structure = []


    parser.each_selector do |selector, declarations, specificity|
      selector.gsub!(/[\.\#]/,'')
      properties = []
      declarations.split(';').each do |property|
        properties << property.split(':').map(&:strip)
      end
      properties << []
      structure << [selector, properties]
    end
    structure << []

    default = structure.shift[1]
    images  = structure

    structure = [widget, [[:default, default], [:images, images]]]
    sprites   = "sprites = (sprites " + stylusize(structure) + stylusize([]) + ")"

    file_path = File.join 'app/assets/stylesheets', 'sprites.styl'

    unless File.exists? file_path
      create_file file_path
      append_to_file file_path, 'sprites = ()'
    end
    append_to_file file_path, "\n#{sprites}"

    say "Do not forget to check for duplicates in the file above!"
  end


private

  def stylusize array, str = ""
    str << "("
    array.each do |item|
      if item.is_a? Array
        stylusize(item,str)
      else
        str << "('#{item}') "
      end
    end
    str << ") "
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ende-0.1.4 lib/tasks/sprite.thor
ende-0.1.3 lib/tasks/sprite.thor
ende-0.1.2 lib/tasks/sprite.thor
ende-0.1.1 lib/tasks/sprite.thor
ende-0.0.1 lib/tasks/sprite.thor