ui-load.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * 0.1.0
  3. * Deferred load js/css file, used for ui-jq.js and Lazy Loading.
  4. *
  5. * @ flatfull.com All Rights Reserved.
  6. * Author url: http://themeforest.net/user/flatfull
  7. */
  8. var uiLoad = uiLoad || {};
  9. (function($, $document, uiLoad) {
  10. "use strict";
  11. var loaded = [],
  12. promise = false,
  13. deferred = $.Deferred();
  14. /**
  15. * Chain loads the given sources
  16. * @param srcs array, script or css
  17. * @returns {*} Promise that will be resolved once the sources has been loaded.
  18. */
  19. uiLoad.load = function (srcs) {
  20. srcs = $.isArray(srcs) ? srcs : srcs.split(/\s+/);
  21. if(!promise){
  22. promise = deferred.promise();
  23. }
  24. $.each(srcs, function(index, src) {
  25. promise = promise.then( function(){
  26. return src.indexOf('.css') >=0 ? loadCSS(src) : loadScript(src);
  27. } );
  28. });
  29. deferred.resolve();
  30. return promise;
  31. };
  32. /**
  33. * Dynamically loads the given script
  34. * @param src The url of the script to load dynamically
  35. * @returns {*} Promise that will be resolved once the script has been loaded.
  36. */
  37. var loadScript = function (src) {
  38. if(loaded[src]) return loaded[src].promise();
  39. var deferred = $.Deferred();
  40. var script = $document.createElement('script');
  41. script.src = src;
  42. script.onload = function (e) {
  43. deferred.resolve(e);
  44. };
  45. script.onerror = function (e) {
  46. deferred.reject(e);
  47. };
  48. $document.body.appendChild(script);
  49. loaded[src] = deferred;
  50. return deferred.promise();
  51. };
  52. /**
  53. * Dynamically loads the given CSS file
  54. * @param href The url of the CSS to load dynamically
  55. * @returns {*} Promise that will be resolved once the CSS file has been loaded.
  56. */
  57. var loadCSS = function (href) {
  58. if(loaded[href]) return loaded[href].promise();
  59. var deferred = $.Deferred();
  60. var style = $document.createElement('link');
  61. style.rel = 'stylesheet';
  62. style.type = 'text/css';
  63. style.href = href;
  64. style.onload = function (e) {
  65. deferred.resolve(e);
  66. };
  67. style.onerror = function (e) {
  68. deferred.reject(e);
  69. };
  70. $document.head.appendChild(style);
  71. loaded[href] = deferred;
  72. return deferred.promise();
  73. }
  74. })(jQuery, document, uiLoad);