From ec85e6ecd3fa10394ef5251b342f150e0a45653e Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Tue, 9 Aug 2016 16:52:37 +0200 Subject: [PATCH] [IMP] web_tour: add keydown action helper (used by web_editor tours) --- addons/web_tour/static/src/js/tour_manager.js | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/addons/web_tour/static/src/js/tour_manager.js b/addons/web_tour/static/src/js/tour_manager.js index e9b4400b434..73c988ab1b1 100644 --- a/addons/web_tour/static/src/js/tour_manager.js +++ b/addons/web_tour/static/src/js/tour_manager.js @@ -52,6 +52,9 @@ var RunningTourActionHelper = core.Class.extend({ drag_and_drop: function (to, element) { this._drag_and_drop(this._get_action_values(element), to); }, + keydown: function (keyCodes, element) { + this._keydown(this._get_action_values(element), keyCodes.split(/[,\s]+/)); + }, auto: function (element) { var values = this._get_action_values(element); if (values.consume_event === "input") { @@ -108,6 +111,21 @@ var RunningTourActionHelper = core.Class.extend({ values.$element.trigger($.Event("mousemove", {which: 1, pageX: toCenter.left, pageY: toCenter.top})); values.$element.trigger($.Event("mouseup", {which: 1, pageX: toCenter.left, pageY: toCenter.top})); }, + _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)); + } + values.$element.trigger({type: "keyup", keyCode: keyCode}); + } + }, }); return core.Class.extend({ @@ -367,7 +385,7 @@ return core.Class.extend({ if (typeof tip.run === "function") { tip.run.call(tip.widget, action_helper); } else if (tip.run !== undefined) { - var m = tip.run.match(/^(click|text|drag_and_drop) *(?:\(? *["']?(.+)["']? *\)?)?$/); + var m = tip.run.match(/^([a-zA-Z0-9_]+) *(?:\(? *(.+?) *\)?)?$/); action_helper[m[1]](m[2]); } else { action_helper.auto();