Guest User

Untitled

a guest
Nov 20th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. (function(angular) {
  2.  
  3. // Define module.
  4. var module = angular.module('bootstrapModal', []);
  5.  
  6. // Define service.
  7. module.service('$bootstrapModal', ['$q', '$templateRequest', '$rootScope', '$compile', '$controller', function($q, $templateRequest, $rootScope, $compile, $controller) {
  8.  
  9. var self = this, $element, closedDeferred;
  10.  
  11. // Gets template or template URL.
  12. var getTemplate = function(template, templateUrl) {
  13. var deferred = $q.defer();
  14.  
  15. // Template string.
  16. if (template) {
  17. deferred.resolve(template);
  18. }
  19.  
  20. // Template URL.
  21. else if (templateUrl) {
  22. $templateRequest(templateUrl, true).then(function(template) {
  23. deferred.resolve(template);
  24. }, function(error) {
  25. deferred.reject(error);
  26. });
  27. }
  28.  
  29. // No template specified.
  30. else {
  31. deferred.reject('No modal template or templateUrl was specified.');
  32. }
  33.  
  34. return deferred.promise;
  35. };
  36.  
  37. // Closes modal.
  38. self.close = function() {
  39. closedDeferred = closedDeferred || $q.defer();
  40.  
  41. if ($element) {
  42. $element.modal('hide');
  43. }
  44. else {
  45. closedDeferred.resolve();
  46. }
  47.  
  48. return closedDeferred.promise;
  49. };
  50.  
  51. // Opens modal.
  52. self.open = function(options) {
  53. var deferred = $q.defer();
  54.  
  55. // Close open modal.
  56. this.close().catch(function(error) {
  57. deferred.reject(error);
  58. })
  59.  
  60. // Get template.
  61. .then(function() {
  62. return getTemplate(options.template, options.templateUrl).catch(function(error) {
  63. deferred.reject(error);
  64. });
  65. })
  66.  
  67. // Open modal.
  68. .then(function(template) {
  69. // Create scope with special $close() method.
  70. var scope = (options.scope || $rootScope).$new();
  71. angular.extend(scope, {$close: self.close}, options.data);
  72.  
  73. // Bind template to scope.
  74. var element = $compile(template)(scope);
  75.  
  76. // Create controller.
  77. element.controller = $controller(options.controller, {
  78. $scope: scope
  79. });
  80.  
  81. // Create closed deferred.
  82. closedDeferred = $q.defer();
  83.  
  84. // Append modal element to body.
  85. $element = $(element).appendTo('body')
  86.  
  87. // Modal is shown.
  88. .on('shown.bs.modal', function() {
  89. // Autofocus support.
  90. angular.forEach($element.find('input,button,select,textarea'), function(input) {
  91. if (input.attributes.getNamedItem('autofocus')) {
  92. input.focus();
  93. }
  94. });
  95.  
  96. // Resolve deferred and include closed deferred.
  97. deferred.resolve(angular.extend({}, self, {
  98. closed: closedDeferred.promise
  99. }));
  100. })
  101.  
  102. // Modal is closed.
  103. .on('hidden.bs.modal', function() {
  104. $element.remove();
  105. $element = null;
  106. closedDeferred.resolve();
  107. })
  108.  
  109. // Show modal.
  110. .modal();
  111. });
  112.  
  113. return deferred.promise;
  114. };
  115.  
  116. }]);
  117.  
  118. }(angular));
Add Comment
Please, Sign In to add comment