2 * (C) Copyright 2008-2009,2013 John J. Foerch
4 * Use, modification, and distribution are subject to the terms specified in the
8 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
9 // const KeyEvent = Components.interfaces.nsIDOMKeyEvent;
11 /* Generate vk name table */
12 var keycode_to_vk_name = [];
13 var vk_name_to_keycode = {};
15 var prefix = "DOM_VK_";
17 /* Check if this is a key binding */
18 if (i.substr(0, prefix.length) == prefix) {
19 var name = i.substr(prefix.length).toLowerCase();
20 var code = KeyEvent[i];
21 keycode_to_vk_name[code] = name;
22 vk_name_to_keycode[name] = code;
27 var special_modifiers = {
28 osKey: function (event) {
29 return ("getModifierState" in event &&
30 event.getModifierState("OS"));
42 // key_event_props: what properties of keyboard events do we care about?
43 var key_event_props = [
44 'type', 'charCode', 'keyCode', 'which', 'ctrlKey',
45 'metaKey', 'altKey', 'osKey', 'shiftKey'];
48 var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
49 .getService(Components.interfaces.nsIAppStartup);
50 appStartup.quit(appStartup.eAttemptQuit);
53 function dumpln (line) {
57 function str_pad (chr, len) {
58 var s = this.toString();
59 while (len - s.length > 0) {
64 String.prototype.pad = str_pad;
67 function key_event_handler (event) {
68 event.preventDefault();
69 event.stopPropagation();
71 var table = document.getElementById('event-table');
72 var row = document.createElementNS(XUL_NS, "listitem");
74 function get_field (k) {
75 if (k in special_modifiers)
76 var v = special_modifiers[k](event);
79 if (typeof v == "boolean")
80 return (v ? (column_names[k] || true) : "");
85 function addcell (text) {
86 var cap = document.createElementNS(XUL_NS, "listcell");
87 cap.setAttribute("label", text);
91 for each (var k in key_event_props) {
92 addcell(get_field(k));
95 if (event.type == 'keypress' &&
96 (event.charCode || event.keyCode))
99 if (event.charCode == 32)
102 charname = String.fromCharCode(event.charCode);
103 } else if (event.keyCode) {
104 charname = keycode_to_vk_name[event.keyCode];
108 table.appendChild(row);
109 table.ensureElementIsVisible(row);
111 dump([get_field(k).toString().pad(' ',11)
112 for each (k in key_event_props)].join(''));
115 window.addEventListener("keydown", key_event_handler, true /* capture */);
116 window.addEventListener("keypress", key_event_handler, true /* capture */);
119 function onload_handler () {
120 var headings = key_event_props.concat("name");
121 var table = document.getElementById('event-table');
122 var head = document.createElementNS(XUL_NS,"listhead");
123 var coldef = document.createElementNS(XUL_NS,"listcols");
125 function addcol (name) {
126 var t = document.createElementNS(XUL_NS,"listheader");
127 if (name in column_names)
128 name = column_names[name];
129 t.setAttribute("label", name);
130 var u = document.createElementNS(XUL_NS,"listcol");
131 u.setAttribute("flex", "1");
133 coldef.appendChild(u);
136 for each (var k in headings) {
139 table.appendChild(head);
140 table.appendChild(coldef);
142 dumpln([k.pad(' ',11) for each (k in headings)].join(''));