From 055cae21512a7af32f1a67ed0460c11477679711 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 2 Apr 2014 13:27:09 +0200 Subject: [PATCH 01/34] [WIP] load script bzr revid: fme@openerp.com-20140402112709-vbm7p35s980p0s2u --- addons/web/static/src/js/openerpframework.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 5dcc2197944..8a2961e058f 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -1477,6 +1477,26 @@ openerp.time_to_str = function(obj) { + lpad(obj.getSeconds(),2); }; +openerp.load_script = function (url) { + var def = $.Deferred(); + if (document.getElementById(url)) { + def.resolve(); + } else { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = script.id = url; + script.onload = function () { + def.resolve(); + }; + script.onerror = function () { + console.error("Error loading file", url); + def.reject(); + }; + document.head.appendChild(script); + } + return def; +}; + openerp.declare = declare; return openerp; From 8e14e7a870b04345e7ae101910b1dc97c1865dca Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 9 Apr 2014 18:16:48 +0200 Subject: [PATCH 02/34] [WIP] AssetsBundle bzr revid: fme@openerp.com-20140409161648-sx87vc0saj30f68x --- addons/web/controllers/main.py | 52 ++++++++++-------------- addons/web/static/src/js/chrome.js | 2 +- addons/web/views/webclient_templates.xml | 24 +++++++---- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 2771c658270..4517c919b4c 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -31,6 +31,7 @@ except ImportError: import openerp import openerp.modules.registry +from openerp.addons.base.ir.ir_qweb import AssetsBundle from openerp.tools.translate import _ from openerp import http @@ -364,30 +365,17 @@ def manifest_glob(extension, addons=None, db=None, include_remotes=False): r.append((None, pattern)) else: for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))): - # Hack for IE, who limit 288Ko, 4095 rules, 31 sheets - # http://support.microsoft.com/kb/262161/en - if pattern == "static/lib/bootstrap/css/bootstrap.css": - if include_remotes: - r.insert(0, (None, fs2web(path[len(addons_path):]))) - else: - r.append((path, fs2web(path[len(addons_path):]))) + r.append((path, fs2web(path[len(addons_path):]))) return r -def manifest_list(extension, mods=None, db=None, debug=False): +def manifest_list(extension, mods=None, db=None, debug=None): """ list ressources to load specifying either: mods: a comma separated string listing modules db: a database name (return all installed modules in that database) """ + if debug is not None: + _logger.warning("openerp.addons.web.main.manifest_list(): debug parameter is deprecated") files = manifest_glob(extension, addons=mods, db=db, include_remotes=True) - if not debug: - path = '/web/webclient/' + extension - if mods is not None: - path += '?' + werkzeug.url_encode({'mods': mods}) - elif db: - path += '?' + werkzeug.url_encode({'db': db}) - - remotes = [wp for fp, wp in files if fp is None] - return [path] + remotes return [wp for _fp, wp in files] def get_last_modified(files): @@ -614,26 +602,16 @@ html_template = """ """ -def render_bootstrap_template(template, values=None, debug=False, db=None, **kw): - if not db: - db = request.db - if request.debug: - debug = True +def render_bootstrap_template(template, values=None, **kw): if values is None: - values = {} - values['debug'] = debug - values['current_db'] = db + values = dict() try: values['databases'] = http.db_list() except openerp.exceptions.AccessDenied: values['databases'] = None - for res in ['js', 'css']: - if res not in values: - values[res] = manifest_list(res, db=db, debug=debug) - if 'modules' not in values: - values['modules'] = module_boot(db=db) + values['modules'] = module_boot() values['modules'] = simplejson.dumps(values['modules']) return request.render(template, values, **kw) @@ -679,6 +657,20 @@ class Home(http.Controller): def login(self, db, login, key, redirect="/web", **kw): return login_and_redirect(db, login, key, redirect_url=redirect) + @http.route('/web/js/', type='http', auth="none") + def js_bundle(self, xmlid, **kw): + values = dict(manifest_list=manifest_list) + html = request.render(xmlid, lazy=False, qcontext=values) + bundle = AssetsBundle(xmlid, html) + return bundle.js() + + @http.route('/web/css/', type='http', auth='none') + def css_bundle(self, xmlid, **kw): + values = dict(manifest_list=manifest_list) + html = request.render(xmlid, lazy=False, qcontext=values) + bundle = AssetsBundle(xmlid, html) + return bundle.css() + class WebClient(http.Controller): @http.route('/web/webclient/csslist', type='json', auth="none") diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 8e5df84e2c3..ae1499549ba 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1478,7 +1478,7 @@ instance.web.embed = function (origin, dbname, login, key, action, options) { $('head').append($('', { 'rel': 'stylesheet', 'type': 'text/css', - 'href': origin +'/web/webclient/css' + 'href': origin +'/web/css/web.assets_webclient' })); var currentScript = document.currentScript; if (!currentScript) { diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml index 46bae5f83ca..a0c6cc8463b 100644 --- a/addons/web/views/webclient_templates.xml +++ b/addons/web/views/webclient_templates.xml @@ -3,6 +3,19 @@ --> + + +