summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/web_client.js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2016-10-17 16:00:39 +0200
committerChristophe Simonis <chs@odoo.com>2016-10-17 16:00:39 +0200
commit53d8f76a401de522dca40471b161bf91b86a3a0e (patch)
tree8294518369751f6707d6fd68421c066069b99c50 /addons/web/static/src/js/web_client.js
parenta9abce09c066df2a04d1c49ae719b7881ac7e175 (diff)
parente8e4145c998c335d00a48a0b2a7a9e961b3f3983 (diff)
[MERGE] forward port branch saas-12 up to e8e4145
Diffstat (limited to 'addons/web/static/src/js/web_client.js')
-rw-r--r--addons/web/static/src/js/web_client.js46
1 files changed, 29 insertions, 17 deletions
diff --git a/addons/web/static/src/js/web_client.js b/addons/web/static/src/js/web_client.js
index d94f686c440..52962ed284b 100644
--- a/addons/web/static/src/js/web_client.js
+++ b/addons/web/static/src/js/web_client.js
@@ -113,25 +113,37 @@ return AbstractWebClient.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).then(function () {
- var action = self.action_manager.get_inner_action();
- if (action) {
- self.menu.open_action(action.action_descr.id);
- }
- });
+ 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).then(function () {
+ var action = self.action_manager.get_inner_action();
+ if (action) {
+ self.menu.open_action(action.action_descr.id);
+ }
+ });
+ }
}
- }
- this._current_state = stringstate;
+ self._current_state = stringstate;
+ }, function () {
+ if (event) {
+ self._ignore_hashchange = true;
+ window.location = event.originalEvent.oldURL;
+ }
+ });
},
on_menu_action: function(options) {
var self = this;