simple-compass 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/.gitignore +2 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +6 -0
  4. data/Gemfile.lock +26 -0
  5. data/Rakefile +8 -0
  6. data/lib/simple-compass.rb +17 -0
  7. data/lib/simple-compass/sass/functions/display.rb +27 -0
  8. data/lib/simple-compass/sass/functions/lists.rb +101 -0
  9. data/lib/simple-compass/sass/functions/selectors.rb +64 -0
  10. data/lib/simple-compass/sass/functions/sprites.rb +218 -0
  11. data/lib/simple-compass/version.rb +3 -0
  12. data/sass/compass.scss +1 -0
  13. data/sass/compass/_css3.scss +20 -0
  14. data/sass/compass/_layout.scss +3 -0
  15. data/sass/compass/_reset-legacy.scss +3 -0
  16. data/sass/compass/_reset.scss +3 -0
  17. data/sass/compass/_support.scss +40 -0
  18. data/sass/compass/_typography.scss +4 -0
  19. data/sass/compass/_utilities.scss +9 -0
  20. data/sass/compass/css3/_appearance.scss +17 -0
  21. data/sass/compass/css3/_background-clip.scss +43 -0
  22. data/sass/compass/css3/_background-origin.scss +42 -0
  23. data/sass/compass/css3/_background-size.scss +26 -0
  24. data/sass/compass/css3/_border-radius.scss +130 -0
  25. data/sass/compass/css3/_box-shadow.scss +76 -0
  26. data/sass/compass/css3/_box-sizing.scss +13 -0
  27. data/sass/compass/css3/_box.scss +111 -0
  28. data/sass/compass/css3/_columns.scss +157 -0
  29. data/sass/compass/css3/_filter.scss +23 -0
  30. data/sass/compass/css3/_font-face.scss +48 -0
  31. data/sass/compass/css3/_hyphenation.scss +77 -0
  32. data/sass/compass/css3/_images.scss +132 -0
  33. data/sass/compass/css3/_inline-block.scss +22 -0
  34. data/sass/compass/css3/_opacity.scss +19 -0
  35. data/sass/compass/css3/_pie.scss +73 -0
  36. data/sass/compass/css3/_regions.scss +22 -0
  37. data/sass/compass/css3/_shared.scss +38 -0
  38. data/sass/compass/css3/_text-shadow.scss +87 -0
  39. data/sass/compass/css3/_transform-legacy.scss +87 -0
  40. data/sass/compass/css3/_transform.scss +598 -0
  41. data/sass/compass/css3/_transition.scss +221 -0
  42. data/sass/compass/css3/_user-interface.scss +17 -0
  43. data/sass/compass/layout/_grid-background.scss +178 -0
  44. data/sass/compass/layout/_sticky-footer.scss +23 -0
  45. data/sass/compass/layout/_stretching.scss +24 -0
  46. data/sass/compass/reset/_utilities-legacy.scss +135 -0
  47. data/sass/compass/reset/_utilities.scss +142 -0
  48. data/sass/compass/typography/_links.scss +3 -0
  49. data/sass/compass/typography/_lists.scss +4 -0
  50. data/sass/compass/typography/_text.scss +4 -0
  51. data/sass/compass/typography/_vertical_rhythm.scss +221 -0
  52. data/sass/compass/typography/links/_hover-link.scss +5 -0
  53. data/sass/compass/typography/links/_link-colors.scss +28 -0
  54. data/sass/compass/typography/links/_unstyled-link.scss +7 -0
  55. data/sass/compass/typography/lists/_bullets.scss +34 -0
  56. data/sass/compass/typography/lists/_horizontal-list.scss +61 -0
  57. data/sass/compass/typography/lists/_inline-block-list.scss +50 -0
  58. data/sass/compass/typography/lists/_inline-list.scss +44 -0
  59. data/sass/compass/typography/text/_ellipsis.scss +25 -0
  60. data/sass/compass/typography/text/_force-wrap.scss +12 -0
  61. data/sass/compass/typography/text/_nowrap.scss +2 -0
  62. data/sass/compass/typography/text/_replacement.scss +68 -0
  63. data/sass/compass/utilities/_color.scss +1 -0
  64. data/sass/compass/utilities/_general.scss +6 -0
  65. data/sass/compass/utilities/_links.scss +5 -0
  66. data/sass/compass/utilities/_lists.scss +6 -0
  67. data/sass/compass/utilities/_print.scss +17 -0
  68. data/sass/compass/utilities/_sprites.scss +2 -0
  69. data/sass/compass/utilities/_tables.scss +3 -0
  70. data/sass/compass/utilities/_text.scss +5 -0
  71. data/sass/compass/utilities/color/_contrast.scss +28 -0
  72. data/sass/compass/utilities/general/_clearfix.scss +44 -0
  73. data/sass/compass/utilities/general/_float.scss +30 -0
  74. data/sass/compass/utilities/general/_hacks.scss +46 -0
  75. data/sass/compass/utilities/general/_min.scss +16 -0
  76. data/sass/compass/utilities/general/_reset.scss +2 -0
  77. data/sass/compass/utilities/general/_tabs.scss +1 -0
  78. data/sass/compass/utilities/general/_tag-cloud.scss +18 -0
  79. data/sass/compass/utilities/links/_hover-link.scss +3 -0
  80. data/sass/compass/utilities/links/_link-colors.scss +3 -0
  81. data/sass/compass/utilities/links/_unstyled-link.scss +3 -0
  82. data/sass/compass/utilities/lists/_bullets.scss +3 -0
  83. data/sass/compass/utilities/lists/_horizontal-list.scss +3 -0
  84. data/sass/compass/utilities/lists/_inline-block-list.scss +3 -0
  85. data/sass/compass/utilities/lists/_inline-list.scss +3 -0
  86. data/sass/compass/utilities/sprites/_base.scss +66 -0
  87. data/sass/compass/utilities/sprites/_sprite-img.scss +79 -0
  88. data/sass/compass/utilities/tables/_alternating-rows-and-columns.scss +22 -0
  89. data/sass/compass/utilities/tables/_borders.scss +33 -0
  90. data/sass/compass/utilities/tables/_scaffolding.scss +9 -0
  91. data/sass/compass/utilities/text/_ellipsis.scss +3 -0
  92. data/sass/compass/utilities/text/_nowrap.scss +3 -0
  93. data/sass/compass/utilities/text/_replacement.scss +3 -0
  94. data/simple-compass.gemspec +21 -0
  95. data/spec/fixtures/headings_test.sass +2 -0
  96. data/spec/fixtures/opacity_test.sass +7 -0
  97. data/spec/fixtures/reset_test.sass +1 -0
  98. data/spec/headings_spec.rb +9 -0
  99. data/spec/opacity_spec.rb +9 -0
  100. data/spec/reset_spec.rb +9 -0
  101. data/spec/spec_helper.rb +7 -0
  102. metadata +169 -0
@@ -0,0 +1,2 @@
1
+ .sass-cache
2
+ pkg
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem 'simple-compass', :path => '.'
6
+ gem 'rspec'
@@ -0,0 +1,26 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ simple-compass (0.0.1)
5
+ sass
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.2.1)
11
+ rspec (2.13.0)
12
+ rspec-core (~> 2.13.0)
13
+ rspec-expectations (~> 2.13.0)
14
+ rspec-mocks (~> 2.13.0)
15
+ rspec-core (2.13.0)
16
+ rspec-expectations (2.13.0)
17
+ diff-lcs (>= 1.1.3, < 2.0)
18
+ rspec-mocks (2.13.0)
19
+ sass (3.2.6)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ rspec
26
+ simple-compass!
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |spec|
5
+ spec.verbose = false
6
+ end
7
+
8
+ task :default => :spec
@@ -0,0 +1,17 @@
1
+ require 'sass'
2
+
3
+ module Compass
4
+ module Frameworks
5
+ def self.register(name, options = {})
6
+ Sass.load_paths << options[:stylesheets_directory]
7
+ end
8
+ end
9
+ end
10
+
11
+ root_dir = File.join(File.dirname(__FILE__), '..')
12
+
13
+ sass_dir = File.expand_path File.join root_dir, 'sass'
14
+ Sass.load_paths << sass_dir
15
+
16
+ functions_dir = File.expand_path File.join root_dir, 'lib', 'simple-compass', 'sass', 'functions'
17
+ Dir[File.join(functions_dir, "**/*.rb")].each { |f| require f }
@@ -0,0 +1,27 @@
1
+ module Sass::Script::Functions
2
+ DEFAULT_DISPLAY = {
3
+ :block => %w{address article aside blockquote center dir div dd details dl dt fieldset
4
+ figcaption figure form footer frameset h1 h2 h3 h4 h5 h6 hr header hgroup
5
+ isindex menu nav noframes noscript ol p pre section summary ul},
6
+ :inline => %w{a abbr acronym audio b basefont bdo big br canvas cite code command
7
+ datalist dfn em embed font i img input keygen kbd label mark meter output
8
+ progress q rp rt ruby s samp select small span strike strong sub
9
+ sup textarea time tt u var video wbr},
10
+ :"inline-block" => %w{img},
11
+ :table => %w{table},
12
+ :"list-item" => %w{li},
13
+ :"table-row-group" => %w{tbody},
14
+ :"table-header-group" => %w{thead},
15
+ :"table-footer-group" => %w{tfoot},
16
+ :"table-row" => %w{tr},
17
+ :"table-cell" => %w{th td},
18
+ :"html5-block" => %w{article aside details figcaption figure footer header hgroup menu nav section summary},
19
+ :"html5-inline" => %w{audio canvas command datalist embed keygen mark meter output progress rp rt ruby time video wbr},
20
+ }
21
+ DEFAULT_DISPLAY[:html5] = (DEFAULT_DISPLAY[:"html5-block"] + DEFAULT_DISPLAY[:"html5-inline"]).sort
22
+ # returns a comma delimited string for all the
23
+ # elements according to their default css3 display value.
24
+ def elements_of_type(display)
25
+ Sass::Script::String.new(DEFAULT_DISPLAY.fetch(display.value.to_sym).join(", "))
26
+ end
27
+ end
@@ -0,0 +1,101 @@
1
+ module Sass::Script::Functions
2
+
3
+ # Returns true when the object is false, an empty string, or an empty list
4
+ def blank(obj)
5
+ case obj
6
+ when Sass::Script::Bool
7
+ Sass::Script::Bool.new !obj.to_bool
8
+ when Sass::Script::String
9
+ Sass::Script::Bool.new obj.value.strip.size == 0
10
+ when Sass::Script::List
11
+ Sass::Script::Bool.new obj.value.size == 0 || obj.value.all?{|el| blank(el).to_bool}
12
+ else
13
+ Sass::Script::Bool.new false
14
+ end
15
+ end
16
+
17
+ # Returns a new list after removing any non-true values
18
+ def compact(*args)
19
+ sep = :comma
20
+ if args.size == 1 && args.first.is_a?(Sass::Script::List)
21
+ list = args.first
22
+ args = list.value
23
+ sep = list.separator
24
+ end
25
+ Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep)
26
+ end
27
+
28
+ # Get the nth value from a list
29
+ def _compass_nth(list, place)
30
+ assert_type list, :List
31
+ if place.value == "first"
32
+ list.value.first
33
+ elsif place.value == "last"
34
+ list.value.last
35
+ else
36
+ list.value[place.value - 1]
37
+ end
38
+ end
39
+
40
+ # Returns a list object from a value that was passed.
41
+ # This can be used to unpack a space separated list that got turned
42
+ # into a string by sass before it was passed to a mixin.
43
+ def _compass_list(arg)
44
+ if arg.is_a?(Sass::Script::List)
45
+ Sass::Script::List.new(arg.value.dup, arg.separator)
46
+ else
47
+ Sass::Script::List.new([arg], :space)
48
+ end
49
+ end
50
+
51
+ # If the argument is a list, it will return a new list that is space delimited
52
+ # Otherwise it returns a new, single element, space-delimited list.
53
+ def _compass_space_list(list)
54
+ if list.is_a?(Sass::Script::List)
55
+ Sass::Script::List.new(list.value.dup, :space)
56
+ else
57
+ Sass::Script::List.new([list], :space)
58
+ end
59
+ end
60
+
61
+ # Returns the size of the list.
62
+ def _compass_list_size(list)
63
+ assert_list list
64
+ Sass::Script::Number.new(list.value.size)
65
+ end
66
+
67
+ # slice a sublist from a list
68
+ def _compass_slice(list, start_index, end_index = nil)
69
+ end_index ||= Sass::Script::Number.new(-1)
70
+ start_index = start_index.value
71
+ end_index = end_index.value
72
+ start_index -= 1 unless start_index < 0
73
+ end_index -= 1 unless end_index < 0
74
+ Sass::Script::List.new list.values[start_index..end_index], list.separator
75
+ end
76
+
77
+ # removes the given values from the list.
78
+ def reject(list, *values)
79
+ Sass::Script::List.new(list.value.reject{|v| values.any?{|o| v == o}}, list.separator)
80
+ end
81
+
82
+ # returns the first value of a space delimited list.
83
+ def first_value_of(list)
84
+ if list.is_a?(Sass::Script::String)
85
+ Sass::Script::String.new(list.value.split(/\s+/).first)
86
+ elsif defined?(Sass::Script::List) && list.is_a?(Sass::Script::List)
87
+ list.value.first
88
+ else
89
+ list
90
+ end
91
+ end
92
+
93
+ protected
94
+
95
+ def assert_list(value)
96
+ unless value.is_a?(Sass::Script::List)
97
+ raise ArgumentError.new("#{value.inspect} is not a list")
98
+ end
99
+ end
100
+
101
+ end
@@ -0,0 +1,64 @@
1
+ module Sass::Script::Functions
2
+ COMMA_SEPARATOR = /\s*,\s*/
3
+
4
+ # Permute multiple selectors each of which may be comma delimited, the end result is
5
+ # a new selector that is the equivalent of nesting each under the previous selector.
6
+ # To illustrate, the following mixins are equivalent:
7
+ # =mixin-a(!selector1, !selector2, !selector3)
8
+ # #{!selector1}
9
+ # #{selector2}
10
+ # #{selector3}
11
+ # width: 2px
12
+ # =mixin-b(!selector1, !selector2)
13
+ # #{nest(!selector, !selector2, !selector3)}
14
+ # width: 2px
15
+ def nest(*arguments)
16
+ nested = arguments.map{|a| a.value}.inject do |memo,arg|
17
+ ancestors = memo.split(COMMA_SEPARATOR)
18
+ descendants = arg.split(COMMA_SEPARATOR)
19
+ ancestors.map{|a| descendants.map{|d| "#{a} #{d}"}.join(", ")}.join(", ")
20
+ end
21
+ Sass::Script::String.new(nested)
22
+ end
23
+
24
+ # Permute two selectors, the first may be comma delimited.
25
+ # The end result is a new selector that is the equivalent of nesting the second
26
+ # selector under the first one in a sass file and preceding it with an &.
27
+ # To illustrate, the following mixins are equivalent:
28
+ # =mixin-a(!selector, !to_append)
29
+ # #{!selector}
30
+ # &#{!to_append}
31
+ # width: 2px
32
+ # =mixin-b(!selector, !to_append)
33
+ # #{append_selector(!selector, !to_append)}
34
+ # width: 2px
35
+ def append_selector(selector, to_append)
36
+ ancestors = selector.value.split(COMMA_SEPARATOR)
37
+ descendants = to_append.value.split(COMMA_SEPARATOR)
38
+ nested = ancestors.map{|a| descendants.map{|d| "#{a}#{d}"}.join(", ")}.join(", ")
39
+ Sass::Script::String.new(nested)
40
+ end
41
+
42
+ # Return the header selectors for the levels indicated
43
+ # Defaults to all headers h1 through h6
44
+ # For example:
45
+ # headers(all) => h1, h2, h3, h4, h5, h6
46
+ # headers(4) => h1, h2, h3, h4
47
+ # headers(2,4) => h2, h3, h4
48
+ def headers(from = nil, to = nil)
49
+ if from && !to
50
+ if from.is_a?(Sass::Script::String) && from.value == "all"
51
+ from = Sass::Script::Number.new(1)
52
+ to = Sass::Script::Number.new(6)
53
+ else
54
+ to = from
55
+ from = Sass::Script::Number.new(1)
56
+ end
57
+ else
58
+ from ||= Sass::Script::Number.new(1)
59
+ to ||= Sass::Script::Number.new(6)
60
+ end
61
+ Sass::Script::String.new((from.value..to.value).map{|n| "h#{n}"}.join(", "))
62
+ end
63
+ alias headings headers
64
+ end
@@ -0,0 +1,218 @@
1
+ module Sass::Script::Functions
2
+ ZERO = Sass::Script::Number::new(0)
3
+ VALID_SELECTORS = %w(hover active target)
4
+ # Provides a consistent interface for getting a variable in ruby
5
+ # from a keyword argument hash that accounts for underscores/dash equivalence
6
+ # and allows the caller to pass a symbol instead of a string.
7
+ module VariableReader
8
+ def get_var(variable_name)
9
+ self[variable_name.to_s.gsub(/-/,"_")]
10
+ end
11
+ end
12
+
13
+ #Returns a list of all sprite names
14
+ def sprite_names(map)
15
+ Sass::Script::List.new(map.sprite_names.map { |f| Sass::Script::String.new(f) }, ' ')
16
+ end
17
+ Sass::Script::Functions.declare :sprite_names, [:map]
18
+
19
+ # Returns the system path of the sprite file
20
+ def sprite_path(map)
21
+ Sass::Script::String.new(map.name_and_hash)
22
+ end
23
+ Sass::Script::Functions.declare :sprite_path, [:map]
24
+
25
+ # Returns the sprite file as an inline image
26
+ # @include "icon/*.png";
27
+ # #{$icon-sprite-base-class} {
28
+ # background-image: inline-sprite($icon-sprites);
29
+ # }
30
+ def inline_sprite(map)
31
+ verify_map(map, "sprite-url")
32
+ map.generate
33
+ inline_image(sprite_path(map))
34
+ end
35
+ Sass::Script::Functions.declare :inline_sprite, [:map]
36
+
37
+ # Creates a Compass::SassExtensions::Sprites::SpriteMap object. A sprite map, when used in a property is the same
38
+ # as calling sprite-url. So the following background properties are equivalent:
39
+ #
40
+ # $icons: sprite-map("icons/*.png");
41
+ # background: sprite-url($icons) no-repeat;
42
+ # background: $icons no-repeat;
43
+ #
44
+ # The sprite map object will generate the sprite map image, if necessary,
45
+ # the first time it is converted to a url. Simply constructing it has no side-effects.
46
+ def sprite_map(glob, kwargs = {})
47
+ kwargs.extend VariableReader
48
+ Compass::SassExtensions::Sprites::SpriteMap.from_uri(glob, self, kwargs)
49
+ end
50
+ Sass::Script::Functions.declare :sprite_map, [:glob], :var_kwargs => true
51
+
52
+ # Returns the image and background position for use in a single shorthand property:
53
+ #
54
+ # $icons: sprite-map("icons/*.png"); // contains icons/new.png among others.
55
+ # background: sprite($icons, new) no-repeat;
56
+ #
57
+ # Becomes:
58
+ #
59
+ # background: url('/images/icons.png?12345678') 0 -24px no-repeat;
60
+ def sprite(map, sprite, offset_x = ZERO, offset_y = ZERO)
61
+ sprite = convert_sprite_name(sprite)
62
+ verify_map(map)
63
+ unless sprite.is_a?(Sass::Script::String)
64
+ raise Sass::SyntaxError, %Q(The second argument to sprite() must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
65
+ end
66
+ url = sprite_url(map)
67
+ position = sprite_position(map, sprite, offset_x, offset_y)
68
+ Sass::Script::List.new([url] + position.value, :space)
69
+ end
70
+ Sass::Script::Functions.declare :sprite, [:map, :sprite]
71
+ Sass::Script::Functions.declare :sprite, [:map, :sprite, :offset_x]
72
+ Sass::Script::Functions.declare :sprite, [:map, :sprite, :offset_x, :offset_y]
73
+
74
+ # Returns the name of a sprite map
75
+ # The name is derived from the folder than contains the sprites.
76
+ def sprite_map_name(map)
77
+ verify_map(map, "sprite-map-name")
78
+ Sass::Script::String.new(map.name)
79
+ end
80
+ Sass::Script::Functions.declare :sprite_name, [:sprite]
81
+
82
+ # Returns the path to the original image file for the sprite with the given name
83
+ def sprite_file(map, sprite)
84
+ sprite = convert_sprite_name(sprite)
85
+ verify_map(map, "sprite")
86
+ verify_sprite(sprite)
87
+ if image = map.image_for(sprite.value)
88
+ Sass::Script::String.new(image.file)
89
+ else
90
+ missing_image!(map, sprite)
91
+ end
92
+ end
93
+ Sass::Script::Functions.declare :sprite_file, [:map, :sprite]
94
+
95
+ # Returns boolean if sprite has a parent
96
+ def sprite_does_not_have_parent(map, sprite)
97
+ sprite = convert_sprite_name(sprite)
98
+ verify_map map
99
+ verify_sprite sprite
100
+ Sass::Script::Bool.new map.image_for(sprite.value).parent.nil?
101
+ end
102
+
103
+ Sass::Script::Functions.declare :sprite_does_not_have_parent, [:map, :sprite]
104
+
105
+ # Returns boolean if sprite has the selector
106
+ def sprite_has_selector(map, sprite, selector)
107
+ sprite = convert_sprite_name(sprite)
108
+ verify_map map
109
+ verify_sprite sprite
110
+ unless VALID_SELECTORS.include?(selector.value)
111
+ raise Sass::SyntaxError, "Invalid Selctor did you mean one of: #{VALID_SELECTORS.join(', ')}"
112
+ end
113
+ Sass::Script::Bool.new map.send(:"has_#{selector.value}?", sprite.value)
114
+ end
115
+
116
+ Sass::Script::Functions.declare :sprite_has_selector, [:map, :sprite, :selector]
117
+
118
+
119
+ # Returns a url to the sprite image.
120
+ def sprite_url(map)
121
+ verify_map(map, "sprite-url")
122
+ map.generate
123
+ generated_image_url(Sass::Script::String.new("#{map.path}-s#{map.uniqueness_hash}.png"))
124
+ end
125
+ Sass::Script::Functions.declare :sprite_url, [:map]
126
+
127
+ # Returns the position for the original image in the sprite.
128
+ # This is suitable for use as a value to background-position:
129
+ #
130
+ # $icons: sprite-map("icons/*.png");
131
+ # background-position: sprite-position($icons, new);
132
+ #
133
+ # Might generate something like:
134
+ #
135
+ # background-position: 0 -34px;
136
+ #
137
+ # You can adjust the background relative to this position by passing values for
138
+ # `$offset-x` and `$offset-y`:
139
+ #
140
+ # $icons: sprite-map("icons/*.png");
141
+ # background-position: sprite-position($icons, new, 3px, -2px);
142
+ #
143
+ # Would change the above output to:
144
+ #
145
+ # background-position: 3px -36px;
146
+ def sprite_position(map, sprite = nil, offset_x = ZERO, offset_y = ZERO)
147
+ assert_type offset_x, :Number
148
+ assert_type offset_y, :Number
149
+ sprite = convert_sprite_name(sprite)
150
+ verify_map(map, "sprite-position")
151
+ unless sprite && sprite.is_a?(Sass::Script::String)
152
+ raise Sass::SyntaxError, %Q(The second argument to sprite-position must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
153
+ end
154
+ image = map.image_for(sprite.value)
155
+ unless image
156
+ missing_image!(map, sprite)
157
+ end
158
+ if offset_x.unit_str == "%"
159
+ x = offset_x # CE: Shouldn't this be a percentage of the total width?
160
+ else
161
+ x = offset_x.value - image.left
162
+ x = Sass::Script::Number.new(x, x == 0 ? [] : ["px"])
163
+ end
164
+ y = offset_y.value - image.top
165
+ y = Sass::Script::Number.new(y, y == 0 ? [] : ["px"])
166
+ Sass::Script::List.new([x, y],:space)
167
+ end
168
+ Sass::Script::Functions.declare :sprite_position, [:map]
169
+ Sass::Script::Functions.declare :sprite_position, [:map, :sprite]
170
+ Sass::Script::Functions.declare :sprite_position, [:map, :sprite, :offset_x]
171
+ Sass::Script::Functions.declare :sprite_position, [:map, :sprite, :offset_x, :offset_y]
172
+
173
+ def sprite_image(*args)
174
+ raise Sass::SyntaxError, %Q(The sprite-image() function has been replaced by sprite(). See http://compass-style.org/help/tutorials/spriting/ for more information.)
175
+ end
176
+
177
+ protected
178
+
179
+ def reversed_color_names
180
+ if Sass::Script::Color.const_defined?(:HTML4_COLORS_REVERSE)
181
+ Sass::Script::Color::HTML4_COLORS_REVERSE
182
+ else
183
+ Sass::Script::Color::COLOR_NAMES_REVERSE
184
+ end
185
+ end
186
+
187
+ def convert_sprite_name(sprite)
188
+ case sprite
189
+ when Sass::Script::Color
190
+ Sass::Script::String.new(reversed_color_names[sprite.rgb])
191
+ when Sass::Script::Bool
192
+ Sass::Script::String.new(sprite.to_s)
193
+ else
194
+ sprite
195
+ end
196
+ end
197
+
198
+ def verify_map(map, error = "sprite")
199
+ unless map.is_a?(Compass::SassExtensions::Sprites::SpriteMap)
200
+ missing_sprite!(error)
201
+ end
202
+ end
203
+
204
+ def verify_sprite(sprite)
205
+ unless sprite.is_a?(Sass::Script::String)
206
+ raise Sass::SyntaxError, %Q(The second argument to sprite() must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
207
+ end
208
+ end
209
+
210
+ def missing_image!(map, sprite)
211
+ raise Sass::SyntaxError, "No sprite called #{sprite} found in sprite map #{map.path}/#{map.name}. Did you mean one of: #{map.sprite_names.join(", ")}"
212
+ end
213
+
214
+ def missing_sprite!(function_name)
215
+ raise Sass::SyntaxError, %Q(The first argument to #{function_name}() must be a sprite map. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
216
+ end
217
+
218
+ end