| /* |
| 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.debug.console"); |
| dojo.require("dojo.logging.ConsoleLogger"); |
| |
| // summary: |
| // Console logger, for use with FireFox Firebug, Safari and Opera's consoles. |
| // description: |
| // This package redirects the normal dojo debugging output to the console log in modern browsers. |
| // When using Firebug, it does this by sending the entire object to the console, |
| // rather than just overriding dojo.hostenv.println, so that Firebug's interactive |
| // object inspector is available. |
| // see: http://www.joehewitt.com/software/firebug/docs.php |
| |
| if (window.console) { |
| if (console.info != null) { |
| // using a later version of Firebug -- lots of fun stuff! |
| |
| dojo.hostenv.println = function() { |
| // summary: Write all of the arguments to the Firebug console |
| // description: Uses console.info() so that the (i) icon prints next to the debug line |
| // rather than munging the arguments by adding "DEBUG:" in front of them. |
| // This allows us to use Firebug's string handling to do interesting things |
| if (!djConfig.isDebug) { return; } |
| console.info.apply(console, arguments); |
| } |
| dojo.debug=dojo.hostenv.println; |
| dojo.debugDeep = dojo.debug; |
| |
| dojo.debugShallow = function(/*Object*/ obj, /*Boolean?*/showMethods, /*Boolean?*/sort) { |
| // summary: Write first-level properties of obj to the console. |
| // obj: Object or Array to debug |
| // showMethods: Pass false to skip outputing methods of object, any other value will output them. |
| // sort: Pass false to skip sorting properties, any other value will sort. |
| if (!djConfig.isDebug) { return; } |
| |
| showMethods = (showMethods != false); |
| sort = (sort != false); |
| |
| // handle null or something without a constructor (in which case we don't know the type) |
| if (obj == null || obj.constructor == null) { |
| return dojo.debug(obj); |
| } |
| |
| // figure out type via a standard constructor (Object, String, Date, etc) |
| var type = obj.declaredClass; |
| if (type == null) { |
| type = obj.constructor.toString().match(/function\s*(.*)\(/); |
| if (type) { type = type[1] }; |
| } |
| // if we got a viable type, use Firebug's interactive property dump feature |
| if (type) { |
| if (type == "String" || type == "Number") { |
| return dojo.debug(type+": ", obj); |
| } |
| if (showMethods && !sort) { |
| var sortedObj = obj; |
| } else { |
| var propNames = []; |
| if (showMethods) { |
| for (var prop in obj) { |
| propNames.push(prop); |
| } |
| } else { |
| for (var prop in obj) { |
| if (typeof obj[prop] != "function") { propNames.push(prop); } |
| else dojo.debug(prop); |
| } |
| } |
| if (sort) propNames.sort(); |
| var sortedObj = {}; |
| dojo.lang.forEach(propNames, function(prop) { |
| sortedObj[prop] = obj[prop]; |
| }); |
| } |
| |
| return dojo.debug(type+": %o\n%2.o",obj,sortedObj); |
| } |
| |
| // otherwise just output the constructor + object, |
| // which is nice for a DOM element, etc |
| return dojo.debug(obj.constructor + ": ", obj); |
| } |
| |
| } else if (console.log != null) { |
| // using Safari or an old version of Firebug |
| dojo.hostenv.println=function() { |
| if (!djConfig.isDebug) { return ; } |
| // make sure we're only writing a single string to Safari's console |
| var args = dojo.lang.toArray(arguments); |
| console.log("DEBUG: " + args.join(" ")); |
| } |
| dojo.debug=dojo.hostenv.println; |
| } else { |
| // not supported |
| dojo.debug("dojo.debug.console requires Firebug > 0.4"); |
| } |
| } else if (dojo.render.html.opera) { |
| // using Opera 8.0 or later |
| if (opera && opera.postError) { |
| dojo.hostenv.println=opera.postError; |
| // summary: hook debugging up to Opera's postError routine |
| } else { |
| dojo.debug("dojo.debug.Opera requires Opera > 8.0"); |
| } |
| } |
| |