From deef3f37b549ef933de8f6ad6552322db7225743 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 4 Jan 2012 19:11:50 +0100 Subject: [PATCH] [imp] simplified WebClient bzr revid: nicolas.vanhoren@openerp.com-20120104181150-0zm2b3m6e89yb2zp --- addons/web/static/src/js/chrome.js | 90 +++++++++++++++++------------- addons/web/static/src/js/core.js | 6 ++ 2 files changed, 57 insertions(+), 39 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 41895692378..54718a5c50b 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -226,8 +226,20 @@ openerp.web.Loading = openerp.web.Widget.extend(/** @lends openerp.web.Loading# this._super(parent); this.count = 0; this.blocked_ui = false; - this.session.on_rpc_request.add_first(this.on_rpc_event, 1); - this.session.on_rpc_response.add_last(this.on_rpc_event, -1); + var self = this; + this.request_call = function() { + self.on_rpc_event(1); + }; + this.response_call = function() { + self.on_rpc_event(-1); + }; + this.session.on_rpc_request.add_first(this.request_call); + this.session.on_rpc_response.add_last(this.response_call); + }, + stop: function() { + this.session.on_rpc_request.remove(this.request_call); + this.session.on_rpc_response.remove(this.response_call); + this._super(); }, on_rpc_event : function(increment) { var self = this; @@ -1056,31 +1068,12 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie }); } - self.crashmanager = new openerp.web.CrashManager(); - self.notification = new openerp.web.Notification(self); - self.notification.appendTo(self.$element); - self.loading = new openerp.web.Loading(self); - self.loading.appendTo(self.$element); - if (!self.session.session_is_valid()) { - self.login = new openerp.web.Login(self); - self.login.appendTo(self.$element); + self.show_login(); } }); this.session.ready.then(function() { - if (self.login) { - self.login.stop(); - self.login = undefined; - } - self.$table = $(QWeb.render("Interface", {})); - self.$element.append(self.$table); - self.header = new openerp.web.Header(self); - self.header.on_logout.add(self.on_logout); - self.header.on_action.add(self.on_menu_action); - self.header.appendTo($("#oe_header")); - self.menu = new openerp.web.Menu(self, "oe_menu", "oe_secondary_menu"); - self.menu.on_action.add(self.on_menu_action); - self.menu.start(); + self.show_application(); self.header.do_update(); self.menu.do_reload(); @@ -1095,6 +1088,40 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie } }); }, + show_login: function() { + var self = this; + this.destroy_content(); + this.show_common(); + self.login = new openerp.web.Login(self); + self.login.appendTo(self.$element); + }, + show_application: function() { + var self = this; + this.destroy_content(); + this.show_common(); + self.$table = $(QWeb.render("Interface", {})); + self.$element.append(self.$table); + self.header = new openerp.web.Header(self); + self.header.on_logout.add(self.on_logout); + self.header.on_action.add(self.on_menu_action); + self.header.appendTo($("#oe_header")); + self.menu = new openerp.web.Menu(self, "oe_menu", "oe_secondary_menu"); + self.menu.on_action.add(self.on_menu_action); + self.menu.start(); + }, + show_common: function() { + var self = this; + self.crashmanager = new openerp.web.CrashManager(); + self.notification = new openerp.web.Notification(self); + self.notification.appendTo(self.$element); + self.loading = new openerp.web.Loading(self); + self.loading.appendTo(self.$element); + }, + destroy_content: function() { + _.each(_.clone(this.widget_children), function(el) { + el.stop(); + }); + }, do_reload: function() { return this.session.session_init().pipe(_.bind(function() {this.menu.do_reload();}, this)); }, @@ -1111,22 +1138,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie this.header.do_update(); $(window).unbind('hashchange', this.on_hashchange); this.do_push_state({}); - if(this.action_manager) { - this.action_manager.stop(); - this.action_manager = undefined; - } - if (this.menu) { - this.menu.stop(); - this.menu = undefined; - } - if (this.header) { - this.header.stop(); - this.header = undefined; - } - if (this.$table) { - this.$table.remove(); - this.$table = undefined; - } + this.show_login(); window.location.reload(); }, bind_hashchange: function() { diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 24f1a95d1ec..e59c6d417ae 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -160,6 +160,12 @@ openerp.web.callback = function(obj, method) { position: "last" }); }; + callback.remove = function(f) { + callback.callback_chain = _.difference(callback.callback_chain, _.filter(callback.callback_chain, function(el) { + return el.callback === f; + })); + return callback; + }; return callback.add({ callback: method,