X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/7a654f8d43fdb43d78b63d90528bed6e86b608cc..3789b528d8dd8aad4558e38e22d775bcab1cbd36:/jsbuilder/src/Loader.js diff --git a/jsbuilder/src/Loader.js b/jsbuilder/src/Loader.js new file mode 100644 index 00000000..d8b773f1 --- /dev/null +++ b/jsbuilder/src/Loader.js @@ -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); +