scriptjs
Version:
Asyncronous JavaScript loader and dependency manager
4 lines • 4.43 kB
JavaScript
/*! LAB.js (LABjs :: Loading And Blocking JavaScript)
v1.2.0 (c) Kyle Simpson
MIT License
*/(function(a){function U(a){var b,e={},f={UseCachePreload:"cache",UseLocalXHR:"xhr",UsePreloading:j,AlwaysPreserveOrder:n,AllowDuplicates:"dupe"},g={AppendTo:m,BasePath:"base"};for(b in f)g[b]=f[b];e.order=!!O.order;for(b in g)g[q](b)&&O[g[b]]!=v&&(e[g[b]]=a[b]!=v?a[b]:O[g[b]]);for(b in f)f[q](b)&&(e[f[b]]=!!e[f[b]]);e[j]||(e.cache=e.order=e.xhr=x),e.which=e.which===c||e.which===d?e.which:c;return e}function T(d,s){function bk(a){var b=[],c;for(c=-1;++c<a.length;)E.call(a[c])===u?b=b.concat(bk(a[c])):b[b.length]=a[c];return b}function bj(a){d&&!I&&Z.push(a),(!d||z)&&a()}function bi(a){if(typeof a!="undefined"&&!!a){a.allowDup==v&&(a.allowDup=s.dupe);var c=a.src,d=a.type,e=a.charset,f=a.allowDup,h=Q(c,M),j,k=R(h);typeof e!=b&&(e=v),f=!!f;if(!f&&(H[h]!=v||X&&Y[h]||S(h))){Y[h]!=v&&Y[h][g]&&!Y[h][l]&&k&&ba(v,Y[h],w);return}Y[h]==v&&(Y[h]={}),j=Y[h],j[m]==v&&(j[m]=L),j[l]=x,j[i]=h,V=w,!I&&J&&k?bh(j,h,d,e):!I&&D?bg(j,h,d,e):bf(j,h,d,e)}}function bh(b,c,d,e){var f=arguments,j;X&&b[g]==v?(b[g]=x,j=b.xhr=A?new A("Microsoft.XMLHTTP"):new a.XMLHttpRequest,j[o]=function(){bd(j,b)},j.open("GET",c),j.send("")):!X&&b[g]!=v&&!b[g]?b[h]=function(){bh.apply(v,f)}:X||(H[b[i]]=w,be(b,c,d,e,v,b.xhr.responseText),b.xhr=v)}function bg(a,b,c,d){var e=arguments;X&&a[g]==v?(a[g]=x,be(a,b,r,d,bc)):!X&&a[g]!=v&&!a[g]?a[h]=function(){bg.apply(v,e)}:X||bf.apply(v,e)}function bf(a,b,c,d){H[a[i]]=w,be(a,b,c,d,ba)}function be(a,d,f,g,h,i){var j=a[m];B(function(){if("item"in G[j]){if(!G[j][0]){B(arguments.callee,25);return}G[j]=G[j][0]}var k=y.createElement(e);typeof f==b&&(k.type=f),typeof g==b&&(k.charset=g),P(h)&&(k[p]=k[o]=function(){h(k,a)},k.src=d,N&&(k.async=x)),G[j].insertBefore(k,j===c?G[j].firstChild:v),typeof i==b&&(k.text=i,ba(k,a,w))},0)}function bd(a,b){a[f]===4&&(a[o]=F,b[g]=w,B(function(){bb(b)},0))}function bc(a,b){!_(a,b)||(b[g]=w,B(function(){G[b[m]].removeChild(a),bb(b)},0))}function bb(a){P(a[h])&&(a[h](),a[h]=v)}function ba(a,b,c){c=!!c;if(!!c||!!_(a,b)){b[l]=w;for(var d in Y)if(Y[q](d)&&!Y[d][l])return;t=w,U()}}function _(a,b){if(a[f]&&a[f]!==k&&a[f]!=="loaded"||b[l])return x;a[p]=a[o]=v;return w}d=!!d,s==v&&(s=O);var t=x,z=d&&s[j],D=z&&s.cache,I=z&&s.order,J=z&&s.xhr,K=s[n],L=s.which,M=s.base,U=F,V=x,W,X=w,Y={},Z=[],$=v;z=D||J||I,W={script:function(){C($);var a=bk(arguments),c=W,d;if(K)for(d=-1;++d<a.length;)P(a[d])&&(a[d]=a[d]()),d===0?bj(function(){bi(typeof a[0]==b?{src:a[0]}:a[0])}):c=c.script(a[d]),c=c.wait();else{for(d=-1;++d<a.length;)P(a[d])&&(a[d]=a[d]());bj(function(){for(d=-1;++d<a.length;)bi(typeof a[d]==b?{src:a[d]}:a[d])})}$=B(function(){X=x},5);return c},wait:function(a){C($),X=x,P(a)||(a=F);var b=T(d||V,s),c=b.trigger,e=function(){try{a()}catch(b){}c()};delete b.trigger;var f=function(){V&&!t?U=e:e()};d&&!V?Z.push(f):bj(f);return b}},d?W.trigger=function(){var a,b=-1;while(a=Z[++b])a();Z=[]}:W.trigger=F;return W}function S(a){var c,d=-1;while(c=K[++d])if(typeof c.src==b&&a===Q(c.src)&&c.type!==r)return w;return x}function R(a){return Q(a).indexOf(J)===0}function Q(a,c){var d=/^\w+\:\/\//,e;typeof a!=b&&(a=""),typeof c!=b&&(c=""),e=(/^\/\//.test(a)?z.protocol:"")+a,e=(d.test(e)?"":c)+e;return(d.test(e)?"":e.charAt(0)==="/"?J:I)+e}function P(a){return E.call(a)===t}var b="string",c="head",d="body",e="script",f="readyState",g="preloaddone",h="loadtrigger",i="srcuri",j="preload",k="complete",l="done",m="which",n="preserve",o="onreadystatechange",p="onload",q="hasOwnProperty",r="script/cache",s="[object ",t=s+"Function]",u=s+"Array]",v=null,w=!0,x=!1,y=a.document,z=a.location,A=a.ActiveXObject,B=a.setTimeout,C=a.clearTimeout,D=function(a){return y.getElementsByTagName(a)},E=Object.prototype.toString,F=function(){},G={},H={},I=/^[^?#]*\//.exec(z.href)[0],J=/^\w+\:\/\/\/?[^\/]+/.exec(I)[0],K=D(e),L=a.opera&&E.call(a.opera)==s+"Opera]",M="MozAppearance"in y.documentElement.style,N=y.createElement(e).async===!0,O={cache:!M&&!L,order:M||L||N,xhr:w,dupe:w,base:"",which:c};O[n]=x,O[j]=w,G[c]=y.head||D(c),G[d]=D(d),a.$LAB={setGlobalDefaults:function(a){O=U(a)},setOptions:function(a){return T(x,U(a))},script:function(){return T().script.apply(v,arguments)},wait:function(){return T().wait.apply(v,arguments)}},function(a,b,c){y[f]==v&&y[a]&&(y[f]="loading",y[a](b,c=function(){y.removeEventListener(b,c,x),y[f]=k},x))}("addEventListener","DOMContentLoaded")})(window)