1
- import { css } from '@emotion/react' ;
1
+ import { css , type Interpolation } from '@emotion/react' ;
2
2
import type { SlotName } from '@guardian/commercial' ;
3
3
import { adSizes , constants } from '@guardian/commercial' ;
4
4
import {
@@ -382,6 +382,22 @@ const crosswordBannerMobileAdStyles = css`
382
382
min-height : ${ adSizes . mobilesticky . height + constants . AD_LABEL_HEIGHT } px;
383
383
` ;
384
384
385
+ const AdSlotWrapper = ( {
386
+ children,
387
+ css : additionalCss ,
388
+ className = 'ad-slot-container' ,
389
+ } : {
390
+ children : React . ReactNode ;
391
+ css ?: Interpolation ;
392
+ className ?: string ;
393
+ } ) => {
394
+ return (
395
+ < aside className = { className } css = { additionalCss } >
396
+ { children }
397
+ </ aside >
398
+ ) ;
399
+ } ;
400
+
385
401
export const AdSlot = ( {
386
402
position,
387
403
display,
@@ -395,7 +411,7 @@ export const AdSlot = ({
395
411
switch ( display ) {
396
412
case ArticleDisplay . Immersive : {
397
413
return (
398
- < div className = "ad-slot-container" >
414
+ < AdSlotWrapper >
399
415
< div
400
416
id = "dfp-ad--right"
401
417
css = { rightAdStyles }
@@ -412,16 +428,13 @@ export const AdSlot = ({
412
428
data-testid = "slot"
413
429
aria-hidden = "true"
414
430
/>
415
- </ div >
431
+ </ AdSlotWrapper >
416
432
) ;
417
433
}
418
434
case ArticleDisplay . Showcase :
419
435
case ArticleDisplay . NumberedList : {
420
436
return (
421
- < div
422
- className = "ad-slot-container"
423
- css = { [ showcaseRightColumnContainerStyles ] }
424
- >
437
+ < AdSlotWrapper css = { showcaseRightColumnContainerStyles } >
425
438
< div
426
439
id = "dfp-ad--right"
427
440
css = { [ rightAdStyles , showcaseRightColumnStyles ] }
@@ -438,7 +451,7 @@ export const AdSlot = ({
438
451
data-testid = "slot"
439
452
aria-hidden = "true"
440
453
/>
441
- </ div >
454
+ </ AdSlotWrapper >
442
455
) ;
443
456
}
444
457
case ArticleDisplay . Standard : {
@@ -458,9 +471,7 @@ export const AdSlot = ({
458
471
}
459
472
/>
460
473
</ Island >
461
- < div
462
- id = "top-right-ad-slot"
463
- className = "ad-slot-container"
474
+ < AdSlotWrapper
464
475
css = { [
465
476
css `
466
477
position : static;
@@ -497,7 +508,7 @@ export const AdSlot = ({
497
508
data-testid = "slot"
498
509
aria-hidden = "true"
499
510
/>
500
- </ div >
511
+ </ AdSlotWrapper >
501
512
</ >
502
513
) ;
503
514
}
@@ -507,8 +518,7 @@ export const AdSlot = ({
507
518
case 'right-football' : {
508
519
const slotId = 'dfp-ad--right' ;
509
520
return (
510
- < div
511
- className = "ad-slot-container"
521
+ < AdSlotWrapper
512
522
css = { [
513
523
css `
514
524
height : 100% ;
@@ -547,12 +557,12 @@ export const AdSlot = ({
547
557
// Football fixtures pages cannot always support longer right column ads, so limit allowed size
548
558
data-desktop = "300,250"
549
559
/>
550
- </ div >
560
+ </ AdSlotWrapper >
551
561
) ;
552
562
}
553
563
case 'comments' : {
554
564
return (
555
- < div className = "ad-slot-container" >
565
+ < AdSlotWrapper >
556
566
< div
557
567
id = "dfp-ad--comments"
558
568
className = { [
@@ -568,15 +578,12 @@ export const AdSlot = ({
568
578
data-testid = "slot"
569
579
aria-hidden = "true"
570
580
/>
571
- </ div >
581
+ </ AdSlotWrapper >
572
582
) ;
573
583
}
574
584
case 'top-above-nav' : {
575
585
return (
576
- < div
577
- css = { [ topAboveNavContainerStyles ] }
578
- className = "ad-slot-container"
579
- >
586
+ < AdSlotWrapper css = { [ topAboveNavContainerStyles ] } >
580
587
< div
581
588
id = "dfp-ad--top-above-nav"
582
589
className = { [
@@ -591,16 +598,13 @@ export const AdSlot = ({
591
598
data-testid = "slot"
592
599
aria-hidden = "true"
593
600
> </ div >
594
- </ div >
601
+ </ AdSlotWrapper >
595
602
) ;
596
603
}
597
604
case 'mostpop' : {
598
605
return (
599
606
< Hide until = "tablet" >
600
- < div
601
- className = "ad-slot-container"
602
- css = { [ mostPopContainerStyles ] }
603
- >
607
+ < AdSlotWrapper css = { mostPopContainerStyles } >
604
608
< div
605
609
id = "dfp-ad--mostpop"
606
610
className = { [
@@ -616,16 +620,13 @@ export const AdSlot = ({
616
620
data-testid = "slot"
617
621
aria-hidden = "true"
618
622
/>
619
- </ div >
623
+ </ AdSlotWrapper >
620
624
</ Hide >
621
625
) ;
622
626
}
623
627
case 'merchandising-high' : {
624
628
return (
625
- < div
626
- className = "ad-slot-container"
627
- css = { [ merchandisingAdContainerStyles ] }
628
- >
629
+ < AdSlotWrapper css = { [ merchandisingAdContainerStyles ] } >
629
630
< div
630
631
id = "dfp-ad--merchandising-high"
631
632
className = { [
@@ -640,15 +641,12 @@ export const AdSlot = ({
640
641
data-testid = "slot"
641
642
aria-hidden = "true"
642
643
/>
643
- </ div >
644
+ </ AdSlotWrapper >
644
645
) ;
645
646
}
646
647
case 'merchandising' : {
647
648
return (
648
- < div
649
- className = "ad-slot-container"
650
- css = { [ merchandisingAdContainerStyles ] }
651
- >
649
+ < AdSlotWrapper css = { merchandisingAdContainerStyles } >
652
650
< div
653
651
id = "dfp-ad--merchandising"
654
652
className = { [
@@ -662,7 +660,7 @@ export const AdSlot = ({
662
660
data-testid = "slot"
663
661
aria-hidden = "true"
664
662
/>
665
- </ div >
663
+ </ AdSlotWrapper >
666
664
) ;
667
665
}
668
666
case 'fronts-banner' : {
@@ -672,8 +670,7 @@ export const AdSlot = ({
672
670
className = "top-fronts-banner-ad-container"
673
671
css = { frontsBannerAdTopContainerStyles }
674
672
>
675
- < div
676
- className = "ad-slot-container"
673
+ < AdSlotWrapper
677
674
css = { [
678
675
frontsBannerAdContainerStyles ,
679
676
hasPageskin && frontsBannerCollapseStyles ,
@@ -694,7 +691,7 @@ export const AdSlot = ({
694
691
data-testid = "slot"
695
692
aria-hidden = "true"
696
693
/>
697
- </ div >
694
+ </ AdSlotWrapper >
698
695
</ div >
699
696
) ;
700
697
}
@@ -721,7 +718,7 @@ export const AdSlot = ({
721
718
case 'liveblog-inline' : {
722
719
const advertId = `inline${ index + 1 } ` ;
723
720
return (
724
- < div
721
+ < AdSlotWrapper
725
722
className = "ad-slot-container ad-slot-desktop"
726
723
css = { liveblogInlineContainerStyles }
727
724
>
@@ -740,16 +737,13 @@ export const AdSlot = ({
740
737
data-testid = { `liveblog-inline--${ advertId } ` }
741
738
aria-hidden = "true"
742
739
/>
743
- </ div >
740
+ </ AdSlotWrapper >
744
741
) ;
745
742
}
746
743
case 'liveblog-inline-mobile' : {
747
744
const advertId = index === 0 ? 'top-above-nav' : `inline${ index } ` ;
748
745
return (
749
- < div
750
- className = "ad-slot-container ad-slot-mobile"
751
- css = { liveblogInlineContainerStyles }
752
- >
746
+ < AdSlotWrapper css = { liveblogInlineContainerStyles } >
753
747
< div
754
748
id = { `dfp-ad--${ advertId } --mobile` }
755
749
className = { [
@@ -765,15 +759,12 @@ export const AdSlot = ({
765
759
data-testid = { `liveblog-inline-mobile--${ advertId } ` }
766
760
aria-hidden = "true"
767
761
/>
768
- </ div >
762
+ </ AdSlotWrapper >
769
763
) ;
770
764
}
771
765
case 'liveblog-top' : {
772
766
return (
773
- < div
774
- className = "ad-slot-container"
775
- css = { [ liveBlogTopContainerStyles ] }
776
- >
767
+ < AdSlotWrapper css = { liveBlogTopContainerStyles } >
777
768
< div
778
769
id = "dfp-ad--liveblog-top"
779
770
className = { [
@@ -788,13 +779,13 @@ export const AdSlot = ({
788
779
data-testid = "slot"
789
780
aria-hidden = "true"
790
781
/>
791
- </ div >
782
+ </ AdSlotWrapper >
792
783
) ;
793
784
}
794
785
case 'mobile-front' : {
795
786
const advertId = index === 0 ? 'top-above-nav' : `inline${ index } ` ;
796
787
return (
797
- < div className = "ad-slot-container" >
788
+ < AdSlotWrapper >
798
789
< div
799
790
id = { `dfp-ad--${ advertId } --mobile` }
800
791
className = { [
@@ -812,12 +803,12 @@ export const AdSlot = ({
812
803
data-testid = "slot"
813
804
aria-hidden = "true"
814
805
/>
815
- </ div >
806
+ </ AdSlotWrapper >
816
807
) ;
817
808
}
818
809
case 'pageskin' : {
819
810
return (
820
- < div className = "ad-slot-container" >
811
+ < AdSlotWrapper >
821
812
< div
822
813
id = "dfp-ad--pageskin-inread"
823
814
className = { [
@@ -836,12 +827,12 @@ export const AdSlot = ({
836
827
data-testid = "slot"
837
828
aria-hidden = "true"
838
829
/>
839
- </ div >
830
+ </ AdSlotWrapper >
840
831
) ;
841
832
}
842
833
case 'article-end' : {
843
834
return (
844
- < div className = "ad-slot-container" >
835
+ < AdSlotWrapper >
845
836
< div
846
837
id = "dfp-ad--article-end"
847
838
className = { [
@@ -856,12 +847,12 @@ export const AdSlot = ({
856
847
data-testid = "slot"
857
848
aria-hidden = "true"
858
849
/>
859
- </ div >
850
+ </ AdSlotWrapper >
860
851
) ;
861
852
}
862
853
case 'crossword-banner-mobile' : {
863
854
return (
864
- < div className = "ad-slot-container" >
855
+ < AdSlotWrapper >
865
856
< div
866
857
id = "dfp-ad--crossword-banner-mobile"
867
858
className = { [
@@ -876,7 +867,7 @@ export const AdSlot = ({
876
867
data-testid = "slot"
877
868
aria-hidden = "true"
878
869
/>
879
- </ div >
870
+ </ AdSlotWrapper >
880
871
) ;
881
872
}
882
873
}
0 commit comments