]> git.wh0rd.org Git - tt-rss.git/blob - lib/dojo/request/registry.js.uncompressed.js
upgrade dojo to 1.8.3 (refs #570)
[tt-rss.git] / lib / dojo / request / registry.js.uncompressed.js
1 define("dojo/request/registry", [
2         'require',
3         '../_base/array',
4         './default!platform',
5         './util'
6 ], function(require, array, fallbackProvider, util){
7         var providers = [];
8
9         function request(url, options){
10                 var matchers = providers.slice(0),
11                         i = 0,
12                         matcher;
13
14                 while(matcher=matchers[i++]){
15                         if(matcher(url, options)){
16                                 return matcher.request.call(null, url, options);
17                         }
18                 }
19
20                 return fallbackProvider.apply(null, arguments);
21         }
22
23         function createMatcher(match, provider){
24                 var matcher;
25
26                 if(provider){
27                         if(match.test){
28                                 // RegExp
29                                 matcher = function(url){
30                                         return match.test(url);
31                                 };
32                         }else if(match.apply && match.call){
33                                 matcher = function(){
34                                         return match.apply(null, arguments);
35                                 };
36                         }else{
37                                 matcher = function(url){
38                                         return url === match;
39                                 };
40                         }
41
42                         matcher.request = provider;
43                 }else{
44                         // If only one argument was passed, assume it is a provider function
45                         // to apply unconditionally to all URLs
46                         matcher = function(){
47                                 return true;
48                         };
49
50                         matcher.request = match;
51                 }
52
53                 return matcher;
54         }
55
56         request.register = function(url, provider, first){
57                 var matcher = createMatcher(url, provider);
58                 providers[(first ? 'unshift' : 'push')](matcher);
59
60                 return {
61                         remove: function(){
62                                 var idx;
63                                 if(~(idx = array.indexOf(providers, matcher))){
64                                         providers.splice(idx, 1);
65                                 }
66                         }
67                 };
68         };
69
70         request.load = function(id, parentRequire, loaded, config){
71                 if(id){
72                         // if there's an id, load and set the fallback provider
73                         require([id], function(fallback){
74                                 fallbackProvider = fallback;
75                                 loaded(request);
76                         });
77                 }else{
78                         loaded(request);
79                 }
80         };
81
82         util.addCommonMethods(request);
83
84         return request;
85 });