From b49745e52d7a7bc27afd416206dcd5fa242aa07a Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 28 Jan 2019 09:39:56 +0000 Subject: [IMP] web_editor: lazy load the wysiwyg Issue: wysiwyg asset slow down the loading of the website, error inadvertently introduced: https://github.com/odoo/odoo/pull/29775 The assets are now loaded assynchroneously, when the editor is needed, its assets will be loaded. closes odoo/odoo#30700 --- addons/web/static/src/js/core/widget.js | 37 +++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js/core/widget.js') diff --git a/addons/web/static/src/js/core/widget.js b/addons/web/static/src/js/core/widget.js index b25cd99587b..d3b9cc1033c 100644 --- a/addons/web/static/src/js/core/widget.js +++ b/addons/web/static/src/js/core/widget.js @@ -84,6 +84,32 @@ var Widget = core.Class.extend(mixins.PropertiesMixin, ServicesMixin, { * @type {null|string[]} */ xmlDependencies: null, + /** + * List of paths to css files that need to be loaded before the widget can + * be rendered. This will not induce loading anything that has already been + * loaded. + * + * @type {null|string[]} + */ + cssLibs: null, + /** + * List of paths to js files that need to be loaded before the widget can + * be rendered. This will not induce loading anything that has already been + * loaded. + * + * @type {null|string[]} + */ + jsLibs: null, + /** + * List of xmlID that need to be loaded before the widget can be rendered. + * The content css (link file or style tag) and js (file or inline) of the + * assets are loaded. + * This will not induce loading anything that has already been + * loaded. + * + * @type {null|string[]} + */ + assetLibs: null, /** * Constructs the widget and sets its parent if a parent is given. @@ -115,13 +141,16 @@ var Widget = core.Class.extend(mixins.PropertiesMixin, ServicesMixin, { * @returns {Deferred} */ willStart: function () { + var defs = []; if (this.xmlDependencies) { - var defs = _.map(this.xmlDependencies, function (xmlPath) { + defs.push.apply(defs, _.map(this.xmlDependencies, function (xmlPath) { return ajax.loadXML(xmlPath, core.qweb); - }); - return $.when.apply($, defs); + })); } - return $.when(); + if (this.jsLibs || this.cssLibs || this.assetLibs) { + defs.push(ajax.loadLibs(this)); + } + return $.when.apply($, defs); }, /** * Method called after rendering. Mostly used to bind actions, perform -- cgit v1.2.3