138 lines
3.7 KiB
JavaScript
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;
|