diff --git a/Gemfile.lock b/Gemfile.lock
index 88cf3789..d0e4b152 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
- compass (0.12.alpha.0.8ede06f)
+ compass (0.12.alpha.0.a00044c)
chunky_png (~> 1.2)
fssm (>= 0.2.7)
sass (~> 3.1)
@@ -50,14 +50,14 @@ GEM
term-ansicolor (>= 1.0.6)
diff-lcs (1.1.3)
em-dir-watcher (0.9.4)
- em-websocket (0.3.1)
+ em-websocket (0.3.5)
addressable (>= 2.1.1)
eventmachine (>= 0.12.9)
erubis (2.6.6)
abstract (>= 1.0.0)
eventmachine (0.12.10)
fssm (0.2.7)
- gherkin (2.5.1)
+ gherkin (2.5.4)
json (>= 1.4.6)
haml (3.1.3)
i18n (0.5.0)
@@ -72,7 +72,7 @@ GEM
mime-types (~> 1.16)
treetop (~> 1.4.8)
metaclass (0.0.1)
- mime-types (1.16)
+ mime-types (1.17.1)
mocha (0.10.0)
metaclass (~> 0.0.1)
polyglot (0.3.2)
@@ -95,9 +95,10 @@ GEM
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (~> 0.14.4)
- rake (0.9.2)
- rcov (0.9.10)
- rdoc (3.9.4)
+ rake (0.9.2.2)
+ rcov (0.9.11)
+ rdoc (3.11)
+ json (~> 1.4)
rspec (2.0.1)
rspec-core (~> 2.0.1)
rspec-expectations (~> 2.0.1)
@@ -111,14 +112,14 @@ GEM
ruby-json (1.1.2)
ruby-prof (0.10.8)
rubyzip (0.9.4)
- sass (3.1.7)
- term-ansicolor (1.0.6)
+ sass (3.1.10)
+ term-ansicolor (1.0.7)
thor (0.14.6)
timecop (0.3.5)
treetop (1.4.10)
polyglot
polyglot (>= 0.3.1)
- tzinfo (0.3.29)
+ tzinfo (0.3.30)
PLATFORMS
ruby
diff --git a/lib/compass/sprite_importer.rb b/lib/compass/sprite_importer.rb
index 442cbbc0..fbda3d50 100644
--- a/lib/compass/sprite_importer.rb
+++ b/lib/compass/sprite_importer.rb
@@ -1,8 +1,16 @@
+require 'erb'
+require 'compass/sprite_importer/binding'
module Compass
class SpriteImporter < Sass::Importers::Base
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))
+
+
# finds all sprite files
def self.find_all_sprite_map_files(path)
@@ -97,82 +105,8 @@ module Compass
# Generates the Sass for this sprite file
def self.content_for_images(uri, name, skip_overrides = false)
- <<-SCSS
-@import "compass/utilities/sprites/base";
-
-// General Sprite Defaults
-// You can override them before you import this file.
-$#{name}-sprite-base-class: ".#{name}-sprite" !default;
-$#{name}-sprite-dimensions: false !default;
-$#{name}-position: 0% !default;
-$#{name}-spacing: 0 !default;
-$#{name}-repeat: no-repeat !default;
-$#{name}-prefix: '' !default;
-$#{name}-clean-up: true !default;
-$#{name}-layout: vertical !default;
-
-#{skip_overrides ? "$#{name}-sprites: sprite-map(\"#{uri}\", $layout: $#{name}-layout, $cleanup: $#{name}-clean-up);" : generate_overrides(uri, name) }
-
-// All sprites should extend this class
-// The #{name}-sprite mixin will do so for you.
-\#{$#{name}-sprite-base-class} {
- background: $#{name}-sprites no-repeat;
-}
-
-// Use this to set the dimensions of an element
-// based on the size of the original image.
-@mixin #{name}-sprite-dimensions($name) {
- @include sprite-dimensions($#{name}-sprites, $name)
-}
-
-// Move the background position to display the sprite.
-@mixin #{name}-sprite-position($name, $offset-x: 0, $offset-y: 0) {
- @include sprite-background-position($#{name}-sprites, $name, $offset-x, $offset-y)
-}
-
-// Extends the sprite base class and set the background position for the desired sprite.
-// It will also apply the image dimensions if $dimensions is true.
-@mixin #{name}-sprite($name, $dimensions: $#{name}-sprite-dimensions, $offset-x: 0, $offset-y: 0) {
- @extend \#{$#{name}-sprite-base-class};
- @include sprite($#{name}-sprites, $name, $dimensions, $offset-x, $offset-y)
-}
-
-@mixin #{name}-sprites($sprite-names, $dimensions: $#{name}-sprite-dimensions, $prefix: sprite-map-name($#{name}-sprites), $offset-x: 0, $offset-y: 0) {
- @include sprites($#{name}-sprites, $sprite-names, $#{name}-sprite-base-class, $dimensions, $prefix, $offset-x, $offset-y)
-}
-
-// Generates a class for each sprited image.
-@mixin all-#{name}-sprites($dimensions: $#{name}-sprite-dimensions, $prefix: sprite-map-name($#{name}-sprites), $offset-x: 0, $offset-y: 0) {
- @include #{name}-sprites(#{sprite_names(uri).join(" ")}, $dimensions, $prefix, $offset-x, $offset-y);
-}
-SCSS
- end
-
- # Generates the override defaults for this Sprite
- # $#{name}-#{sprite_name}-position
- # $#{name}-#{sprite_name}-spacing
- # #{name}-#{sprite_name}-repeat:
- def self.generate_overrides(uri, name)
- sprites = sprite_names(uri)
- content = <<-TXT
-// These variables control the generated sprite output
-// You can override them selectively before you import this file.
- TXT
- sprites.map do |sprite_name|
- content += <<-SCSS
-$#{name}-#{sprite_name}-position: $#{name}-position !default;
-$#{name}-#{sprite_name}-spacing: $#{name}-spacing !default;
-$#{name}-#{sprite_name}-repeat: $#{name}-repeat !default;
- SCSS
- end.join
-
- content += "\n$#{name}-sprites: sprite-map(\"#{uri}\", \n $layout: $#{name}-layout, \n $cleanup: $#{name}-clean-up,\n"
- content += sprites.map do |sprite_name|
-%Q{ $#{name}-#{sprite_name}-position: $#{name}-#{sprite_name}-position,
- $#{name}-#{sprite_name}-spacing: $#{name}-#{sprite_name}-spacing,
- $#{name}-#{sprite_name}-repeat: $#{name}-#{sprite_name}-repeat}
- end.join(",\n")
- content += ");"
+ binder = Compass::Sprites::Binding.new(:name => name, :uri => uri, :skip_overrides => skip_overrides)
+ CONTENT_TEMPLATE.result(binder.get_binding)
end
end
end
diff --git a/lib/compass/sprite_importer/binding.rb b/lib/compass/sprite_importer/binding.rb
new file mode 100644
index 00000000..470e23b2
--- /dev/null
+++ b/lib/compass/sprite_importer/binding.rb
@@ -0,0 +1,15 @@
+require 'ostruct'
+module Compass
+ module Sprites
+ class Binding < OpenStruct
+
+ def sprite_names
+ @sprite_names ||= Compass::SpriteImporter.sprite_names(uri)
+ end
+
+ def get_binding
+ binding
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/compass/sprite_importer/content.erb b/lib/compass/sprite_importer/content.erb
new file mode 100644
index 00000000..4a9d7ef2
--- /dev/null
+++ b/lib/compass/sprite_importer/content.erb
@@ -0,0 +1,67 @@
+@import "compass/utilities/sprites/base";
+
+// General Sprite Defaults
+// You can override them before you import this file.
+$<%= name %>-sprite-base-class: ".<%= name %>-sprite" !default;
+$<%= name %>-sprite-dimensions: false !default;
+$<%= name %>-position: 0% !default;
+$<%= name %>-spacing: 0 !default;
+$<%= name %>-repeat: no-repeat !default;
+$<%= name %>-prefix: '' !default;
+$<%= name %>-clean-up: true !default;
+$<%= name %>-layout:vertical !default;
+
+<% if skip_overrides %>
+ $<%= name %>-sprites: sprite-map("<%= uri %>", $layout: $<%= name %>-layout, $cleanup: $<%= name %>-clean-up);
+<% else %>
+ // These variables control the generated sprite output
+ // You can override them selectively before you import this file.
+ <% sprite_names.each do |sprite_name| %>
+ $<%= name %>-<%= sprite_name %>-position: $<%= name %>-position !default;
+ $<%= name %>-<%= sprite_name %>-spacing: $<%= name %>-spacing !default;
+ $<%= name %>-<%= sprite_name %>-repeat: $<%= name %>-repeat !default;
+ <% end %>
+
+ $<%= name %>-sprites: sprite-map("<%= uri %>",
+ <% sprite_names.map do |sprite_name| %>
+ $<%= name %>-<%= sprite_name %>-position: $<%= name %>-<%= sprite_name %>-position,
+ $<%= name %>-<%= sprite_name %>-spacing: $<%= name %>-<%= sprite_name %>-spacing,
+ $<%= name %>-<%= sprite_name %>-repeat: $<%= name %>-<%= sprite_name %>-repeat,
+ <% end %>
+ $layout: $<%= name %>-layout,
+ $cleanup: $<%= name %>-clean-up
+ );
+<% end %>
+
+// All sprites should extend this class
+// The <%= name %>-sprite mixin will do so for you.
+#{$<%= name %>-sprite-base-class} {
+ background: $<%= name %>-sprites no-repeat;
+}
+
+// Use this to set the dimensions of an element
+// based on the size of the original image.
+@mixin <%= name %>-sprite-dimensions($name) {
+ @include sprite-dimensions($<%= name %>-sprites, $name)
+}
+
+// Move the background position to display the sprite.
+@mixin <%= name %>-sprite-position($name, $offset-x: 0, $offset-y: 0) {
+ @include sprite-background-position($<%= name %>-sprites, $name, $offset-x, $offset-y)
+}
+
+// Extends the sprite base class and set the background position for the desired sprite.
+// It will also apply the image dimensions if $dimensions is true.
+@mixin <%= name %>-sprite($name, $dimensions: $<%= name %>-sprite-dimensions, $offset-x: 0, $offset-y: 0) {
+ @extend #{$<%= name %>-sprite-base-class};
+ @include sprite($<%= name %>-sprites, $name, $dimensions, $offset-x, $offset-y)
+}
+
+@mixin <%= name %>-sprites($sprite-names, $dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0) {
+ @include sprites($<%= name %>-sprites, $sprite-names, $<%= name %>-sprite-base-class, $dimensions, $prefix, $offset-x, $offset-y)
+}
+
+// Generates a class for each sprited image.
+@mixin all-<%= name %>-sprites($dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0) {
+ @include <%= name %>-sprites(<%= sprite_names.join(" ") %>, $dimensions, $prefix, $offset-x, $offset-y);
+}
\ No newline at end of file