/**
* @private
* @class Ext.app.Util
*/
Ext.define('Ext.app.Util', {
}, function() {
Ext.apply(Ext.app, {
namespaces: {
Ext: {}
},
/**
* Adds namespace(s) to known list.
* @private
*
* @param {String/String[]} namespace
*/
addNamespaces: function(namespace) {
var namespaces = Ext.app.namespaces,
i, l;
if (!Ext.isArray(namespace)) {
namespace = [namespace];
}
for (i = 0, l = namespace.length; i < l; i++) {
namespaces[namespace[i]] = true;
}
},
/**
* Clear all namespaces from known list.
* @private
*/
clearNamespaces: function() {
Ext.app.namespaces = {};
},
/**
* Get namespace prefix for a class name.
* @private
* @param {String} className
*
* @return {String} Namespace prefix if it's known, otherwise undefined
*/
getNamespace: function(className) {
var namespaces = Ext.apply({}, Ext.ClassManager.paths, Ext.app.namespaces),
deepestPrefix = '',
prefix;
for (prefix in namespaces) {
if (namespaces.hasOwnProperty(prefix) &&
prefix.length > deepestPrefix.length &&
(prefix + '.' === className.substring(0, prefix.length + 1))) {
deepestPrefix = prefix;
}
}
return deepestPrefix === '' ? undefined : deepestPrefix;
},
/**
* Sets up paths based on the `appFolder` and `paths` configs.
* @param {String} appName The application name (root namespace).
* @param {String} appFolder The folder for app sources ("app" by default).
* @param {Object} paths A set of namespace to path mappings.
* @private
* @since 6.0.0
*/
setupPaths: function(appName, appFolder, paths) {
var manifestPaths = Ext.manifest,
ns;
// Ignore appFolder:null
if (appName && appFolder !== null) {
manifestPaths = manifestPaths && manifestPaths.paths;
// If the manifest has paths, only honor appFolder if defined. If the
// manifest has no paths (old school mode), then we want to default an
// unspecified appFolder value to "app". Sencha Cmd will pass in paths
// to configure the loader via the "paths" property of the manifest so
// we don't want to try and be "helpful" in that case.
if (!manifestPaths || appFolder !== undefined) {
Ext.Loader.setPath(appName, (appFolder === undefined) ? 'app' : appFolder);
}
}
if (paths) {
for (ns in paths) {
if (paths.hasOwnProperty(ns)) {
Ext.Loader.setPath(ns, paths[ns]);
}
}
}
}
});
/**
* @method getNamespace
* @member Ext
* @param {String} className
*
* @return {String} Namespace prefix if it's known, otherwise undefined
*/
Ext.getNamespace = Ext.app.getNamespace;
});