Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/



dojo.provide("dojo.lang.type");
dojo.require("dojo.lang.common");
dojo.lang.whatAmI = function (value) {
        dojo.deprecated("dojo.lang.whatAmI", "use dojo.lang.getType instead", "0.5");
        return dojo.lang.getType(value);
};
dojo.lang.whatAmI.custom = {};
dojo.lang.getType = function (value) {
        try {
                if (dojo.lang.isArray(value)) {
                        return "array";
                }
                if (dojo.lang.isFunction(value)) {
                        return "function";
                }
                if (dojo.lang.isString(value)) {
                        return "string";
                }
                if (dojo.lang.isNumber(value)) {
                        return "number";
                }
                if (dojo.lang.isBoolean(value)) {
                        return "boolean";
                }
                if (dojo.lang.isAlien(value)) {
                        return "alien";
                }
                if (dojo.lang.isUndefined(value)) {
                        return "undefined";
                }
                for (var name in dojo.lang.whatAmI.custom) {
                        if (dojo.lang.whatAmI.custom[name](value)) {
                                return name;
                        }
                }
                if (dojo.lang.isObject(value)) {
                        return "object";
                }
        }
        catch (e) {
        }
        return "unknown";
};
dojo.lang.isNumeric = function (value) {
        return (!isNaN(value) && isFinite(value) && (value != null) && !dojo.lang.isBoolean(value) && !dojo.lang.isArray(value) && !/^\s*$/.test(value));
};
dojo.lang.isBuiltIn = function (value) {
        return (dojo.lang.isArray(value) || dojo.lang.isFunction(value) || dojo.lang.isString(value) || dojo.lang.isNumber(value) || dojo.lang.isBoolean(value) || (value == null) || (value instanceof Error) || (typeof value == "error"));
};
dojo.lang.isPureObject = function (value) {
        return ((value != null) && dojo.lang.isObject(value) && value.constructor == Object);
};
dojo.lang.isOfType = function (value, type, keywordParameters) {
        var optional = false;
        if (keywordParameters) {
                optional = keywordParameters["optional"];
        }
        if (optional && ((value === null) || dojo.lang.isUndefined(value))) {
                return true;
        }
        if (dojo.lang.isArray(type)) {
                var arrayOfTypes = type;
                for (var i in arrayOfTypes) {
                        var aType = arrayOfTypes[i];
                        if (dojo.lang.isOfType(value, aType)) {
                                return true;
                        }
                }
                return false;
        } else {
                if (dojo.lang.isString(type)) {
                        type = type.toLowerCase();
                }
                switch (type) {
                  case Array:
                  case "array":
                        return dojo.lang.isArray(value);
                  case Function:
                  case "function":
                        return dojo.lang.isFunction(value);
                  case String:
                  case "string":
                        return dojo.lang.isString(value);
                  case Number:
                  case "number":
                        return dojo.lang.isNumber(value);
                  case "numeric":
                        return dojo.lang.isNumeric(value);
                  case Boolean:
                  case "boolean":
                        return dojo.lang.isBoolean(value);
                  case Object:
                  case "object":
                        return dojo.lang.isObject(value);
                  case "pureobject":
                        return dojo.lang.isPureObject(value);
                  case "builtin":
                        return dojo.lang.isBuiltIn(value);
                  case "alien":
                        return dojo.lang.isAlien(value);
                  case "undefined":
                        return dojo.lang.isUndefined(value);
                  case null:
                  case "null":
                        return (value === null);
                  case "optional":
                        dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])", "use dojo.lang.isOfType(value, type, {optional: true} ) instead", "0.5");
                        return ((value === null) || dojo.lang.isUndefined(value));
                  default:
                        if (dojo.lang.isFunction(type)) {
                                return (value instanceof type);
                        } else {
                                dojo.raise("dojo.lang.isOfType() was passed an invalid type");
                        }
                }
        }
        dojo.raise("If we get here, it means a bug was introduced above.");
};
dojo.lang.getObject = function (str) {
        var parts = str.split("."), i = 0, obj = dj_global;
        do {
                obj = obj[parts[i++]];
        } while (i < parts.length && obj);
        return (obj != dj_global) ? obj : null;
};
dojo.lang.doesObjectExist = function (str) {
        var parts = str.split("."), i = 0, obj = dj_global;
        do {
                obj = obj[parts[i++]];
        } while (i < parts.length && obj);
        return (obj && obj != dj_global);
};