From 364ea001f9e22bfc9c112359a76ff1d8aaa724e3 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 20 Feb 2013 09:44:37 +0100 Subject: [PATCH 1/2] [FIX] stringify states (patch from chs) bzr revid: fme@openerp.com-20130220084437-cyb0pi8nw71bl5mx --- addons/web/static/src/js/chrome.js | 9 +++++---- addons/web/static/src/js/views.js | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 7b64358f005..05ca224eb14 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -1323,8 +1323,9 @@ instance.web.WebClient = instance.web.Client.extend({ }, on_hashchange: function(event) { var self = this; - var state = event.getState(true); - if (!_.isEqual(this._current_state, state)) { + var stringstate = event.getState(false); + if (!_.isEqual(this._current_state, stringstate)) { + var state = event.getState(true); if(!state.action && state.menu_id) { self.menu.has_been_loaded.done(function() { self.menu.do_reload().done(function() { @@ -1336,13 +1337,13 @@ instance.web.WebClient = instance.web.Client.extend({ this.action_manager.do_load_state(state, !!this._current_state); } } - this._current_state = state; + this._current_state = stringstate; }, do_push_state: function(state) { this.set_title(state.title); delete state.title; var url = '#' + $.param(state); - this._current_state = _.clone(state); + this._current_state = $.deparam($.param(state), false); // stringify all values $.bbq.pushState(url); this.trigger('state_pushed', state); }, diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 1f809550e64..47986f1da47 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -195,7 +195,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ state["active_id"] = this.inner_action.context.active_id; } if (this.inner_action.context.active_ids) { - //state["active_ids"] = this.inner_action.context.active_ids.join(','); + state["active_ids"] = this.inner_action.context.active_ids.join(','); } } } From ee4bc76f147a4af0f32d888c6f58b11c73e54d42 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 20 Feb 2013 10:12:26 +0100 Subject: [PATCH 2/2] [IMP] Do not push active_ids in state if active_ids == [active_id] bzr revid: fme@openerp.com-20130220091226-akczbmurjvn5jzjl --- addons/web/static/src/js/views.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 47986f1da47..a2fd997cf68 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -191,10 +191,14 @@ instance.web.ActionManager = instance.web.Widget.extend({ state = _.extend(params || {}, state); } if (this.inner_action.context) { - if (this.inner_action.context.active_id) { - state["active_id"] = this.inner_action.context.active_id; + var active_id = this.inner_action.context.active_id; + if (active_id) { + state["active_id"] = active_id; } - if (this.inner_action.context.active_ids) { + var active_ids = this.inner_action.context.active_ids; + if (active_ids && !(active_ids.length === 1 && active_ids[0] === active_id)) { + // We don't push active_ids if it's a single element array containing the active_id + // This makes the url shorter in most cases. state["active_ids"] = this.inner_action.context.active_ids.join(','); } } @@ -231,6 +235,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ add_context.active_ids = state.active_ids.toString().split(',').map(function(id) { return parseInt(id, 10) || id; }); + } else if (state.active_id) { + add_context.active_ids = [state.active_id]; } this.null_action(); action_loaded = this.do_action(state.action, { additional_context: add_context });