/* 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.repr"); dojo.require("dojo.lang.common"); dojo.require("dojo.AdapterRegistry"); dojo.require("dojo.string.extras"); dojo.lang.reprRegistry = new dojo.AdapterRegistry(); dojo.lang.registerRepr = function(name, check, wrap, /*optional*/ override){ /*** Register a repr function. repr functions should take one argument and return a string representation of it suitable for developers, primarily used when debugging. If override is given, it is used as the highest priority repr, otherwise it will be used as the lowest. ***/ dojo.lang.reprRegistry.register(name, check, wrap, override); }; dojo.lang.repr = function(obj){ /*** Return a "programmer representation" for an object ***/ if(typeof(obj) == "undefined"){ return "undefined"; }else if(obj === null){ return "null"; } try{ if(typeof(obj["__repr__"]) == 'function'){ return obj["__repr__"](); }else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){ return obj["repr"](); } return dojo.lang.reprRegistry.match(obj); }catch(e){ if(typeof(obj.NAME) == 'string' && ( obj.toString == Function.prototype.toString || obj.toString == Object.prototype.toString )){ return o.NAME; } } if(typeof(obj) == "function"){ obj = (obj + "").replace(/^\s+/, ""); var idx = obj.indexOf("{"); if(idx != -1){ obj = obj.substr(0, idx) + "{...}"; } } return obj + ""; } dojo.lang.reprArrayLike = function(arr){ try{ var na = dojo.lang.map(arr, dojo.lang.repr); return "[" + na.join(", ") + "]"; }catch(e){ } }; dojo.lang.reprString = function(str){ dojo.deprecated("dojo.lang.reprNumber", "use `String(num)` instead", "0.4"); return dojo.string.escapeString(str); }; dojo.lang.reprNumber = function(num){ dojo.deprecated("dojo.lang.reprNumber", "use `String(num)` instead", "0.4"); return num + ""; }; (function(){ var m = dojo.lang; m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike); m.registerRepr("string", m.isString, m.reprString); m.registerRepr("numbers", m.isNumber, m.reprNumber); m.registerRepr("boolean", m.isBoolean, m.reprNumber); // m.registerRepr("numbers", m.typeMatcher("number", "boolean"), m.reprNumber); })();