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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
module Sass
|
|
3
|
+
# Provides `Sass.has_feature?` which allows for simple feature detection
|
|
4
|
+
# by providing a feature name.
|
|
5
|
+
module Features
|
|
6
|
+
|
|
7
|
+
# This is the set of features that can be detected.
|
|
8
|
+
KNOWN_FEATURES = Set[*%w{
|
|
9
|
+
}]
|
|
10
|
+
|
|
11
|
+
# Check if a feature exists by name. This is used to implement
|
|
12
|
+
# the Sass function `feature-exists($feature)`
|
|
13
|
+
#
|
|
14
|
+
# @param feature_name [String] The case sensitive name of the feature to
|
|
15
|
+
# check if it exists in this version of Sass.
|
|
16
|
+
# @return [Boolean] whether the feature of that name exists.
|
|
17
|
+
def has_feature?(feature_name)
|
|
18
|
+
KNOWN_FEATURES.include?(feature_name)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Add a feature to Sass. Plugins can use this to easily expose their
|
|
22
|
+
# availability to end users. Plugins must prefix their feature
|
|
23
|
+
# names with a dash to distinguish them from official features.
|
|
24
|
+
#
|
|
25
|
+
# @example
|
|
26
|
+
# Sass.add_feature("-import-globbing")
|
|
27
|
+
# Sass.add_feature("-math-cos")
|
|
28
|
+
#
|
|
29
|
+
#
|
|
30
|
+
# @param feature_name [String] The case sensitive name of the feature to
|
|
31
|
+
# to add to Sass. Must begin with a dash.
|
|
32
|
+
def add_feature(feature_name)
|
|
33
|
+
unless feature_name[0] == ?-
|
|
34
|
+
raise ArgumentError.new("Plugin feature names must begin with a dash")
|
|
35
|
+
end
|
|
36
|
+
KNOWN_FEATURES << feature_name
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
extend Features
|
|
41
|
+
end
|
data/lib/sass/importers/base.rb
CHANGED
|
@@ -122,6 +122,18 @@ module Sass
|
|
|
122
122
|
Sass::Util.abstract(self)
|
|
123
123
|
end
|
|
124
124
|
|
|
125
|
+
# Get the publicly-visible URL for an imported file. This URL is used by
|
|
126
|
+
# source maps to link to the source stylesheet. This may return `nil` to
|
|
127
|
+
# indicate that no public URL is available; however, this will cause
|
|
128
|
+
# sourcemap generation to fail if any CSS is generated from files imported
|
|
129
|
+
# from this importer.
|
|
130
|
+
#
|
|
131
|
+
# @param uri [String] A URI known to be valid for this importer.
|
|
132
|
+
# @return [String?] The publicly-visible URL for this file.
|
|
133
|
+
def public_url(uri)
|
|
134
|
+
nil
|
|
135
|
+
end
|
|
136
|
+
|
|
125
137
|
# A string representation of the importer.
|
|
126
138
|
# Should be overridden by subclasses.
|
|
127
139
|
#
|
|
@@ -132,8 +144,27 @@ module Sass
|
|
|
132
144
|
def to_s
|
|
133
145
|
Sass::Util.abstract(self)
|
|
134
146
|
end
|
|
147
|
+
|
|
148
|
+
# If the importer is based on files on the local filesystem
|
|
149
|
+
# this method should return folders which should be watched
|
|
150
|
+
# for changes.
|
|
151
|
+
#
|
|
152
|
+
# @return [Array<String>] List of absolute paths of directories to watch
|
|
153
|
+
def directories_to_watch
|
|
154
|
+
[]
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# If this importer is based on files on the local filesystem This method
|
|
158
|
+
# should return true if the file, when changed, should trigger a
|
|
159
|
+
# recompile.
|
|
160
|
+
#
|
|
161
|
+
# It is acceptable for non-sass files to be watched and trigger a recompile.
|
|
162
|
+
#
|
|
163
|
+
# @param filename [String] The absolute filename for a file that has changed.
|
|
164
|
+
# @return [Boolean] When the file changed should cause a recompile.
|
|
165
|
+
def watched_file?(filename)
|
|
166
|
+
false
|
|
167
|
+
end
|
|
135
168
|
end
|
|
136
169
|
end
|
|
137
170
|
end
|
|
138
|
-
|
|
139
|
-
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Sass
|
|
2
|
+
module Importers
|
|
3
|
+
# This importer emits a deprecation warning the first time it is used to
|
|
4
|
+
# import a file. It is used to deprecate the current working
|
|
5
|
+
# directory from the list of automatic sass load paths.
|
|
6
|
+
class DeprecatedPath < Filesystem
|
|
7
|
+
|
|
8
|
+
# @param root [String] The absolute, expanded path to the folder that is deprecated.
|
|
9
|
+
def initialize(root)
|
|
10
|
+
@specified_root = root
|
|
11
|
+
@warning_given = false
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @see Sass::Importers::Base#find
|
|
16
|
+
def find(*args)
|
|
17
|
+
found = super
|
|
18
|
+
if found && !@warning_given
|
|
19
|
+
@warning_given = true
|
|
20
|
+
Sass::Util.sass_warn deprecation_warning
|
|
21
|
+
end
|
|
22
|
+
found
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @see Sass::Importers::Base#to_s
|
|
26
|
+
def to_s
|
|
27
|
+
"#{@root} (DEPRECATED)"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
# @return [String] The deprecation warning that will be printed the first
|
|
33
|
+
# time an import occurs.
|
|
34
|
+
def deprecation_warning
|
|
35
|
+
path = @specified_root == "." ? "the current working directory" : @specified_root
|
|
36
|
+
<<WARNING
|
|
37
|
+
DEPRECATION WARNING: Importing from #{path} will not be
|
|
38
|
+
automatic in future versions of Sass. To avoid future errors, you can add it
|
|
39
|
+
to your environment explicitly by setting `SASSPATH=#{@specified_root}`, by using the -I command
|
|
40
|
+
line option, or by changing your Sass configuration options.
|
|
41
|
+
WARNING
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -39,7 +39,7 @@ module Sass
|
|
|
39
39
|
# @see Base#key
|
|
40
40
|
def key(name, options)
|
|
41
41
|
[self.class.name + ":" + File.dirname(File.expand_path(name)),
|
|
42
|
-
|
|
42
|
+
File.basename(name)]
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
# @see Base#to_s
|
|
@@ -55,6 +55,17 @@ module Sass
|
|
|
55
55
|
root.eql?(other.root)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
# @see Base#directories_to_watch
|
|
59
|
+
def directories_to_watch
|
|
60
|
+
[root]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @see Base#watched_file?
|
|
64
|
+
def watched_file?(filename)
|
|
65
|
+
filename =~ /\.s[ac]ss$/ &&
|
|
66
|
+
filename.start_with?(root + File::SEPARATOR)
|
|
67
|
+
end
|
|
68
|
+
|
|
58
69
|
protected
|
|
59
70
|
|
|
60
71
|
# If a full uri is passed, this removes the root from it
|
|
@@ -98,7 +109,7 @@ module Sass
|
|
|
98
109
|
end
|
|
99
110
|
|
|
100
111
|
# JRuby chokes when trying to import files from JARs when the path starts with './'.
|
|
101
|
-
ret.map {|f, s| [f.sub(
|
|
112
|
+
ret.map {|f, s| [f.sub(/^\.\//, ''), s]}
|
|
102
113
|
end
|
|
103
114
|
|
|
104
115
|
def escape_glob_characters(name)
|
|
@@ -107,7 +118,7 @@ module Sass
|
|
|
107
118
|
end
|
|
108
119
|
end
|
|
109
120
|
|
|
110
|
-
REDUNDANT_DIRECTORY =
|
|
121
|
+
REDUNDANT_DIRECTORY = /#{Regexp.escape(File::SEPARATOR)}\.#{Regexp.escape(File::SEPARATOR)}/
|
|
111
122
|
# Given a base directory and an `@import`ed name,
|
|
112
123
|
# finds an existant file that matches the name.
|
|
113
124
|
#
|
|
@@ -119,7 +130,7 @@ module Sass
|
|
|
119
130
|
dir = dir.gsub(File::ALT_SEPARATOR, File::SEPARATOR) unless File::ALT_SEPARATOR.nil?
|
|
120
131
|
|
|
121
132
|
found = possible_files(remove_root(name)).map do |f, s|
|
|
122
|
-
path =
|
|
133
|
+
path = dir == "." || Pathname.new(f).absolute? ? f : "#{dir}/#{f}"
|
|
123
134
|
Dir[path].map do |full_path|
|
|
124
135
|
full_path.gsub!(REDUNDANT_DIRECTORY, File::SEPARATOR)
|
|
125
136
|
[full_path, s]
|
|
@@ -131,19 +142,19 @@ module Sass
|
|
|
131
142
|
if found.size > 1 && !@same_name_warnings.include?(found.first.first)
|
|
132
143
|
found.each {|(f, _)| @same_name_warnings << f}
|
|
133
144
|
relative_to = Pathname.new(dir)
|
|
134
|
-
if options[:
|
|
145
|
+
if options[:_from_import_node]
|
|
135
146
|
# If _line exists, we're here due to an actual import in an
|
|
136
147
|
# import_node and we want to print a warning for a user writing an
|
|
137
148
|
# ambiguous import.
|
|
138
|
-
candidates = found.map
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
149
|
+
candidates = found.map do |(f, _)|
|
|
150
|
+
" " + Pathname.new(f).relative_path_from(relative_to).to_s
|
|
151
|
+
end.join("\n")
|
|
152
|
+
raise Sass::SyntaxError.new(<<MESSAGE)
|
|
153
|
+
It's not clear which file to import for '@import "#{name}"'.
|
|
154
|
+
Candidates:
|
|
143
155
|
#{candidates}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
WARNING
|
|
156
|
+
Please delete or rename all but one of these files.
|
|
157
|
+
MESSAGE
|
|
147
158
|
else
|
|
148
159
|
# Otherwise, we're here via StalenessChecker, and we want to print a
|
|
149
160
|
# warning for a user running `sass --watch` with two ambiguous files.
|
|
@@ -163,7 +174,7 @@ WARNING
|
|
|
163
174
|
def split(name)
|
|
164
175
|
extension = nil
|
|
165
176
|
dirname, basename = File.dirname(name), File.basename(name)
|
|
166
|
-
if basename =~ /^(.*)\.(#{extensions.keys.map{|e| Regexp.escape(e)}.join('|')})$/
|
|
177
|
+
if basename =~ /^(.*)\.(#{extensions.keys.map {|e| Regexp.escape(e)}.join('|')})$/
|
|
167
178
|
basename = $1
|
|
168
179
|
extension = $2
|
|
169
180
|
end
|
data/lib/sass/importers.rb
CHANGED
data/lib/sass/logger/base.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'sass/logger/log_level'
|
|
2
2
|
|
|
3
3
|
class Sass::Logger::Base
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
include Sass::Logger::LogLevel
|
|
6
6
|
|
|
7
7
|
attr_accessor :log_level
|
|
@@ -22,11 +22,11 @@ class Sass::Logger::Base
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def log(level, message)
|
|
25
|
-
|
|
25
|
+
_log(level, message) if logging_level?(level)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def _log(level, message)
|
|
29
|
-
Kernel
|
|
29
|
+
Kernel.warn(message)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
end
|
|
@@ -5,20 +5,18 @@ module Sass
|
|
|
5
5
|
def self.included(base)
|
|
6
6
|
base.extend(ClassMethods)
|
|
7
7
|
end
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
module ClassMethods
|
|
10
10
|
def inherited(subclass)
|
|
11
11
|
subclass.log_levels = subclass.superclass.log_levels.dup
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
attr_writer :log_levels
|
|
15
|
+
|
|
14
16
|
def log_levels
|
|
15
17
|
@log_levels ||= {}
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
def log_levels=(levels)
|
|
19
|
-
@log_levels = levels
|
|
20
|
-
end
|
|
21
|
-
|
|
22
20
|
def log_level?(level, min_level)
|
|
23
21
|
log_levels[level] >= log_levels[min_level]
|
|
24
22
|
end
|
|
@@ -43,7 +41,7 @@ module Sass
|
|
|
43
41
|
RUBY
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
|
-
|
|
44
|
+
|
|
47
45
|
end
|
|
48
46
|
end
|
|
49
47
|
end
|
data/lib/sass/media.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
module Sass::Media
|
|
3
3
|
# A comma-separated list of queries.
|
|
4
4
|
#
|
|
5
|
-
#
|
|
5
|
+
# media_query [ ',' S* media_query ]*
|
|
6
6
|
class QueryList
|
|
7
7
|
# The queries contained in this list.
|
|
8
8
|
#
|
|
@@ -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
|
|
@@ -62,7 +62,7 @@ module Sass::Media
|
|
|
62
62
|
|
|
63
63
|
# A single media query.
|
|
64
64
|
#
|
|
65
|
-
#
|
|
65
|
+
# [ [ONLY | NOT]? S* media_type S* | expression ] [ AND S* expression ]*
|
|
66
66
|
class Query
|
|
67
67
|
# The modifier for the query.
|
|
68
68
|
#
|
|
@@ -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
|
|
@@ -125,7 +125,7 @@ module Sass::Media
|
|
|
125
125
|
m2, t2 = other.resolved_modifier.downcase, other.resolved_type.downcase
|
|
126
126
|
t1 = t2 if t1.empty?
|
|
127
127
|
t2 = t1 if t2.empty?
|
|
128
|
-
if (
|
|
128
|
+
if (m1 == 'not') ^ (m2 == 'not')
|
|
129
129
|
return if t1 == t2
|
|
130
130
|
type = m1 == 'not' ? t2 : t1
|
|
131
131
|
mod = m1 == 'not' ? m2 : m1
|
|
@@ -140,7 +140,7 @@ module Sass::Media
|
|
|
140
140
|
type = t1
|
|
141
141
|
mod = m1.empty? ? m2 : m1
|
|
142
142
|
end
|
|
143
|
-
|
|
143
|
+
Query.new([mod], [type], other.expressions + expressions)
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
# Returns the CSS for the media query.
|
|
@@ -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 interp [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)
|