1 function setmode(classname) {
2 // set style for each #rows>li>ul>li to display:none unless it matches classname
3 var showclass = classname ? '^mode '+classname+'(?!\\w)' : '^(?!mode)';
4 var rows = document.getElementById('rows').getElementsByTagName('TR');
5 for (var i = 0; i < rows.length; i++) {
7 el.style.display = el.className.match(showclass) ? 'block' : 'none';
10 // update H2 to reflect the first part of a currently active (but hidden) row header
11 var h3s = document.getElementsByTagName('TH');
12 for (var i = 0; i < h3s.length; i++) {
13 if (h3s[i].parentNode.style.display != 'block') continue;
14 document.getElementsByTagName('H2')[0].innerHTML = h3s[i].firstChild.data;
18 var keyfocus = undefined;
19 document.onkeypress = function(e) {
20 var keylabels = document.getElementById('rows').getElementsByTagName('B');
22 for (var i = 0; i < keylabels.length; i++) {
23 keys[keylabels[i].innerHTML] = keylabels[i].parentNode;
25 var input = e.charCode || e.keyCode;
26 for (var i = 0; i < keylabels.length; i++) {
27 var key = keylabels[i].parentNode;
28 if (!key.onclick) continue;
29 var keychar = key.className.match(/ chr(\d+)$/);
30 if (!keychar) continue; // not enterable
32 if (keychar != input) continue; // different key
33 var row = key.parentNode;
34 var keymod = row.className;
35 if ((keymod.search(/\bctrl\b/) != -1) != e.ctrlKey) continue; // modifier mismatch
36 if ((keymod.search(/\bmeta\b/) != -1) != e.altKey) continue;
37 var shown = row.style.display != 'none';
38 if (!shown) continue; // foreign mode
39 if (keyfocus) keyfocus.style.outline = '';
40 key.style.outline = '1px solid red';
42 if (key.onclick) key.onclick();