Commit | Line | Data |
---|---|---|
6a1aa64f DV |
1 | /* |
2 | ||
3 | Key Events: A Really Simple Key Handler | |
4 | ||
5 | */ | |
6 | ||
7 | KeyEvents = { | |
8 | handled: false, | |
9 | handleF1: function() { | |
10 | replaceChildNodes('specialMessage', 'You invoked the special F1 handler!'); | |
11 | }, | |
12 | handleEscape: function() { | |
13 | replaceChildNodes('specialMessage', 'You invoked the special Escape handler!'); | |
14 | }, | |
15 | updateModifiers: function(e) { | |
16 | var modifiers = e.modifier(); | |
17 | replaceChildNodes('shift', modifiers.shift); | |
18 | replaceChildNodes('ctrl', modifiers.ctrl); | |
19 | replaceChildNodes('alt', modifiers.alt); | |
20 | replaceChildNodes('meta', modifiers.meta); | |
21 | } | |
22 | }; | |
23 | ||
24 | KeyEvents.specialKeyMap = { | |
25 | 'KEY_F1': KeyEvents.handleF1, | |
26 | 'KEY_ESCAPE': KeyEvents.handleEscape | |
27 | }; | |
28 | ||
29 | connect(document, 'onkeydown', | |
30 | function(e) { | |
31 | if (getElement('stopBox').checked == true) { | |
32 | e.preventDefault(); | |
33 | } | |
34 | ||
35 | // We're storing a handled flag to work around a Safari bug: | |
36 | // http://bugs.webkit.org/show_bug.cgi?id=3387 | |
37 | if (!KeyEvents.handled) { | |
38 | var key = e.key(); | |
39 | var fn = KeyEvents.specialKeyMap[key.string]; | |
40 | if (fn) { | |
41 | fn(); | |
42 | } | |
43 | replaceChildNodes('onkeydown_code', key.code); | |
44 | replaceChildNodes('onkeydown_string', key.string); | |
45 | KeyEvents.updateModifiers(e); | |
46 | } | |
47 | KeyEvents.handled = true; | |
48 | }); | |
49 | ||
50 | connect(document, 'onkeyup', | |
51 | function(e) { | |
52 | if (getElement('stopBox').checked == true) { | |
53 | e.preventDefault(); | |
54 | } | |
55 | ||
56 | KeyEvents.handled = false; | |
57 | var key = e.key(); | |
58 | replaceChildNodes('onkeyup_code', key.code); | |
59 | replaceChildNodes('onkeyup_string', key.string); | |
60 | KeyEvents.updateModifiers(e); | |
61 | }); | |
62 | ||
63 | connect(document, 'onkeypress', | |
64 | function(e) { | |
65 | if (getElement('stopBox').checked == true) { | |
66 | e.preventDefault(); | |
67 | } | |
68 | ||
69 | var key = e.key(); | |
70 | replaceChildNodes('onkeypress_code', key.code); | |
71 | replaceChildNodes('onkeypress_string', key.string); | |
72 | KeyEvents.updateModifiers(e); | |
73 | }); | |
74 | ||
75 | connect(window, 'onload', | |
76 | function() { | |
77 | var elems = getElementsByTagAndClassName("A", "view-source"); | |
78 | var page = "key_events/"; | |
79 | for (var i = 0; i < elems.length; i++) { | |
80 | var elem = elems[i]; | |
81 | var href = elem.href.split(/\//).pop(); | |
82 | elem.target = "_blank"; | |
83 | elem.href = "../view-source/view-source.html#" + page + href; | |
84 | } | |
85 | }); |