/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {Component, NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
@Component({
selector: 'key-events-app',
template: `Click in the following area and press a key to display its name:
{{lastKey}}
Click in the following area and press shift.enter:
{{shiftEnter ? 'You pressed shift.enter!' : ''}}
`
})
class KeyEventsApp {
lastKey: string = '(none)';
shiftEnter: boolean = false;
onKeyDown(event: KeyboardEvent): void {
this.lastKey = KeyEventsApp._getEventFullKey(event);
event.preventDefault();
}
onShiftEnter(event: KeyboardEvent): void {
this.shiftEnter = true;
event.preventDefault();
}
resetShiftEnter(): void { this.shiftEnter = false; }
/**
* Get a more readable version of current pressed keys.
* @see KeyEventsPlugin.getEventFullKey
*/
private static _getEventFullKey(event: KeyboardEvent): string {
const modifierKeys = ['alt', 'control', 'meta', 'shift'];
const modifierKeyGetters: {[key: string]: (event: KeyboardEvent) => boolean} = {
'alt': (event: KeyboardEvent) => event.altKey,
'control': (event: KeyboardEvent) => event.ctrlKey,
'meta': (event: KeyboardEvent) => event.metaKey,
'shift': (event: KeyboardEvent) => event.shiftKey
};
let fullKey = '';
let key = event.key.toLowerCase();
if (key === ' ') {
key = 'space'; // for readability
} else if (key === '.') {
key = 'dot'; // because '.' is used as a separator in event names
}
modifierKeys.forEach(modifierName => {
if (modifierName != key) {
const modifierGetter = modifierKeyGetters[modifierName];
if (modifierGetter(event)) {
fullKey += modifierName + '.';
}
}
});
return fullKey + key;
}
}
@NgModule({declarations: [KeyEventsApp], bootstrap: [KeyEventsApp], imports: [BrowserModule]})
class ExampleModule {
}
export function main() {
platformBrowserDynamic().bootstrapModule(ExampleModule);
}