yzt
2023-05-26 2f70f6727314edd84d8ec2bfe3ce832803f1ea77
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
define([
    '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;
});