// The index into _keyTable of the key currently being tested. var _currKey = 0;
var _keysTotal = 0; var _keysGood = 0; var _keysBad = 0; var _keysSkipped = 0;
var _modifierMode = "None";
var _keydownCapture = []; var _keyupCapture = [];
var CAPTURE_KEYCODE = 0; var CAPTURE_CODE = 1; var CAPTURE_KEY = 2; var CAPTURE_SHIFTKEY = 3; var CAPTURE_CONTROLKEY = 4; var CAPTURE_ALTKEY = 5; var CAPTURE_METAKEY = 6;
// An array of KeyInfo for each key to be tested. var _keyTable = [];
// KeyInfo fields. var KEYINFO_CODE = 0; // |code| for this key var KEYINFO_ROW = 1; // Keyboard row var KEYINFO_TYPE = 2; // Key type (see below) var KEYINFO_WIDTH = 3; // Width of key: 0=normal var KEYINFO_KEYCAP = 4; // Keycap string to display var KEYINFO_KEY = 5; // Unmodified key value var KEYINFO_KEY_SHIFT = 6; // Shifted key value
var KEYTYPE_NORMAL = 0; var KEYTYPE_DISABLED = 1; // Key cannot be tested: e.g., CapsLock var KEYTYPE_END = 2; // Used to mark end of KeyTable var KEYTYPE_MODIFIER = 3; // Modifer key
function clearChildren(e) { while (e.firstChild !== null) {
e.removeChild(e.firstChild);
}
}
function setText(e, text) {
clearChildren(e);
e.appendChild(document.createTextNode(text));
}
function setUserAgent() { var userAgent = navigator.userAgent;
uaDiv = document.getElementById("useragent");
setText(uaDiv, userAgent);
}
function verifyKeyEventFields(eventName, keyEventInfo, code, key, error) { var verifyCode = document.getElementById("opt_attr_code").checked; var verifyKey = document.getElementById("opt_attr_key").checked; var verifyModifiers = document.getElementById("opt_attr_modifiers").checked; var good = true;
if (!verifyCode && !verifyKey && !verifyModifiers) {
good = false;
addError(error, "Invalid test: At least one attribute must be selected for testing.");
} if (verifyCode && keyEventInfo[CAPTURE_CODE] != code) {
good = false;
addErrorIncorrect(error, eventName, "code", keyEventInfo, CAPTURE_CODE, code);
} if (verifyKey && keyEventInfo[CAPTURE_KEY] != key) {
good = false;
addErrorIncorrect(error, eventName, "key", keyEventInfo, CAPTURE_KEY, key);
} if (verifyModifiers) { if (keyEventInfo[CAPTURE_SHIFTKEY] != (_modifierMode == "Shift")) {
good = false;
addErrorIncorrect(error, eventName, "shiftKey", keyEventInfo, CAPTURE_SHIFTKEY, false);
} if (keyEventInfo[CAPTURE_CONTROLKEY]) {
good = false;
addErrorIncorrect(error, eventName, "controlKey", keyEventInfo, CAPTURE_CONTROLKEY, false);
} if (keyEventInfo[CAPTURE_ALTKEY]) {
good = false;
addErrorIncorrect(error, eventName, "altKey", keyEventInfo, CAPTURE_ALTKEY, false);
} if (keyEventInfo[CAPTURE_METAKEY]) {
good = false;
addErrorIncorrect(error, eventName, "metaKey", keyEventInfo, CAPTURE_METAKEY, false);
}
}
return good;
}
function verifyKey() {
_keysTotal++;
var keyInfo = _keyTable[_currKey]; var code = keyInfo[KEYINFO_CODE]; var key = keyInfo[KEYINFO_KEY]; var keyShift = keyInfo[KEYINFO_KEY_SHIFT];
var keyCheck = key; if (_modifierMode == "Shift") {
keyCheck = keyShift;
}
var verifyKeydown = document.getElementById("opt_event_keydown").checked; var verifyKeyup = document.getElementById("opt_event_keyup").checked;
var error = document.createElement('div');
error.classList.add("error"); var good = true;
if (verifyKeydown) {
good = verifyKeyEventFields("keydown", _keydownInfo, code, keyCheck, error);
} if (verifyKeyup) {
good = verifyKeyEventFields("keyup", _keyupInfo, code, keyCheck, error);
}
if (!verifyKeydown && !verifyKeyup) {
good = false;
addError(error, "Invalid test: At least one event must be selected for testing.");
}
// Allow Escape key to skip the current key. var skipped = false; if (_keydownInfo[CAPTURE_KEYCODE] == 27 || _keydownInfo[CAPTURE_CODE] == "Escape") {
good = true;
skipped = true;
}
if (!good) { var p = document.createElement('p');
p.classList.add("error1");
p.textContent = "Error : " + code;
error.insertBefore(p, error.firstChild);
}
// Remove previous test results.
clearChildren(document.getElementById("errors"));
// Remove highlighting from keys. for (var i = 0; i < _keyTable.length; i++) { var code = _keyTable[i][KEYINFO_CODE]; var type = _keyTable[i][KEYINFO_TYPE]; if (type != KEYTYPE_END) { var key = document.getElementById(code);
key.classList.remove("goodKey");
key.classList.remove("badKey");
key.classList.remove("skippedKey");
}
}
}
function startTest() { if (_testing) { // Cancel the currently running test.
endTest(); return;
}
function handleModifierGroup() { var radio = document.querySelector("input[name=opt_modifier]:checked"); var oldMode = _modifierMode;
_modifierMode = radio.value;
if (oldMode == "Shift") {
document.getElementById("ShiftLeft").classList.remove("activeModifierKey");
document.getElementById("ShiftRight").classList.remove("activeModifierKey");
}
if (_modifierMode == "Shift") {
document.getElementById("ShiftLeft").classList.add("activeModifierKey");
document.getElementById("ShiftRight").classList.add("activeModifierKey");
}
}
function createOptions(body) { var options = document.createElement('div');
options.id = "options";
options.style.display = "none";
var table = document.createElement('table');
table.classList.add("opttable"); var row = document.createElement('tr'); var cell;
function addHelpText(div, text) { var p = document.createElement('p');
p.classList.add("help");
p.textContent = text;
div.appendChild(p);
}
function createHelp(body) { var help = document.createElement('div');
help.id = "help";
help.style.display = "none";
addHelpText(help, "Click on the \"Start Test\" button to begin testing.");
addHelpText(help, "Press the hilighted key to test it.");
addHelpText(help, "Clicking anywhere outside the \"Test Input\" editbox will pause testing. To resume, click back inside the editbox.");
addHelpText(help, "To skip a key while testing, press Escape.");
addHelpText(help, "When testing with modifier keys, the modifier must be pressed before the keydown and released after the keyup of the key being tested.");
body.appendChild(help);
}
function createKeyboard(body, keytable) { var keyboard = document.createElement('div');
keyboard.classList.add("keyboard");
var currRow = 0; var row = document.createElement('div');
row.classList.add("key-row");
for (var i = 0; i < keytable.length; i++) { var code = keytable[i][KEYINFO_CODE]; var rowId = keytable[i][KEYINFO_ROW]; var type = keytable[i][KEYINFO_TYPE]; var width = keytable[i][KEYINFO_WIDTH]; var keyCap = keytable[i][KEYINFO_KEYCAP];
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.