sass 3.4.0.rc.1 → 3.4.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86dadd4faf8e93f96f022369b902622f225c18c8
4
- data.tar.gz: da7eab9db6a3ae2c4bb925c5712ed1e6e56aa135
3
+ metadata.gz: 1afd394b8f5238ff1c9946a07f19a8931388586a
4
+ data.tar.gz: 4832e49d858cfd6602d9b1bd53b5e834c48ba86e
5
5
  SHA512:
6
- metadata.gz: bf8198a80fd2741f7692e61345a96feb2013084f9c72633a69d6d4aa678fa816f779e09e1cbc604f6b7323cee7bbf1fb98da1b5d7e4d5a5d900ae2b428d38da2
7
- data.tar.gz: 64a53c27f497151504a188189e70369e1bb57207b7d6f2a3e04b94aa6fc36b29f66ed9151bc8ce175f90bc1b0e893ee7f81dc63d68c4feb6334136649c5cf9f5
6
+ metadata.gz: 3cfae679887b0e482a3a5f95bf20aab324acfade3778e8d3b8bd4ae6cec41a71b9e38618cbed02443226af2ed5815e0486de24384ff1e54f004e19c966022604
7
+ data.tar.gz: cd272dda7c81e9a33885884080f462964db6312f36626df4f61867a4b939f5958d12562b6115438cd8bb15c6fcf5d8378b01952da0773366dbff9f3b1577ae22
@@ -1,4 +1,4 @@
1
- Copyright (c) 2006-2013 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
1
+ Copyright (c) 2006-2013 Hampton Catlin, Natalie Weizenbaum, and Chris Eppstein
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -199,11 +199,11 @@ and now occasionally consults on the language issues. Hampton lives in San
199
199
  Francisco, California and works as VP of Technology
200
200
  at [Moovweb](http://www.moovweb.com/).
201
201
 
202
- [Nathan Weizenbaum](http://nex-3.com) is the primary developer and architect of
203
- Sass. His hard work has kept the project alive by endlessly answering forum
202
+ [Natalie Weizenbaum](http://nex-3.com) is the primary developer and architect of
203
+ Sass. Her hard work has kept the project alive by endlessly answering forum
204
204
  posts, fixing bugs, refactoring, finding speed improvements, writing
205
205
  documentation, implementing new features, and getting Hampton coffee (a fitting
206
- task for a boy-genius). Nathan lives in Seattle, Washington and works on
206
+ task for a girl genius). Natalie lives in Seattle, Washington and works on
207
207
  [Dart](http://dartlang.org) application libraries at Google.
208
208
 
209
209
  [Chris Eppstein](http://acts-as-architect.blogspot.com) is a core contributor to
@@ -214,8 +214,8 @@ his wife and daughter. He is an Engineer for
214
214
  [LinkedIn.com](http://linkedin.com), where one of his responsibilities is to
215
215
  maintain Sass & Compass.
216
216
 
217
- If you use this software, you must pay Hampton a compliment. And
218
- buy Nathan some jelly beans. Maybe pet a kitten. Yeah. Pet that kitty.
217
+ If you use this software, you must pay Hampton a compliment. And buy Natalie
218
+ some candy. Maybe pet a kitten. Yeah. Pet that kitty.
219
219
 
220
220
  Beyond that, the implementation is licensed under the MIT License.
221
221
  Okay, fine, I guess that means compliments aren't __required__.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.4.0.rc.1
1
+ 3.4.0.rc.2
@@ -1 +1 @@
1
- 12 July 2014 01:42:30 UTC
1
+ 26 July 2014 00:40:24 UTC
@@ -69,7 +69,7 @@ END
69
69
  opts.separator 'Common Options:'
70
70
 
71
71
  opts.on('-I', '--load-path PATH', 'Specify a Sass import path.') do |path|
72
- @options[:for_engine][:load_paths] << path
72
+ (@options[:for_engine][:load_paths] ||= []) << path
73
73
  end
74
74
 
75
75
  opts.on('-r', '--require LIB', 'Require a Ruby library before running Sass.') do |lib|
@@ -159,6 +159,11 @@ END
159
159
  $stderr.puts "Unknown sourcemap type #{type}.\n\n"
160
160
  $stderr.puts opts
161
161
  exit
162
+ elsif type.nil?
163
+ Sass::Util.sass_warn <<MESSAGE.rstrip
164
+ DEPRECATION WARNING: Passing --sourcemap without a value is deprecated.
165
+ Sourcemaps are now generated by default, so this flag has no effect.
166
+ MESSAGE
162
167
  end
163
168
 
164
169
  @options[:sourcemap] = (type || :auto).to_sym
@@ -11,6 +11,7 @@ module Sass
11
11
  global-variable-shadowing
12
12
  extend-selector-pseudoclass
13
13
  units-level-3
14
+ at-error
14
15
  }]
15
16
 
16
17
  # Check if a feature exists by name. This is used to implement
@@ -1514,6 +1514,7 @@ module Sass::Script
1514
1514
  end_at = number(-1) if end_at.nil?
1515
1515
  assert_unit end_at, nil, "end-at"
1516
1516
 
1517
+ return Sass::Script::Value::String.new("", string.type) if end_at.value == 0
1517
1518
  s = start_at.value > 0 ? start_at.value - 1 : start_at.value
1518
1519
  e = end_at.value > 0 ? end_at.value - 1 : end_at.value
1519
1520
  s = string.value.length + s if s < 0
@@ -1578,8 +1579,8 @@ module Sass::Script
1578
1579
  #
1579
1580
  # The following features are supported:
1580
1581
  #
1581
- # * `global-variable-exists` indicates that a local variable will shadow a
1582
- # global variable unless `!global` is used.
1582
+ # * `global-variable-shadowing` indicates that a local variable will shadow
1583
+ # a global variable unless `!global` is used.
1583
1584
  #
1584
1585
  # * `extend-selector-pseudoclass` indicates that `@extend` will reach into
1585
1586
  # selector pseudoclasses like `:not`.
@@ -1589,6 +1590,8 @@ module Sass::Script
1589
1590
  #
1590
1591
  # [Values and Units Level 3]: http://www.w3.org/TR/css3-values/
1591
1592
  #
1593
+ # * `at-error` indicates that the Sass `@error` directive is supported.
1594
+ #
1592
1595
  # @example
1593
1596
  # feature-exists(some-feature-that-exists) => true
1594
1597
  # feature-exists(what-is-this-i-dont-know) => false
@@ -2461,7 +2464,7 @@ module Sass::Script
2461
2464
  #
2462
2465
  # @example
2463
2466
  # selector-replace(".foo .bar", ".bar", ".baz") => ".foo .baz"
2464
- # selector-replace(".foo.bar.baz", ".foo.baz", ".qux") => ".foo.qux"
2467
+ # selector-replace(".foo.bar.baz", ".foo.baz", ".qux") => ".bar.qux"
2465
2468
  #
2466
2469
  # @overload selector_replace($selector, $original, $replacement)
2467
2470
  # @param $selector [Sass::Script::Value::String, Sass::Script::Value::List]
@@ -2569,7 +2572,7 @@ module Sass::Script
2569
2572
  # is-superselector(".foo", ".foo.bar") => true
2570
2573
  # is-superselector(".foo.bar", ".foo") => false
2571
2574
  # is-superselector(".bar", ".foo .bar") => true
2572
- # is-superselector(".foo .bar", ".bar") => true
2575
+ # is-superselector(".foo .bar", ".bar") => false
2573
2576
  #
2574
2577
  # @overload is_superselector($super, $sub)
2575
2578
  # @param $super [Sass::Script::Value::String, Sass::Script::Value::List]
@@ -278,8 +278,9 @@ module Sass
278
278
  line, offset = @line, @offset
279
279
  return unless scan(STRING_REGULAR_EXPRESSIONS[re][open])
280
280
  if @scanner[0] =~ /([^\\]|^)\n/
281
+ filename = @options[:filename]
281
282
  Sass::Util.sass_warn <<MESSAGE
282
- DEPRECATION WARNING on line #{line}, column #{offset}#{" of #{@filename}" if @filename}:
283
+ DEPRECATION WARNING on line #{line}, column #{offset}#{" of #{filename}" if filename}:
283
284
  Unescaped multiline strings are deprecated and will be removed in a future version of Sass.
284
285
  To include a newline in a string, use "\\a" or "\\a " as in CSS.
285
286
  MESSAGE
@@ -109,7 +109,7 @@ If you really want to use the color value here, use `#{alternative.to_sass}'.
109
109
  MESSAGE
110
110
  end
111
111
 
112
- res << (val.is_a?(Sass::Script::Value::String) ? val.value : val.to_s)
112
+ res << val.to_s(:quote => :none)
113
113
  res << " " if @after && @whitespace_after
114
114
  res << @after.perform(environment).to_s if @after
115
115
  opts(Sass::Script::Value::String.new(res))
@@ -81,7 +81,7 @@ module Sass::Script::Tree
81
81
  before = @before.perform(environment)
82
82
  res << before.value
83
83
  mid = @mid.perform(environment)
84
- res << (mid.is_a?(Sass::Script::Value::String) ? mid.value : mid.to_s)
84
+ res << (mid.is_a?(Sass::Script::Value::String) ? mid.value : mid.to_s(:quote => :none))
85
85
  res << @after.perform(environment).value
86
86
  opts(Sass::Script::Value::String.new(res, before.type))
87
87
  end
@@ -96,10 +96,8 @@ MSG
96
96
  # @return [Script::Value::String] A string containing both values
97
97
  # without any separation
98
98
  def plus(other)
99
- if other.is_a?(Sass::Script::Value::String)
100
- return Sass::Script::Value::String.new(to_s + other.value, other.type)
101
- end
102
- Sass::Script::Value::String.new(to_s + other.to_s)
99
+ type = other.is_a?(Sass::Script::Value::String) ? other.type : :identifier
100
+ Sass::Script::Value::String.new(to_s(:quote => :none) + other.to_s(:quote => :none), type)
103
101
  end
104
102
 
105
103
  # The SassScript `-` operation.
@@ -213,6 +211,9 @@ MSG
213
211
  # Returns the string representation of this value
214
212
  # as it would be output to the CSS document.
215
213
  #
214
+ # @options opts :quote [String]
215
+ # The preferred quote style for quoted strings. If `:none`, strings are
216
+ # always emitted unquoted.
216
217
  # @return [String]
217
218
  def to_s(opts = {})
218
219
  Sass::Util.abstract(self)
@@ -441,7 +441,7 @@ module Sass::Script::Value
441
441
  end
442
442
  attrs[:alpha] ||= alpha
443
443
 
444
- Color.new(attrs, :allow_both_rgb_and_hsl)
444
+ Color.new(attrs, nil, :allow_both_rgb_and_hsl)
445
445
  end
446
446
 
447
447
  # The SassScript `+` operation.
@@ -71,13 +71,17 @@ module Sass::Script::Value
71
71
 
72
72
  # @see Value#plus
73
73
  def plus(other)
74
- other_str = other.is_a?(Sass::Script::Value::String) ? other.value : other.to_s
75
- Sass::Script::Value::String.new(value + other_str, type)
74
+ other_value = if other.is_a?(Sass::Script::Value::String)
75
+ other.value
76
+ else
77
+ other.to_s(:quote => :none)
78
+ end
79
+ Sass::Script::Value::String.new(value + other_value, type)
76
80
  end
77
81
 
78
82
  # @see Value#to_s
79
83
  def to_s(opts = {})
80
- return @value.gsub(/\n\s*/, ' ') if @type == :identifier
84
+ return @value.gsub(/\n\s*/, ' ') if opts[:quote] == :none || @type == :identifier
81
85
  Sass::Script::Value::String.quote(value, opts[:quote])
82
86
  end
83
87
 
@@ -142,8 +142,9 @@ module Sass
142
142
  def to_sass_script
143
143
  Sass::Script::Value::List.new(members.map do |seq|
144
144
  Sass::Script::Value::List.new(seq.members.map do |component|
145
+ next if component == "\n"
145
146
  Sass::Script::Value::String.new(component.to_s)
146
- end, :space)
147
+ end.compact, :space)
147
148
  end, :comma)
148
149
  end
149
150
 
@@ -203,8 +203,7 @@ module Sass::Supports
203
203
  end
204
204
 
205
205
  def perform(env)
206
- val = value.perform(env)
207
- @resolved_value = val.is_a?(Sass::Script::Value::String) ? val.value : val.to_s
206
+ @resolved_value = value.perform(env).to_s(:quote => :none)
208
207
  end
209
208
 
210
209
  def to_css
@@ -515,10 +515,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
515
515
  def run_interp_no_strip(text)
516
516
  text.map do |r|
517
517
  next r if r.is_a?(String)
518
- val = r.perform(@environment)
519
- # Interpolated strings should never render with quotes
520
- next val.value if val.is_a?(Sass::Script::Value::String)
521
- val.to_s
518
+ r.perform(@environment).to_s(:quote => :none)
522
519
  end.join
523
520
  end
524
521
 
@@ -2014,10 +2014,10 @@ $var: "bar"
2014
2014
  SASS
2015
2015
  end
2016
2016
 
2017
- def test_interpolation_doesnt_deep_unquote_strings
2017
+ def test_interpolation_deep_unquotes_strings
2018
2018
  assert_equal(<<CSS, render(<<SASS))
2019
2019
  .foo {
2020
- a: "bar" "baz"; }
2020
+ a: bar baz; }
2021
2021
  CSS
2022
2022
  .foo
2023
2023
  a: \#{"bar" "baz"}
@@ -945,6 +945,7 @@ class SassFunctionTest < MiniTest::Test
945
945
  assert_equal('ab', evaluate('str-slice(abcd,1,2)')) # for completeness
946
946
  assert_equal('abcd', evaluate('str-slice(abcd,1,4)')) # at the end points
947
947
  assert_equal('abcd', evaluate('str-slice(abcd,0,4)')) # when start is before the start of the string
948
+ assert_equal('', evaluate('str-slice(abcd,1,0)')) # when end is before the start of the string
948
949
  assert_equal('abcd', evaluate('str-slice(abcd,1,100)')) # when end is past the end of the string
949
950
  assert_equal('', evaluate('str-slice(abcd,2,1)')) # when end is before start
950
951
  assert_equal('"bc"', evaluate('str-slice("abcd",2,3)')) # when used with a quoted string
@@ -206,6 +206,11 @@ class SassScriptTest < MiniTest::Test
206
206
  assert_equal "foo1bar5baz4bang", resolve('\'foo#{1 + "bar#{2 + 3}baz" + 4}bang\'')
207
207
  end
208
208
 
209
+ def test_interpolation_with_newline
210
+ assert_equal "\nbang", resolve('"#{"\a "}bang"')
211
+ assert_equal "\n\nbang", resolve('"#{"\a "}\a bang"')
212
+ end
213
+
209
214
  def test_rule_interpolation
210
215
  assert_equal(<<CSS, render(<<SASS))
211
216
  foo bar baz bang {
@@ -342,6 +347,7 @@ SASS
342
347
  assert_equal '"foo", "bar"', resolve("'foo' , 'bar'")
343
348
  assert_equal "true, 1", resolve('true , 1')
344
349
  assert_equal "foobar", resolve('"foo" + "bar"')
350
+ assert_equal "\nfoo\nxyz", resolve('"\a foo" + "\axyz"')
345
351
  assert_equal "true1", resolve('true + 1')
346
352
  assert_equal '"foo"-"bar"', resolve("'foo' - 'bar'")
347
353
  assert_equal "true-1", resolve('true - 1')
@@ -647,6 +653,18 @@ SASS
647
653
  assert_equal ".bar", resolve("nth(nth(&, 1), 3)", {}, env)
648
654
  end
649
655
 
656
+ def test_selector_with_newlines
657
+ env = Sass::Environment.new
658
+ env.selector = selector(".foo.bar\n.baz.bang,\n\n.bip.bop")
659
+ assert_equal ".foo.bar .baz.bang, .bip.bop", resolve("&", {}, env)
660
+ assert_equal ".foo.bar .baz.bang", resolve("nth(&, 1)", {}, env)
661
+ assert_equal ".bip.bop", resolve("nth(&, 2)", {}, env)
662
+ assert_equal ".foo.bar", resolve("nth(nth(&, 1), 1)", {}, env)
663
+ assert_equal ".baz.bang", resolve("nth(nth(&, 1), 2)", {}, env)
664
+ assert_equal ".bip.bop", resolve("nth(nth(&, 2), 1)", {}, env)
665
+ assert_equal "string", resolve("type-of(nth(nth(&, 1), 1))", {}, env)
666
+ end
667
+
650
668
  def test_setting_global_variable_globally
651
669
  assert_no_warning {assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))}
652
670
  .foo {
@@ -822,6 +840,25 @@ SCSS
822
840
 
823
841
  # Regression Tests
824
842
 
843
+ def test_repeatedly_modified_color
844
+ assert_equal(<<CSS, render(<<SASS))
845
+ a {
846
+ link-color: #161C14;
847
+ link-color-hover: black;
848
+ link-color-tap: rgba(22, 28, 20, 0.3); }
849
+ CSS
850
+ $green: #161C14
851
+ $link-color: $green
852
+ $link-color-hover: darken($link-color, 10%)
853
+ $link-color-tap: rgba($green, 0.3)
854
+
855
+ a
856
+ link-color: $link-color
857
+ link-color-hover: $link-color-hover
858
+ link-color-tap: $link-color-tap
859
+ SASS
860
+ end
861
+
825
862
  def test_inspect_divided_numbers
826
863
  assert_equal "1px/2px", resolve("inspect(1px/2px)")
827
864
  assert_equal "0.5", resolve("inspect((1px/2px))")
@@ -3511,7 +3511,7 @@ SCSS
3511
3511
 
3512
3512
  def test_raw_newline_warning
3513
3513
  assert_warning(<<MESSAGE.rstrip) {assert_equal(<<CSS, render(<<SCSS))}
3514
- DEPRECATION WARNING on line 2, column 9:
3514
+ DEPRECATION WARNING on line 2, column 9 of #{filename_for_test :scss}:
3515
3515
  Unescaped multiline strings are deprecated and will be removed in a future version of Sass.
3516
3516
  To include a newline in a string, use "\\a" or "\\a " as in CSS.
3517
3517
  MESSAGE
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0.rc.1
4
+ version: 3.4.0.rc.2
5
5
  platform: ruby
6
6
  authors:
7
- - Nathan Weizenbaum
7
+ - Natalie Weizenbaum
8
8
  - Chris Eppstein
9
9
  - Hampton Catlin
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-07-12 00:00:00.000000000 Z
13
+ date: 2014-07-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: yard