X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=program%2Fjs%2Fcommon.js;h=1e89be2dce5430e08ea449908e878fcdc397e815;hb=8bb10dbda276f4c5f1050a05786ba5a5a6cc787d;hp=20586356854282ec8961f9ac1983ad3e44416a84;hpb=0af63e79917234f76cfa7ec74e9d97b24fbf9b55;p=roundcube.git diff --git a/program/js/common.js b/program/js/common.js index 2058635..1e89be2 100644 --- a/program/js/common.js +++ b/program/js/common.js @@ -3,18 +3,26 @@ | RoundCube common js library | | | | This file is part of the RoundCube web development suite | - | Copyright (C) 2005, RoundCube Dev, - Switzerland | + | Copyright (C) 2005-2006, RoundCube Dev, - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: common.js 289 2006-08-02 03:42:08Z cmcnulty $ + $Id: common.js 543 2007-04-28 18:07:12Z thomasb $ */ +// Constants +var CONTROL_KEY = 1; +var SHIFT_KEY = 2; +var CONTROL_SHIFT_KEY = 3; -// default browsercheck + +/** + * Default browser check class + * @construcotr + */ function roundcube_browser() { this.ver = parseFloat(navigator.appVersion); @@ -92,10 +100,127 @@ function roundcube_browser() } +// static functions for event handling +var rcube_event = { + + /** + * returns the event key code + */ + get_keycode: function(e) + { + e = e || window.event; + return e && e.keyCode ? e.keyCode : (e && e.which ? e.which : 0); + }, + +/** + * returns modifier key (constants defined at top of file) + */ +get_modifier: function(e) +{ + var opcode = 0; + e = e || window.event; + + if (bw.mac && e) + { + opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY); + return opcode; + } + if (e) + { + opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY); + return opcode; + } +}, + +/** + * Return absolute mouse position of an event + */ +get_mouse_pos: function(e) +{ + if (!e) e = window.event; + var mX = (e.pageX) ? e.pageX : e.clientX; + var mY = (e.pageY) ? e.pageY : e.clientY; + + if (document.body && document.all) + { + mX += document.body.scrollLeft; + mY += document.body.scrollTop; + } + + return { x:mX, y:mY }; +}, + +/** + * Add an object method as event listener to a certain element + */ +add_listener: function(p) +{ + if (!p.object || !p.method) // not enough arguments + return; + if (!p.element) + p.element = document; + + if (!p.object._rc_events) + p.object._rc_events = []; + + var key = p.event + '*' + p.method; + if (!p.object._rc_events[key]) + p.object._rc_events[key] = function(e){ return p.object[p.method](e); }; + + if (p.element.addEventListener) + p.element.addEventListener(p.event, p.object._rc_events[key], false); + else if (p.element.attachEvent) + p.element.attachEvent('on'+p.event, p.object._rc_events[key]); + else + p.element['on'+p.event] = p.object._rc_events[key]; +}, + +/** + * Remove event listener + */ +remove_listener: function(p) +{ + if (!p.element) + p.element = document; + + var key = p.event + '*' + p.method; + if (p.object && p.object._rc_events && p.object._rc_events[key]) { + if (p.element.removeEventListener) + p.element.removeEventListener(p.event, p.object._rc_events[key], false); + else if (p.element.detachEvent) + p.element.detachEvent('on'+p.event, p.object._rc_events[key]); + else + p.element['on'+p.event] = null; + } +}, + +/** + * Prevent event propagation and bubbeling + */ +cancel: function(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; +} + +}; var rcube_layer_objects = new Array(); + +/** + * RoundCube generic layer (floating box) class + * + * @constructor + */ function rcube_layer(id, attributes) { this.name = id; @@ -263,6 +388,7 @@ function rcube_layer(id, attributes) } } + // check if input is a valid email address // By Cal Henderson // http://code.iamcal.com/php/rfc822/ @@ -343,6 +469,13 @@ function find_in_array() } +// make a string URL safe +function urlencode(str) +{ + return window.encodeURIComponent ? encodeURIComponent(str) : escape(str); +} + + // get any type of html objects by id/name function rcube_find_object(id, d) { @@ -372,7 +505,7 @@ function rcube_find_object(id, d) { if(d.layers[id]) obj = d.layers[id]; for(n=0; !obj && n