sass 3.4.25 → 3.5.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 +4 -4
- data/README.md +1 -1
- data/Rakefile +2 -117
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass/cache_stores/filesystem.rb +1 -1
- data/lib/sass/css.rb +1 -2
- data/lib/sass/engine.rb +38 -20
- data/lib/sass/environment.rb +26 -5
- data/lib/sass/error.rb +2 -2
- data/lib/sass/exec/base.rb +2 -11
- data/lib/sass/features.rb +1 -0
- data/lib/sass/importers/filesystem.rb +2 -2
- data/lib/sass/plugin/compiler.rb +20 -50
- data/lib/sass/plugin/configuration.rb +2 -2
- data/lib/sass/railtie.rb +1 -1
- data/lib/sass/script/functions.rb +235 -43
- data/lib/sass/script/lexer.rb +13 -2
- data/lib/sass/script/parser.rb +69 -67
- data/lib/sass/script/tree/funcall.rb +35 -30
- data/lib/sass/script/tree/list_literal.rb +23 -8
- data/lib/sass/script/tree/map_literal.rb +2 -2
- data/lib/sass/script/tree/node.rb +0 -8
- data/lib/sass/script/tree/operation.rb +0 -7
- data/lib/sass/script/value/arg_list.rb +1 -1
- data/lib/sass/script/value/base.rb +17 -0
- data/lib/sass/script/value/callable.rb +25 -0
- data/lib/sass/script/value/color.rb +5 -0
- data/lib/sass/script/value/function.rb +19 -0
- data/lib/sass/script/value/helpers.rb +29 -9
- data/lib/sass/script/value/list.rb +35 -14
- data/lib/sass/script/value/map.rb +2 -2
- data/lib/sass/script/value/number.rb +1 -1
- data/lib/sass/script/value.rb +2 -0
- data/lib/sass/scss/parser.rb +99 -40
- data/lib/sass/scss/rx.rb +4 -10
- data/lib/sass/scss/static_parser.rb +5 -24
- data/lib/sass/selector/abstract_sequence.rb +7 -6
- data/lib/sass/selector/comma_sequence.rb +7 -4
- data/lib/sass/selector/pseudo.rb +19 -2
- data/lib/sass/selector/sequence.rb +35 -6
- data/lib/sass/selector/simple.rb +9 -2
- data/lib/sass/selector/simple_sequence.rb +8 -4
- data/lib/sass/selector.rb +4 -0
- data/lib/sass/source/map.rb +2 -2
- data/lib/sass/stack.rb +21 -1
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/prop_node.rb +45 -53
- data/lib/sass/tree/rule_node.rb +3 -2
- data/lib/sass/tree/visitors/check_nesting.rb +1 -1
- data/lib/sass/tree/visitors/convert.rb +2 -3
- data/lib/sass/tree/visitors/cssize.rb +4 -15
- data/lib/sass/tree/visitors/deep_copy.rb +1 -1
- data/lib/sass/tree/visitors/extend.rb +2 -8
- data/lib/sass/tree/visitors/perform.rb +21 -9
- data/lib/sass/tree/visitors/set_options.rb +1 -1
- data/lib/sass/tree/visitors/to_css.rb +47 -13
- data/lib/sass/util/multibyte_string_scanner.rb +127 -131
- data/lib/sass/util/normalized_map.rb +1 -8
- data/lib/sass/util.rb +12 -290
- data/lib/sass/version.rb +0 -2
- data/lib/sass.rb +0 -7
- data/test/sass/cache_test.rb +0 -1
- data/test/sass/callbacks_test.rb +0 -1
- data/test/sass/compiler_test.rb +4 -15
- data/test/sass/conversion_test.rb +113 -163
- data/test/sass/css2sass_test.rb +16 -19
- data/test/sass/css_variable_test.rb +176 -71
- data/test/sass/encoding_test.rb +2 -33
- data/test/sass/engine_test.rb +71 -19
- data/test/sass/exec_test.rb +0 -1
- data/test/sass/extend_test.rb +37 -92
- data/test/sass/functions_test.rb +58 -14
- data/test/sass/importer_test.rb +2 -3
- data/test/sass/logger_test.rb +0 -1
- data/test/sass/plugin_test.rb +6 -10
- data/test/sass/results/script.css +1 -1
- data/test/sass/results/units.css +2 -2
- data/test/sass/script_conversion_test.rb +10 -2
- data/test/sass/script_test.rb +22 -24
- data/test/sass/scss/css_test.rb +3 -18
- data/test/sass/scss/rx_test.rb +0 -1
- data/test/sass/scss/scss_test.rb +49 -16
- data/test/sass/source_map_test.rb +13 -16
- data/test/sass/superselector_test.rb +0 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +121 -124
- data/test/sass/util/normalized_map_test.rb +0 -1
- data/test/sass/util/subset_map_test.rb +0 -1
- data/test/sass/util_test.rb +4 -39
- data/test/sass/value_helpers_test.rb +0 -1
- data/test/sass-spec.yml +1 -1
- data/test/test_helper.rb +39 -0
- metadata +19 -44
- data/lib/sass/script/css_variable_warning.rb +0 -52
- data/lib/sass/util/cross_platform_random.rb +0 -19
- data/lib/sass/util/ordered_hash.rb +0 -192
- data/test/sass/results/import_charset_1_8.css +0 -5
- data/test/sass/templates/import_charset_1_8.sass +0 -6
- data/vendor/listen/CHANGELOG.md +0 -1
- data/vendor/listen/CONTRIBUTING.md +0 -38
- data/vendor/listen/Gemfile +0 -20
- data/vendor/listen/Guardfile +0 -8
- data/vendor/listen/LICENSE +0 -20
- data/vendor/listen/README.md +0 -349
- data/vendor/listen/Rakefile +0 -5
- data/vendor/listen/Vagrantfile +0 -96
- data/vendor/listen/lib/listen/adapter.rb +0 -327
- data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
- data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
- data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
- data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
- data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
- data/vendor/listen/lib/listen/directory_record.rb +0 -406
- data/vendor/listen/lib/listen/listener.rb +0 -323
- data/vendor/listen/lib/listen/turnstile.rb +0 -32
- data/vendor/listen/lib/listen/version.rb +0 -3
- data/vendor/listen/lib/listen.rb +0 -54
- data/vendor/listen/listen.gemspec +0 -28
- data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
- data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
- data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
- data/vendor/listen/spec/listen/listener_spec.rb +0 -258
- data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/vendor/listen/spec/listen_spec.rb +0 -67
- data/vendor/listen/spec/spec_helper.rb +0 -25
- data/vendor/listen/spec/support/adapter_helper.rb +0 -666
- data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
- data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/vendor/listen/spec/support/listeners_helper.rb +0 -179
- data/vendor/listen/spec/support/platform_helper.rb +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 62b8871bca68353a37c0dc60b2cfeb65ee14eb8d
|
|
4
|
+
data.tar.gz: 901579162ee8f9f1490124807d81b8a79e9955b3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f0c07e35a2c6f913e2a5041439b7886ba02d071af3da200e0eca1cc8a8a2c2b38edf4f9ffb2cd7b45757b2d611fdbec4189820cd3368f25adc782da4c7479b24
|
|
7
|
+
data.tar.gz: 5f2967d0a40103afdf2209af7c8fac2eccf065fccb536f864ad89369547f87db5c1b204ffd37da03e8a9bc7bad994abb77a3d1d42890a25c1ba111a39a18bf4c
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Sass [](http://badge.fury.io/rb/sass) [](http://inch-ci.org/github/sass/sass)
|
|
1
|
+
# Sass [](https://travis-ci.org/sass/sass) [](http://badge.fury.io/rb/sass) [](http://inch-ci.org/github/sass/sass)
|
|
2
2
|
|
|
3
3
|
**Sass makes CSS fun again**. Sass is an extension of CSS,
|
|
4
4
|
adding nested rules, variables, mixins, selector inheritance, and more.
|
data/Rakefile
CHANGED
|
@@ -129,7 +129,7 @@ end
|
|
|
129
129
|
# Don't use Rake::GemPackageTast because we want prerequisites to run
|
|
130
130
|
# before we load the gemspec.
|
|
131
131
|
desc "Build all the packages."
|
|
132
|
-
task :package => [:revision_file, :date_file, :
|
|
132
|
+
task :package => [:revision_file, :date_file, :permissions] do
|
|
133
133
|
version = get_version
|
|
134
134
|
File.open(scope('VERSION'), 'w') {|f| f.puts(version)}
|
|
135
135
|
load scope('sass.gemspec')
|
|
@@ -222,49 +222,10 @@ def changed_since?(rev, *files)
|
|
|
222
222
|
return !$?.success?
|
|
223
223
|
end
|
|
224
224
|
|
|
225
|
-
task :submodules do
|
|
226
|
-
if File.exist?(File.dirname(__FILE__) + "/.git")
|
|
227
|
-
sh %{git submodule sync}
|
|
228
|
-
sh %{git submodule update --init}
|
|
229
|
-
elsif !File.exist?(File.dirname(__FILE__) + "/vendor/listen/lib")
|
|
230
|
-
warn <<WARN
|
|
231
|
-
WARNING: vendor/listen doesn't exist, and this isn't a git repository so
|
|
232
|
-
I can't get it automatically!
|
|
233
|
-
WARN
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
task :release_edge do
|
|
238
|
-
ensure_git_cleanup do
|
|
239
|
-
puts "#{'=' * 50} Running rake release_edge"
|
|
240
|
-
|
|
241
|
-
sh %{git checkout master}
|
|
242
|
-
sh %{git reset --hard origin/master}
|
|
243
|
-
sh %{rake package}
|
|
244
|
-
version = get_version
|
|
245
|
-
if version.include?('.rc.')
|
|
246
|
-
puts "#{'=' * 20} Not releasing edge gem for RC version"
|
|
247
|
-
next
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
sh %{gem push pkg/sass-#{version}.gem}
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
|
|
254
225
|
# Get the version string. If this is being installed from Git,
|
|
255
226
|
# this includes the proper prerelease version.
|
|
256
227
|
def get_version
|
|
257
|
-
|
|
258
|
-
return written_version unless File.exist?(scope('.git'))
|
|
259
|
-
|
|
260
|
-
# Get the current master branch version
|
|
261
|
-
version = written_version.split('.')
|
|
262
|
-
version.map! {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
|
|
263
|
-
return written_version unless version.size == 5 && version[3] == "alpha" # prerelease
|
|
264
|
-
|
|
265
|
-
return written_version if (commit_count = `git log --pretty=oneline HEAD ^stable | wc -l`).empty?
|
|
266
|
-
version[4] = commit_count.strip
|
|
267
|
-
version.join('.')
|
|
228
|
+
File.read(scope('VERSION').strip)
|
|
268
229
|
end
|
|
269
230
|
|
|
270
231
|
task :watch_for_update do
|
|
@@ -336,27 +297,6 @@ rescue LoadError
|
|
|
336
297
|
task :yard => :rdoc
|
|
337
298
|
end
|
|
338
299
|
|
|
339
|
-
task :pages do
|
|
340
|
-
ensure_git_cleanup do
|
|
341
|
-
puts "#{'=' * 50} Running rake pages"
|
|
342
|
-
sh %{git checkout sass-pages}
|
|
343
|
-
sh %{git reset --hard origin/sass-pages}
|
|
344
|
-
|
|
345
|
-
Dir.chdir("/var/www/sass-pages") do
|
|
346
|
-
sh %{git fetch origin}
|
|
347
|
-
|
|
348
|
-
sh %{git checkout stable}
|
|
349
|
-
sh %{git reset --hard origin/stable}
|
|
350
|
-
|
|
351
|
-
sh %{git checkout sass-pages}
|
|
352
|
-
sh %{git reset --hard origin/sass-pages}
|
|
353
|
-
sh %{rake build --trace}
|
|
354
|
-
sh %{mkdir -p tmp}
|
|
355
|
-
sh %{touch tmp/restart.txt}
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
end
|
|
359
|
-
|
|
360
300
|
# ----- Coverage -----
|
|
361
301
|
|
|
362
302
|
begin
|
|
@@ -396,58 +336,3 @@ END
|
|
|
396
336
|
RubyProf.const_get("#{(ENV['OUTPUT'] || 'Flat').capitalize}Printer").new(result).print
|
|
397
337
|
end
|
|
398
338
|
rescue LoadError; end
|
|
399
|
-
|
|
400
|
-
# ----- Handling Updates -----
|
|
401
|
-
|
|
402
|
-
def email_on_error
|
|
403
|
-
yield
|
|
404
|
-
rescue Exception => e
|
|
405
|
-
IO.popen("sendmail nex342@gmail.com", "w") do |sm|
|
|
406
|
-
sm << "From: nex3@nex-3.com\n" <<
|
|
407
|
-
"To: nex342@gmail.com\n" <<
|
|
408
|
-
"Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" <<
|
|
409
|
-
e.message << "\n\n" <<
|
|
410
|
-
e.backtrace.join("\n")
|
|
411
|
-
end
|
|
412
|
-
ensure
|
|
413
|
-
raise e if e
|
|
414
|
-
end
|
|
415
|
-
|
|
416
|
-
def ensure_git_cleanup
|
|
417
|
-
email_on_error {yield}
|
|
418
|
-
ensure
|
|
419
|
-
sh %{git reset --hard HEAD}
|
|
420
|
-
sh %{git clean -xdf}
|
|
421
|
-
sh %{git checkout master}
|
|
422
|
-
end
|
|
423
|
-
|
|
424
|
-
task :handle_update do
|
|
425
|
-
email_on_error do
|
|
426
|
-
unless ENV["REF"] =~ %r{^refs/heads/(master|stable|sass-pages)$}
|
|
427
|
-
puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}"
|
|
428
|
-
next
|
|
429
|
-
end
|
|
430
|
-
branch = $1
|
|
431
|
-
|
|
432
|
-
puts
|
|
433
|
-
puts
|
|
434
|
-
puts '=' * 150
|
|
435
|
-
puts "Running rake handle_update REF=#{ENV["REF"].inspect}"
|
|
436
|
-
|
|
437
|
-
sh %{git fetch origin}
|
|
438
|
-
sh %{git checkout stable}
|
|
439
|
-
sh %{git reset --hard origin/stable}
|
|
440
|
-
sh %{git checkout master}
|
|
441
|
-
sh %{git reset --hard origin/master}
|
|
442
|
-
|
|
443
|
-
case branch
|
|
444
|
-
when "master"
|
|
445
|
-
sh %{rake release_edge --trace}
|
|
446
|
-
when "stable", "sass-pages"
|
|
447
|
-
sh %{rake pages --trace}
|
|
448
|
-
end
|
|
449
|
-
|
|
450
|
-
puts 'Done running handle_update'
|
|
451
|
-
puts '=' * 150
|
|
452
|
-
end
|
|
453
|
-
end
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.5.0
|
data/VERSION_DATE
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
12 July 2017 23:31:42 UTC
|
data/VERSION_NAME
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
Bleeding Edge
|
|
@@ -52,7 +52,7 @@ module Sass
|
|
|
52
52
|
# @param key [String]
|
|
53
53
|
# @return [String] The path to the cache file.
|
|
54
54
|
def path_to(key)
|
|
55
|
-
key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" %
|
|
55
|
+
key = key.gsub(/[<>:\\|?*%]/) {|c| "%%%03d" % c.ord}
|
|
56
56
|
File.join(cache_location, key)
|
|
57
57
|
end
|
|
58
58
|
end
|
data/lib/sass/css.rb
CHANGED
|
@@ -51,8 +51,7 @@ module Sass
|
|
|
51
51
|
raise err
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
# Returns the original encoding of the document
|
|
55
|
-
# or `nil` under Ruby 1.8.
|
|
54
|
+
# Returns the original encoding of the document.
|
|
56
55
|
#
|
|
57
56
|
# @return [Encoding, nil]
|
|
58
57
|
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
data/lib/sass/engine.rb
CHANGED
|
@@ -80,7 +80,13 @@ module Sass
|
|
|
80
80
|
#
|
|
81
81
|
# `type`: `String`
|
|
82
82
|
# : The user-friendly name of the type of the callable.
|
|
83
|
-
|
|
83
|
+
#
|
|
84
|
+
# `origin`: `Symbol`
|
|
85
|
+
# : From whence comes the callable: `:stylesheet`, `:builtin`, `:css`
|
|
86
|
+
# A callable with an origin of `:stylesheet` was defined in the stylesheet itself.
|
|
87
|
+
# A callable with an origin of `:builtin` was defined in ruby.
|
|
88
|
+
# A callable (function) with an origin of `:css` returns a function call with arguments to CSS.
|
|
89
|
+
Callable = Struct.new(:name, :args, :splat, :environment, :tree, :has_content, :type, :origin)
|
|
84
90
|
|
|
85
91
|
# This class handles the parsing and compilation of the Sass template.
|
|
86
92
|
# Example usage:
|
|
@@ -316,8 +322,7 @@ module Sass
|
|
|
316
322
|
end
|
|
317
323
|
end
|
|
318
324
|
|
|
319
|
-
# Returns the original encoding of the document
|
|
320
|
-
# or `nil` under Ruby 1.8.
|
|
325
|
+
# Returns the original encoding of the document.
|
|
321
326
|
#
|
|
322
327
|
# @return [Encoding, nil]
|
|
323
328
|
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
|
@@ -386,7 +391,7 @@ ERR
|
|
|
386
391
|
rendered << "\n" if rendered[-1] != ?\n
|
|
387
392
|
rendered << "\n" unless compressed
|
|
388
393
|
rendered << "/*# sourceMappingURL="
|
|
389
|
-
rendered <<
|
|
394
|
+
rendered << URI::DEFAULT_PARSER.escape(sourcemap_uri)
|
|
390
395
|
rendered << " */\n"
|
|
391
396
|
return rendered, sourcemap
|
|
392
397
|
end
|
|
@@ -520,10 +525,6 @@ MSG
|
|
|
520
525
|
nodes = []
|
|
521
526
|
while (line = arr[i]) && line.tabs >= base
|
|
522
527
|
if line.tabs > base
|
|
523
|
-
raise SyntaxError.new(
|
|
524
|
-
"The line was indented #{line.tabs - base} levels deeper than the previous line.",
|
|
525
|
-
:line => line.index) if line.tabs > base + 1
|
|
526
|
-
|
|
527
528
|
nodes.last.children, i = tree(arr, i)
|
|
528
529
|
else
|
|
529
530
|
nodes << line
|
|
@@ -695,7 +696,14 @@ WARNING
|
|
|
695
696
|
end
|
|
696
697
|
|
|
697
698
|
name = line.text[0...scanner.pos]
|
|
698
|
-
|
|
699
|
+
could_be_property =
|
|
700
|
+
if name.start_with?('--')
|
|
701
|
+
(scanned = scanner.scan(/\s*:/))
|
|
702
|
+
else
|
|
703
|
+
(scanned = scanner.scan(/\s*:(?:\s+|$)/))
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
if could_be_property # test for a property
|
|
699
707
|
offset += scanned.length
|
|
700
708
|
property = parse_property(name, res, scanner.rest, :new, line, offset)
|
|
701
709
|
property.name_source_range = ident_range
|
|
@@ -722,22 +730,32 @@ WARNING
|
|
|
722
730
|
# rubocop:disable ParameterLists
|
|
723
731
|
def parse_property(name, parsed_name, value, prop, line, start_offset)
|
|
724
732
|
# rubocop:enable ParameterLists
|
|
725
|
-
|
|
726
|
-
|
|
733
|
+
|
|
734
|
+
if name.start_with?('--')
|
|
735
|
+
unless line.children.empty?
|
|
736
|
+
raise SyntaxError.new("Illegal nesting: Nothing may be nested beneath custom properties.",
|
|
737
|
+
:line => @line + 1)
|
|
738
|
+
end
|
|
739
|
+
|
|
740
|
+
parser = Sass::SCSS::Parser.new(value,
|
|
741
|
+
@options[:filename], @options[:importer],
|
|
742
|
+
@line, to_parser_offset(@offset))
|
|
743
|
+
parsed_value = parser.parse_declaration_value
|
|
744
|
+
end_offset = start_offset + value.length
|
|
745
|
+
elsif value.strip.empty?
|
|
746
|
+
parsed_value = [Sass::Script::Tree::Literal.new(Sass::Script::Value::String.new(""))]
|
|
727
747
|
end_offset = start_offset
|
|
728
748
|
else
|
|
729
|
-
expr = parse_script(value,
|
|
730
|
-
:offset => to_parser_offset(start_offset),
|
|
731
|
-
:css_variable => name.start_with?("--"))
|
|
749
|
+
expr = parse_script(value, :offset => to_parser_offset(start_offset))
|
|
732
750
|
end_offset = expr.source_range.end_pos.offset - 1
|
|
751
|
+
parsed_value = [expr]
|
|
733
752
|
end
|
|
734
|
-
|
|
735
|
-
node = Tree::PropNode.new(parse_interp(name), expr, prop)
|
|
753
|
+
node = Tree::PropNode.new(parse_interp(name), parsed_value, prop)
|
|
736
754
|
node.value_source_range = Sass::Source::Range.new(
|
|
737
755
|
Sass::Source::Position.new(line.index, to_parser_offset(start_offset)),
|
|
738
756
|
Sass::Source::Position.new(line.index, to_parser_offset(end_offset)),
|
|
739
757
|
@options[:filename], @options[:importer])
|
|
740
|
-
if value.strip.empty? && line.children.empty?
|
|
758
|
+
if !node.custom_property? && value.strip.empty? && line.children.empty?
|
|
741
759
|
raise SyntaxError.new(
|
|
742
760
|
"Invalid property: \"#{node.declaration}\" (no value)." +
|
|
743
761
|
node.pseudo_class_selector_message)
|
|
@@ -1154,9 +1172,9 @@ WARNING
|
|
|
1154
1172
|
end
|
|
1155
1173
|
|
|
1156
1174
|
def parse_script(script, options = {})
|
|
1157
|
-
line = options
|
|
1158
|
-
offset = options
|
|
1159
|
-
Script.parse(script, line, offset, @options
|
|
1175
|
+
line = options[:line] || @line
|
|
1176
|
+
offset = options[:offset] || @offset + 1
|
|
1177
|
+
Script.parse(script, line, offset, @options)
|
|
1160
1178
|
end
|
|
1161
1179
|
|
|
1162
1180
|
def format_comment_text(text, silent)
|
data/lib/sass/environment.rb
CHANGED
|
@@ -175,6 +175,10 @@ module Sass
|
|
|
175
175
|
|
|
176
176
|
# A read-only wrapper for a lexical environment for SassScript.
|
|
177
177
|
class ReadOnlyEnvironment < BaseEnvironment
|
|
178
|
+
def initialize(parent = nil, options = nil)
|
|
179
|
+
super
|
|
180
|
+
@content_cached = nil
|
|
181
|
+
end
|
|
178
182
|
# The read-only environment of the caller of this environment's mixin or function.
|
|
179
183
|
#
|
|
180
184
|
# @see BaseEnvironment#caller
|
|
@@ -185,14 +189,31 @@ module Sass
|
|
|
185
189
|
@caller ||= env.is_a?(ReadOnlyEnvironment) ? env : ReadOnlyEnvironment.new(env, env.options)
|
|
186
190
|
end
|
|
187
191
|
|
|
188
|
-
# The
|
|
192
|
+
# The content passed to this environment. If the content's environment isn't already
|
|
193
|
+
# read-only, it's made read-only.
|
|
189
194
|
#
|
|
190
195
|
# @see BaseEnvironment#content
|
|
191
|
-
#
|
|
196
|
+
#
|
|
197
|
+
# @return {[Array<Sass::Tree::Node>, ReadOnlyEnvironment]?} The content nodes and
|
|
198
|
+
# the lexical environment of the content block.
|
|
199
|
+
# Returns `nil` when there is no content in this environment.
|
|
192
200
|
def content
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
# Return the cached content from a previous invocation if any
|
|
202
|
+
return @content if @content_cached
|
|
203
|
+
# get the content with a read-write environment from the superclass
|
|
204
|
+
read_write_content = super
|
|
205
|
+
if read_write_content
|
|
206
|
+
tree, env = read_write_content
|
|
207
|
+
# make the content's environment read-only
|
|
208
|
+
if env && !env.is_a?(ReadOnlyEnvironment)
|
|
209
|
+
env = ReadOnlyEnvironment.new(env, env.options)
|
|
210
|
+
end
|
|
211
|
+
@content_cached = true
|
|
212
|
+
@content = [tree, env]
|
|
213
|
+
else
|
|
214
|
+
@content_cached = true
|
|
215
|
+
@content = nil
|
|
216
|
+
end
|
|
196
217
|
end
|
|
197
218
|
end
|
|
198
219
|
|
data/lib/sass/error.rb
CHANGED
|
@@ -142,7 +142,7 @@ module Sass
|
|
|
142
142
|
msg = lines[0] + lines[1..-1].
|
|
143
143
|
map {|l| "\n" + (" " * "Error: ".size) + l}.join
|
|
144
144
|
"Error: #{msg}" +
|
|
145
|
-
|
|
145
|
+
sass_backtrace.each_with_index.map do |entry, i|
|
|
146
146
|
"\n #{i == 0 ? 'on' : 'from'} line #{entry[:line]}" +
|
|
147
147
|
" of #{entry[:filename] || default_filename}" +
|
|
148
148
|
(entry[:mixin] ? ", in `#{entry[:mixin]}'" : "")
|
|
@@ -186,7 +186,7 @@ END
|
|
|
186
186
|
section = e.sass_template.rstrip.split("\n")[min...line_num + 5]
|
|
187
187
|
return e.sass_backtrace_str if section.nil? || section.empty?
|
|
188
188
|
|
|
189
|
-
e.sass_backtrace_str + "\n\n" +
|
|
189
|
+
e.sass_backtrace_str + "\n\n" + section.each_with_index.
|
|
190
190
|
map {|line, i| "#{line_offset + min + i}: #{line}"}.join("\n")
|
|
191
191
|
end
|
|
192
192
|
end
|
data/lib/sass/exec/base.rb
CHANGED
|
@@ -90,18 +90,9 @@ module Sass::Exec
|
|
|
90
90
|
#
|
|
91
91
|
# @param opts [OptionParser]
|
|
92
92
|
def encoding_option(opts)
|
|
93
|
-
encoding_desc =
|
|
94
|
-
'Does not work in Ruby 1.8.'
|
|
95
|
-
else
|
|
96
|
-
'Specify the default encoding for input files.'
|
|
97
|
-
end
|
|
93
|
+
encoding_desc = 'Specify the default encoding for input files.'
|
|
98
94
|
opts.on('-E', '--default-encoding ENCODING', encoding_desc) do |encoding|
|
|
99
|
-
|
|
100
|
-
$stderr.puts "Specifying the encoding is not supported in ruby 1.8."
|
|
101
|
-
exit 1
|
|
102
|
-
else
|
|
103
|
-
Encoding.default_external = encoding
|
|
104
|
-
end
|
|
95
|
+
Encoding.default_external = encoding
|
|
105
96
|
end
|
|
106
97
|
end
|
|
107
98
|
|
data/lib/sass/features.rb
CHANGED
|
@@ -67,7 +67,7 @@ module Sass
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def public_url(name, sourcemap_directory)
|
|
70
|
-
file_pathname = Sass::Util.cleanpath(
|
|
70
|
+
file_pathname = Sass::Util.cleanpath(File.absolute_path(name, @root))
|
|
71
71
|
return Sass::Util.file_uri_from_path(file_pathname) if sourcemap_directory.nil?
|
|
72
72
|
|
|
73
73
|
sourcemap_pathname = Sass::Util.cleanpath(sourcemap_directory)
|
|
@@ -133,7 +133,7 @@ module Sass
|
|
|
133
133
|
|
|
134
134
|
REDUNDANT_DIRECTORY = /#{Regexp.escape(File::SEPARATOR)}\.#{Regexp.escape(File::SEPARATOR)}/
|
|
135
135
|
# Given a base directory and an `@import`ed name,
|
|
136
|
-
# finds an
|
|
136
|
+
# finds an existent file that matches the name.
|
|
137
137
|
#
|
|
138
138
|
# @param dir [String] The directory relative to which to search.
|
|
139
139
|
# @param name [String] The filename to search for.
|
data/lib/sass/plugin/compiler.rb
CHANGED
|
@@ -303,42 +303,30 @@ module Sass::Plugin
|
|
|
303
303
|
directories += @inferred_directories
|
|
304
304
|
directories = remove_redundant_directories(directories)
|
|
305
305
|
|
|
306
|
-
# A Listen version prior to 2.0 will write a test file to a directory to
|
|
307
|
-
# see if a watcher supports watching that directory. That breaks horribly
|
|
308
|
-
# on read-only directories, so we filter those out.
|
|
309
|
-
unless Sass::Util.listen_geq_2?
|
|
310
|
-
directories = directories.select {|d| File.directory?(d) && File.writable?(d)}
|
|
311
|
-
end
|
|
312
|
-
|
|
313
306
|
# TODO: Keep better track of what depends on what
|
|
314
307
|
# so we don't have to run a global update every time anything changes.
|
|
315
308
|
# XXX The :additional_watch_paths option exists for Compass to use until
|
|
316
309
|
# a deprecated feature is removed. It may be removed without warning.
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
# In Listen 2.0.0 and on, :force_polling is an option. In earlier
|
|
326
|
-
# versions, it's a method on the listener (called below).
|
|
327
|
-
listener_args.last[:force_polling] = true
|
|
328
|
-
end
|
|
310
|
+
directories += Array(options[:additional_watch_paths])
|
|
311
|
+
|
|
312
|
+
options = {
|
|
313
|
+
:relative_paths => false,
|
|
314
|
+
# The native windows listener is much slower than the polling option, according to
|
|
315
|
+
# https://github.com/nex3/sass/commit/a3031856b22bc834a5417dedecb038b7be9b9e3e
|
|
316
|
+
:force_polling => @options[:poll] || Sass::Util.windows?
|
|
317
|
+
}
|
|
329
318
|
|
|
330
|
-
listener = create_listener(*
|
|
319
|
+
listener = create_listener(*directories, options) do |modified, added, removed|
|
|
331
320
|
on_file_changed(individual_files, modified, added, removed)
|
|
332
321
|
yield(modified, added, removed) if block_given?
|
|
333
322
|
end
|
|
334
323
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
324
|
+
begin
|
|
325
|
+
listener.start
|
|
326
|
+
sleep
|
|
327
|
+
rescue Interrupt
|
|
328
|
+
# Squelch Interrupt for clean exit from Listen::Listener
|
|
339
329
|
end
|
|
340
|
-
|
|
341
|
-
listen_to(listener)
|
|
342
330
|
end
|
|
343
331
|
|
|
344
332
|
# Non-destructively modifies \{#options} so that default values are properly set,
|
|
@@ -387,28 +375,10 @@ module Sass::Plugin
|
|
|
387
375
|
|
|
388
376
|
private
|
|
389
377
|
|
|
378
|
+
# This is mocked out in compiler_test.rb.
|
|
390
379
|
def create_listener(*args, &block)
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
# Work around guard/listen#243.
|
|
394
|
-
options = args.pop if args.last.is_a?(Hash)
|
|
395
|
-
args.map do |dir|
|
|
396
|
-
Listen.to(dir, options, &block)
|
|
397
|
-
end
|
|
398
|
-
else
|
|
399
|
-
Listen::Listener.new(*args, &block)
|
|
400
|
-
end
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
def listen_to(listener)
|
|
404
|
-
if Sass::Util.listen_geq_2?
|
|
405
|
-
listener.map {|l| l.start}
|
|
406
|
-
sleep
|
|
407
|
-
else
|
|
408
|
-
listener.start!
|
|
409
|
-
end
|
|
410
|
-
rescue Interrupt
|
|
411
|
-
# Squelch Interrupt for clean exit from Listen::Listener
|
|
380
|
+
require 'listen'
|
|
381
|
+
Listen.to(*args, &block)
|
|
412
382
|
end
|
|
413
383
|
|
|
414
384
|
def remove_redundant_directories(directories)
|
|
@@ -494,7 +464,7 @@ module Sass::Plugin
|
|
|
494
464
|
rendered = engine.render
|
|
495
465
|
end
|
|
496
466
|
rescue StandardError => e
|
|
497
|
-
|
|
467
|
+
compilation_error_occurred = true
|
|
498
468
|
run_compilation_error e, filename, css, sourcemap
|
|
499
469
|
raise e unless options[:full_exception]
|
|
500
470
|
rendered = Sass::SyntaxError.exception_to_css(e, options[:line] || 1)
|
|
@@ -507,14 +477,14 @@ module Sass::Plugin
|
|
|
507
477
|
mapping.to_json(
|
|
508
478
|
:css_path => css, :sourcemap_path => sourcemap, :type => options[:sourcemap]))
|
|
509
479
|
end
|
|
510
|
-
run_updated_stylesheet(filename, css, sourcemap) unless
|
|
480
|
+
run_updated_stylesheet(filename, css, sourcemap) unless compilation_error_occurred
|
|
511
481
|
end
|
|
512
482
|
|
|
513
483
|
def write_file(fileName, content)
|
|
514
484
|
flag = 'w'
|
|
515
485
|
flag = 'wb' if Sass::Util.windows? && options[:unix_newlines]
|
|
516
486
|
File.open(fileName, flag) do |file|
|
|
517
|
-
file.set_encoding(content.encoding)
|
|
487
|
+
file.set_encoding(content.encoding)
|
|
518
488
|
file.print(content)
|
|
519
489
|
end
|
|
520
490
|
end
|
|
@@ -26,8 +26,8 @@ module Sass
|
|
|
26
26
|
clear_callbacks!
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
# An options hash.
|
|
30
|
-
#
|
|
29
|
+
# An options hash. See {file:SASS_REFERENCE.md#Options the Sass options
|
|
30
|
+
# documentation}.
|
|
31
31
|
#
|
|
32
32
|
# @return [{Symbol => Object}]
|
|
33
33
|
def options
|
data/lib/sass/railtie.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Rails 3.0.0.beta.2+, < 3.1
|
|
2
|
-
if defined?(ActiveSupport) &&
|
|
2
|
+
if defined?(ActiveSupport) && ActiveSupport.public_methods.include?(:on_load) &&
|
|
3
3
|
!Sass::Util.ap_geq?('3.1.0.beta')
|
|
4
4
|
require 'sass/plugin/configuration'
|
|
5
5
|
ActiveSupport.on_load(:before_configuration) do
|