(function () { 'use strict'; function NotificationItem(msg, type, module) { this.temporary = false; if (angular.isObject(msg)) { angular.extend(this, msg) } else { this.msg = msg; this.type = type || 'info'; this.module = module; } } angular.module('app.service') .service('notification', [function () { this.NotificationItem = NotificationItem; /** @enum {String} */ this.type = { info: 'info', success: 'success', warning: 'warning', danger: 'danger' }; /** @type {Array.} */ this.list = []; /** * @param {String|Object|NotificationItem|Array} msg * @param {String} [type] * @param {String} [module] */ this.add = function (msg, type, module) { var self = this; if (null == msg) return this; if (angular.isArray(msg)) { msg.forEach(function (msg) { self.add(msg, type, module); }); return this; } var item = msg instanceof NotificationItem ? msg : new NotificationItem(msg, type, module); this.list.unshift(item); return this; }; /** * @param {String|Object|NotificationItem|Array} msg * @param {String} [type] * @param {String} [module] */ this.temporary = function (msg, type, module) { var self = this; if (null == msg) return this; if (angular.isArray(msg)) { msg.forEach(function (msg) { self.temporary(msg, type, module); }); return this; } var item = msg instanceof NotificationItem ? msg : new NotificationItem(msg, type, module); item.temporary = true; item.type = null; return this.add(item); }; /** * @param {NotificationItem} item */ this.remove = function (item) { var idx = this.list.indexOf(item); if (-1 !== idx) { this.list.splice(idx, 1); } return this; }; this.clear = function (module) { var x = 0, ix = 0, i, c; if (module) { for (i = 0, c = this.list.length; ix < c; ++i) { ix = i + x; if (this.list[ix].module === module) { ix = i + (++x); } if (x > 0) { this.list[i] = this.list[ix]; } } this.list.length = c - x; } else { this.list.length = 0; } return this; }; }]); })();