=== modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.js' --- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.js 2016-06-03 10:10:16 +0000 +++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.js 2016-06-03 18:03:10 +0000 @@ -31,7 +31,8 @@ ** functions). Can be used only when the P2J client runs embedded in a ** customer-specific application. ** 011 SBI 20160519 Added the Safari detection. -** SBI 20160603 Added createDialog function to open the modal dialog, added prompts and hints. +** SBI 20160603 Added createDialog function to open the modal dialog, added prompts and hints, +** added createKeyEvent. */ "use strict"; @@ -480,6 +481,92 @@ me.consumeEvent = consumeEvent; /** + * Create a key event. + * + * @param {String} type + * The event type. + * @param {Boolean} bubbles + * The bubbled event. + * @param {Boolean} cancelable + * The cancelable event. + * @param {Window} view + * The window. + * @param {Boolean} ctrlKey + * True iff the Ctrl (left or right) key is on. + * @param {Boolean} altKey + * True iff the Alt (left or right) key is on. + * @param {Boolean} shiftKey + * True iff the Alt (left or right) key is on. + * @param {Boolean} metaKey + * True iff the Meta (left or right) key is on. + * @param {Number} keyCode + * The key code. + * @param {Number} charCode + * The char code. + * + * @returns {Event} + * The target keyboard event. + */ + function createKeyEvent(type, bubbles, cancelable, view, ctrlKey, + altKey, shiftKey, metaKey, keyCode, charCode) + { + var event; + if (document.createEvent !== undefined) + { + try + { + event = document.createEvent("KeysEvent"); + + event.initKeyEvent(type, bubbles, cancelable, view, ctrlKey, + altKey, shiftKey, metaKey, keyCode, charCode); + } + catch (ex1) + { + try + { + event = document.createEvent("Events"); + } + catch (ex2) + { + event = document.createEvent("UIEvents"); + } + finally + { + event.initEvent(type, bubbles, cancelable); + + //initialize + event.view = view; + event.altKey = altKey; + event.ctrlKey = ctrlKey; + event.shiftKey = shiftKey; + event.metaKey = metaKey; + event.keyCode = keyCode; + event.charCode = charCode; + } + } + } + else if (document.createEventObject !== undefined) + { + event = document.createEventObject(); + + event.bubbles = bubbles; + event.cancelable = cancelable; + event.view = view; + event.ctrlKey = ctrlKey; + event.altKey = altKey; + event.shiftKey = shiftKey; + event.metaKey = metaKey; + + event.keyCode = (charCode > 0) ? charCode : keyCode; + event.type = type; + } + + return event; + }; + + me.createKeyEvent = createKeyEvent; + + /** * Creates and displays the modal dialog. * * @param {String} id === modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keyboard.js' --- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keyboard.js 2016-06-03 10:10:16 +0000 +++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keyboard.js 2016-06-03 18:02:28 +0000 @@ -31,7 +31,8 @@ ** 012 SBI 20160119 Changed to support Chrome and IE. ** SBI 20160125 Fixed CTRL + CTRL + key, the permitted default actions are copy, paste and cut. ** 013 SBI 20160523 Fixed copy/cut/paste work flow. -** SBI 20160603 Changed to process Safari COMMAND as it would be a CTRL key pressed. +** SBI 20160603 Changed to process Safari COMMAND as it would be a CTRL key pressed, fixed +** automatic repeats for Safari. */ "use strict"; @@ -650,22 +651,36 @@ } return permitted; } - else if (last.keyCode === evt.keyCode) + else if (last.keyCode === evt.keyCode || evt.keyCode === keys.IME_PROCESSKEY) { console.debug(last.ctrlCount); + var repeatCode = last.keyCode; // auto-repeats that have no typed keys. last = { - keyCode : evt.keyCode, - shiftKey : evt.shiftKey, - altKey : evt.altKey, - ctrlKey : evt.ctrlKey, - metaKey : evt.metaKey, - charCode : evt.charCode, - ctrlCount : last.ctrlCount - }; - - queue.push(last); - onkeyup(evt); + keyCode : repeatCode, + shiftKey : evt.shiftKey, + altKey : evt.altKey, + ctrlKey : evt.ctrlKey, + metaKey : evt.metaKey, + charCode : evt.charCode, + ctrlCount : last.ctrlCount + }; + + if (repeatCode !== keys.IME_PROCESSKEY) + { + queue.push(last); + if (evt.keyCode === keys.IME_PROCESSKEY) + { + var keyUpEvt = p2j.createKeyEvent("keyup", false, true, null, evt.ctrlKey, + evt.altKey, evt.shiftKey, evt.metaKey, repeatCode, 0); + onkeyup(keyUpEvt); + } + else + { + onkeyup(evt); + } + } + var permitted = permittedKeyStrokes(last); if (!permitted) { @@ -687,6 +702,7 @@ } } queue.push(last); + var permitted = permittedKeyStrokes(last); if (!permitted) { @@ -807,6 +823,7 @@ { return false; } + var lastKey = queue.pop(); if (lastKey === undefined) @@ -1015,6 +1032,7 @@ { return false; } + var lastKey = findKeyEventByKeyCode(evt.keyCode); if (lastKey === undefined) @@ -1041,10 +1059,10 @@ { var evt = queue[pos]; // modifier key down events are merged - if ((evt.keyCode === keyCode) || - (evt.altKey && keyCode == keys.ALT) || - (evt.shiftKey && keyCode == keys.SHIFT) || - (evt.ctrlKey && keyCode == keys.CTRL) || + if ((evt.keyCode === keyCode) || + (evt.altKey && keyCode === keys.ALT) || + (evt.shiftKey && keyCode === keys.SHIFT) || + (evt.ctrlKey && keyCode === keys.CTRL) || (evt.metaKey && keyCode === keys.LEFT_WINDOW) || (evt.metaKey && keyCode === keys.RIGHT_WINDOW)) { === modified file 'src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keymap.js' --- src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keymap.js 2016-06-03 10:10:16 +0000 +++ src/com/goldencode/p2j/ui/client/driver/web/res/p2j.keymap.js 2016-06-03 18:05:21 +0000 @@ -20,7 +20,8 @@ ** 008 SBI 20151011 Added SHIFT + DEL key label to return 639 as its key code. ** 009 SBI 20160120 Chrome and IE support. ** SBI 20160212 Fixes for copy/paste and cut default actions. -** 010 SBI 20160603 Changed to process Safari COMMAND as it would be a CTRL key pressed. +** 010 SBI 20160603 Changed to process Safari COMMAND as it would be a CTRL key pressed, added +** a virtual key, IME_PROCESSKEY, identified by the 229 code. */ "use strict"; @@ -107,7 +108,8 @@ RIGHT_DPAD : 178, C : 67, V : 86, - X : 88 + X : 88, + IME_PROCESSKEY : 229 }; var basicKeys = [];