Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/soska/keyboardist
An easy way to add keyboard shortcuts to your javascript applications.
https://github.com/soska/keyboardist
Last synced: 3 months ago
JSON representation
An easy way to add keyboard shortcuts to your javascript applications.
- Host: GitHub
- URL: https://github.com/soska/keyboardist
- Owner: soska
- License: mit
- Created: 2018-05-13T03:55:07.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T11:54:29.000Z (almost 2 years ago)
- Last Synced: 2024-07-17T08:11:29.046Z (4 months ago)
- Language: TypeScript
- Size: 1.8 MB
- Stars: 36
- Watchers: 2
- Forks: 3
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🎹 Keyboardist: Declarative keyboard listener
![](assets/cover.png)
A declarative way to add keyboard shortcuts to your browser applications.
[Here is a simple demo](https://soska.github.io/keyboardist/docs/index.html)For using with React, there's
[React Keyboardist](https://github.com/soska/react-keyboardist).Example:
```javascript
import { createListener } from "keyboardist";// by default it listens to keydown
const listener = createListener();listener.subscribe("Down", () => {
console.log("Pressed down");
});listener.subscribe("Shift+Down", () => {
console.log("Pressed Shift + down");
});
```## Install
Example:
```sh
npm install keyboardist
```## Usage
The `Keyboardist` constructor returns a listener object that has only one
method: `subscribe`.`subscribe` accepts two arguments: a key or key combination and a method that
will be called when that key (or key combination) is triggered by the user.Example:
```javascript
import { createListener } from "keyboardist";const listener = new createListener();
const keySubscription = listener.subscribe("Slash", () => {
focusSearch();
});
```The object returned by `subscribe` has an `unsubscribe` method.
```javascript
// create a subscription
const keySubscription = listener.subscribe("Slash", () => {
focusSearch();
});// remove the subscription
keySubscription.unsubscribe();
```## Multiple listeners for a Key
You can add multiple listeners for the same key, and they will be executed
starting from the last one.```javascript
// create a subscriptionlistener.subscribe("Space", () => {
console.log("A");
});listener.subscribe("Space", () => {
console.log("B");
});listener.subscribe("Space", () => {
console.log("C");
});// the console will log 'C', then 'B', then 'A' when the spacebr is pressed.
```## Key Monitor
Keyboardist's event listener has a `setMonitor` method that let's you set a
function that will monitor all key events. You can either pass `true` to use the
default built-in monitor or pass a function.Default monitor is useful in development when you don't know the correct key
name you want to use.```javascript
const listener = new Keyboardist();
// ue the default monitor
listener.setMonitor(true);// will show the key names / combination as you type them. For example:
// `:keyboard event: KeyA`
// `:keyboard event: Slash`
// `:keyboard event: Shift+Space`
```You can also pass a custom function that accepts three parameters: `keyName`,
`matched` which is true if there's at least a listener for that key, and the
`originalEvent` (which has already been _preventDefaulted_ at this point).```javascript
const listener = new Keyboardist();
// ue the default monitor
listener.setMonitor((keyName, matched, originalEvent) => {
document.getElementById("monitor").innerHTML = `You pressed ${keyName}`;
});
```## Other events
By default, the listener listens to `keydown` events, but you can pass `keyup`
as an argument to `Keyboardist` to use that event instead```javascript
const downListener = createListener();
const upListener = Keyboardist("keyup");downListener.subscribe("a", () => {
console.log("Just pressed the A key");
});upListener.subscribe("a", () => {
console.log("Just released the A key");
});
```## Stop listening
Internally `createListener` attaches only one event listener to your document to
listen to your keystrokes. If you ever want to remove that listener you can call
`stopListening` on the listener instance.```javascript
const listener = createListener();listener.subscribe("a", () => {
console.log("Just pressed the A key");
});// Remove the event listener from the document
listener.stopListening();// Reattach it again:
listener.startListening();
```