diff options
| author | Simon Lejeune <sle@openerp.com> | 2016-10-12 22:04:43 +0200 |
|---|---|---|
| committer | Simon Lejeune <sle@openerp.com> | 2016-10-13 15:51:09 +0200 |
| commit | 5abe76c2d27a6ab07eebb382205c841acf32c551 (patch) | |
| tree | 689bdbe0e67c15df2df47faf651f7b85364aa243 /addons/web/static/src/js/web_client.js | |
| parent | cfe0dc6d3442f31ffb1638595daf330dc225b34c (diff) | |
[FIX] web: clear_uncommitted_changes on browser's back button
This is done by guarding the `on_hashchange` evant handler with the
`clear_uncommitted_changes` function.
Note that the url has already changed when we are in this handler, so we
make sure to restore the old url when the user chose to continue its
edition.
Diffstat (limited to 'addons/web/static/src/js/web_client.js')
| -rw-r--r-- | addons/web/static/src/js/web_client.js | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/addons/web/static/src/js/web_client.js b/addons/web/static/src/js/web_client.js index 48216f9c0a3..5498e0a7474 100644 --- a/addons/web/static/src/js/web_client.js +++ b/addons/web/static/src/js/web_client.js @@ -285,20 +285,32 @@ var WebClient = Widget.extend({ } }, on_hashchange: function(event) { + if (this._ignore_hashchange) { + this._ignore_hashchange = false; + return; + } + var self = this; - var stringstate = event.getState(false); - if (!_.isEqual(this._current_state, stringstate)) { - var state = event.getState(true); - if(!state.action && state.menu_id) { - self.menu.is_bound.done(function() { - self.menu.menu_click(state.menu_id); - }); - } else { - state._push_me = false; // no need to push state back... - this.action_manager.do_load_state(state, !!this._current_state); + this.clear_uncommitted_changes().then(function () { + var stringstate = event.getState(false); + if (!_.isEqual(self._current_state, stringstate)) { + var state = event.getState(true); + if(!state.action && state.menu_id) { + self.menu.is_bound.done(function() { + self.menu.menu_click(state.menu_id); + }); + } else { + state._push_me = false; // no need to push state back... + self.action_manager.do_load_state(state, !!self._current_state); + } } - } - this._current_state = stringstate; + self._current_state = stringstate; + }, function () { + if (event) { + self._ignore_hashchange = true; + window.location = event.originalEvent.oldURL; + } + }); }, do_push_state: function(state) { this.set_title(state.title); |
