1: var IAT = {};
2: IAT.Eval = function(scr, scope) {
3: return eval(scr);
4: }
5: IAT.Importer = new function() {
6: var _self = this;
7: var _waitingClasses = [];
8:
9: function processWaitingClasses() {
10: for(var i = 0; i < _waitingClasses.length; i++) {
11: var refs = _waitingClasses[i].refs;
12:
13: var removeRefs = [];
14: for(var k = 0; k < refs.length; k++) {
15: if(isDefined(refs[k]))
16: removeRefs.push(k);
17: }
18:
19: for(var k = removeRefs.length - 1; k >= 0; k--) {
20: refs.splice(removeRefs[k], 1);
21: }
22:
23: if(_waitingClasses[i].refs.length < 1) {
24: var cls = _waitingClasses[i];
25: _waitingClasses.splice(i, 1);
26: setClass(cls);
27: break;
28: }
29: }
30: }
31:
32: function setClass(def) {
33: // 'scope' will be evaluated as def in IAT.Eval
34: IAT.Eval(def.clsName + '=scope.cls();', def);
35: processWaitingClasses();
36: }
37:
38: function isDefined(str, scope) {
39: if(!scope) scope = 'window';
40: var path = str.split('.');
41:
42: var scr = scope + '.' + path[0];
43: if(!IAT.Eval(scr)) return false;
44:
45: if(path.length == 1) return true;
46:
47: path.splice(0,1);
48:
49: str = path.join('.');
50: if(path.length > 1) str = str.substring(0, str.length);
51:
52: return isDefined(str, scr);
53: }
54:
55: _self.Ns = function(str, scope) {
56: if(!scope) scope = 'window';
57: var path = str.split('.');
58:
59: var scr = scope + '.' + path[0];
60: if(!IAT.Eval(scr)) IAT.Eval(scr + '={};');
61:
62: if(path.length == 1) return;
63:
64: path.splice(0,1);
65:
66: str = path.join('.');
67: if(path.length > 1) str = str.substring(0, str.length);
68:
69: this.Ns(str, scr);
70: }
71:
72: _self.DefineClass = function(config) {
73: var parent = config.clsName.substring(0, config.clsName.lastIndexOf('.'));
74: _self.Ns(parent);
75: _waitingClasses.push(config);
76: for(var i = 0; i < config.refs.length; i++) {
77: _self.Import(config.refs[i]);
78: }
79: processWaitingClasses();
80: }
81:
82: _self.Import = function(clsName) {
83: if(isDefined(clsName)) return;
84:
85: var path = clsName.split('.');
86: path.splice(0,1);
87: var clsPath = path.join('/');
88: clsPath = clsPath.substring(0, clsPath.length);
89:
90: var head = document.getElementsByTagName('head')[0];
91: var script = document.createElement('script');
92: script.setAttribute('type','text/javascript');
93: script.setAttribute('language','javascript');
94: script.setAttribute('src','Library/js/' + clsPath + '.js');
95: head.appendChild(script);
96: }
97: }
98: