123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- '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: #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;
- };
- }]);
|