view client/digitallibrary/greyskin/debug.js @ 643:c108607e1bc0 jquery

zoomin and -out works now gotopage resets (some) parameters reload takes changed parameters (to put in url) getParamString omits parameters with default values (for shorter urls)
author robcast
date Wed, 19 Jan 2011 20:03:44 +0100
parents b9b8e54ed3bb
children
line wrap: on
line source

var Debug = null;
var _now = {};

function element(name, content) {
	var E = document.createElement(name);
	if (content) {
		if (content.nodeType) // it's a node
			E.appendChild(content)
		else // it's text
			E.appendChild(document.createTextNode(content))
		};
	return E;
	}
	
function appendElement(node, name, content) {
	if (node == null || ! node.appendChild)
        return node;
	return node.appendChild(element(name,content));
	}

function getDebug() {
	if (Debug == null) {
		Debug = document.getElementById('debug');
		if (Debug == null) {
			Debug = appendElement(document.body, 'div');
			Debug.setAttribute('class', 'debug');
			Debug.setAttribute('id', 'debug');
			Debug.innerhtml = '<h3>Debug</h3>';
			};
		};
	return Debug;
	}

function debug() {
	var D = getDebug();
	// return alertObject(D);
	var msg = "";
	for (var i = 0; i<arguments.length; i++) msg += arguments[i] + " ";
	return appendElement(D, "p", msg);
	}

function debugObject(obj, exclude) {
	if (exclude == null)
	    exclude = '';
	var noConst = exclude.indexOf('const') > -1;
	var A = new Array();
	for (var prop in obj) A.push(prop); 
	A.sort();
	var D = getDebug();
	var T = appendElement(D, "table");
	for (var i = 0; i < A.length; i++) {
		var key = A[i];
		var value = obj[key];
		var type = typeof(value);
		// exclude specified types
		if (exclude.indexOf(type) > -1)
			continue;
		// exclude uppercase-only properties (= constants)
		if (noConst && key.search(/^[A-Z0-9_]+$/) > -1)
			continue;
		var TR = appendElement(T, "tr");
		appendElement(TR, "td", element("b", key));
		appendElement(TR, "td", type); 
		appendElement(TR, "td", value + ""); 
		if (type == "function") 
			appendElement(TR, "td", value.toSource());
		};
	}

function strObject(obj) {
	var res = "";
	var A = new Array();
	try {
		for (var i in obj) A[i] = typeof(obj[i]);
		}
	catch(e) { typ = "unknown" };
    var count = 0;
	for (var item in A) {
		count++;
        typ = A[item];
		res += item + " (" + typ + "): ";
		if (typ != "function") res += obj[item];
		res += "\t";
        if (count % 4 == 0)
            res += "\n";
		}
	return res;
	}

function alertObject(obj) {
	return alert(strObject(obj));
	}

function alertHTML(obj) {
	if (obj)
        return alert(obj.tagName + ".innerHTML:\n" + obj.innerHTML);
	}

function serialize(xmlobject) {
	return (new XMLSerializer()).serializeToString(xmlobject);
	}
	
function startTime(s) {
	_now[s] = new Date();
	}
	
function elapsedTime(s) {
	var diff = new Date(new Date - _now[s]);
	debug(s + ": " + diff.getSeconds() + "." + diff.getMilliseconds() + " sec.");
	}