# bacontrap

> Keyboard shortcuts wrapped in Bacon

Latest version **0.4.0** (published 2019-03-13) · 0 weekly downloads

## Install

```sh
npm install bacontrap
pnpm add bacontrap
yarn add bacontrap
bun add bacontrap
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.4.0 |
| Published | 2019-03-13 |
| First published | 2014-06-13 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 123.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 11 |
| Author | Ville Lautanala |
| Maintainers | lautis |

## Links

- npm: https://www.npmjs.com/package/bacontrap
- Repository: https://github.com/lautis/bacontrap
- Homepage: https://github.com/lautis/bacontrap#readme
- Issues: https://github.com/lautis/bacontrap/issues
- npm.io page: https://npm.io/package/bacontrap

## Dependencies (1)

- [baconjs](https://npm.io/package/baconjs.md) >= 0.6.0

## Recent versions

- 0.4.0 (latest) — 2019-03-13
- 0.3.3 — 2014-06-17
- 0.3.2 — 2014-06-17
- 0.3.1 — 2014-06-13

## README

# Bacontrap [![Build Status](https://travis-ci.org/lautis/bacontrap.svg?branch=master)](https://travis-ci.org/lautis/bacontrap)

[Mousetrap](https://github.com/ccampbell/mousetrap) inspired keyboard
shortcuts implemented with [Bacon.js](https://github.com/raimohanska/bacon.js).

Unlike Mousetrap, Bacontrap is not a standalone library: Bacon.js and
jQuery/Zepto are dependencies. Since these provide functionality for
Bacontrap, the library itself is even smaller than Mousetrap.

## Installation

Via NPM:

    $ npm install bacontrap --save

## Usage

```javascript
const Bacontrap = require('Bacontrap');
Bacontrap.bind('4').onValue(function() { console.log('4'); });
Bacontrap.bind('?').onValue(function() { console.log('show shortcuts!'); });
Bacontrap.bind('esc').onValue({ console.log('escape'); });

// combinations
Bacontrap.bind('command+shift+k').onValue(function() { console.log('command shift k'); });

Bacontrap.bind(['command+k', 'ctrl+k']).onValue(function(event) {
  console.log('command k or control k');

  // prevent default browser behaviour
  event.preventDefault();
  // and stop event from bubbling
  event.stopPropagation();
  // return value is used by Bacon to control stream end
  return Bacon.more;
});

// gmail style sequences
Bacontrap.bind('g i').onValue(function() { console.log('go to inbox'); });
Bacontrap.bind('* a').onValue(function() { console.log('select all'); });

// shift+letter = LETTER
Bacontrap.bind('G').onValue(function() { console.log('shift+g'); });
Bacontrap.bind('shift+g').onValue(function() { console.log('also triggered'); });

// konami code!
Bacontrap.bind('up up down down left right left right b a enter').onValue(function() {
  console.log('konami code');
});
```

## Hacking

The build process runs on [gulp](http://gulpjs.com). Assuming npm is installed,
dependencies can be installed by running

    $ npm install

After that, you can run use local gulp from `./node_modules/.bin/gulp` or
have it installed globally with

    $ npm install -g gulp

Then you should be able to run tests with

    $ gulp test

To continously run tests after file changes use

    $ gulp watch

There's also a gulp task for compiling distributable JS files.

    $ gulp dist

## TODO

* Test with Internet Explorer
* Escape as modifier key
* Maybe support for different key events (keydown/keyup)
* Keyboard shortcuts using cmd/ctrl are not triggered on Google Chrome, but using
these is probably a bad idea anyway
* Pressing modifier keys do not interrupt shortcut sequences

---
_Source: https://npm.io/package/bacontrap · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
