/src/growlDirective.js

https://github.com/judmackrill/angular-growl · JavaScript · 67 lines · 59 code · 8 blank · 0 comment · 8 complexity · d19eff86d7c17cb6a7f485b2bee739eb MD5 · raw file

  1. angular.module("angular-growl").directive("growl", ["$rootScope", function ($rootScope) {
  2. "use strict";
  3. return {
  4. restrict: 'A',
  5. template: '<div class="growl">' +
  6. ' <div class="growl-item alert" ng-repeat="message in messages" ng-class="computeClasses(message)">' +
  7. ' <button type="button" class="close" ng-click="deleteMessage(message)">&times;</button>' +
  8. ' <div ng-switch="message.enableHtml">' +
  9. ' <div ng-switch-when="true" ng-bind-html="message.text"></div>' +
  10. ' <div ng-switch-default ng-bind="message.text"></div>' +
  11. ' </div>' +
  12. ' </div>' +
  13. '</div>',
  14. replace: false,
  15. scope: true,
  16. controller: ['$scope', '$timeout', 'growl', function ($scope, $timeout, growl) {
  17. var onlyUnique = growl.onlyUnique();
  18. $scope.messages = [];
  19. function addMessage(message) {
  20. $scope.messages.push(message);
  21. if (message.ttl && message.ttl !== -1) {
  22. $timeout(function () {
  23. $scope.deleteMessage(message);
  24. }, message.ttl);
  25. }
  26. }
  27. $rootScope.$on("growlMessage", function (event, message) {
  28. var found;
  29. if (onlyUnique) {
  30. angular.forEach($scope.messages, function(msg) {
  31. if (message.text === msg.text && message.severity === msg.severity) {
  32. found = true;
  33. }
  34. });
  35. if (!found) {
  36. addMessage(message);
  37. }
  38. } else {
  39. addMessage(message);
  40. }
  41. });
  42. $scope.deleteMessage = function (message) {
  43. var index = $scope.messages.indexOf(message);
  44. if (index > -1) {
  45. $scope.messages.splice(index, 1);
  46. }
  47. };
  48. $scope.computeClasses = function (message) {
  49. return {
  50. 'alert-success': message.severity === "success",
  51. 'alert-error': message.severity === "error", //bootstrap 2.3
  52. 'alert-danger': message.severity === "error", //bootstrap 3
  53. 'alert-info': message.severity === "info",
  54. 'alert-warning': message.severity === "warn" //bootstrap 3, no effect in bs 2.3
  55. };
  56. };
  57. }]
  58. };
  59. }]);