From c033b660e8f6d7863ca51852cbb059f710eaca26 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 6 May 2014 12:36:49 +0200 Subject: [PATCH] [ADD] openerp.loadBundle() bzr revid: fme@openerp.com-20140506103649-wrfa25boj2chy6gl --- addons/web/static/src/js/core.js | 23 ++--------- addons/web/static/src/js/openerpframework.js | 40 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index c64da7e5810..29f6c3e4d9e 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -345,31 +345,16 @@ instance.web.Session.include( /** @lends instance.web.Session# */{ load_css: function (files) { var self = this; _.each(files, function (file) { - $('head').append($('', { - 'href': self.url(file, null), - 'rel': 'stylesheet', - 'type': 'text/css' - })); + openerp.loadCSS(self.url(file, null)); }); }, load_js: function(files) { var self = this; var d = $.Deferred(); - if(files.length !== 0) { + if (files.length !== 0) { var file = files.shift(); - var tag = document.createElement('script'); - tag.type = 'text/javascript'; - tag.src = self.url(file, null); - tag.onload = tag.onreadystatechange = function() { - if ( (tag.readyState && tag.readyState != "loaded" && tag.readyState != "complete") || tag.onload_done ) - return; - tag.onload_done = true; - self.load_js(files).done(function () { - d.resolve(); - }); - }; - var head = document.head || document.getElementsByTagName('head')[0]; - head.appendChild(tag); + var url = self.url(file, null); + openerp.loadJS(url).done(d.resolve); } else { d.resolve(); } diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 5dcc2197944..f190fefeba3 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -933,6 +933,46 @@ openerp.jsonpRpc = function(url, fct_name, params, settings) { }); }; +openerp.loadCSS = function (url) { + if (!$('link[href="' + url + '"]').length) { + $('head').append($('', { + 'href': url, + 'rel': 'stylesheet', + 'type': 'text/css' + })); + } +}; +openerp.loadJS = function (url) { + var def = $.Deferred(); + if ($('script[src="' + url + '"]').length) { + def.resolve(); + } else { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = url; + script.onload = script.onreadystatechange = function() { + if ((script.readyState && script.readyState != "loaded" && script.readyState != "complete") || script.onload_done) { + return; + } + script.onload_done = true; + def.resolve(url); + }; + script.onerror = function () { + console.error("Error loading file", script.src); + def.reject(url); + }; + var head = document.head || document.getElementsByTagName('head')[0]; + head.appendChild(script); + } + return def; +}; +openerp.loadBundle = function (name) { + return $.when( + openerp.loadCSS('/web/css/' + name), + openerp.loadJS('/web/js/' + name) + ); +}; + var realSetTimeout = function(fct, millis) { var finished = new Date().getTime() + millis; var wait = function() {