diff options
Diffstat (limited to 'itjs/it.js')
| -rw-r--r-- | itjs/it.js | 165 | 
1 files changed, 165 insertions, 0 deletions
| diff --git a/itjs/it.js b/itjs/it.js new file mode 100644 index 0000000..1a792f3 --- /dev/null +++ b/itjs/it.js @@ -0,0 +1,165 @@ +// $Id$ + +/** + * Clear contents of element 'jsdebug' + */ +function CED(txt) +{ +	var element = document.getElementById('jsdebug'); + +	if (element) +		element.innerHTML = txt ? txt : ""; +} + +/** + * Add debugging output to element 'jsdebug' + */ +function ED() +{ +	var element = document.getElementById('jsdebug'); + +	if (element) +	{ +		var text = ""; + +		for (var i = 0; i < arguments.length; i++) +		{ +			var variable = arguments[i]; + +			if (typeof variable == "string") +				variable = variable.replace(/&/g, '&').replace(/</g, '<'); + +			text += (typeof variable) + " " + variable; + +			if (typeof variable == "object") +			{ +				text += ":"; + +				for (field in variable) +				{ +					text += field + "="; + +					try { text += typeof variable[field] == 'function' ? 'function' : variable[field]; } +					catch (e) { text += "*" + e + "*"; } + +					text += "\n"; +				} +				text += "\n"; +			} + +			text += "\n"; +		} + +		element.innerHTML += '<pre style="background-color:#FEE; margin:0">'  + text + '</pre>'; +	} +} + +/** + * Quote HTML special chars + * @return Text string with & " < > htmlentities-encoded + */ +function Q(value) +{ +	return value.toString().replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>'); +} + +/** + * String class: Replaces variables of the form {var} with values from given array + * @param values Associative array containing values to fill in (optional) + * @return Text string with variables replaced by their values + */ +String.prototype.T = function(values) +{ +	var result = this; + +	for (key in values) +		result = result.replace(new RegExp("{" + key + "}", "g"), values[key]); + +	return result; +} + +/** + * Insert an event handler on top of chain + * @param p.element Element to handle event for + * @param p.event Name of event:'focus', 'click', ... (without 'on') + * @param p.object Object that contains handler method + * @param p.method Method of p.object to call on p.event + */ +function it_event(p) +{ +	var oldhandler = p.element["on" + p.event]; + +	p.element["on" + p.event] = function(ev) +	{ +		var pp = arguments.callee.p ? arguments.callee.p : p; +		var oo = arguments.callee.oldhandler ? arguments.callee.oldhandler : oldhandler; + +		var result = pp.object[pp.method](ev ? ev : window.event, pp); + +		if (result && oo) +			result = oo(ev); + +		return result; +	} +	p.element["on" + p.event].p = p; +	p.element["on" + p.event].oldhandler = oldhandler; +} + +/* Get object pixel position. Based on quirksmode.org's code */ +function it_get_obj_x(obj) +{        +	var curleft = 0; +	if (obj.offsetParent) +		while (obj) +		{ +			curleft += obj.offsetLeft; +			obj = obj.offsetParent; +		} +	else if (obj.x) +		curleft += obj.x; +	return curleft; +}        + +function it_get_obj_y(obj) +{	        +	var curtop = 0; +	if (obj.offsetParent) +		while (obj) +		{ +			curtop += obj.offsetTop; +			obj = obj.offsetParent; +		} +	else if (obj.y) +		curtop += obj.y; +	return curtop; +} + +/* Get an iframe's content document in a compatible way */ +function it_get_iframe_document(iframe) +{ +	return iframe.contentWindow ? iframe.contentWindow.document : iframe.contentDocument; +} + +/** + * Clone src value and return dst. If dst is given then src attributes are + * copied into it, otherwise a new object is created. Also works with scalar + * values. Performs a deep copy of objects + * @param src Source object/value to clone + * @param dst Destination object to copy attributes from src to (optional) + * @return dst holding copy of src + */ +function it_clone(src, dst) +{ +	if (typeof src == "object") +	{ +		if (!dst) +			dst = {}; + +		for (var i in src) +			dst[i] = it_clone(src[i]); +	} +	else +		dst = src; + +	return dst; +} |