[IMP] web_tour: tour utils

Changed the triggering of some events to dispatch native events instead of
jQuery ones and extended the api of the keydown helper to support text keys.
This commit is contained in:
Julien Mougenot
2019-12-09 11:09:10 +00:00
committed by Vincent Schippefilt
parent b0941d19a0
commit 2cfa68b571
@@ -81,7 +81,11 @@ var RunningTourActionHelper = core.Class.extend({
text = text || "Test";
if (values.consume_event === "input") {
values.$element.trigger("keydown").val(text).trigger("keyup").trigger("input");
values.$element
.trigger({ type: 'keydown', key: text[text.length - 1] })
.val(text)
.trigger({ type: 'keyup', key: text[text.length - 1] });
values.$element[0].dispatchEvent(new InputEvent('input'));
} else if (values.$element.is("select")) {
var $options = values.$element.children("option");
$options.prop("selected", false).removeProp("selected");
@@ -128,17 +132,31 @@ var RunningTourActionHelper = core.Class.extend({
},
_keydown: function (values, keyCodes) {
while (keyCodes.length) {
var keyCode = +keyCodes.shift();
values.$element.trigger({type: "keydown", keyCode: keyCode});
if ((keyCode > 47 && keyCode < 58) // number keys
|| keyCode === 32 // spacebar
|| (keyCode > 64 && keyCode < 91) // letter keys
|| (keyCode > 95 && keyCode < 112) // numpad keys
|| (keyCode > 185 && keyCode < 193) // ;=,-./` (in order)
|| (keyCode > 218 && keyCode < 223)) { // [\]' (in order))
document.execCommand("insertText", 0, String.fromCharCode(keyCode));
const eventOptions = {};
const keyCode = keyCodes.shift();
let insertedText = null;
if (isNaN(keyCode)) {
eventOptions.key = keyCode;
} else {
const code = parseInt(keyCode, 10);
eventOptions.keyCode = code;
eventOptions.which = code;
if (
code === 32 || // spacebar
(code > 47 && code < 58) || // number keys
(code > 64 && code < 91) || // letter keys
(code > 95 && code < 112) || // numpad keys
(code > 185 && code < 193) || // ;=,-./` (in order)
(code > 218 && code < 223) // [\]' (in order))
) {
insertedText = String.fromCharCode(code);
}
}
values.$element.trigger({type: "keyup", keyCode: keyCode});
values.$element.trigger(Object.assign({ type: "keydown" }, eventOptions));
if (insertedText) {
document.execCommand("insertText", 0, insertedText);
}
values.$element.trigger(Object.assign({ type: "keyup" }, eventOptions));
}
},
});