On GitHub, madrobby/keymaster has picked up 6.5k stars, JavaScript. A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
Keymaster is a simple micro-library for defining and
dispatching keyboard shortcuts in web applications.
It has no dependencies.
It’s a work in progress (e.g. beta), so spare me your nerdrage and instead
contribute! Patches are welcome, but they are not guaranteed to make
it in.
Usage
Include keymaster.js in your web app*, by loading it as usual:
<script src="keymaster.js"></script>
Keymaster has no dependencies and can be used completely standalone.
It should not interfere with any JavaScript libraries or frameworks.
*Preferably use a minified version that fits your workflow. You can
run make to have UglifyJS (if you have it installed) create a
keymaster.min.js file for you.
Defining shortcuts
One global method is exposed, key which defines shortcuts when
called directly.
// define short of 'a'
key('a', function(){ alert('you pressed a!') });
// returning false stops the event and prevents default browser events
key('ctrl+r', function(){ alert('stopped reload!'); return false });
// multiple shortcuts that do the same thing
key('⌘+r, ctrl+r', function(){ });
The handler method is called with two arguments set, the keydown event fired, and
an object containing, among others, the following two properties:
shortcut: a string that contains the shortcut used, e.g. ctrl+rscope: a string describing the scope (or all)
Keymaster understands the following modifiers:
⇧, shift, option, ⌥, alt, ctrl, control, command, and ⌘.
The following special keys can be used for shortcuts:
backspace, tab, clear, enter, return, esc, escape, space,
up, down, left, right, home, end, pageup, pagedown, del, delete
and f1 through f19.
Modifier key queries
At any point in time (even in code other than key shortcut handlers),
you can query the key object for the state of any keys. This
allows easy implementation of things like shift+click handlers. For example,
key.shift is true if the shift key is currently pressed.
if(key.shift) alert('shift is pressed, OMGZ!');
Other key queries
At any point in time (even in code other than key shortcut handlers),
you can query the key object for the state of any key. This
is very helpful for game development using a game loop. For example,
key.isPressed(77) is true if the M key is currently pressed.
if(key.isPressed("M")) alert('M key is pressed, can ya believe it!?');
if(key.isPressed(77)) alert('M key is pressed, can ya believe it!?');
You can also get these as an array using...
key.getPressedKeyCodes() // returns an array of key codes currently pressed
Scopes
If you want to reuse the same shortcut for separate areas in your single page app,
Keymaster supports switching between scopes. Use the key.setScope method to set scope.
// define shortcuts with a scope
key('o, enter', 'issues', function(){ /* do something */ });
key('o, enter', 'files', function(){ /* do something else */ });
// set the scope (only 'all' and 'issues' shortcuts will be honored)
key.setScope('issues'); // default scope is 'all'
// remove all events that are set in 'issues' scope
key.deleteScope('issues');
Filter key presses
By default, when an INPUT, SELECT or TEXTAREA element is focused, Keymaster doesn't process any shortcuts.
You can change this by overwriting key.filter with a new function. This function is called before
Keymaster processes shortcuts, with the keydown event as argument.
If your function returns false, then the no shortcuts will be processed.
If you only want some shortcuts to work while in an input element, you can change the scope in the
key.filter function. Here's an example implementation, setting the scope to either 'input' or 'other'.
Don't forget to return true so the any shortcuts get processed.
However a more robust way to handle this is to use proper
focus and blur event handlers on your input element, and change scopes there as you see fit.
noConflict mode
You can call key.noConflict to remove the key function from global scope and restore whatever key was defined to before Keymaster was loaded. Calling key.noConflict will return the Keymaster key function.
var k = key.noConflict();
k('a', function() { /* ... */ });
key()
// --> TypeError: 'undefined' is not a function
Unbinding shortcuts
Similar to defining shortcuts, they can be unbound using key.unbind.
// unbind 'a' handler
key.unbind('a');
// unbind a key only for a single scope
// when no scope is specified it defaults to the current scope (key.getScope())
key.unbind('o, enter', 'issues');
key.unbind('o, enter', 'files');
Notes
Keymaster should work with any browser that fires keyup and keydown events,
and is tested with IE (6+), Safari, Firefox and Chrome.
See http://madrobby.github.com/keymaster/ for a live demo.
CoffeeScript
If you're using CoffeeScript, configuring key shortcuts couldn't be simpler:
key 'a', -> alert('you pressed a!')
key '⌘+r, ctrl+r', ->
alert 'stopped reload!'
off
key 'o, enter', 'issues', ->
whatevs()
alert 'shift is pressed, OMGZ!' if key.shift
Contributing
To contribute, please fork Keymaster, add your patch and tests for it (in the test/ folder) and
submit a pull request.
TODOs
Finish test suite
Keymaster is (c) 2011-2013 Thomas Fuchs and may be freely distributed under the MIT license.
See the MIT-LICENSE file.
No homepage URL was recorded for madrobby/keymaster in TopGit's last sync. The README tab above frequently contains screenshots and demo links, or check the repository description on GitHub.
How many stars does madrobby/keymaster have?
madrobby/keymaster has 6.5k GitHub stars — refresh the page for the live number, or check github.com/madrobby/keymaster. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is madrobby/keymaster open source?
Yes — madrobby/keymaster ships under the MIT license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/madrobby/keymaster.
What is madrobby/keymaster?
madrobby/keymaster (madrobby/keymaster) is a JavaScript project on GitHub. From the project's own README: A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
Where do I read more about madrobby/keymaster?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/madrobby/keymaster is the definitive source.
Read full README in the tab above.
Still deciding about keymaster?
One click hands the question to an AI along with this page — see what it says about keymaster.