Skip to content

Instantly share code, notes, and snippets.

@miyamotodev123
Created January 26, 2016 23:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miyamotodev123/1ac82c177b046dadc37a to your computer and use it in GitHub Desktop.
Save miyamotodev123/1ac82c177b046dadc37a to your computer and use it in GitHub Desktop.
(function() {
/**
* 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: '<div class="growl">' + '\t<div class="growl-item alert" ng-repeat="message in messages" ng-class="computeClasses(message)">' + '\t\t<button type="button" class="close" ng-click="deleteMessage(message)">&times;</button>' + ' <div ng-switch="message.enableHtml">' + ' <div ng-switch-when="true" ng-bind-html="message.text"></div>' + ' <div ng-switch-default ng-bind="message.text"></div>' + ' </div>' + '\t</div>' + '</div>',
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
};
}
];
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment