Module: Compass::SassExtensions::Sprites::SpriteMethods
- Included in:
- SpriteMap
- Defined in:
- lib/compass/sass_extensions/sprites/sprite_methods.rb
Constant Summary collapse
- SPRITE_VERSION =
Changing this string will invalidate all previously generated sprite images. We should do so only when the packing algorithm changes
"2"
Instance Method Summary collapse
- #cleanup_old_sprites ⇒ Object
-
#compute_image_metadata! ⇒ Object
Calculates the overal image dimensions collects image sizes and input parameters for each sprite Calculates the height.
-
#filename ⇒ Object
The on-the-disk filename of the sprite.
-
#generate ⇒ Object
Generate a sprite image if necessary.
-
#generation_required? ⇒ Boolean
Does this sprite need to be generated.
-
#image_filenames ⇒ Object
All the full-path filenames involved in this sprite.
- #init_engine ⇒ Object
-
#init_images ⇒ Object
Creates the Sprite::Image objects for each image and calculates the width.
- #log(action, filename, *extra) ⇒ Object
-
#mtime ⇒ Object
Mtime of the sprite file.
- #name_and_hash ⇒ Object
-
#outdated? ⇒ Boolean
Checks whether this sprite is outdated.
- #relativize(path) ⇒ Object
-
#save! ⇒ Object
Saves the sprite engine.
-
#size ⇒ Object
Calculate the size of the sprite.
-
#uniqueness_hash ⇒ Object
Returns the uniqueness hash for this sprite object.
Instance Method Details
#cleanup_old_sprites ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 65 def cleanup_old_sprites Sass::Util.glob(File.join(Compass.configuration.generated_images_path, "#{path}-s*.png")).each do |file| log :remove, file FileUtils.rm file Compass.configuration.run_sprite_removed(file) end end |
#compute_image_metadata! ⇒ Object
Calculates the overal image dimensions collects image sizes and input parameters for each sprite Calculates the height
13 14 15 16 17 18 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 13 def @width = 0 init_images compute_image_positions! init_engine end |
#filename ⇒ Object
The on-the-disk filename of the sprite
43 44 45 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 43 def filename File.join(Compass.configuration.generated_images_path, name_and_hash) end |
#generate ⇒ Object
Generate a sprite image if necessary
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 52 def generate if generation_required? if kwargs.get_var('cleanup').value cleanup_old_sprites end engine.construct_sprite Compass.configuration.run_sprite_generated(engine.canvas) save! else log :unchanged, filename end end |
#generation_required? ⇒ Boolean
Does this sprite need to be generated
74 75 76 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 74 def generation_required? !File.exists?(filename) || outdated? || [:force] end |
#image_filenames ⇒ Object
All the full-path filenames involved in this sprite
106 107 108 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 106 def image_filenames @images.map(&:file) end |
#init_engine ⇒ Object
20 21 22 23 24 25 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 20 def init_engine @engine = eval("::Compass::SassExtensions::Sprites::#{modulize}Engine.new(nil, nil, nil)") @engine.width = @width @engine.height = @height @engine.images = @images end |
#init_images ⇒ Object
Creates the Sprite::Image objects for each image and calculates the width
28 29 30 31 32 33 34 35 36 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 28 def init_images @images = Images.new image_names.each do |relative_file| @images << Image.new(self, relative_file, kwargs) end unless sort_method == 'none' @images.sort_by! sort_method end end |
#log(action, filename, *extra) ⇒ Object
128 129 130 131 132 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 128 def log(action, filename, *extra) if [:compass] && [:compass][:logger] && ![:quiet] [:compass][:logger].record(action, relativize(filename), *extra) end end |
#mtime ⇒ Object
Mtime of the sprite file
119 120 121 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 119 def mtime @mtime ||= File.mtime(filename) end |
#name_and_hash ⇒ Object
38 39 40 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 38 def name_and_hash "#{path}-s#{uniqueness_hash}.png" end |
#outdated? ⇒ Boolean
Checks whether this sprite is outdated
111 112 113 114 115 116 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 111 def outdated? if File.exists?(filename) return @images.any? {|image| image.mtime.to_i > self.mtime.to_i } end true end |
#relativize(path) ⇒ Object
47 48 49 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 47 def relativize(path) Pathname.new(path).relative_path_from(Pathname.new(Dir.pwd)).to_s rescue path end |
#save! ⇒ Object
Saves the sprite engine
96 97 98 99 100 101 102 103 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 96 def save! FileUtils.mkdir_p(File.dirname(filename)) saved = engine.save(filename) log :create, filename Compass.configuration.run_sprite_saved(filename) @mtime = nil if saved saved end |
#size ⇒ Object
Calculate the size of the sprite
124 125 126 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 124 def size [width, height] end |
#uniqueness_hash ⇒ Object
Returns the uniqueness hash for this sprite object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 79 def uniqueness_hash @uniqueness_hash ||= begin sum = Digest::MD5.new sum << SPRITE_VERSION sum << path sum << layout images.each do |image| [:relative_file, :height, :width, :repeat, :spacing, :position, :digest].each do |attr| sum << image.send(attr).to_s end end sum.hexdigest[0...10] end @uniqueness_hash end |