From d59a4921188753dbe4c0161081755a28112c3ef6 Mon Sep 17 00:00:00 2001 From: Nathan Gass Date: Thu, 22 Mar 2012 18:18:42 +0000 Subject: Branch itools/devel-utf8 created --- devel-utf8/itjs/it.js | 297 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 devel-utf8/itjs/it.js (limited to 'devel-utf8/itjs/it.js') diff --git a/devel-utf8/itjs/it.js b/devel-utf8/itjs/it.js new file mode 100644 index 0000000..54fa5c7 --- /dev/null +++ b/devel-utf8/itjs/it.js @@ -0,0 +1,297 @@ +// $Id$ + +/** + * Clear contents of element 'jsdebug' + */ +function CED(txt) +{ + var element = document.getElementById('jsdebug'); + if (element) + element.innerHTML = txt ? txt : ""; +} + +/** + * Return string with dump of all arguments + */ +function D() +{ + var text = ""; + for (var i = 0; i < arguments.length; i++) + { + var variable = arguments[i]; + + if (typeof variable == "string") + variable = variable.replace(/&/g, '&').replace(new RegExp("<", "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"; + } + return text; +} + +/** + * Add debugging output to element 'jsdebug' + */ +function ED() +{ + var element; + + if (!(element = document.getElementById('jsdebug'))) + return; // var element = it_create_element(document.body, 'div', {id:'jsdebug', style:{position:'absolute', left:'100px', top:'10px', opacity:'0.8'}}) + + element.innerHTML += '
'  + D.apply(this, arguments) + '<' + '/pre>';
+}
+
+/**
+ * Quote HTML special chars
+ * @return Text string with & " < > htmlentities-encoded
+ */
+function Q(value)
+{
+	return typeof value == "undefined" ? "" : value.toString().replace(/&/g, '&').replace(/\"/g, '"').replace(new RegExp("<", "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;
+}
+
+function it_add_event(p)
+{
+	if (!p.object || !p.method)  // not enough arguments
+		return;
+	if (!p.element)
+		p.element = document;
+
+	if (!p.object._it_events)
+		p.object._it_events = [];
+	
+	var evt = p.event;
+	var key = p.event + '*' + p.method;
+	var p_closure = p;	// Needed for Konqueror 3.4.2 as p is (wrongly) shadowed by global input element named p
+	if (!p.object._it_events[key])
+		p.object._it_events[key] = function(e){ return p_closure.object[p_closure.method](e, p_closure); };
+
+	if (p.element.addEventListener)
+		p.element.addEventListener(evt, p.object._it_events[key], false);
+	else if (p.element.attachEvent)
+		p.element.attachEvent('on'+evt, p.object._it_events[key]);
+	else
+	{
+		p.element['on'+evt] = function(e)
+		{
+			var ret = true;
+			for (var k in p_closure.object._it_events)
+				if (p_closure.object._it_events[k] && k.indexOf(evt) == 0)
+					ret = p_closure.object._it_events[k](e);
+			return ret;
+		};
+	}
+}
+
+function it_remove_event(p)
+{
+	if (!p.element)
+		p.element = document;
+
+	var key = p.event + '*' + p.method;
+	if (p.object && p.object._it_events && p.object._it_events[key]) {
+		if (p.element.removeEventListener)
+			p.element.removeEventListener(p.event, p.object._it_events[key], false);
+		else if (p.element.detachEvent)
+			p.element.detachEvent('on'+p.event, p.object._it_events[key]);
+
+		p.object._it_events[key] = null;
+	}
+}
+
+/**
+ * Prevent event propagation and bubbeling
+ */
+function it_event_void(evt)
+{
+	var e = evt ? evt : window.event;
+	if (e.preventDefault)
+		e.preventDefault();
+	if (e.stopPropagation)
+		e.stopPropagation();
+
+	e.cancelBubble = true;
+	e.returnValue = false;
+	return false;
+}
+
+/* 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;
+}
+
+/* Common accessor for dom elements */
+function it_find_obj(obj)
+{
+	if (document.getElementById)
+		return document.getElementById(obj);
+	else if (document.all)
+		return document.all[obj];
+	else if (document.layers)
+   		return document.layers[obj];
+	return null;
+}
+
+/* Get dom element by ID but always return a valid object */
+function it_element(label)
+{
+	var tmp = it_find_obj(label);
+	return tmp ? tmp : { style:{}, src:"", value:"", isundefined:true };
+}
+
+/* Get an iframe's content document in a compatible way */
+function it_get_iframe_document(iframe)
+{
+	return iframe.contentWindow ? iframe.contentWindow.document : iframe.contentDocument;
+}
+
+/* Create a new dom element and append to doc */
+function it_create_element(doc, type, init)
+{
+	var e = document.createElement(type);
+	it_set(e, init);
+	doc.appendChild(e);
+	return e;
+}
+
+/**
+ * Copy attributes from src to dst in a recursive manner.
+ * @param dst Destination object which gets attributes
+ * @param src Source object containing attributes
+ */
+function it_set(dst, src)
+{
+	if (dst)
+	{
+		for (var i in src)
+		{
+			if (typeof src[i] == 'object')
+			{
+				if (dst[i])
+					it_set(dst[i], src[i]);
+			}
+			else
+				dst[i] = src[i];
+		}
+	}
+}
+
+/**
+ * Return the current timestamp
+ */
+function it_now()
+{
+	return new Date().getTime();
+}
+
+/**
+ * Encodes arbitrary string for use in an url
+ * @param str string to be encoded
+ */
+function it_url_encode(str)
+{
+	var result = window.encodeURIComponent ? encodeURIComponent(str) : escape(str).replace(/\+/g, "%2B");
+
+	return result.replace(/%20/gi, "+").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%28/gi, "(").replace(/%29/gi, ")");
+}
+
+/**
+ * Patch PNG transparency for IE 5.5-6 on the given image
+ */
+function it_pngfix(img, w, h, mode)
+{
+	var old_IE = navigator.platform == "Win32" && String(navigator.userAgent).match(/MSIE ((5\.5)|6)/);
+	if (img.src && img.src.match(/\.png($|\?)/) && old_IE) {
+		img.style.width = (w || img.width) + 'px';
+		img.style.height = (h || img.height) + 'px';
+		img.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"',sizingMethod='"+(mode ? mode : 'crop')+"')";
+		img.src = '/images/0.gif';
+	}
+	else if (img && old_IE)
+		img.style.filter = 'none';
+}
+
-- 
cgit v1.2.3