oreorenasass 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +11 -0
- data/CONTRIBUTING +3 -0
- data/MIT-LICENSE +20 -0
- data/README.md +221 -0
- data/Rakefile +370 -0
- data/VERSION +1 -0
- data/VERSION_NAME +1 -0
- data/bin/sass +13 -0
- data/bin/sass-convert +12 -0
- data/bin/scss +13 -0
- data/extra/update_watch.rb +13 -0
- data/init.rb +18 -0
- data/lib/sass/cache_stores/base.rb +88 -0
- data/lib/sass/cache_stores/chain.rb +34 -0
- data/lib/sass/cache_stores/filesystem.rb +60 -0
- data/lib/sass/cache_stores/memory.rb +47 -0
- data/lib/sass/cache_stores/null.rb +25 -0
- data/lib/sass/cache_stores.rb +15 -0
- data/lib/sass/callbacks.rb +67 -0
- data/lib/sass/css.rb +407 -0
- data/lib/sass/engine.rb +1181 -0
- data/lib/sass/environment.rb +191 -0
- data/lib/sass/error.rb +198 -0
- data/lib/sass/exec/base.rb +187 -0
- data/lib/sass/exec/sass_convert.rb +264 -0
- data/lib/sass/exec/sass_scss.rb +424 -0
- data/lib/sass/exec.rb +9 -0
- data/lib/sass/features.rb +47 -0
- data/lib/sass/importers/base.rb +182 -0
- data/lib/sass/importers/filesystem.rb +211 -0
- data/lib/sass/importers.rb +22 -0
- data/lib/sass/logger/base.rb +30 -0
- data/lib/sass/logger/log_level.rb +45 -0
- data/lib/sass/logger.rb +12 -0
- data/lib/sass/media.rb +210 -0
- data/lib/sass/plugin/compiler.rb +565 -0
- data/lib/sass/plugin/configuration.rb +118 -0
- data/lib/sass/plugin/generic.rb +15 -0
- data/lib/sass/plugin/merb.rb +48 -0
- data/lib/sass/plugin/rack.rb +60 -0
- data/lib/sass/plugin/rails.rb +47 -0
- data/lib/sass/plugin/staleness_checker.rb +199 -0
- data/lib/sass/plugin.rb +133 -0
- data/lib/sass/railtie.rb +10 -0
- data/lib/sass/repl.rb +57 -0
- data/lib/sass/root.rb +7 -0
- data/lib/sass/script/css_lexer.rb +33 -0
- data/lib/sass/script/css_parser.rb +34 -0
- data/lib/sass/script/functions.rb +2626 -0
- data/lib/sass/script/lexer.rb +449 -0
- data/lib/sass/script/parser.rb +637 -0
- data/lib/sass/script/tree/funcall.rb +306 -0
- data/lib/sass/script/tree/interpolation.rb +118 -0
- data/lib/sass/script/tree/list_literal.rb +77 -0
- data/lib/sass/script/tree/literal.rb +45 -0
- data/lib/sass/script/tree/map_literal.rb +64 -0
- data/lib/sass/script/tree/node.rb +109 -0
- data/lib/sass/script/tree/operation.rb +103 -0
- data/lib/sass/script/tree/selector.rb +26 -0
- data/lib/sass/script/tree/string_interpolation.rb +104 -0
- data/lib/sass/script/tree/unary_operation.rb +69 -0
- data/lib/sass/script/tree/variable.rb +57 -0
- data/lib/sass/script/tree.rb +16 -0
- data/lib/sass/script/value/arg_list.rb +36 -0
- data/lib/sass/script/value/base.rb +240 -0
- data/lib/sass/script/value/bool.rb +35 -0
- data/lib/sass/script/value/color.rb +680 -0
- data/lib/sass/script/value/helpers.rb +262 -0
- data/lib/sass/script/value/list.rb +113 -0
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/null.rb +44 -0
- data/lib/sass/script/value/number.rb +530 -0
- data/lib/sass/script/value/string.rb +97 -0
- data/lib/sass/script/value.rb +11 -0
- data/lib/sass/script.rb +66 -0
- data/lib/sass/scss/css_parser.rb +42 -0
- data/lib/sass/scss/parser.rb +1209 -0
- data/lib/sass/scss/rx.rb +141 -0
- data/lib/sass/scss/script_lexer.rb +15 -0
- data/lib/sass/scss/script_parser.rb +25 -0
- data/lib/sass/scss/static_parser.rb +368 -0
- data/lib/sass/scss.rb +16 -0
- data/lib/sass/selector/abstract_sequence.rb +109 -0
- data/lib/sass/selector/comma_sequence.rb +175 -0
- data/lib/sass/selector/pseudo.rb +256 -0
- data/lib/sass/selector/sequence.rb +600 -0
- data/lib/sass/selector/simple.rb +117 -0
- data/lib/sass/selector/simple_sequence.rb +325 -0
- data/lib/sass/selector.rb +326 -0
- data/lib/sass/shared.rb +76 -0
- data/lib/sass/source/map.rb +210 -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 +227 -0
- data/lib/sass/tree/at_root_node.rb +83 -0
- data/lib/sass/tree/charset_node.rb +22 -0
- data/lib/sass/tree/comment_node.rb +82 -0
- data/lib/sass/tree/content_node.rb +9 -0
- data/lib/sass/tree/css_import_node.rb +60 -0
- data/lib/sass/tree/debug_node.rb +18 -0
- data/lib/sass/tree/directive_node.rb +59 -0
- data/lib/sass/tree/each_node.rb +24 -0
- data/lib/sass/tree/error_node.rb +18 -0
- data/lib/sass/tree/extend_node.rb +43 -0
- data/lib/sass/tree/for_node.rb +36 -0
- data/lib/sass/tree/function_node.rb +39 -0
- data/lib/sass/tree/if_node.rb +52 -0
- data/lib/sass/tree/import_node.rb +74 -0
- data/lib/sass/tree/keyframe_rule_node.rb +15 -0
- data/lib/sass/tree/media_node.rb +48 -0
- data/lib/sass/tree/mixin_def_node.rb +38 -0
- data/lib/sass/tree/mixin_node.rb +52 -0
- data/lib/sass/tree/node.rb +238 -0
- data/lib/sass/tree/prop_node.rb +171 -0
- data/lib/sass/tree/return_node.rb +19 -0
- data/lib/sass/tree/root_node.rb +44 -0
- data/lib/sass/tree/rule_node.rb +145 -0
- data/lib/sass/tree/supports_node.rb +38 -0
- data/lib/sass/tree/trace_node.rb +33 -0
- data/lib/sass/tree/variable_node.rb +36 -0
- data/lib/sass/tree/visitors/base.rb +72 -0
- data/lib/sass/tree/visitors/check_nesting.rb +177 -0
- data/lib/sass/tree/visitors/convert.rb +334 -0
- data/lib/sass/tree/visitors/cssize.rb +369 -0
- data/lib/sass/tree/visitors/deep_copy.rb +107 -0
- data/lib/sass/tree/visitors/extend.rb +68 -0
- data/lib/sass/tree/visitors/perform.rb +539 -0
- data/lib/sass/tree/visitors/set_options.rb +139 -0
- data/lib/sass/tree/visitors/to_css.rb +381 -0
- data/lib/sass/tree/warn_node.rb +18 -0
- data/lib/sass/tree/while_node.rb +18 -0
- data/lib/sass/util/cross_platform_random.rb +19 -0
- data/lib/sass/util/multibyte_string_scanner.rb +157 -0
- data/lib/sass/util/normalized_map.rb +130 -0
- data/lib/sass/util/ordered_hash.rb +192 -0
- data/lib/sass/util/subset_map.rb +110 -0
- data/lib/sass/util/test.rb +9 -0
- data/lib/sass/util.rb +1318 -0
- data/lib/sass/version.rb +124 -0
- data/lib/sass.rb +102 -0
- data/rails/init.rb +1 -0
- data/test/sass/cache_test.rb +131 -0
- data/test/sass/callbacks_test.rb +61 -0
- data/test/sass/compiler_test.rb +232 -0
- data/test/sass/conversion_test.rb +2054 -0
- data/test/sass/css2sass_test.rb +477 -0
- data/test/sass/data/hsl-rgb.txt +319 -0
- data/test/sass/encoding_test.rb +219 -0
- data/test/sass/engine_test.rb +3301 -0
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +1661 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
- data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
- data/test/sass/functions_test.rb +1926 -0
- data/test/sass/importer_test.rb +412 -0
- data/test/sass/logger_test.rb +58 -0
- data/test/sass/mock_importer.rb +49 -0
- data/test/sass/more_results/more1.css +9 -0
- data/test/sass/more_results/more1_with_line_comments.css +26 -0
- data/test/sass/more_results/more_import.css +29 -0
- data/test/sass/more_templates/_more_partial.sass +2 -0
- data/test/sass/more_templates/more1.sass +23 -0
- data/test/sass/more_templates/more_import.sass +11 -0
- data/test/sass/plugin_test.rb +554 -0
- data/test/sass/results/alt.css +4 -0
- data/test/sass/results/basic.css +9 -0
- data/test/sass/results/cached_import_option.css +3 -0
- data/test/sass/results/compact.css +5 -0
- data/test/sass/results/complex.css +86 -0
- data/test/sass/results/compressed.css +1 -0
- data/test/sass/results/expanded.css +19 -0
- data/test/sass/results/filename_fn.css +3 -0
- data/test/sass/results/if.css +3 -0
- data/test/sass/results/import.css +31 -0
- data/test/sass/results/import_charset.css +5 -0
- data/test/sass/results/import_charset_1_8.css +5 -0
- data/test/sass/results/import_charset_ibm866.css +5 -0
- data/test/sass/results/import_content.css +1 -0
- data/test/sass/results/line_numbers.css +49 -0
- data/test/sass/results/mixins.css +95 -0
- data/test/sass/results/multiline.css +24 -0
- data/test/sass/results/nested.css +22 -0
- data/test/sass/results/options.css +1 -0
- data/test/sass/results/parent_ref.css +13 -0
- data/test/sass/results/script.css +16 -0
- data/test/sass/results/scss_import.css +31 -0
- data/test/sass/results/scss_importee.css +2 -0
- data/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
- data/test/sass/results/subdir/subdir.css +3 -0
- data/test/sass/results/units.css +11 -0
- data/test/sass/results/warn.css +0 -0
- data/test/sass/results/warn_imported.css +0 -0
- data/test/sass/script_conversion_test.rb +328 -0
- data/test/sass/script_test.rb +1054 -0
- data/test/sass/scss/css_test.rb +1215 -0
- data/test/sass/scss/rx_test.rb +156 -0
- data/test/sass/scss/scss_test.rb +3900 -0
- data/test/sass/scss/test_helper.rb +37 -0
- data/test/sass/source_map_test.rb +977 -0
- data/test/sass/superselector_test.rb +191 -0
- data/test/sass/templates/_cached_import_option_partial.scss +1 -0
- data/test/sass/templates/_double_import_loop2.sass +1 -0
- data/test/sass/templates/_filename_fn_import.scss +11 -0
- data/test/sass/templates/_imported_charset_ibm866.sass +4 -0
- data/test/sass/templates/_imported_charset_utf8.sass +4 -0
- data/test/sass/templates/_imported_content.sass +3 -0
- data/test/sass/templates/_partial.sass +2 -0
- data/test/sass/templates/_same_name_different_partiality.scss +1 -0
- data/test/sass/templates/alt.sass +16 -0
- data/test/sass/templates/basic.sass +23 -0
- data/test/sass/templates/bork1.sass +2 -0
- data/test/sass/templates/bork2.sass +2 -0
- data/test/sass/templates/bork3.sass +2 -0
- data/test/sass/templates/bork4.sass +2 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/templates/cached_import_option.scss +3 -0
- data/test/sass/templates/compact.sass +17 -0
- data/test/sass/templates/complex.sass +305 -0
- data/test/sass/templates/compressed.sass +15 -0
- data/test/sass/templates/double_import_loop1.sass +1 -0
- data/test/sass/templates/expanded.sass +17 -0
- data/test/sass/templates/filename_fn.scss +18 -0
- data/test/sass/templates/if.sass +11 -0
- data/test/sass/templates/import.sass +12 -0
- data/test/sass/templates/import_charset.sass +9 -0
- data/test/sass/templates/import_charset_1_8.sass +6 -0
- data/test/sass/templates/import_charset_ibm866.sass +11 -0
- data/test/sass/templates/import_content.sass +4 -0
- data/test/sass/templates/importee.less +2 -0
- data/test/sass/templates/importee.sass +19 -0
- data/test/sass/templates/line_numbers.sass +13 -0
- data/test/sass/templates/mixin_bork.sass +5 -0
- data/test/sass/templates/mixins.sass +76 -0
- data/test/sass/templates/multiline.sass +20 -0
- data/test/sass/templates/nested.sass +25 -0
- data/test/sass/templates/nested_bork1.sass +2 -0
- data/test/sass/templates/nested_bork2.sass +2 -0
- data/test/sass/templates/nested_bork3.sass +2 -0
- data/test/sass/templates/nested_bork4.sass +2 -0
- data/test/sass/templates/nested_import.sass +2 -0
- data/test/sass/templates/nested_mixin_bork.sass +6 -0
- data/test/sass/templates/options.sass +2 -0
- data/test/sass/templates/parent_ref.sass +25 -0
- data/test/sass/templates/same_name_different_ext.sass +2 -0
- data/test/sass/templates/same_name_different_ext.scss +1 -0
- data/test/sass/templates/same_name_different_partiality.scss +1 -0
- data/test/sass/templates/script.sass +101 -0
- data/test/sass/templates/scss_import.scss +12 -0
- data/test/sass/templates/scss_importee.scss +1 -0
- data/test/sass/templates/single_import_loop.sass +1 -0
- data/test/sass/templates/subdir/import_up1.scss +1 -0
- data/test/sass/templates/subdir/import_up2.scss +1 -0
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
- data/test/sass/templates/subdir/subdir.sass +6 -0
- data/test/sass/templates/units.sass +11 -0
- data/test/sass/templates/warn.sass +3 -0
- data/test/sass/templates/warn_imported.sass +4 -0
- data/test/sass/test_helper.rb +8 -0
- data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
- data/test/sass/util/normalized_map_test.rb +51 -0
- data/test/sass/util/subset_map_test.rb +91 -0
- data/test/sass/util_test.rb +467 -0
- data/test/sass/value_helpers_test.rb +179 -0
- data/test/test_helper.rb +109 -0
- metadata +386 -0
@@ -0,0 +1,227 @@
|
|
1
|
+
# A namespace for the `@supports` condition parse tree.
|
2
|
+
module Sass::Supports
|
3
|
+
# The abstract superclass of all Supports conditions.
|
4
|
+
class Condition
|
5
|
+
# Runs the SassScript in the supports condition.
|
6
|
+
#
|
7
|
+
# @param environment [Sass::Environment] The environment in which to run the script.
|
8
|
+
def perform(environment); Sass::Util.abstract(self); end
|
9
|
+
|
10
|
+
# Returns the CSS for this condition.
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def to_css; Sass::Util.abstract(self); end
|
14
|
+
|
15
|
+
# Returns the Sass/CSS code for this condition.
|
16
|
+
#
|
17
|
+
# @param options [{Symbol => Object}] An options hash (see {Sass::CSS#initialize}).
|
18
|
+
# @return [String]
|
19
|
+
def to_src(options); Sass::Util.abstract(self); end
|
20
|
+
|
21
|
+
# Returns a deep copy of this condition and all its children.
|
22
|
+
#
|
23
|
+
# @return [Condition]
|
24
|
+
def deep_copy; Sass::Util.abstract(self); end
|
25
|
+
|
26
|
+
# Sets the options hash for the script nodes in the supports condition.
|
27
|
+
#
|
28
|
+
# @param options [{Symbol => Object}] The options has to set.
|
29
|
+
def options=(options); Sass::Util.abstract(self); end
|
30
|
+
end
|
31
|
+
|
32
|
+
# An operator condition (e.g. `CONDITION1 and CONDITION2`).
|
33
|
+
class Operator < Condition
|
34
|
+
# The left-hand condition.
|
35
|
+
#
|
36
|
+
# @return [Sass::Supports::Condition]
|
37
|
+
attr_accessor :left
|
38
|
+
|
39
|
+
# The right-hand condition.
|
40
|
+
#
|
41
|
+
# @return [Sass::Supports::Condition]
|
42
|
+
attr_accessor :right
|
43
|
+
|
44
|
+
# The operator ("and" or "or").
|
45
|
+
#
|
46
|
+
# @return [String]
|
47
|
+
attr_accessor :op
|
48
|
+
|
49
|
+
def initialize(left, right, op)
|
50
|
+
@left = left
|
51
|
+
@right = right
|
52
|
+
@op = op
|
53
|
+
end
|
54
|
+
|
55
|
+
def perform(env)
|
56
|
+
@left.perform(env)
|
57
|
+
@right.perform(env)
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_css
|
61
|
+
"#{left_parens @left.to_css} #{op} #{right_parens @right.to_css}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_src(options)
|
65
|
+
"#{left_parens @left.to_src(options)} #{op} #{right_parens @right.to_src(options)}"
|
66
|
+
end
|
67
|
+
|
68
|
+
def deep_copy
|
69
|
+
copy = dup
|
70
|
+
copy.left = @left.deep_copy
|
71
|
+
copy.right = @right.deep_copy
|
72
|
+
copy
|
73
|
+
end
|
74
|
+
|
75
|
+
def options=(options)
|
76
|
+
@left.options = options
|
77
|
+
@right.options = options
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def left_parens(str)
|
83
|
+
return "(#{str})" if @left.is_a?(Negation)
|
84
|
+
str
|
85
|
+
end
|
86
|
+
|
87
|
+
def right_parens(str)
|
88
|
+
return "(#{str})" if @right.is_a?(Negation) || @right.is_a?(Operator)
|
89
|
+
str
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# A negation condition (`not CONDITION`).
|
94
|
+
class Negation < Condition
|
95
|
+
# The condition being negated.
|
96
|
+
#
|
97
|
+
# @return [Sass::Supports::Condition]
|
98
|
+
attr_accessor :condition
|
99
|
+
|
100
|
+
def initialize(condition)
|
101
|
+
@condition = condition
|
102
|
+
end
|
103
|
+
|
104
|
+
def perform(env)
|
105
|
+
@condition.perform(env)
|
106
|
+
end
|
107
|
+
|
108
|
+
def to_css
|
109
|
+
"not #{parens @condition.to_css}"
|
110
|
+
end
|
111
|
+
|
112
|
+
def to_src(options)
|
113
|
+
"not #{parens @condition.to_src(options)}"
|
114
|
+
end
|
115
|
+
|
116
|
+
def deep_copy
|
117
|
+
copy = dup
|
118
|
+
copy.condition = condition.deep_copy
|
119
|
+
copy
|
120
|
+
end
|
121
|
+
|
122
|
+
def options=(options)
|
123
|
+
condition.options = options
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def parens(str)
|
129
|
+
return "(#{str})" if @condition.is_a?(Negation) || @condition.is_a?(Operator)
|
130
|
+
str
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# A declaration condition (e.g. `(feature: value)`).
|
135
|
+
class Declaration < Condition
|
136
|
+
# @return [Sass::Script::Tree::Node] The feature name.
|
137
|
+
attr_accessor :name
|
138
|
+
|
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.
|
142
|
+
#
|
143
|
+
# @return [String]
|
144
|
+
attr_accessor :resolved_name
|
145
|
+
|
146
|
+
# The feature value.
|
147
|
+
#
|
148
|
+
# @return [Sass::Script::Tree::Node]
|
149
|
+
attr_accessor :value
|
150
|
+
|
151
|
+
# The value of the feature after any SassScript has been resolved.
|
152
|
+
# Only set once \{Tree::Visitors::Perform} has been run.
|
153
|
+
#
|
154
|
+
# @return [String]
|
155
|
+
attr_accessor :resolved_value
|
156
|
+
|
157
|
+
def initialize(name, value)
|
158
|
+
@name = name
|
159
|
+
@value = value
|
160
|
+
end
|
161
|
+
|
162
|
+
def perform(env)
|
163
|
+
@resolved_name = name.perform(env)
|
164
|
+
@resolved_value = value.perform(env)
|
165
|
+
end
|
166
|
+
|
167
|
+
def to_css
|
168
|
+
"(#{@resolved_name}: #{@resolved_value})"
|
169
|
+
end
|
170
|
+
|
171
|
+
def to_src(options)
|
172
|
+
"(#{@name.to_sass(options)}: #{@value.to_sass(options)})"
|
173
|
+
end
|
174
|
+
|
175
|
+
def deep_copy
|
176
|
+
copy = dup
|
177
|
+
copy.name = @name.deep_copy
|
178
|
+
copy.value = @value.deep_copy
|
179
|
+
copy
|
180
|
+
end
|
181
|
+
|
182
|
+
def options=(options)
|
183
|
+
@name.options = options
|
184
|
+
@value.options = options
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
# An interpolation condition (e.g. `#{$var}`).
|
189
|
+
class Interpolation < Condition
|
190
|
+
# The SassScript expression in the interpolation.
|
191
|
+
#
|
192
|
+
# @return [Sass::Script::Tree::Node]
|
193
|
+
attr_accessor :value
|
194
|
+
|
195
|
+
# The value of the expression after it's been resolved.
|
196
|
+
# Only set once \{Tree::Visitors::Perform} has been run.
|
197
|
+
#
|
198
|
+
# @return [String]
|
199
|
+
attr_accessor :resolved_value
|
200
|
+
|
201
|
+
def initialize(value)
|
202
|
+
@value = value
|
203
|
+
end
|
204
|
+
|
205
|
+
def perform(env)
|
206
|
+
@resolved_value = value.perform(env).to_s(:quote => :none)
|
207
|
+
end
|
208
|
+
|
209
|
+
def to_css
|
210
|
+
@resolved_value
|
211
|
+
end
|
212
|
+
|
213
|
+
def to_src(options)
|
214
|
+
@value.to_sass(options)
|
215
|
+
end
|
216
|
+
|
217
|
+
def deep_copy
|
218
|
+
copy = dup
|
219
|
+
copy.value = @value.deep_copy
|
220
|
+
copy
|
221
|
+
end
|
222
|
+
|
223
|
+
def options=(options)
|
224
|
+
@value.options = options
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
@@ -0,0 +1,83 @@
|
|
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
|
+
return exclude?('keyframes') if node.is_a?(Sass::Tree::KeyframeRuleNode)
|
74
|
+
exclude?('rule') && node.is_a?(Sass::Tree::RuleNode)
|
75
|
+
end
|
76
|
+
|
77
|
+
# @see Node#bubbles?
|
78
|
+
def bubbles?
|
79
|
+
true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Sass::Tree
|
2
|
+
# A static node representing an unprocessed Sass `@charset` directive.
|
3
|
+
#
|
4
|
+
# @see Sass::Tree
|
5
|
+
class CharsetNode < Node
|
6
|
+
# The name of the charset.
|
7
|
+
#
|
8
|
+
# @return [String]
|
9
|
+
attr_accessor :name
|
10
|
+
|
11
|
+
# @param name [String] see \{#name}
|
12
|
+
def initialize(name)
|
13
|
+
@name = name
|
14
|
+
super()
|
15
|
+
end
|
16
|
+
|
17
|
+
# @see Node#invisible?
|
18
|
+
def invisible?
|
19
|
+
!Sass::Util.ruby1_8?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'sass/tree/node'
|
2
|
+
|
3
|
+
module Sass::Tree
|
4
|
+
# A static node representing a Sass comment (silent or loud).
|
5
|
+
#
|
6
|
+
# @see Sass::Tree
|
7
|
+
class CommentNode < Node
|
8
|
+
# The text of the comment, not including `/*` and `*/`.
|
9
|
+
# Interspersed with {Sass::Script::Tree::Node}s representing `#{}`-interpolation
|
10
|
+
# if this is a loud comment.
|
11
|
+
#
|
12
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
13
|
+
attr_accessor :value
|
14
|
+
|
15
|
+
# The text of the comment
|
16
|
+
# after any interpolated SassScript has been resolved.
|
17
|
+
# Only set once \{Tree::Visitors::Perform} has been run.
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
attr_accessor :resolved_value
|
21
|
+
|
22
|
+
# The type of the comment. `:silent` means it's never output to CSS,
|
23
|
+
# `:normal` means it's output in every compile mode except `:compressed`,
|
24
|
+
# and `:loud` means it's output even in `:compressed`.
|
25
|
+
#
|
26
|
+
# @return [Symbol]
|
27
|
+
attr_accessor :type
|
28
|
+
|
29
|
+
# @param value [Array<String, Sass::Script::Tree::Node>] See \{#value}
|
30
|
+
# @param type [Symbol] See \{#type}
|
31
|
+
def initialize(value, type)
|
32
|
+
@value = Sass::Util.with_extracted_values(value) {|str| normalize_indentation str}
|
33
|
+
@type = type
|
34
|
+
super()
|
35
|
+
end
|
36
|
+
|
37
|
+
# Compares the contents of two comments.
|
38
|
+
#
|
39
|
+
# @param other [Object] The object to compare with
|
40
|
+
# @return [Boolean] Whether or not this node and the other object
|
41
|
+
# are the same
|
42
|
+
def ==(other)
|
43
|
+
self.class == other.class && value == other.value && type == other.type
|
44
|
+
end
|
45
|
+
|
46
|
+
# Returns `true` if this is a silent comment
|
47
|
+
# or the current style doesn't render comments.
|
48
|
+
#
|
49
|
+
# Comments starting with ! are never invisible (and the ! is removed from the output.)
|
50
|
+
#
|
51
|
+
# @return [Boolean]
|
52
|
+
def invisible?
|
53
|
+
case @type
|
54
|
+
when :loud; false
|
55
|
+
when :silent; true
|
56
|
+
else; style == :compressed
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the number of lines in the comment.
|
61
|
+
#
|
62
|
+
# @return [Fixnum]
|
63
|
+
def lines
|
64
|
+
@value.inject(0) do |s, e|
|
65
|
+
next s + e.count("\n") if e.is_a?(String)
|
66
|
+
next s
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def normalize_indentation(str)
|
73
|
+
ind = str.split("\n").inject(str[/^[ \t]*/].split("")) do |pre, line|
|
74
|
+
line[/^[ \t]*/].split("").zip(pre).inject([]) do |arr, (a, b)|
|
75
|
+
break arr if a != b
|
76
|
+
arr << a
|
77
|
+
end
|
78
|
+
end.join
|
79
|
+
str.gsub(/^#{ind}/, '')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Sass::Tree
|
2
|
+
# A node representing an `@import` rule that's importing plain CSS.
|
3
|
+
#
|
4
|
+
# @see Sass::Tree
|
5
|
+
class CssImportNode < DirectiveNode
|
6
|
+
# The URI being imported, either as a plain string or an interpolated
|
7
|
+
# script string.
|
8
|
+
#
|
9
|
+
# @return [String, Sass::Script::Tree::Node]
|
10
|
+
attr_accessor :uri
|
11
|
+
|
12
|
+
# The text of the URI being imported after any interpolated SassScript has
|
13
|
+
# been resolved. Only set once {Tree::Visitors::Perform} has been run.
|
14
|
+
#
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :resolved_uri
|
17
|
+
|
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
|
+
#
|
22
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
23
|
+
attr_accessor :query
|
24
|
+
|
25
|
+
# The media query for this rule, without any unresolved interpolation.
|
26
|
+
# It's only set once {Tree::Visitors::Perform} has been run.
|
27
|
+
#
|
28
|
+
# @return [Sass::Media::QueryList]
|
29
|
+
attr_accessor :resolved_query
|
30
|
+
|
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
|
+
@uri = uri
|
35
|
+
@query = query
|
36
|
+
super('')
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param uri [String] See \{#resolved_uri}
|
40
|
+
# @return [CssImportNode]
|
41
|
+
def self.resolved(uri)
|
42
|
+
node = new(uri)
|
43
|
+
node.resolved_uri = uri
|
44
|
+
node
|
45
|
+
end
|
46
|
+
|
47
|
+
# @see DirectiveNode#value
|
48
|
+
def value; raise NotImplementedError; end
|
49
|
+
|
50
|
+
# @see DirectiveNode#resolved_value
|
51
|
+
def resolved_value
|
52
|
+
@resolved_value ||=
|
53
|
+
begin
|
54
|
+
str = "@import #{resolved_uri}"
|
55
|
+
str << " #{resolved_query.to_css}" if resolved_query
|
56
|
+
str
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|