[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:
qsm-odoo
2016-08-26 13:39:55 +02:00
parent f9a84b5ebc
commit 933949085d
2 changed files with 45 additions and 19 deletions
+7
View File
@@ -14,6 +14,13 @@
<script type="text/javascript">
var snippets_url = '<t t-esc="snippets or ''"/>';
var callback = window.location.href.match(/callback=([^&amp;=]+)/)[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"/>
+38 -19
View File
@@ -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 () {