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