UNPKG

angular2-hotkeys

Version:

Angular 16 and Ivy Compatible. Older versions might work but isn't officially tested.

1 lines 27.6 kB
{"version":3,"file":"angular2-hotkeys.mjs","sources":["../../src/lib/hotkey.model.ts","../../src/lib/hotkey.options.ts","../../src/lib/hotkeys.service.ts","../../src/lib/hotkeys.directive.ts","../../src/lib/hotkeys-cheatsheet/hotkeys-cheatsheet.component.ts","../../src/lib/hotkeys-cheatsheet/hotkeys-cheatsheet.component.html","../../src/lib/hotkey.module.ts","../../src/public-api.ts","../../src/angular2-hotkeys.ts"],"sourcesContent":["export interface ExtendedKeyboardEvent extends KeyboardEvent {\n returnValue: boolean; // IE returnValue\n}\n\nexport class Hotkey {\n private formattedHotkey: string[];\n\n static symbolize(combo: string): string {\n const map: any = {\n command: '\\u2318', // ⌘\n shift: '\\u21E7', // ⇧\n left: '\\u2190', // ←\n right: '\\u2192', // →\n up: '\\u2191', // ↑\n down: '\\u2193', // ↓\n // tslint:disable-next-line:object-literal-key-quotes\n 'return': '\\u23CE', // ⏎\n backspace: '\\u232B' // ⌫\n };\n const comboSplit: string[] = combo.split('+');\n\n for (let i = 0; i < comboSplit.length; i++) {\n // try to resolve command / ctrl based on OS:\n if (comboSplit[i] === 'mod') {\n if (window.navigator && window.navigator.platform.indexOf('Mac') >= 0) {\n comboSplit[i] = 'command';\n } else {\n comboSplit[i] = 'ctrl';\n }\n }\n\n comboSplit[i] = map[comboSplit[i]] || comboSplit[i];\n }\n\n return comboSplit.join(' + ');\n }\n\n /**\n * Creates a new Hotkey for Mousetrap binding\n *\n * @param combo mousetrap key binding\n * @param callback method to call when key is pressed\n * @param allowIn an array of tag names to allow this combo in ('INPUT', 'SELECT', and/or 'TEXTAREA')\n * @param description description for the help menu\n * @param action the type of event to listen for (for mousetrap)\n * @param persistent if true, the binding is preserved upon route changes\n */\n constructor(public combo: string | string[], public callback: (event: KeyboardEvent, combo: string) => ExtendedKeyboardEvent | boolean,\n public allowIn?: string[], public description?: string | Function, public action?: string,\n public persistent?: boolean) {\n this.combo = (Array.isArray(combo) ? combo : [combo as string]);\n this.allowIn = allowIn || [];\n this.description = description || '';\n }\n\n get formatted(): string[] {\n if (!this.formattedHotkey) {\n\n const sequence: string[] = [...this.combo] as Array<string>;\n for (let i = 0; i < sequence.length; i++) {\n sequence[i] = Hotkey.symbolize(sequence[i]);\n }\n this.formattedHotkey = sequence;\n }\n return this.formattedHotkey;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface IHotkeyOptions {\n /**\n * Disable the cheat sheet popover dialog? Default: false\n */\n disableCheatSheet?: boolean;\n /**\n * Key combination to trigger the cheat sheet. Default: '?'\n */\n cheatSheetHotkey?: string;\n\n /**\n * Use also ESC for closing the cheat sheet. Default: false\n */\n cheatSheetCloseEsc?: boolean;\n /**\n * Description for the ESC key for closing the cheat sheet (if enabed). Default: 'Hide this help menu'\n */\n cheatSheetCloseEscDescription?: string;\n /**\n * Description for the cheat sheet hot key in the cheat sheet. Default: 'Show / hide this help menu'\n */\n cheatSheetDescription?: string;\n}\n\nexport const HotkeyOptions = new InjectionToken<IHotkeyOptions>('HotkeyOptions');\n","import { Inject, Injectable } from '@angular/core';\nimport { Hotkey } from './hotkey.model';\nimport { Subject } from 'rxjs';\nimport { HotkeyOptions, IHotkeyOptions } from './hotkey.options';\nimport { MousetrapInstance } from 'mousetrap';\nimport * as Mousetrap from 'mousetrap';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HotkeysService {\n hotkeys: Hotkey[] = [];\n pausedHotkeys: Hotkey[] = [];\n mousetrap: MousetrapInstance;\n cheatSheetToggle: Subject<any> = new Subject();\n\n private preventIn = ['INPUT', 'SELECT', 'TEXTAREA'];\n\n constructor(@Inject(HotkeyOptions) private options: IHotkeyOptions) {\n // noinspection JSUnusedGlobalSymbols,JSUnusedLocalSymbols\n Mousetrap.prototype.stopCallback = (event: KeyboardEvent, element: HTMLElement, combo: string, callback: Function) => {\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n return (element.contentEditable && element.contentEditable === 'true');\n };\n this.mousetrap = new (Mousetrap as any).default();\n this.initCheatSheet();\n }\n\n private initCheatSheet() {\n if (!this.options.disableCheatSheet) {\n this.add(new Hotkey(\n this.options.cheatSheetHotkey || '?',\n function(_: KeyboardEvent) {\n this.cheatSheetToggle.next();\n }.bind(this),\n [],\n this.options.cheatSheetDescription || 'Show / hide this help menu',\n ));\n }\n\n if (this.options.cheatSheetCloseEsc) {\n this.add(new Hotkey(\n 'esc',\n function(_: KeyboardEvent) {\n this.cheatSheetToggle.next(false);\n }.bind(this),\n ['HOTKEYS-CHEATSHEET'],\n this.options.cheatSheetCloseEscDescription || 'Hide this help menu',\n ));\n }\n\n }\n\n add(hotkey: Hotkey | Hotkey[], specificEvent?: string): Hotkey | Hotkey[] {\n if (Array.isArray(hotkey)) {\n const temp: Hotkey[] = [];\n for (const key of hotkey) {\n temp.push(this.add(key, specificEvent) as Hotkey);\n }\n return temp;\n }\n this.remove(hotkey);\n this.hotkeys.push(hotkey as Hotkey);\n this.mousetrap.bind((hotkey as Hotkey).combo, (event: KeyboardEvent, combo: string) => {\n let shouldExecute = true;\n\n // if the callback is executed directly `hotkey.get('w').callback()`\n // there will be no event, so just execute the callback.\n if (event) {\n const target: HTMLElement = (event.target || event.srcElement) as HTMLElement; // srcElement is IE only\n const nodeName: string = target.nodeName.toUpperCase();\n\n // check if the input has a mousetrap class, and skip checking preventIn if so\n if ((' ' + target.className + ' ').indexOf(' mousetrap ') > -1) {\n shouldExecute = true;\n } else if (this.preventIn.indexOf(nodeName) > -1 &&\n (hotkey as Hotkey).allowIn.map(allow => allow.toUpperCase()).indexOf(nodeName) === -1) {\n // don't execute callback if the event was fired from inside an element listed in preventIn but not in allowIn\n shouldExecute = false;\n }\n }\n\n if (shouldExecute) {\n return (hotkey as Hotkey).callback.apply(this, [event, combo]);\n }\n }, specificEvent);\n return hotkey;\n }\n\n remove(hotkey?: Hotkey | Hotkey[], specificEvent?: string): Hotkey | Hotkey[] {\n const temp: Hotkey[] = [];\n if (!hotkey) {\n for (const key of this.hotkeys) {\n temp.push(this.remove(key, specificEvent) as Hotkey);\n }\n return temp;\n }\n if (Array.isArray(hotkey)) {\n for (const key of hotkey) {\n temp.push(this.remove(key) as Hotkey);\n }\n return temp;\n }\n const index = this.findHotkey(hotkey as Hotkey);\n if (index > -1) {\n this.hotkeys.splice(index, 1);\n this.mousetrap.unbind((hotkey as Hotkey).combo, specificEvent);\n return hotkey;\n }\n return null;\n }\n\n get(combo?: string | string[]): Hotkey | Hotkey[] {\n if (!combo) {\n return this.hotkeys;\n }\n if (Array.isArray(combo)) {\n const temp: Hotkey[] = [];\n for (const key of combo) {\n temp.push(this.get(key) as Hotkey);\n }\n return temp;\n }\n for (const hotkey of this.hotkeys) {\n if (hotkey.combo.indexOf(combo as string) > -1) {\n return hotkey;\n }\n }\n return null;\n }\n\n // noinspection JSUnusedGlobalSymbols\n pause(hotkey?: Hotkey | Hotkey[]): Hotkey | Hotkey[] {\n if (!hotkey) {\n return this.pause(this.hotkeys);\n }\n if (Array.isArray(hotkey)) {\n const temp: Hotkey[] = [];\n for (const key of hotkey.slice()) {\n temp.push(this.pause(key) as Hotkey);\n }\n return temp;\n }\n this.remove(hotkey);\n this.pausedHotkeys.push(hotkey as Hotkey);\n return hotkey;\n }\n\n // noinspection JSUnusedGlobalSymbols\n unpause(hotkey?: Hotkey | Hotkey[]): Hotkey | Hotkey[] {\n if (!hotkey) {\n return this.unpause(this.pausedHotkeys);\n }\n if (Array.isArray(hotkey)) {\n const temp: Hotkey[] = [];\n for (const key of hotkey.slice()) {\n temp.push(this.unpause(key) as Hotkey);\n }\n return temp;\n }\n const index: number = this.pausedHotkeys.indexOf(hotkey as Hotkey);\n if (index > -1) {\n this.add(hotkey);\n return this.pausedHotkeys.splice(index, 1);\n }\n return null;\n }\n\n // noinspection JSUnusedGlobalSymbols\n reset() {\n this.mousetrap.reset();\n this.hotkeys = [];\n this.pausedHotkeys = [];\n this.initCheatSheet();\n }\n\n private findHotkey(hotkey: Hotkey): number {\n return this.hotkeys.indexOf(hotkey);\n }\n}\n\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ExtendedKeyboardEvent, Hotkey } from './hotkey.model';\nimport { HotkeysService } from './hotkeys.service';\nimport { MousetrapInstance } from 'mousetrap';\nimport * as Mousetrap from 'mousetrap';\n\n@Directive({\n selector: '[hotkeys]',\n providers: [HotkeysService]\n})\nexport class HotkeysDirective implements OnInit, OnDestroy {\n @Input() hotkeys: { [combo: string]: (event: KeyboardEvent, combo: string) => ExtendedKeyboardEvent }[];\n\n private mousetrap: MousetrapInstance;\n private hotkeysList: Hotkey[] = [];\n private oldHotkeys: Hotkey[] = [];\n\n constructor(private hotkeysService: HotkeysService, private elementRef: ElementRef) {\n // Bind hotkeys to the current element (and any children)\n this.mousetrap = new (Mousetrap as any).default(this.elementRef.nativeElement);\n }\n\n ngOnInit() {\n for (const hotkey of this.hotkeys) {\n const combo = Object.keys(hotkey)[0];\n const hotkeyObj: Hotkey = new Hotkey(combo, hotkey[combo]);\n const oldHotkey: Hotkey = this.hotkeysService.get(combo) as Hotkey;\n if (oldHotkey !== null) { // We let the user overwrite callbacks temporarily if you specify it in HTML\n this.oldHotkeys.push(oldHotkey);\n this.hotkeysService.remove(oldHotkey);\n }\n this.hotkeysList.push(hotkeyObj);\n this.mousetrap.bind(hotkeyObj.combo, hotkeyObj.callback);\n }\n }\n\n ngOnDestroy() {\n for (const hotkey of this.hotkeysList) {\n this.mousetrap.unbind(hotkey.combo);\n }\n this.hotkeysService.add(this.oldHotkeys);\n }\n\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Hotkey } from '../hotkey.model';\nimport { HotkeysService } from '../hotkeys.service';\nimport {BehaviorSubject, Subscription} from 'rxjs';\n\n@Component({\n selector: 'hotkeys-cheatsheet',\n templateUrl: './hotkeys-cheatsheet.component.html',\n styleUrls: ['./hotkeys-cheatsheet.component.css']\n})\nexport class HotkeysCheatsheetComponent implements OnInit, OnDestroy {\n helpVisible$ = new BehaviorSubject(false);\n @Input() title = 'Keyboard Shortcuts:';\n subscription: Subscription;\n\n hotkeys: Hotkey[];\n\n constructor(private hotkeysService: HotkeysService) {\n }\n\n public ngOnInit(): void {\n this.subscription = this.hotkeysService.cheatSheetToggle.subscribe((isOpen) => {\n if (isOpen !== false) {\n this.hotkeys = this.hotkeysService.hotkeys.filter(hotkey => hotkey.description);\n }\n\n if (isOpen === false) {\n this.helpVisible$.next(false);\n } else {\n this.toggleCheatSheet();\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n public toggleCheatSheet(): void {\n this.helpVisible$.next(!this.helpVisible$.value);\n }\n}\n","<div class=\"cfp-hotkeys-container fade\" [ngClass]=\"{'in': helpVisible$|async}\" style=\"display:none\">\n <div class=\"cfp-hotkeys\">\n <h4 class=\"cfp-hotkeys-title\">{{ title }}</h4>\n <table>\n <tbody>\n <tr *ngFor=\"let hotkey of hotkeys\">\n <td class=\"cfp-hotkeys-keys\">\n <span *ngFor=\"let key of hotkey.formatted\" class=\"cfp-hotkeys-key\">{{ key }}</span>\n </td>\n <td class=\"cfp-hotkeys-text\">{{ hotkey.description }}</td>\n </tr>\n </tbody>\n </table>\n <div class=\"cfp-hotkeys-close\" (click)=\"toggleCheatSheet()\">&#215;</div>\n </div>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { HotkeysDirective } from './hotkeys.directive';\nimport { HotkeysCheatsheetComponent } from './hotkeys-cheatsheet/hotkeys-cheatsheet.component';\nimport { CommonModule } from '@angular/common';\nimport { HotkeyOptions, IHotkeyOptions } from './hotkey.options';\nimport { HotkeysService } from './hotkeys.service';\n\n@NgModule({\n declarations: [HotkeysDirective, HotkeysCheatsheetComponent],\n imports: [CommonModule],\n exports: [HotkeysDirective, HotkeysCheatsheetComponent]\n})\nexport class HotkeyModule {\n // noinspection JSUnusedGlobalSymbols\n static forRoot(options: IHotkeyOptions = {}): ModuleWithProviders<HotkeyModule> {\n return {\n ngModule : HotkeyModule,\n providers : [\n HotkeysService,\n {provide : HotkeyOptions, useValue : options}\n ]\n };\n }\n}\n","/*\n * Public API Surface of angular2-hotkeys\n */\n\nexport * from './lib/hotkeys.service';\nexport * from './lib/hotkeys.directive';\nexport * from './lib/hotkeys-cheatsheet/hotkeys-cheatsheet.component';\nexport * from './lib/hotkey.model';\nexport * from './lib/hotkey.options';\nexport * from './lib/hotkey.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.HotkeysService"],"mappings":"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"}