45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
|
/** @license
|
||
|
* RequireJS plugin for async dependency load like JSONP and Google Maps
|
||
|
* Author: Miller Medeiros
|
||
|
* Version: 0.1.1 (2011/11/17)
|
||
|
* Released under the MIT license
|
||
|
*/
|
||
|
define(function(){
|
||
|
|
||
|
var DEFAULT_PARAM_NAME = 'callback',
|
||
|
_uid = 0;
|
||
|
|
||
|
function injectScript(src){
|
||
|
var s, t;
|
||
|
s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = src;
|
||
|
t = document.getElementsByTagName('script')[0]; t.parentNode.insertBefore(s,t);
|
||
|
}
|
||
|
|
||
|
function formatUrl(name, id){
|
||
|
var paramRegex = /!(.+)/,
|
||
|
url = name.replace(paramRegex, ''),
|
||
|
param = (paramRegex.test(name))? name.replace(/.+!/, '') : DEFAULT_PARAM_NAME;
|
||
|
url += (url.indexOf('?') < 0)? '?' : '&';
|
||
|
return url + param +'='+ id;
|
||
|
}
|
||
|
|
||
|
function uid() {
|
||
|
_uid += 1;
|
||
|
return '__async_req_'+ _uid +'__';
|
||
|
}
|
||
|
|
||
|
return{
|
||
|
load : function(name, req, onLoad, config){
|
||
|
if(config.isBuild){
|
||
|
onLoad(null); //avoid errors on the optimizer
|
||
|
}else{
|
||
|
var id = uid();
|
||
|
//create a global variable that stores onLoad so callback
|
||
|
//function can define new module after async load
|
||
|
window[id] = onLoad;
|
||
|
injectScript(formatUrl(name, id));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
});
|