(angular => {
|
'use strict';
|
|
angular.module('oc.lazyLoad').config(function($provide) {
|
$provide.decorator('$ocLazyLoad', function ($delegate, $templateCache, $q, $http) {
|
/**
|
* templatesLoader function
|
* @type Function
|
* @param paths array list of css files to load
|
* @param callback to call when everything is loaded. We use a callback and not a promise
|
* @param params object config parameters for $http
|
* because the user can overwrite templatesLoader and it will probably not use promises :(
|
*/
|
$delegate.templatesLoader = function(paths, callback, params) {
|
var promises = [],
|
filesCache = $delegate._getFilesCache();
|
|
angular.forEach(paths, url => {
|
var deferred = $q.defer();
|
promises.push(deferred.promise);
|
$http.get(url, params).success(data => {
|
if(angular.isString(data) && data.length > 0) {
|
angular.forEach(angular.element(data), node => {
|
if(node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') {
|
$templateCache.put(node.id, node.innerHTML);
|
}
|
});
|
}
|
if(angular.isUndefined(filesCache.get(url))) {
|
filesCache.put(url, true);
|
}
|
deferred.resolve();
|
}).error(function(err) {
|
deferred.reject(new Error(`Unable to load template file "${ url }": ${ err }`));
|
});
|
});
|
return $q.all(promises).then(() => {
|
callback();
|
}, err => {
|
callback(err);
|
});
|
};
|
$delegate.templatesLoader.ocLazyLoadLoader = true;
|
|
return $delegate;
|
})
|
});
|
|
})(angular);
|