diff options
Diffstat (limited to 'web_notify/static/src')
| -rw-r--r-- | web_notify/static/src/js/web_client.js | 61 | ||||
| -rw-r--r-- | web_notify/static/src/js/widgets/notification.js | 26 | ||||
| -rw-r--r-- | web_notify/static/src/scss/webclient.scss | 24 |
3 files changed, 111 insertions, 0 deletions
diff --git a/web_notify/static/src/js/web_client.js b/web_notify/static/src/js/web_client.js new file mode 100644 index 0000000..a576dcd --- /dev/null +++ b/web_notify/static/src/js/web_client.js @@ -0,0 +1,61 @@ +odoo.define("web_notify.WebClient", function (require) { + "use strict"; + + var WebClient = require("web.WebClient"); + var session = require("web.session"); + require("bus.BusService"); + + WebClient.include({ + show_application: function () { + var res = this._super(); + this.start_polling(); + return res; + }, + start_polling: function () { + this.channel_success = "notify_success_" + session.uid; + this.channel_danger = "notify_danger_" + session.uid; + this.channel_warning = "notify_warning_" + session.uid; + this.channel_info = "notify_info_" + session.uid; + this.channel_default = "notify_default_" + session.uid; + this.all_channels = [ + this.channel_success, + this.channel_danger, + this.channel_warning, + this.channel_info, + this.channel_default, + ]; + this.call("bus_service", "startPolling"); + + if (this.call("bus_service", "isMasterTab")) { + this.call("bus_service", "addChannel", this.channel_success); + this.call("bus_service", "addChannel", this.channel_danger); + this.call("bus_service", "addChannel", this.channel_warning); + this.call("bus_service", "addChannel", this.channel_info); + this.call("bus_service", "addChannel", this.channel_default); + } + this.call("bus_service", "on", "notification", this, this.bus_notification); + }, + bus_notification: function (notifications) { + var self = this; + _.each(notifications, function (notification) { + var channel = notification[0]; + var message = notification[1]; + if ( + self.all_channels !== null && + self.all_channels.indexOf(channel) > -1 + ) { + self.on_message(message); + } + }); + }, + on_message: function (message) { + return this.call("notification", "notify", { + type: message.type, + title: message.title, + message: message.message, + sticky: message.sticky, + className: message.className, + }); + }, + }); +}); diff --git a/web_notify/static/src/js/widgets/notification.js b/web_notify/static/src/js/widgets/notification.js new file mode 100644 index 0000000..0c468ff --- /dev/null +++ b/web_notify/static/src/js/widgets/notification.js @@ -0,0 +1,26 @@ +odoo.define("web_notify.Notification", function (require) { + "use strict"; + + var Notification = require("web.Notification"); + + Notification.include({ + icon_mapping: { + success: "fa-thumbs-up", + danger: "fa-exclamation-triangle", + warning: "fa-exclamation", + info: "fa-info", + default: "fa-lightbulb-o", + }, + init: function () { + this._super.apply(this, arguments); + // Delete default classes + this.className = this.className.replace(" o_error", ""); + // Add custom icon and custom class + this.icon = + this.type in this.icon_mapping + ? this.icon_mapping[this.type] + : this.icon_mapping.default; + this.className += " o_" + this.type; + }, + }); +}); diff --git a/web_notify/static/src/scss/webclient.scss b/web_notify/static/src/scss/webclient.scss new file mode 100644 index 0000000..82f3c15 --- /dev/null +++ b/web_notify/static/src/scss/webclient.scss @@ -0,0 +1,24 @@ +.o_notification_manager { + .o_notification { + &.o_success { + color: white; + background-color: theme-color("success"); + } + &.o_danger { + color: white; + background-color: theme-color("danger"); + } + &.o_warning { + color: white; + background-color: theme-color("warning"); + } + &.o_info { + color: white; + background-color: theme-color("info"); + } + &.o_default { + color: black; + background-color: theme-color("default"); + } + } +} |
