Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / jsbuilder / src / Loader.js
diff --git a/jsbuilder/src/Loader.js b/jsbuilder/src/Loader.js
new file mode 100644 (file)
index 0000000..d8b773f
--- /dev/null
@@ -0,0 +1,74 @@
+(function(ROOT) {
+
+var Loader = ROOT.Loader = {
+    paths: {
+        _base: "."
+    },
+
+    existing: {},
+
+    exists: function(name) {
+        var root = ROOT;
+        var chunks = name.split('.');
+
+        for (var i = 0; i < chunks.length; i++) {
+            if (!root.hasOwnProperty(chunks[i]))
+                return false;
+
+            root = root[chunks[i]];
+        }
+
+        return true;
+    },
+
+    setBasePath: function(name, path) {
+        if (!path) {
+            path = name;
+            name = "_base";
+        }
+
+        Loader.paths[name] = path;
+    },
+
+    getBasePath: function(name) {
+        // Start with the base path
+        var path = Loader.paths._base;
+
+        // Iterate through each specified name path ("Ext.layout.Layout" => "js/Ext/layout/Layout.js")
+        for (var stub in Loader.paths) {
+            if (stub === name.substring(0, stub.length)) {
+                path += "/" + Loader.paths[stub];
+                // Remove stub from name, as we've already pathed it
+                name = name.substring(stub.length + 1);
+                break;
+            }
+        }
+
+        return path + "/" + name.replace(/\./g, "/");
+    },
+
+    require: function(names, compulsory) {
+        if (compulsory == undefined)
+            compulsory = true;
+
+        if (typeof names == 'string')
+            names = [names];
+
+        names.forEach(function(name) {
+            if (!this.existing.hasOwnProperty(name)) {
+//                writeln(this.getBasePath(name) + '.js');
+                load(this.getBasePath(name) + '.js');
+
+                var loaded = this.exists(name);
+                this.existing[name] = loaded;
+            }
+
+            if (this.existing[name] == false && compulsory) {
+                throw new Error("[Loader] Failed loading '" + name + "'");
+            }
+        }, Loader);
+    }
+};
+
+})(this);
+