@@ -374,7 +374,7 @@ where
374
374
375
375
' complex: for mut n in n. children . take ( ) {
376
376
if let ComplexSelectorChildren :: CompoundSelector ( selector) = & mut n {
377
- for sel in & mut selector. subclass_selectors {
377
+ for ( sel_index , sel) in selector. subclass_selectors . iter_mut ( ) . enumerate ( ) {
378
378
match sel {
379
379
SubclassSelector :: Class ( ..) | SubclassSelector :: Id ( ..) => {
380
380
if !self . data . is_global_mode {
@@ -402,7 +402,17 @@ where
402
402
403
403
complex_selector. visit_mut_with ( self ) ;
404
404
405
- new_children. extend ( complex_selector. children . clone ( ) ) ;
405
+ let mut complex_selector_children =
406
+ complex_selector. children . clone ( ) ;
407
+ prepend_left_subclass_selectors (
408
+ & mut complex_selector_children,
409
+ selector
410
+ . subclass_selectors
411
+ . split_at ( sel_index)
412
+ . 0
413
+ . to_vec ( ) ,
414
+ ) ;
415
+ new_children. extend ( complex_selector_children) ;
406
416
407
417
self . data . is_global_mode = old_is_global_mode;
408
418
self . data . is_in_local_pseudo_class = old_inside;
@@ -419,7 +429,17 @@ where
419
429
complex_selector,
420
430
) ) = children. get_mut ( 0 )
421
431
{
422
- new_children. extend ( complex_selector. children . clone ( ) ) ;
432
+ let mut complex_selector_children =
433
+ complex_selector. children . clone ( ) ;
434
+ prepend_left_subclass_selectors (
435
+ & mut complex_selector_children,
436
+ selector
437
+ . subclass_selectors
438
+ . split_at ( sel_index)
439
+ . 0
440
+ . to_vec ( ) ,
441
+ ) ;
442
+ new_children. extend ( complex_selector_children) ;
423
443
}
424
444
} else {
425
445
self . data . is_global_mode = true ;
@@ -523,3 +543,14 @@ fn process_local<C>(
523
543
SubclassSelector :: PseudoElement ( _) => { }
524
544
}
525
545
}
546
+
547
+ fn prepend_left_subclass_selectors (
548
+ complex_selector_children : & mut [ ComplexSelectorChildren ] ,
549
+ left_sels : Vec < SubclassSelector > ,
550
+ ) {
551
+ if let Some ( ComplexSelectorChildren :: CompoundSelector ( first) ) =
552
+ complex_selector_children. get_mut ( 0 )
553
+ {
554
+ first. subclass_selectors = [ left_sels, first. subclass_selectors . take ( ) ] . concat ( ) ;
555
+ }
556
+ }
0 commit comments