xcat-core/xCAT-web/javascripts/debug.js
jbjohnso c99d72a179 Initial xCAT 2.0 import
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
2007-10-26 22:44:33 +00:00

138 lines
3.7 KiB
JavaScript

var debugWindow = null;
function debug(text, reverse) {
if (debugWindow == null)
return;
time = "-"; //new Date();
if (reverse) {
$('debug').innerHTML = time + " " + text + "<br>"+ $('debug').innerHTML;
debugWindow.getContent().scrollTop=0;
}
else {
$('debug').innerHTML += time + " " + text + "<br>";
debugWindow.getContent().scrollTop=10000; // Far away
}
}
function hideDebug() {
if (debugWindow) {
debugWindow.destroy();
debugWindow = null;
}
}
function showDebug(bShow) {
if (debugWindow == null) {
debugWindow = new Window('debug_window', {className: 'dialog',width:250, height:100, right:4, bottom:42, zIndex:1000, opacity:1, showEffect: Element.show, resizable: true, title: "Debug"})
debugWindow.getContent().innerHTML = "<style>#debug_window .dialog_content {background:#000;}</style> <div id='debug'></div>";
date=new Date;
date.setMonth(date.getMonth()+3);
//debugWindow.setCookie(null, date);
}
if( typeof bShow == 'undefined' || bShow)debugWindow.show()
}
function clearDebug() {
if (debugWindow == null)
return;
$('debug').innerHTML = "";
}
/**
* document.createElement convenience wrapper
*
* The data parameter is an object that must have the "tag" key, containing
* a string with the tagname of the element to create. It can optionally have
* a "children" key which can be: a string, "data" object, or an array of "data"
* objects to append to this element as children. Any other key is taken as an
* attribute to be applied to this tag.
*
* Available under an MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @param {Object} data The data representing the element to create
* @return {Element} The element created.
*/
function $E(data) {
var el;
if ('string'==typeof data) {
el=document.createTextNode(data);
} else {
//create the element
el=document.createElement(data.tag);
delete(data.tag);
//append the children
if ('undefined'!=typeof data.children) {
if ('string'==typeof data.children ||'undefined'==typeof data.children.length) {
//strings and single elements
el.appendChild($E(data.children));
} else {
//arrays of elements
for (var i=0, child=null; 'undefined'!=typeof (child=data.children[i]); i++) {
el.appendChild($E(child));
}
}
delete(data.children);
}
//any other data is attributes
for (attr in data) {
el[attr]=data[attr];
}
}
return el;
}
// FROM Nick Hemsley
var Debug = {
inspectOutput: function (container, within) {
within = within || debugWindow.getContent()
if (debugWindow == null)
return;
within.appendChild(container)
},
inspect: function(object) {
var cont = $E({tag: "div", className: "inspector"})
Debug.inspectObj(object, cont)
debugWindow.getContent().appendChild(cont)
},
inspectObj: function (object, container) {
for (prop in object) {
Debug.inspectOutput(Debug.inspectable(object, prop), container)
}
},
inspectable: function(object, prop) {
cont = $E({tag: 'div', className: 'inspectable', children: [prop + " value: " + object[prop] ]})
cont.toInspect = object[prop]
Event.observe(cont, 'click', Debug.inspectClicked, false)
return cont
},
inspectClicked: function(e) {
Debug.inspectContained(Event.element(e))
Event.stop(e)
},
inspectContained: function(container) {
if (container.opened) {
container.parentNode.removeChild(container.opened)
delete(container.opened)
} else {
sibling = container.parentNode.insertBefore($E({tag: "div", className: "child"}), container.nextSibling)
if (container.toInspect)
Debug.inspectObj(container.toInspect, sibling)
container.opened = sibling
}
}
}
var inspect = Debug.inspect;