/
key.coffee
69 lines (53 loc) · 1.23 KB
/
key.coffee
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
'use strict'
# Key
#
# @copyright Andrew Lawson 2012
# @see http://github.com/adlawson/key
# @see http://npmjs.org/package/key
# @see http://opensource.org/licenses/mit-license.php MIT License
# Dependencies
{isRef} = require './ref'
# Namespace
key = {}
# Keycodes
key.code =
special: require './code/special'
arrow: require './code/arrow'
alnum: require './code/alnum'
brand: require './code/brand'
# Get pressed key information
#
# @param [Number] pressed
# @return [Reference]
key.get = (pressed) =>
iterator key.code, pressed
# Compare a pressed key against a reference
#
# @param [Reference] ref
# @param [Number] pressed
# @return [Boolean]
key.is = (ref, pressed) =>
unless isRef ref
ref = iterator ref, pressed
if isRef ref
if isRef pressed
pressed is ref
else
pressed is ref.code or pressed in ref.code
else
pressed is ref
# Key code iterator
#
# @param [Object] context
# @param [Number] pressed
# @param [Reference]
iterator = (context, pressed) ->
for own i, ref of context
if isRef ref
return ref if key.is ref, pressed
else
out = iterator ref, pressed
return out if isRef out
# Exports
window.key = key if typeof window isnt 'undefined'
module.exports = key