/** * angular-growl - v0.4.0 - 2013-11-19 * https://github.com/marcorinck/angular-growl * Copyright (c) 2013 Marco Rinck; Licensed MIT */ angular.module('angular-growl', []); angular.module('angular-growl').directive('growl', [ '$rootScope', function ($rootScope) { 'use strict'; return { restrict: 'A', template: '
' + '\t
' + '\t\t' + '
' + '
' + '
' + '
' + '\t
' + '
', replace: false, scope: true, controller: [ '$scope', '$timeout', 'growl', function ($scope, $timeout, growl) { var onlyUnique = growl.onlyUnique(); $scope.messages = []; function addMessage(message) { $scope.messages.push(message); if (message.ttl && message.ttl !== -1) { $timeout(function () { $scope.deleteMessage(message); }, message.ttl); } } $rootScope.$on('growlMessage', function (event, message) { var found; if (onlyUnique) { angular.forEach($scope.messages, function (msg) { if (message.text === msg.text && message.severity === msg.severity) { found = true; } }); if (!found) { addMessage(message); } } else { addMessage(message); } }); $scope.deleteMessage = function (message) { var index = $scope.messages.indexOf(message); if (index > -1) { $scope.messages.splice(index, 1); } }; $scope.computeClasses = function (message) { return { 'alert-success': message.severity === 'success', 'alert-error': message.severity === 'error', 'alert-danger': message.severity === 'error', 'alert-info': message.severity === 'info', 'alert-warning': message.severity === 'warn' }; }; } ] }; } ]); angular.module('angular-growl').provider('growl', function () { 'use strict'; var _ttl = null, _enableHtml = false, _messagesKey = 'messages', _messageTextKey = 'text', _messageSeverityKey = 'severity', _onlyUniqueMessages = true; this.globalTimeToLive = function (ttl) { _ttl = ttl; }; this.globalEnableHtml = function (enableHtml) { _enableHtml = enableHtml; }; this.messagesKey = function (messagesKey) { _messagesKey = messagesKey; }; this.messageTextKey = function (messageTextKey) { _messageTextKey = messageTextKey; }; this.messageSeverityKey = function (messageSeverityKey) { _messageSeverityKey = messageSeverityKey; }; this.onlyUniqueMessages = function (onlyUniqueMessages) { _onlyUniqueMessages = onlyUniqueMessages; }; this.serverMessagesInterceptor = [ '$q', 'growl', function ($q, growl) { function checkResponse(response) { if (response.data[_messagesKey] && response.data[_messagesKey].length > 0) { growl.addServerMessages(response.data[_messagesKey]); } } function success(response) { checkResponse(response); return response; } function error(response) { checkResponse(response); return $q.reject(response); } return function (promise) { return promise.then(success, error); }; } ]; this.$get = [ '$rootScope', '$filter', function ($rootScope, $filter) { var translate; try { translate = $filter('translate'); } catch (e) { } function broadcastMessage(message) { if (translate) { message.text = translate(message.text); } $rootScope.$broadcast('growlMessage', message); } function sendMessage(text, config, severity) { var _config = config || {}, message; message = { text: text, severity: severity, ttl: _config.ttl || _ttl, enableHtml: _config.enableHtml || _enableHtml }; broadcastMessage(message); } function addWarnMessage(text, config) { sendMessage(text, config, 'warn'); } function addErrorMessage(text, config) { sendMessage(text, config, 'error'); } function addInfoMessage(text, config) { sendMessage(text, config, 'info'); } function addSuccessMessage(text, config) { sendMessage(text, config, 'success'); } function addServerMessages(messages) { var i, message, severity, length; length = messages.length; for (i = 0; i < length; i++) { message = messages[i]; if (message[_messageTextKey] && message[_messageSeverityKey]) { switch (message[_messageSeverityKey]) { case 'warn': severity = 'warn'; break; case 'success': severity = 'success'; break; case 'info': severity = 'info'; break; case 'error': severity = 'error'; break; } sendMessage(message[_messageTextKey], undefined, severity); } } } function onlyUnique() { return _onlyUniqueMessages; } return { addWarnMessage: addWarnMessage, addErrorMessage: addErrorMessage, addInfoMessage: addInfoMessage, addSuccessMessage: addSuccessMessage, addServerMessages: addServerMessages, onlyUnique: onlyUnique }; } ]; });