]>
Commit | Line | Data |
---|---|---|
f0cfe83e AD |
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 | }); |