diff --git a/CHANGELOG b/CHANGELOG index f6c6af6815..ff42524f63 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Keep context in sessionStorage +* Use existing context for get_preferences * Escape external strings (issue9351) * Add context to export URL * Allow changes to editable tree checkboxes without first selecting the line diff --git a/src/sao.js b/src/sao.js index 85716d0980..ebc54449aa 100644 --- a/src/sao.js +++ b/src/sao.js @@ -586,6 +586,7 @@ var Sao = {}; jQuery('#user-logout').empty(); jQuery('#menu').empty(); new Sao.Window.Preferences(function() { + Sao.Session.current_session.reset_context(); Sao.get_preferences().then(function(preferences) { Sao.menu(preferences); Sao.user_menu(preferences); diff --git a/src/session.js b/src/session.js index 4e41a91cbb..615b5b8378 100644 --- a/src/session.js +++ b/src/session.js @@ -17,9 +17,8 @@ this.database = database; this.login = login; this.restore(); - this.context = { - client: Sao.Bus.id, - }; + this.context = {}; + this.restore_context(); if (!Sao.Session.current_session) { Sao.Session.current_session = this; } @@ -82,16 +81,34 @@ reload_context: function() { var args = { 'method': 'model.res.user.get_preferences', - 'params': [true, {}] - }; - this.context = { - client: Sao.Bus.id, + 'params': [true, this.context] }; + this.reset_context(); var prm = Sao.rpc(args, this); return prm.then(function(context) { jQuery.extend(this.context, context); + this.store_context(); }.bind(this)); }, + reset_context: function() { + this.context = { + client: Sao.Bus.id, + }; + }, + restore_context: function() { + this.reset_context(); + var context = sessionStorage.getItem('sao_context_' + this.database); + if (context !== null) { + jQuery.extend( + this.context, Sao.rpc.convertJSONObject(JSON.parse(context))); + } + }, + store_context: function() { + var context = jQuery.extend({}, this.context); + delete context.client; + context = JSON.stringify(Sao.rpc.prepareObject(context)); + sessionStorage.setItem('sao_context_' + this.database, context); + }, restore: function() { if (this.database && !this.session) { var session_data = localStorage.getItem(