[FIX] web_tour,web_editor: allow running tour in every context
Previous implementation allowed to run tour as a non-superuser but this was only working in the backend where the static file tip.xml is always loaded. In the frontend or in other non-backend context, this file has to be loaded just before trying to launch the tour as a non superuser (indeed, previous implementation loaded the file in the frontend only if the user is a superuser).
This commit is contained in:
@@ -14,6 +14,13 @@
|
||||
<script type="text/javascript">
|
||||
var snippets_url = '<t t-esc="snippets or ''"/>';
|
||||
var callback = window.location.href.match(/callback=([^&=]+)/)[1];
|
||||
|
||||
var odoo = {
|
||||
session_info: {
|
||||
is_superuser: <t t-esc="json.dumps(request.env.user._is_superuser())"/>,
|
||||
is_frontend: true, // this is not really the frontend here but this key is used to detect if xml has to be manually loaded
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<t t-if="not dont_load_assets">
|
||||
<t t-call-assets="web.assets_common" t-js="false"/>
|
||||
|
||||
@@ -27,7 +27,6 @@ return session.is_bound.then(function () {
|
||||
// in the page source.
|
||||
if (session.is_frontend && session.is_superuser) {
|
||||
defs.push(new Model('web_tour.tour').call('get_consumed_tours'));
|
||||
defs.push(ajax.loadXML('/web_tour/static/src/xml/tip.xml', QWeb));
|
||||
}
|
||||
return $.when.apply($, defs).then(function (consumed_tours) {
|
||||
var tour = new TourManager(session.is_frontend ? consumed_tours : session.web_tours);
|
||||
@@ -51,24 +50,37 @@ return session.is_bound.then(function () {
|
||||
}
|
||||
}, 500);
|
||||
var observer = new MutationObserver(check_tooltip);
|
||||
var start_service = function (observe) {
|
||||
$(function () {
|
||||
/**
|
||||
* Once the DOM is ready, we still have to wait all the modules are loaded before completing the tours
|
||||
* registration and starting listening for DOM mutations.
|
||||
*/
|
||||
_.defer(function () {
|
||||
tour._register_all(observe);
|
||||
if (observe) {
|
||||
observer.observe(document.body, {
|
||||
attributes: true,
|
||||
childList: true,
|
||||
subtree: true,
|
||||
var start_service = (function () {
|
||||
var load_def;
|
||||
|
||||
return function (observe) {
|
||||
if (load_def === undefined && observe && session.is_frontend) {
|
||||
load_def = ajax.loadXML('/web_tour/static/src/xml/tip.xml', QWeb);
|
||||
}
|
||||
|
||||
var def = $.Deferred();
|
||||
$(function () {
|
||||
/**
|
||||
* Once the DOM is ready, we still have to wait all the modules are loaded before completing the tours
|
||||
* registration and starting listening for DOM mutations.
|
||||
*/
|
||||
$.when(load_def).then(function () {
|
||||
_.defer(function () {
|
||||
tour._register_all(observe);
|
||||
if (observe) {
|
||||
observer.observe(document.body, {
|
||||
attributes: true,
|
||||
childList: true,
|
||||
subtree: true,
|
||||
});
|
||||
}
|
||||
def.resolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
return def;
|
||||
};
|
||||
})();
|
||||
|
||||
// Enable the MutationObserver for the admin or if a tour is running, when the DOM is ready
|
||||
start_service(session.is_superuser || tour.running_tour);
|
||||
@@ -77,8 +89,15 @@ return session.is_bound.then(function () {
|
||||
if (!session.is_superuser) {
|
||||
var run = tour.run;
|
||||
tour.run = function () {
|
||||
run.apply(this, arguments);
|
||||
if (this.running_tour) { start_service(true); }
|
||||
var self = this;
|
||||
var args = arguments;
|
||||
|
||||
start_service(true).then(function () {
|
||||
run.apply(self, args);
|
||||
if (!self.running_tour) {
|
||||
observer.disconnect();
|
||||
}
|
||||
});
|
||||
};
|
||||
var _consume_tour = tour._consume_tour;
|
||||
tour._consume_tour = function () {
|
||||
|
||||
Reference in New Issue
Block a user