compass-core 1.0.0.alpha.15 → 1.0.0.alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/RELEASE_VERSION +1 -1
- data/VERSION +1 -1
- data/lib/compass/configuration.rb +1 -0
- data/lib/compass/core/sass_extensions/functions/colors.rb +3 -3
- data/lib/compass/core/sass_extensions/functions/constants.rb +14 -14
- data/lib/compass/core/sass_extensions/functions/cross_browser_support.rb +23 -22
- data/lib/compass/core/sass_extensions/functions/display.rb +1 -1
- data/lib/compass/core/sass_extensions/functions/enumerate.rb +2 -2
- data/lib/compass/core/sass_extensions/functions/env.rb +10 -18
- data/lib/compass/core/sass_extensions/functions/font_files.rb +5 -4
- data/lib/compass/core/sass_extensions/functions/gradient_support.rb +79 -85
- data/lib/compass/core/sass_extensions/functions/image_size.rb +2 -2
- data/lib/compass/core/sass_extensions/functions/inline_image.rb +3 -3
- data/lib/compass/core/sass_extensions/functions/lists.rb +24 -23
- data/lib/compass/core/sass_extensions/functions/math.rb +11 -8
- data/lib/compass/core/sass_extensions/functions/selectors.rb +39 -24
- data/lib/compass/core/sass_extensions/functions/urls.rb +14 -14
- data/lib/compass/core/sass_extensions/monkey_patches/browser_support.rb +3 -2
- data/stylesheets/compass/typography/lists/_inline-list.scss +2 -2
- metadata +5 -5
data/RELEASE_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.alpha.
|
1
|
+
1.0.0.alpha.16
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.alpha.
|
1
|
+
1.0.0.alpha.15
|
@@ -35,14 +35,14 @@ module Compass::Core::SassExtensions::Functions::Colors
|
|
35
35
|
def shade(color, percentage)
|
36
36
|
assert_type color, :Color
|
37
37
|
assert_type percentage, :Number
|
38
|
-
black =
|
38
|
+
black = rgb_color(0, 0, 0)
|
39
39
|
mix(black, color, percentage)
|
40
40
|
end
|
41
41
|
|
42
42
|
def tint(color, percentage)
|
43
43
|
assert_type color, :Color
|
44
44
|
assert_type percentage, :Number
|
45
|
-
white =
|
45
|
+
white = rgb_color(255, 255, 255)
|
46
46
|
mix(white, color, percentage)
|
47
47
|
end
|
48
48
|
|
@@ -52,7 +52,7 @@ module Compass::Core::SassExtensions::Functions::Colors
|
|
52
52
|
assert_type color, :Color
|
53
53
|
alpha = (color.alpha * 255).round
|
54
54
|
alphastr = alpha.to_s(16).rjust(2, '0')
|
55
|
-
|
55
|
+
identifier("##{alphastr}#{color.send(:hex_str)[1..-1]}".upcase)
|
56
56
|
end
|
57
57
|
|
58
58
|
private
|
@@ -2,20 +2,20 @@ module Compass::Core::SassExtensions::Functions::Constants
|
|
2
2
|
POSITIONS = /top|bottom|left|right|center/
|
3
3
|
if defined?(Sass::Script::Value::List)
|
4
4
|
def is_position(position)
|
5
|
-
|
5
|
+
bool(position.is_a?(Sass::Script::Value::String) && !!(position.value =~ POSITIONS))
|
6
6
|
end
|
7
7
|
def is_position_list(position_list)
|
8
|
-
|
8
|
+
bool(position_list.is_a?(Sass::Script::Value::List) && position_list.value.all?{|p| is_position(p).to_bool})
|
9
9
|
end
|
10
10
|
# returns the opposite position of a side or corner.
|
11
11
|
def opposite_position(position)
|
12
|
-
position = unless position.is_a?(Sass::Script::List)
|
13
|
-
|
12
|
+
position = unless position.is_a?(Sass::Script::Value::List)
|
13
|
+
list(position, :space)
|
14
14
|
else
|
15
|
-
|
15
|
+
list(position.value.dup, position.separator)
|
16
16
|
end
|
17
|
-
position =
|
18
|
-
if pos.is_a? Sass::Script::String
|
17
|
+
position = list(position.value.map do |pos|
|
18
|
+
if pos.is_a? Sass::Script::Value::String
|
19
19
|
opposite = case pos.value
|
20
20
|
when "top" then "bottom"
|
21
21
|
when "bottom" then "top"
|
@@ -26,10 +26,10 @@ module Compass::Core::SassExtensions::Functions::Constants
|
|
26
26
|
Compass::Util.compass_warn("Cannot determine the opposite position of: #{pos}")
|
27
27
|
pos.value
|
28
28
|
end
|
29
|
-
|
30
|
-
elsif pos.is_a? Sass::Script::Number
|
29
|
+
identifier(opposite)
|
30
|
+
elsif pos.is_a? Sass::Script::Value::Number
|
31
31
|
if pos.numerator_units == ["%"] && pos.denominator_units == []
|
32
|
-
|
32
|
+
number(100-pos.value, "%")
|
33
33
|
else
|
34
34
|
Compass::Util.compass_warn("Cannot determine the opposite position of: #{pos}")
|
35
35
|
pos
|
@@ -47,11 +47,11 @@ module Compass::Core::SassExtensions::Functions::Constants
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def is_url(string)
|
50
|
-
if string.is_a?(Sass::Script::String)
|
50
|
+
if string.is_a?(Sass::Script::Value::String)
|
51
51
|
is_url = !!(string.value =~ /^url\(.*\)$/)
|
52
|
-
|
52
|
+
bool(is_url)
|
53
53
|
else
|
54
|
-
|
54
|
+
bool(false)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
else
|
@@ -68,7 +68,7 @@ module Compass::Core::SassExtensions::Functions::Constants
|
|
68
68
|
pos
|
69
69
|
end
|
70
70
|
end
|
71
|
-
|
71
|
+
identifier(opposite.join(" "))
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
2
|
+
extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper
|
2
3
|
|
3
|
-
class CSS2FallbackValue < Sass::Script::
|
4
|
+
class CSS2FallbackValue < Sass::Script::Value::Base
|
4
5
|
attr_accessor :value, :css2_value
|
5
6
|
def children
|
6
7
|
[value, css2_value]
|
@@ -31,7 +32,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
31
32
|
assert_type prefix, :String
|
32
33
|
aspect = prefix.value.sub(/^-/,"")
|
33
34
|
needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)}
|
34
|
-
|
35
|
+
bool(needed)
|
35
36
|
end
|
36
37
|
|
37
38
|
%w(webkit moz o ms svg css2).each do |prefix|
|
@@ -46,14 +47,14 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
46
47
|
|
47
48
|
def prefix(prefix, *objects)
|
48
49
|
assert_type prefix, :String if prefix.is_a?(Sass::Script::Value::Base)
|
49
|
-
prefix = prefix.value if prefix.is_a?(Sass::Script::String)
|
50
|
+
prefix = prefix.value if prefix.is_a?(Sass::Script::Value::String)
|
50
51
|
prefix = prefix[1..-1] if prefix[0] == ?-
|
51
52
|
if objects.size > 1
|
52
|
-
self.prefix(prefix,
|
53
|
+
self.prefix(prefix, list(objects, :comma))
|
53
54
|
else
|
54
55
|
object = objects.first
|
55
|
-
if object.is_a?(Sass::Script::List)
|
56
|
-
|
56
|
+
if object.is_a?(Sass::Script::Value::List)
|
57
|
+
list(object.value.map{|e|
|
57
58
|
self.prefix(prefix, e)
|
58
59
|
}, object.separator)
|
59
60
|
elsif object.respond_to?(:supports?) && object.supports?(prefix) && object.respond_to?(:"to_#{prefix}")
|
@@ -81,14 +82,14 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
81
82
|
end
|
82
83
|
list(browsers.map{|b| identifier(b)}, :comma)
|
83
84
|
end
|
84
|
-
|
85
|
-
|
85
|
+
declare(:browsers, [])
|
86
|
+
declare(:browsers, [:prefix])
|
86
87
|
|
87
88
|
# The known capabilities of browsers.
|
88
89
|
def browser_capabilities
|
89
90
|
list(Compass::Core::CanIUse.instance.capabilities.map{|c| identifier(c)}, :comma)
|
90
91
|
end
|
91
|
-
|
92
|
+
declare(:browser_capabilities, [])
|
92
93
|
|
93
94
|
# The versions for the given browser.
|
94
95
|
def browser_versions(browser)
|
@@ -97,7 +98,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
97
98
|
rescue ArgumentError => e
|
98
99
|
raise Sass::SyntaxError.new(e.message)
|
99
100
|
end
|
100
|
-
|
101
|
+
declare(:browser_versions, [:browser])
|
101
102
|
|
102
103
|
# whether the browser uses a prefix for the given capability at the version
|
103
104
|
# specified or a later version. Returns the prefix it requires, or null.
|
@@ -113,7 +114,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
113
114
|
rescue ArgumentError => e
|
114
115
|
raise Sass::SyntaxError.new(e.message)
|
115
116
|
end
|
116
|
-
|
117
|
+
declare(:browser_requires_prefix, [:browser, :version, :capability])
|
117
118
|
|
118
119
|
# the prefix for the given browser.
|
119
120
|
def browser_prefix(browser, version = nil)
|
@@ -122,8 +123,8 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
122
123
|
rescue ArgumentError => e
|
123
124
|
raise Sass::SyntaxError.new(e.message)
|
124
125
|
end
|
125
|
-
|
126
|
-
|
126
|
+
declare(:browser_prefix, [:browser])
|
127
|
+
declare(:browser_prefix, [:browser, :version])
|
127
128
|
|
128
129
|
# The prefixes used by the given browsers.
|
129
130
|
def browser_prefixes(browsers)
|
@@ -135,7 +136,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
135
136
|
rescue ArgumentError => e
|
136
137
|
raise Sass::SyntaxError.new(e.message)
|
137
138
|
end
|
138
|
-
|
139
|
+
declare(:browser_prefixes, [:browsers])
|
139
140
|
|
140
141
|
# The percent of users that are omitted by setting the min_version of browser
|
141
142
|
# as specified.
|
@@ -147,8 +148,8 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
147
148
|
versions << max_version.value if max_version
|
148
149
|
number(Compass::Core::CanIUse.instance.omitted_usage(browser.value, *versions))
|
149
150
|
end
|
150
|
-
|
151
|
-
|
151
|
+
declare(:omitted_usage, [:browser, :min_version])
|
152
|
+
declare(:omitted_usage, [:browser, :min_version, :max_version])
|
152
153
|
|
153
154
|
# The version before the version for the browser specified
|
154
155
|
def previous_version(browser, version)
|
@@ -157,7 +158,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
157
158
|
previous = Compass::Core::CanIUse.instance.previous_version(browser.value, version.value)
|
158
159
|
previous.nil? ? null() : quoted_string(previous)
|
159
160
|
end
|
160
|
-
|
161
|
+
declare(:previous_version, [:browser, :version])
|
161
162
|
|
162
163
|
# The version before the version for the browser specified
|
163
164
|
def next_version(browser, version)
|
@@ -166,7 +167,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
166
167
|
next_version = Compass::Core::CanIUse.instance.next_version(browser.value, version.value)
|
167
168
|
next_version.nil? ? null() : quoted_string(next_version)
|
168
169
|
end
|
169
|
-
|
170
|
+
declare(:next_version, [:browser, :version])
|
170
171
|
|
171
172
|
# The percent of users relying on a particular prefix
|
172
173
|
def prefix_usage(prefix, capability, capability_options)
|
@@ -178,7 +179,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
178
179
|
rescue ArgumentError => e
|
179
180
|
raise Sass::SyntaxError.new(e.message)
|
180
181
|
end
|
181
|
-
|
182
|
+
declare(:prefix_usage, [:prefix, :capability])
|
182
183
|
|
183
184
|
# Compares two browser versions. Returning:
|
184
185
|
#
|
@@ -203,7 +204,7 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
203
204
|
end
|
204
205
|
number(index1 <=> index2)
|
205
206
|
end
|
206
|
-
|
207
|
+
declare(:compare_browser_versions, [:browser, :version1, :version2])
|
207
208
|
|
208
209
|
# Returns a map of browsers to the first version the capability became available
|
209
210
|
# without a prefix.
|
@@ -224,8 +225,8 @@ module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
|
|
224
225
|
m
|
225
226
|
end)
|
226
227
|
end
|
227
|
-
|
228
|
-
|
228
|
+
declare(:browser_minimums, [:capability])
|
229
|
+
declare(:browser_minimums, [:capability, :prefix])
|
229
230
|
|
230
231
|
private
|
231
232
|
|
@@ -27,6 +27,6 @@ module Compass::Core::SassExtensions::Functions::Display
|
|
27
27
|
# returns a comma delimited string for all the
|
28
28
|
# elements according to their default css3 display value.
|
29
29
|
def elements_of_type(display)
|
30
|
-
|
30
|
+
identifier(DEFAULT_DISPLAY.fetch(display.value.to_s).join(", "))
|
31
31
|
end
|
32
32
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Compass::Core::SassExtensions::Functions::Enumerate
|
2
2
|
def enumerate(prefix, from, through, separator = nil)
|
3
|
-
separator ||=
|
3
|
+
separator ||= identifier("-")
|
4
4
|
selectors = (from.value..through.value).map{|i| "#{prefix.value}#{separator.value}#{i}"}.join(", ")
|
5
|
-
|
5
|
+
identifier(selectors)
|
6
6
|
end
|
7
7
|
end
|
@@ -1,60 +1,52 @@
|
|
1
1
|
module Compass::Core::SassExtensions::Functions::Env
|
2
2
|
extend Compass::Core::SassExtensions::Functions::SassDeclarationHelper
|
3
|
+
extend Sass::Script::Value::Helpers
|
3
4
|
|
4
5
|
def compass_env
|
5
6
|
compass_opts = options[:compass] || {}
|
6
|
-
|
7
|
+
identifier((compass_opts[:environment] || "development").to_s)
|
7
8
|
end
|
8
9
|
declare :compass_env, []
|
9
10
|
|
10
|
-
DEFAULT_TIME =
|
11
|
+
DEFAULT_TIME = identifier("%T%:z")
|
11
12
|
def current_time(format = DEFAULT_TIME)
|
12
13
|
assert_type format, :String
|
13
|
-
|
14
|
+
identifier(Time.now.strftime(format.value))
|
14
15
|
end
|
15
16
|
declare :current_time, []
|
16
17
|
declare :current_time, [:format]
|
17
18
|
|
18
|
-
DEFAULT_DATE =
|
19
|
+
DEFAULT_DATE = identifier("%F")
|
19
20
|
def current_date(format = DEFAULT_DATE)
|
20
21
|
current_time(format)
|
21
22
|
end
|
22
23
|
declare :current_date, []
|
23
24
|
declare :current_date, [:format]
|
24
25
|
|
25
|
-
NOT_ABSOLUTE =
|
26
|
+
NOT_ABSOLUTE = bool(false)
|
26
27
|
def current_source_file(absolute = NOT_ABSOLUTE)
|
27
28
|
if absolute.to_bool
|
28
|
-
|
29
|
+
identifier(options[:original_filename].to_s)
|
29
30
|
else
|
30
31
|
filename = Pathname.new(options[:original_filename].to_s)
|
31
32
|
sass_path = Pathname.new(Compass.configuration.sass_path)
|
32
33
|
relative_filename = filename.relative_path_from(sass_path).to_s rescue filename
|
33
|
-
|
34
|
+
identifier(relative_filename.to_s)
|
34
35
|
end
|
35
36
|
end
|
36
37
|
declare :current_source_file, []
|
37
38
|
declare :current_source_file, [:absolute]
|
38
39
|
|
39
40
|
def current_output_file(absolute = NOT_ABSOLUTE)
|
40
|
-
Sass::Script::String.new(options[:css_filename].to_s)
|
41
41
|
if absolute.to_bool
|
42
|
-
|
42
|
+
identifier(options[:css_filename].to_s)
|
43
43
|
else
|
44
44
|
filename = Pathname.new(options[:css_filename].to_s)
|
45
45
|
css_path = Pathname.new(Compass.configuration.css_path)
|
46
46
|
relative_filename = filename.relative_path_from(css_path).to_s rescue filename
|
47
|
-
|
47
|
+
identifier(relative_filename.to_s)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
declare :current_output_file, []
|
51
51
|
declare :current_output_file, [:absolute]
|
52
|
-
|
53
|
-
unless Sass::Util.has?(:public_instance_method, Sass::Script::Functions, :inspect)
|
54
|
-
# This is going to be in sass 3.3, just here temporarily.
|
55
|
-
def inspect(value)
|
56
|
-
unquoted_string(value.to_sass)
|
57
|
-
end
|
58
|
-
declare :inspect, [:value]
|
59
|
-
end
|
60
52
|
end
|
@@ -12,17 +12,18 @@ module Compass::Core::SassExtensions::Functions::FontFiles
|
|
12
12
|
def font_formats(*args)
|
13
13
|
formats = []
|
14
14
|
with_each_font_file(*args) do |path, type|
|
15
|
-
formats <<
|
15
|
+
formats << identifier(type)
|
16
16
|
end
|
17
|
-
return
|
17
|
+
return list(formats, :comma)
|
18
18
|
end
|
19
19
|
|
20
20
|
def font_files(*args)
|
21
|
+
return null unless args.any?
|
21
22
|
files = []
|
22
23
|
with_each_font_file(*args) do |path, type|
|
23
|
-
files <<
|
24
|
+
files << list(font_url(path), identifier("format('#{type}')"), :space)
|
24
25
|
end
|
25
|
-
|
26
|
+
list(files, :comma)
|
26
27
|
end
|
27
28
|
|
28
29
|
protected
|
@@ -2,19 +2,20 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
2
2
|
|
3
3
|
GRADIENT_ASPECTS = %w(webkit moz svg css2 o owg).freeze
|
4
4
|
|
5
|
-
class ColorStop < Sass::Script::
|
5
|
+
class ColorStop < Sass::Script::Value::Base
|
6
|
+
include Sass::Script::Value::Helpers
|
6
7
|
attr_accessor :color, :stop
|
7
8
|
def children
|
8
9
|
[color, stop].compact
|
9
10
|
end
|
10
11
|
def initialize(color, stop = nil)
|
11
|
-
unless Sass::Script::Color === color ||
|
12
|
-
Sass::Script::Funcall === color ||
|
13
|
-
(Sass::Script::String === color && color.value == "currentColor")||
|
14
|
-
(Sass::Script::String === color && color.value == "transparent")
|
12
|
+
unless Sass::Script::Value::Color === color ||
|
13
|
+
Sass::Script::Tree::Funcall === color ||
|
14
|
+
(Sass::Script::Value::String === color && color.value == "currentColor")||
|
15
|
+
(Sass::Script::Value::String === color && color.value == "transparent")
|
15
16
|
raise Sass::SyntaxError, "Expected a color. Got: #{color}"
|
16
17
|
end
|
17
|
-
if stop && !stop.is_a?(Sass::Script::Number)
|
18
|
+
if stop && !stop.is_a?(Sass::Script::Value::Number)
|
18
19
|
raise Sass::SyntaxError, "Expected a number. Got: #{stop}"
|
19
20
|
end
|
20
21
|
self.color, self.stop = color, stop
|
@@ -26,9 +27,9 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
26
27
|
def self.color_to_svg_s(c)
|
27
28
|
# svg doesn't support the "transparent" keyword; we need to manually
|
28
29
|
# refactor it into "transparent black"
|
29
|
-
if c.is_a?(Sass::Script::String) && c.value == "transparent"
|
30
|
+
if c.is_a?(Sass::Script::Value::String) && c.value == "transparent"
|
30
31
|
"black"
|
31
|
-
elsif c.is_a?(Sass::Script::String)
|
32
|
+
elsif c.is_a?(Sass::Script::Value::String)
|
32
33
|
c.value.dup
|
33
34
|
else
|
34
35
|
self.color_to_s(c.with(:alpha => 1))
|
@@ -38,9 +39,9 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
38
39
|
def self.color_to_svg_alpha(c)
|
39
40
|
# svg doesn't support the "transparent" keyword; we need to manually
|
40
41
|
# refactor it into "transparent black"
|
41
|
-
if c.is_a?(Sass::Script::String) && c.value == "transparent"
|
42
|
+
if c.is_a?(Sass::Script::Value::String) && c.value == "transparent"
|
42
43
|
0
|
43
|
-
elsif c.is_a?(Sass::Script::String) && c.value == "currentColor"
|
44
|
+
elsif c.is_a?(Sass::Script::Value::String) && c.value == "currentColor"
|
44
45
|
1
|
45
46
|
else
|
46
47
|
c.alpha
|
@@ -48,7 +49,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def self.color_to_s(c)
|
51
|
-
if c.is_a?(Sass::Script::String)
|
52
|
+
if c.is_a?(Sass::Script::Value::String)
|
52
53
|
c.value.dup
|
53
54
|
else
|
54
55
|
c.inspect.dup
|
@@ -60,7 +61,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
60
61
|
if stop
|
61
62
|
s << " "
|
62
63
|
if stop.unitless?
|
63
|
-
s << stop.times(
|
64
|
+
s << stop.times(number(100, "%")).inspect
|
64
65
|
else
|
65
66
|
s << stop.inspect
|
66
67
|
end
|
@@ -69,11 +70,12 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
69
70
|
end
|
70
71
|
|
71
72
|
def to_sass(options = nil)
|
72
|
-
|
73
|
+
identifier("color-stop(#{color.to_sass rescue nil}, #{stop.to_sass rescue nil})")
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
76
77
|
module Gradient
|
78
|
+
include Sass::Script::Value::Helpers
|
77
79
|
|
78
80
|
def self.included(base)
|
79
81
|
base.extend ClassMethods
|
@@ -83,7 +85,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
83
85
|
def standardized_prefix(prefix)
|
84
86
|
class_eval %Q{
|
85
87
|
def to_#{prefix}(options = self.options)
|
86
|
-
|
88
|
+
identifier("-#{prefix}-\#{to_s_prefixed(options)}")
|
87
89
|
end
|
88
90
|
}
|
89
91
|
end
|
@@ -106,7 +108,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
106
108
|
end
|
107
109
|
|
108
110
|
def angle?(value)
|
109
|
-
value.is_a?(Sass::Script::Number) &&
|
111
|
+
value.is_a?(Sass::Script::Value::Number) &&
|
110
112
|
value.numerator_units.size == 1 &&
|
111
113
|
value.numerator_units.first == "deg" &&
|
112
114
|
value.denominator_units.empty?
|
@@ -114,7 +116,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
114
116
|
|
115
117
|
end
|
116
118
|
|
117
|
-
class RadialGradient < Sass::Script::
|
119
|
+
class RadialGradient < Sass::Script::Value::Base
|
118
120
|
include Gradient
|
119
121
|
|
120
122
|
attr_accessor :position, :shape_and_size, :color_stops
|
@@ -157,11 +159,11 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
157
159
|
end
|
158
160
|
|
159
161
|
def to_css2(options = self.options)
|
160
|
-
|
162
|
+
null
|
161
163
|
end
|
162
164
|
end
|
163
165
|
|
164
|
-
class LinearGradient < Sass::Script::
|
166
|
+
class LinearGradient < Sass::Script::Value::Base
|
165
167
|
include Gradient
|
166
168
|
|
167
169
|
attr_accessor :color_stops, :position_or_angle, :legacy
|
@@ -191,10 +193,10 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
191
193
|
end
|
192
194
|
|
193
195
|
def convert_to_or_from_legacy(position_or_angle, options = self.options)
|
194
|
-
input = if position_or_angle.is_a?(Sass::Script::Number)
|
196
|
+
input = if position_or_angle.is_a?(Sass::Script::Value::Number)
|
195
197
|
position_or_angle
|
196
198
|
else
|
197
|
-
opts(
|
199
|
+
opts(list(position_or_angle.to_s.split(' ').map {|s| identifier(s) }, :space))
|
198
200
|
end
|
199
201
|
return convert_angle_from_offical(input).to_s(options)
|
200
202
|
end
|
@@ -216,7 +218,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
216
218
|
|
217
219
|
def supports?(aspect)
|
218
220
|
# I don't know how to support degree-based gradients in old webkit gradients (owg) or svg so we just disable them.
|
219
|
-
if %w(owg svg).include?(aspect) && position_or_angle.is_a?(Sass::Script::Number) && position_or_angle.numerator_units.include?("deg")
|
221
|
+
if %w(owg svg).include?(aspect) && position_or_angle.is_a?(Sass::Script::Value::Number) && position_or_angle.numerator_units.include?("deg")
|
220
222
|
false
|
221
223
|
else
|
222
224
|
super
|
@@ -224,35 +226,36 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
224
226
|
end
|
225
227
|
|
226
228
|
def to_svg(options = self.options)
|
227
|
-
linear_svg_gradient(color_stops, position_or_angle ||
|
229
|
+
linear_svg_gradient(color_stops, position_or_angle || identifier("top"))
|
228
230
|
end
|
229
231
|
|
230
232
|
def to_css2(options = self.options)
|
231
|
-
|
233
|
+
null
|
232
234
|
end
|
233
235
|
end
|
234
236
|
|
235
237
|
module Functions
|
238
|
+
include Sass::Script::Value::Helpers
|
236
239
|
|
237
240
|
def convert_angle_from_offical(deg)
|
238
|
-
if deg.is_a?(Sass::Script::Number)
|
239
|
-
return
|
241
|
+
if deg.is_a?(Sass::Script::Value::Number)
|
242
|
+
return number((deg.value.to_f - 450).abs % 360, 'deg')
|
240
243
|
else
|
241
244
|
args = deg.value
|
242
245
|
direction = []
|
243
|
-
if args[0] ==
|
246
|
+
if args[0] == identifier('to')
|
244
247
|
if args.size < 2
|
245
248
|
direction = args
|
246
249
|
else
|
247
250
|
direction << opposite_position(args[1])
|
248
251
|
end
|
249
252
|
else
|
250
|
-
direction <<
|
253
|
+
direction << identifier('to')
|
251
254
|
args.each do |pos|
|
252
255
|
direction << opposite_position(pos)
|
253
256
|
end
|
254
257
|
end
|
255
|
-
return
|
258
|
+
return opts(list(direction, :space))
|
256
259
|
end
|
257
260
|
end
|
258
261
|
|
@@ -260,10 +263,10 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
260
263
|
# otherwise, returns the original argument
|
261
264
|
def grad_point(position)
|
262
265
|
original_value = position
|
263
|
-
position = unless position.is_a?(Sass::Script::List)
|
264
|
-
opts(
|
266
|
+
position = unless position.is_a?(Sass::Script::Value::List)
|
267
|
+
opts(list([position], :space))
|
265
268
|
else
|
266
|
-
opts(
|
269
|
+
opts(list(position.value.dup, position.separator))
|
267
270
|
end
|
268
271
|
# Handle unknown arguments by passing them along untouched.
|
269
272
|
unless position.value.all?{|p| is_position(p) }
|
@@ -271,43 +274,41 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
271
274
|
end
|
272
275
|
if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/)
|
273
276
|
# browsers are pretty forgiving of reversed positions so we are too.
|
274
|
-
position =
|
277
|
+
position = opts(list(position.value.reverse, position.separator))
|
275
278
|
end
|
276
279
|
if position.value.size == 1
|
277
280
|
if position.value.first.value =~ /top|bottom/
|
278
|
-
position =
|
279
|
-
[Sass::Script::String.new("center"), position.value.first], position.separator)
|
281
|
+
position = opts(list(identifier("center"), position.value.first, position.separator))
|
280
282
|
elsif position.value.first.value =~ /left|right/
|
281
|
-
position =
|
282
|
-
[position.value.first, Sass::Script::String.new("center")], position.separator)
|
283
|
+
position = opts(list(position.value.first, identifier("center"), position.separator))
|
283
284
|
end
|
284
285
|
end
|
285
|
-
position =
|
286
|
+
position = opts(list(position.value.map do |p|
|
286
287
|
case p.value
|
287
288
|
when /top|left/
|
288
|
-
|
289
|
+
number(0, "%")
|
289
290
|
when /bottom|right/
|
290
|
-
|
291
|
+
number(100, "%")
|
291
292
|
when /center/
|
292
|
-
|
293
|
+
number(50, "%")
|
293
294
|
else
|
294
295
|
p
|
295
296
|
end
|
296
|
-
end, position.separator)
|
297
|
+
end, position.separator))
|
297
298
|
position
|
298
299
|
end
|
299
300
|
|
300
301
|
def color_stops(*args)
|
301
|
-
opts(
|
302
|
+
opts(list(args.map do |arg|
|
302
303
|
if ColorStop === arg
|
303
304
|
arg
|
304
|
-
elsif Sass::Script::Color === arg
|
305
|
+
elsif Sass::Script::Value::Color === arg
|
305
306
|
ColorStop.new(arg)
|
306
|
-
elsif Sass::Script::List === arg
|
307
|
+
elsif Sass::Script::Value::List === arg
|
307
308
|
ColorStop.new(*arg.value)
|
308
|
-
elsif Sass::Script::String === arg && arg.value == "transparent"
|
309
|
+
elsif Sass::Script::Value::String === arg && arg.value == "transparent"
|
309
310
|
ColorStop.new(arg)
|
310
|
-
elsif Sass::Script::String === arg && arg.value == "currentColor"
|
311
|
+
elsif Sass::Script::Value::String === arg && arg.value == "currentColor"
|
311
312
|
ColorStop.new(arg)
|
312
313
|
else
|
313
314
|
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
@@ -375,7 +376,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
375
376
|
stops = color_stops_in_percentages(color_list).map do |stop, color|
|
376
377
|
"color-stop(#{stop.inspect}, #{ColorStop.color_to_s(color)})"
|
377
378
|
end
|
378
|
-
|
379
|
+
opts(list(stops, :comma))
|
379
380
|
end
|
380
381
|
|
381
382
|
def color_stops_in_percentages(color_list)
|
@@ -386,7 +387,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
386
387
|
color_stops = color_list.value.map do |pos|
|
387
388
|
# have to convert absolute units to percentages for use in color stop functions.
|
388
389
|
stop = pos.stop
|
389
|
-
stop = stop.div(max).times(
|
390
|
+
stop = stop.div(max).times(number(100, "%")) if stop.numerator_units == max.numerator_units && max.numerator_units != ["%"]
|
390
391
|
# Make sure the color stops are specified in the right order.
|
391
392
|
if last_value && stop.numerator_units == last_value.numerator_units && stop.denominator_units == last_value.denominator_units && (stop.value * 1000).round < (last_value.value * 1000).round
|
392
393
|
raise Sass::SyntaxError.new("Color stops must be specified in increasing order. #{stop.value} came after #{last_value.value}.")
|
@@ -398,31 +399,31 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
398
399
|
|
399
400
|
# only used for webkit
|
400
401
|
def linear_end_position(position_or_angle, color_list)
|
401
|
-
start_point = grad_point(position_or_angle ||
|
402
|
-
end_point = grad_point(opposite_position(position_or_angle ||
|
402
|
+
start_point = grad_point(position_or_angle || identifier("top"))
|
403
|
+
end_point = grad_point(opposite_position(position_or_angle || identifier("top")))
|
403
404
|
end_target = color_list.value.last.stop
|
404
405
|
|
405
406
|
if color_list.value.last.stop && color_list.value.last.stop.numerator_units == ["px"]
|
406
407
|
new_end = color_list.value.last.stop.value
|
407
408
|
if start_point.value.first == end_point.value.first && start_point.value.last.value == 0
|
408
409
|
# this means top-to-bottom
|
409
|
-
end_point.value[1] =
|
410
|
+
end_point.value[1] = number(end_target.value)
|
410
411
|
elsif start_point.value.last == end_point.value.last && start_point.value.first.value == 0
|
411
412
|
# this implies left-to-right
|
412
|
-
end_point.value[0] =
|
413
|
+
end_point.value[0] = number(end_target.value)
|
413
414
|
end
|
414
415
|
end
|
415
416
|
end_point
|
416
417
|
end
|
417
418
|
|
418
419
|
# returns the end position of the gradient from the color stop
|
419
|
-
def grad_end_position(color_list, radial =
|
420
|
+
def grad_end_position(color_list, radial = bool(false))
|
420
421
|
assert_type color_list, :List
|
421
|
-
default =
|
422
|
-
grad_position(color_list,
|
422
|
+
default = number(100)
|
423
|
+
grad_position(color_list, number(color_list.value.size), default, radial)
|
423
424
|
end
|
424
425
|
|
425
|
-
def grad_position(color_list, index, default, radial =
|
426
|
+
def grad_position(color_list, index, default, radial = bool(false))
|
426
427
|
assert_type color_list, :List
|
427
428
|
stop = color_list.value[index.value - 1].stop
|
428
429
|
if stop && radial.to_bool
|
@@ -430,17 +431,17 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
430
431
|
if stop.unitless?
|
431
432
|
if stop.value <= 1
|
432
433
|
# A unitless number is assumed to be a percentage when it's between 0 and 1
|
433
|
-
stop = stop.times(
|
434
|
+
stop = stop.times(number(100, "%"))
|
434
435
|
else
|
435
436
|
# Otherwise, a unitless number is assumed to be in pixels
|
436
|
-
stop = stop.times(
|
437
|
+
stop = stop.times(number(1, "px"))
|
437
438
|
end
|
438
439
|
end
|
439
440
|
if stop.numerator_units == ["%"] && color_list.value.last.stop && color_list.value.last.stop.numerator_units == ["px"]
|
440
|
-
stop = stop.times(color_list.value.last.stop).div(
|
441
|
+
stop = stop.times(color_list.value.last.stop).div(number(100, "%"))
|
441
442
|
end
|
442
443
|
Compass::Logger.new.record(:warning, "Webkit only supports pixels for the start and end stops for radial gradients. Got: #{orig_stop}") if stop.numerator_units != ["px"]
|
443
|
-
stop.div(Sass::Script::Number.new(1, stop.numerator_units, stop.denominator_units))
|
444
|
+
stop.div(Sass::Script::Value::Number.new(1, stop.numerator_units, stop.denominator_units))
|
444
445
|
elsif stop
|
445
446
|
stop
|
446
447
|
else
|
@@ -459,7 +460,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
459
460
|
|
460
461
|
def radial_svg_gradient(color_stops, center)
|
461
462
|
cx, cy = *grad_point(center).value
|
462
|
-
r = grad_end_position(color_stops,
|
463
|
+
r = grad_end_position(color_stops, bool(true))
|
463
464
|
stops = color_stops_in_percentages(color_stops)
|
464
465
|
|
465
466
|
svg = radial_svg(stops, cx, cy, r)
|
@@ -470,7 +471,7 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
470
471
|
|
471
472
|
def color_stop?(arg)
|
472
473
|
arg.is_a?(ColorStop) ||
|
473
|
-
(arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) ||
|
474
|
+
(arg.is_a?(Sass::Script::Value::List) && ColorStop.new(*arg.value)) ||
|
474
475
|
ColorStop.new(arg)
|
475
476
|
rescue
|
476
477
|
nil
|
@@ -479,15 +480,15 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
479
480
|
def normalize_stops(color_list)
|
480
481
|
positions = color_list.value.map{|obj| obj.dup}
|
481
482
|
# fill in the start and end positions, if unspecified
|
482
|
-
positions.first.stop =
|
483
|
-
positions.last.stop =
|
483
|
+
positions.first.stop = number(0) unless positions.first.stop
|
484
|
+
positions.last.stop = number(100, "%") unless positions.last.stop
|
484
485
|
# fill in empty values
|
485
486
|
for i in 0...positions.size
|
486
487
|
if positions[i].stop.nil?
|
487
488
|
num = 2.0
|
488
489
|
for j in (i+1)...positions.size
|
489
490
|
if positions[j].stop
|
490
|
-
positions[i].stop = positions[i-1].stop.plus((positions[j].stop.minus(positions[i-1].stop)).div(
|
491
|
+
positions[i].stop = positions[i-1].stop.plus((positions[j].stop.minus(positions[i-1].stop)).div(number(num)))
|
491
492
|
break
|
492
493
|
else
|
493
494
|
num += 1
|
@@ -498,33 +499,29 @@ module Compass::Core::SassExtensions::Functions::GradientSupport
|
|
498
499
|
# normalize unitless numbers
|
499
500
|
positions.each do |pos|
|
500
501
|
if pos.stop.unitless? && pos.stop.value <= 1
|
501
|
-
pos.stop = pos.stop.times(
|
502
|
+
pos.stop = pos.stop.times(number(100, "%"))
|
502
503
|
elsif pos.stop.unitless?
|
503
|
-
pos.stop = pos.stop.times(
|
504
|
+
pos.stop = pos.stop.times(number(1, "px"))
|
504
505
|
end
|
505
506
|
end
|
506
|
-
if (positions.last.stop.eq(
|
507
|
-
positions.last.stop.eq(
|
507
|
+
if (positions.last.stop.eq(number(0, "px")).to_bool ||
|
508
|
+
positions.last.stop.eq(number(0, "%")).to_bool)
|
508
509
|
raise Sass::SyntaxError.new("Color stops must be specified in increasing order")
|
509
510
|
end
|
510
|
-
|
511
|
-
opts(Sass::Script::List.new(positions, color_list.separator))
|
512
|
-
else
|
513
|
-
color_list.class.new(*positions)
|
514
|
-
end
|
511
|
+
opts(list(positions, color_list.separator))
|
515
512
|
end
|
516
513
|
|
517
514
|
def parse_color_stop(arg)
|
518
|
-
return ColorStop.new(arg) if arg.is_a?(Sass::Script::Color)
|
519
|
-
return nil unless arg.is_a?(Sass::Script::String)
|
515
|
+
return ColorStop.new(arg) if arg.is_a?(Sass::Script::Value::Color)
|
516
|
+
return nil unless arg.is_a?(Sass::Script::Value::String)
|
520
517
|
color = stop = nil
|
521
518
|
expr = Sass::Script::Parser.parse(arg.value, 0, 0)
|
522
519
|
case expr
|
523
|
-
when Sass::Script::Color
|
520
|
+
when Sass::Script::Value::Color
|
524
521
|
color = expr
|
525
|
-
when Sass::Script::Funcall
|
522
|
+
when Sass::Script::Tree::Funcall
|
526
523
|
color = expr
|
527
|
-
when Sass::Script::Operation
|
524
|
+
when Sass::Script::Tree::Operation
|
528
525
|
unless [:concat, :space].include?(expr.instance_variable_get("@operator"))
|
529
526
|
# This should never happen.
|
530
527
|
raise Sass::SyntaxError, "Couldn't parse a color stop from: #{arg.value}"
|
@@ -578,10 +575,7 @@ EOS
|
|
578
575
|
end
|
579
576
|
|
580
577
|
def _center_position
|
581
|
-
opts(
|
582
|
-
Sass::Script::String.new("center"),
|
583
|
-
Sass::Script::String.new("center")
|
584
|
-
],:space))
|
578
|
+
opts(list(identifier("center"), identifier("center"), :space))
|
585
579
|
end
|
586
580
|
|
587
581
|
def opts(v)
|
@@ -600,14 +594,14 @@ EOS
|
|
600
594
|
end
|
601
595
|
end
|
602
596
|
|
603
|
-
class LinearGradient < Sass::Script::
|
597
|
+
class LinearGradient < Sass::Script::Value::Base
|
604
598
|
include Assertions
|
605
599
|
include Functions
|
606
600
|
include Compass::Core::SassExtensions::Functions::Constants
|
607
601
|
include Compass::Core::SassExtensions::Functions::InlineImage
|
608
602
|
end
|
609
603
|
|
610
|
-
class RadialGradient < Sass::Script::
|
604
|
+
class RadialGradient < Sass::Script::Value::Base
|
611
605
|
include Assertions
|
612
606
|
include Functions
|
613
607
|
include Compass::Core::SassExtensions::Functions::Constants
|