sass 3.2.7 → 3.3.0.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.
- data/MIT-LICENSE +2 -2
- data/README.md +14 -2
- data/Rakefile +25 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass/cache_stores/base.rb +4 -2
- data/lib/sass/cache_stores/chain.rb +2 -1
- data/lib/sass/cache_stores/filesystem.rb +2 -6
- data/lib/sass/cache_stores/memory.rb +1 -1
- data/lib/sass/cache_stores/null.rb +2 -2
- data/lib/sass/callbacks.rb +1 -0
- data/lib/sass/css.rb +10 -10
- data/lib/sass/engine.rb +403 -150
- data/lib/sass/environment.rb +136 -57
- data/lib/sass/error.rb +7 -7
- data/lib/sass/exec.rb +123 -39
- data/lib/sass/features.rb +41 -0
- data/lib/sass/importers/base.rb +33 -2
- data/lib/sass/importers/deprecated_path.rb +45 -0
- data/lib/sass/importers/filesystem.rb +25 -14
- data/lib/sass/importers.rb +1 -0
- data/lib/sass/logger/base.rb +3 -3
- data/lib/sass/logger/log_level.rb +4 -6
- data/lib/sass/media.rb +19 -19
- data/lib/sass/plugin/compiler.rb +141 -101
- data/lib/sass/plugin/configuration.rb +18 -22
- data/lib/sass/plugin/merb.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +24 -8
- data/lib/sass/plugin.rb +4 -2
- data/lib/sass/repl.rb +3 -3
- data/lib/sass/script/css_lexer.rb +9 -4
- data/lib/sass/script/css_parser.rb +6 -2
- data/lib/sass/script/functions.rb +1343 -590
- data/lib/sass/script/lexer.rb +84 -52
- data/lib/sass/script/parser.rb +217 -97
- data/lib/sass/script/tree/funcall.rb +290 -0
- data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +34 -13
- data/lib/sass/script/tree/list_literal.rb +80 -0
- data/lib/sass/script/tree/literal.rb +47 -0
- data/lib/sass/script/tree/map_literal.rb +64 -0
- data/lib/sass/script/{node.rb → tree/node.rb} +22 -12
- data/lib/sass/script/{operation.rb → tree/operation.rb} +17 -25
- data/lib/sass/script/tree/selector.rb +30 -0
- data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +5 -4
- data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +14 -9
- data/lib/sass/script/tree/variable.rb +57 -0
- data/lib/sass/script/tree.rb +16 -0
- data/lib/sass/script/{arg_list.rb → value/arg_list.rb} +4 -24
- data/lib/sass/script/value/base.rb +248 -0
- data/lib/sass/script/value/bool.rb +36 -0
- data/lib/sass/script/{color.rb → value/color.rb} +239 -195
- data/lib/sass/script/value/helpers.rb +155 -0
- data/lib/sass/script/value/list.rb +119 -0
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/null.rb +45 -0
- data/lib/sass/script/{number.rb → value/number.rb} +91 -65
- data/lib/sass/script/{string.rb → value/string.rb} +9 -11
- data/lib/sass/script/value.rb +11 -0
- data/lib/sass/script.rb +35 -8
- data/lib/sass/scss/css_parser.rb +2 -1
- data/lib/sass/scss/parser.rb +338 -170
- data/lib/sass/scss/rx.rb +5 -6
- data/lib/sass/scss/script_lexer.rb +1 -0
- data/lib/sass/scss/script_parser.rb +1 -0
- data/lib/sass/scss/static_parser.rb +23 -6
- data/lib/sass/selector/abstract_sequence.rb +2 -2
- data/lib/sass/selector/comma_sequence.rb +21 -16
- data/lib/sass/selector/sequence.rb +60 -34
- data/lib/sass/selector/simple.rb +11 -12
- data/lib/sass/selector/simple_sequence.rb +55 -33
- data/lib/sass/selector.rb +52 -48
- data/lib/sass/source/map.rb +211 -0
- data/lib/sass/source/position.rb +39 -0
- data/lib/sass/source/range.rb +41 -0
- data/lib/sass/stack.rb +120 -0
- data/lib/sass/supports.rb +12 -13
- data/lib/sass/tree/at_root_node.rb +82 -0
- data/lib/sass/tree/comment_node.rb +3 -3
- data/lib/sass/tree/css_import_node.rb +11 -11
- data/lib/sass/tree/debug_node.rb +2 -2
- data/lib/sass/tree/directive_node.rb +13 -2
- data/lib/sass/tree/each_node.rb +8 -8
- data/lib/sass/tree/extend_node.rb +13 -6
- data/lib/sass/tree/for_node.rb +4 -4
- data/lib/sass/tree/function_node.rb +5 -4
- data/lib/sass/tree/if_node.rb +1 -1
- data/lib/sass/tree/import_node.rb +4 -5
- data/lib/sass/tree/media_node.rb +4 -14
- data/lib/sass/tree/mixin_def_node.rb +4 -4
- data/lib/sass/tree/mixin_node.rb +21 -8
- data/lib/sass/tree/node.rb +29 -12
- data/lib/sass/tree/prop_node.rb +38 -18
- data/lib/sass/tree/return_node.rb +3 -2
- data/lib/sass/tree/root_node.rb +19 -3
- data/lib/sass/tree/rule_node.rb +25 -17
- data/lib/sass/tree/supports_node.rb +0 -13
- data/lib/sass/tree/trace_node.rb +2 -1
- data/lib/sass/tree/variable_node.rb +9 -3
- data/lib/sass/tree/visitors/base.rb +6 -6
- data/lib/sass/tree/visitors/check_nesting.rb +12 -9
- data/lib/sass/tree/visitors/convert.rb +63 -38
- data/lib/sass/tree/visitors/cssize.rb +63 -23
- data/lib/sass/tree/visitors/deep_copy.rb +6 -5
- data/lib/sass/tree/visitors/extend.rb +7 -7
- data/lib/sass/tree/visitors/perform.rb +256 -151
- data/lib/sass/tree/visitors/set_options.rb +6 -6
- data/lib/sass/tree/visitors/to_css.rb +231 -81
- data/lib/sass/tree/warn_node.rb +2 -2
- data/lib/sass/tree/while_node.rb +2 -2
- data/lib/sass/util/multibyte_string_scanner.rb +2 -0
- data/lib/sass/util/normalized_map.rb +65 -0
- data/lib/sass/util/ordered_hash.rb +188 -0
- data/lib/sass/util/subset_map.rb +3 -2
- data/lib/sass/util/test.rb +9 -0
- data/lib/sass/util.rb +220 -34
- data/lib/sass/version.rb +9 -9
- data/lib/sass.rb +14 -7
- data/test/sass/compiler_test.rb +213 -0
- data/test/sass/conversion_test.rb +235 -9
- data/test/sass/engine_test.rb +230 -60
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +215 -147
- data/test/sass/functions_test.rb +584 -99
- data/test/sass/importer_test.rb +165 -17
- data/test/sass/plugin_test.rb +19 -13
- data/test/sass/script_conversion_test.rb +40 -0
- data/test/sass/script_test.rb +231 -21
- data/test/sass/scss/css_test.rb +14 -5
- data/test/sass/scss/scss_test.rb +1266 -66
- data/test/sass/source_map_test.rb +879 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/util/normalized_map_test.rb +30 -0
- data/test/sass/util_test.rb +90 -0
- data/test/sass/value_helpers_test.rb +181 -0
- data/test/test_helper.rb +7 -2
- metadata +316 -291
- data/lib/sass/script/bool.rb +0 -18
- data/lib/sass/script/funcall.rb +0 -231
- data/lib/sass/script/list.rb +0 -84
- data/lib/sass/script/literal.rb +0 -239
- data/lib/sass/script/null.rb +0 -34
- data/lib/sass/script/variable.rb +0 -58
- data/test/Gemfile +0 -3
- data/vendor/listen/CHANGELOG.md +0 -221
- data/vendor/listen/CONTRIBUTING.md +0 -38
- data/vendor/listen/Gemfile +0 -30
- data/vendor/listen/Guardfile +0 -8
- data/vendor/listen/LICENSE +0 -20
- data/vendor/listen/README.md +0 -315
- data/vendor/listen/Rakefile +0 -47
- data/vendor/listen/Vagrantfile +0 -96
- data/vendor/listen/lib/listen/adapter.rb +0 -214
- data/vendor/listen/lib/listen/adapters/bsd.rb +0 -112
- data/vendor/listen/lib/listen/adapters/darwin.rb +0 -85
- data/vendor/listen/lib/listen/adapters/linux.rb +0 -113
- data/vendor/listen/lib/listen/adapters/polling.rb +0 -67
- data/vendor/listen/lib/listen/adapters/windows.rb +0 -87
- data/vendor/listen/lib/listen/dependency_manager.rb +0 -126
- data/vendor/listen/lib/listen/directory_record.rb +0 -371
- data/vendor/listen/lib/listen/listener.rb +0 -225
- data/vendor/listen/lib/listen/multi_listener.rb +0 -143
- data/vendor/listen/lib/listen/turnstile.rb +0 -28
- data/vendor/listen/lib/listen/version.rb +0 -3
- data/vendor/listen/lib/listen.rb +0 -40
- data/vendor/listen/listen.gemspec +0 -22
- data/vendor/listen/spec/listen/adapter_spec.rb +0 -183
- 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/dependency_manager_spec.rb +0 -107
- data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1225
- data/vendor/listen/spec/listen/listener_spec.rb +0 -169
- data/vendor/listen/spec/listen/multi_listener_spec.rb +0 -174
- data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/vendor/listen/spec/listen_spec.rb +0 -73
- data/vendor/listen/spec/spec_helper.rb +0 -21
- data/vendor/listen/spec/support/adapter_helper.rb +0 -629
- data/vendor/listen/spec/support/directory_record_helper.rb +0 -55
- data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/vendor/listen/spec/support/listeners_helper.rb +0 -156
- data/vendor/listen/spec/support/platform_helper.rb +0 -15
data/lib/sass/supports.rb
CHANGED
|
@@ -4,7 +4,7 @@ module Sass::Supports
|
|
|
4
4
|
class Condition
|
|
5
5
|
# Runs the SassScript in the supports condition.
|
|
6
6
|
#
|
|
7
|
-
# @param
|
|
7
|
+
# @param environment [Sass::Environment] The environment in which to run the script.
|
|
8
8
|
def perform(environment); Sass::Util.abstract(self); end
|
|
9
9
|
|
|
10
10
|
# Returns the CSS for this condition.
|
|
@@ -81,12 +81,12 @@ module Sass::Supports
|
|
|
81
81
|
|
|
82
82
|
def left_parens(str)
|
|
83
83
|
return "(#{str})" if @left.is_a?(Negation)
|
|
84
|
-
|
|
84
|
+
str
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def right_parens(str)
|
|
88
88
|
return "(#{str})" if @right.is_a?(Negation) || @right.is_a?(Operator)
|
|
89
|
-
|
|
89
|
+
str
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
@@ -127,26 +127,25 @@ module Sass::Supports
|
|
|
127
127
|
|
|
128
128
|
def parens(str)
|
|
129
129
|
return "(#{str})" if @condition.is_a?(Negation) || @condition.is_a?(Operator)
|
|
130
|
-
|
|
130
|
+
str
|
|
131
131
|
end
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
# A declaration condition (e.g. `(feature: value)`).
|
|
135
135
|
class Declaration < Condition
|
|
136
|
-
# The feature name.
|
|
137
|
-
#
|
|
138
|
-
# @param [Sass::Script::Node]
|
|
136
|
+
# @return [Sass::Script::Tree::Node] The feature name.
|
|
139
137
|
attr_accessor :name
|
|
140
138
|
|
|
141
|
-
#
|
|
142
|
-
#
|
|
139
|
+
# @!attribute resolved_name
|
|
140
|
+
# The name of the feature after any SassScript has been resolved.
|
|
141
|
+
# Only set once \{Tree::Visitors::Perform} has been run.
|
|
143
142
|
#
|
|
144
|
-
#
|
|
143
|
+
# @return [String]
|
|
145
144
|
attr_accessor :resolved_name
|
|
146
145
|
|
|
147
146
|
# The feature value.
|
|
148
147
|
#
|
|
149
|
-
# @
|
|
148
|
+
# @return [Sass::Script::Tree::Node]
|
|
150
149
|
attr_accessor :value
|
|
151
150
|
|
|
152
151
|
# The value of the feature after any SassScript has been resolved.
|
|
@@ -190,7 +189,7 @@ module Sass::Supports
|
|
|
190
189
|
class Interpolation < Condition
|
|
191
190
|
# The SassScript expression in the interpolation.
|
|
192
191
|
#
|
|
193
|
-
# @
|
|
192
|
+
# @return [Sass::Script::Tree::Node]
|
|
194
193
|
attr_accessor :value
|
|
195
194
|
|
|
196
195
|
# The value of the expression after it's been resolved.
|
|
@@ -205,7 +204,7 @@ module Sass::Supports
|
|
|
205
204
|
|
|
206
205
|
def perform(env)
|
|
207
206
|
val = value.perform(env)
|
|
208
|
-
@resolved_value = val.is_a?(Sass::Script::String) ? val.value : val.to_s
|
|
207
|
+
@resolved_value = val.is_a?(Sass::Script::Value::String) ? val.value : val.to_s
|
|
209
208
|
end
|
|
210
209
|
|
|
211
210
|
def to_css
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
module Sass
|
|
2
|
+
module Tree
|
|
3
|
+
# A dynamic node representing an `@at-root` directive.
|
|
4
|
+
#
|
|
5
|
+
# An `@at-root` directive with a selector is converted to an \{AtRootNode}
|
|
6
|
+
# containing a \{RuleNode} at parse time.
|
|
7
|
+
#
|
|
8
|
+
# @see Sass::Tree
|
|
9
|
+
class AtRootNode < Node
|
|
10
|
+
# The query for this node (e.g. `(without: media)`),
|
|
11
|
+
# interspersed with {Sass::Script::Tree::Node}s representing
|
|
12
|
+
# `#{}`-interpolation. Any adjacent strings will be merged
|
|
13
|
+
# together.
|
|
14
|
+
#
|
|
15
|
+
# This will be nil if the directive didn't have a query. In this
|
|
16
|
+
# case, {#resolved\_type} will automatically be set to
|
|
17
|
+
# `:without` and {#resolved\_rule} will automatically be set to `["rule"]`.
|
|
18
|
+
#
|
|
19
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
|
20
|
+
attr_accessor :query
|
|
21
|
+
|
|
22
|
+
# The resolved type of this directive. `:with` or `:without`.
|
|
23
|
+
#
|
|
24
|
+
# @return [Symbol]
|
|
25
|
+
attr_accessor :resolved_type
|
|
26
|
+
|
|
27
|
+
# The resolved value of this directive -- a list of directives
|
|
28
|
+
# to either include or exclude.
|
|
29
|
+
#
|
|
30
|
+
# @return [Array<String>]
|
|
31
|
+
attr_accessor :resolved_value
|
|
32
|
+
|
|
33
|
+
# The number of additional tabs that the contents of this node
|
|
34
|
+
# should be indented.
|
|
35
|
+
#
|
|
36
|
+
# @return [Number]
|
|
37
|
+
attr_accessor :tabs
|
|
38
|
+
|
|
39
|
+
# Whether the last child of this node should be considered the
|
|
40
|
+
# end of a group.
|
|
41
|
+
#
|
|
42
|
+
# @return [Boolean]
|
|
43
|
+
attr_accessor :group_end
|
|
44
|
+
|
|
45
|
+
def initialize(query = nil)
|
|
46
|
+
super()
|
|
47
|
+
@query = Sass::Util.strip_string_array(Sass::Util.merge_adjacent_strings(query)) if query
|
|
48
|
+
@tabs = 0
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Returns whether or not the given directive is excluded by this
|
|
52
|
+
# node. `directive` may be "rule", which indicates whether
|
|
53
|
+
# normal CSS rules should be excluded.
|
|
54
|
+
#
|
|
55
|
+
# @param directive [String]
|
|
56
|
+
# @return [Boolean]
|
|
57
|
+
def exclude?(directive)
|
|
58
|
+
if resolved_type == :with
|
|
59
|
+
return false if resolved_value.include?('all')
|
|
60
|
+
!resolved_value.include?(directive)
|
|
61
|
+
else # resolved_type == :without
|
|
62
|
+
return true if resolved_value.include?('all')
|
|
63
|
+
resolved_value.include?(directive)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Returns whether the given node is excluded by this node.
|
|
68
|
+
#
|
|
69
|
+
# @param node [Sass::Tree::Node]
|
|
70
|
+
# @return [Boolean]
|
|
71
|
+
def exclude_node?(node)
|
|
72
|
+
return exclude?(node.name.gsub(/^@/, '')) if node.is_a?(Sass::Tree::DirectiveNode)
|
|
73
|
+
exclude?(node.class.to_s.gsub(/.*::(.*)Node$/, '\1').downcase)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# @see Node#bubbles?
|
|
77
|
+
def bubbles?
|
|
78
|
+
true
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -6,10 +6,10 @@ module Sass::Tree
|
|
|
6
6
|
# @see Sass::Tree
|
|
7
7
|
class CommentNode < Node
|
|
8
8
|
# The text of the comment, not including `/*` and `*/`.
|
|
9
|
-
# Interspersed with {Sass::Script::Node}s representing `#{}`-interpolation
|
|
9
|
+
# Interspersed with {Sass::Script::Tree::Node}s representing `#{}`-interpolation
|
|
10
10
|
# if this is a loud comment.
|
|
11
11
|
#
|
|
12
|
-
# @return [Array<String, Sass::Script::Node>]
|
|
12
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
|
13
13
|
attr_accessor :value
|
|
14
14
|
|
|
15
15
|
# The text of the comment
|
|
@@ -26,7 +26,7 @@ module Sass::Tree
|
|
|
26
26
|
# @return [Symbol]
|
|
27
27
|
attr_accessor :type
|
|
28
28
|
|
|
29
|
-
# @param value [Array<String, Sass::Script::Node>] See \{#value}
|
|
29
|
+
# @param value [Array<String, Sass::Script::Tree::Node>] See \{#value}
|
|
30
30
|
# @param type [Symbol] See \{#type}
|
|
31
31
|
def initialize(value, type)
|
|
32
32
|
@value = Sass::Util.with_extracted_values(value) {|str| normalize_indentation str}
|
|
@@ -6,31 +6,31 @@ module Sass::Tree
|
|
|
6
6
|
# The URI being imported, either as a plain string or an interpolated
|
|
7
7
|
# script string.
|
|
8
8
|
#
|
|
9
|
-
# @return [String, Sass::Script::Node]
|
|
9
|
+
# @return [String, Sass::Script::Tree::Node]
|
|
10
10
|
attr_accessor :uri
|
|
11
11
|
|
|
12
12
|
# The text of the URI being imported after any interpolated SassScript has
|
|
13
|
-
# been resolved. Only set once
|
|
13
|
+
# been resolved. Only set once {Tree::Visitors::Perform} has been run.
|
|
14
14
|
#
|
|
15
15
|
# @return [String]
|
|
16
16
|
attr_accessor :resolved_uri
|
|
17
17
|
|
|
18
|
-
# The media query for this rule, interspersed with
|
|
19
|
-
# representing `#{}`-interpolation. Any adjacent
|
|
20
|
-
# together.
|
|
18
|
+
# The media query for this rule, interspersed with
|
|
19
|
+
# {Sass::Script::Tree::Node}s representing `#{}`-interpolation. Any adjacent
|
|
20
|
+
# strings will be merged together.
|
|
21
21
|
#
|
|
22
|
-
# @return [Array<String, Sass::Script::Node>]
|
|
22
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
|
23
23
|
attr_accessor :query
|
|
24
24
|
|
|
25
|
-
# The media query for this rule, without any unresolved interpolation.
|
|
26
|
-
# only set once {Tree::
|
|
25
|
+
# The media query for this rule, without any unresolved interpolation.
|
|
26
|
+
# It's only set once {Tree::Visitors::Perform} has been run.
|
|
27
27
|
#
|
|
28
28
|
# @return [Sass::Media::QueryList]
|
|
29
29
|
attr_accessor :resolved_query
|
|
30
30
|
|
|
31
|
-
# @param uri [String, Sass::Script::Node] See \{#uri}
|
|
32
|
-
# @param query [Array<String, Sass::Script::Node>] See \{#query}
|
|
33
|
-
def initialize(uri, query =
|
|
31
|
+
# @param uri [String, Sass::Script::Tree::Node] See \{#uri}
|
|
32
|
+
# @param query [Array<String, Sass::Script::Tree::Node>] See \{#query}
|
|
33
|
+
def initialize(uri, query = [])
|
|
34
34
|
@uri = uri
|
|
35
35
|
@query = query
|
|
36
36
|
super('')
|
data/lib/sass/tree/debug_node.rb
CHANGED
|
@@ -5,10 +5,10 @@ module Sass
|
|
|
5
5
|
# @see Sass::Tree
|
|
6
6
|
class DebugNode < Node
|
|
7
7
|
# The expression to print.
|
|
8
|
-
# @return [Script::Node]
|
|
8
|
+
# @return [Script::Tree::Node]
|
|
9
9
|
attr_accessor :expr
|
|
10
10
|
|
|
11
|
-
# @param expr [Script::Node] The expression to print
|
|
11
|
+
# @param expr [Script::Tree::Node] The expression to print
|
|
12
12
|
def initialize(expr)
|
|
13
13
|
@expr = expr
|
|
14
14
|
super()
|
|
@@ -11,7 +11,7 @@ module Sass::Tree
|
|
|
11
11
|
class DirectiveNode < Node
|
|
12
12
|
# The text of the directive, `@` and all, with interpolation included.
|
|
13
13
|
#
|
|
14
|
-
# @return [Array<String, Sass::Script::Node>]
|
|
14
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
|
15
15
|
attr_accessor :value
|
|
16
16
|
|
|
17
17
|
# The text of the directive after any interpolated SassScript has been resolved.
|
|
@@ -20,9 +20,16 @@ module Sass::Tree
|
|
|
20
20
|
# @return [String]
|
|
21
21
|
attr_accessor :resolved_value
|
|
22
22
|
|
|
23
|
-
# @
|
|
23
|
+
# @see RuleNode#tabs
|
|
24
|
+
attr_accessor :tabs
|
|
25
|
+
|
|
26
|
+
# @see RuleNode#group_end
|
|
27
|
+
attr_accessor :group_end
|
|
28
|
+
|
|
29
|
+
# @param value [Array<String, Sass::Script::Tree::Node>] See \{#value}
|
|
24
30
|
def initialize(value)
|
|
25
31
|
@value = value
|
|
32
|
+
@tabs = 0
|
|
26
33
|
super()
|
|
27
34
|
end
|
|
28
35
|
|
|
@@ -38,5 +45,9 @@ module Sass::Tree
|
|
|
38
45
|
def name
|
|
39
46
|
value.first.gsub(/ .*$/, '')
|
|
40
47
|
end
|
|
48
|
+
|
|
49
|
+
def bubbles?
|
|
50
|
+
has_children
|
|
51
|
+
end
|
|
41
52
|
end
|
|
42
53
|
end
|
data/lib/sass/tree/each_node.rb
CHANGED
|
@@ -5,18 +5,18 @@ module Sass::Tree
|
|
|
5
5
|
#
|
|
6
6
|
# @see Sass::Tree
|
|
7
7
|
class EachNode < Node
|
|
8
|
-
# The
|
|
9
|
-
# @return [String]
|
|
10
|
-
attr_reader :
|
|
8
|
+
# The names of the loop variables.
|
|
9
|
+
# @return [Array<String>]
|
|
10
|
+
attr_reader :vars
|
|
11
11
|
|
|
12
12
|
# The parse tree for the list.
|
|
13
|
-
# @
|
|
13
|
+
# @return [Script::Tree::Node]
|
|
14
14
|
attr_accessor :list
|
|
15
15
|
|
|
16
|
-
# @param
|
|
17
|
-
# @param list [Script::Node] The parse tree for the list
|
|
18
|
-
def initialize(
|
|
19
|
-
@
|
|
16
|
+
# @param vars [Array<String>] The names of the loop variables
|
|
17
|
+
# @param list [Script::Tree::Node] The parse tree for the list
|
|
18
|
+
def initialize(vars, list)
|
|
19
|
+
@vars = vars
|
|
20
20
|
@list = list
|
|
21
21
|
super()
|
|
22
22
|
end
|
|
@@ -11,25 +11,32 @@ module Sass::Tree
|
|
|
11
11
|
# @return [Selector::CommaSequence]
|
|
12
12
|
attr_accessor :resolved_selector
|
|
13
13
|
|
|
14
|
-
# The CSS selector to extend, interspersed with {Sass::Script::Node}s
|
|
14
|
+
# The CSS selector to extend, interspersed with {Sass::Script::Tree::Node}s
|
|
15
15
|
# representing `#{}`-interpolation.
|
|
16
16
|
#
|
|
17
|
-
# @return [Array<String, Sass::Script::Node>]
|
|
17
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
|
18
18
|
attr_accessor :selector
|
|
19
19
|
|
|
20
|
+
# The extended selector source range.
|
|
21
|
+
#
|
|
22
|
+
# @return [Sass::Source::Range]
|
|
23
|
+
attr_accessor :selector_source_range
|
|
24
|
+
|
|
20
25
|
# Whether the `@extend` is allowed to match no selectors or not.
|
|
21
26
|
#
|
|
22
27
|
# @return [Boolean]
|
|
23
28
|
def optional?; @optional; end
|
|
24
29
|
|
|
25
|
-
# @param selector [Array<String, Sass::Script::Node>]
|
|
30
|
+
# @param selector [Array<String, Sass::Script::Tree::Node>]
|
|
26
31
|
# The CSS selector to extend,
|
|
27
|
-
# interspersed with {Sass::Script::Node}s
|
|
32
|
+
# interspersed with {Sass::Script::Tree::Node}s
|
|
28
33
|
# representing `#{}`-interpolation.
|
|
29
|
-
# @param optional [Boolean] See \{#optional}
|
|
30
|
-
|
|
34
|
+
# @param optional [Boolean] See \{ExtendNode#optional?}
|
|
35
|
+
# @param selector_source_range [Sass::Source::Range] The extended selector source range.
|
|
36
|
+
def initialize(selector, optional, selector_source_range)
|
|
31
37
|
@selector = selector
|
|
32
38
|
@optional = optional
|
|
39
|
+
@selector_source_range = selector_source_range
|
|
33
40
|
super()
|
|
34
41
|
end
|
|
35
42
|
end
|
data/lib/sass/tree/for_node.rb
CHANGED
|
@@ -10,11 +10,11 @@ module Sass::Tree
|
|
|
10
10
|
attr_reader :var
|
|
11
11
|
|
|
12
12
|
# The parse tree for the initial expression.
|
|
13
|
-
# @return [Script::Node]
|
|
13
|
+
# @return [Script::Tree::Node]
|
|
14
14
|
attr_accessor :from
|
|
15
15
|
|
|
16
16
|
# The parse tree for the final expression.
|
|
17
|
-
# @return [Script::Node]
|
|
17
|
+
# @return [Script::Tree::Node]
|
|
18
18
|
attr_accessor :to
|
|
19
19
|
|
|
20
20
|
# Whether to include `to` in the loop or stop just before.
|
|
@@ -22,8 +22,8 @@ module Sass::Tree
|
|
|
22
22
|
attr_reader :exclusive
|
|
23
23
|
|
|
24
24
|
# @param var [String] See \{#var}
|
|
25
|
-
# @param from [Script::Node] See \{#from}
|
|
26
|
-
# @param to [Script::Node] See \{#to}
|
|
25
|
+
# @param from [Script::Tree::Node] See \{#from}
|
|
26
|
+
# @param to [Script::Tree::Node] See \{#to}
|
|
27
27
|
# @param exclusive [Boolean] See \{#exclusive}
|
|
28
28
|
def initialize(var, from, to, exclusive)
|
|
29
29
|
@var = var
|
|
@@ -12,17 +12,18 @@ module Sass
|
|
|
12
12
|
# containing the variable for argument and the parse tree for
|
|
13
13
|
# the default value of the argument
|
|
14
14
|
#
|
|
15
|
-
# @return [Array<Script::Node>]
|
|
15
|
+
# @return [Array<Script::Tree::Node>]
|
|
16
16
|
attr_accessor :args
|
|
17
17
|
|
|
18
18
|
# The splat argument for this function, if one exists.
|
|
19
19
|
#
|
|
20
|
-
# @return [Script::Node?]
|
|
20
|
+
# @return [Script::Tree::Node?]
|
|
21
21
|
attr_accessor :splat
|
|
22
22
|
|
|
23
23
|
# @param name [String] The function name
|
|
24
|
-
# @param args [Array<(Script::Node, Script::Node)>]
|
|
25
|
-
#
|
|
24
|
+
# @param args [Array<(Script::Tree::Node, Script::Tree::Node)>]
|
|
25
|
+
# The arguments for the function.
|
|
26
|
+
# @param splat [Script::Tree::Node] See \{#splat}
|
|
26
27
|
def initialize(name, args, splat)
|
|
27
28
|
@name = name
|
|
28
29
|
@args = args
|
data/lib/sass/tree/if_node.rb
CHANGED
|
@@ -51,9 +51,8 @@ module Sass
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
paths.each do |p|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
end
|
|
54
|
+
f = p.find(@imported_filename, options_for_importer)
|
|
55
|
+
return f if f
|
|
57
56
|
end
|
|
58
57
|
|
|
59
58
|
message = "File to import not found or unreadable: #{@imported_filename}.\n"
|
|
@@ -64,11 +63,11 @@ module Sass
|
|
|
64
63
|
end
|
|
65
64
|
raise SyntaxError.new(message)
|
|
66
65
|
rescue SyntaxError => e
|
|
67
|
-
raise SyntaxError.new(e.message, :line =>
|
|
66
|
+
raise SyntaxError.new(e.message, :line => line, :filename => @filename)
|
|
68
67
|
end
|
|
69
68
|
|
|
70
69
|
def options_for_importer
|
|
71
|
-
@options.merge(:
|
|
70
|
+
@options.merge(:_from_import_node => true)
|
|
72
71
|
end
|
|
73
72
|
end
|
|
74
73
|
end
|
data/lib/sass/tree/media_node.rb
CHANGED
|
@@ -8,29 +8,22 @@ module Sass::Tree
|
|
|
8
8
|
class MediaNode < DirectiveNode
|
|
9
9
|
# TODO: parse and cache the query immediately if it has no dynamic elements
|
|
10
10
|
|
|
11
|
-
# The media query for this rule, interspersed with {Sass::Script::Node}s
|
|
11
|
+
# The media query for this rule, interspersed with {Sass::Script::Tree::Node}s
|
|
12
12
|
# representing `#{}`-interpolation. Any adjacent strings will be merged
|
|
13
13
|
# together.
|
|
14
14
|
#
|
|
15
|
-
# @return [Array<String, Sass::Script::Node>]
|
|
15
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
|
16
16
|
attr_accessor :query
|
|
17
17
|
|
|
18
18
|
# The media query for this rule, without any unresolved interpolation. It's
|
|
19
|
-
# only set once {Tree::
|
|
19
|
+
# only set once {Tree::Visitors::Perform} has been run.
|
|
20
20
|
#
|
|
21
21
|
# @return [Sass::Media::QueryList]
|
|
22
22
|
attr_accessor :resolved_query
|
|
23
23
|
|
|
24
|
-
# @
|
|
25
|
-
attr_accessor :tabs
|
|
26
|
-
|
|
27
|
-
# @see RuleNode#group_end
|
|
28
|
-
attr_accessor :group_end
|
|
29
|
-
|
|
30
|
-
# @param query [Array<String, Sass::Script::Node>] See \{#query}
|
|
24
|
+
# @param query [Array<String, Sass::Script::Tree::Node>] See \{#query}
|
|
31
25
|
def initialize(query)
|
|
32
26
|
@query = query
|
|
33
|
-
@tabs = 0
|
|
34
27
|
super('')
|
|
35
28
|
end
|
|
36
29
|
|
|
@@ -51,8 +44,5 @@ module Sass::Tree
|
|
|
51
44
|
def invisible?
|
|
52
45
|
children.all? {|c| c.invisible?}
|
|
53
46
|
end
|
|
54
|
-
|
|
55
|
-
# @see Node#bubbles?
|
|
56
|
-
def bubbles?; true; end
|
|
57
47
|
end
|
|
58
48
|
end
|
|
@@ -12,12 +12,12 @@ module Sass
|
|
|
12
12
|
# Each element is a tuple containing the variable for argument
|
|
13
13
|
# and the parse tree for the default value of the argument.
|
|
14
14
|
#
|
|
15
|
-
# @return [Array<(Script::Node, Script::Node)>]
|
|
15
|
+
# @return [Array<(Script::Tree::Node, Script::Tree::Node)>]
|
|
16
16
|
attr_accessor :args
|
|
17
17
|
|
|
18
18
|
# The splat argument for this mixin, if one exists.
|
|
19
19
|
#
|
|
20
|
-
# @return [Script::Node?]
|
|
20
|
+
# @return [Script::Tree::Node?]
|
|
21
21
|
attr_accessor :splat
|
|
22
22
|
|
|
23
23
|
# Whether the mixin uses `@content`. Set during the nesting check phase.
|
|
@@ -25,8 +25,8 @@ module Sass
|
|
|
25
25
|
attr_accessor :has_content
|
|
26
26
|
|
|
27
27
|
# @param name [String] The mixin name
|
|
28
|
-
# @param args [Array<(Script::Node, Script::Node)>] See \{#args}
|
|
29
|
-
# @param splat [Script::Node] See \{#splat}
|
|
28
|
+
# @param args [Array<(Script::Tree::Node, Script::Tree::Node)>] See \{#args}
|
|
29
|
+
# @param splat [Script::Tree::Node] See \{#splat}
|
|
30
30
|
def initialize(name, args, splat)
|
|
31
31
|
@name = name
|
|
32
32
|
@args = args
|
data/lib/sass/tree/mixin_node.rb
CHANGED
|
@@ -12,27 +12,40 @@ module Sass::Tree
|
|
|
12
12
|
attr_reader :name
|
|
13
13
|
|
|
14
14
|
# The arguments to the mixin.
|
|
15
|
-
# @return [Array<Script::Node>]
|
|
15
|
+
# @return [Array<Script::Tree::Node>]
|
|
16
16
|
attr_accessor :args
|
|
17
17
|
|
|
18
18
|
# A hash from keyword argument names to values.
|
|
19
|
-
# @return [{String => Script::Node}]
|
|
19
|
+
# @return [{String => Script::Tree::Node}]
|
|
20
20
|
attr_accessor :keywords
|
|
21
21
|
|
|
22
|
-
# The splat argument for this mixin, if one exists.
|
|
22
|
+
# The first splat argument for this mixin, if one exists.
|
|
23
23
|
#
|
|
24
|
-
#
|
|
24
|
+
# This could be a list of positional arguments, a map of keyword
|
|
25
|
+
# arguments, or an arglist containing both.
|
|
26
|
+
#
|
|
27
|
+
# @return [Node?]
|
|
25
28
|
attr_accessor :splat
|
|
26
29
|
|
|
30
|
+
# The second splat argument for this mixin, if one exists.
|
|
31
|
+
#
|
|
32
|
+
# If this exists, it's always a map of keyword arguments, and
|
|
33
|
+
# \{#splat} is always either a list or an arglist.
|
|
34
|
+
#
|
|
35
|
+
# @return [Node?]
|
|
36
|
+
attr_accessor :kwarg_splat
|
|
37
|
+
|
|
27
38
|
# @param name [String] The name of the mixin
|
|
28
|
-
# @param args [Array<Script::Node>] See \{#args}
|
|
29
|
-
# @param splat [Script::Node] See \{#splat}
|
|
30
|
-
# @param
|
|
31
|
-
|
|
39
|
+
# @param args [Array<Script::Tree::Node>] See \{#args}
|
|
40
|
+
# @param splat [Script::Tree::Node] See \{#splat}
|
|
41
|
+
# @param kwarg_splat [Script::Tree::Node] See \{#kwarg_splat}
|
|
42
|
+
# @param keywords [{String => Script::Tree::Node}] See \{#keywords}
|
|
43
|
+
def initialize(name, args, keywords, splat, kwarg_splat)
|
|
32
44
|
@name = name
|
|
33
45
|
@args = args
|
|
34
46
|
@keywords = keywords
|
|
35
47
|
@splat = splat
|
|
48
|
+
@kwarg_splat = kwarg_splat
|
|
36
49
|
super()
|
|
37
50
|
end
|
|
38
51
|
end
|
data/lib/sass/tree/node.rb
CHANGED
|
@@ -8,14 +8,15 @@ module Sass
|
|
|
8
8
|
# in addition to nodes for CSS rules and properties.
|
|
9
9
|
# Nodes that only appear in this state are called **dynamic nodes**.
|
|
10
10
|
#
|
|
11
|
-
# {Tree::Visitors::Perform} creates a static Sass tree, which is
|
|
12
|
-
# It still has nodes for CSS rules and properties
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
11
|
+
# {Tree::Visitors::Perform} creates a static Sass tree, which is
|
|
12
|
+
# different. It still has nodes for CSS rules and properties but it
|
|
13
|
+
# doesn't have any dynamic-generation-related nodes. The nodes in
|
|
14
|
+
# this state are in a similar structure to the Sass document: rules
|
|
15
|
+
# and properties are nested beneath one another, although the
|
|
16
|
+
# {Tree::RuleNode} selectors are already in their final state. Nodes
|
|
17
|
+
# that can be in this state or in the dynamic state are called
|
|
18
|
+
# **static nodes**; nodes that can only be in this state are called
|
|
19
|
+
# **solely static nodes**.
|
|
19
20
|
#
|
|
20
21
|
# {Tree::Visitors::Cssize} is then used to create a static CSS tree.
|
|
21
22
|
# This is like a static Sass tree,
|
|
@@ -32,7 +33,7 @@ module Sass
|
|
|
32
33
|
# The child nodes of this node.
|
|
33
34
|
#
|
|
34
35
|
# @return [Array<Tree::Node>]
|
|
35
|
-
|
|
36
|
+
attr_reader :children
|
|
36
37
|
|
|
37
38
|
# Whether or not this node has child nodes.
|
|
38
39
|
# This may be true even when \{#children} is empty,
|
|
@@ -46,6 +47,11 @@ module Sass
|
|
|
46
47
|
# @return [Fixnum]
|
|
47
48
|
attr_accessor :line
|
|
48
49
|
|
|
50
|
+
# The source range in the document on which this node appeared.
|
|
51
|
+
#
|
|
52
|
+
# @return [Sass::Source::Range]
|
|
53
|
+
attr_accessor :source_range
|
|
54
|
+
|
|
49
55
|
# The name of the document on which this node appeared.
|
|
50
56
|
#
|
|
51
57
|
# @return [String]
|
|
@@ -127,10 +133,21 @@ module Sass
|
|
|
127
133
|
|
|
128
134
|
# Computes the CSS corresponding to this static CSS tree.
|
|
129
135
|
#
|
|
130
|
-
# @return [String
|
|
136
|
+
# @return [String] The resulting CSS
|
|
137
|
+
# @see Sass::Tree
|
|
138
|
+
def css
|
|
139
|
+
Sass::Tree::Visitors::ToCss.new.visit(self)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Computes the CSS corresponding to this static CSS tree, along with
|
|
143
|
+
# the respective source map.
|
|
144
|
+
#
|
|
145
|
+
# @return [(String, Sass::Source::Map)] The resulting CSS and the source map
|
|
131
146
|
# @see Sass::Tree
|
|
132
|
-
def
|
|
133
|
-
Sass::Tree::Visitors::ToCss.
|
|
147
|
+
def css_with_sourcemap
|
|
148
|
+
visitor = Sass::Tree::Visitors::ToCss.new(:build_source_mapping)
|
|
149
|
+
result = visitor.visit(self)
|
|
150
|
+
return result, visitor.source_mapping
|
|
134
151
|
end
|
|
135
152
|
|
|
136
153
|
# Returns a representation of the node for debugging purposes.
|