@@ -76,15 +76,18 @@ describe('GlobalOverlayController', () => {
7676 it ( 'removes the overlay from DOM when hiding' , async ( ) => {
7777 const ctrl = overlays . add (
7878 new GlobalOverlayController ( {
79+ viewportConfig : {
80+ placement : 'top-left' ,
81+ } ,
7982 contentTemplate : ( ) => html `
80- < p > Content</ p >
83+ < div > Content</ div >
8184 ` ,
8285 } ) ,
8386 ) ;
8487
8588 await ctrl . show ( ) ;
8689 expect ( getRenderedContainers ( ) . length ) . to . equal ( 1 ) ;
87- expect ( getRenderedOverlay ( 0 ) . tagName ) . to . equal ( 'P ' ) ;
90+ expect ( getRenderedOverlay ( 0 ) . tagName ) . to . equal ( 'DIV ' ) ;
8891 expect ( getRenderedOverlay ( 0 ) . textContent ) . to . equal ( 'Content' ) ;
8992 expect ( getTopContainer ( ) ) . to . equal ( getRenderedContainer ( 0 ) ) ;
9093
@@ -111,34 +114,6 @@ describe('GlobalOverlayController', () => {
111114 expect ( ctrl . isShown ) . to . equal ( false ) ;
112115 } ) ;
113116
114- it ( 'puts the latest shown overlay always on top' , async ( ) => {
115- const controller0 = overlays . add (
116- new GlobalOverlayController ( {
117- contentTemplate : ( ) => html `
118- < p > Content0</ p >
119- ` ,
120- } ) ,
121- ) ;
122- const controller1 = overlays . add (
123- new GlobalOverlayController ( {
124- contentTemplate : ( ) => html `
125- < p > Content1</ p >
126- ` ,
127- } ) ,
128- ) ;
129-
130- await controller0 . show ( ) ;
131- await controller1 . show ( ) ;
132- await controller0 . show ( ) ;
133-
134- expect ( getRenderedContainers ( ) . length ) . to . equal ( 2 ) ;
135- expect ( getRenderedOverlay ( 0 ) . tagName ) . to . equal ( 'P' ) ;
136- expect ( getRenderedOverlay ( 0 ) . textContent ) . to . equal ( 'Content0' ) ;
137- expect ( getRenderedOverlay ( 1 ) . tagName ) . to . equal ( 'P' ) ;
138- expect ( getRenderedOverlay ( 1 ) . textContent ) . to . equal ( 'Content1' ) ;
139- expect ( getTopOverlay ( ) . textContent ) . to . equal ( 'Content0' ) ;
140- } ) ;
141-
142117 it ( 'does not recreate the overlay elements when calling show multiple times' , async ( ) => {
143118 const ctrl = overlays . add (
144119 new GlobalOverlayController ( {
@@ -185,6 +160,9 @@ describe('GlobalOverlayController', () => {
185160 it ( 'focuses body when hiding by default' , async ( ) => {
186161 const ctrl = overlays . add (
187162 new GlobalOverlayController ( {
163+ viewportConfig : {
164+ placement : 'top-left' ,
165+ } ,
188166 contentTemplate : ( ) => html `
189167 < div > < input /> =</ div >
190168 ` ,
@@ -208,6 +186,9 @@ describe('GlobalOverlayController', () => {
208186 const ctrl = overlays . add (
209187 new GlobalOverlayController ( {
210188 elementToFocusAfterHide : input ,
189+ viewportConfig : {
190+ placement : 'top-left' ,
191+ } ,
211192 contentTemplate : ( ) => html `
212193 < div > < textarea > </ textarea > </ div >
213194 ` ,
@@ -230,6 +211,9 @@ describe('GlobalOverlayController', () => {
230211
231212 const ctrl = overlays . add (
232213 new GlobalOverlayController ( {
214+ viewportConfig : {
215+ placement : 'top-left' ,
216+ } ,
233217 contentTemplate : ( ) => html `
234218 < div > < textarea > </ textarea > </ div >
235219 ` ,
@@ -252,6 +236,9 @@ describe('GlobalOverlayController', () => {
252236
253237 const ctrl = overlays . add (
254238 new GlobalOverlayController ( {
239+ viewportConfig : {
240+ placement : 'top-left' ,
241+ } ,
255242 contentTemplate : ( ) => html `
256243 < div > < textarea > </ textarea > </ div >
257244 ` ,
@@ -351,4 +338,49 @@ describe('GlobalOverlayController', () => {
351338 expect ( ctrl . backdropNode ) . to . have . class ( 'global-overlays__backdrop' ) ;
352339 } ) ;
353340 } ) ;
341+
342+ describe ( 'viewportConfig' , ( ) => {
343+ it ( 'places the overlay in center by default' , async ( ) => {
344+ const controller = new GlobalOverlayController ( {
345+ contentTemplate : ( ) =>
346+ html `
347+ < p > Content</ p >
348+ ` ,
349+ } ) ;
350+
351+ controller . show ( ) ;
352+ expect ( controller . overlayContainerClass ) . to . equal (
353+ 'global-overlays__overlay-container--center' ,
354+ ) ;
355+ } ) ;
356+
357+ it ( 'can set the placement relative to the viewport ' , async ( ) => {
358+ const placementMap = [
359+ 'top-left' ,
360+ 'top' ,
361+ 'top-right' ,
362+ 'right' ,
363+ 'bottom-right' ,
364+ 'bottom' ,
365+ 'bottom-left' ,
366+ 'left' ,
367+ 'center' ,
368+ ] ;
369+ placementMap . forEach ( viewportPlacement => {
370+ const controller = new GlobalOverlayController ( {
371+ viewportConfig : {
372+ placement : viewportPlacement ,
373+ } ,
374+ contentTemplate : ( ) =>
375+ html `
376+ < p > Content</ p >
377+ ` ,
378+ } ) ;
379+ controller . show ( ) ;
380+ expect ( controller . overlayContainerClass ) . to . equal (
381+ `global-overlays__overlay-container--${ viewportPlacement } ` ,
382+ ) ;
383+ } ) ;
384+ } ) ;
385+ } ) ;
354386} ) ;
0 commit comments