crmUiAlert - Add wrapper for embedding Angular content in an alert.
authorTim Otten <totten@civicrm.org>
Thu, 12 Feb 2015 19:41:19 +0000 (11:41 -0800)
committerTim Otten <totten@civicrm.org>
Thu, 12 Feb 2015 20:01:50 +0000 (12:01 -0800)
js/angular-crm-ui.js

index 0527396f20eea3caec488994ec66c7a4a2c6e0a5..436b6e2c42acc5f0734c30d25d3c04092620ce77 100644 (file)
       };
     })
 
+    // Examples:
+    //   crmUiAlert({text: 'My text', title: 'My title', type: 'error'});
+    //   crmUiAlert({template: '<a ng-click="ok()">Hello</a>', scope: $scope.$new()});
+    //   var h = crmUiAlert({templateUrl: '~/crmFoo/alert.html', scope: $scope.$new()});
+    //   ... h.close(); ...
+    .service('crmUiAlert', function($compile, $rootScope, $templateRequest, $q) {
+      var count = 0;
+      return function crmUiAlert(params) {
+        var id = 'crmUiAlert_' + (++count);
+        var tpl = null;
+        if (params.templateUrl) {
+          tpl = $templateRequest(params.templateUrl);
+        }
+        else if (params.template) {
+          tpl = params.template;
+        }
+        if (tpl) {
+          params.text = '<div id="' + id + '"></div>'; // temporary stub
+        }
+        var result = CRM.alert(params.text, params.title, params.type, params.options);
+        if (tpl) {
+          $q.when(tpl, function(html) {
+            var scope = params.scope || $rootScope.$new();
+            var linker = $compile(html);
+            $('#' + id).append($(linker(scope)));
+          });
+        }
+        return result;
+      };
+    })
+
     // Display a date widget.
     // example: <input crm-ui-date ng-model="myobj.datefield" />
     // example: <input crm-ui-date ng-model="myobj.datefield" crm-ui-date-format="yy-mm-dd" />