forked from extern/egroupware
177 lines
4.3 KiB
JavaScript
177 lines
4.3 KiB
JavaScript
|
/*
|
||
|
File: xajax_verbose.js
|
||
|
|
||
|
The xajax verbose debugging module. This is an optional module, include in
|
||
|
your project with care. :)
|
||
|
|
||
|
Title: xajax verbose debugging module
|
||
|
|
||
|
Please see <copyright.inc.php> for a detailed description, copyright
|
||
|
and license information.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
@package xajax
|
||
|
@version $Id: xajax_verbose_uncompressed 327 2007-02-28 16:55:26Z calltoconstruct $
|
||
|
@copyright Copyright (c) 2005-2007 by Jared White & J. Max Wilson
|
||
|
@copyright Copyright (c) 2008-2009 by Joseph Woolley, Steffen Konerow, Jared White & J. Max Wilson
|
||
|
@license http://www.xajaxproject.org/bsd_license.txt BSD License
|
||
|
*/
|
||
|
|
||
|
try {
|
||
|
if ('undefined' == typeof xajax)
|
||
|
throw { name: 'SequenceError', message: 'Error: xajax core was not detected, verbose module disabled.' }
|
||
|
if ('undefined' == typeof xajax.debug)
|
||
|
throw { name: 'SequenceError', message: 'Error: xajax debugger was not detected, verbose module disabled.' }
|
||
|
|
||
|
/*
|
||
|
Class: xajax.debug.verbose
|
||
|
|
||
|
Provide a high level of detail which can be used to debug hard to find
|
||
|
problems.
|
||
|
*/
|
||
|
xajax.debug.verbose = {}
|
||
|
|
||
|
/*
|
||
|
Function: xajax.debug.verbose.expandObject
|
||
|
|
||
|
Generate a debug message expanding all the first level
|
||
|
members found therein.
|
||
|
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
obj - (object): The object to be enumerated.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
string - The textual representation of all the first
|
||
|
level members.
|
||
|
*/
|
||
|
xajax.debug.verbose.expandObject = function(obj) {
|
||
|
var rec = true;
|
||
|
if (1 < arguments.length)
|
||
|
rec = arguments[1];
|
||
|
if ('function' == typeof (obj)) {
|
||
|
return '[Function]';
|
||
|
} else if ('object' == typeof (obj)) {
|
||
|
if (true == rec) {
|
||
|
var t = ' { ';
|
||
|
var separator = '';
|
||
|
for (var m in obj) {
|
||
|
t += separator;
|
||
|
t += m;
|
||
|
t += ': ';
|
||
|
try {
|
||
|
t += xajax.debug.verbose.expandObject(obj[m], false);
|
||
|
} catch (e) {
|
||
|
t += '[n/a]';
|
||
|
}
|
||
|
separator = ', ';
|
||
|
}
|
||
|
t += ' } ';
|
||
|
return t;
|
||
|
} else return '[Object]';
|
||
|
} else return '"' + obj + '"';
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: xajax.debug.verbose.makeFunction
|
||
|
|
||
|
Generate a wrapper function around the specified function.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
obj - (object): The object that contains the function to be
|
||
|
wrapped.
|
||
|
name - (string): The name of the function to be wrapped.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
function - The wrapper function.
|
||
|
*/
|
||
|
xajax.debug.verbose.makeFunction = function(obj, name) {
|
||
|
return function() {
|
||
|
var fun = name;
|
||
|
fun += '(';
|
||
|
|
||
|
var separator = '';
|
||
|
var pLen = arguments.length;
|
||
|
for (var p = 0; p < pLen; ++p) {
|
||
|
fun += separator;
|
||
|
fun += xajax.debug.verbose.expandObject(arguments[p]);
|
||
|
separator = ',';
|
||
|
}
|
||
|
|
||
|
fun += ');';
|
||
|
|
||
|
var msg = '--> ';
|
||
|
msg += fun;
|
||
|
|
||
|
xajax.debug.writeMessage(msg);
|
||
|
|
||
|
var returnValue = true;
|
||
|
var code = 'returnValue = obj(';
|
||
|
separator = '';
|
||
|
for (var p = 0; p < pLen; ++p) {
|
||
|
code += separator;
|
||
|
code += 'arguments[' + p + ']';
|
||
|
separator = ',';
|
||
|
}
|
||
|
code += ');';
|
||
|
|
||
|
eval(code);
|
||
|
|
||
|
msg = '<-- ';
|
||
|
msg += fun;
|
||
|
msg += ' returns ';
|
||
|
msg += xajax.debug.verbose.expandObject(returnValue);
|
||
|
|
||
|
xajax.debug.writeMessage(msg);
|
||
|
|
||
|
return returnValue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: xajax.debug.verbose.hook
|
||
|
|
||
|
Generate a wrapper function around each of the functions
|
||
|
contained within the specified object.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
x - (object): The object to be scanned.
|
||
|
base - (string): The base reference to be prepended to the
|
||
|
generated wrapper functions.
|
||
|
*/
|
||
|
xajax.debug.verbose.hook = function(x, base) {
|
||
|
for (var m in x) {
|
||
|
if ('function' == typeof (x[m])) {
|
||
|
x[m] = xajax.debug.verbose.makeFunction(x[m], base + m);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
xajax.debug.verbose.hook(xajax, 'xajax.');
|
||
|
xajax.debug.verbose.hook(xajax.callback, 'xajax.callback.');
|
||
|
xajax.debug.verbose.hook(xajax.css, 'xajax.css.');
|
||
|
xajax.debug.verbose.hook(xajax.dom, 'xajax.dom.');
|
||
|
xajax.debug.verbose.hook(xajax.events, 'xajax.events.');
|
||
|
xajax.debug.verbose.hook(xajax.forms, 'xajax.forms.');
|
||
|
xajax.debug.verbose.hook(xajax.js, 'xajax.js.');
|
||
|
xajax.debug.verbose.hook(xajax.tools, 'xajax.tools.');
|
||
|
xajax.debug.verbose.hook(xajax.tools.queue, 'xajax.tools.queue.');
|
||
|
xajax.debug.verbose.hook(xajax.command, 'xajax.command.');
|
||
|
xajax.debug.verbose.hook(xajax.command.handler, 'xajax.command.handler.');
|
||
|
|
||
|
/*
|
||
|
Boolean: isLoaded
|
||
|
|
||
|
true - indicates that the verbose debugging module is loaded.
|
||
|
*/
|
||
|
xajax.debug.verbose.isLoaded = true;
|
||
|
} catch (e) {
|
||
|
alert(e.name + ': ' + e.message);
|
||
|
}
|