require

webix.require(module, callback, master)

webix.require helper.

Please look into the linked official documentation.

References

helpers
_modules(), ajax(), codebase(), exec().

Referenced by

helpers
toExcel(), toPDF(), toPNG().
components
Canvas().
mixins
UploadDriver().

External references

Official documentation page.

Code

 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
webix.require=function(module, callback, master){
    var promise = webix.promise.defer();

    if (callback && callback !== true)
        promise = promise.then(function(){ callback.call(master || this); });

    if (webix.require.disabled){
        promise.resolve();
        return promise;
    }

    //multiple files required at once
    if (typeof module != "string"){
        var count = module.length||0;

        if (!count){
            // { file: true, other: true }
            for (var file in module) count++;
            var callback2 = function(){
                count--;
                if (count === 0)
                    promise.resolve();
            };
            for (var file in module)
                webix.require(file, callback2, master);
        } else {
            // [ file, other ]
            var callback2 = function(){
                if (count){
                    count--;
                    webix.require(module[module.length - count - 1], callback2, master);
                } else {
                    promise.resolve();
                }
            };
            callback2();
        }
        return;
    }

    if (webix._modules[module] !== true){
        var fullpath = module;
        if (!module.toString().match(/^([a-z]+\:)*\/\//i))
            fullpath = webix.codebase + module;

        //css, async, no waiting
        if (module.substr(module.length-4) == ".css") {
            var link = webix.html.create("LINK",{  type:"text/css", rel:"stylesheet", href:fullpath});
            document.getElementsByTagName('head')[0].appendChild(link);
            promise.resolve();
            return promise;
        }

        //js, async, waiting
        if (callback === true){
            //sync mode
            webix.exec( webix.ajax().sync().get(fullpath).responseText );
            webix._modules[module]=true;

        } else {

            if (!webix._modules[module]){    //first call
                webix._modules[module] = [promise];

                webix.ajax(fullpath, function(text){
                    webix.exec(text);    //evaluate code
                    var calls = webix._modules[module];    //callbacks
                    webix._modules[module] = true;
                    for (var i=0; i<calls.length; i++)
                        calls[i].resolve();
                });
            } else    //module already loading
                webix._modules[module].push(promise);
        }
    } else
        promise.resolve();

    return promise;
};