epic-s6ts
[kivitendo-erp.git] / js / namespace.js
1 var namespace = (function() {
2   var namespace = function(nsString, callback) {
3     var nsParts = nsString.split(namespace.namespaceDelimiter);
4
5     var ns = namespace.root;
6
7     var len = nsParts.length;
8     for(var i=0; i<len; ++i)
9     {
10       if( !ns[nsParts[i]] )
11         ns[nsParts[i]] = {__namespaceAutoCreated: true};
12
13       ns = ns[nsParts[i]];
14     }
15
16     if( callback )
17     {
18       var nsExt = callback.call(ns, ns);
19
20       if( nsExt )
21       {
22         if( !ns )
23           ns = {};
24
25         for(var key in nsExt)
26           ns[key] = nsExt[key];
27       }
28
29       ns.__namespaceAutoCreated = false;
30     }
31     else if( namespace.loadNamespace && ns.__namespaceAutoCreated )
32     {
33       var url;
34
35       var len = namespace.namespaceLocations.length;
36       for(var i=0; i<len; ++i)
37       {
38         var entry = namespace.namespaceLocations[i];
39         if( nsString.indexOf(entry.namespace) === 0 )
40         {
41           url = entry.location;
42           break;
43         }
44       }
45
46       url += "/"+ nsString +".js";
47
48       jQuery.ajax({
49         url: url,
50         async: false,
51         dataType: "text",
52         success: function(res) {
53           eval(res);
54           /*
55           var script = window.document.createElement("script");
56           script.type = "text/javascript";
57           script.text = res;
58           window.document.body.appendChild(script);
59           */
60         },
61         error: function(xhr, textStatus, errorThrown) {
62           alert(textStatus +": "+ errorThrown);
63         },
64       });
65     }
66
67     return ns;
68   };
69
70   return namespace;
71 })();
72
73 window.namespaceRoot = {};
74 namespace.root = window.namespaceRoot;
75 namespace.namespaceDelimiter = ".";
76 namespace.namespaceLocations = [{namespace: "", location: "js"}];
77 namespace.loadNamespace = true;