sass 3.4.25 → 3.5.0.pre.rc.1
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.
- 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.
|