drupal-civicrm/sites/all/modules/civicrm/js/angular-crmResource/all.js
2018-01-14 13:10:16 +00:00

89 lines
2.5 KiB
JavaScript

// crmResource: Given a templateUrl "~/mymodule/myfile.html", load the matching HTML.
// This implementation loads all partials and strings in one batch.
(function(angular, $, _) {
angular.module('crmResource', []);
angular.module('crmResource').factory('crmResource', function($q, $http) {
var deferreds = {}; // null|object; deferreds[url][idx] = Deferred;
var templates = null; // null|object; templates[url] = HTML;
var notify = function notify() {
var oldDfrds = deferreds;
deferreds = null;
angular.forEach(oldDfrds, function(dfrs, url) {
if (templates[url]) {
angular.forEach(dfrs, function(dfr) {
dfr.resolve({
status: 200,
headers: function(name) {
var headers = {'Content-type': 'text/html'};
return name ? headers[name] : headers;
},
data: templates[url]
});
});
}
else {
angular.forEach(dfrs, function(dfr) {
dfr.reject({status: 500}); // FIXME
});
}
});
};
var moduleUrl = CRM.angular.bundleUrl;
$http.get(moduleUrl)
.success(function httpSuccess(data) {
templates = [];
angular.forEach(data, function(module) {
if (module.partials) {
angular.extend(templates, module.partials);
}
if (module.strings) {
CRM.addStrings(module.domain, module.strings);
}
});
notify();
})
.error(function httpError() {
templates = [];
notify();
});
return {
// @return string|Promise<string>
getUrl: function getUrl(url) {
if (templates !== null) {
return templates[url];
}
else {
var deferred = $q.defer();
if (!deferreds[url]) {
deferreds[url] = [];
}
deferreds[url].push(deferred);
return deferred.promise;
}
}
};
});
angular.module('crmResource').config(function($provide) {
$provide.decorator('$templateCache', function($delegate, $http, $q, crmResource) {
var origGet = $delegate.get;
var urlPat = /^~\//;
$delegate.get = function(url) {
if (urlPat.test(url)) {
return crmResource.getUrl(url);
}
else {
return origGet.call(this, url);
}
};
return $delegate;
});
});
})(angular, CRM.$, CRM._);