# 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
"""
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
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,
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();
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;
});
});
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'
}));
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;