loader,用来加载需要的资源
就不多写了.总觉得这个东西很搓.
/*
loader,用来加载需要的资源
* */
var loader = {
"Version" : '20100809',
"path" : {
"js":"/js/",
"css":"/css/"
},
"stats" : {
"smoothbox":{
"js":"smoothbox",
"css":"smoothbox"
},
"form":{
"js":"form",
"css":""
},
"humanmessage":{
"js":"humanmessage",
"css":""
}
},
"fnList" : {},
"use" : function(name,callback){
if(this.getStats(name) == 'loaded'){
callback();
return;
}
this.fnList[name] = [];
this.fnList[name].push(callback);
this.load(name);
},
"setStats":function(name,type,stat){
this.stats[name][type] = stat;
},
"getStats":function(name){
if(this.stats[name]['js'] == 'loaded' && this.stats[name]['css'] == 'loaded'){
return 'loaded';
}
if(this.stats[name]['js'] == 'loading' || this.stats[name]['css'] == 'loading'){
return 'loading';
}
return this.stats[name]['js'] + ' + ' + this.stats[name]['css'];
},
"load":function(name){
if(this.getStats(name) == 'loading'){
return;
}
var _this = this;
var widget = this.stats[name];
var callback = function(){
if(_this.getStats(name) == 'loaded'){
var fnList = _this.fnList[name];
for(var i = 0 , len = fnList.length ; i < len ; i++ ){
fnList.shift()();
}
}
};
for(var i in widget){
if(widget[i] == ''){
this.setStats(name,i,'loaded');
}else{
var url = this.path[i]+widget[i]+'.'+i;
this.setStats(name,i,'loading');
_this['load'+i](url,(function(i){
return function(){
_this.setStats(name,i,'loaded');
callback();
}
})(i));
}
}
},
"loadjs":function(url,callback,context){
var oHead = context || document.getElementsByTagName('head')[0];
var oScript= document.createElement("script");
oScript.type = "text/javascript";
oScript.src = url+'?t='+this.Version+'.js';
oScript.onload = oScript.onreadystatechange = function(){
if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") {
callback();
}
};
oHead.appendChild(oScript);
},
"loadcss":function(url,callback){
var oHead = document.getElementsByTagName('head')[0];
var oCss = document.createElement('link');
oCss.href = url+'?t='+this.Version+'.css';
oCss.rel = 'stylesheet';
oCss.type = 'text/css';
if(!Browser.Engine.trident && callback){
callback();
}
if(Browser.Engine.trident && callback){
oCss.onreadystatechange = function(){
if (this.readyState == "loaded" || this.readyState == "complete") {
callback();
}
};
}
oHead.appendChild(oCss);
}
}
