-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(menu): focus trapping with menu and overlays no longer results in…
- Loading branch information
1 parent
88ce010
commit 632dafc
Showing
4 changed files
with
143 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
import { newE2EPage } from '@stencil/core/testing'; | ||
|
||
const getActiveElementID = async (page) => { | ||
const activeElement = await page.evaluateHandle(() => document.activeElement); | ||
return await page.evaluate(el => el && el.id, activeElement); | ||
} | ||
|
||
test('menu: focus trap with overlays', async () => { | ||
const page = await newE2EPage({ | ||
url: '/src/components/menu/test/focus-trap?ionic:_testing=true' | ||
}); | ||
|
||
const ionDidOpen = await page.spyOnEvent('ionDidOpen'); | ||
const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent'); | ||
const ionModalDidDismiss= await page.spyOnEvent('ionModalDidDismiss'); | ||
|
||
const menu = await page.find('ion-menu'); | ||
await menu.callMethod('open'); | ||
await ionDidOpen.next(); | ||
|
||
expect(await getActiveElementID(page)).toEqual('open-modal-button'); | ||
|
||
const openModal = await page.find('#open-modal-button'); | ||
await openModal.click(); | ||
await ionModalDidPresent.next(); | ||
|
||
expect(await getActiveElementID(page)).toEqual('modal-element'); | ||
|
||
const modal = await page.find('ion-modal'); | ||
await modal.callMethod('dismiss'); | ||
await ionModalDidDismiss.next(); | ||
|
||
expect(await getActiveElementID(page)).toEqual('open-modal-button'); | ||
}); | ||
|
||
test('menu: focus trap with content inside overlays', async () => { | ||
const page = await newE2EPage({ | ||
url: '/src/components/menu/test/focus-trap?ionic:_testing=true' | ||
}); | ||
|
||
const ionDidOpen = await page.spyOnEvent('ionDidOpen'); | ||
const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent'); | ||
const ionModalDidDismiss= await page.spyOnEvent('ionModalDidDismiss'); | ||
|
||
const menu = await page.find('ion-menu'); | ||
await menu.callMethod('open'); | ||
await ionDidOpen.next(); | ||
|
||
expect(await getActiveElementID(page)).toEqual('open-modal-button'); | ||
|
||
const openModal = await page.find('#open-modal-button'); | ||
await openModal.click(); | ||
await ionModalDidPresent.next(); | ||
|
||
const button = await page.find('#other-button'); | ||
await button.click(); | ||
|
||
expect(await getActiveElementID(page)).toEqual('other-button'); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
<!DOCTYPE html> | ||
<html lang="en" dir="ltr"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>Menu - Focus Trap</title> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"> | ||
<link href="../../../../../css/ionic.bundle.css" rel="stylesheet"> | ||
<link href="../../../../../scripts/testing/styles.css" rel="stylesheet"> | ||
<script src="../../../../../scripts/testing/scripts.js"></script> | ||
<script type="module" src="../../../../../dist/ionic/ionic.esm.js"></script> | ||
</head> | ||
<body> | ||
<ion-app> | ||
<ion-menu content-id="main"> | ||
<ion-header> | ||
<ion-toolbar> | ||
<ion-title>Menu</ion-title> | ||
</ion-toolbar> | ||
</ion-header> | ||
<ion-content class="ion-padding"> | ||
<ion-item> | ||
<ion-button id="open-modal-button">Open Modal</ion-button> | ||
</ion-item> | ||
<ion-modal id="modal-element" trigger="open-modal-button"> | ||
<ion-content class="ion-padding"> | ||
Modal content | ||
<ion-button onclick="dismissModal()">Dismiss Modal</ion-button> | ||
<ion-button id="other-button">Other Button</ion-button> | ||
</ion-content> | ||
</ion-modal> | ||
</ion-content> | ||
</ion-menu> | ||
|
||
<div class="ion-page" id="main"> | ||
<ion-header> | ||
<ion-toolbar> | ||
<ion-title>Menu - Basic</ion-title> | ||
</ion-toolbar> | ||
</ion-header> | ||
<ion-content class="ion-padding"> | ||
<ion-button onclick="openMenu()" id="open-menu-button">Open Menu</ion-button> | ||
</ion-content> | ||
</div> | ||
</ion-app> | ||
<script> | ||
const menu = document.querySelector('ion-menu'); | ||
const modal = document.querySelector('ion-modal'); | ||
const openMenu = () => { | ||
menu.open(); | ||
} | ||
const dismissModal = () => { | ||
modal.dismiss(); | ||
} | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters