summaryrefslogtreecommitdiff
path: root/lib/dojo/lib/plugins/text.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/lib/plugins/text.js')
-rw-r--r--lib/dojo/lib/plugins/text.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/dojo/lib/plugins/text.js b/lib/dojo/lib/plugins/text.js
new file mode 100644
index 000000000..75894a32a
--- /dev/null
+++ b/lib/dojo/lib/plugins/text.js
@@ -0,0 +1,70 @@
+/*
+ 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);
+ }
+ };
+});