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.
-
#validate! ⇒ Object
Validates that the sprite_names are valid sass.
Instance Method Details
#cleanup_old_sprites ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 70 def cleanup_old_sprites Dir[File.join(Compass.configuration.generated_images_path, "#{path}-s*.png")].each do |file| next if file[filename] 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
48 49 50 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 48 def filename File.join(Compass.configuration.generated_images_path, name_and_hash) end |
#generate ⇒ Object
Generate a sprite image if necessary
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 57 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
80 81 82 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 80 def generation_required? !File.exists?(filename) || outdated? || [:force] end |
#image_filenames ⇒ Object
All the full-path filenames involved in this sprite
112 113 114 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 112 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 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 28 def init_images @images = image_names.collect do |relative_file| Image.new(self, relative_file, kwargs) end end |
#log(action, filename, *extra) ⇒ Object
134 135 136 137 138 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 134 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
125 126 127 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 125 def mtime @mtime ||= File.mtime(filename) end |
#name_and_hash ⇒ Object
43 44 45 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 43 def name_and_hash "#{path}-s#{uniqueness_hash}.png" end |
#outdated? ⇒ Boolean
Checks whether this sprite is outdated
117 118 119 120 121 122 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 117 def outdated? if File.exists?(filename) return @images.any? {|image| image.mtime.to_i > self.mtime.to_i } end true end |
#relativize(path) ⇒ Object
52 53 54 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 52 def relativize(path) Pathname.new(path).relative_path_from(Pathname.new(Dir.pwd)).to_s rescue path end |
#save! ⇒ Object
Saves the sprite engine
102 103 104 105 106 107 108 109 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 102 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
130 131 132 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 130 def size [width, height] end |
#uniqueness_hash ⇒ Object
Returns the uniqueness hash for this sprite object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 85 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 |
#validate! ⇒ Object
Validates that the sprite_names are valid sass
35 36 37 38 39 40 41 |
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 35 def validate! for sprite_name in sprite_names unless sprite_name =~ /\A#{Sass::SCSS::RX::IDENT}\Z/ raise Sass::SyntaxError, "#{sprite_name} must be a legal css identifier" end end end |