[FIX] web: correctly concat_file when no debug
authorChristophe Simonis <chs@openerp.com>
Fri, 14 Oct 2011 15:29:46 +0000 (17:29 +0200)
committerChristophe Simonis <chs@openerp.com>
Fri, 14 Oct 2011 15:29:46 +0000 (17:29 +0200)
bzr revid: chs@openerp.com-20111014152946-r307ol34kdlq5qrs

addons/web/controllers/main.py
addons/web/static/src/js/core.js

index 7ca80fb..29cecee 100644 (file)
@@ -25,8 +25,7 @@ openerpweb = web.common.http
 # OpenERP Web web Controllers
 #----------------------------------------------------------
 
-# TODO change into concat_file(addons,key) taking care of addons_path
-def concat_files(addons_path, file_list):
+def concat_files(file_list):
     """ Concatenate file content
     return (concat,timestamp)
     concat: concatenation of file content
@@ -34,8 +33,7 @@ def concat_files(addons_path, file_list):
     """
     files_content = []
     files_timestamp = 0
-    for i in file_list:
-        fname = os.path.join(addons_path, i[1:])
+    for fname in file_list:
         ftime = os.path.getmtime(fname)
         if ftime > files_timestamp:
             files_timestamp = ftime
@@ -70,57 +68,54 @@ class WebClient(openerpweb.Controller):
         return addons
 
     def manifest_glob(self, req, addons, key):
-        if addons==None:
+        if addons is None:
             addons = self.server_wide_modules(req)
         else:
             addons = addons.split(',')
-        files = []
         for addon in addons:
             manifest = openerpweb.addons_manifest.get(addon, None)
             if not manifest:
                 continue
-            addons_path = manifest['addons_path']
+            addons_path = os.path.join(manifest['addons_path'], '')[:-1]    # ensure does not ends with /
             globlist = manifest.get(key, [])
             for pattern in globlist:
-                for path in glob.glob(os.path.join(addons_path, addon, pattern)):
-                    files.append(path[len(addons_path):])
-        return files
+                for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))):
+                    yield path, path[len(addons_path):]
+
+    def _list(self, req, mods, extension):
+        if not req.debug:
+            path = '/web/webclient/' + extension
+            if mods is not None:
+                path += '?mods=' + mods
+            return [path]
+        return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in self.manifest_glob(req, mods, extension)]
 
     @openerpweb.jsonrequest
     def csslist(self, req, mods=None):
-        return self.manifest_glob(req, mods, 'css')
+        return self._list(req, mods, 'css')
 
     @openerpweb.jsonrequest
     def jslist(self, req, mods=None):
-        return self.manifest_glob(req, mods, 'js')
+        return self._list(req, mods, 'js')
 
     @openerpweb.httprequest
     def css(self, req, mods=None):
-        files = self.manifest_glob(req, mods, 'css')
-        content,timestamp = concat_files(req.config.addons_path, files)
+        files = map(operator.itemgetter(0), self.manifest_glob(req, mods, 'css'))
+        content,timestamp = concat_files(files)
         # TODO request set the Date of last modif and Etag
         return req.make_response(content, [('Content-Type', 'text/css')])
 
     @openerpweb.httprequest
     def js(self, req, mods=None):
-        files = self.manifest_glob(req, mods, 'js')
-        content,timestamp = concat_files(req.config.addons_path, files)
+        files = map(operator.itemgetter(0), self.manifest_glob(req, mods, 'js'))
+        content,timestamp = concat_files(files)
         # TODO request set the Date of last modif and Etag
         return req.make_response(content, [('Content-Type', 'application/javascript')])
 
     @openerpweb.httprequest
     def home(self, req, s_action=None, **kw):
-        # script tags
-        jslist = ['/web/webclient/js']
-        if req.debug:
-            jslist = [i + '?debug=' + str(time.time()) for i in self.manifest_glob(req, None, 'js')]
-        js = "\n        ".join(['<script type="text/javascript" src="%s"></script>'%i for i in jslist])
-
-        # css tags
-        csslist = ['/web/webclient/css']
-        if req.debug:
-            csslist = [i + '?debug=' + str(time.time()) for i in self.manifest_glob(req, None, 'css')]
-        css = "\n        ".join(['<link rel="stylesheet" href="%s">'%i for i in csslist])
+        js = "\n        ".join('<script type="text/javascript" src="%s"></script>'%i for i in self._list(req, None, 'js'))
+        css = "\n        ".join('<link rel="stylesheet" href="%s">'%i for i in self._list(req, None, 'css'))
 
         r = home_template % {
             'javascript': js,
index bed5f19..0418ec7 100644 (file)
@@ -384,6 +384,7 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web
         var self = this;
         // Construct a JSON-RPC2 request, method is currently unused
         params.session_id = this.session_id;
+        if (this.debug) params.debug = 1;
 
         // Call using the rpc_mode
         var deferred = $.Deferred();
@@ -566,15 +567,11 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web
                 var file_list = ["/web/static/lib/datejs/globalization/" +
                     self.user_context.lang.replace("_", "-") + ".js"
                 ];
-                if(self.debug) {
-                    self.rpc('/web/webclient/csslist', {"mods": modules}, self.do_load_css);
-                    self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) {
-                        self.do_load_js(file_list.concat(files));
-                    });
-                } else {
-                    self.do_load_css(["/web/webclient/css?mods="+modules]);
-                    self.do_load_js(file_list.concat(["/web/webclient/js?mods="+modules]));
-                }
+
+                self.rpc('/web/webclient/csslist', {"mods": modules}, self.do_load_css);
+                self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) {
+                    self.do_load_js(file_list.concat(files));
+                });
                 openerp._modules_loaded = true;
             });
         });
@@ -583,7 +580,7 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web
         var self = this;
         _.each(files, function (file) {
             $('head').append($('<link>', {
-                'href': file + (self.debug ? '?debug=' + (new Date().getTime()) : ''),
+                'href': file,
                 'rel': 'stylesheet',
                 'type': 'text/css'
             }));
@@ -595,7 +592,7 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web
             var file = files.shift();
             var tag = document.createElement('script');
             tag.type = 'text/javascript';
-            tag.src = file + (this.debug ? '?debug=' + (new Date().getTime()) : '');
+            tag.src = file;
             tag.onload = tag.onreadystatechange = function() {
                 if ( (tag.readyState && tag.readyState != "loaded" && tag.readyState != "complete") || tag.onload_done )
                     return;