(function(){ var window = this // logging Shim from HTML5 Boilerplate window.log = function() { log.history = log.history || []; // store logs to an array for reference log.history.push(arguments); if (this.console) { arguments.callee = arguments.callee.caller; var newarr = [].slice.call(arguments); (typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr)); } }; // make it safe to use console.log always (function(b) { function c() { } for (var d = "assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","), a; a = d.pop(); ) { b[a] = b[a] || c } })((function() {try { console.log(); return window.console; } catch (err) {return window.console = {};}})()); // curl.js text! plugin define('text', function () { var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], // collection of modules that have been written to the built file built = {}; function xhr () { if (typeof XMLHttpRequest !== "undefined") { // rewrite the getXhr method to always return the native implementation xhr = function () { return new XMLHttpRequest(); }; } else { // keep trying progIds until we find the correct one, then rewrite the getXhr method // to always return that one. var noXhr = xhr = function () { throw new Error("getXhr(): XMLHttpRequest not available"); }; while (progIds.length > 0 && xhr === noXhr) (function (id) { try { new ActiveXObject(id); xhr = function () { return new ActiveXObject(id); }; } catch (ex) {} }(progIds.shift())); } return xhr(); } function fetchText (url, callback, errback) { var x = xhr(); x.open('GET', url, true); x.onreadystatechange = function (e) { if (x.readyState === 4) { if (x.status < 400) { callback(x.responseText); } else { errback(new Error('fetchText() failed. status: ' + x.statusText)); } } }; x.send(null); } function nameWithExt (name, defaultExt) { return name.lastIndexOf('.') <= name.lastIndexOf('/') ? name + '.' + defaultExt : name; } function error (ex) { if (console) { console.error ? console.error(ex) : console.log(ex.message); } } function jsEncode (text) { // TODO: hoist the map and regex to the enclosing scope for better performance var map = { 34: '\\"', 13: '\\r', 12: '\\f', 10: '\\n', 9: '\\t', 8: '\\b' }; return text.replace(/(["\n\f\t\r\b])/g, function (c) { return map[c.charCodeAt(0)]; }); } return { load: function (resourceName, req, callback, config) { // remove suffixes (future) // hook up callbacks var cb = callback.resolve || callback, eb = callback.reject || error; // get the text fetchText(req['toUrl'](resourceName), cb, eb); }, build: function (writer, fetcher, config) { // writer is a function used to output to the built file // fetcher is a function used to fetch a text file // config is the global config // returns a function that the build tool can use to tell this // plugin to write-out a resource return function write (pluginId, resource, resolver) { var url, absId, text, output; url = resolver['toUrl'](nameWithExt(resource, 'html')); absId = resolver['toAbsMid'](resource); if (!(absId in built)) { built[absId] = true; // fetch text text = jsEncode(fetcher(url)); // write out a define output = 'define("' + pluginId + '!' + absId + '", function () {\n' + '\treturn "' + text + '";\n' + '});\n'; writer(output) } } } } }) }).call(typeof window !== 'undefined'? window : this)