sass 3.1.19 → 3.1.20

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/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.19
1
+ 3.1.20
@@ -135,6 +135,9 @@ module Sass::Script
135
135
  # \{#join join($list1, $list2, \[$separator\])}
136
136
  # : Joins together two lists into one.
137
137
  #
138
+ # \{#append append($list1, $val, \[$separator\])}
139
+ # : Appends a single value onto the end of a list.
140
+ #
138
141
  # ## Introspection Functions
139
142
  #
140
143
  # \{#type_of type-of($value)}
@@ -573,7 +576,10 @@ module Sass::Script
573
576
  return Sass::Script::String.new("alpha(#{args.map {|a| a.to_s}.join(", ")})")
574
577
  end
575
578
 
576
- opacity(*args)
579
+ raise ArgumentError.new("wrong number of arguments (#{args.size} for 1)") if args.size != 1
580
+
581
+ assert_type args.first, :Color
582
+ Sass::Script::Number.new(args.first.alpha)
577
583
  end
578
584
  declare :alpha, [:color]
579
585
 
@@ -586,6 +592,7 @@ module Sass::Script
586
592
  # @see #transparentize
587
593
  # @raise [ArgumentError] If `color` isn't a color
588
594
  def opacity(color)
595
+ return Sass::Script::String.new("opacity(#{color})") if color.is_a?(Sass::Script::Number)
589
596
  assert_type color, :Color
590
597
  Sass::Script::Number.new(color.alpha)
591
598
  end
@@ -676,16 +683,21 @@ module Sass::Script
676
683
  # @example
677
684
  # saturate(hsl(120, 30%, 90%), 20%) => hsl(120, 50%, 90%)
678
685
  # saturate(#855, 20%) => #9e3f3f
679
- # @param color [Color]
680
- # @param amount [Number]
681
- # @return [Color]
682
- # @see #desaturate
683
- # @raise [ArgumentError] If `color` isn't a color,
684
- # or `number` isn't a number between 0% and 100%
685
- def saturate(color, amount)
686
+ # @overload saturate(color, amount)
687
+ # @param color [Color]
688
+ # @param amount [Number]
689
+ # @return [Color]
690
+ # @see #desaturate
691
+ # @raise [ArgumentError] If `color` isn't a color,
692
+ # or `number` isn't a number between 0% and 100%
693
+ def saturate(color, amount = nil)
694
+ # Support the filter effects definition of saturate.
695
+ # https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html
696
+ return Sass::Script::String.new("saturate(#{color})") if amount.nil?
686
697
  _adjust(color, amount, :saturation, 0..100, :+, "%")
687
698
  end
688
699
  declare :saturate, [:color, :amount]
700
+ declare :saturate, [:amount]
689
701
 
690
702
  # Makes a color less saturated.
691
703
  # Takes a color and an amount between 0% and 100%,
@@ -969,21 +981,13 @@ module Sass::Script
969
981
  declare :mix, [:color_1, :color_2]
970
982
  declare :mix, [:color_1, :color_2, :weight]
971
983
 
972
- # @overload grayscale(color)
973
- # Converts a color to grayscale.
974
- # This is identical to `desaturate(color, 100%)`.
975
- #
976
- # @param color [Color]
977
- # @return [Color]
978
- # @raise [ArgumentError] if `color` isn't a color
979
- # @see #desaturate
980
- # @overload grayscale(number)
981
- # Returns an unquoted string `grayscale(number)`, as though the function
982
- # were not defined. This is for the `grayscale` function used in
983
- # `-webkit-filter`.
984
+ # Converts a color to grayscale.
985
+ # This is identical to `desaturate(color, 100%)`.
984
986
  #
985
- # @param number [Number]
986
- # @return [Sass::Script::String]
987
+ # @param color [Color]
988
+ # @return [Color]
989
+ # @raise [ArgumentError] if `color` isn't a color
990
+ # @see #desaturate
987
991
  def grayscale(color)
988
992
  return Sass::Script::String.new("grayscale(#{color})") if color.is_a?(Sass::Script::Number)
989
993
  desaturate color, Number.new(100)
@@ -1009,6 +1013,8 @@ module Sass::Script
1009
1013
  # @return [Color]
1010
1014
  # @raise [ArgumentError] if `color` isn't a color
1011
1015
  def invert(color)
1016
+ return Sass::Script::String.new("invert(#{color})") if color.is_a?(Sass::Script::Number)
1017
+
1012
1018
  assert_type color, :Color
1013
1019
  color.with(
1014
1020
  :red => (255 - color.red),
@@ -1271,14 +1277,14 @@ module Sass::Script
1271
1277
  # append(10px 20px, 30px) => 10px 20px 30px
1272
1278
  # append((blue, red), green) => blue, red, green
1273
1279
  # append(10px 20px, 30px 40px) => 10px 20px (30px 40px)
1274
- # join(10px, 20px, comma) => 10px, 20px
1275
- # join((blue, red), green, space) => blue red green
1276
- # @overload join(list, val, separator: auto)
1277
- # @param list1 [Literal] The first list to join
1278
- # @param list2 [Literal] The second list to join
1280
+ # append(10px, 20px, comma) => 10px, 20px
1281
+ # append((blue, red), green, space) => blue red green
1282
+ # @overload append(list, val, separator: auto)
1283
+ # @param list [Literal] The list to add the value to
1284
+ # @param val [Literal] The value to add to the end of the list
1279
1285
  # @param separator [String] How the list separator (comma or space) should be determined.
1280
1286
  # If this is `comma` or `space`, that is always the separator;
1281
- # if this is `auto` (the default), the separator is determined as explained above.
1287
+ # if this is `auto` (the default), the separator is the same as that used by the list.
1282
1288
  def append(list, val, separator = Sass::Script::String.new("auto"))
1283
1289
  assert_type separator, :String
1284
1290
  unless %w[auto space comma].include?(separator.value)
@@ -672,7 +672,7 @@ MESSAGE
672
672
  val = interp_ident || expr!(:interp_string)
673
673
  ss
674
674
  end
675
- tok(/\]/)
675
+ tok!(/\]/)
676
676
 
677
677
  Selector::Attribute.new(merge(name), merge(ns), op, merge(val))
678
678
  end
data/lib/sass/scss/rx.rb CHANGED
@@ -51,6 +51,8 @@ module Sass
51
51
  UNICODE = /\\#{H}{1,6}[ \t\r\n\f]?/
52
52
  s = if Sass::Util.ruby1_8?
53
53
  '\200-\377'
54
+ elsif Sass::Util.macruby?
55
+ '\u0080-\uD7FF\uE000-\uFFFD\U00010000-\U0010FFFF'
54
56
  else
55
57
  '\u{80}-\u{D7FF}\u{E000}-\u{FFFD}\u{10000}-\u{10FFFF}'
56
58
  end
data/lib/sass/util.rb CHANGED
@@ -439,9 +439,9 @@ module Sass
439
439
  # Like `Dir.glob`, but works with backslash-separated paths on Windows.
440
440
  #
441
441
  # @param path [String]
442
- def glob(path)
442
+ def glob(path, &block)
443
443
  path = path.gsub('\\', '/') if windows?
444
- Dir.glob(path)
444
+ Dir.glob(path, &block)
445
445
  end
446
446
 
447
447
  ## Cross-Ruby-Version Compatibility
@@ -466,6 +466,13 @@ module Sass
466
466
  ruby1_8? && Sass::Util::RUBY_VERSION[2] < 7
467
467
  end
468
468
 
469
+ # Whether or not this is running under MacRuby.
470
+ #
471
+ # @return [Boolean]
472
+ def macruby?
473
+ RUBY_ENGINE == 'macruby'
474
+ end
475
+
469
476
  # Checks that the encoding of a string is valid in Ruby 1.9
470
477
  # and cleans up potential encoding gotchas like the UTF-8 BOM.
471
478
  # If it's not, yields an error string describing the invalid character
@@ -568,7 +575,7 @@ MSG
568
575
  Regexp.new(/\A(?:#{_enc("\uFEFF", e)})?#{
569
576
  _enc('@charset "', e)}(.*?)#{_enc('"', e)}|\A(#{
570
577
  _enc("\uFEFF", e)})/)
571
- rescue Encoding::ConverterNotFound => _
578
+ rescue Encoding::ConverterNotFoundError => _
572
579
  nil # JRuby on Java 5 doesn't support UTF-32
573
580
  rescue
574
581
  # /\A@charset "(.*?)"/
@@ -312,6 +312,18 @@ class SassFunctionTest < Test::Unit::TestCase
312
312
  assert_error_message("12 is not a color for `alpha'", "alpha(12)")
313
313
  end
314
314
 
315
+ def test_opacity
316
+ assert_equal("1", evaluate("opacity(#123456)"))
317
+ assert_equal("0.34", evaluate("opacity(rgba(0, 1, 2, 0.34))"))
318
+ assert_equal("0", evaluate("opacity(hsla(0, 1, 2, 0))"))
319
+ assert_equal("0", evaluate("opacity($color: hsla(0, 1, 2, 0))"))
320
+ assert_equal("opacity(20%)", evaluate("opacity(20%)"))
321
+ end
322
+
323
+ def test_opacity_exception
324
+ assert_error_message("\"foo\" is not a color for `opacity'", "opacity(foo)")
325
+ end
326
+
315
327
  def test_opacify
316
328
  assert_equal("rgba(0, 0, 0, 0.75)", evaluate("opacify(rgba(0, 0, 0, 0.5), 0.25)"))
317
329
  assert_equal("rgba(0, 0, 0, 0.3)", evaluate("opacify(rgba(0, 0, 0, 0.2), 0.1)"))
@@ -411,6 +423,7 @@ class SassFunctionTest < Test::Unit::TestCase
411
423
  assert_equal("#88aa88", evaluate("saturate(#8a8, 0%)"))
412
424
  assert_equal("rgba(158, 63, 63, 0.5)", evaluate("saturate(rgba(136, 85, 85, 0.5), 20%)"))
413
425
  assert_equal("rgba(158, 63, 63, 0.5)", evaluate("saturate($color: rgba(136, 85, 85, 0.5), $amount: 20%)"))
426
+ assert_equal("saturate(50%)", evaluate("saturate(50%)"))
414
427
  end
415
428
 
416
429
  def test_saturate_tests_bounds
@@ -797,6 +810,7 @@ class SassFunctionTest < Test::Unit::TestCase
797
810
  def test_invert
798
811
  assert_equal("#112233", evaluate("invert(#edc)"))
799
812
  assert_equal("rgba(245, 235, 225, 0.5)", evaluate("invert(rgba(10, 20, 30, 0.5))"))
813
+ assert_equal("invert(20%)", evaluate("invert(20%)"))
800
814
  end
801
815
 
802
816
  def test_invert_tests_types
@@ -946,6 +946,10 @@ SCSS
946
946
 
947
947
  ## Regressions
948
948
 
949
+ def test_selector_without_closing_bracket
950
+ assert_not_parses('"]"', "foo[bar <err>{a: b}")
951
+ end
952
+
949
953
  def test_closing_line_comment_end_with_compact_output
950
954
  assert_equal(<<CSS, render(<<SCSS, :style => :compact))
951
955
  /* foo */
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass
3
3
  version: !ruby/object:Gem::Version
4
- hash: 37
4
+ hash: 43
5
5
  prerelease: false
6
6
  segments:
7
7
  - 3
8
8
  - 1
9
- - 19
10
- version: 3.1.19
9
+ - 20
10
+ version: 3.1.20
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nathan Weizenbaum
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-05-25 00:00:00 -07:00
20
+ date: 2012-06-29 00:00:00 -07:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency