forked from CapMousse/include.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
include.js
94 lines (79 loc) · 2.9 KB
/
include.js
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
86
87
88
89
90
91
92
93
94
// include.js 1.0.1
// (c) 2011 Jérémy Barbe.
// May be freely distributed under the MIT license.
!function(environment){
/*
* Include
* Load all files list in object
* @param array array of files to be loaded
* [
* "filename"
* or
* ["filename", callback]
* or
* ["filename", "loaded object", callback]
* ]
*
* @params callback function launched when all files are loaded
*
* @return void
**/
function include(files, callback){
var doc = document, body = "body", emptyFn = function(){},
cache = {}, scriptCounter = 0, time = 1;
!files.pop&&(files=[files]);
!callback&&(callback=emptyFn);
/*
* function create
* create a script node with asked file
* @param file the file
* @param index index of file
* @param callback callback for the current file
* @param obj the object loaded in file
* @return void
*/
function _create(file, fileCallback, obj, script){
script = doc.createElement("script");
scriptCounter++;
script.onload = script.onreadystatechange = function(e, i){
i = 0, e = this.readyState || e.type;
if(e == "complete" || e == "load"){
obj ?
//wait the javascript to be parsed to controll if object exists
(file = function(){
environment[obj] ? _countFiles(fileCallback) : setTimeout(file, time);
++i>time&&(file=emptyFn)
})():
_countFiles(fileCallback)
}
};
script.async = !0;
script.src = file;
doc[body].appendChild(script)
}
/*
* function countFiles
* count files loaded and launch callback
* @param file
* @return void
*/
function _countFiles(fileCallback){
!--scriptCounter&&callback()+fileCallback()
}
!function domCheck(i, script, obj, callbackFile){
if(!doc[body]) return setTimeout(domCheck, time);
script = doc.getElementsByTagName("script");
callbackFile = emptyFn;
for(i in script) script[i].src&&(cache[script[i].src]=i);
for(i in files)
files[i].pop?
(script = files[i][0], callbackFile = files[i][1], obj = files[i][2]):
(script = files[i]),
cache[script] ?
callbackFile():
_create(script, callbackFile, obj);
!scriptCounter&&callback()
}()
}
environment.include = include
}(this)