1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137> # โ ๏ธ This project is no longer being maintained. # Keybinding     A typescript library to handle hotkeys in browser. ## Usage ```bash $ yarn add keybinding ``` ```javascript import Keybinding from 'keybinding'; const keybinding = new Keybinding(); keybinding.on('ctrl + a', () => { console.log('ctrl + a pressed!'); }); ``` ### Supported Keys Keybinding support function keys, common modifier keys and some special keys. You can use their handy name to bind event. - Function keys: `f1` - `f12` - Shift: `shift` - Meta: `meta`, `windows`, `command`, `cmd` - Control: `control`, `ctrl` - Alt: `alt`, `option` - Space: `space` - Arrow keys: `up`, `down`, `left`, `right` - Backspace: `backspace`, `back` - Enter: `enter` - Alphabet keys: `a` - `z` and `A` - `Z` - Number keys: `0` - `9` - Punctuation keys: `` ` ``,`-`, `+`, `[`, `]`, `\`, `;`, `'`, `,`, `.`, `/` ### API **construct options** ```typescript interface IKeybindingOptions { /** * Do not call handler when focus on editable element. * Default to true. */ filterEditable: boolean; } new Keybinding(options?: IKeybindingOptions); ``` **on** Add a hotkey handler. ```typescript /** * @param key hotkey string * @param handler callback function when the hotkey pressed * @param scope the scope which bind at, use 'default' by default */ keybinding.on(key: string, handler: (keybind: Keybinding) => any, scope?: string): void keybind.on('ctrl + a', () => { console.log('ctrl + a pressed')! }); // Key is case-insensitive and space-trimming. Thus, the following two calls are equal. keybind.on('cTRl + A', console.log); keybind.on('ctrl+a', console.log); ``` **off** Remove a hotkey handler. ```typescript /** * @param key hotkey string * @param handler callback function to remove * @param scope the scope which bind at, use 'default' by default */ keybinding.off(key: string, handler: (keybind: Keybinding) => any, scope?: string): void keybind.off('ctrl + a', aBoundHandler); ``` > Scopes are used to control whether handler should be called when the bound hotkey was pressed. See more detail in `disable`/`enable` method. **disable/enable** `disable` method will disable the given scope's handlers. All handlers under the given scope will not be called even if the hotkeys they bound was pressed until the `enable` method called. ```typescript /** * Disable given scope's hotkeys. * @param scope scope to disable, use 'all' by default */ keybinding.disable(scope?: string); /** * Enable given scope's hotkeys * @param scope Scope to enable, use 'all' by default */ keybinding.enable(scope?: string); // After pressing Control + A, handlerA won't be called but handlerB will still be called. keybind.on('ctrl + a', handlerA); keybind.on('ctrl + a', handlerB, 'scope2'); keybind.disable('default'); // You can choose to pass no parameter to disable all handler. // In the following example, both handlerC and handlerD won't be called. keybind.on('ctrl + a', handlerC, 'scope'); keybind.on('ctrl + a', handlerD, 'scope2'); keybind.disable(); // equal to keybind.disable('all') // use enable to restore given disabled scope keybind.enable('scope1') // enable 'scope1' keybind.enable() // enable all scope, equal to keybind.disable('all') ``` **destroy** Destroy instance. ```typescript keybind.destroy(); ```