diff --git a/src/demo-app/demo-app-module.ts b/src/demo-app/demo-app-module.ts index 5f4a02dc5f68..0021888b8355 100644 --- a/src/demo-app/demo-app-module.ts +++ b/src/demo-app/demo-app-module.ts @@ -34,6 +34,7 @@ import {PortalDemo, ScienceJoke} from './portal/portal-demo'; import {MenuDemo} from './menu/menu-demo'; import {TabsDemo, SunnyTabContent, RainyTabContent, FoggyTabContent} from './tabs/tabs-demo'; import {ProjectionDemo, ProjectionTestComponent} from './projection/projection-demo'; +import {PlatformDemo} from './platform/platform-demo'; @NgModule({ imports: [ @@ -84,6 +85,7 @@ import {ProjectionDemo, ProjectionTestComponent} from './projection/projection-d SunnyTabContent, RainyTabContent, FoggyTabContent, + PlatformDemo ], entryComponents: [ DemoApp, diff --git a/src/demo-app/demo-app/demo-app.ts b/src/demo-app/demo-app/demo-app.ts index ae2ab491bdf6..9910a5c5d505 100644 --- a/src/demo-app/demo-app/demo-app.ts +++ b/src/demo-app/demo-app/demo-app.ts @@ -46,6 +46,7 @@ export class DemoApp { {name: 'Snack Bar', route: 'snack-bar'}, {name: 'Tabs', route: 'tabs'}, {name: 'Toolbar', route: 'toolbar'}, - {name: 'Tooltip', route: 'tooltip'} + {name: 'Tooltip', route: 'tooltip'}, + {name: 'Platform', route: 'platform'} ]; } diff --git a/src/demo-app/demo-app/routes.ts b/src/demo-app/demo-app/routes.ts index f2e1cf7b68e9..a92e1acd40e2 100644 --- a/src/demo-app/demo-app/routes.ts +++ b/src/demo-app/demo-app/routes.ts @@ -29,6 +29,7 @@ import {TooltipDemo} from '../tooltip/tooltip-demo'; import {SnackBarDemo} from '../snack-bar/snack-bar-demo'; import {ProjectionDemo} from '../projection/projection-demo'; import {TABS_DEMO_ROUTES} from '../tabs/routes'; +import {PlatformDemo} from '../platform/platform-demo'; export const DEMO_APP_ROUTES: Routes = [ {path: '', component: Home}, @@ -60,4 +61,5 @@ export const DEMO_APP_ROUTES: Routes = [ {path: 'dialog', component: DialogDemo}, {path: 'tooltip', component: TooltipDemo}, {path: 'snack-bar', component: SnackBarDemo}, + {path: 'platform', component: PlatformDemo} ]; diff --git a/src/demo-app/platform/platform-demo.ts b/src/demo-app/platform/platform-demo.ts new file mode 100644 index 000000000000..45283f04fc83 --- /dev/null +++ b/src/demo-app/platform/platform-demo.ts @@ -0,0 +1,19 @@ +import {Component} from '@angular/core'; +import {MdPlatform} from '@angular/material'; + +@Component({ + template: ` +

Is Android: {{ platform.ANDROID }}

+

Is iOS: {{ platform.IOS }}

+

Is Firefox: {{ platform.FIREFOX }}

+

Is Blink: {{ platform.BLINK }}

+

Is Webkit: {{ platform.WEBKIT }}

+

Is Trident: {{ platform.TRIDENT }}

+ + ` +}) +export class PlatformDemo { + + constructor(public platform: MdPlatform) {} + +} diff --git a/src/lib/core/a11y/focus-trap.spec.ts b/src/lib/core/a11y/focus-trap.spec.ts index e4c6a7d0458e..c262e1f01df5 100644 --- a/src/lib/core/a11y/focus-trap.spec.ts +++ b/src/lib/core/a11y/focus-trap.spec.ts @@ -3,6 +3,7 @@ import {By} from '@angular/platform-browser'; import {Component} from '@angular/core'; import {FocusTrap} from './focus-trap'; import {InteractivityChecker} from './interactivity-checker'; +import {MdPlatform} from '../platform/platform'; describe('FocusTrap', () => { @@ -12,7 +13,7 @@ describe('FocusTrap', () => { beforeEach(() => TestBed.configureTestingModule({ declarations: [FocusTrap, FocusTrapTestApp], - providers: [InteractivityChecker] + providers: [InteractivityChecker, MdPlatform] })); beforeEach(inject([InteractivityChecker], (c: InteractivityChecker) => { @@ -45,7 +46,7 @@ describe('FocusTrap', () => { beforeEach(() => TestBed.configureTestingModule({ declarations: [FocusTrap, FocusTrapTargetTestApp], - providers: [InteractivityChecker] + providers: [InteractivityChecker, MdPlatform] })); beforeEach(inject([InteractivityChecker], (c: InteractivityChecker) => { diff --git a/src/lib/core/a11y/index.ts b/src/lib/core/a11y/index.ts index 70621bb45e90..0e285f77d60c 100644 --- a/src/lib/core/a11y/index.ts +++ b/src/lib/core/a11y/index.ts @@ -2,10 +2,12 @@ import {NgModule, ModuleWithProviders} from '@angular/core'; import {FocusTrap} from './focus-trap'; import {MdLiveAnnouncer} from './live-announcer'; import {InteractivityChecker} from './interactivity-checker'; +import {PlatformModule} from '../platform/platform'; export const A11Y_PROVIDERS = [MdLiveAnnouncer, InteractivityChecker]; @NgModule({ + imports: [PlatformModule], declarations: [FocusTrap], exports: [FocusTrap], }) diff --git a/src/lib/core/a11y/interactivity-checker.spec.ts b/src/lib/core/a11y/interactivity-checker.spec.ts index 648499781aef..2a7e0cdaa8b7 100644 --- a/src/lib/core/a11y/interactivity-checker.spec.ts +++ b/src/lib/core/a11y/interactivity-checker.spec.ts @@ -1,14 +1,18 @@ import {InteractivityChecker} from './interactivity-checker'; +import {MdPlatform} from '../platform/platform'; +import {async} from '@angular/core/testing'; describe('InteractivityChecker', () => { let testContainerElement: HTMLElement; let checker: InteractivityChecker; + let platform: MdPlatform; beforeEach(() => { testContainerElement = document.createElement('div'); document.body.appendChild(testContainerElement); - checker = new InteractivityChecker(); + platform = new MdPlatform(); + checker = new InteractivityChecker(platform); }); afterEach(() => { @@ -280,6 +284,178 @@ describe('InteractivityChecker', () => { .toBe(true, `Expected <${el.nodeName} tabindex="0"> to be tabbable`); }); }); + + it('should respect the inherited tabindex inside of frame elements', () => { + let iframe = createFromTemplate('