sass 3.3.0.alpha.149 → 3.3.0.alpha.162
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/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/css.rb +1 -1
- data/lib/sass/engine.rb +4 -4
- data/lib/sass/environment.rb +1 -1
- data/lib/sass/exec.rb +1 -1
- data/lib/sass/media.rb +15 -15
- data/lib/sass/script.rb +32 -7
- data/lib/sass/script/css_lexer.rb +2 -2
- data/lib/sass/script/css_parser.rb +1 -1
- data/lib/sass/script/functions.rb +246 -232
- data/lib/sass/script/lexer.rb +24 -32
- data/lib/sass/script/parser.rb +84 -65
- data/lib/sass/script/tree.rb +14 -0
- data/lib/sass/script/tree/funcall.rb +242 -0
- data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +30 -13
- data/lib/sass/script/tree/list_literal.rb +65 -0
- data/lib/sass/script/tree/literal.rb +46 -0
- data/lib/sass/script/{node.rb → tree/node.rb} +10 -10
- data/lib/sass/script/{operation.rb → tree/operation.rb} +16 -27
- data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +4 -4
- data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +7 -8
- data/lib/sass/script/tree/variable.rb +56 -0
- data/lib/sass/script/value.rb +10 -0
- data/lib/sass/script/{arg_list.rb → value/arg_list.rb} +5 -20
- data/lib/sass/script/value/base.rb +222 -0
- data/lib/sass/script/{bool.rb → value/bool.rb} +2 -2
- data/lib/sass/script/{color.rb → value/color.rb} +22 -20
- data/lib/sass/script/{list.rb → value/list.rb} +15 -28
- data/lib/sass/script/{null.rb → value/null.rb} +3 -3
- data/lib/sass/script/{number.rb → value/number.rb} +19 -19
- data/lib/sass/script/{string.rb → value/string.rb} +7 -7
- data/lib/sass/scss/parser.rb +14 -4
- data/lib/sass/selector.rb +26 -26
- data/lib/sass/selector/abstract_sequence.rb +1 -1
- data/lib/sass/selector/simple.rb +6 -7
- data/lib/sass/source/position.rb +13 -0
- data/lib/sass/supports.rb +4 -4
- data/lib/sass/tree/comment_node.rb +3 -3
- data/lib/sass/tree/css_import_node.rb +7 -7
- data/lib/sass/tree/debug_node.rb +2 -2
- data/lib/sass/tree/directive_node.rb +2 -2
- data/lib/sass/tree/each_node.rb +2 -2
- data/lib/sass/tree/extend_node.rb +4 -4
- data/lib/sass/tree/for_node.rb +4 -4
- data/lib/sass/tree/function_node.rb +4 -4
- data/lib/sass/tree/media_node.rb +3 -3
- data/lib/sass/tree/mixin_def_node.rb +4 -4
- data/lib/sass/tree/mixin_node.rb +6 -6
- data/lib/sass/tree/prop_node.rb +23 -15
- data/lib/sass/tree/return_node.rb +2 -2
- data/lib/sass/tree/rule_node.rb +3 -3
- data/lib/sass/tree/variable_node.rb +2 -2
- data/lib/sass/tree/visitors/convert.rb +2 -2
- data/lib/sass/tree/visitors/deep_copy.rb +5 -5
- data/lib/sass/tree/visitors/perform.rb +7 -7
- data/lib/sass/tree/visitors/set_options.rb +6 -6
- data/lib/sass/tree/visitors/to_css.rb +1 -1
- data/lib/sass/tree/warn_node.rb +2 -2
- data/lib/sass/tree/while_node.rb +2 -2
- data/lib/sass/util.rb +2 -2
- data/test/sass/engine_test.rb +6 -6
- data/test/sass/functions_test.rb +20 -20
- data/test/sass/plugin_test.rb +2 -2
- data/test/sass/script_test.rb +38 -29
- data/test/test_helper.rb +1 -1
- metadata +23 -19
- data/lib/sass/script/funcall.rb +0 -238
- data/lib/sass/script/literal.rb +0 -221
- data/lib/sass/script/variable.rb +0 -58
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1560055ae94cf45bb26e6397ebcac5d737d9d791
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.3.0.alpha.
|
1
|
+
3.3.0.alpha.162
|
data/VERSION_DATE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
29 May 2013 19:57:06 GMT
|
data/lib/sass/css.rb
CHANGED
@@ -326,7 +326,7 @@ module Sass
|
|
326
326
|
next child
|
327
327
|
end
|
328
328
|
|
329
|
-
if prev_rule && prev_rule.children == child.children
|
329
|
+
if prev_rule && prev_rule.children.map {|c| c.to_sass} == child.children.map {|c| c.to_sass}
|
330
330
|
prev_rule.parsed_rules.members << first_seq(child)
|
331
331
|
next nil
|
332
332
|
end
|
data/lib/sass/engine.rb
CHANGED
@@ -55,12 +55,12 @@ module Sass
|
|
55
55
|
# `name`: `String`
|
56
56
|
# : The name of the mixin/function.
|
57
57
|
#
|
58
|
-
# `args`: `Array<(Script::Node, Script::Node)>`
|
58
|
+
# `args`: `Array<(Script::Tree::Node, Script::Tree::Node)>`
|
59
59
|
# : The arguments for the mixin/function.
|
60
60
|
# Each element is a tuple containing the variable node of the argument
|
61
61
|
# and the parse tree for the default value of the argument.
|
62
62
|
#
|
63
|
-
# `splat`: `Script::Node?`
|
63
|
+
# `splat`: `Script::Tree::Node?`
|
64
64
|
# : The variable node of the splat argument for this callable, or null.
|
65
65
|
#
|
66
66
|
# `environment`: {Sass::Environment}
|
@@ -684,7 +684,7 @@ WARNING
|
|
684
684
|
|
685
685
|
def parse_property(name, parsed_name, value, prop, line, start_offset)
|
686
686
|
if value.strip.empty?
|
687
|
-
expr = Sass::Script::String.new("")
|
687
|
+
expr = Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new(""))
|
688
688
|
end_offset = start_offset
|
689
689
|
else
|
690
690
|
expr = parse_script(value, :offset => to_parser_offset(start_offset))
|
@@ -1064,7 +1064,7 @@ WARNING
|
|
1064
1064
|
end
|
1065
1065
|
|
1066
1066
|
# It's important that this have strings (at least)
|
1067
|
-
# at the beginning, the end, and between each Script::Node.
|
1067
|
+
# at the beginning, the end, and between each Script::Tree::Node.
|
1068
1068
|
#
|
1069
1069
|
# @private
|
1070
1070
|
def self.parse_interp(text, line, offset, options)
|
data/lib/sass/environment.rb
CHANGED
data/lib/sass/exec.rb
CHANGED
@@ -263,7 +263,7 @@ END
|
|
263
263
|
end
|
264
264
|
opts.on('--precision NUMBER_OF_DIGITS', Integer,
|
265
265
|
'How many digits of precision to use when outputting decimal numbers. Defaults to 3.') do |precision|
|
266
|
-
::Sass::Script::Number.precision = precision
|
266
|
+
::Sass::Script::Value::Number.precision = precision
|
267
267
|
end
|
268
268
|
opts.on('-q', '--quiet', 'Silence warnings and status messages during compilation.') do
|
269
269
|
@options[:for_engine][:quiet] = true
|
data/lib/sass/media.rb
CHANGED
@@ -43,11 +43,11 @@ module Sass::Media
|
|
43
43
|
end
|
44
44
|
|
45
45
|
# Returns a representation of the query as an array of strings and
|
46
|
-
# potentially {Sass::Script::Node}s (if there's interpolation in it).
|
47
|
-
# the interpolation is resolved and the strings are joined together,
|
48
|
-
# will be the string representation of this query.
|
46
|
+
# potentially {Sass::Script::Tree::Node}s (if there's interpolation in it).
|
47
|
+
# When the interpolation is resolved and the strings are joined together,
|
48
|
+
# this will be the string representation of this query.
|
49
49
|
#
|
50
|
-
# @return [Array<String, Sass::Script::Node>]
|
50
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
51
51
|
def to_a
|
52
52
|
Sass::Util.intersperse(queries.map {|q| q.to_a}, ', ').flatten
|
53
53
|
end
|
@@ -70,7 +70,7 @@ module Sass::Media
|
|
70
70
|
# parsed as CSS, it contains a single string (accessible via
|
71
71
|
# \{#resolved_modifier}).
|
72
72
|
#
|
73
|
-
# @return [Array<String, Sass::Script::Node>]
|
73
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
74
74
|
attr_accessor :modifier
|
75
75
|
|
76
76
|
# The type of the query (e.g. `"screen"` or `"print"`).
|
@@ -79,7 +79,7 @@ module Sass::Media
|
|
79
79
|
# parsed as CSS, it contains a single string (accessible via
|
80
80
|
# \{#resolved_type}).
|
81
81
|
#
|
82
|
-
# @return [Array<String, Sass::Script::Node>]
|
82
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
83
83
|
attr_accessor :type
|
84
84
|
|
85
85
|
# The trailing expressions in the query.
|
@@ -87,12 +87,12 @@ module Sass::Media
|
|
87
87
|
# When parsed as Sass code, each expression contains strings and SassScript
|
88
88
|
# nodes. When parsed as CSS, each one contains a single string.
|
89
89
|
#
|
90
|
-
# @return [Array<Array<String, Sass::Script::Node>>]
|
90
|
+
# @return [Array<Array<String, Sass::Script::Tree::Node>>]
|
91
91
|
attr_accessor :expressions
|
92
92
|
|
93
|
-
# @param modifier [Array<String, Sass::Script::Node>] See \{#modifier}
|
94
|
-
# @param type [Array<String, Sass::Script::Node>] See \{#type}
|
95
|
-
# @param expressions [Array<Array<String, Sass::Script::Node>>] See \{#expressions}
|
93
|
+
# @param modifier [Array<String, Sass::Script::Tree::Node>] See \{#modifier}
|
94
|
+
# @param type [Array<String, Sass::Script::Tree::Node>] See \{#type}
|
95
|
+
# @param expressions [Array<Array<String, Sass::Script::Tree::Node>>] See \{#expressions}
|
96
96
|
def initialize(modifier, type, expressions)
|
97
97
|
@modifier = modifier
|
98
98
|
@type = type
|
@@ -156,7 +156,7 @@ module Sass::Media
|
|
156
156
|
# It's possible for there to be script nodes in Expressions even when
|
157
157
|
# we're converting to CSS in the case where we parsed the document as
|
158
158
|
# CSS originally (as in css_test.rb).
|
159
|
-
e.map {|c| c.is_a?(Sass::Script::Node) ? c.to_sass : c.to_s}.join
|
159
|
+
e.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.to_sass : c.to_s}.join
|
160
160
|
end.join(' and ')
|
161
161
|
css
|
162
162
|
end
|
@@ -193,15 +193,15 @@ module Sass::Media
|
|
193
193
|
# @return [Query]
|
194
194
|
def deep_copy
|
195
195
|
Query.new(
|
196
|
-
modifier.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c},
|
197
|
-
type.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c},
|
198
|
-
expressions.map {|e| e.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}})
|
196
|
+
modifier.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c},
|
197
|
+
type.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c},
|
198
|
+
expressions.map {|e| e.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}})
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
202
|
# Converts an interpolation array to source.
|
203
203
|
#
|
204
|
-
# @param [Array<String, Sass::Script::Node>] The interpolation array to convert.
|
204
|
+
# @param [Array<String, Sass::Script::Tree::Node>] The interpolation array to convert.
|
205
205
|
# @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}).
|
206
206
|
# @return [String]
|
207
207
|
def self._interp_to_src(interp, options)
|
data/lib/sass/script.rb
CHANGED
@@ -1,9 +1,4 @@
|
|
1
|
-
require 'sass/
|
2
|
-
require 'sass/script/variable'
|
3
|
-
require 'sass/script/funcall'
|
4
|
-
require 'sass/script/operation'
|
5
|
-
require 'sass/script/literal'
|
6
|
-
require 'sass/script/parser'
|
1
|
+
require 'sass/scss/rx'
|
7
2
|
|
8
3
|
module Sass
|
9
4
|
# SassScript is code that's embedded in Sass documents
|
@@ -26,7 +21,7 @@ module Sass
|
|
26
21
|
# Used for error reporting
|
27
22
|
# @param options [{Symbol => Object}] An options hash;
|
28
23
|
# see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
|
29
|
-
# @return [Script::Node] The root node of the parse tree
|
24
|
+
# @return [Script::Tree::Node] The root node of the parse tree
|
30
25
|
def self.parse(value, line, offset, options = {})
|
31
26
|
Parser.parse(value, line, offset, options)
|
32
27
|
rescue Sass::SyntaxError => e
|
@@ -35,5 +30,35 @@ module Sass
|
|
35
30
|
raise e
|
36
31
|
end
|
37
32
|
|
33
|
+
require 'sass/script/functions'
|
34
|
+
require 'sass/script/parser'
|
35
|
+
require 'sass/script/tree'
|
36
|
+
require 'sass/script/value'
|
37
|
+
|
38
|
+
# @private
|
39
|
+
CONST_RENAMES = {
|
40
|
+
:Literal => Sass::Script::Value::Base,
|
41
|
+
:ArgList => Sass::Script::Value::ArgList,
|
42
|
+
:Bool => Sass::Script::Value::Bool,
|
43
|
+
:Color => Sass::Script::Value::Color,
|
44
|
+
:List => Sass::Script::Value::List,
|
45
|
+
:Null => Sass::Script::Value::Null,
|
46
|
+
:Number => Sass::Script::Value::Number,
|
47
|
+
:String => Sass::Script::Value::String,
|
48
|
+
:Node => Sass::Script::Tree::Node,
|
49
|
+
:Funcall => Sass::Script::Tree::Funcall,
|
50
|
+
:Interpolation => Sass::Script::Tree::Interpolation,
|
51
|
+
:Operation => Sass::Script::Tree::Operation,
|
52
|
+
:StringInterpolation => Sass::Script::Tree::StringInterpolation,
|
53
|
+
:UnaryOperation => Sass::Script::Tree::UnaryOperation,
|
54
|
+
:Variable => Sass::Script::Tree::Variable,
|
55
|
+
}
|
56
|
+
|
57
|
+
# @private
|
58
|
+
def self.const_missing(name)
|
59
|
+
super unless klass = CONST_RENAMES[name]
|
60
|
+
CONST_RENAMES.each {|n, k| const_set(n, k)}
|
61
|
+
klass
|
62
|
+
end
|
38
63
|
end
|
39
64
|
end
|
@@ -13,11 +13,11 @@ module Sass
|
|
13
13
|
def string(re, *args)
|
14
14
|
if re == :uri
|
15
15
|
return unless uri = scan(URI)
|
16
|
-
return [:string, Script::String.new(uri)]
|
16
|
+
return [:string, Script::Value::String.new(uri)]
|
17
17
|
end
|
18
18
|
|
19
19
|
return unless scan(STRING)
|
20
|
-
[:string, Script::String.new((@scanner[1] || @scanner[2]).gsub(/\\(['"])/, '\1'), :string)]
|
20
|
+
[:string, Script::Value::String.new((@scanner[1] || @scanner[2]).gsub(/\\(['"])/, '\1'), :string)]
|
21
21
|
end
|
22
22
|
|
23
23
|
def important
|
@@ -18,7 +18,7 @@ module Sass
|
|
18
18
|
|
19
19
|
def string
|
20
20
|
return number unless tok = try_tok(:string)
|
21
|
-
return tok.value unless @lexer.peek && @lexer.peek.type == :begin_interpolation
|
21
|
+
return literal_node(tok.value, tok.source_range) unless @lexer.peek && @lexer.peek.type == :begin_interpolation
|
22
22
|
end
|
23
23
|
|
24
24
|
# Short-circuit all the SassScript-only productions
|
@@ -201,7 +201,7 @@ module Sass::Script
|
|
201
201
|
# module Sass::Script::Functions
|
202
202
|
# def reverse(string)
|
203
203
|
# assert_type string, :String
|
204
|
-
# Sass::Script::String.new(string.value.reverse)
|
204
|
+
# Sass::Script::Value::String.new(string.value.reverse)
|
205
205
|
# end
|
206
206
|
# declare :reverse, :args => [:string]
|
207
207
|
# end
|
@@ -211,14 +211,15 @@ module Sass::Script
|
|
211
211
|
# {declare} can also allow your function to take arbitrary keyword arguments.
|
212
212
|
#
|
213
213
|
# There are a few things to keep in mind when modifying this module.
|
214
|
-
# First of all, the arguments passed are {
|
215
|
-
#
|
214
|
+
# First of all, the arguments passed are {Value} objects.
|
215
|
+
# Value objects are also expected to be returned.
|
216
216
|
# This means that Ruby values must be unwrapped and wrapped.
|
217
217
|
#
|
218
|
-
# Most
|
219
|
-
#
|
220
|
-
# Color
|
221
|
-
# {Color#
|
218
|
+
# Most Value objects support the {Value#value value} accessor for getting
|
219
|
+
# their Ruby values. Color objects, though, must be accessed using
|
220
|
+
# {Sass::Script::Value::Color#rgb rgb}, {Sass::Script::Value::Color#red red},
|
221
|
+
# {Sass::Script::Value::Color#blue green}, or {Sass::Script::Value::Color#blue
|
222
|
+
# blue}.
|
222
223
|
#
|
223
224
|
# Second, making Ruby functions accessible from Sass introduces the temptation
|
224
225
|
# to do things like database access within stylesheets.
|
@@ -238,10 +239,10 @@ module Sass::Script
|
|
238
239
|
#
|
239
240
|
# ### Caveats
|
240
241
|
#
|
241
|
-
# When creating new {
|
242
|
-
#
|
243
|
-
#
|
244
|
-
#
|
242
|
+
# When creating new {Value} objects within functions, be aware that it's not
|
243
|
+
# safe to call {Value#to_s #to_s} (or other methods that use the string
|
244
|
+
# representation) on those objects without first setting {Tree::Node#options=
|
245
|
+
# the #options attribute}.
|
245
246
|
module Functions
|
246
247
|
@signatures = {}
|
247
248
|
|
@@ -277,7 +278,7 @@ module Sass::Script
|
|
277
278
|
# Whether the function accepts other keyword arguments
|
278
279
|
# in addition to those in `:args`.
|
279
280
|
# If this is true, the Ruby function will be passed a hash from strings
|
280
|
-
# to {
|
281
|
+
# to {Value}s as the last argument.
|
281
282
|
# In addition, if this is true and `:var_args` is not,
|
282
283
|
# Sass will ensure that the last argument passed is a hash.
|
283
284
|
#
|
@@ -299,8 +300,8 @@ module Sass::Script
|
|
299
300
|
# If no signatures match, the first signature is returned for error messaging.
|
300
301
|
#
|
301
302
|
# @param method_name [Symbol] The name of the Ruby function to be called.
|
302
|
-
# @param arg_arity [
|
303
|
-
# @param kwarg_arity [
|
303
|
+
# @param arg_arity [Fixnum] The number of unnamed arguments the function was passed.
|
304
|
+
# @param kwarg_arity [Fixnum] The number of keyword arguments the function was passed.
|
304
305
|
#
|
305
306
|
# @return [{Symbol => Object}, nil]
|
306
307
|
# The signature options for the matching signature,
|
@@ -363,12 +364,12 @@ module Sass::Script
|
|
363
364
|
# @example
|
364
365
|
# assert_type value, :String
|
365
366
|
# assert_type value, :Number
|
366
|
-
# @param value [
|
367
|
+
# @param value [Value] A SassScript value
|
367
368
|
# @param type [Symbol] The name of the type the value is expected to be
|
368
369
|
# @param name [String, nil] The name of the argument.
|
369
370
|
# @raise [ArgumentError] if value is not of the correct type.
|
370
371
|
def assert_type(value, type, name = nil)
|
371
|
-
return if value.is_a?(Sass::Script.const_get(type))
|
372
|
+
return if value.is_a?(Sass::Script::Value.const_get(type))
|
372
373
|
err = "#{value.inspect} is not a #{type.to_s.downcase}"
|
373
374
|
err = "$#{name}: " + err if name
|
374
375
|
raise ArgumentError.new(err)
|
@@ -379,7 +380,7 @@ module Sass::Script
|
|
379
380
|
# @example
|
380
381
|
# assert_unit number, "px"
|
381
382
|
# assert_unit number, nil
|
382
|
-
# @param number [Number] The number to be validated.
|
383
|
+
# @param number [Sass::Script::Value::Number] The number to be validated.
|
383
384
|
# @param unit [::String]
|
384
385
|
# The unit that the number must have.
|
385
386
|
# If nil, the number must be unitless.
|
@@ -401,7 +402,7 @@ module Sass::Script
|
|
401
402
|
# @example
|
402
403
|
# assert_unit number, "px"
|
403
404
|
# assert_unit number, nil
|
404
|
-
# @param number [
|
405
|
+
# @param number [Sass::Script::Value::Base] The value to be validated.
|
405
406
|
# @param name [::String] The name of the parameter being validated.
|
406
407
|
# @raise [ArgumentError] if number is not an integer or is not a number.
|
407
408
|
def assert_integer(number, name = nil)
|
@@ -432,25 +433,26 @@ module Sass::Script
|
|
432
433
|
end
|
433
434
|
end
|
434
435
|
|
435
|
-
# Creates a {Color} object from red, green, and
|
436
|
+
# Creates a {Sass::Script::Value::Color Color} object from red, green, and
|
437
|
+
# blue values.
|
436
438
|
#
|
437
|
-
# @param red [Number]
|
439
|
+
# @param red [Sass::Script::Value::Number]
|
438
440
|
# A number between 0 and 255 inclusive,
|
439
441
|
# or between 0% and 100% inclusive
|
440
|
-
# @param green [Number]
|
442
|
+
# @param green [Sass::Script::Value::Number]
|
441
443
|
# A number between 0 and 255 inclusive,
|
442
444
|
# or between 0% and 100% inclusive
|
443
|
-
# @param blue [Number]
|
445
|
+
# @param blue [Sass::Script::Value::Number]
|
444
446
|
# A number between 0 and 255 inclusive,
|
445
447
|
# or between 0% and 100% inclusive
|
446
448
|
# @see #rgba
|
447
|
-
# @return [Color]
|
449
|
+
# @return [Sass::Script::Value::Color]
|
448
450
|
def rgb(red, green, blue)
|
449
451
|
assert_type red, :Number
|
450
452
|
assert_type green, :Number
|
451
453
|
assert_type blue, :Number
|
452
454
|
|
453
|
-
Color.new([red, green, blue].map do |c|
|
455
|
+
Sass::Script::Value::Color.new([red, green, blue].map do |c|
|
454
456
|
v = c.value
|
455
457
|
if c.is_unit?("%")
|
456
458
|
v = Sass::Util.check_range("Color value", 0..100, c, '%')
|
@@ -466,18 +468,18 @@ module Sass::Script
|
|
466
468
|
|
467
469
|
# @see #rgb
|
468
470
|
# @overload rgba(red, green, blue, alpha)
|
469
|
-
# Creates a {Color} object from red, green, and
|
470
|
-
# as well as an alpha channel indicating opacity.
|
471
|
+
# Creates a {Sass::Script::Value::Color Color} object from red, green, and
|
472
|
+
# blue values, as well as an alpha channel indicating opacity.
|
471
473
|
#
|
472
|
-
# @param red [Number]
|
474
|
+
# @param red [Sass::Script::Value::Number]
|
473
475
|
# A number between 0 and 255 inclusive
|
474
|
-
# @param green [Number]
|
476
|
+
# @param green [Sass::Script::Value::Number]
|
475
477
|
# A number between 0 and 255 inclusive
|
476
|
-
# @param blue [Number]
|
478
|
+
# @param blue [Sass::Script::Value::Number]
|
477
479
|
# A number between 0 and 255 inclusive
|
478
|
-
# @param alpha [Number]
|
480
|
+
# @param alpha [Sass::Script::Value::Number]
|
479
481
|
# A number between 0 and 1
|
480
|
-
# @return [Color]
|
482
|
+
# @return [Sass::Script::Value::Color]
|
481
483
|
#
|
482
484
|
# @overload rgba(color, alpha)
|
483
485
|
# Sets the opacity of a color.
|
@@ -486,10 +488,10 @@ module Sass::Script
|
|
486
488
|
# rgba(#102030, 0.5) => rgba(16, 32, 48, 0.5)
|
487
489
|
# rgba(blue, 0.2) => rgba(0, 0, 255, 0.2)
|
488
490
|
#
|
489
|
-
# @param color [Color]
|
490
|
-
# @param alpha [Number]
|
491
|
+
# @param color [Sass::Script::Value::Color]
|
492
|
+
# @param alpha [Sass::Script::Value::Number]
|
491
493
|
# A number between 0 and 1
|
492
|
-
# @return [Color]
|
494
|
+
# @return [Sass::Script::Value::Color]
|
493
495
|
def rgba(*args)
|
494
496
|
case args.size
|
495
497
|
when 2
|
@@ -510,36 +512,36 @@ module Sass::Script
|
|
510
512
|
declare :rgba, [:red, :green, :blue, :alpha]
|
511
513
|
declare :rgba, [:color, :alpha]
|
512
514
|
|
513
|
-
# Creates a {Color} object from hue, saturation,
|
514
|
-
# Uses the algorithm from the [CSS3 spec](http://www.w3.org/TR/css3-color/#hsl-color).
|
515
|
+
# Creates a {Sass::Script::Value::Color Color} object from hue, saturation,
|
516
|
+
# and lightness. Uses the algorithm from the [CSS3 spec](http://www.w3.org/TR/css3-color/#hsl-color).
|
515
517
|
#
|
516
|
-
# @param hue [Number]
|
517
|
-
# Should be between 0 and 360 degrees, inclusive
|
518
|
-
# @param saturation [Number]
|
519
|
-
# Must be between `0%` and `100%`, inclusive
|
520
|
-
# @param lightness [Number]
|
521
|
-
# Must be between `0%` and `100%`, inclusive
|
522
|
-
# @return [Color] The resulting color
|
518
|
+
# @param hue [Sass::Script::Value::Number]
|
519
|
+
# The hue of the color. Should be between 0 and 360 degrees, inclusive
|
520
|
+
# @param saturation [Sass::Script::Value::Number]
|
521
|
+
# The saturation of the color. Must be between `0%` and `100%`, inclusive
|
522
|
+
# @param lightness [Sass::Script::Value::Number]
|
523
|
+
# The lightness of the color. Must be between `0%` and `100%`, inclusive
|
524
|
+
# @return [Sass::Script::Value::Color] The resulting color
|
523
525
|
# @see #hsla
|
524
526
|
# @raise [ArgumentError] if `saturation` or `lightness` are out of bounds
|
525
527
|
def hsl(hue, saturation, lightness)
|
526
|
-
hsla(hue, saturation, lightness, Number.new(1))
|
528
|
+
hsla(hue, saturation, lightness, Sass::Script::Value::Number.new(1))
|
527
529
|
end
|
528
530
|
declare :hsl, [:hue, :saturation, :lightness]
|
529
531
|
|
530
|
-
# Creates a {Color} object from hue, saturation,
|
531
|
-
# as well as an alpha channel indicating opacity.
|
532
|
-
#
|
532
|
+
# Creates a {Sass::Script::Value::Color Color} object from hue, saturation,
|
533
|
+
# and lightness, as well as an alpha channel indicating opacity. Uses the
|
534
|
+
# algorithm from the [CSS3 spec](http://www.w3.org/TR/css3-color/#hsl-color).
|
533
535
|
#
|
534
|
-
# @param hue [Number] The hue of the color.
|
536
|
+
# @param hue [Sass::Script::Value::Number] The hue of the color.
|
535
537
|
# Should be between 0 and 360 degrees, inclusive
|
536
|
-
# @param saturation [Number] The saturation of the color.
|
538
|
+
# @param saturation [Sass::Script::Value::Number] The saturation of the color.
|
537
539
|
# Must be between `0%` and `100%`, inclusive
|
538
|
-
# @param lightness [Number] The lightness of the color.
|
540
|
+
# @param lightness [Sass::Script::Value::Number] The lightness of the color.
|
539
541
|
# Must be between `0%` and `100%`, inclusive
|
540
|
-
# @param alpha [Number] The opacity of the color.
|
542
|
+
# @param alpha [Sass::Script::Value::Number] The opacity of the color.
|
541
543
|
# Must be between 0 and 1, inclusive
|
542
|
-
# @return [Color] The resulting color
|
544
|
+
# @return [Sass::Script::Value::Color] The resulting color
|
543
545
|
# @see #hsl
|
544
546
|
# @raise [ArgumentError] if `saturation`, `lightness`, or `alpha` are out of bounds
|
545
547
|
def hsla(hue, saturation, lightness, alpha)
|
@@ -554,40 +556,40 @@ module Sass::Script
|
|
554
556
|
s = Sass::Util.check_range('Saturation', 0..100, saturation, '%')
|
555
557
|
l = Sass::Util.check_range('Lightness', 0..100, lightness, '%')
|
556
558
|
|
557
|
-
Color.new(:hue => h, :saturation => s, :lightness => l, :alpha => alpha.value)
|
559
|
+
Sass::Script::Value::Color.new(:hue => h, :saturation => s, :lightness => l, :alpha => alpha.value)
|
558
560
|
end
|
559
561
|
declare :hsla, [:hue, :saturation, :lightness, :alpha]
|
560
562
|
|
561
563
|
# Returns the red component of a color.
|
562
564
|
#
|
563
|
-
# @param color [Color]
|
564
|
-
# @return [Number]
|
565
|
+
# @param color [Sass::Script::Value::Color]
|
566
|
+
# @return [Sass::Script::Value::Number]
|
565
567
|
# @raise [ArgumentError] If `color` isn't a color
|
566
568
|
def red(color)
|
567
569
|
assert_type color, :Color
|
568
|
-
Sass::Script::Number.new(color.red)
|
570
|
+
Sass::Script::Value::Number.new(color.red)
|
569
571
|
end
|
570
572
|
declare :red, [:color]
|
571
573
|
|
572
574
|
# Returns the green component of a color.
|
573
575
|
#
|
574
|
-
# @param color [Color]
|
575
|
-
# @return [Number]
|
576
|
+
# @param color [Sass::Script::Value::Color]
|
577
|
+
# @return [Sass::Script::Value::Number]
|
576
578
|
# @raise [ArgumentError] If `color` isn't a color
|
577
579
|
def green(color)
|
578
580
|
assert_type color, :Color
|
579
|
-
Sass::Script::Number.new(color.green)
|
581
|
+
Sass::Script::Value::Number.new(color.green)
|
580
582
|
end
|
581
583
|
declare :green, [:color]
|
582
584
|
|
583
585
|
# Returns the blue component of a color.
|
584
586
|
#
|
585
|
-
# @param color [Color]
|
586
|
-
# @return [Number]
|
587
|
+
# @param color [Sass::Script::Value::Color]
|
588
|
+
# @return [Sass::Script::Value::Number]
|
587
589
|
# @raise [ArgumentError] If `color` isn't a color
|
588
590
|
def blue(color)
|
589
591
|
assert_type color, :Color
|
590
|
-
Sass::Script::Number.new(color.blue)
|
592
|
+
Sass::Script::Value::Number.new(color.blue)
|
591
593
|
end
|
592
594
|
declare :blue, [:color]
|
593
595
|
|
@@ -597,13 +599,13 @@ module Sass::Script
|
|
597
599
|
#
|
598
600
|
# Calculated from RGB where necessary via [this algorithm](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
|
599
601
|
#
|
600
|
-
# @param color [Color]
|
601
|
-
# @return [Number] between 0deg and 360deg
|
602
|
+
# @param color [Sass::Script::Value::Color]
|
603
|
+
# @return [Sass::Script::Value::Number] between 0deg and 360deg
|
602
604
|
# @see #adjust_hue
|
603
605
|
# @raise [ArgumentError] if `color` isn't a color
|
604
606
|
def hue(color)
|
605
607
|
assert_type color, :Color
|
606
|
-
Sass::Script::Number.new(color.hue, ["deg"])
|
608
|
+
Sass::Script::Value::Number.new(color.hue, ["deg"])
|
607
609
|
end
|
608
610
|
declare :hue, [:color]
|
609
611
|
|
@@ -613,14 +615,14 @@ module Sass::Script
|
|
613
615
|
#
|
614
616
|
# Calculated from RGB where necessary via [this algorithm](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
|
615
617
|
#
|
616
|
-
# @param color [Color]
|
617
|
-
# @return [Number] between 0% and 100%
|
618
|
+
# @param color [Sass::Script::Value::Color]
|
619
|
+
# @return [Sass::Script::Value::Number] between 0% and 100%
|
618
620
|
# @see #saturate
|
619
621
|
# @see #desaturate
|
620
622
|
# @raise [ArgumentError] if `color` isn't a color
|
621
623
|
def saturation(color)
|
622
624
|
assert_type color, :Color
|
623
|
-
Sass::Script::Number.new(color.saturation, ["%"])
|
625
|
+
Sass::Script::Value::Number.new(color.saturation, ["%"])
|
624
626
|
end
|
625
627
|
declare :saturation, [:color]
|
626
628
|
|
@@ -630,14 +632,14 @@ module Sass::Script
|
|
630
632
|
#
|
631
633
|
# Calculated from RGB where necessary via [this algorithm](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
|
632
634
|
#
|
633
|
-
# @param color [Color]
|
634
|
-
# @return [Number] between 0% and 100%
|
635
|
+
# @param color [Sass::Script::Value::Color]
|
636
|
+
# @return [Sass::Script::Value::Number] between 0% and 100%
|
635
637
|
# @see #lighten
|
636
638
|
# @see #darken
|
637
639
|
# @raise [ArgumentError] if `color` isn't a color
|
638
640
|
def lightness(color)
|
639
641
|
assert_type color, :Color
|
640
|
-
Sass::Script::Number.new(color.lightness, ["%"])
|
642
|
+
Sass::Script::Value::Number.new(color.lightness, ["%"])
|
641
643
|
end
|
642
644
|
declare :lightness, [:color]
|
643
645
|
|
@@ -648,39 +650,41 @@ module Sass::Script
|
|
648
650
|
# `alpha(opacity=20)` syntax.
|
649
651
|
#
|
650
652
|
# @overload def alpha(color)
|
651
|
-
# @param color [Color]
|
652
|
-
# @return [Number]
|
653
|
+
# @param color [Sass::Script::Value::Color]
|
654
|
+
# @return [Sass::Script::Value::Number]
|
653
655
|
# @see #opacify
|
654
656
|
# @see #transparentize
|
655
657
|
# @raise [ArgumentError] If `color` isn't a color
|
656
658
|
def alpha(*args)
|
657
659
|
if args.all? do |a|
|
658
|
-
a.is_a?(Sass::Script::String) && a.type == :identifier &&
|
660
|
+
a.is_a?(Sass::Script::Value::String) && a.type == :identifier &&
|
659
661
|
a.value =~ /^[a-zA-Z]+\s*=/
|
660
662
|
end
|
661
663
|
# Support the proprietary MS alpha() function
|
662
|
-
return Sass::Script::String.new("alpha(#{args.map {|a| a.to_s}.join(", ")})")
|
664
|
+
return Sass::Script::Value::String.new("alpha(#{args.map {|a| a.to_s}.join(", ")})")
|
663
665
|
end
|
664
666
|
|
665
667
|
raise ArgumentError.new("wrong number of arguments (#{args.size} for 1)") if args.size != 1
|
666
668
|
|
667
669
|
assert_type args.first, :Color
|
668
|
-
Sass::Script::Number.new(args.first.alpha)
|
670
|
+
Sass::Script::Value::Number.new(args.first.alpha)
|
669
671
|
end
|
670
672
|
declare :alpha, [:color]
|
671
673
|
|
672
674
|
# Returns the alpha component (opacity) of a color.
|
673
675
|
# This is 1 unless otherwise specified.
|
674
676
|
#
|
675
|
-
# @param color [Color]
|
676
|
-
# @return [Number]
|
677
|
+
# @param color [Sass::Script::Value::Color]
|
678
|
+
# @return [Sass::Script::Value::Number]
|
677
679
|
# @see #opacify
|
678
680
|
# @see #transparentize
|
679
681
|
# @raise [ArgumentError] If `color` isn't a color
|
680
682
|
def opacity(color)
|
681
|
-
|
683
|
+
if color.is_a?(Sass::Script::Value::Number)
|
684
|
+
return Sass::Script::Value::String.new("opacity(#{color})")
|
685
|
+
end
|
682
686
|
assert_type color, :Color
|
683
|
-
Sass::Script::Number.new(color.alpha)
|
687
|
+
Sass::Script::Value::Number.new(color.alpha)
|
684
688
|
end
|
685
689
|
declare :opacity, [:color]
|
686
690
|
|
@@ -691,9 +695,9 @@ module Sass::Script
|
|
691
695
|
# @example
|
692
696
|
# opacify(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.6)
|
693
697
|
# opacify(rgba(0, 0, 17, 0.8), 0.2) => #001
|
694
|
-
# @param color [Color]
|
695
|
-
# @param amount [Number]
|
696
|
-
# @return [Color]
|
698
|
+
# @param color [Sass::Script::Value::Color]
|
699
|
+
# @param amount [Sass::Script::Value::Number]
|
700
|
+
# @return [Sass::Script::Value::Color]
|
697
701
|
# @see #transparentize
|
698
702
|
# @raise [ArgumentError] If `color` isn't a color,
|
699
703
|
# or `number` isn't a number between 0 and 1
|
@@ -712,9 +716,9 @@ module Sass::Script
|
|
712
716
|
# @example
|
713
717
|
# transparentize(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.4)
|
714
718
|
# transparentize(rgba(0, 0, 0, 0.8), 0.2) => rgba(0, 0, 0, 0.6)
|
715
|
-
# @param color [Color]
|
716
|
-
# @param amount [Number]
|
717
|
-
# @return [Color]
|
719
|
+
# @param color [Sass::Script::Value::Color]
|
720
|
+
# @param amount [Sass::Script::Value::Number]
|
721
|
+
# @return [Sass::Script::Value::Color]
|
718
722
|
# @see #opacify
|
719
723
|
# @raise [ArgumentError] If `color` isn't a color,
|
720
724
|
# or `number` isn't a number between 0 and 1
|
@@ -733,9 +737,9 @@ module Sass::Script
|
|
733
737
|
# @example
|
734
738
|
# lighten(hsl(0, 0%, 0%), 30%) => hsl(0, 0, 30)
|
735
739
|
# lighten(#800, 20%) => #e00
|
736
|
-
# @param color [Color]
|
737
|
-
# @param amount [Number]
|
738
|
-
# @return [Color]
|
740
|
+
# @param color [Sass::Script::Value::Color]
|
741
|
+
# @param amount [Sass::Script::Value::Number]
|
742
|
+
# @return [Sass::Script::Value::Color]
|
739
743
|
# @see #darken
|
740
744
|
# @raise [ArgumentError] If `color` isn't a color,
|
741
745
|
# or `number` isn't a number between 0% and 100%
|
@@ -751,9 +755,9 @@ module Sass::Script
|
|
751
755
|
# @example
|
752
756
|
# darken(hsl(25, 100%, 80%), 30%) => hsl(25, 100%, 50%)
|
753
757
|
# darken(#800, 20%) => #200
|
754
|
-
# @param color [Color]
|
755
|
-
# @param amount [Number]
|
756
|
-
# @return [Color]
|
758
|
+
# @param color [Sass::Script::Value::Color]
|
759
|
+
# @param amount [Sass::Script::Value::Number]
|
760
|
+
# @return [Sass::Script::Value::Color]
|
757
761
|
# @see #lighten
|
758
762
|
# @raise [ArgumentError] If `color` isn't a color,
|
759
763
|
# or `number` isn't a number between 0% and 100%
|
@@ -770,16 +774,16 @@ module Sass::Script
|
|
770
774
|
# saturate(hsl(120, 30%, 90%), 20%) => hsl(120, 50%, 90%)
|
771
775
|
# saturate(#855, 20%) => #9e3f3f
|
772
776
|
# @overload saturate(color, amount)
|
773
|
-
# @param color [Color]
|
774
|
-
# @param amount [Number]
|
775
|
-
# @return [Color]
|
777
|
+
# @param color [Sass::Script::Value::Color]
|
778
|
+
# @param amount [Sass::Script::Value::Number]
|
779
|
+
# @return [Sass::Script::Value::Color]
|
776
780
|
# @see #desaturate
|
777
781
|
# @raise [ArgumentError] If `color` isn't a color,
|
778
782
|
# or `number` isn't a number between 0% and 100%
|
779
783
|
def saturate(color, amount = nil)
|
780
784
|
# Support the filter effects definition of saturate.
|
781
785
|
# https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html
|
782
|
-
return Sass::Script::String.new("saturate(#{color})") if amount.nil?
|
786
|
+
return Sass::Script::Value::String.new("saturate(#{color})") if amount.nil?
|
783
787
|
_adjust(color, amount, :saturation, 0..100, :+, "%")
|
784
788
|
end
|
785
789
|
declare :saturate, [:color, :amount]
|
@@ -792,9 +796,9 @@ module Sass::Script
|
|
792
796
|
# @example
|
793
797
|
# desaturate(hsl(120, 30%, 90%), 20%) => hsl(120, 10%, 90%)
|
794
798
|
# desaturate(#855, 20%) => #726b6b
|
795
|
-
# @param color [Color]
|
796
|
-
# @param amount [Number]
|
797
|
-
# @return [Color]
|
799
|
+
# @param color [Sass::Script::Value::Color]
|
800
|
+
# @param amount [Sass::Script::Value::Number]
|
801
|
+
# @return [Sass::Script::Value::Color]
|
798
802
|
# @see #saturate
|
799
803
|
# @raise [ArgumentError] If `color` isn't a color,
|
800
804
|
# or `number` isn't a number between 0% and 100%
|
@@ -811,9 +815,9 @@ module Sass::Script
|
|
811
815
|
# adjust-hue(hsl(120, 30%, 90%), 60deg) => hsl(180, 30%, 90%)
|
812
816
|
# adjust-hue(hsl(120, 30%, 90%), 060deg) => hsl(60, 30%, 90%)
|
813
817
|
# adjust-hue(#811, 45deg) => #886a11
|
814
|
-
# @param color [Color]
|
815
|
-
# @param amount [Number]
|
816
|
-
# @return [Color]
|
818
|
+
# @param color [Sass::Script::Value::Color]
|
819
|
+
# @param amount [Sass::Script::Value::Number]
|
820
|
+
# @return [Sass::Script::Value::Color]
|
817
821
|
# @raise [ArgumentError] If `color` isn't a color, or `number` isn't a number
|
818
822
|
def adjust_hue(color, degrees)
|
819
823
|
assert_type color, :Color
|
@@ -829,13 +833,13 @@ module Sass::Script
|
|
829
833
|
# ie-hex-str(#abc) => #FFAABBCC
|
830
834
|
# ie-hex-str(#3322BB) => #FF3322BB
|
831
835
|
# ie-hex-str(rgba(0, 255, 0, 0.5)) => #8000FF00
|
832
|
-
# @param color [Color]
|
833
|
-
# @return [String]
|
836
|
+
# @param color [Sass::Script::Value::Color]
|
837
|
+
# @return [Sass::Script::Value::String]
|
834
838
|
# @raise [ArgumentError] If `color` isn't a color
|
835
839
|
def ie_hex_str(color)
|
836
840
|
assert_type color, :Color
|
837
841
|
alpha = (color.alpha * 255).round.to_s(16).rjust(2, '0')
|
838
|
-
Sass::Script::String.new("##{alpha}#{color.send(:hex_str)[1..-1]}".upcase)
|
842
|
+
Sass::Script::Value::String.new("##{alpha}#{color.send(:hex_str)[1..-1]}".upcase)
|
839
843
|
end
|
840
844
|
declare :ie_hex_str, [:color]
|
841
845
|
|
@@ -856,15 +860,15 @@ module Sass::Script
|
|
856
860
|
# adjust-color(#102030, $blue: 5) => #102035
|
857
861
|
# adjust-color(#102030, $red: -5, $blue: 5) => #0b2035
|
858
862
|
# adjust-color(hsl(25, 100%, 80%), $lightness: -30%, $alpha: -0.4) => hsla(25, 100%, 50%, 0.6)
|
859
|
-
# @param color [Color]
|
860
|
-
# @param red [Number]
|
861
|
-
# @param green [Number]
|
862
|
-
# @param blue [Number]
|
863
|
-
# @param hue [Number]
|
864
|
-
# @param saturation [Number]
|
865
|
-
# @param lightness [Number]
|
866
|
-
# @param alpha [Number]
|
867
|
-
# @return [Color]
|
863
|
+
# @param color [Sass::Script::Value::Color]
|
864
|
+
# @param red [Sass::Script::Value::Number]
|
865
|
+
# @param green [Sass::Script::Value::Number]
|
866
|
+
# @param blue [Sass::Script::Value::Number]
|
867
|
+
# @param hue [Sass::Script::Value::Number]
|
868
|
+
# @param saturation [Sass::Script::Value::Number]
|
869
|
+
# @param lightness [Sass::Script::Value::Number]
|
870
|
+
# @param alpha [Sass::Script::Value::Number]
|
871
|
+
# @return [Sass::Script::Value::Color]
|
868
872
|
# @raise [ArgumentError] if `color` is not a color,
|
869
873
|
# if any keyword argument is not a number,
|
870
874
|
# if any keyword argument is not in the legal range,
|
@@ -926,14 +930,14 @@ module Sass::Script
|
|
926
930
|
# scale-color(hsl(120, 70, 80), $lightness: 50%) => hsl(120, 70, 90)
|
927
931
|
# scale-color(rgb(200, 150, 170), $green: -40%, $blue: 70%) => rgb(200, 90, 229)
|
928
932
|
# scale-color(hsl(200, 70, 80), $saturation: -90%, $alpha: -30%) => hsla(200, 7, 80, 0.7)
|
929
|
-
# @param color [Color]
|
930
|
-
# @param red [Number]
|
931
|
-
# @param green [Number]
|
932
|
-
# @param blue [Number]
|
933
|
-
# @param saturation [Number]
|
934
|
-
# @param lightness [Number]
|
935
|
-
# @param alpha [Number]
|
936
|
-
# @return [Color]
|
933
|
+
# @param color [Sass::Script::Value::Color]
|
934
|
+
# @param red [Sass::Script::Value::Number]
|
935
|
+
# @param green [Sass::Script::Value::Number]
|
936
|
+
# @param blue [Sass::Script::Value::Number]
|
937
|
+
# @param saturation [Sass::Script::Value::Number]
|
938
|
+
# @param lightness [Sass::Script::Value::Number]
|
939
|
+
# @param alpha [Sass::Script::Value::Number]
|
940
|
+
# @return [Sass::Script::Value::Color]
|
937
941
|
# @raise [ArgumentError] if `color` is not a color,
|
938
942
|
# if any keyword argument is not a percentage between 0% and 100%,
|
939
943
|
# if an unexpected keyword argument is given,
|
@@ -986,15 +990,15 @@ module Sass::Script
|
|
986
990
|
# change-color(#102030, $blue: 5) => #102005
|
987
991
|
# change-color(#102030, $red: 120, $blue: 5) => #782005
|
988
992
|
# change-color(hsl(25, 100%, 80%), $lightness: 40%, $alpha: 0.8) => hsla(25, 100%, 40%, 0.8)
|
989
|
-
# @param color [Color]
|
990
|
-
# @param red [Number]
|
991
|
-
# @param green [Number]
|
992
|
-
# @param blue [Number]
|
993
|
-
# @param hue [Number]
|
994
|
-
# @param saturation [Number]
|
995
|
-
# @param lightness [Number]
|
996
|
-
# @param alpha [Number]
|
997
|
-
# @return [Color]
|
993
|
+
# @param color [Sass::Script::Value::Color]
|
994
|
+
# @param red [Sass::Script::Value::Number]
|
995
|
+
# @param green [Sass::Script::Value::Number]
|
996
|
+
# @param blue [Sass::Script::Value::Number]
|
997
|
+
# @param hue [Sass::Script::Value::Number]
|
998
|
+
# @param saturation [Sass::Script::Value::Number]
|
999
|
+
# @param lightness [Sass::Script::Value::Number]
|
1000
|
+
# @param alpha [Sass::Script::Value::Number]
|
1001
|
+
# @return [Sass::Script::Value::Color]
|
998
1002
|
# @raise [ArgumentError] if `color` is not a color,
|
999
1003
|
# if any keyword argument is not a number,
|
1000
1004
|
# if any keyword argument is not in the legal range,
|
@@ -1034,13 +1038,13 @@ module Sass::Script
|
|
1034
1038
|
# mix(#f00, #00f, 25%) => #3f00bf
|
1035
1039
|
# mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75)
|
1036
1040
|
# @overload mix(color1, color2, weight: 50%)
|
1037
|
-
# @param color1 [Color]
|
1038
|
-
# @param color2 [Color]
|
1039
|
-
# @param weight [Number] between 0% and 100%
|
1040
|
-
# @return [Color]
|
1041
|
+
# @param color1 [Sass::Script::Value::Color]
|
1042
|
+
# @param color2 [Sass::Script::Value::Color]
|
1043
|
+
# @param weight [Sass::Script::Value::Number] between 0% and 100%
|
1044
|
+
# @return [Sass::Script::Value::Color]
|
1041
1045
|
# @raise [ArgumentError] if `color1` or `color2` aren't colors,
|
1042
1046
|
# or `weight` isn't a number between 0% and 100%
|
1043
|
-
def mix(color1, color2, weight = Number.new(50))
|
1047
|
+
def mix(color1, color2, weight = Sass::Script::Value::Number.new(50))
|
1044
1048
|
assert_type color1, :Color
|
1045
1049
|
assert_type color2, :Color
|
1046
1050
|
assert_type weight, :Number
|
@@ -1075,7 +1079,7 @@ module Sass::Script
|
|
1075
1079
|
|
1076
1080
|
rgb = color1.rgb.zip(color2.rgb).map {|v1, v2| v1*w1 + v2*w2}
|
1077
1081
|
alpha = color1.alpha*p + color2.alpha*(1-p)
|
1078
|
-
Color.new(rgb + [alpha])
|
1082
|
+
Sass::Script::Value::Color.new(rgb + [alpha])
|
1079
1083
|
end
|
1080
1084
|
declare :mix, [:color_1, :color_2]
|
1081
1085
|
declare :mix, [:color_1, :color_2, :weight]
|
@@ -1083,36 +1087,40 @@ module Sass::Script
|
|
1083
1087
|
# Converts a color to grayscale.
|
1084
1088
|
# This is identical to `desaturate(color, 100%)`.
|
1085
1089
|
#
|
1086
|
-
# @param color [Color]
|
1087
|
-
# @return [Color]
|
1090
|
+
# @param color [Sass::Script::Value::Color]
|
1091
|
+
# @return [Sass::Script::Value::Color]
|
1088
1092
|
# @raise [ArgumentError] if `color` isn't a color
|
1089
1093
|
# @see #desaturate
|
1090
1094
|
def grayscale(color)
|
1091
|
-
|
1092
|
-
|
1095
|
+
if color.is_a?(Sass::Script::Value::Number)
|
1096
|
+
return Sass::Script::Value::String.new("grayscale(#{color})")
|
1097
|
+
end
|
1098
|
+
desaturate color, Sass::Script::Value::Number.new(100)
|
1093
1099
|
end
|
1094
1100
|
declare :grayscale, [:color]
|
1095
1101
|
|
1096
1102
|
# Returns the complement of a color.
|
1097
1103
|
# This is identical to `adjust-hue(color, 180deg)`.
|
1098
1104
|
#
|
1099
|
-
# @param color [Color]
|
1100
|
-
# @return [Color]
|
1105
|
+
# @param color [Sass::Script::Value::Color]
|
1106
|
+
# @return [Sass::Script::Value::Color]
|
1101
1107
|
# @raise [ArgumentError] if `color` isn't a color
|
1102
1108
|
# @see #adjust_hue #adjust-hue
|
1103
1109
|
def complement(color)
|
1104
|
-
adjust_hue color, Number.new(180)
|
1110
|
+
adjust_hue color, Sass::Script::Value::Number.new(180)
|
1105
1111
|
end
|
1106
1112
|
declare :complement, [:color]
|
1107
1113
|
|
1108
1114
|
# Returns the inverse (negative) of a color.
|
1109
1115
|
# The red, green, and blue values are inverted, while the opacity is left alone.
|
1110
1116
|
#
|
1111
|
-
# @param color [Color]
|
1112
|
-
# @return [Color]
|
1117
|
+
# @param color [Sass::Script::Value::Color]
|
1118
|
+
# @return [Sass::Script::Value::Color]
|
1113
1119
|
# @raise [ArgumentError] if `color` isn't a color
|
1114
1120
|
def invert(color)
|
1115
|
-
|
1121
|
+
if color.is_a?(Sass::Script::Value::Number)
|
1122
|
+
return Sass::Script::Value::String.new("invert(#{color})")
|
1123
|
+
end
|
1116
1124
|
|
1117
1125
|
assert_type color, :Color
|
1118
1126
|
color.with(
|
@@ -1125,16 +1133,16 @@ module Sass::Script
|
|
1125
1133
|
# Removes quotes from a string if the string is quoted,
|
1126
1134
|
# or returns the same string if it's not.
|
1127
1135
|
#
|
1128
|
-
# @param string [String]
|
1129
|
-
# @return [String]
|
1136
|
+
# @param string [Sass::Script::Value::String]
|
1137
|
+
# @return [Sass::Script::Value::String]
|
1130
1138
|
# @raise [ArgumentError] if `string` isn't a string
|
1131
1139
|
# @see #quote
|
1132
1140
|
# @example
|
1133
1141
|
# unquote("foo") => foo
|
1134
1142
|
# unquote(foo) => foo
|
1135
1143
|
def unquote(string)
|
1136
|
-
if string.is_a?(Sass::Script::String)
|
1137
|
-
Sass::Script::String.new(string.value, :identifier)
|
1144
|
+
if string.is_a?(Sass::Script::Value::String)
|
1145
|
+
Sass::Script::Value::String.new(string.value, :identifier)
|
1138
1146
|
else
|
1139
1147
|
string
|
1140
1148
|
end
|
@@ -1144,8 +1152,8 @@ module Sass::Script
|
|
1144
1152
|
# Add quotes to a string if the string isn't quoted,
|
1145
1153
|
# or returns the same string if it is.
|
1146
1154
|
#
|
1147
|
-
# @param string [String]
|
1148
|
-
# @return [String]
|
1155
|
+
# @param string [Sass::Script::Value::String]
|
1156
|
+
# @return [Sass::Script::Value::String]
|
1149
1157
|
# @raise [ArgumentError] if `string` isn't a string
|
1150
1158
|
# @see #unquote
|
1151
1159
|
# @example
|
@@ -1153,19 +1161,19 @@ module Sass::Script
|
|
1153
1161
|
# quote(foo) => "foo"
|
1154
1162
|
def quote(string)
|
1155
1163
|
assert_type string, :String
|
1156
|
-
Sass::Script::String.new(string.value, :string)
|
1164
|
+
Sass::Script::Value::String.new(string.value, :string)
|
1157
1165
|
end
|
1158
1166
|
declare :quote, [:string]
|
1159
1167
|
|
1160
1168
|
# Returns the number of characters in a string.
|
1161
1169
|
#
|
1162
|
-
# @return [Number]
|
1170
|
+
# @return [Sass::Script::Value::Number]
|
1163
1171
|
# @raise [ArgumentError] if `string` isn't a string
|
1164
1172
|
# @example
|
1165
1173
|
# str-length("foo") => 3
|
1166
1174
|
def str_length(string)
|
1167
1175
|
assert_type string, :String
|
1168
|
-
Sass::Script::Number.new(string.value.size)
|
1176
|
+
Sass::Script::Value::Number.new(string.value.size)
|
1169
1177
|
end
|
1170
1178
|
declare :str_length, [:string]
|
1171
1179
|
|
@@ -1174,13 +1182,15 @@ module Sass::Script
|
|
1174
1182
|
# Inserts the `$insert` string into the `$original` before the character at
|
1175
1183
|
# the given `$index`.
|
1176
1184
|
#
|
1177
|
-
# @param [String]
|
1178
|
-
#
|
1179
|
-
# @param [
|
1185
|
+
# @param original [Sass::Script::Value::String]
|
1186
|
+
# The string that will receive the insertion.
|
1187
|
+
# @param insert [Sass::Script::Value::String]
|
1188
|
+
# The string that will be inserted.
|
1189
|
+
# @param index [Sass::Script::Value::Number]
|
1180
1190
|
# The position where inserted string will start.
|
1181
1191
|
# Negative indices count from the end of the original string.
|
1182
1192
|
#
|
1183
|
-
# @return [String] A new string
|
1193
|
+
# @return [Sass::Script::Value::String] A new string
|
1184
1194
|
# @raise [ArgumentError] if `$original` isn't a string, `$insert` isn't a string, or `$index` isn't a number.
|
1185
1195
|
# @example
|
1186
1196
|
# str-insert("abcd", "X", 1) => "Xabcd"
|
@@ -1193,14 +1203,14 @@ module Sass::Script
|
|
1193
1203
|
assert_integer index, "index"
|
1194
1204
|
assert_unit index, nil, "index"
|
1195
1205
|
insertion_point = index.value > 0 ? [index.value - 1, original.value.size].min : [index.value, -original.value.size - 1].max
|
1196
|
-
Sass::Script::String.new(original.value.dup.insert(insertion_point, insert.value), original.type)
|
1206
|
+
Sass::Script::Value::String.new(original.value.dup.insert(insertion_point, insert.value), original.type)
|
1197
1207
|
end
|
1198
1208
|
declare :str_insert, [:original, :insert, :index]
|
1199
1209
|
|
1200
1210
|
# Starting at the left, finds the index of the first location
|
1201
1211
|
# where `substring` is found in `string`.
|
1202
1212
|
#
|
1203
|
-
# @return [Number] The index of the substring, or 0 if not found.
|
1213
|
+
# @return [Sass::Script::Value::Number] The index of the substring, or 0 if not found.
|
1204
1214
|
# @raise [ArgumentError] if `original` isn't a string, `insert` isn't a string, or `index` isn't a number.
|
1205
1215
|
# @param string The string to search
|
1206
1216
|
# @param substring The string to search for
|
@@ -1213,14 +1223,14 @@ module Sass::Script
|
|
1213
1223
|
assert_type string, :String
|
1214
1224
|
assert_type substring, :String
|
1215
1225
|
index = string.value.index(substring.value) || -1
|
1216
|
-
Sass::Script::Number.new(index + 1)
|
1226
|
+
Sass::Script::Value::Number.new(index + 1)
|
1217
1227
|
end
|
1218
1228
|
declare :str_index, [:string, :substring]
|
1219
1229
|
|
1220
1230
|
|
1221
1231
|
# Slice a substring from `string` from `start-at` index to `end-at` index.
|
1222
1232
|
#
|
1223
|
-
# @return [String] A new string
|
1233
|
+
# @return [Sass::Script::Value::String] A new string
|
1224
1234
|
# @param start_at
|
1225
1235
|
# The index (inclusive) of the first character to slice out of the string.
|
1226
1236
|
# If negative, counts from the end of the string.
|
@@ -1248,7 +1258,7 @@ module Sass::Script
|
|
1248
1258
|
assert_type string, :String
|
1249
1259
|
assert_unit start_at, nil, "start-at"
|
1250
1260
|
|
1251
|
-
end_at = Sass::Script::Number.new(-1)if end_at.nil?
|
1261
|
+
end_at = Sass::Script::Value::Number.new(-1)if end_at.nil?
|
1252
1262
|
assert_unit end_at, nil, "end-at"
|
1253
1263
|
|
1254
1264
|
s = start_at.value > 0 ? start_at.value - 1 : start_at.value
|
@@ -1258,34 +1268,34 @@ module Sass::Script
|
|
1258
1268
|
e = string.value.length + e if e < 0
|
1259
1269
|
e = 0 if s < 0
|
1260
1270
|
extracted = string.value.slice(s..e)
|
1261
|
-
Sass::Script::String.new(extracted || "", string.type)
|
1271
|
+
Sass::Script::Value::String.new(extracted || "", string.type)
|
1262
1272
|
end
|
1263
1273
|
declare :str_slice, [:string, :start_at]
|
1264
1274
|
declare :str_slice, [:string, :start_at, :end_at]
|
1265
1275
|
|
1266
1276
|
# Convert a string to upper case
|
1267
1277
|
#
|
1268
|
-
# @return [String]
|
1278
|
+
# @return [Sass::Script::Value::String]
|
1269
1279
|
# @raise [ArgumentError] if `string` isn't a string
|
1270
1280
|
# @example
|
1271
1281
|
# to-upper-case(abcd) => ABCD
|
1272
1282
|
# to-upper-case("abcd") => "ABCD"
|
1273
1283
|
def to_upper_case(string)
|
1274
1284
|
assert_type string, :String
|
1275
|
-
Sass::Script::String.new(string.value.upcase, string.type)
|
1285
|
+
Sass::Script::Value::String.new(string.value.upcase, string.type)
|
1276
1286
|
end
|
1277
1287
|
declare :to_upper_case, [:string]
|
1278
1288
|
|
1279
1289
|
# Convert a string to lower case
|
1280
1290
|
#
|
1281
|
-
# @return [String]
|
1291
|
+
# @return [Sass::Script::Value::String]
|
1282
1292
|
# @raise [ArgumentError] if `string` isn't a string
|
1283
1293
|
# @example
|
1284
1294
|
# to-lower-case(ABCD) => abcd
|
1285
1295
|
# to-lower-case("ABCD") => "abcd"
|
1286
1296
|
def to_lower_case(string)
|
1287
1297
|
assert_type string, :String
|
1288
|
-
Sass::Script::String.new(string.value.downcase, string.type)
|
1298
|
+
Sass::Script::Value::String.new(string.value.downcase, string.type)
|
1289
1299
|
end
|
1290
1300
|
declare :to_lower_case, [:string]
|
1291
1301
|
|
@@ -1298,10 +1308,10 @@ module Sass::Script
|
|
1298
1308
|
# type-of(true) => bool
|
1299
1309
|
# type-of(#fff) => color
|
1300
1310
|
# type-of(blue) => color
|
1301
|
-
# @param value [
|
1302
|
-
# @return [String] The unquoted string name of the
|
1311
|
+
# @param value [Value] The object to inspect
|
1312
|
+
# @return [Sass::Script::Value::String] The unquoted string name of the value's type
|
1303
1313
|
def type_of(value)
|
1304
|
-
Sass::Script::String.new(value.class.name.gsub(/Sass::Script::/,'').downcase)
|
1314
|
+
Sass::Script::Value::String.new(value.class.name.gsub(/Sass::Script::Value::/,'').downcase)
|
1305
1315
|
end
|
1306
1316
|
declare :type_of, [:value]
|
1307
1317
|
|
@@ -1314,12 +1324,12 @@ module Sass::Script
|
|
1314
1324
|
# unit(3em) => "em"
|
1315
1325
|
# unit(10px * 5em) => "em*px"
|
1316
1326
|
# unit(10px * 5em / 30cm / 1rem) => "em*px/cm*rem"
|
1317
|
-
# @param number [
|
1318
|
-
# @return [String] The unit(s) of the number
|
1327
|
+
# @param number [Value] The number to inspect
|
1328
|
+
# @return [Sass::Script::Value::String] The unit(s) of the number
|
1319
1329
|
# @raise [ArgumentError] if `number` isn't a number
|
1320
1330
|
def unit(number)
|
1321
1331
|
assert_type number, :Number
|
1322
|
-
Sass::Script::String.new(number.unit_str, :string)
|
1332
|
+
Sass::Script::Value::String.new(number.unit_str, :string)
|
1323
1333
|
end
|
1324
1334
|
declare :unit, [:number]
|
1325
1335
|
|
@@ -1328,12 +1338,12 @@ module Sass::Script
|
|
1328
1338
|
# @example
|
1329
1339
|
# unitless(100) => true
|
1330
1340
|
# unitless(100px) => false
|
1331
|
-
# @param number [
|
1332
|
-
# @return [Bool] Whether or not the number is unitless
|
1341
|
+
# @param number [Value] The number to inspect
|
1342
|
+
# @return [Sass::Script::Value::Bool] Whether or not the number is unitless
|
1333
1343
|
# @raise [ArgumentError] if `number` isn't a number
|
1334
1344
|
def unitless(number)
|
1335
1345
|
assert_type number, :Number
|
1336
|
-
Sass::Script::Bool.new(number.unitless?)
|
1346
|
+
Sass::Script::Value::Bool.new(number.unitless?)
|
1337
1347
|
end
|
1338
1348
|
declare :unitless, [:number]
|
1339
1349
|
|
@@ -1343,14 +1353,14 @@ module Sass::Script
|
|
1343
1353
|
# comparable(2px, 1px) => true
|
1344
1354
|
# comparable(100px, 3em) => false
|
1345
1355
|
# comparable(10cm, 3mm) => true
|
1346
|
-
# @param number_1 [Number]
|
1347
|
-
# @param number_2 [Number]
|
1348
|
-
# @return [Bool] indicating if the numbers can be compared.
|
1356
|
+
# @param number_1 [Sass::Script::Value::Number]
|
1357
|
+
# @param number_2 [Sass::Script::Value::Number]
|
1358
|
+
# @return [Sass::Script::Value::Bool] indicating if the numbers can be compared.
|
1349
1359
|
# @raise [ArgumentError] if `number_1` or `number_2` aren't numbers
|
1350
1360
|
def comparable(number_1, number_2)
|
1351
1361
|
assert_type number_1, :Number
|
1352
1362
|
assert_type number_2, :Number
|
1353
|
-
Sass::Script::Bool.new(number_1.comparable_to?(number_2))
|
1363
|
+
Sass::Script::Value::Bool.new(number_1.comparable_to?(number_2))
|
1354
1364
|
end
|
1355
1365
|
declare :comparable, [:number_1, :number_2]
|
1356
1366
|
|
@@ -1358,14 +1368,15 @@ module Sass::Script
|
|
1358
1368
|
#
|
1359
1369
|
# @example
|
1360
1370
|
# percentage(100px / 50px) => 200%
|
1361
|
-
# @param value [Number]
|
1362
|
-
#
|
1371
|
+
# @param value [Sass::Script::Value::Number]
|
1372
|
+
# The decimal number to convert to a percentage
|
1373
|
+
# @return [Sass::Script::Value::Number] The percentage
|
1363
1374
|
# @raise [ArgumentError] If `value` isn't a unitless number
|
1364
1375
|
def percentage(value)
|
1365
|
-
unless value.is_a?(Sass::Script::Number) && value.unitless?
|
1376
|
+
unless value.is_a?(Sass::Script::Value::Number) && value.unitless?
|
1366
1377
|
raise ArgumentError.new("#{value.inspect} is not a unitless number")
|
1367
1378
|
end
|
1368
|
-
Sass::Script::Number.new(value.value * 100, ['%'])
|
1379
|
+
Sass::Script::Value::Number.new(value.value * 100, ['%'])
|
1369
1380
|
end
|
1370
1381
|
declare :percentage, [:value]
|
1371
1382
|
|
@@ -1374,8 +1385,8 @@ module Sass::Script
|
|
1374
1385
|
# @example
|
1375
1386
|
# round(10.4px) => 10px
|
1376
1387
|
# round(10.6px) => 11px
|
1377
|
-
# @param value [Number] The number
|
1378
|
-
# @return [Number] The rounded number
|
1388
|
+
# @param value [Sass::Script::Value::Number] The number
|
1389
|
+
# @return [Sass::Script::Value::Number] The rounded number
|
1379
1390
|
# @raise [ArgumentError] if `value` isn't a number
|
1380
1391
|
def round(value)
|
1381
1392
|
numeric_transformation(value) {|n| n.round}
|
@@ -1387,8 +1398,8 @@ module Sass::Script
|
|
1387
1398
|
# @example
|
1388
1399
|
# ceil(10.4px) => 11px
|
1389
1400
|
# ceil(10.6px) => 11px
|
1390
|
-
# @param value [Number] The number
|
1391
|
-
# @return [Number] The rounded number
|
1401
|
+
# @param value [Sass::Script::Value::Number] The number
|
1402
|
+
# @return [Sass::Script::Value::Number] The rounded number
|
1392
1403
|
# @raise [ArgumentError] if `value` isn't a number
|
1393
1404
|
def ceil(value)
|
1394
1405
|
numeric_transformation(value) {|n| n.ceil}
|
@@ -1400,8 +1411,8 @@ module Sass::Script
|
|
1400
1411
|
# @example
|
1401
1412
|
# floor(10.4px) => 10px
|
1402
1413
|
# floor(10.6px) => 10px
|
1403
|
-
# @param value [Number] The number
|
1404
|
-
# @return [Number] The rounded number
|
1414
|
+
# @param value [Sass::Script::Value::Number] The number
|
1415
|
+
# @return [Sass::Script::Value::Number] The rounded number
|
1405
1416
|
# @raise [ArgumentError] if `value` isn't a number
|
1406
1417
|
def floor(value)
|
1407
1418
|
numeric_transformation(value) {|n| n.floor}
|
@@ -1413,8 +1424,8 @@ module Sass::Script
|
|
1413
1424
|
# @example
|
1414
1425
|
# abs(10px) => 10px
|
1415
1426
|
# abs(-10px) => 10px
|
1416
|
-
# @param value [Number] The number
|
1417
|
-
# @return [Number] The absolute value
|
1427
|
+
# @param value [Sass::Script::Value::Number] The number
|
1428
|
+
# @return [Sass::Script::Value::Number] The absolute value
|
1418
1429
|
# @raise [ArgumentError] if `value` isn't a number
|
1419
1430
|
def abs(value)
|
1420
1431
|
numeric_transformation(value) {|n| n.abs}
|
@@ -1427,8 +1438,8 @@ module Sass::Script
|
|
1427
1438
|
# @example
|
1428
1439
|
# min(1px, 4px) => 1px
|
1429
1440
|
# min(5em, 3em, 4em) => 3em
|
1430
|
-
# @param values [
|
1431
|
-
# @return [Number] The minimum value
|
1441
|
+
# @param values [Array<Sass::Script::Value::Number>] The numbers
|
1442
|
+
# @return [Sass::Script::Value::Number] The minimum value
|
1432
1443
|
# @raise [ArgumentError] if any argument isn't a number, or if not all of
|
1433
1444
|
# the arguments have comparable units
|
1434
1445
|
def min(*values)
|
@@ -1443,7 +1454,7 @@ module Sass::Script
|
|
1443
1454
|
# @example
|
1444
1455
|
# max(1px, 4px) => 4px
|
1445
1456
|
# max(5em, 3em, 4em) => 5em
|
1446
|
-
# @return [Number] The maximum value
|
1457
|
+
# @return [Sass::Script::Value::Number] The maximum value
|
1447
1458
|
# @raise [ArgumentError] if any argument isn't a number, or if not all of
|
1448
1459
|
# the arguments have comparable units
|
1449
1460
|
def max(*values)
|
@@ -1457,10 +1468,10 @@ module Sass::Script
|
|
1457
1468
|
# @example
|
1458
1469
|
# length(10px) => 1
|
1459
1470
|
# length(10px 20px 30px) => 3
|
1460
|
-
# @param list [
|
1461
|
-
# @return [Number] The length
|
1471
|
+
# @param list [Value] The list
|
1472
|
+
# @return [Sass::Script::Value::Number] The length
|
1462
1473
|
def length(list)
|
1463
|
-
Sass::Script::Number.new(list.to_a.size)
|
1474
|
+
Sass::Script::Value::Number.new(list.to_a.size)
|
1464
1475
|
end
|
1465
1476
|
declare :length, [:list]
|
1466
1477
|
|
@@ -1472,9 +1483,9 @@ module Sass::Script
|
|
1472
1483
|
# @example
|
1473
1484
|
# nth(10px 20px 30px, 1) => 10px
|
1474
1485
|
# nth((Helvetica, Arial, sans-serif), 3) => sans-serif
|
1475
|
-
# @param list [
|
1476
|
-
# @param n [Number] The index into the list
|
1477
|
-
# @return [
|
1486
|
+
# @param list [Value] The list
|
1487
|
+
# @param n [Sass::Script::Value::Number] The index into the list
|
1488
|
+
# @return [Sass::Script::Value::Base] The nth item in the list
|
1478
1489
|
# @raise [ArgumentError] If `n` isn't an integer between 1 and the list's length.
|
1479
1490
|
def nth(list, n)
|
1480
1491
|
assert_type n, :Number
|
@@ -1506,19 +1517,20 @@ module Sass::Script
|
|
1506
1517
|
# join(10px, 20px, comma) => 10px, 20px
|
1507
1518
|
# join((blue, red), (#abc, #def), space) => blue red #abc #def
|
1508
1519
|
# @overload join(list1, list2, separator: auto)
|
1509
|
-
# @param list1 [
|
1510
|
-
# @param list2 [
|
1511
|
-
# @param separator [String]
|
1512
|
-
#
|
1513
|
-
#
|
1514
|
-
|
1520
|
+
# @param list1 [Value] The first list to join
|
1521
|
+
# @param list2 [Value] The second list to join
|
1522
|
+
# @param separator [Sass::Script::Value::String]
|
1523
|
+
# How the list separator (comma or space) should be determined. If this
|
1524
|
+
# is `comma` or `space`, that is always the separator; if this is `auto`
|
1525
|
+
# (the default), the separator is determined as explained above.
|
1526
|
+
def join(list1, list2, separator = Sass::Script::Value::String.new("auto"))
|
1515
1527
|
assert_type separator, :String
|
1516
1528
|
unless %w[auto space comma].include?(separator.value)
|
1517
1529
|
raise ArgumentError.new("Separator name must be space, comma, or auto")
|
1518
1530
|
end
|
1519
|
-
sep1 = list1.separator if list1.is_a?(Sass::Script::List) && !list1.value.empty?
|
1520
|
-
sep2 = list2.separator if list2.is_a?(Sass::Script::List) && !list2.value.empty?
|
1521
|
-
Sass::Script::List.new(
|
1531
|
+
sep1 = list1.separator if list1.is_a?(Sass::Script::Value::List) && !list1.value.empty?
|
1532
|
+
sep2 = list2.separator if list2.is_a?(Sass::Script::Value::List) && !list2.value.empty?
|
1533
|
+
Sass::Script::Value::List.new(
|
1522
1534
|
list1.to_a + list2.to_a,
|
1523
1535
|
if separator.value == 'auto'
|
1524
1536
|
sep1 || sep2 || :space
|
@@ -1542,18 +1554,19 @@ module Sass::Script
|
|
1542
1554
|
# append(10px, 20px, comma) => 10px, 20px
|
1543
1555
|
# append((blue, red), green, space) => blue red green
|
1544
1556
|
# @overload append(list, val, separator: auto)
|
1545
|
-
# @param list [
|
1546
|
-
# @param val [
|
1547
|
-
# @param separator [String]
|
1548
|
-
#
|
1549
|
-
#
|
1550
|
-
|
1557
|
+
# @param list [Value] The list to add the value to
|
1558
|
+
# @param val [Value] The value to add to the end of the list
|
1559
|
+
# @param separator [Sass::Script::Value::String]
|
1560
|
+
# How the list separator (comma or space) should be determined. If this
|
1561
|
+
# is `comma` or `space`, that is always the separator; if this is `auto`
|
1562
|
+
# (the default), the separator is the same as that used by the list.
|
1563
|
+
def append(list, val, separator = Sass::Script::Value::String.new("auto"))
|
1551
1564
|
assert_type separator, :String
|
1552
1565
|
unless %w[auto space comma].include?(separator.value)
|
1553
1566
|
raise ArgumentError.new("Separator name must be space, comma, or auto")
|
1554
1567
|
end
|
1555
|
-
sep = list.separator if list.is_a?(Sass::Script::List)
|
1556
|
-
Sass::Script::List.new(
|
1568
|
+
sep = list.separator if list.is_a?(Sass::Script::Value::List)
|
1569
|
+
Sass::Script::Value::List.new(
|
1557
1570
|
list.to_a + [val],
|
1558
1571
|
if separator.value == 'auto'
|
1559
1572
|
sep || :space
|
@@ -1585,7 +1598,7 @@ module Sass::Script
|
|
1585
1598
|
value.slice!(length)
|
1586
1599
|
end
|
1587
1600
|
new_list_value = values.first.zip(*values[1..-1])
|
1588
|
-
List.new(new_list_value.map{|list| List.new(list, :space)}, :comma)
|
1601
|
+
Sass::Script::Value::List.new(new_list_value.map{|list| Sass::Script::Value::List.new(list, :space)}, :comma)
|
1589
1602
|
end
|
1590
1603
|
declare :zip, [], :var_args => true
|
1591
1604
|
|
@@ -1599,9 +1612,9 @@ module Sass::Script
|
|
1599
1612
|
def index(list, value)
|
1600
1613
|
index = list.to_a.index {|e| e.eq(value).to_bool }
|
1601
1614
|
if index
|
1602
|
-
Number.new(index + 1)
|
1615
|
+
Sass::Script::Value::Number.new(index + 1)
|
1603
1616
|
else
|
1604
|
-
Bool.new(false)
|
1617
|
+
Sass::Script::Value::Bool.new(false)
|
1605
1618
|
end
|
1606
1619
|
end
|
1607
1620
|
declare :index, [:list, :value]
|
@@ -1614,10 +1627,10 @@ module Sass::Script
|
|
1614
1627
|
# list-separator(1px, 2px, 3px) => 'comma'
|
1615
1628
|
# list-separator('foo') => 'space'
|
1616
1629
|
def list_separator(list)
|
1617
|
-
if list.is_a?(Sass::Script::List)
|
1618
|
-
String.new(list.separator.to_s)
|
1630
|
+
if list.is_a?(Sass::Script::Value::List)
|
1631
|
+
Sass::Script::Value::String.new(list.separator.to_s)
|
1619
1632
|
else
|
1620
|
-
String.new('space')
|
1633
|
+
Sass::Script::Value::String.new('space')
|
1621
1634
|
end
|
1622
1635
|
end
|
1623
1636
|
declare :separator, [:list]
|
@@ -1627,9 +1640,10 @@ module Sass::Script
|
|
1627
1640
|
# @example
|
1628
1641
|
# if(true, 1px, 2px) => 1px
|
1629
1642
|
# if(false, 1px, 2px) => 2px
|
1630
|
-
# @param condition [Bool]
|
1631
|
-
#
|
1632
|
-
# @param
|
1643
|
+
# @param condition [Sass::Script::Value::Bool]
|
1644
|
+
# Whether the first or second value will be returned.
|
1645
|
+
# @param if_true [Value] The value that will be returned if `$condition` is true.
|
1646
|
+
# @param if_false [Value] The value that will be returned if `$condition` is false.
|
1633
1647
|
def if(condition, if_true, if_false)
|
1634
1648
|
if condition.to_bool
|
1635
1649
|
if_true
|
@@ -1648,7 +1662,7 @@ module Sass::Script
|
|
1648
1662
|
# @example
|
1649
1663
|
# counter(item, ".") => counter(item,".")
|
1650
1664
|
def counter(*args)
|
1651
|
-
Sass::Script::String.new("counter(#{args.map {|a| a.to_s(options)}.join(',')})")
|
1665
|
+
Sass::Script::Value::String.new("counter(#{args.map {|a| a.to_s(options)}.join(',')})")
|
1652
1666
|
end
|
1653
1667
|
declare :counter, [], :var_args => true
|
1654
1668
|
|
@@ -1659,7 +1673,7 @@ module Sass::Script
|
|
1659
1673
|
# It yields a number to a block to perform the operation and return a number
|
1660
1674
|
def numeric_transformation(value)
|
1661
1675
|
assert_type value, :Number
|
1662
|
-
Sass::Script::Number.new(yield(value.value), value.numerator_units, value.denominator_units)
|
1676
|
+
Sass::Script::Value::Number.new(yield(value.value), value.numerator_units, value.denominator_units)
|
1663
1677
|
end
|
1664
1678
|
|
1665
1679
|
def _adjust(color, amount, attr, range, op, units = "")
|