feat: add single option. (#463)

* feat: single callback

* type: Option.single
pull/459/head
AllenLee 1 year ago committed by GitHub
parent 7782744eaa
commit 7bf34e9dfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,5 @@
/**!
* hotkeys-js v3.12.0
* hotkeys-js v3.12.2
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
*
* Copyright (c) 2023 kenny wong <wowohoo@qq.com>
@ -501,6 +501,7 @@ function hotkeys(key, option, method) {
if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line
if (option.capture !== undefined) capture = option.capture; // eslint-disable-line
if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line
if (option.singleton === true) ; // eslint-disable-line
}
if (typeof option === 'string') scope = option;

File diff suppressed because one or more lines are too long

@ -1,5 +1,5 @@
/**!
* hotkeys-js v3.12.0
* hotkeys-js v3.12.2
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
*
* Copyright (c) 2023 kenny wong <wowohoo@qq.com>
@ -499,6 +499,7 @@ function hotkeys(key, option, method) {
if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line
if (option.capture !== undefined) capture = option.capture; // eslint-disable-line
if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line
if (option.singleton === true) ; // eslint-disable-line
}
if (typeof option === 'string') scope = option;

3
dist/hotkeys.js vendored

@ -1,5 +1,5 @@
/**!
* hotkeys-js v3.12.0
* hotkeys-js v3.12.2
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
*
* Copyright (c) 2023 kenny wong <wowohoo@qq.com>
@ -505,6 +505,7 @@
if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line
if (option.capture !== undefined) capture = option.capture; // eslint-disable-line
if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line
if (option.singleton === true) ; // eslint-disable-line
}
if (typeof option === 'string') scope = option;

File diff suppressed because one or more lines are too long

29
index.d.ts vendored

@ -18,6 +18,7 @@ type Options = {
keydown?: boolean | null;
capture?: boolean
splitKey?: string;
single?: boolean;
}
export interface Hotkeys {
@ -39,7 +40,7 @@ export interface Hotkeys {
/**
* Use the `hotkeys.setScope` method to set scope. There can only be one active scope besides 'all'. By default 'all' is always active.
*
*
* ```js
* // Define shortcuts with a scope
* hotkeys('ctrl+o, ctrl+alt+enter', 'issues', function() {
@ -48,7 +49,7 @@ export interface Hotkeys {
* hotkeys('o, enter', 'files', function() {
* console.log('do something else');
* });
*
*
* // Set the scope (only 'all' and 'issues' shortcuts will be honored)
* hotkeys.setScope('issues'); // default scope is 'all'
* ```
@ -56,7 +57,7 @@ export interface Hotkeys {
setScope(scopeName: string): void;
/**
* Use the `hotkeys.getScope` method to get scope.
*
*
* ```js
* hotkeys.getScope();
* ```
@ -64,12 +65,12 @@ export interface Hotkeys {
getScope(): string;
/**
* Use the `hotkeys.deleteScope` method to delete a scope. This will also remove all associated hotkeys with it.
*
*
* ```js
* hotkeys.deleteScope('issues');
* ```
* You can use second argument, if need set new scope after deleting.
*
*
* ```js
* hotkeys.deleteScope('issues', 'newScopeName');
* ```
@ -78,13 +79,13 @@ export interface Hotkeys {
/**
* Relinquish HotKeyss control of the `hotkeys` variable.
*
*
* ```js
* var k = hotkeys.noConflict();
* k('a', function() {
* console.log("do something")
* });
*
*
* hotkeys()
* // -->Uncaught TypeError: hotkeys is not a function(anonymous function)
* // @ VM2170:2InjectedScript._evaluateOn
@ -96,7 +97,7 @@ export interface Hotkeys {
/**
* trigger shortcut key event
*
*
* ```js
* hotkeys.trigger('ctrl+o');
* hotkeys.trigger('ctrl+o', 'scope2');
@ -115,7 +116,7 @@ export interface Hotkeys {
isPressed(keyCode: string): boolean;
/**
* Returns an array of key codes currently pressed.
*
*
* ```js
* hotkeys('command+ctrl+shift+a,f', function() {
* console.log(hotkeys.getPressedKeyCodes()); //=> [17, 65] or [70]
@ -125,7 +126,7 @@ export interface Hotkeys {
getPressedKeyCodes(): number[];
/**
* Returns an array of key codes currently pressed.
*
*
* ```js
* hotkeys('command+ctrl+shift+a,f', function() {
* console.log(hotkeys.getPressedKeyString()); //=> ['⌘', '⌃', '⇧', 'A', 'F']
@ -135,7 +136,7 @@ export interface Hotkeys {
getPressedKeyString(): string[];
/**
* Get a list of all registration codes.
*
*
* ```js
* hotkeys('command+ctrl+shift+a,f', function() {
* console.log(hotkeys.getAllKeyCodes());
@ -145,7 +146,7 @@ export interface Hotkeys {
* // ]
* })
* ```
*
*
*/
getAllKeyCodes(): Omit<HotkeysEvent, 'method' | 'key'>;
@ -153,7 +154,7 @@ export interface Hotkeys {
* By default hotkeys are not enabled for `INPUT` `SELECT` `TEXTAREA` elements.
* `Hotkeys.filter` to return to the `true` shortcut keys set to play a role,
* `false` shortcut keys set up failure.
*
*
* ```js
* hotkeys.filter = function(event){
* return true;
@ -165,7 +166,7 @@ export interface Hotkeys {
* var tagName = target.tagName;
* return !(target.isContentEditable || tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');
* }
*
*
* hotkeys.filter = function(event){
* var tagName = (event.target || event.srcElement).tagName;
* hotkeys.setScope(/^(INPUT|TEXTAREA|SELECT)$/.test(tagName) ? 'input' : 'other');

7
package-lock.json generated

@ -1,12 +1,12 @@
{
"name": "hotkeys-js",
"version": "3.11.2",
"version": "3.12.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "hotkeys-js",
"version": "3.11.2",
"version": "3.12.2",
"license": "MIT",
"devDependencies": {
"@babel/eslint-parser": "^7.18.9",
@ -39,6 +39,9 @@
"rimraf": "^5.0.1",
"rollup": "^3.26.2",
"uglify-js": "^3.17.4"
},
"funding": {
"url": "https://jaywcjlove.github.io/#/sponsor"
}
},
"node_modules/@aashutoshrathi/word-wrap": {

@ -350,6 +350,7 @@ function hotkeys(key, option, method) {
let keydown = true;
let splitKey = '+';
let capture = false;
let single = false; // 单个callback
// 对为设定范围的判断
if (method === undefined && typeof option === 'function') {
@ -363,6 +364,7 @@ function hotkeys(key, option, method) {
if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line
if (option.capture !== undefined) capture = option.capture; // eslint-disable-line
if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line
if (option.single === true) single = true; // eslint-disable-line
}
if (typeof option === 'string') scope = option;
@ -381,6 +383,9 @@ function hotkeys(key, option, method) {
// 判断key是否在_handlers中不在就赋一个空数组
if (!(key in _handlers)) _handlers[key] = [];
// 如果只允许单个callback重新设置_handlers
if (single) _handlers[key] = [];
_handlers[key].push({
keyup,
keydown,

Loading…
Cancel
Save