haml-edge 2.3.218 → 2.3.219

Sign up to get free protection for your applications and to get access to all the features.
data/EDGE_GEM_VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.218
1
+ 2.3.219
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.218
1
+ 2.3.219
@@ -79,11 +79,19 @@ module Sass
79
79
  def do_extend(extends, supers = [])
80
80
  paths = Haml::Util.paths(members.map do |sseq_or_op|
81
81
  next [[sseq_or_op]] unless sseq_or_op.is_a?(SimpleSequence)
82
- [[sseq_or_op], *sseq_or_op.do_extend(extends, supers).map {|seq| seq.members}]
82
+ extended = sseq_or_op.do_extend(extends, supers)
83
+ choices = extended.map {|seq| seq.members}
84
+ choices.unshift([sseq_or_op]) unless extended.any? {|seq| seq.superselector?(sseq_or_op)}
85
+ choices
83
86
  end)
84
87
  Haml::Util.flatten(paths.map {|path| weave(path)}, 1).map {|p| Sequence.new(p)}
85
88
  end
86
89
 
90
+ def superselector?(sseq)
91
+ return false unless members.size == 1
92
+ members.last.superselector?(sseq)
93
+ end
94
+
87
95
  # @see Simple#to_a
88
96
  def to_a
89
97
  ary = @members.map {|seq_or_op| seq_or_op.is_a?(SimpleSequence) ? seq_or_op.to_a : seq_or_op}
@@ -62,21 +62,18 @@ module Sass
62
62
  # by extending this selector with `extends`.
63
63
  # @see CommaSequence#do_extend
64
64
  def do_extend(extends, supers = [])
65
- seqs = extends.get(members.to_set).map do |seq, sels|
65
+ extends.get(members.to_set).map do |seq, sels|
66
66
  # If A {@extend B} and C {...},
67
67
  # seq is A, sels is B, and self is C
68
68
 
69
69
  self_without_sel = self.members - sels
70
70
  next unless unified = seq.members.last.unify(self_without_sel)
71
71
  [sels, seq.members[0...-1] + [unified]]
72
- end.compact.map {|sels, seq| [sels, Sequence.new(seq)]}
73
-
74
- seqs.map {|_, seq| seq}.concat(
75
- seqs.map do |sels, seq|
76
- new_seqs = seq.do_extend(extends, supers.unshift(sels))[1..-1]
77
- supers.shift
78
- new_seqs
79
- end.flatten.uniq)
72
+ end.compact.map {|sels, seq| [sels, Sequence.new(seq)]}.map do |sels, seq|
73
+ seqs = seq.do_extend(extends, supers.unshift(sels))
74
+ supers.shift
75
+ seqs
76
+ end.flatten.uniq
80
77
  rescue SystemStackError
81
78
  handle_extend_loop(supers)
82
79
  end
@@ -102,6 +99,10 @@ module Sass
102
99
  SimpleSequence.new(sseq)
103
100
  end
104
101
 
102
+ def superselector?(sseq)
103
+ (base.nil? || base.eql?(sseq.base)) && rest.subset?(sseq.rest)
104
+ end
105
+
105
106
  # @see Simple#to_a
106
107
  def to_a
107
108
  @members.map {|sel| sel.to_a}.flatten
@@ -102,7 +102,7 @@ CSS
102
102
  SCSS
103
103
 
104
104
  assert_equal <<CSS, render(<<SCSS)
105
- .foo.bar, .bar.baz, .foo.baz, .baz {
105
+ .foo.bar, .baz {
106
106
  a: b; }
107
107
  CSS
108
108
  .foo.bar {a: b}
@@ -121,7 +121,7 @@ CSS
121
121
  SCSS
122
122
 
123
123
  assert_equal <<CSS, render(<<SCSS)
124
- .foo.bar, .bar.baz, .foo.bang, .baz.bang {
124
+ .foo.bar, .bar.baz, .baz.bang, .foo.bang {
125
125
  a: b; }
126
126
  CSS
127
127
  .foo.bar {a: b}
@@ -190,7 +190,7 @@ CSS
190
190
  SCSS
191
191
 
192
192
  assert_equal <<CSS, render(<<SCSS)
193
- .foo.baz, .baz {
193
+ .baz {
194
194
  a: b; }
195
195
  CSS
196
196
  .foo.baz {a: b}
@@ -208,7 +208,7 @@ CSS
208
208
  SCSS
209
209
 
210
210
  assert_equal <<CSS, render(<<SCSS)
211
- .foo#baz, #baz {
211
+ #baz {
212
212
  a: b; }
213
213
  CSS
214
214
  .foo#baz {a: b}
@@ -242,7 +242,7 @@ CSS
242
242
  SCSS
243
243
 
244
244
  assert_equal <<CSS, render(<<SCSS)
245
- .foo.bar, .bar {
245
+ .bar {
246
246
  a: b; }
247
247
  CSS
248
248
  .foo.bar {a: b}
@@ -250,7 +250,7 @@ CSS
250
250
  SCSS
251
251
 
252
252
  assert_equal <<CSS, render(<<SCSS)
253
- .foo.bar, .bar {
253
+ .bar {
254
254
  a: b; }
255
255
  CSS
256
256
  .foo.bar {a: b}
@@ -268,7 +268,7 @@ SCSS
268
268
 
269
269
  def test_universal_unification_with_namespaceless_universal_target
270
270
  assert_equal <<CSS, render(<<SCSS)
271
- *.foo, * {
271
+ * {
272
272
  a: b; }
273
273
  CSS
274
274
  *.foo {a: b}
@@ -276,7 +276,7 @@ CSS
276
276
  SCSS
277
277
 
278
278
  assert_equal <<CSS, render(<<SCSS)
279
- *.foo, * {
279
+ * {
280
280
  a: b; }
281
281
  CSS
282
282
  *.foo {a: b}
@@ -292,7 +292,7 @@ CSS
292
292
  SCSS
293
293
 
294
294
  assert_equal <<CSS, render(<<SCSS)
295
- *|*.foo, *|* {
295
+ *|* {
296
296
  a: b; }
297
297
  CSS
298
298
  *|*.foo {a: b}
@@ -318,7 +318,7 @@ SCSS
318
318
 
319
319
  def test_universal_unification_with_namespaced_universal_target
320
320
  assert_equal <<CSS, render(<<SCSS)
321
- ns|*.foo, ns|* {
321
+ ns|* {
322
322
  a: b; }
323
323
  CSS
324
324
  ns|*.foo {a: b}
@@ -326,7 +326,7 @@ ns|*.foo {a: b}
326
326
  SCSS
327
327
 
328
328
  assert_equal <<CSS, render(<<SCSS)
329
- ns|*.foo, ns|* {
329
+ ns|* {
330
330
  a: b; }
331
331
  CSS
332
332
  ns|*.foo {a: b}
@@ -342,7 +342,7 @@ ns2|* {@extend .foo}
342
342
  SCSS
343
343
 
344
344
  assert_equal <<CSS, render(<<SCSS)
345
- ns|*.foo, ns|* {
345
+ ns|* {
346
346
  a: b; }
347
347
  CSS
348
348
  ns|*.foo {a: b}
@@ -352,7 +352,7 @@ SCSS
352
352
 
353
353
  def test_universal_unification_with_namespaceless_element_target
354
354
  assert_equal <<CSS, render(<<SCSS)
355
- a.foo, a {
355
+ a {
356
356
  a: b; }
357
357
  CSS
358
358
  a.foo {a: b}
@@ -360,7 +360,7 @@ a.foo {a: b}
360
360
  SCSS
361
361
 
362
362
  assert_equal <<CSS, render(<<SCSS)
363
- a.foo, a {
363
+ a {
364
364
  a: b; }
365
365
  CSS
366
366
  a.foo {a: b}
@@ -376,7 +376,7 @@ CSS
376
376
  SCSS
377
377
 
378
378
  assert_equal <<CSS, render(<<SCSS)
379
- *|a.foo, *|a {
379
+ *|a {
380
380
  a: b; }
381
381
  CSS
382
382
  *|a.foo {a: b}
@@ -402,7 +402,7 @@ SCSS
402
402
 
403
403
  def test_universal_unification_with_namespaced_element_target
404
404
  assert_equal <<CSS, render(<<SCSS)
405
- ns|a.foo, ns|a {
405
+ ns|a {
406
406
  a: b; }
407
407
  CSS
408
408
  ns|a.foo {a: b}
@@ -410,7 +410,7 @@ ns|a.foo {a: b}
410
410
  SCSS
411
411
 
412
412
  assert_equal <<CSS, render(<<SCSS)
413
- ns|a.foo, ns|a {
413
+ ns|a {
414
414
  a: b; }
415
415
  CSS
416
416
  ns|a.foo {a: b}
@@ -426,7 +426,7 @@ ns2|* {@extend .foo}
426
426
  SCSS
427
427
 
428
428
  assert_equal <<CSS, render(<<SCSS)
429
- ns|a.foo, ns|a {
429
+ ns|a {
430
430
  a: b; }
431
431
  CSS
432
432
  ns|a.foo {a: b}
@@ -554,7 +554,7 @@ SCSS
554
554
 
555
555
  def test_element_unification_with_namespaceless_element_target
556
556
  assert_equal <<CSS, render(<<SCSS)
557
- a.foo, a {
557
+ a {
558
558
  a: b; }
559
559
  CSS
560
560
  a.foo {a: b}
@@ -562,7 +562,7 @@ a {@extend .foo}
562
562
  SCSS
563
563
 
564
564
  assert_equal <<CSS, render(<<SCSS)
565
- a.foo, a {
565
+ a {
566
566
  a: b; }
567
567
  CSS
568
568
  a.foo {a: b}
@@ -578,7 +578,7 @@ a {@extend .foo}
578
578
  SCSS
579
579
 
580
580
  assert_equal <<CSS, render(<<SCSS)
581
- *|a.foo, *|a {
581
+ *|a {
582
582
  a: b; }
583
583
  CSS
584
584
  *|a.foo {a: b}
@@ -612,7 +612,7 @@ SCSS
612
612
 
613
613
  def test_element_unification_with_namespaced_element_target
614
614
  assert_equal <<CSS, render(<<SCSS)
615
- ns|a.foo, ns|a {
615
+ ns|a {
616
616
  a: b; }
617
617
  CSS
618
618
  ns|a.foo {a: b}
@@ -620,7 +620,7 @@ a {@extend .foo}
620
620
  SCSS
621
621
 
622
622
  assert_equal <<CSS, render(<<SCSS)
623
- ns|a.foo, ns|a {
623
+ ns|a {
624
624
  a: b; }
625
625
  CSS
626
626
  ns|a.foo {a: b}
@@ -636,7 +636,7 @@ ns2|a {@extend .foo}
636
636
  SCSS
637
637
 
638
638
  assert_equal <<CSS, render(<<SCSS)
639
- ns|a.foo, ns|a {
639
+ ns|a {
640
640
  a: b; }
641
641
  CSS
642
642
  ns|a.foo {a: b}
@@ -678,7 +678,7 @@ CSS
678
678
  SCSS
679
679
 
680
680
  assert_equal <<CSS, render(<<SCSS)
681
- [foo=bar].baz, [foo=bar] {
681
+ [foo=bar] {
682
682
  a: b; }
683
683
  CSS
684
684
  [foo=bar].baz {a: b}
@@ -720,7 +720,7 @@ CSS
720
720
  SCSS
721
721
 
722
722
  assert_equal <<CSS, render(<<SCSS)
723
- ::foo.baz, ::foo {
723
+ ::foo {
724
724
  a: b; }
725
725
  CSS
726
726
  ::foo.baz {a: b}
@@ -728,7 +728,7 @@ CSS
728
728
  SCSS
729
729
 
730
730
  assert_equal <<CSS, render(<<SCSS)
731
- ::foo(2n+1).baz, ::foo(2n+1) {
731
+ ::foo(2n+1) {
732
732
  a: b; }
733
733
  CSS
734
734
  ::foo(2n+1).baz {a: b}
@@ -744,7 +744,7 @@ CSS
744
744
  SCSS
745
745
 
746
746
  assert_equal <<CSS, render(<<SCSS)
747
- :foo.baz, :foo {
747
+ :foo {
748
748
  a: b; }
749
749
  CSS
750
750
  :foo.baz {a: b}
@@ -844,7 +844,7 @@ CSS
844
844
  SCSS
845
845
 
846
846
  assert_equal <<CSS, render(<<SCSS)
847
- :not(.foo).baz, :not(.foo) {
847
+ :not(.foo) {
848
848
  a: b; }
849
849
  CSS
850
850
  :not(.foo).baz {a: b}
@@ -852,7 +852,7 @@ CSS
852
852
  SCSS
853
853
 
854
854
  assert_equal <<CSS, render(<<SCSS)
855
- :not([a=b]).baz, :not([a=b]) {
855
+ :not([a=b]) {
856
856
  a: b; }
857
857
  CSS
858
858
  :not([a=b]).baz {a: b}
@@ -1100,6 +1100,16 @@ CSS
1100
1100
  SCSS
1101
1101
  end
1102
1102
 
1103
+ def test_multiple_extender_merges_with_superset_selector
1104
+ assert_equal <<CSS, render(<<SCSS)
1105
+ a.bar.baz, a.foo {
1106
+ a: b; }
1107
+ CSS
1108
+ .foo {@extend .bar; @extend .baz}
1109
+ a.bar.baz {a: b}
1110
+ SCSS
1111
+ end
1112
+
1103
1113
  private
1104
1114
 
1105
1115
  def render(sass, options = {})
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml-edge
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.218
4
+ version: 2.3.219
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Weizenbaum