Skip to content

Commit bdf8ca7

Browse files
committed
Add keyboard tracking demo to overlay
1 parent 1333efe commit bdf8ca7

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

src/demo-app/demo-app/demo-module.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ import {ListDemo} from '../list/list-demo';
1919
import {BaselineDemo} from '../baseline/baseline-demo';
2020
import {GridListDemo} from '../grid-list/grid-list-demo';
2121
import {LiveAnnouncerDemo} from '../live-announcer/live-announcer-demo';
22-
import {OverlayDemo, RotiniPanel, SpagettiPanel} from '../overlay/overlay-demo';
22+
import {
23+
OverlayDemo,
24+
RotiniPanel,
25+
SpagettiPanel,
26+
KeyboardTrackingPanel
27+
} from '../overlay/overlay-demo';
2328
import {SlideToggleDemo} from '../slide-toggle/slide-toggle-demo';
2429
import {ToolbarDemo} from '../toolbar/toolbar-demo';
2530
import {ButtonDemo} from '../button/button-demo';
@@ -72,6 +77,7 @@ import {TableHeaderDemo} from '../table/table-header-demo';
7277
IconDemo,
7378
InputDemo,
7479
JazzDialog,
80+
KeyboardTrackingPanel,
7581
ContentElementDialog,
7682
IFrameDialog,
7783
ListDemo,
@@ -117,6 +123,7 @@ import {TableHeaderDemo} from '../table/table-header-demo';
117123
RotiniPanel,
118124
ScienceJoke,
119125
SpagettiPanel,
126+
KeyboardTrackingPanel,
120127
],
121128
})
122129
export class DemoModule {}

src/demo-app/overlay/overlay-demo.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@
3636
</ng-template>
3737

3838
<button (click)="openPanelWithBackdrop()">Backdrop panel</button>
39+
40+
<button (click)="openKeyboardTracking()">Keyboard tracking</button>

src/demo-app/overlay/overlay-demo.scss

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,11 @@
2727
background-color: orangered;
2828
opacity: 0.5;
2929
}
30+
31+
.demo-keyboard {
32+
margin: 0;
33+
padding: 10px;
34+
border: 1px solid black;
35+
background-color: mediumturquoise;
36+
opacity: 0.7;
37+
}

src/demo-app/overlay/overlay-demo.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
Portal,
1818
TemplatePortalDirective,
1919
} from '@angular/material';
20+
import 'rxjs/add/operator/filter';
21+
import 'rxjs/add/operator/do';
2022

2123

2224
@Component({
@@ -110,6 +112,26 @@ export class OverlayDemo {
110112
overlayRef.backdropClick().subscribe(() => overlayRef.detach());
111113
}
112114

115+
openKeyboardTracking() {
116+
let config = new OverlayState();
117+
118+
config.positionStrategy = this.overlay.position()
119+
.global()
120+
.centerHorizontally()
121+
.top(`${this.nextPosition}px`);
122+
123+
this.nextPosition += 30;
124+
125+
let overlayRef = this.overlay.create(config);
126+
const componentRef = overlayRef
127+
.attach(new ComponentPortal(KeyboardTrackingPanel, this.viewContainerRef));
128+
overlayRef.keyboardEvents()
129+
.filter(e => e.type === 'keydown')
130+
.do(e => componentRef.instance.lastKeydown = e.key)
131+
.filter(e => e.key === 'Escape')
132+
.subscribe(() => overlayRef.detach());
133+
}
134+
113135
}
114136

115137
/** Simple component to load into an overlay */
@@ -130,3 +152,12 @@ export class RotiniPanel {
130152
export class SpagettiPanel {
131153
value: string = 'Omega';
132154
}
155+
156+
/** Simple component to load into an overlay */
157+
@Component({
158+
selector: 'keyboard-panel',
159+
template: '<div class="demo-keyboard">Last Keydown: {{ lastKeydown }}</div>'
160+
})
161+
export class KeyboardTrackingPanel {
162+
lastKeydown = '';
163+
}

0 commit comments

Comments
 (0)