lib.resources.js 1.9 KB
lib.resources=new function(){
	this.registry={};
	this.resourceNames={};
	
	this.getUrl=function(url,evtName,boundTo,cacheTimeout){
		var rid=lib.utils.SHA1(url);
		if(this.registry[rid]!=undefined){
			var resource=this.registry[rid];
			this._fireDataEvent(evtName,resource);
		}else{
			$.get(url,{},(function(id,evtName){
				return function(data,textStatus){
					events.trigger('LIB.RESOURCES:Resource_Fetched',{data:data,status:textStatus});
					lib.resources._setResource(id,data,evtName);
				}
			})(rid,evtName),'text');
		}
	}

	this._fireDataEvent=function(evtName,resource){
		if(typeof(evtName)=='function'){
			evtName(resource.data); 
		}else{
			events.trigger(evtName,{data:resource.data});
		}
	}
	
	this._setResource=function(id,data,evtName){
		if(this.registry[id]==undefined)this.registry[id]={};
		data=(new DOMParser()).parseFromString(data, "text/xml");
		this.registry[id].data=data;
		this._fireDataEvent(evtName,this.registry[id]);
	}
	
	this.resourceLoaded=function(url){
		var rid=lib.utils.SHA1(url);
		return this.registry[rid]!=undefined;
	}
	
	this.getResourceFromUrl=function(url){
		var rid=lib.utils.SHA1(url);
		if(this.registry[rid]!=undefined)return this.registry[rid];
		return undefined
	}
	
	this.getResource=function(resourceName){
		if(this.resourceNames[resourceName]!=undefined)return this.getUrl(this.resourceNames[resourceName]);
		return null;
	}
	
	this.setResourceUrl=function(resourceName,url){
		this.resourceNames[resourceName]=url;
	}
	
	this.getResourceUrl=function(resourceName){
		if(this.resourceNames[resourceName]!=undefined)return this.resourceNames[resourceName];
		return null;
	}
	
	this.clearResourceCache=function(id){
		if(id!=undefined){
			if(this.registry[id]!=undefined)delete(this.registry[id]);
			events.trigger('LIB.RESOURCES:Resource_Cache_Cleared['+id+']');
		}else{
			this.registry={};
			events.trigger('LIB.RESOURCES:Resource_Cache_Cleared[ALL]');
		}
	}
}