sass 3.3.0.alpha.177 → 3.3.0.alpha.181
Sign up to get free protection for your applications and to get access to all the features.
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/engine.rb +1 -1
- data/lib/sass/script/functions.rb +10 -8
- data/lib/sass/selector/sequence.rb +11 -4
- data/test/sass/extend_test.rb +37 -0
- data/test/sass/functions_test.rb +5 -3
- data/test/sass/source_map_test.rb +29 -29
- metadata +5 -5
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
dca1498acda9d3549cc10e87045f75516e494284
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.3.0.alpha.
|
1
|
+
3.3.0.alpha.181
|
data/VERSION_DATE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
17 June 2013 21:59:02 GMT
|
data/lib/sass/engine.rb
CHANGED
@@ -352,7 +352,7 @@ ERR
|
|
352
352
|
compressed = @options[:style] == :compressed
|
353
353
|
rendered << "\n" if rendered[-1] != ?\n
|
354
354
|
rendered << "\n" unless compressed
|
355
|
-
rendered << "
|
355
|
+
rendered << "/*# sourceMappingURL="
|
356
356
|
rendered << Sass::Util.escape_uri(sourcemap_uri)
|
357
357
|
rendered << " */"
|
358
358
|
rendered = encode_and_set_charset(rendered)
|
@@ -1481,28 +1481,30 @@ module Sass::Script
|
|
1481
1481
|
# Gets the nth item in a list.
|
1482
1482
|
#
|
1483
1483
|
# Note that unlike some languages, the first item in a Sass list is number 1,
|
1484
|
-
# the second number 2, and so forth.
|
1484
|
+
# the second number 2, and so forth. You can also use negative numbers to
|
1485
|
+
# count from the end of the list. So -1 is the last item, -2 is the
|
1486
|
+
# second-to-last item, etc.
|
1485
1487
|
#
|
1486
1488
|
# @example
|
1487
1489
|
# nth(10px 20px 30px, 1) => 10px
|
1488
1490
|
# nth((Helvetica, Arial, sans-serif), 3) => sans-serif
|
1491
|
+
# nth((red, green, blue), -2) => green
|
1489
1492
|
# @param list [Value] The list
|
1490
1493
|
# @param n [Sass::Script::Value::Number] The index into the list
|
1491
1494
|
# @return [Sass::Script::Value::Base] The nth item in the list
|
1492
|
-
# @raise [ArgumentError] If `n` isn't an integer between 1 and the list's length.
|
1495
|
+
# @raise [ArgumentError] If `n` isn't an integer whose absolute value is between 1 and the list's length.
|
1493
1496
|
def nth(list, n)
|
1494
1497
|
assert_type n, :Number
|
1495
|
-
if !n.int?
|
1496
|
-
raise ArgumentError.new("List index #{n} must be
|
1497
|
-
elsif n.to_i < 1
|
1498
|
-
raise ArgumentError.new("List index #{n} must be greater than or equal to 1")
|
1498
|
+
if !n.int? || n.to_i == 0
|
1499
|
+
raise ArgumentError.new("List index #{n} must be a non-zero integer")
|
1499
1500
|
elsif list.to_a.size == 0
|
1500
1501
|
raise ArgumentError.new("List index is #{n} but list has no items")
|
1501
|
-
elsif n.to_i > (size = list.to_a.size)
|
1502
|
+
elsif n.to_i.abs > (size = list.to_a.size)
|
1502
1503
|
raise ArgumentError.new("List index is #{n} but list is only #{size} item#{'s' if size != 1} long")
|
1503
1504
|
end
|
1504
1505
|
|
1505
|
-
|
1506
|
+
index = n.to_i > 0 ? n.to_i - 1 : n.to_i
|
1507
|
+
list.to_a[index]
|
1506
1508
|
end
|
1507
1509
|
declare :nth, [:list, :n]
|
1508
1510
|
|
@@ -437,15 +437,21 @@ module Sass
|
|
437
437
|
# @param seqses [Array<Array<Array<SimpleSequence or String>>>]
|
438
438
|
# @return [Array<Array<Array<SimpleSequence or String>>>]
|
439
439
|
def trim(seqses)
|
440
|
-
# Avoid truly horrific quadratic behavior.
|
440
|
+
# Avoid truly horrific quadratic behavior. TODO: I think there
|
441
441
|
# may be a way to get perfect trimming without going quadratic.
|
442
442
|
return seqses if seqses.size > 100
|
443
|
+
|
444
|
+
# Keep the results in a separate array so we can be sure we aren't
|
445
|
+
# comparing against an already-trimmed selector. This ensures that two
|
446
|
+
# identical selectors don't mutually trim one another.
|
447
|
+
result = seqses.dup
|
448
|
+
|
443
449
|
# This is n^2 on the sequences, but only comparing between
|
444
450
|
# separate sequences should limit the quadratic behavior.
|
445
|
-
seqses.
|
446
|
-
seqs1.reject do |seq1|
|
451
|
+
seqses.each_with_index do |seqs1, i|
|
452
|
+
result[i] = seqs1.reject do |seq1|
|
447
453
|
min_spec = _sources(seq1).map {|seq| seq.specificity}.min || 0
|
448
|
-
|
454
|
+
result.any? do |seqs2|
|
449
455
|
next if seqs1.equal?(seqs2)
|
450
456
|
# Second Law of Extend: the specificity of a generated selector
|
451
457
|
# should never be less than the specificity of the extending
|
@@ -456,6 +462,7 @@ module Sass
|
|
456
462
|
end
|
457
463
|
end
|
458
464
|
end
|
465
|
+
result
|
459
466
|
end
|
460
467
|
|
461
468
|
def _hash
|
data/test/sass/extend_test.rb
CHANGED
@@ -1116,6 +1116,43 @@ SCSS
|
|
1116
1116
|
|
1117
1117
|
# Regression Tests
|
1118
1118
|
|
1119
|
+
def test_nested_sibling_extend
|
1120
|
+
assert_equal <<CSS, render(<<SCSS)
|
1121
|
+
.parent .bar, .parent .foo {
|
1122
|
+
width: 2000px; }
|
1123
|
+
CSS
|
1124
|
+
.foo {@extend .bar}
|
1125
|
+
|
1126
|
+
.parent {
|
1127
|
+
.bar {
|
1128
|
+
width: 2000px;
|
1129
|
+
}
|
1130
|
+
.foo {
|
1131
|
+
@extend .bar
|
1132
|
+
}
|
1133
|
+
}
|
1134
|
+
SCSS
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
def test_parent_and_sibling_extend
|
1138
|
+
assert_equal <<CSS, render(<<SCSS)
|
1139
|
+
.parent1 .parent2 .child1.child2, .parent2 .parent1 .child1.child2 {
|
1140
|
+
c: d; }
|
1141
|
+
CSS
|
1142
|
+
%foo %bar%baz {c: d}
|
1143
|
+
|
1144
|
+
.parent1 {
|
1145
|
+
@extend %foo;
|
1146
|
+
.child1 {@extend %bar}
|
1147
|
+
}
|
1148
|
+
|
1149
|
+
.parent2 {
|
1150
|
+
@extend %foo;
|
1151
|
+
.child2 {@extend %baz}
|
1152
|
+
}
|
1153
|
+
SCSS
|
1154
|
+
end
|
1155
|
+
|
1119
1156
|
def test_nested_extend_specificity
|
1120
1157
|
assert_equal <<CSS, render(<<SCSS)
|
1121
1158
|
a :b, a :b:c {
|
data/test/sass/functions_test.rb
CHANGED
@@ -1017,12 +1017,14 @@ MSG
|
|
1017
1017
|
def test_nth
|
1018
1018
|
assert_equal("1", evaluate("nth(1 2 3, 1)"))
|
1019
1019
|
assert_equal("2", evaluate("nth(1 2 3, 2)"))
|
1020
|
+
assert_equal("3", evaluate("nth(1 2 3, -1)"))
|
1021
|
+
assert_equal("1", evaluate("nth(1 2 3, -3)"))
|
1020
1022
|
assert_equal("3", evaluate("nth((1, 2, 3), 3)"))
|
1021
1023
|
assert_equal("foo", evaluate("nth(foo, 1)"))
|
1022
1024
|
assert_equal("bar baz", evaluate("nth(foo (bar baz) bang, 2)"))
|
1023
|
-
assert_error_message("List index 0 must be
|
1024
|
-
assert_error_message("List index -10
|
1025
|
-
assert_error_message("List index 1.5 must be
|
1025
|
+
assert_error_message("List index 0 must be a non-zero integer for `nth'", "nth(foo, 0)")
|
1026
|
+
assert_error_message("List index is -10 but list is only 1 item long for `nth'", "nth(foo, -10)")
|
1027
|
+
assert_error_message("List index 1.5 must be a non-zero integer for `nth'", "nth(foo, 1.5)")
|
1026
1028
|
assert_error_message("List index is 5 but list is only 4 items long for `nth'", "nth(1 2 3 4, 5)")
|
1027
1029
|
assert_error_message("List index is 2 but list is only 1 item long for `nth'", "nth(foo, 2)")
|
1028
1030
|
assert_error_message("List index is 1 but list has no items for `nth'", "nth((), 1)")
|
@@ -24,7 +24,7 @@ a {
|
|
24
24
|
/* SOME COMMENT */
|
25
25
|
font-size: 12px; }
|
26
26
|
|
27
|
-
|
27
|
+
/*# sourceMappingURL=test.css.map */
|
28
28
|
CSS
|
29
29
|
{
|
30
30
|
"version": "3",
|
@@ -47,7 +47,7 @@ a {
|
|
47
47
|
/* SOME COMMENT */
|
48
48
|
font-size: 12px; }
|
49
49
|
|
50
|
-
|
50
|
+
/*# sourceMappingURL=test.css.map */
|
51
51
|
CSS
|
52
52
|
{
|
53
53
|
"version": "3",
|
@@ -72,7 +72,7 @@ a {
|
|
72
72
|
/* SOME COMMENT */
|
73
73
|
font-size: 12px; }
|
74
74
|
|
75
|
-
|
75
|
+
/*# sourceMappingURL=style.css.map */
|
76
76
|
CSS
|
77
77
|
{
|
78
78
|
"version": "3",
|
@@ -96,7 +96,7 @@ a {
|
|
96
96
|
/* SOME COMMENT */
|
97
97
|
font-size: 12px; }
|
98
98
|
|
99
|
-
|
99
|
+
/*# sourceMappingURL=style.css.map */
|
100
100
|
CSS
|
101
101
|
{
|
102
102
|
"version": "3",
|
@@ -118,7 +118,7 @@ SCSS
|
|
118
118
|
a {
|
119
119
|
fóó: bár; }
|
120
120
|
|
121
|
-
|
121
|
+
/*# sourceMappingURL=test.css.map */
|
122
122
|
CSS
|
123
123
|
{
|
124
124
|
"version": "3",
|
@@ -138,7 +138,7 @@ SASS
|
|
138
138
|
a {
|
139
139
|
fóó: bár; }
|
140
140
|
|
141
|
-
|
141
|
+
/*# sourceMappingURL=test.css.map */
|
142
142
|
CSS
|
143
143
|
{
|
144
144
|
"version": "3",
|
@@ -160,7 +160,7 @@ SCSS
|
|
160
160
|
f\x86\x86 {
|
161
161
|
\x86: b; }
|
162
162
|
|
163
|
-
|
163
|
+
/*# sourceMappingURL=test.css.map */
|
164
164
|
CSS
|
165
165
|
{
|
166
166
|
"version": "3",
|
@@ -181,7 +181,7 @@ SASS
|
|
181
181
|
f\x86\x86 {
|
182
182
|
\x86: b; }
|
183
183
|
|
184
|
-
|
184
|
+
/*# sourceMappingURL=test.css.map */
|
185
185
|
CSS
|
186
186
|
{
|
187
187
|
"version": "3",
|
@@ -203,7 +203,7 @@ SCSS
|
|
203
203
|
{{3}}@import url(bar){{/3}};
|
204
204
|
{{4}}@import url(baz) screen print{{/4}};
|
205
205
|
|
206
|
-
|
206
|
+
/*# sourceMappingURL=test.css.map */
|
207
207
|
CSS
|
208
208
|
end
|
209
209
|
|
@@ -219,7 +219,7 @@ SASS
|
|
219
219
|
{{4}}@import url(baz.css){{/4}};
|
220
220
|
{{5}}@import url(qux.css) screen print{{/5}};
|
221
221
|
|
222
|
-
|
222
|
+
/*# sourceMappingURL=test.css.map */
|
223
223
|
CSS
|
224
224
|
end
|
225
225
|
|
@@ -235,7 +235,7 @@ SCSS
|
|
235
235
|
{{2}}body{{/2}} {
|
236
236
|
{{3}}max-width{{/3}}: {{4}}1070px{{/4}}; } }
|
237
237
|
|
238
|
-
|
238
|
+
/*# sourceMappingURL=test.css.map */
|
239
239
|
CSS
|
240
240
|
end
|
241
241
|
|
@@ -249,7 +249,7 @@ SASS
|
|
249
249
|
{{2}}body{{/2}} {
|
250
250
|
{{3}}max-width{{/3}}: {{4}}1070px{{/4}}; } }
|
251
251
|
|
252
|
-
|
252
|
+
/*# sourceMappingURL=test.css.map */
|
253
253
|
CSS
|
254
254
|
end
|
255
255
|
|
@@ -279,7 +279,7 @@ SCSS
|
|
279
279
|
{{7}}border-color{{/7}}: {{8}}blue{{/8}};
|
280
280
|
{{9}}font{{/9}}: {{10}}12px/30px{{/10}}; }
|
281
281
|
|
282
|
-
|
282
|
+
/*# sourceMappingURL=test.css.map */
|
283
283
|
CSS
|
284
284
|
end
|
285
285
|
|
@@ -307,7 +307,7 @@ SASS
|
|
307
307
|
{{7}}border-color{{/7}}: {{8}}blue{{/8}};
|
308
308
|
{{9}}font{{/9}}: {{10}}12px/30px{{/10}}; }
|
309
309
|
|
310
|
-
|
310
|
+
/*# sourceMappingURL=test.css.map */
|
311
311
|
CSS
|
312
312
|
end
|
313
313
|
|
@@ -355,7 +355,7 @@ SCSS
|
|
355
355
|
{{22}}color{{/22}}: {{23}}#050709{{/23}};
|
356
356
|
{{24}}border{{/24}}: {{25}}2px solid black{{/25}}; }
|
357
357
|
|
358
|
-
|
358
|
+
/*# sourceMappingURL=test.css.map */
|
359
359
|
CSS
|
360
360
|
end
|
361
361
|
|
@@ -398,7 +398,7 @@ SASS
|
|
398
398
|
{{22}}color{{/22}}: {{23}}#050709{{/23}};
|
399
399
|
{{24}}border{{/24}}: {{25}}2px solid black{{/25}}; }
|
400
400
|
|
401
|
-
|
401
|
+
/*# sourceMappingURL=test.css.map */
|
402
402
|
CSS
|
403
403
|
end
|
404
404
|
|
@@ -420,7 +420,7 @@ SCSS
|
|
420
420
|
{{6}}.seriousError{{/6}} {
|
421
421
|
{{7}}border-width{{/7}}: {{8}}3px{{/8}}; }
|
422
422
|
|
423
|
-
|
423
|
+
/*# sourceMappingURL=test.css.map */
|
424
424
|
CSS
|
425
425
|
end
|
426
426
|
|
@@ -441,7 +441,7 @@ SASS
|
|
441
441
|
{{6}}.seriousError{{/6}} {
|
442
442
|
{{7}}border-width{{/7}}: {{8}}3px{{/8}}; }
|
443
443
|
|
444
|
-
|
444
|
+
/*# sourceMappingURL=test.css.map */
|
445
445
|
CSS
|
446
446
|
end
|
447
447
|
|
@@ -460,7 +460,7 @@ SCSS
|
|
460
460
|
{{7}}.item-3{{/7}} {
|
461
461
|
{{8}}width{{/8}}: {{9}}6em{{/9}}; }
|
462
462
|
|
463
|
-
|
463
|
+
/*# sourceMappingURL=test.css.map */
|
464
464
|
CSS
|
465
465
|
end
|
466
466
|
|
@@ -479,7 +479,7 @@ SASS
|
|
479
479
|
{{7}}.item-3{{/7}} {
|
480
480
|
{{8}}width{{/8}}: {{9}}6em{{/9}}; }
|
481
481
|
|
482
|
-
|
482
|
+
/*# sourceMappingURL=test.css.map */
|
483
483
|
CSS
|
484
484
|
end
|
485
485
|
|
@@ -500,7 +500,7 @@ SCSS
|
|
500
500
|
{{7}}.item-2{{/7}} {
|
501
501
|
{{8}}width{{/8}}: {{9}}4em{{/9}}; }
|
502
502
|
|
503
|
-
|
503
|
+
/*# sourceMappingURL=test.css.map */
|
504
504
|
CSS
|
505
505
|
end
|
506
506
|
|
@@ -521,7 +521,7 @@ SASS
|
|
521
521
|
{{7}}.item-2{{/7}} {
|
522
522
|
{{8}}width{{/8}}: {{9}}4em{{/9}}; }
|
523
523
|
|
524
|
-
|
524
|
+
/*# sourceMappingURL=test.css.map */
|
525
525
|
CSS
|
526
526
|
end
|
527
527
|
|
@@ -545,7 +545,7 @@ SCSS
|
|
545
545
|
{{10}}.salamander-icon{{/10}} {
|
546
546
|
{{11}}background-image{{/11}}: {{12}}url("/images/salamander.png"){{/12}}; }
|
547
547
|
|
548
|
-
|
548
|
+
/*# sourceMappingURL=test.css.map */
|
549
549
|
CSS
|
550
550
|
end
|
551
551
|
|
@@ -567,7 +567,7 @@ SASS
|
|
567
567
|
{{10}}.salamander-icon{{/10}} {
|
568
568
|
{{11}}background-image{{/11}}: {{12}}url("/images/salamander.png"){{/12}}; }
|
569
569
|
|
570
|
-
|
570
|
+
/*# sourceMappingURL=test.css.map */
|
571
571
|
CSS
|
572
572
|
end
|
573
573
|
|
@@ -628,7 +628,7 @@ SCSS
|
|
628
628
|
{{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666666, 2px 6px 10px #999999{{/28}};
|
629
629
|
{{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666666, 2px 6px 10px #999999{{/30}}; }
|
630
630
|
|
631
|
-
|
631
|
+
/*# sourceMappingURL=test.css.map */
|
632
632
|
CSS
|
633
633
|
end
|
634
634
|
|
@@ -685,7 +685,7 @@ SASS
|
|
685
685
|
{{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666666, 2px 6px 10px #999999{{/28}};
|
686
686
|
{{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666666, 2px 6px 10px #999999{{/30}}; }
|
687
687
|
|
688
|
-
|
688
|
+
/*# sourceMappingURL=test.css.map */
|
689
689
|
CSS
|
690
690
|
end
|
691
691
|
|
@@ -702,7 +702,7 @@ SCSS
|
|
702
702
|
{{1}}sidebar{{/1}} {
|
703
703
|
{{2}}width{{/2}}: {{3}}120px{{/3}}; }
|
704
704
|
|
705
|
-
|
705
|
+
/*# sourceMappingURL=test.css.map */
|
706
706
|
CSS
|
707
707
|
end
|
708
708
|
|
@@ -720,7 +720,7 @@ SASS
|
|
720
720
|
{{1}}sidebar{{/1}} {
|
721
721
|
{{2}}width{{/2}}: {{3}}120px{{/3}}; }
|
722
722
|
|
723
|
-
|
723
|
+
/*# sourceMappingURL=test.css.map */
|
724
724
|
CSS
|
725
725
|
end
|
726
726
|
|
@@ -740,7 +740,7 @@ SASS
|
|
740
740
|
{{6}}name{{/6}}: {{7}}value{{/7}};
|
741
741
|
{{8}}name{{/8}}: {{9}}value{{/9}}; }
|
742
742
|
|
743
|
-
|
743
|
+
/*# sourceMappingURL=test.css.map */
|
744
744
|
CSS
|
745
745
|
end
|
746
746
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 592302695
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 3
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 3.3.0.alpha.
|
11
|
+
- 181
|
12
|
+
version: 3.3.0.alpha.181
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Nathan Weizenbaum
|
@@ -19,7 +19,7 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2013-06-
|
22
|
+
date: 2013-06-17 00:00:00 -04:00
|
23
23
|
default_executable:
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
@@ -267,6 +267,7 @@ files:
|
|
267
267
|
- test/sass/templates/bork2.sass
|
268
268
|
- test/sass/templates/bork3.sass
|
269
269
|
- test/sass/templates/bork4.sass
|
270
|
+
- test/sass/templates/bork5.sass
|
270
271
|
- test/sass/templates/cached_import_option.scss
|
271
272
|
- test/sass/templates/compact.sass
|
272
273
|
- test/sass/templates/complex.sass
|
@@ -308,7 +309,6 @@ files:
|
|
308
309
|
- test/sass/templates/units.sass
|
309
310
|
- test/sass/templates/warn.sass
|
310
311
|
- test/sass/templates/warn_imported.sass
|
311
|
-
- test/sass/templates/bork5.sass
|
312
312
|
- test/sass/test_helper.rb
|
313
313
|
- test/sass/util/multibyte_string_scanner_test.rb
|
314
314
|
- test/sass/util/subset_map_test.rb
|