summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-01-28 19:45:46 +0100
committerChristophe Simonis <chs@odoo.com>2019-01-28 19:45:46 +0100
commit788684a5ddcff074e239b524e043cbf900dc54a9 (patch)
tree1cc58b41946a814b9b6d3f580f9c3c5a31a3a141 /addons/web/static
parent3cba1862d44061e4382d84d977ae93027fe107b8 (diff)
parentaaa2035bcf700761129b3e64ff6e845a1116e1e6 (diff)
[MERGE] forward port branch saas-14 up to aaa2035bcf7
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/framework/crash_manager.js34
-rw-r--r--addons/web/static/src/less/navbar.less6
2 files changed, 29 insertions, 11 deletions
diff --git a/addons/web/static/src/js/framework/crash_manager.js b/addons/web/static/src/js/framework/crash_manager.js
index baf577b578d..36d8057a23c 100644
--- a/addons/web/static/src/js/framework/crash_manager.js
+++ b/addons/web/static/src/js/framework/crash_manager.js
@@ -22,6 +22,7 @@ var map_title ={
var CrashManager = core.Class.extend({
init: function() {
this.active = true;
+ this.isConnected = true;
},
enable: function () {
this.active = true;
@@ -29,8 +30,29 @@ var CrashManager = core.Class.extend({
disable: function () {
this.active = false;
},
- rpc_error: function(error) {
+ handleLostConnection: function () {
var self = this;
+ if (!this.isConnected) {
+ // already handled, nothing to do. This can happen when several
+ // rpcs are done in parallel and fail because of a lost connection.
+ return;
+ }
+ this.isConnected = false;
+ var delay = 2000;
+ core.bus.trigger('connection_lost');
+
+ setTimeout(function checkConnection() {
+ ajax.jsonRpc('/web/webclient/version_info', 'call', {}, {shadow:true}).then(function () {
+ core.bus.trigger('connection_restored');
+ self.isConnected = true;
+ }).fail(function () {
+ // exponential backoff, with some jitter
+ delay = (delay * 1.5) + 500*Math.random();
+ setTimeout(checkConnection, delay);
+ });
+ }, delay);
+ },
+ rpc_error: function(error) {
if (!this.active) {
return;
}
@@ -38,15 +60,7 @@ var CrashManager = core.Class.extend({
return;
}
if (error.code === -32098) {
- core.bus.trigger('connection_lost');
- this.connection_lost = true;
- var timeinterval = setInterval(function() {
- ajax.jsonRpc('/web/webclient/version_info').then(function() {
- clearInterval(timeinterval);
- core.bus.trigger('connection_restored');
- self.connection_lost = false;
- });
- }, 2000);
+ this.handleLostConnection();
return;
}
var handler = core.crash_registry.get(error.data.name, true);
diff --git a/addons/web/static/src/less/navbar.less b/addons/web/static/src/less/navbar.less
index 5f3aff0b98f..7b31ec11089 100644
--- a/addons/web/static/src/less/navbar.less
+++ b/addons/web/static/src/less/navbar.less
@@ -94,7 +94,6 @@
position: relative;
height: @odoo-navbar-height;
- overflow: hidden;
> ul {
> li {
@@ -110,6 +109,7 @@
&.o_menu_sections {
width: 100%;
+ display: none;
> li.open .dropdown-menu {
position: static;
@@ -158,6 +158,10 @@
.o_main_navbar {
height: 100%;
overflow: auto;
+
+ .o_menu_sections {
+ display: block;
+ }
}
}
}