diff options
| author | Roberto López López (OpenERP) <rlo@openerp.com> | 2011-12-22 12:52:43 +0100 |
|---|---|---|
| committer | Roberto López López (OpenERP) <rlo@openerp.com> | 2011-12-22 12:52:43 +0100 |
| commit | 7b2ece8ddc6712af1582dab7c4050cd680d69c36 (patch) | |
| tree | d3fee08c2be9645aff5b29a8e90b430360ac2cdc /addons/web/static/src/js/core.js | |
| parent | b3f7278d12a9409a112b5a4f8ef7ef182ef6538d (diff) | |
| parent | e6e2a6f7db438b46e19944cbd591691a3bc2e0e6 (diff) | |
merge
bzr revid: rlo@openerp.com-20111222115243-ht5rqa4j5bl7ie96
Diffstat (limited to 'addons/web/static/src/js/core.js')
| -rw-r--r-- | addons/web/static/src/js/core.js | 88 |
1 files changed, 55 insertions, 33 deletions
diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 018a474ddbc..f4608a26491 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -359,6 +359,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. this.debug = ($.deparam($.param.querystring()).debug != undefined); // TODO: session store in cookie should be optional this.name = openerp._session_id; + this.qweb_mutex = new $.Mutex(); }, bind: function(origin) { var window_origin = location.protocol+"//"+location.host; @@ -461,6 +462,8 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. data: JSON.stringify(payload), processData: false, }, url); + if (this.synch) + ajax.async = false; return $.ajax(ajax); }, rpc_jsonp: function(url, payload) { @@ -478,6 +481,8 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. cache: false, data: data }, url); + if (this.synch) + ajax.async = false; var payload_str = JSON.stringify(payload); var payload_url = $.param({r:payload_str}); if(payload_url.length < 2000) { @@ -548,8 +553,8 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. has_pwc: result.has_pwc }); var deferred = self.do_load_qweb(['/web/webclient/qweb']); - if(self.uid) { - return deferred.then(self.load_modules()); + if(self.session_is_valid()) { + return deferred.pipe(_.bind(function() { this.load_modules(); }, self)); } return deferred; }); @@ -560,7 +565,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. /** * The session is validated either by login or by restoration of a previous session */ - session_authenticate: function(db, login, password) { + session_authenticate: function(db, login, password, volatile) { var self = this; var base_location = document.location.protocol + '//' + document.location.host; var params = { db: db, login: login, password: password, base_location: base_location }; @@ -573,8 +578,9 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. user_context: result.context, has_pwc: result.has_pwc }); - // TODO: session store in cookie should be optional - self.set_cookie('session_id', self.session_id); + if (!volatile) { + self.set_cookie('session_id', self.session_id); + } return self.load_modules(); }); }, @@ -632,25 +638,23 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. if(openerp._modules_loaded) { return $.when(); } - this.rpc('/web/session/modules', {}, function(result) { + return this.rpc('/web/session/modules', {}).pipe(function(result) { self.module_list = result; var lang = self.user_context.lang; var params = { mods: ["web"].concat(result), lang: lang}; - self.rpc('/web/webclient/translations',params).pipe(function(transs) { - openerp.web._t.database.set_bundle(transs); - var modules = self.module_list.join(','); - var file_list = ["/web/static/lib/datejs/globalization/" + - self.user_context.lang.replace("_", "-") + ".js" - ]; - return $.when( - self.rpc('/web/webclient/csslist', {mods: modules}, self.do_load_css), - self.rpc('/web/webclient/qweblist', {mods: modules}).pipe(self.do_load_qweb), - self.rpc('/web/webclient/jslist', {mods: modules}).pipe(function(files) { + var modules = self.module_list.join(','); + return $.when( + self.rpc('/web/webclient/csslist', {mods: modules}, self.do_load_css), + self.rpc('/web/webclient/qweblist', {mods: modules}).pipe(self.do_load_qweb), + self.rpc('/web/webclient/translations', params).pipe(function(trans) { + openerp.web._t.database.set_bundle(trans); + var file_list = ["/web/static/lib/datejs/globalization/" + lang.replace("_", "-") + ".js"]; + return self.rpc('/web/webclient/jslist', {mods: modules}).pipe(function(files) { return self.do_load_js(file_list.concat(files)); - }) - ).then(function() { - self.ready.resolve(); - }); + }); + }) + ).then(function() { + self.ready.resolve(); }); }); }, @@ -690,15 +694,14 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. }, do_load_qweb: function(files) { var self = this; - if (files.length != 0) { - var file = files.shift(); - return self.rpc('/web/proxy/load', {path: file}).pipe(function(xml) { - openerp.web.qweb.add_template(_.str.trim(xml)); - return self.do_load_qweb(files); + _.each(files, function(file) { + self.qweb_mutex.exec(function() { + return self.rpc('/web/proxy/load', {path: file}).pipe(function(xml) { + openerp.web.qweb.add_template(_.str.trim(xml)); + }); }); - } else { - return $.when(); - } + }); + return self.qweb_mutex.def; }, on_modules_loaded: function() { for(var j=0; j<this.module_list.length; j++) { @@ -806,7 +809,16 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. } }; timer = setTimeout(waitLoop, CHECK_INTERVAL); - } + }, + synchronized_mode: function(to_execute) { + var synch = this.synch; + this.synch = true; + try { + return to_execute(); + } finally { + this.synch = synch; + } + }, }); /** @@ -1173,10 +1185,6 @@ openerp.web.qweb.format_text_node = function(s) { return tr === ts ? s : tr; } -/** Setup default connection */ -openerp.connection = new openerp.web.Connection(); -openerp.web.qweb.default_dict['__debug__'] = openerp.connection.debug; - /** Jquery extentions */ $.Mutex = (function() { function Mutex() { @@ -1194,6 +1202,11 @@ $.Mutex = (function() { return Mutex; })(); +/** Setup default connection */ +openerp.connection = new openerp.web.Connection(); +openerp.web.qweb.default_dict['__debug__'] = openerp.connection.debug; + + $.async_when = function() { var async = false; var def = $.Deferred(); @@ -1220,6 +1233,15 @@ $.async_when = function() { return def; }; +// special tweak for the web client +var old_async_when = $.async_when; +$.async_when = function() { + if (openerp.connection.synch) + return $.when.apply(this, arguments); + else + return old_async_when.apply(this, arguments); +}; + }; // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: |
