File: /home/barbeatleanalyti/public_html/mbaris.beatleanalytics.com/assets/js/services/ui-load.js
'use strict';
/**
* 0.1.1
* Deferred load js/css file, used for ui-jq.js and Lazy Loading.
*
* @ flatfull.com All Rights Reserved.
* Author url: http://themeforest.net/user/flatfull
*/
angular.module('ui.load', [])
.service('uiLoad', ['$document', '$q', '$timeout', function ($document, $q, $timeout) {
var loaded = [];
var promise = false;
var deferred = $q.defer();
/**
* Chain loads the given sources
* @param srcs array, script or css
* @returns {*} Promise that will be resolved once the sources has been loaded.
*/
this.load = function (srcs) {
srcs = angular.isArray(srcs) ? srcs : srcs.split(/\s+/);
var self = this;
if(!promise){
promise = deferred.promise;
}
angular.forEach(srcs, function(src) {
promise = promise.then( function(){
return src.indexOf('.css') >=0 ? self.loadCSS(src) : self.loadScript(src);
} );
});
deferred.resolve();
return promise;
}
/**
* Dynamically loads the given script
* @param src The url of the script to load dynamically
* @returns {*} Promise that will be resolved once the script has been loaded.
*/
this.loadScript = function (src) {
if(loaded[src]) return loaded[src].promise;
var deferred = $q.defer();
var script = $document[0].createElement('script');
script.src = src;
script.onload = function (e) {
$timeout(function () {
deferred.resolve(e);
});
};
script.onerror = function (e) {
$timeout(function () {
deferred.reject(e);
});
};
$document[0].body.appendChild(script);
loaded[src] = deferred;
return deferred.promise;
};
/**
* Dynamically loads the given CSS file
* @param href The url of the CSS to load dynamically
* @returns {*} Promise that will be resolved once the CSS file has been loaded.
*/
this.loadCSS = function (href) {
if(loaded[href]) return loaded[href].promise;
var deferred = $q.defer();
var style = $document[0].createElement('link');
style.rel = 'stylesheet';
style.type = 'text/css';
style.href = href;
style.onload = function (e) {
$timeout(function () {
deferred.resolve(e);
});
};
style.onerror = function (e) {
$timeout(function () {
deferred.reject(e);
});
};
$document[0].head.appendChild(style);
loaded[href] = deferred;
return deferred.promise;
};
}]);