/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//
// dojo text! plugin
//
// We choose to include our own plugin in hopes of leveraging functionality already contained in dojo
// and thereby reducing the size of the plugin compared to various loader implementations. Naturally, this
// allows AMD loaders to be used without their plugins.
// CAUTION, this module may return improper results if the AMD loader does not support toAbsMid and client
// code passes relative plugin resource module ids. In that case, you should consider using the text! plugin
// that comes with your loader.
define(["dojo", "dojo/cache"], function(dojo){
var
cached= {},
cache= function(cacheId, url, value){
cached[cacheId]= value;
dojo.cache({toString:function(){return url;}}, value);
},
strip= function(text){
//note: this function courtesy of James Burke (https://github.com/jrburke/requirejs)
//Strips <?xml ...?> declarations so that external SVG and XML
//documents can be added to a document without worry. Also, if the string
//is an HTML document, only the part inside the body tag is returned.
if(text){
text= text.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
var matches= text.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
if(matches){
text= matches[1];
}
}else{
text = "";
}
return text;
};
return {
load:function(id, require, load){
var match, cacheId, url, parts= id.split("!");
if(require.toAbsMid){
match= parts[0].match(/(.+)(\.[^\/]*)$/);
cacheId= match ? require.toAbsMid(match[1]) + match[2] : require.toAbsMid(parts[0]);
if(cacheId in cached){
load(parts[1]=="strip" ? strip(cached[cacheId]) : cached[cacheId]);
return;
}
}
url= require.toUrl(parts[0]);
dojo.xhrGet({
url:url,
load:function(text){
cacheId && cache(cacheId, url, text);
load(parts[1]=="strip" ? strip(text) : text);
}
});
},
cache:function(cacheId, mid, type, value) {
cache(cacheId, require.nameToUrl(mid) + type, value);
}
};
});