vitro/webapp/web/src/lang/repr.js

90 lines
2.5 KiB
JavaScript

/*
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);
})();