86 lines
1.7 KiB
JavaScript
86 lines
1.7 KiB
JavaScript
|
define("dojo/request/registry", [
|
||
|
'require',
|
||
|
'../_base/array',
|
||
|
'./default!platform',
|
||
|
'./util'
|
||
|
], function(require, array, fallbackProvider, util){
|
||
|
var providers = [];
|
||
|
|
||
|
function request(url, options){
|
||
|
var matchers = providers.slice(0),
|
||
|
i = 0,
|
||
|
matcher;
|
||
|
|
||
|
while(matcher=matchers[i++]){
|
||
|
if(matcher(url, options)){
|
||
|
return matcher.request.call(null, url, options);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return fallbackProvider.apply(null, arguments);
|
||
|
}
|
||
|
|
||
|
function createMatcher(match, provider){
|
||
|
var matcher;
|
||
|
|
||
|
if(provider){
|
||
|
if(match.test){
|
||
|
// RegExp
|
||
|
matcher = function(url){
|
||
|
return match.test(url);
|
||
|
};
|
||
|
}else if(match.apply && match.call){
|
||
|
matcher = function(){
|
||
|
return match.apply(null, arguments);
|
||
|
};
|
||
|
}else{
|
||
|
matcher = function(url){
|
||
|
return url === match;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
matcher.request = provider;
|
||
|
}else{
|
||
|
// If only one argument was passed, assume it is a provider function
|
||
|
// to apply unconditionally to all URLs
|
||
|
matcher = function(){
|
||
|
return true;
|
||
|
};
|
||
|
|
||
|
matcher.request = match;
|
||
|
}
|
||
|
|
||
|
return matcher;
|
||
|
}
|
||
|
|
||
|
request.register = function(url, provider, first){
|
||
|
var matcher = createMatcher(url, provider);
|
||
|
providers[(first ? 'unshift' : 'push')](matcher);
|
||
|
|
||
|
return {
|
||
|
remove: function(){
|
||
|
var idx;
|
||
|
if(~(idx = array.indexOf(providers, matcher))){
|
||
|
providers.splice(idx, 1);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
request.load = function(id, parentRequire, loaded, config){
|
||
|
if(id){
|
||
|
// if there's an id, load and set the fallback provider
|
||
|
require([id], function(fallback){
|
||
|
fallbackProvider = fallback;
|
||
|
loaded(request);
|
||
|
});
|
||
|
}else{
|
||
|
loaded(request);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
util.addCommonMethods(request);
|
||
|
|
||
|
return request;
|
||
|
});
|