/* * Copyright(c) 2011 * OJC Technologies * all rights reserved * @author: Jake Smith */ function doKeyAction(event) { try { if (cursor.isPlaced()) { handleKeyEvent(event); } } catch (err) { alert("ERROR\n" + err); } return false; } function handleKeyEvent(event) { var c, keyPressed; keyPressed = event.keyCode; event.preventDefault(); event.stopPropagation(); if (keyPressed == Key.SHIFT || keyPressed == Key.CONTROL || keyPressed == Key.ALT || keyPressed == Key.CAPSLOCK || keyPressed == Key.NUMLOCK) { // do nothing } else if (keyPressed == Key.BACKSPACE) { cursor.doBackspace(); } else if (keyPressed == Key.DELETE) { cursor.doDelete(); } else if (keyPressed == Key.LEFT_ARROW) { cursor.shiftLeft(); } else if (keyPressed == Key.RIGHT_ARROW) { cursor.shiftRight(); } else { if (keyPressed == Key.SPACEBAR) { c = " "; // space } else if (keyPressed == Key.TAB) { c = "\t"; } else if (keyPressed == Key.ENTER) { c = "\n"; } else if (keyPressed >= 65 && keyPressed <= 90) { // character (a-z) c = AlphaTable.getCharFromIndex(keyPressed, event); } else if (keyPressed >= 48 && keyPressed <= 57) { // number/symbol c = NumSymTable.getCharFromIndex(keyPressed, event); } else { c = getNotConstantKeyCode(event); // usually puncuation and the like } if ( c == null) { throw new Error("null character being inserted"); } else { cursor.insertCharacter(c); } } } function getNotConstantKeyCode(event) { var browser, version, os, c; browser = BrowserDetect.browser; if (browser == "Explorer" || browser == "Chrome" || browser == "Safari") { c = ieKeyCode(event); } else if (browser == "Firefox") { c = mozillaKeyCode(event); } else if (browser == "Opera") { version = BrowserDetect.version; os = BrowserDetect.OS; if (version >= 9.5) { c = mozillaKeyCode(event); } else if (os == "Windows") { if(version == 7) { c = mozillaKeyCode(event); } else if (version >= 8 && version <= 9.27) { c = operaKeyCode(event); } } } else { alert("You have an unsupported browser for the inline editor.\n" + "The editor cannot safely interpret the key you pressed"); } return c; } function ieKeyCode(event) { var i, key, table, c; key = event.keyCode; table = (event.shiftKey) ? OtherTable.ieShiftTable : OtherTable.ieTable; for (i = 0; i < table.length; i += 1) { if (key == table[i].code) { return table[i].value; } } return null; } function mozillaKeyCode(event) { var i, key, table; key = event.keyCode; table = (event.shiftKey) ? OtherTable.mozShiftTable : OtherTable.mozTable; for (i = 0; i < table.length; i += 1) { if (key == table[i].code) { return table[i].value; } } return null; } function operaKeyCode(event) { var i, key, table; key = event.keyCode; table = (event.shiftKey) ? OtherTable.operaShiftTable : OtherTable.operaTable; for (i = 0; i < table.length; i += 1) { if (key == table[i].code) { return table[i].value; } } return null; } var Key = { BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16, CONTROL: 17, ALT: 18, CAPSLOCK: 20, ESCAPE: 27, SPACEBAR: 32, LEFT_ARROW: 37, UP_ARROW: 38, RIGHT_ARROW: 39, DOWN_ARROW: 40, DELETE: 46, NUMLOCK: 144 } var AlphaTable = { getCharFromIndex: function (whichKey, event) { var table, i; table = (event.shiftKey) ? this.capsTable : this.lowerTable; for (i = 0; i < table.length; i += 1) { if (table[i].index == whichKey) { return table[i].value; } } throw new Error("no valid character found in table"); }, lowerTable: [ { index: 65, value: 'a' }, { index: 66, value: 'b' }, { index: 67, value: 'c' }, { index: 68, value: 'd' }, { index: 69, value: 'e' }, { index: 70, value: 'f' }, { index: 71, value: 'g' }, { index: 72, value: 'h' }, { index: 73, value: 'i' }, { index: 74, value: 'j' }, { index: 75, value: 'k' }, { index: 76, value: 'l' }, { index: 77, value: 'm' }, { index: 78, value: 'n' }, { index: 79, value: 'o' }, { index: 80, value: 'p' }, { index: 81, value: 'q' }, { index: 82, value: 'r' }, { index: 83, value: 's' }, { index: 84, value: 't' }, { index: 85, value: 'u' }, { index: 86, value: 'v' }, { index: 87, value: 'w' }, { index: 88, value: 'x' }, { index: 89, value: 'y' }, { index: 90, value: 'z' } ], capsTable: [ { index: 65, value: 'A' }, { index: 66, value: 'B' }, { index: 67, value: 'C' }, { index: 68, value: 'D' }, { index: 69, value: 'E' }, { index: 70, value: 'F' }, { index: 71, value: 'G' }, { index: 72, value: 'H' }, { index: 73, value: 'I' }, { index: 74, value: 'J' }, { index: 75, value: 'K' }, { index: 76, value: 'L' }, { index: 77, value: 'M' }, { index: 78, value: 'N' }, { index: 79, value: 'O' }, { index: 80, value: 'P' }, { index: 81, value: 'Q' }, { index: 82, value: 'R' }, { index: 83, value: 'S' }, { index: 84, value: 'T' }, { index: 85, value: 'U' }, { index: 86, value: 'V' }, { index: 87, value: 'W' }, { index: 88, value: 'X' }, { index: 89, value: 'Y' }, { index: 90, value: 'Z' } ] }; var NumSymTable = { getCharFromIndex: function (whichKey, event) { var table, i; table = (event.shiftKey) ? this.symTable : this.charTable; for (i = 0; i < table.length; i += 1) { if (table[i].index == whichKey) { return table[i].value; } } throw new Error("no valid character found in table"); }, charTable: [ { index: 48, value: "0" }, { index: 49, value: "1" }, { index: 50, value: "2" }, { index: 51, value: "3" }, { index: 52, value: "4" }, { index: 53, value: "5" }, { index: 54, value: "6" }, { index: 55, value: "7" }, { index: 56, value: "8" }, { index: 57, value: "9" } ], symTable: [ { index: 48, value: ")" }, { index: 49, value: "!" }, { index: 50, value: "@" }, { index: 51, value: "#" }, { index: 52, value: "$" }, { index: 53, value: "%" }, { index: 54, value: "^" }, { index: 55, value: "&" }, { index: 56, value: "*" }, { index: 57, value: "(" } ] }; var OtherTable = { mozTable: [ { code: 59, value: ';' }, { code: 61, value: '=' }, { code: 188, value: ',' }, { code: 109, value: '-' }, { code: 190, value: '.' }, { code: 191, value: '/' }, { code: 192, value: '`' }, { code: 219, value: '[' }, { code: 220, value: '\\' }, { code: 221, value: ']' }, { code: 222, value: '\'' } ], ieTable: [ { code: 186, value: ';' }, { code: 187, value: '=' }, { code: 188, value: ',' }, { code: 189, value: '-' }, { code: 190, value: '.' }, { code: 191, value: '/' }, { code: 192, value: '`' }, { code: 219, value: '[' }, { code: 220, value: '\\' }, { code: 221, value: ']' }, { code: 222, value: '\'' } ], operaTable: [ { code: 59, value: ';' }, { code: 61, value: '=' }, { code: 44, value: ',' }, { code: 45, value: '-' }, { code: 46, value: '.' }, { code: 47, value: '/' }, { code: 96, value: '`' }, { code: 91, value: '[' }, { code: 92, value: '\\' }, { code: 93, value: ']' }, { code: 39, value: '\'' } ], mozShiftTable: [ { code: 59, value: ':' }, { code: 61, value: '+' }, { code: 188, value: '<' }, { code: 109, value: '_' }, { code: 190, value: '>' }, { code: 191, value: '?' }, { code: 192, value: '~' }, { code: 219, value: '{' }, { code: 220, value: '|' }, { code: 221, value: '}' }, { code: 222, value: '\"' } ], ieShiftTable: [ { code: 186, value: ':' }, { code: 187, value: '+' }, { code: 188, value: '<' }, { code: 189, value: '_' }, { code: 190, value: '>' }, { code: 191, value: '?' }, { code: 192, value: '~' }, { code: 219, value: '{' }, { code: 220, value: '|' }, { code: 221, value: '}' }, { code: 222, value: '\"' } ], operaShiftTable: [ { code: 59, value: ':' }, { code: 61, value: '+' }, { code: 44, value: '<' }, { code: 45, value: '_' }, { code: 46, value: '>' }, { code: 47, value: '?' }, { code: 96, value: '~' }, { code: 91, value: '{' }, { code: 92, value: '|' }, { code: 93, value: '}' }, { code: 39, value: '\"' } ] };