00001 /* 00002 Copyright (c) 2004-2006, The Dojo Foundation 00003 All Rights Reserved. 00004 00005 Licensed under the Academic Free License version 2.1 or above OR the 00006 modified BSD license. For more information on Dojo licensing, see: 00007 00008 http://dojotoolkit.org/community/licensing.shtml 00009 */ 00010 00011 00012 00013 dojo.provide("dojo.ns"); 00014 dojo.ns = {namespaces:{}, failed:{}, loading:{}, loaded:{}, register:function (name, module, resolver, noOverride) { 00015 if (!noOverride || !this.namespaces[name]) { 00016 this.namespaces[name] = new dojo.ns.Ns(name, module, resolver); 00017 } 00018 }, allow:function (name) { 00019 if (this.failed[name]) { 00020 return false; 00021 } 00022 if ((djConfig.excludeNamespace) && (dojo.lang.inArray(djConfig.excludeNamespace, name))) { 00023 return false; 00024 } 00025 return ((name == this.dojo) || (!djConfig.includeNamespace) || (dojo.lang.inArray(djConfig.includeNamespace, name))); 00026 }, get:function (name) { 00027 return this.namespaces[name]; 00028 }, require:function (name) { 00029 var ns = this.namespaces[name]; 00030 if ((ns) && (this.loaded[name])) { 00031 return ns; 00032 } 00033 if (!this.allow(name)) { 00034 return false; 00035 } 00036 if (this.loading[name]) { 00037 dojo.debug("dojo.namespace.require: re-entrant request to load namespace \"" + name + "\" must fail."); 00038 return false; 00039 } 00040 var req = dojo.require; 00041 this.loading[name] = true; 00042 try { 00043 if (name == "dojo") { 00044 req("dojo.namespaces.dojo"); 00045 } else { 00046 if (!dojo.hostenv.moduleHasPrefix(name)) { 00047 dojo.registerModulePath(name, "../" + name); 00048 } 00049 req([name, "manifest"].join("."), false, true); 00050 } 00051 if (!this.namespaces[name]) { 00052 this.failed[name] = true; 00053 } 00054 } 00055 finally { 00056 this.loading[name] = false; 00057 } 00058 return this.namespaces[name]; 00059 }}; 00060 dojo.ns.Ns = function (name, module, resolver) { 00061 this.name = name; 00062 this.module = module; 00063 this.resolver = resolver; 00064 this._loaded = []; 00065 this._failed = []; 00066 }; 00067 dojo.ns.Ns.prototype.resolve = function (name, domain, omitModuleCheck) { 00068 if (!this.resolver || djConfig["skipAutoRequire"]) { 00069 return false; 00070 } 00071 var fullName = this.resolver(name, domain); 00072 if ((fullName) && (!this._loaded[fullName]) && (!this._failed[fullName])) { 00073 var req = dojo.require; 00074 req(fullName, false, true); 00075 if (dojo.hostenv.findModule(fullName, false)) { 00076 this._loaded[fullName] = true; 00077 } else { 00078 if (!omitModuleCheck) { 00079 dojo.raise("dojo.ns.Ns.resolve: module '" + fullName + "' not found after loading via namespace '" + this.name + "'"); 00080 } 00081 this._failed[fullName] = true; 00082 } 00083 } 00084 return Boolean(this._loaded[fullName]); 00085 }; 00086 dojo.registerNamespace = function (name, module, resolver) { 00087 dojo.ns.register.apply(dojo.ns, arguments); 00088 }; 00089 dojo.registerNamespaceResolver = function (name, resolver) { 00090 var n = dojo.ns.namespaces[name]; 00091 if (n) { 00092 n.resolver = resolver; 00093 } 00094 }; 00095 dojo.registerNamespaceManifest = function (module, path, name, widgetModule, resolver) { 00096 dojo.registerModulePath(name, path); 00097 dojo.registerNamespace(name, widgetModule, resolver); 00098 }; 00099 dojo.registerNamespace("dojo", "dojo.widget"); 00100
For more help developing with SiT! see http://sitracker.org/wiki/DevelopmentHowTo