wise-web-client
Version:
Based on Spine MVC framework
72 lines (65 loc) • 2.71 kB
JavaScript
/** @license
* RequireJS plugin for loading JSON files
* - depends on Text plugin and it was HEAVILY "inspired" by it as well.
* Author: Miller Medeiros
* Version: 0.4.0 (2014/04/10)
* Released under the MIT license
*/
define(['text'], function(text) {
var CACHE_BUST_QUERY_PARAM = 'bust',
CACHE_BUST_FLAG = '!bust',
jsonParse = (typeof JSON !== 'undefined' && typeof JSON.parse === 'function') ? JSON.parse : function(val) {
return eval('(' + val + ')'); //quick and dirty
},
buildMap = {};
function cacheBust(url) {
url = url.replace(CACHE_BUST_FLAG, '');
url += (url.indexOf('?') < 0) ? '?' : '&';
return url + CACHE_BUST_QUERY_PARAM + '=' + Math.round(2147483647 * Math.random());
}
//API
return {
load: function(name, req, onLoad, config) {
if ((config.isBuild && (config.inlineJSON === false || name.indexOf(CACHE_BUST_QUERY_PARAM + '=') !== -1)) || (req.toUrl(name).indexOf('empty:') === 0)) {
//avoid inlining cache busted JSON or if inlineJSON:false
//and don't inline files marked as empty!
onLoad(null);
} else {
text.get(req.toUrl(name), function(data) {
var parsed;
if (config.isBuild) {
buildMap[name] = data;
onLoad(data);
} else {
try {
parsed = jsonParse(data);
} catch (e) {
onLoad.error(e);
}
onLoad(parsed);
}
},
onLoad.error, {
accept: 'application/json'
}
);
}
},
normalize: function(name, normalize) {
// used normalize to avoid caching references to a "cache busted" request
if (name.indexOf(CACHE_BUST_FLAG) !== -1) {
name = cacheBust(name);
}
// resolve any relative paths
return normalize(name);
},
//write method based on RequireJS official text plugin by James Burke
//https://github.com/jrburke/requirejs/blob/master/text.js
write: function(pluginName, moduleName, write) {
if (moduleName in buildMap) {
var content = buildMap[moduleName];
write('define("' + pluginName + '!' + moduleName + '", function(){ return ' + content + ';});\n');
}
}
};
});