Class: Compass::SpriteImporter

Inherits:
Sass::Importers::Base
  • Object
show all
Defined in:
lib/compass/sprite_importer.rb

Constant Summary collapse

VAILD_FILE_NAME =
/\A#{Sass::SCSS::RX::IDENT}\Z/
SPRITE_IMPORTER_REGEX =
%r{((.+/)?([^\*.]+))/(.+?)\.png}
VALID_EXTENSIONS =
['.png']
TEMPLATE_FOLDER =
File.join(File.expand_path('../', __FILE__), 'sprite_importer')
CONTENT_TEMPLATE_FILE =
File.join(TEMPLATE_FOLDER, 'content.erb')
CONTENT_TEMPLATE =
ERB.new(File.read(CONTENT_TEMPLATE_FILE))

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.content_for_images(uri, name, skip_overrides = false) ⇒ Object

Generates the Sass for this sprite file



111
112
113
114
# File 'lib/compass/sprite_importer.rb', line 111

def self.content_for_images(uri, name, skip_overrides = false)
  binder = Compass::Sprites::Binding.new(:name => name, :uri => uri, :skip_overrides => skip_overrides, :sprite_names => sprite_names(uri), :files => files(uri))
  CONTENT_TEMPLATE.result(binder.get_binding)
end

.files(uri) ⇒ Object

Returns the Glob of image files for the uri



81
82
83
84
85
86
87
88
89
90
# File 'lib/compass/sprite_importer.rb', line 81

def self.files(uri)
  Compass.configuration.sprite_load_path.compact.each do |folder|
    files = Sass::Util.glob(File.join(folder, uri)).sort
    next if files.empty?
    return files
  end

  path = Compass.configuration.sprite_load_path.to_a.join(', ')
  raise Compass::SpriteException, %Q{No files were found in the load path matching "#{uri}". Your current load paths are: #{path}}
end

.find_all_sprite_map_files(path) ⇒ Object

finds all sprite files



16
17
18
19
20
# File 'lib/compass/sprite_importer.rb', line 16

def self.find_all_sprite_map_files(path)
  hex = "[0-9a-f]"
  glob = "*-s#{hex*10}{#{VALID_EXTENSIONS.join(",")}}"
  Sass::Util.glob(File.join(path, "**", glob))
end

.path(uri) ⇒ Object

The on-disk location of this sprite



75
76
77
78
# File 'lib/compass/sprite_importer.rb', line 75

def self.path(uri)
  path, _ = path_and_name(uri)
  path
end

.path_and_name(uri) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/compass/sprite_importer.rb', line 60

def self.path_and_name(uri)
  if uri =~ SPRITE_IMPORTER_REGEX
    [$1, $3]
  else
    raise Compass::Error, "invalid sprite path"
  end
end

.sass_engine(uri, name, importer, options) ⇒ Object

Returns a Sass::Engine for this sprite object



105
106
107
108
# File 'lib/compass/sprite_importer.rb', line 105

def self.sass_engine(uri, name, importer, options)
  content = content_for_images(uri, name, options[:skip_overrides])
  Sass::Engine.new(content, sass_options(uri, importer, options))
end

.sass_options(uri, importer, options) ⇒ Object

Returns the sass_options for this sprite



100
101
102
# File 'lib/compass/sprite_importer.rb', line 100

def self.sass_options(uri, importer, options)
  options.merge!(:filename => uri.gsub(%r{\*/},"*\\/"), :syntax => :scss, :importer => importer)
end

.sprite_name(uri) ⇒ Object

Name of this spite



69
70
71
72
# File 'lib/compass/sprite_importer.rb', line 69

def self.sprite_name(uri)
  _, name = path_and_name(uri)
  name
end

.sprite_names(uri) ⇒ Object

Returns an Array of image names without the file extension



93
94
95
96
97
# File 'lib/compass/sprite_importer.rb', line 93

def self.sprite_names(uri)
  files(uri).collect do |file|
    File.basename(file, '.png')
  end
end

Instance Method Details

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/compass/sprite_importer.rb', line 41

def eql?(other)
  other.class == self.class
end

#find(uri, options) ⇒ Object



22
23
24
25
26
27
# File 'lib/compass/sprite_importer.rb', line 22

def find(uri, options)
  if uri =~ SPRITE_IMPORTER_REGEX
    return self.class.sass_engine(uri, self.class.sprite_name(uri), self, options)
  end
  nil
end

#find_relative(uri, base, options) ⇒ Object



29
30
31
# File 'lib/compass/sprite_importer.rb', line 29

def find_relative(uri, base, options)
  nil
end

#hashObject



37
38
39
# File 'lib/compass/sprite_importer.rb', line 37

def hash
  self.class.name.hash
end

#key(uri, options = {}) ⇒ Object



51
52
53
# File 'lib/compass/sprite_importer.rb', line 51

def key(uri, options={})
  [self.class.name + ":sprite:" + File.dirname(File.expand_path(uri)), File.basename(uri)]
end

#mtime(uri, options) ⇒ Object



45
46
47
48
49
# File 'lib/compass/sprite_importer.rb', line 45

def mtime(uri, options)
  self.class.files(uri).sort.inject(Time.at(0)) do |max_time, file|
    (t = File.mtime(file)) > max_time ? t : max_time
  end
end

#public_url(*args) ⇒ Object



55
56
57
# File 'lib/compass/sprite_importer.rb', line 55

def public_url(*args)
  nil
end

#to_sObject



33
34
35
# File 'lib/compass/sprite_importer.rb', line 33

def to_s
  self.class.name
end