[IMP] restore mono db preload, introduce bootstrap manifest key
bzr revid: al@openerp.com-20121110211343-g1r6qzka8iqk1fky
This commit is contained in:
parent
cd4b9409f8
commit
49c0ed6467
|
@ -38,7 +38,7 @@ This module provides the core of the OpenERP Web Client.
|
||||||
"static/lib/underscore/underscore.string.js",
|
"static/lib/underscore/underscore.string.js",
|
||||||
"static/lib/backbone/backbone.js",
|
"static/lib/backbone/backbone.js",
|
||||||
"static/lib/cleditor/jquery.cleditor.js",
|
"static/lib/cleditor/jquery.cleditor.js",
|
||||||
"static/lib/py.js/lib/py.js",
|
"static/lib/py.js/lib/py.js",
|
||||||
"static/src/js/boot.js",
|
"static/src/js/boot.js",
|
||||||
"static/src/js/corelib.js",
|
"static/src/js/corelib.js",
|
||||||
"static/src/js/coresetup.js",
|
"static/src/js/coresetup.js",
|
||||||
|
@ -67,4 +67,5 @@ This module provides the core of the OpenERP Web Client.
|
||||||
'qweb' : [
|
'qweb' : [
|
||||||
"static/src/xml/*.xml",
|
"static/src/xml/*.xml",
|
||||||
],
|
],
|
||||||
|
'bootstrap': True,
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,57 +81,6 @@ def rjsmin(script):
|
||||||
).strip()
|
).strip()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def sass2scss(src):
|
|
||||||
# Validated by diff -u of sass2scss against:
|
|
||||||
# sass-convert -F sass -T scss openerp.sass openerp.scss
|
|
||||||
block = []
|
|
||||||
sass = ('', block)
|
|
||||||
reComment = re.compile(r'//.*$')
|
|
||||||
reIndent = re.compile(r'^\s+')
|
|
||||||
reIgnore = re.compile(r'^\s*(//.*)?$')
|
|
||||||
reFixes = { re.compile(r'\(\((.*)\)\)') : r'(\1)', }
|
|
||||||
lastLevel = 0
|
|
||||||
prevBlocks = {}
|
|
||||||
for l in src.split('\n'):
|
|
||||||
l = l.rstrip()
|
|
||||||
if reIgnore.search(l): continue
|
|
||||||
l = reComment.sub('', l)
|
|
||||||
l = l.rstrip()
|
|
||||||
indent = reIndent.match(l)
|
|
||||||
level = indent.end() if indent else 0
|
|
||||||
l = l[level:]
|
|
||||||
if level>lastLevel:
|
|
||||||
prevBlocks[lastLevel] = block
|
|
||||||
newBlock = []
|
|
||||||
block[-1] = (block[-1], newBlock)
|
|
||||||
block = newBlock
|
|
||||||
elif level<lastLevel:
|
|
||||||
block = prevBlocks[level]
|
|
||||||
lastLevel = level
|
|
||||||
if not l: continue
|
|
||||||
# Fixes
|
|
||||||
for ereg, repl in reFixes.items():
|
|
||||||
l = ereg.sub(repl if type(repl)==str else repl(), l)
|
|
||||||
block.append(l)
|
|
||||||
|
|
||||||
def write(sass, level=-1):
|
|
||||||
out = ""
|
|
||||||
indent = ' '*level
|
|
||||||
if type(sass)==tuple:
|
|
||||||
if level>=0:
|
|
||||||
out += indent+sass[0]+" {\n"
|
|
||||||
for e in sass[1]:
|
|
||||||
out += write(e, level+1)
|
|
||||||
if level>=0:
|
|
||||||
out = out.rstrip(" \n")
|
|
||||||
out += ' }\n'
|
|
||||||
if level==0:
|
|
||||||
out += "\n"
|
|
||||||
else:
|
|
||||||
out += indent+sass+";\n"
|
|
||||||
return out
|
|
||||||
return write(sass)
|
|
||||||
|
|
||||||
def db_list(req):
|
def db_list(req):
|
||||||
dbs = []
|
dbs = []
|
||||||
proxy = req.session.proxy("db")
|
proxy = req.session.proxy("db")
|
||||||
|
@ -231,8 +180,6 @@ def module_installed_bypass_session(dbname):
|
||||||
|
|
||||||
def module_boot(req):
|
def module_boot(req):
|
||||||
server_wide_modules = openerp.conf.server_wide_modules or ['web']
|
server_wide_modules = openerp.conf.server_wide_modules or ['web']
|
||||||
return [m for m in server_wide_modules if m in openerpweb.addons_manifest]
|
|
||||||
# TODO the following will be enabled once we separate the module code and translation loading
|
|
||||||
serverside = []
|
serverside = []
|
||||||
dbside = []
|
dbside = []
|
||||||
for i in server_wide_modules:
|
for i in server_wide_modules:
|
||||||
|
@ -549,7 +496,7 @@ def _local_web_translations(trans_file):
|
||||||
messages.append({'id': x.id, 'string': x.string})
|
messages.append({'id': x.id, 'string': x.string})
|
||||||
return messages
|
return messages
|
||||||
|
|
||||||
def from_elementtree(el, preserve_whitespaces=False):
|
def xml2json_from_elementtree(el, preserve_whitespaces=False):
|
||||||
""" xml2json-direct
|
""" xml2json-direct
|
||||||
Simple and straightforward XML-to-JSON converter in Python
|
Simple and straightforward XML-to-JSON converter in Python
|
||||||
New BSD Licensed
|
New BSD Licensed
|
||||||
|
@ -569,13 +516,12 @@ def from_elementtree(el, preserve_whitespaces=False):
|
||||||
if el.text and (preserve_whitespaces or el.text.strip() != ''):
|
if el.text and (preserve_whitespaces or el.text.strip() != ''):
|
||||||
kids.append(el.text)
|
kids.append(el.text)
|
||||||
for kid in el:
|
for kid in el:
|
||||||
kids.append(from_elementtree(kid, preserve_whitespaces))
|
kids.append(xml2json_from_elementtree(kid, preserve_whitespaces))
|
||||||
if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''):
|
if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''):
|
||||||
kids.append(kid.tail)
|
kids.append(kid.tail)
|
||||||
res["children"] = kids
|
res["children"] = kids
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
def content_disposition(filename, req):
|
def content_disposition(filename, req):
|
||||||
filename = filename.encode('utf8')
|
filename = filename.encode('utf8')
|
||||||
escaped = urllib2.quote(filename)
|
escaped = urllib2.quote(filename)
|
||||||
|
@ -612,8 +558,7 @@ html_template = """<!DOCTYPE html>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!--[if lte IE 8]>
|
<!--[if lte IE 8]>
|
||||||
<script type="text/javascript"
|
<script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
|
||||||
src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
|
|
||||||
<script>
|
<script>
|
||||||
var test = function() {
|
var test = function() {
|
||||||
CFInstall.check({
|
CFInstall.check({
|
||||||
|
@ -750,12 +695,13 @@ class WebClient(openerpweb.Controller):
|
||||||
|
|
||||||
translations_per_module = {}
|
translations_per_module = {}
|
||||||
for addon_name in mods:
|
for addon_name in mods:
|
||||||
addons_path = openerpweb.addons_manifest[addon_name]['addons_path']
|
if openerpweb.addons_manifest[addon_name].get('bootstrap'):
|
||||||
f_name = os.path.join(addons_path, addon_name, "i18n", lang + ".po")
|
addons_path = openerpweb.addons_manifest[addon_name]['addons_path']
|
||||||
if not os.path.exists(f_name):
|
f_name = os.path.join(addons_path, addon_name, "i18n", lang + ".po")
|
||||||
continue
|
if not os.path.exists(f_name):
|
||||||
translations_per_module[addon_name] = {'messages': _local_web_translations(f_name)}
|
continue
|
||||||
|
translations_per_module[addon_name] = {'messages': _local_web_translations(f_name)}
|
||||||
|
|
||||||
return {"modules": translations_per_module,
|
return {"modules": translations_per_module,
|
||||||
"lang_parameters": None}
|
"lang_parameters": None}
|
||||||
|
|
||||||
|
@ -1342,7 +1288,7 @@ class View(openerpweb.Controller):
|
||||||
xml = self.transform_view(arch, session, evaluation_context)
|
xml = self.transform_view(arch, session, evaluation_context)
|
||||||
else:
|
else:
|
||||||
xml = ElementTree.fromstring(arch)
|
xml = ElementTree.fromstring(arch)
|
||||||
fvg['arch'] = from_elementtree(xml, preserve_whitespaces)
|
fvg['arch'] = xml2json_from_elementtree(xml, preserve_whitespaces)
|
||||||
|
|
||||||
if 'id' in fvg['fields']:
|
if 'id' in fvg['fields']:
|
||||||
# Special case for id's
|
# Special case for id's
|
||||||
|
|
|
@ -155,16 +155,14 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess
|
||||||
load_modules: function() {
|
load_modules: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
return this.rpc('/web/session/modules', {}).then(function(result) {
|
return this.rpc('/web/session/modules', {}).then(function(result) {
|
||||||
var lang = self.user_context.lang,
|
var all_modules = _.uniq(self.module_list.concat(result));
|
||||||
all_modules = _.uniq(self.module_list.concat(result));
|
|
||||||
var params = { mods: all_modules, lang: lang};
|
|
||||||
var to_load = _.difference(result, self.module_list).join(',');
|
var to_load = _.difference(result, self.module_list).join(',');
|
||||||
self.module_list = all_modules;
|
self.module_list = all_modules;
|
||||||
|
|
||||||
var loaded = self.rpc('/web/webclient/translations', params).done(function(trans) {
|
var loaded = self.load_translations();
|
||||||
instance.web._t.database.set_bundle(trans);
|
var datejs_locale = "/web/static/lib/datejs/globalization/" + self.user_context.lang.replace("_", "-") + ".js";
|
||||||
});
|
|
||||||
var file_list = ["/web/static/lib/datejs/globalization/" + lang.replace("_", "-") + ".js"];
|
var file_list = [ datejs_locale ];
|
||||||
if(to_load.length) {
|
if(to_load.length) {
|
||||||
loaded = $.when(
|
loaded = $.when(
|
||||||
loaded,
|
loaded,
|
||||||
|
@ -190,6 +188,12 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
load_translations: function() {
|
||||||
|
var params = { mods: this.module_list, lang: this.user_context.lang };
|
||||||
|
return this.rpc('/web/webclient/translations', params).done(function(trans) {
|
||||||
|
instance.web._t.database.set_bundle(trans);
|
||||||
|
});
|
||||||
|
},
|
||||||
load_css: function (files) {
|
load_css: function (files) {
|
||||||
var self = this;
|
var self = this;
|
||||||
_.each(files, function (file) {
|
_.each(files, function (file) {
|
||||||
|
|
Loading…
Reference in New Issue