[REF] web_tour: allows to include RunningTourActionHelper
Moves this class in an Odoo module so that other addons are able to require and include the class in order to add different helpers. This will be usefil in the `stock_barcode` module that will add a `scan` helper.
This commit is contained in:
committed by
Simon Lejeune
parent
cea38a8ea9
commit
9c262fe6f8
@@ -0,0 +1,112 @@
|
||||
odoo.define('web_tour.RunningTourActionHelper', function(require) {
|
||||
"use strict";
|
||||
|
||||
var core = require('web.core');
|
||||
var Tip = require('web_tour.Tip');
|
||||
|
||||
var RunningTourActionHelper = core.Class.extend({
|
||||
init: function (tip_widget) {
|
||||
this.tip_widget = tip_widget;
|
||||
},
|
||||
click: function (element) {
|
||||
this._click(this._get_action_values(element));
|
||||
},
|
||||
text: function (text, element) {
|
||||
this._text(this._get_action_values(element), text);
|
||||
},
|
||||
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") {
|
||||
this._text(values);
|
||||
} else {
|
||||
this._click(values);
|
||||
}
|
||||
},
|
||||
_get_action_values: function (element) {
|
||||
var $e = $(element);
|
||||
var $element = element ? get_first_visible_element($e) : this.tip_widget.$anchor;
|
||||
if ($element.length === 0) {
|
||||
$element = $e.first();
|
||||
}
|
||||
var consume_event = element ? Tip.getConsumeEventType($element) : this.tip_widget.consume_event;
|
||||
return {
|
||||
$element: $element,
|
||||
consume_event: consume_event,
|
||||
};
|
||||
},
|
||||
_click: function (values) {
|
||||
trigger_mouse_event(values.$element, "mouseover");
|
||||
values.$element.trigger("mouseenter");
|
||||
trigger_mouse_event(values.$element, "mousedown");
|
||||
trigger_mouse_event(values.$element, "mouseup");
|
||||
trigger_mouse_event(values.$element, "click");
|
||||
trigger_mouse_event(values.$element, "mouseout");
|
||||
values.$element.trigger("mouseleave");
|
||||
|
||||
function trigger_mouse_event($element, type) {
|
||||
var e = document.createEvent("MouseEvents");
|
||||
e.initMouseEvent(type, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, $element[0]);
|
||||
$element[0].dispatchEvent(e);
|
||||
}
|
||||
},
|
||||
_text: function (values, text) {
|
||||
this._click(values);
|
||||
|
||||
text = text || "Test";
|
||||
if (values.consume_event === "input") {
|
||||
values.$element.trigger("keydown").val(text).trigger("keyup").trigger("input");
|
||||
} else if (values.$element.is("select")) {
|
||||
var $options = values.$element.children("option");
|
||||
$options.prop("selected", false).removeProp("selected");
|
||||
var $selectedOption = $options.filter(function () { return $(this).val() === text; });
|
||||
if ($selectedOption.length === 0) {
|
||||
$selectedOption = $options.filter(function () { return $(this).text() === text; });
|
||||
}
|
||||
$selectedOption.prop("selected", true);
|
||||
this._click(values);
|
||||
} else {
|
||||
values.$element.text(text);
|
||||
}
|
||||
values.$element.trigger("change");
|
||||
},
|
||||
_drag_and_drop: function (values, to) {
|
||||
var $to = $(to || document.body);
|
||||
|
||||
var elementCenter = values.$element.offset();
|
||||
elementCenter.left += values.$element.outerWidth()/2;
|
||||
elementCenter.top += values.$element.outerHeight()/2;
|
||||
|
||||
var toCenter = $to.offset();
|
||||
toCenter.left += $to.outerWidth()/2;
|
||||
toCenter.top += $to.outerHeight()/2;
|
||||
|
||||
values.$element.trigger($.Event("mousedown", {which: 1, pageX: elementCenter.left, pageY: elementCenter.top}));
|
||||
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 RunningTourActionHelper;
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ var core = require('web.core');
|
||||
var local_storage = require('web.local_storage');
|
||||
var mixins = require('web.mixins');
|
||||
var RainbowMan = require('web.RainbowMan');
|
||||
var RunningTourActionHelper = require('web_tour.RunningTourActionHelper');
|
||||
var ServicesMixin = require('web.ServicesMixin');
|
||||
var session = require('web.session');
|
||||
var Tip = require('web_tour.Tip');
|
||||
@@ -51,109 +52,6 @@ function do_before_unload(if_unload_callback, if_not_unload_callback) {
|
||||
});
|
||||
}
|
||||
|
||||
var RunningTourActionHelper = core.Class.extend({
|
||||
init: function (tip_widget) {
|
||||
this.tip_widget = tip_widget;
|
||||
},
|
||||
click: function (element) {
|
||||
this._click(this._get_action_values(element));
|
||||
},
|
||||
text: function (text, element) {
|
||||
this._text(this._get_action_values(element), text);
|
||||
},
|
||||
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") {
|
||||
this._text(values);
|
||||
} else {
|
||||
this._click(values);
|
||||
}
|
||||
},
|
||||
_get_action_values: function (element) {
|
||||
var $e = $(element);
|
||||
var $element = element ? get_first_visible_element($e) : this.tip_widget.$anchor;
|
||||
if ($element.length === 0) {
|
||||
$element = $e.first();
|
||||
}
|
||||
var consume_event = element ? Tip.getConsumeEventType($element) : this.tip_widget.consume_event;
|
||||
return {
|
||||
$element: $element,
|
||||
consume_event: consume_event,
|
||||
};
|
||||
},
|
||||
_click: function (values) {
|
||||
trigger_mouse_event(values.$element, "mouseover");
|
||||
values.$element.trigger("mouseenter");
|
||||
trigger_mouse_event(values.$element, "mousedown");
|
||||
trigger_mouse_event(values.$element, "mouseup");
|
||||
trigger_mouse_event(values.$element, "click");
|
||||
trigger_mouse_event(values.$element, "mouseout");
|
||||
values.$element.trigger("mouseleave");
|
||||
|
||||
function trigger_mouse_event($element, type) {
|
||||
var e = document.createEvent("MouseEvents");
|
||||
e.initMouseEvent(type, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, $element[0]);
|
||||
$element[0].dispatchEvent(e);
|
||||
}
|
||||
},
|
||||
_text: function (values, text) {
|
||||
this._click(values);
|
||||
|
||||
text = text || "Test";
|
||||
if (values.consume_event === "input") {
|
||||
values.$element.trigger("keydown").val(text).trigger("keyup").trigger("input");
|
||||
} else if (values.$element.is("select")) {
|
||||
var $options = values.$element.children("option");
|
||||
$options.prop("selected", false).removeProp("selected");
|
||||
var $selectedOption = $options.filter(function () { return $(this).val() === text; });
|
||||
if ($selectedOption.length === 0) {
|
||||
$selectedOption = $options.filter(function () { return $(this).text() === text; });
|
||||
}
|
||||
$selectedOption.prop("selected", true);
|
||||
this._click(values);
|
||||
} else {
|
||||
values.$element.text(text);
|
||||
}
|
||||
values.$element.trigger("change");
|
||||
},
|
||||
_drag_and_drop: function (values, to) {
|
||||
var $to = $(to || document.body);
|
||||
|
||||
var elementCenter = values.$element.offset();
|
||||
elementCenter.left += values.$element.outerWidth()/2;
|
||||
elementCenter.top += values.$element.outerHeight()/2;
|
||||
|
||||
var toCenter = $to.offset();
|
||||
toCenter.left += $to.outerWidth()/2;
|
||||
toCenter.top += $to.outerHeight()/2;
|
||||
|
||||
values.$element.trigger($.Event("mousedown", {which: 1, pageX: elementCenter.left, pageY: elementCenter.top}));
|
||||
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(mixins.EventDispatcherMixin, ServicesMixin, {
|
||||
init: function(parent, consumed_tours) {
|
||||
mixins.EventDispatcherMixin.init.call(this);
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<link rel="stylesheet" type="text/scss" href="/web_tour/static/src/scss/tip.scss"/>
|
||||
<link rel="stylesheet" type="text/scss" href="/web_tour/static/src/scss/keyframes.scss"/>
|
||||
<script type="text/javascript" src="/web_tour/static/src/js/tip.js"></script>
|
||||
<script type="text/javascript" src="/web_tour/static/src/js/running_tour_action_helper.js"></script>
|
||||
<script type="text/javascript" src="/web_tour/static/src/js/tour_manager.js"></script>
|
||||
<script type="text/javascript" src="/web_tour/static/src/js/tour_service.js"></script>
|
||||
</xpath>
|
||||
|
||||
Reference in New Issue
Block a user