diff options
author | Nathan Gass | 2012-03-22 18:18:42 +0000 |
---|---|---|
committer | Nathan Gass | 2012-03-22 18:18:42 +0000 |
commit | d59a4921188753dbe4c0161081755a28112c3ef6 (patch) | |
tree | 81496414d988f37f1db9d92c9750d888ffa13746 /devel-utf8/itjs/it.js | |
parent | ca11771e8fad5fef96615df4c44e04b8fb60ac31 (diff) | |
download | itools-d59a4921188753dbe4c0161081755a28112c3ef6.tar.gz itools-d59a4921188753dbe4c0161081755a28112c3ef6.tar.bz2 itools-d59a4921188753dbe4c0161081755a28112c3ef6.zip |
Branch itools/devel-utf8 created
Diffstat (limited to 'devel-utf8/itjs/it.js')
-rw-r--r-- | devel-utf8/itjs/it.js | 297 |
1 files changed, 297 insertions, 0 deletions
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 += '<pre style="background-color:#FEE; margin:0">' + 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'; +} + |