From 71732dceb6613dab28d6eef96fa155acc91af7ce Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 17 Jul 2015 15:34:31 +0200 Subject: [PATCH] [IMP] web: module can be asynchronous loaded if it return a deferred Each module can return a deferred. In that case, the module is marked as loaded only when the deferred is resolved, and its value is equal to the resolved value. The module can be rejected (unloaded). This will be logged in the console as info. Remove if_dom_contains from the website, the modules return a rejected deferred if the DOM doesn't contains the seleted values. --- addons/point_of_sale/views/templates.xml | 2 - addons/survey/static/src/js/survey.js | 8 ++- addons/survey/static/src/js/survey_result.js | 6 +- addons/web/static/src/js/boot.js | 63 ++++++++++++++++--- addons/web_editor/static/src/js/base.js | 26 +++----- addons/web_editor/static/src/js/editor.js | 2 - addons/web_editor/static/src/js/iframe.js | 2 +- .../static/src/js/web_planner_website.js | 14 ++--- addons/website/static/src/js/website.js | 24 +------ .../static/src/js/website_blog.editor.js | 24 ++++--- .../static/src/js/website_forum.js | 6 +- .../static/src/js/website_forum.share.js | 9 ++- .../static/src/js/website_links.js | 5 +- .../static/src/js/website_links_charts.js | 6 +- .../src/js/website_links_code_editor.js | 8 +-- .../src/js/website_mail_channel.snippet.js | 7 +-- .../static/src/js/website_mass_mailing.js | 11 +++- .../static/src/js/website_quotation.js | 17 +++-- .../static/src/js/website_sale.js | 45 +++++++------ .../static/src/js/website_sale.js | 13 +++- .../static/src/js/slides_upload.js | 12 ++-- 21 files changed, 182 insertions(+), 128 deletions(-) diff --git a/addons/point_of_sale/views/templates.xml b/addons/point_of_sale/views/templates.xml index 582cefde4fa..0d69cc157ee 100644 --- a/addons/point_of_sale/views/templates.xml +++ b/addons/point_of_sale/views/templates.xml @@ -46,8 +46,6 @@ }); return web_client; }); - odoo.init(); - diff --git a/addons/survey/static/src/js/survey.js b/addons/survey/static/src/js/survey.js index 25b6aea4e19..63dfe92f9e6 100644 --- a/addons/survey/static/src/js/survey.js +++ b/addons/survey/static/src/js/survey.js @@ -8,7 +8,12 @@ var website = require('website.website'); * the website engine. */ -website.if_dom_contains('.js_surveyform', function (the_form) { +var the_form = $('.js_surveyform'); + +if(!the_form.length) { + return $.Deferred().reject("DOM doesn't contain '.js_surveyform'"); +} + console.debug("[survey] Custom JS for survey is loading..."); var prefill_controller = the_form.attr("data-prefill"); @@ -163,6 +168,5 @@ website.if_dom_contains('.js_surveyform', function (the_form) { } console.debug("[survey] Custom JS for survey loaded!"); -}); }); diff --git a/addons/survey/static/src/js/survey_result.js b/addons/survey/static/src/js/survey_result.js index 891c5e1bc75..8fdb794d567 100644 --- a/addons/survey/static/src/js/survey_result.js +++ b/addons/survey/static/src/js/survey_result.js @@ -3,7 +3,10 @@ odoo.define('survey.result', function (require) { var website = require('website.website'); -website.if_dom_contains('.js_surveyresult', function () { +if(!$('.js_surveyresult').length) { + return $.Deferred().reject("DOM doesn't contain '.js_surveyresult'"); +} + console.debug("[survey] Survey Result JS is loading..."); //Script For Pagination @@ -160,6 +163,5 @@ website.if_dom_contains('.js_surveyresult', function () { }); console.debug("[survey] Survey Result JS loaded!"); -}); }); diff --git a/addons/web/static/src/js/boot.js b/addons/web/static/src/js/boot.js index 19fb4c51204..dc4ea5b337c 100644 --- a/addons/web/static/src/js/boot.js +++ b/addons/web/static/src/js/boot.js @@ -5,6 +5,10 @@ /** * @name openerp * @namespace openerp + * + * Modules can return a deferred the module is mark as loaded only when + * the deferred is resolved, and the service value equal the resolved value. + * The module can be rejected (unloaded) and logged as info. */ (function() { @@ -14,6 +18,7 @@ var factories = Object.create(null); var job_names = []; var job_deps = []; + var job_deferred = []; var services = Object.create({ qweb: new QWeb2.Engine(), @@ -29,6 +34,7 @@ var odoo = window.odoo = { testing: typeof QUnit === "object", debug: debug, + remaining_jobs: jobs, __DEBUG__: { get_dependencies: function (name, transitive) { @@ -122,7 +128,11 @@ odoo.__DEBUG__.web_client = services['web.web_client']; if (jobs.length) { - var debug_jobs = {}, job; + var debug_jobs = {}; + var rejected = []; + var rejected_linked = []; + var job; + var jobdep; for (var k=0; k