sass 3.4.25 → 3.5.0.pre.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/README.md +1 -1
- data/Rakefile +13 -157
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass.rb +3 -10
- data/lib/sass/cache_stores/filesystem.rb +1 -1
- data/lib/sass/css.rb +2 -3
- data/lib/sass/engine.rb +46 -32
- data/lib/sass/environment.rb +27 -6
- data/lib/sass/error.rb +5 -5
- data/lib/sass/exec/base.rb +3 -12
- data/lib/sass/features.rb +1 -0
- data/lib/sass/importers/filesystem.rb +2 -2
- data/lib/sass/plugin.rb +1 -1
- data/lib/sass/plugin/compiler.rb +21 -51
- data/lib/sass/plugin/configuration.rb +1 -1
- data/lib/sass/plugin/rack.rb +3 -3
- data/lib/sass/plugin/staleness_checker.rb +3 -3
- data/lib/sass/railtie.rb +1 -1
- data/lib/sass/script.rb +3 -3
- data/lib/sass/script/functions.rb +238 -47
- data/lib/sass/script/lexer.rb +8 -6
- data/lib/sass/script/parser.rb +76 -75
- data/lib/sass/script/tree/funcall.rb +35 -30
- data/lib/sass/script/tree/list_literal.rb +23 -8
- data/lib/sass/script/tree/map_literal.rb +2 -2
- data/lib/sass/script/tree/node.rb +2 -10
- data/lib/sass/script/tree/operation.rb +16 -50
- data/lib/sass/script/value.rb +2 -0
- data/lib/sass/script/value/arg_list.rb +1 -1
- data/lib/sass/script/value/base.rb +20 -3
- data/lib/sass/script/value/callable.rb +25 -0
- data/lib/sass/script/value/color.rb +10 -10
- data/lib/sass/script/value/function.rb +19 -0
- data/lib/sass/script/value/helpers.rb +16 -7
- data/lib/sass/script/value/list.rb +33 -12
- data/lib/sass/script/value/map.rb +2 -2
- data/lib/sass/script/value/number.rb +3 -3
- data/lib/sass/script/value/string.rb +12 -5
- data/lib/sass/scss/parser.rb +101 -45
- data/lib/sass/scss/rx.rb +5 -11
- data/lib/sass/scss/static_parser.rb +0 -7
- data/lib/sass/selector.rb +4 -0
- data/lib/sass/selector/abstract_sequence.rb +5 -5
- data/lib/sass/selector/comma_sequence.rb +3 -15
- data/lib/sass/selector/pseudo.rb +4 -0
- data/lib/sass/selector/sequence.rb +30 -3
- data/lib/sass/selector/simple.rb +13 -7
- data/lib/sass/selector/simple_sequence.rb +1 -1
- data/lib/sass/shared.rb +3 -5
- data/lib/sass/source/map.rb +4 -4
- data/lib/sass/source/position.rb +4 -4
- data/lib/sass/stack.rb +21 -1
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/comment_node.rb +1 -1
- data/lib/sass/tree/node.rb +3 -3
- data/lib/sass/tree/prop_node.rb +46 -54
- data/lib/sass/tree/rule_node.rb +7 -15
- data/lib/sass/tree/visitors/check_nesting.rb +1 -1
- data/lib/sass/tree/visitors/convert.rb +2 -3
- data/lib/sass/tree/visitors/cssize.rb +1 -10
- data/lib/sass/tree/visitors/deep_copy.rb +2 -2
- data/lib/sass/tree/visitors/perform.rb +23 -12
- data/lib/sass/tree/visitors/set_options.rb +1 -1
- data/lib/sass/tree/visitors/to_css.rb +46 -12
- data/lib/sass/util.rb +16 -321
- data/lib/sass/util/multibyte_string_scanner.rb +127 -131
- data/lib/sass/util/normalized_map.rb +1 -8
- data/lib/sass/version.rb +2 -2
- data/test/sass-spec.yml +1 -1
- data/test/sass/compiler_test.rb +4 -14
- data/test/sass/conversion_test.rb +113 -162
- data/test/sass/css2sass_test.rb +17 -19
- data/test/sass/css_variable_test.rb +176 -70
- data/test/sass/encoding_test.rb +2 -32
- data/test/sass/engine_test.rb +114 -65
- data/test/sass/extend_test.rb +37 -51
- data/test/sass/functions_test.rb +57 -15
- data/test/sass/importer_test.rb +2 -2
- data/test/sass/more_templates/more1.sass +10 -10
- data/test/sass/more_templates/more_import.sass +2 -2
- data/test/sass/plugin_test.rb +9 -12
- data/test/sass/script_conversion_test.rb +9 -0
- data/test/sass/script_test.rb +38 -48
- data/test/sass/scss/css_test.rb +5 -19
- data/test/sass/scss/scss_test.rb +58 -39
- data/test/sass/source_map_test.rb +26 -28
- data/test/sass/templates/_partial.sass +1 -1
- data/test/sass/templates/basic.sass +10 -10
- data/test/sass/templates/bork1.sass +1 -1
- data/test/sass/templates/bork5.sass +1 -1
- data/test/sass/templates/compact.sass +10 -10
- data/test/sass/templates/complex.sass +187 -187
- data/test/sass/templates/compressed.sass +10 -10
- data/test/sass/templates/expanded.sass +10 -10
- data/test/sass/templates/import.sass +2 -2
- data/test/sass/templates/importee.sass +3 -3
- data/test/sass/templates/mixins.sass +22 -22
- data/test/sass/templates/multiline.sass +4 -4
- data/test/sass/templates/nested.sass +13 -13
- data/test/sass/templates/parent_ref.sass +12 -12
- data/test/sass/templates/script.sass +70 -70
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +1 -1
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +2 -2
- data/test/sass/templates/subdir/subdir.sass +3 -3
- data/test/sass/templates/units.sass +10 -10
- data/test/sass/util/multibyte_string_scanner_test.rb +139 -149
- data/test/sass/util_test.rb +0 -36
- data/test/test_helper.rb +39 -0
- metadata +30 -57
- data/extra/sass-spec-ref.sh +0 -32
- data/lib/sass/deprecation.rb +0 -55
- data/lib/sass/script/css_variable_warning.rb +0 -52
- data/lib/sass/util/cross_platform_random.rb +0 -19
- data/lib/sass/util/ordered_hash.rb +0 -192
- data/test/sass/results/import_charset_1_8.css +0 -5
- data/test/sass/templates/import_charset_1_8.sass +0 -6
- data/vendor/listen/CHANGELOG.md +0 -1
- data/vendor/listen/CONTRIBUTING.md +0 -38
- data/vendor/listen/Gemfile +0 -20
- data/vendor/listen/Guardfile +0 -8
- data/vendor/listen/LICENSE +0 -20
- data/vendor/listen/README.md +0 -349
- data/vendor/listen/Rakefile +0 -5
- data/vendor/listen/Vagrantfile +0 -96
- data/vendor/listen/lib/listen.rb +0 -54
- data/vendor/listen/lib/listen/adapter.rb +0 -327
- data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
- data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
- data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
- data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
- data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
- data/vendor/listen/lib/listen/directory_record.rb +0 -406
- data/vendor/listen/lib/listen/listener.rb +0 -323
- data/vendor/listen/lib/listen/turnstile.rb +0 -32
- data/vendor/listen/lib/listen/version.rb +0 -3
- data/vendor/listen/listen.gemspec +0 -28
- data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
- data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
- data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
- data/vendor/listen/spec/listen/listener_spec.rb +0 -258
- data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/vendor/listen/spec/listen_spec.rb +0 -67
- data/vendor/listen/spec/spec_helper.rb +0 -25
- data/vendor/listen/spec/support/adapter_helper.rb +0 -666
- data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
- data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/vendor/listen/spec/support/listeners_helper.rb +0 -179
- data/vendor/listen/spec/support/platform_helper.rb +0 -15
@@ -13,13 +13,20 @@ module Sass::Script::Tree
|
|
13
13
|
# @return [Symbol]
|
14
14
|
attr_reader :separator
|
15
15
|
|
16
|
+
# Whether the list is surrounded by square brackets.
|
17
|
+
#
|
18
|
+
# @return [Boolean]
|
19
|
+
attr_reader :bracketed
|
20
|
+
|
16
21
|
# Creates a new list literal.
|
17
22
|
#
|
18
23
|
# @param elements [Array<Node>] See \{#elements}
|
19
24
|
# @param separator [Symbol] See \{#separator}
|
20
|
-
|
25
|
+
# @param bracketed [Boolean] See \{#bracketed}
|
26
|
+
def initialize(elements, separator: nil, bracketed: false)
|
21
27
|
@elements = elements
|
22
28
|
@separator = separator
|
29
|
+
@bracketed = bracketed
|
23
30
|
end
|
24
31
|
|
25
32
|
# @see Node#children
|
@@ -27,7 +34,7 @@ module Sass::Script::Tree
|
|
27
34
|
|
28
35
|
# @see Value#to_sass
|
29
36
|
def to_sass(opts = {})
|
30
|
-
return "()" if elements.empty?
|
37
|
+
return bracketed ? "[]" : "()" if elements.empty?
|
31
38
|
members = elements.map do |v|
|
32
39
|
if element_needs_parens?(v)
|
33
40
|
"(#{v.to_sass(opts)})"
|
@@ -36,9 +43,12 @@ module Sass::Script::Tree
|
|
36
43
|
end
|
37
44
|
end
|
38
45
|
|
39
|
-
|
46
|
+
if separator == :comma && members.length == 1
|
47
|
+
return "#{bracketed ? '[' : '('}#{members.first},#{bracketed ? ']' : ')'}"
|
48
|
+
end
|
40
49
|
|
41
|
-
members.join(sep_str(nil))
|
50
|
+
contents = members.join(sep_str(nil))
|
51
|
+
bracketed ? "[#{contents}]" : contents
|
42
52
|
end
|
43
53
|
|
44
54
|
# @see Node#deep_copy
|
@@ -49,7 +59,9 @@ module Sass::Script::Tree
|
|
49
59
|
end
|
50
60
|
|
51
61
|
def inspect
|
52
|
-
|
62
|
+
(bracketed ? '[' : '(') +
|
63
|
+
elements.map {|e| e.inspect}.join(separator == :space ? ' ' : ', ') +
|
64
|
+
(bracketed ? ']' : ')')
|
53
65
|
end
|
54
66
|
|
55
67
|
def force_division!
|
@@ -61,7 +73,8 @@ module Sass::Script::Tree
|
|
61
73
|
def _perform(environment)
|
62
74
|
list = Sass::Script::Value::List.new(
|
63
75
|
elements.map {|e| e.perform(environment)},
|
64
|
-
separator
|
76
|
+
separator: separator,
|
77
|
+
bracketed: bracketed)
|
65
78
|
list.source_range = source_range
|
66
79
|
list.options = options
|
67
80
|
list
|
@@ -73,8 +86,10 @@ module Sass::Script::Tree
|
|
73
86
|
# when serialized to Sass.
|
74
87
|
def element_needs_parens?(element)
|
75
88
|
if element.is_a?(ListLiteral)
|
76
|
-
return
|
77
|
-
|
89
|
+
return false if element.elements.length < 2
|
90
|
+
return false if element.bracketed
|
91
|
+
return Sass::Script::Parser.precedence_of(element.separator || :space) <=
|
92
|
+
Sass::Script::Parser.precedence_of(separator || :space)
|
78
93
|
end
|
79
94
|
|
80
95
|
return false unless separator == :space
|
@@ -49,14 +49,14 @@ module Sass::Script::Tree
|
|
49
49
|
# @see Node#_perform
|
50
50
|
def _perform(environment)
|
51
51
|
keys = Set.new
|
52
|
-
map = Sass::Script::Value::Map.new(
|
52
|
+
map = Sass::Script::Value::Map.new(Hash[pairs.map do |(k, v)|
|
53
53
|
k, v = k.perform(environment), v.perform(environment)
|
54
54
|
if keys.include?(k)
|
55
55
|
raise Sass::SyntaxError.new("Duplicate key #{k.inspect} in map #{to_sass}.")
|
56
56
|
end
|
57
57
|
keys << k
|
58
58
|
[k, v]
|
59
|
-
end)
|
59
|
+
end])
|
60
60
|
map.options = options
|
61
61
|
map
|
62
62
|
end
|
@@ -10,7 +10,7 @@ module Sass::Script::Tree
|
|
10
10
|
|
11
11
|
# The line of the document on which this node appeared.
|
12
12
|
#
|
13
|
-
# @return [
|
13
|
+
# @return [Fixnum]
|
14
14
|
attr_accessor :line
|
15
15
|
|
16
16
|
# The source range in the document on which this node appeared.
|
@@ -23,17 +23,9 @@ module Sass::Script::Tree
|
|
23
23
|
# @return [String]
|
24
24
|
attr_accessor :filename
|
25
25
|
|
26
|
-
# The warning that this node should emit if it executes in a way that's not
|
27
|
-
# safe for a CSS variable value.
|
28
|
-
#
|
29
|
-
# This is `nil` if this is not in a CSS variable value.
|
30
|
-
#
|
31
|
-
# @return [Sass::Script::CssVariableWarning]
|
32
|
-
attr_accessor :css_variable_warning
|
33
|
-
|
34
26
|
# Sets the options hash for this node,
|
35
27
|
# as well as for all child nodes.
|
36
|
-
# See {file:SASS_REFERENCE.md#
|
28
|
+
# See {file:SASS_REFERENCE.md#options the Sass options documentation}.
|
37
29
|
#
|
38
30
|
# @param options [{Symbol => Object}] The options
|
39
31
|
def options=(options)
|
@@ -2,9 +2,6 @@ module Sass::Script::Tree
|
|
2
2
|
# A SassScript parse node representing a binary operation,
|
3
3
|
# such as `$a + $b` or `"foo" + 1`.
|
4
4
|
class Operation < Node
|
5
|
-
@@color_arithmetic_deprecation = Sass::Deprecation.new
|
6
|
-
@@unitless_equals_deprecation = Sass::Deprecation.new
|
7
|
-
|
8
5
|
attr_reader :operand1
|
9
6
|
attr_reader :operand2
|
10
7
|
attr_reader :operator
|
@@ -81,13 +78,6 @@ module Sass::Script::Tree
|
|
81
78
|
"Invalid null operation: \"#{value1.inspect} #{@operator} #{value2.inspect}\".")
|
82
79
|
end
|
83
80
|
|
84
|
-
if css_variable_warning && @operator == :div &&
|
85
|
-
!(value1.is_a?(Sass::Script::Value::Number) && value1.original &&
|
86
|
-
value2.is_a?(Sass::Script::Value::Number) && value2.original) &&
|
87
|
-
!(value1.is_a?(Sass::Script::Value::String) && value2.is_a?(Sass::Script::Value::String))
|
88
|
-
css_variable_warning.warn!
|
89
|
-
end
|
90
|
-
|
91
81
|
begin
|
92
82
|
result = opts(value1.send(@operator, value2))
|
93
83
|
rescue NoMethodError => e
|
@@ -95,52 +85,28 @@ module Sass::Script::Tree
|
|
95
85
|
raise Sass::SyntaxError.new("Undefined operation: \"#{value1} #{@operator} #{value2}\".")
|
96
86
|
end
|
97
87
|
|
98
|
-
|
99
|
-
|
88
|
+
if (@operator == :eq || @operator == :neq) && value1.is_a?(Sass::Script::Value::Number) &&
|
89
|
+
value2.is_a?(Sass::Script::Value::Number) && value1.unitless? != value2.unitless? &&
|
90
|
+
result == (if @operator == :eq
|
91
|
+
Sass::Script::Value::Bool::TRUE
|
92
|
+
else
|
93
|
+
Sass::Script::Value::Bool::FALSE
|
94
|
+
end)
|
95
|
+
|
96
|
+
operation = "#{value1.to_sass} #{@operator == :eq ? '==' : '!='} #{value2.to_sass}"
|
97
|
+
future_value = @operator == :neq
|
98
|
+
Sass::Util.sass_warn <<WARNING
|
99
|
+
DEPRECATION WARNING on line #{line}#{" of #{filename}" if filename}:
|
100
|
+
The result of `#{operation}` will be `#{future_value}` in future releases of Sass.
|
101
|
+
Unitless numbers will no longer be equal to the same numbers with units.
|
102
|
+
WARNING
|
103
|
+
end
|
100
104
|
|
101
105
|
result
|
102
106
|
end
|
103
107
|
|
104
108
|
private
|
105
109
|
|
106
|
-
def warn_for_color_arithmetic(value1, value2)
|
107
|
-
return unless @operator == :plus || @operator == :times || @operator == :minus ||
|
108
|
-
@operator == :div || @operator == :mod
|
109
|
-
|
110
|
-
if value1.is_a?(Sass::Script::Value::Number)
|
111
|
-
return unless value2.is_a?(Sass::Script::Value::Color)
|
112
|
-
elsif value1.is_a?(Sass::Script::Value::Color)
|
113
|
-
return unless value2.is_a?(Sass::Script::Value::Color) || value2.is_a?(Sass::Script::Value::Number)
|
114
|
-
else
|
115
|
-
return
|
116
|
-
end
|
117
|
-
|
118
|
-
@@color_arithmetic_deprecation.warn(filename, line, <<WARNING)
|
119
|
-
The operation `#{value1} #{@operator} #{value2}` is deprecated and will be an error in future versions.
|
120
|
-
Consider using Sass's color functions instead.
|
121
|
-
http://sass-lang.com/documentation/Sass/Script/Functions.html#other_color_functions
|
122
|
-
WARNING
|
123
|
-
end
|
124
|
-
|
125
|
-
def warn_for_unitless_equals(value1, value2, result)
|
126
|
-
return unless @operator == :eq || @operator == :neq
|
127
|
-
return unless value1.is_a?(Sass::Script::Value::Number)
|
128
|
-
return unless value2.is_a?(Sass::Script::Value::Number)
|
129
|
-
return unless value1.unitless? != value2.unitless?
|
130
|
-
return unless result == (if @operator == :eq
|
131
|
-
Sass::Script::Value::Bool::TRUE
|
132
|
-
else
|
133
|
-
Sass::Script::Value::Bool::FALSE
|
134
|
-
end)
|
135
|
-
|
136
|
-
operation = "#{value1.to_sass} #{@operator == :eq ? '==' : '!='} #{value2.to_sass}"
|
137
|
-
future_value = @operator == :neq
|
138
|
-
@@unitless_equals_deprecation.warn(filename, line, <<WARNING)
|
139
|
-
The result of `#{operation}` will be `#{future_value}` in future releases of Sass.
|
140
|
-
Unitless numbers will no longer be equal to the same numbers with units.
|
141
|
-
WARNING
|
142
|
-
end
|
143
|
-
|
144
110
|
def operand_to_sass(op, side, opts)
|
145
111
|
return "(#{op.to_sass(opts)})" if op.is_a?(Sass::Script::Tree::ListLiteral)
|
146
112
|
return op.to_sass(opts) unless op.is_a?(Operation)
|
data/lib/sass/script/value.rb
CHANGED
@@ -17,7 +17,7 @@ module Sass::Script::Value
|
|
17
17
|
# @param keywords [Hash<String, Value>, NormalizedMap<Value>] See \{#keywords}
|
18
18
|
# @param separator [String] See \{List#separator}.
|
19
19
|
def initialize(value, keywords, separator)
|
20
|
-
super(value, separator)
|
20
|
+
super(value, separator: separator)
|
21
21
|
if keywords.is_a?(Sass::Util::NormalizedMap)
|
22
22
|
@keywords = keywords
|
23
23
|
else
|
@@ -27,7 +27,7 @@ module Sass::Script::Value
|
|
27
27
|
|
28
28
|
# Sets the options hash for this node,
|
29
29
|
# as well as for all child nodes.
|
30
|
-
# See {file:SASS_REFERENCE.md#
|
30
|
+
# See {file:SASS_REFERENCE.md#options the Sass options documentation}.
|
31
31
|
#
|
32
32
|
# @param options [{Symbol => Object}] The options
|
33
33
|
attr_writer :options
|
@@ -149,7 +149,7 @@ MSG
|
|
149
149
|
# Returns the hash code of this value. Two objects' hash codes should be
|
150
150
|
# equal if the objects are equal.
|
151
151
|
#
|
152
|
-
# @return [
|
152
|
+
# @return [Fixnum] The hash code.
|
153
153
|
def hash
|
154
154
|
value.hash
|
155
155
|
end
|
@@ -176,7 +176,7 @@ MSG
|
|
176
176
|
eq(other).to_bool
|
177
177
|
end
|
178
178
|
|
179
|
-
# @return [
|
179
|
+
# @return [Fixnum] The integer value of this value
|
180
180
|
# @raise [Sass::SyntaxError] if this value isn't an integer
|
181
181
|
def to_i
|
182
182
|
raise Sass::SyntaxError.new("#{inspect} is not an integer.")
|
@@ -192,6 +192,12 @@ MSG
|
|
192
192
|
# @return [Symbol]
|
193
193
|
def separator; nil; end
|
194
194
|
|
195
|
+
# Whether the value is surrounded by square brackets. For non-list values,
|
196
|
+
# this will be `false`.
|
197
|
+
#
|
198
|
+
# @return [Boolean]
|
199
|
+
def bracketed; false; end
|
200
|
+
|
195
201
|
# Returns the value of this value as a list.
|
196
202
|
# Single values are considered the same as single-element lists.
|
197
203
|
#
|
@@ -228,6 +234,17 @@ MSG
|
|
228
234
|
false
|
229
235
|
end
|
230
236
|
|
237
|
+
# Creates a new list containing `contents` but with the same brackets and
|
238
|
+
# separators as this object, when interpreted as a list.
|
239
|
+
#
|
240
|
+
# @param contents [Array<Value>] The contents of the new list.
|
241
|
+
# @param separator [Symbol] The separator of the new list. Defaults to \{#separator}.
|
242
|
+
# @param bracketed [Boolean] Whether the new list is bracketed. Defaults to \{#bracketed}.
|
243
|
+
# @return [Sass::Script::Value::List]
|
244
|
+
def with_contents(contents, separator: self.separator, bracketed: self.bracketed)
|
245
|
+
Sass::Script::Value::List.new(contents, separator: separator, bracketed: bracketed)
|
246
|
+
end
|
247
|
+
|
231
248
|
protected
|
232
249
|
|
233
250
|
# Evaluates the value.
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Sass::Script::Value
|
2
|
+
# A SassScript object representing a null value.
|
3
|
+
class Callable < Base
|
4
|
+
# Constructs a Callable value for use in SassScript.
|
5
|
+
#
|
6
|
+
# @param callable [Sass::Callable] The callable to be used when the
|
7
|
+
# callable is called.
|
8
|
+
def initialize(callable)
|
9
|
+
super(callable)
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s(opts = {})
|
13
|
+
raise Sass::SyntaxError.new("#{to_sass} isn't a valid CSS value.")
|
14
|
+
end
|
15
|
+
|
16
|
+
def inspect
|
17
|
+
to_sass
|
18
|
+
end
|
19
|
+
|
20
|
+
# @abstract
|
21
|
+
def to_sass
|
22
|
+
Sass::Util.abstract(self)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -17,8 +17,8 @@ module Sass::Script::Value
|
|
17
17
|
# @private
|
18
18
|
#
|
19
19
|
# Convert a ruby integer to a rgba components
|
20
|
-
# @param color [
|
21
|
-
# @return [Array<
|
20
|
+
# @param color [Fixnum]
|
21
|
+
# @return [Array<Fixnum>] Array of 4 numbers representing r,g,b and alpha
|
22
22
|
def self.int_to_rgba(color)
|
23
23
|
rgba = (0..3).map {|n| color >> (n << 3) & 0xff}.reverse
|
24
24
|
rgba[-1] = rgba[-1] / 255.0
|
@@ -293,7 +293,7 @@ module Sass::Script::Value
|
|
293
293
|
|
294
294
|
# The red component of the color.
|
295
295
|
#
|
296
|
-
# @return [
|
296
|
+
# @return [Fixnum]
|
297
297
|
def red
|
298
298
|
hsl_to_rgb!
|
299
299
|
@attrs[:red]
|
@@ -301,7 +301,7 @@ module Sass::Script::Value
|
|
301
301
|
|
302
302
|
# The green component of the color.
|
303
303
|
#
|
304
|
-
# @return [
|
304
|
+
# @return [Fixnum]
|
305
305
|
def green
|
306
306
|
hsl_to_rgb!
|
307
307
|
@attrs[:green]
|
@@ -309,7 +309,7 @@ module Sass::Script::Value
|
|
309
309
|
|
310
310
|
# The blue component of the color.
|
311
311
|
#
|
312
|
-
# @return [
|
312
|
+
# @return [Fixnum]
|
313
313
|
def blue
|
314
314
|
hsl_to_rgb!
|
315
315
|
@attrs[:blue]
|
@@ -342,7 +342,7 @@ module Sass::Script::Value
|
|
342
342
|
# The alpha channel (opacity) of the color.
|
343
343
|
# This is 1 unless otherwise defined.
|
344
344
|
#
|
345
|
-
# @return [
|
345
|
+
# @return [Fixnum]
|
346
346
|
def alpha
|
347
347
|
@attrs[:alpha].to_f
|
348
348
|
end
|
@@ -357,7 +357,7 @@ module Sass::Script::Value
|
|
357
357
|
|
358
358
|
# Returns the red, green, and blue components of the color.
|
359
359
|
#
|
360
|
-
# @return [Array<
|
360
|
+
# @return [Array<Fixnum>] A frozen three-element array of the red, green, and blue
|
361
361
|
# values (respectively) of the color
|
362
362
|
def rgb
|
363
363
|
[red, green, blue].freeze
|
@@ -365,7 +365,7 @@ module Sass::Script::Value
|
|
365
365
|
|
366
366
|
# Returns the red, green, blue, and alpha components of the color.
|
367
367
|
#
|
368
|
-
# @return [Array<
|
368
|
+
# @return [Array<Fixnum>] A frozen four-element array of the red, green,
|
369
369
|
# blue, and alpha values (respectively) of the color
|
370
370
|
def rgba
|
371
371
|
[red, green, blue, alpha].freeze
|
@@ -373,7 +373,7 @@ module Sass::Script::Value
|
|
373
373
|
|
374
374
|
# Returns the hue, saturation, and lightness components of the color.
|
375
375
|
#
|
376
|
-
# @return [Array<
|
376
|
+
# @return [Array<Fixnum>] A frozen three-element array of the
|
377
377
|
# hue, saturation, and lightness values (respectively) of the color
|
378
378
|
def hsl
|
379
379
|
[hue, saturation, lightness].freeze
|
@@ -381,7 +381,7 @@ module Sass::Script::Value
|
|
381
381
|
|
382
382
|
# Returns the hue, saturation, lightness, and alpha components of the color.
|
383
383
|
#
|
384
|
-
# @return [Array<
|
384
|
+
# @return [Array<Fixnum>] A frozen four-element array of the hue,
|
385
385
|
# saturation, lightness, and alpha values (respectively) of the color
|
386
386
|
def hsla
|
387
387
|
[hue, saturation, lightness, alpha].freeze
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Sass::Script::Value
|
2
|
+
# A SassScript object representing a function.
|
3
|
+
class Function < Callable
|
4
|
+
# Constructs a Function value for use in SassScript.
|
5
|
+
#
|
6
|
+
# @param function [Sass::Callable] The callable to be used when the
|
7
|
+
# function is invoked.
|
8
|
+
def initialize(function)
|
9
|
+
unless function.type == "function"
|
10
|
+
raise ArgumentError.new("A callable of type function was expected.")
|
11
|
+
end
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_sass
|
16
|
+
%{get-function("#{value.name}")}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -68,26 +68,35 @@ module Sass::Script::Value
|
|
68
68
|
Number.new(number, *parse_unit_string(unit_string))
|
69
69
|
end
|
70
70
|
|
71
|
-
# @overload list(*elements, separator)
|
71
|
+
# @overload list(*elements, separator:, bracketed: false)
|
72
72
|
# Create a space-separated list from the arguments given.
|
73
73
|
# @param elements [Array<Sass::Script::Value::Base>] Each argument will be a list element.
|
74
74
|
# @param separator [Symbol] Either :space or :comma.
|
75
|
+
# @param bracketed [Boolean] Whether the list uses square brackets.
|
75
76
|
# @return [Sass::Script::Value::List] The space separated list.
|
76
77
|
#
|
77
|
-
# @overload list(array, separator)
|
78
|
+
# @overload list(array, separator:, bracketed: false)
|
78
79
|
# Create a space-separated list from the array given.
|
79
80
|
# @param array [Array<Sass::Script::Value::Base>] A ruby array of Sass values
|
80
81
|
# to make into a list.
|
82
|
+
# @param separator [Symbol] Either :space or :comma.
|
83
|
+
# @param bracketed [Boolean] Whether the list uses square brackets.
|
81
84
|
# @return [Sass::Script::Value::List] The space separated list.
|
82
|
-
def list(*elements)
|
83
|
-
|
84
|
-
|
85
|
+
def list(*elements, separator: nil, bracketed: false)
|
86
|
+
# Support passing separator as the last value in elements for
|
87
|
+
# backwards-compatibility.
|
88
|
+
if separator.nil?
|
89
|
+
if elements.last.is_a?(Symbol)
|
90
|
+
separator = elements.pop
|
91
|
+
else
|
92
|
+
raise ArgumentError.new("A separator of :space or :comma must be specified.")
|
93
|
+
end
|
85
94
|
end
|
86
|
-
|
95
|
+
|
87
96
|
if elements.size == 1 && elements.first.is_a?(Array)
|
88
97
|
elements = elements.first
|
89
98
|
end
|
90
|
-
Sass::Script::Value::List.new(elements, separator)
|
99
|
+
Sass::Script::Value::List.new(elements, separator: separator, bracketed: bracketed)
|
91
100
|
end
|
92
101
|
|
93
102
|
# Construct a Sass map.
|