summaryrefslogtreecommitdiff
path: root/web_notify/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'web_notify/static/src')
-rw-r--r--web_notify/static/src/js/web_client.js61
-rw-r--r--web_notify/static/src/js/widgets/notification.js26
-rw-r--r--web_notify/static/src/scss/webclient.scss24
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");
+ }
+ }
+}