/* 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(/*String*/name, /*Function*/check, /*Function*/wrap, /*Boolean?*/override){ // summary: // 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(/*Object*/obj){ // summary: Return a "programmer representation" for an object // description: returns a string representation of an object suitable for developers, primarily used when debugging if(typeof(obj) == "undefined"){ // obj: undefined return "undefined"; // String }else if(obj === null){ // obj: null return "null"; // String } 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 obj.NAME; // String } } if(typeof(obj) == "function"){ // obj: Function obj = (obj + "").replace(/^\s+/, ""); var idx = obj.indexOf("{"); if(idx != -1){ obj = obj.substr(0, idx) + "{...}"; } } return obj + ""; // String } dojo.lang.reprArrayLike = function(/*Array*/arr){ // summary: Maps each element of arr to dojo.lang.repr and provides output in an array-like format // description: returns an array-like string representation of the provided array suitable for developers, primarily used when debugging try{ var na = dojo.lang.map(arr, dojo.lang.repr); return "[" + na.join(", ") + "]"; // String }catch(e){ } }; (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); })();