summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/chrome/abstract_web_client.js5
-rw-r--r--addons/web/static/src/js/core/service_mixins.js38
-rw-r--r--addons/web/static/src/js/services/crash_manager.js27
-rw-r--r--addons/web/static/src/js/services/notification_service.js1
-rw-r--r--addons/web/static/src/js/widgets/notification.js2
-rw-r--r--addons/web/static/src/xml/notification.xml4
6 files changed, 48 insertions, 29 deletions
diff --git a/addons/web/static/src/js/chrome/abstract_web_client.js b/addons/web/static/src/js/chrome/abstract_web_client.js
index 270f2871afe..2d94501deed 100644
--- a/addons/web/static/src/js/chrome/abstract_web_client.js
+++ b/addons/web/static/src/js/chrome/abstract_web_client.js
@@ -331,7 +331,7 @@ var AbstractWebClient = Widget.extend(ServiceProviderMixin, KeyboardNavigationMi
* @private
*/
_onConnectionLost: function () {
- this.connectionNotificationID = this.call('notification', 'notify', {
+ this.connectionNotificationID = this.displayNotification({
title: _t('Connection lost'),
message: _t('Trying to reconnect...'),
sticky: true
@@ -345,7 +345,8 @@ var AbstractWebClient = Widget.extend(ServiceProviderMixin, KeyboardNavigationMi
_onConnectionRestored: function () {
if (this.connectionNotificationID) {
this.call('notification', 'close', this.connectionNotificationID);
- this.call('notification', 'notify', {
+ this.displayNotification({
+ type: 'info',
title: _t('Connection restored'),
message: _t('You are back online'),
sticky: false
diff --git a/addons/web/static/src/js/core/service_mixins.js b/addons/web/static/src/js/core/service_mixins.js
index 209f6ccabb3..f34adfe4de8 100644
--- a/addons/web/static/src/js/core/service_mixins.js
+++ b/addons/web/static/src/js/core/service_mixins.js
@@ -225,34 +225,42 @@ var ServicesMixin = {
/**
* Displays a notification.
*
- * @param {string} title
- * @param {string} [message]
- * @param {string} [type='warning'] 'info', 'success', 'warning', 'danger' or ''
- * @param {boolean} [sticky=false]
- * @param {string} [className]
+ * @param {Object} options
+ * @param {string} options.title
+ * @param {string} [options.subtitle]
+ * @param {string} [options.message]
+ * @param {string} [options.type='warning'] 'info', 'success', 'warning', 'danger' or ''
+ * @param {boolean} [options.sticky=false]
+ * @param {string} [options.className]
*/
- displayNotification: function (title, message, type, sticky, className) {
- return this.call('notification', 'notify', {
- type: type,
- title: title,
- message: message,
- sticky: sticky,
- className: className,
- });
+ displayNotification: function (options) {
+ return this.call('notification', 'notify', options);
},
/**
* @deprecated will be removed as soon as the notification system is reviewed
* @see displayNotification
*/
do_notify: function (title, message, sticky, className) {
- return this.displayNotification(title, message, 'warning', sticky, className);
+ return this.displayNotification({
+ type: 'warning',
+ title: title,
+ message: message,
+ sticky: sticky,
+ className: className,
+ });
},
/**
* @deprecated will be removed as soon as the notification system is reviewed
* @see displayNotification
*/
do_warn: function (title, message, sticky, className) {
- return this.displayNotification(title, message, 'danger', sticky, className);
+ return this.displayNotification({
+ type: 'danger',
+ title: title,
+ message: message,
+ sticky: sticky,
+ className: className,
+ });
},
};
diff --git a/addons/web/static/src/js/services/crash_manager.js b/addons/web/static/src/js/services/crash_manager.js
index a8fafa4b897..6a78d776afa 100644
--- a/addons/web/static/src/js/services/crash_manager.js
+++ b/addons/web/static/src/js/services/crash_manager.js
@@ -4,6 +4,9 @@ odoo.define('web.CrashManager', function (require) {
var ajax = require('web.ajax');
var core = require('web.core');
var Dialog = require('web.Dialog');
+var mixins = require('web.mixins');
+var ServicesMixin = require('web.ServicesMixin');
+var ServiceProviderMixin = require('web.ServiceProviderMixin');
var Widget = require('web.Widget');
var _t = core._t;
@@ -75,12 +78,14 @@ var WarningDialog = CrashManagerDialog.extend({
},
});
-var CrashManager = core.Class.extend({
+var CrashManager = core.Class.extend(mixins.EventDispatcherMixin, ServicesMixin, ServiceProviderMixin,{
init: function () {
var self = this;
this.active = true;
this.isConnected = true;
+ mixins.EventDispatcherMixin.init.call(this);
+
// crash manager integration
core.bus.on('rpc_error', this, this.rpc_error);
window.onerror = function (message, file, line, col, error) {
@@ -139,6 +144,7 @@ var CrashManager = core.Class.extend({
ev.preventDefault();
}
});
+ ServiceProviderMixin.init.call(this);
},
enable: function () {
this.active = true;
@@ -192,7 +198,7 @@ var CrashManager = core.Class.extend({
data: _.extend({}, error.data,
{
message: error.data.arguments[1],
- title: error.data.arguments[0] !== 'Warning' ? (" - " + error.data.arguments[0]) : '',
+ title: error.data.arguments[0] !== 'Warning' ? error.data.arguments[0] : '',
})
});
}
@@ -213,14 +219,11 @@ var CrashManager = core.Class.extend({
data: _.extend({}, error.data,
{
message: error.data.arguments[0],
- title: map_title[error.data.exception_type] !== 'Warning' ? (" - " + map_title[error.data.exception_type]) : '',
+ title: map_title[error.data.exception_type] !== 'Warning' ? map_title[error.data.exception_type] : '',
})
});
}
-
this.show_warning(error);
- //InternalError
-
} else {
this.show_error(error);
}
@@ -230,12 +233,14 @@ var CrashManager = core.Class.extend({
return;
}
var message = error.data ? error.data.message : error.message;
- return new WarningDialog(this, {
- title: _.str.capitalize(error.type) || _t("Odoo Warning"),
- subtitle: error.data.title,
- }, {
+ var title = _.str.capitalize(error.type) || _t("Oops Something went wrong !");
+ var subtitle = error.data ? error.data.title : error.title;
+ this.displayNotification({
+ title: title,
message: message,
- }).open();
+ subtitle: subtitle,
+ sticky: true,
+ });
},
show_error: function (error) {
if (!this.active) {
diff --git a/addons/web/static/src/js/services/notification_service.js b/addons/web/static/src/js/services/notification_service.js
index ea16d9ef66f..295b49d760c 100644
--- a/addons/web/static/src/js/services/notification_service.js
+++ b/addons/web/static/src/js/services/notification_service.js
@@ -60,6 +60,7 @@ var NotificationService = AbstractService.extend({
* @param {function} [params.Notification] javascript class of a notification
* to instantiate by default use 'web.Notification'
* @param {string} params.title notification title
+ * @param {string} params.subtitle notification subtitle
* @param {string} params.message notification main message
* @param {string} params.type 'notification' or 'warning'
* @param {boolean} [params.sticky=false] if true, the notification will stay
diff --git a/addons/web/static/src/js/widgets/notification.js b/addons/web/static/src/js/widgets/notification.js
index 04d42abd7af..a93cc97f91d 100644
--- a/addons/web/static/src/js/widgets/notification.js
+++ b/addons/web/static/src/js/widgets/notification.js
@@ -25,6 +25,7 @@ var Notification = Widget.extend({
* @param {Widget} parent
* @param {Object} params
* @param {string} params.title
+ * @param {string} params.subtitle
* @param {string} [params.message]
* @param {string} [params.type='warning'] 'info', 'success', 'warning', 'danger' or ''
* @param {boolean} [params.sticky=false] if true, the notification will
@@ -41,6 +42,7 @@ var Notification = Widget.extend({
init: function (parent, params) {
this._super.apply(this, arguments);
this.title = params.title;
+ this.subtitle = params.subtitle;
this.message = params.message;
this.buttons = params.buttons || [];
this.sticky = !!this.buttons.length || !!params.sticky;
diff --git a/addons/web/static/src/xml/notification.xml b/addons/web/static/src/xml/notification.xml
index 3ffe9e8979a..592c3ee23b0 100644
--- a/addons/web/static/src/xml/notification.xml
+++ b/addons/web/static/src/xml/notification.xml
@@ -16,7 +16,9 @@
<span class="d-inline" aria-hidden="true">&amp;times;</span>
</button>
</div>
- <div t-if="widget.message or widget.buttons.length" class="toast-body">
+ <div t-if="widget.message or widget.subtitle or widget.buttons.length" class="toast-body">
+ <strong t-if="widget.subtitle" t-raw="widget.subtitle"
+ class="o_notification_subtitle"/>
<div t-if="widget.message" t-raw="widget.message"
class="o_notification_content"/>
<div t-if="widget.buttons.length" class="mt-2 o_notification_buttons">