[ Index ] |
|
Code source de Horde 3.1.3 |
1 /** 2 * General Horde UI effects javascript. 3 * 4 * $Horde: horde/js/horde.js,v 1.14.2.5 2006/05/25 18:07:26 slusarz Exp $ 5 * 6 * See the enclosed file COPYING for license information (LGPL). If you did not 7 * receive this file, see http://www.fsf.org/copyleft/lgpl.html. 8 */ 9 10 var ToolTips = { 11 CURRENT: null, 12 TIMEOUT: null, 13 LINK: null, 14 15 attachBehavior: function() 16 { 17 links = document.getElementsByTagName('a'); 18 for (i = 0; i < links.length; i++) { 19 if (links[i].title) { 20 links[i].setAttribute('nicetitle', links[i].title); 21 links[i].removeAttribute('title'); 22 23 addEvent(links[i], 'mouseover', ToolTips.over); 24 addEvent(links[i], 'mouseout', ToolTips.out); 25 addEvent(links[i], 'focus', ToolTips.over); 26 addEvent(links[i], 'blur', ToolTips.out); 27 } 28 } 29 }, 30 31 over: function(e) 32 { 33 if (typeof ToolTips == 'undefined') { 34 return; 35 } 36 37 if (ToolTips.TIMEOUT) { 38 window.clearTimeout(ToolTips.TIMEOUT); 39 } 40 41 if (window.event && window.event.srcElement) { 42 ToolTips.LINK = window.event.srcElement; 43 } else if (e && e.target) { 44 ToolTips.LINK = e.target; 45 } 46 47 ToolTips.TIMEOUT = window.setTimeout('ToolTips.show()', 300) 48 }, 49 50 out: function() 51 { 52 if (typeof ToolTips == 'undefined') { 53 return; 54 } 55 56 if (ToolTips.TIMEOUT) { 57 window.clearTimeout(ToolTips.TIMEOUT); 58 } 59 60 if (ToolTips.CURRENT) { 61 document.getElementsByTagName('body')[0].removeChild(ToolTips.CURRENT); 62 ToolTips.CURRENT = null; 63 64 var iframe = document.getElementById('iframe_tt'); 65 if (iframe != null) { 66 iframe.style.display = 'none'; 67 } 68 } 69 }, 70 71 show: function() 72 { 73 if (typeof ToolTips == 'undefined' || !ToolTips.LINK) { 74 return; 75 } 76 77 if (ToolTips.CURRENT) { 78 ToolTips.out(); 79 } 80 81 link = ToolTips.LINK; 82 while (!link.getAttribute('nicetitle') && link.nodeName.toLowerCase() != 'body') { 83 link = link.parentNode; 84 } 85 nicetitle = link.getAttribute('nicetitle'); 86 if (!nicetitle) { 87 return; 88 } 89 90 d = document.createElement('div'); 91 d.className = 'nicetitle'; 92 d.innerHTML = nicetitle; 93 94 STD_WIDTH = 100; 95 MAX_WIDTH = 600; 96 if (window.innerWidth) { 97 MAX_WIDTH = Math.min(MAX_WIDTH, window.innerWidth - 20); 98 } 99 if (document.body && document.body.scrollWidth) { 100 MAX_WIDTH = Math.min(MAX_WIDTH, document.body.scrollWidth - 20); 101 } 102 103 nicetitle_length = 0; 104 lines = nicetitle.replace(/<br ?\/>/g, "\n").split("\n"); 105 for (i = 0; i < lines.length; i++) { 106 nicetitle_length = Math.max(nicetitle_length, lines[i].length); 107 } 108 109 h_pixels = nicetitle_length * 7; 110 t_pixels = nicetitle_length * 10; 111 112 if (h_pixels > STD_WIDTH) { 113 w = h_pixels; 114 } else if (STD_WIDTH > t_pixels) { 115 w = t_pixels; 116 } else { 117 w = STD_WIDTH; 118 } 119 120 mpos = findPos(link); 121 mx = mpos[0]; 122 my = mpos[1]; 123 124 left = mx + 20; 125 if (window.innerWidth && ((left + w) > window.innerWidth)) { 126 left = window.innerWidth - w - 40; 127 } 128 if (document.body && document.body.scrollWidth && ((left + w) > document.body.scrollWidth)) { 129 left = document.body.scrollWidth - w - 25; 130 } 131 132 d.id = 'toolTip'; 133 d.style.left = Math.max(left, 5) + 'px'; 134 d.style.width = Math.min(w, MAX_WIDTH) + 'px'; 135 d.style.top = (my + 20) + 'px'; 136 d.style.display = "block"; 137 138 try { 139 document.getElementsByTagName('body')[0].appendChild(d); 140 ToolTips.CURRENT = d; 141 142 if (typeof ToolTips_Option_Windowed_Controls != 'undefined') { 143 var iframe = document.getElementById('iframe_tt'); 144 if (iframe == null) { 145 iframe = document.createElement("<iframe src='javascript:false;' name='iframe_tt' id='iframe_tt' scrolling='no' frameborder='0' style='position:absolute; top:0px; left:0px; display:none;'></iframe>"); 146 document.getElementsByTagName('body')[0].appendChild(iframe); 147 } 148 iframe.style.width = d.offsetWidth; 149 iframe.style.height = d.offsetHeight; 150 iframe.style.top = d.style.top; 151 iframe.style.left = d.style.left; 152 iframe.style.position = "absolute"; 153 iframe.style.display = "block"; 154 d.style.zIndex = 100; 155 iframe.style.zIndex = 99; 156 } 157 } catch (e) { 158 } 159 } 160 161 }; 162 163 /** 164 * Return the [x,y] position of an object. 165 */ 166 function findPos(obj) 167 { 168 if (obj.offsetParent) { 169 for (posX = 0, posY = 0; obj.offsetParent; obj = obj.offsetParent) { 170 posX += obj.offsetLeft; 171 posY += obj.offsetTop; 172 } 173 return [posX, posY]; 174 } else { 175 return [obj.x, obj.y]; 176 } 177 } 178 179 /** 180 * Add an event listener as long as the browser supports it. Different 181 * browsers still handle these events slightly differently; in 182 * particular avoid using "this" in event functions. 183 * 184 * @author Scott Andrew 185 * @author Chuck Hagenbuch <chuck@horde.org> 186 */ 187 function addEvent(obj, evType, fn) 188 { 189 if (obj.addEventListener) { 190 obj.addEventListener(evType, fn, true); 191 return true; 192 } else if (obj.attachEvent) { 193 var r = obj.attachEvent('on' + evType, fn); 194 EventCache.add(obj, evType, fn); 195 return r; 196 } else { 197 return false; 198 } 199 } 200 201 var EventCache = function() 202 { 203 var listEvents = []; 204 205 return { 206 listEvents: listEvents, 207 208 add: function(node, sEventName, fHandler, bCapture) 209 { 210 listEvents.push(arguments); 211 }, 212 213 flush: function() 214 { 215 var i, item; 216 for (i = listEvents.length - 1; i >= 0; i = i - 1) { 217 item = listEvents[i]; 218 219 if (item[0].removeEventListener) { 220 item[0].removeEventListener(item[1], item[2], item[3]); 221 }; 222 223 /* From this point on we need the event names to be 224 * prefixed with 'on'. */ 225 if (item[1].substring(0, 2) != 'on') { 226 item[1] = 'on' + item[1]; 227 } 228 229 if (item[0].detachEvent) { 230 item[0].detachEvent(item[1], item[2]); 231 } 232 233 item[0][item[1]] = null; 234 } 235 } 236 }; 237 }(); 238 239 if (document.createElement && document.getElementsByTagName) { 240 addEvent(window, 'load', ToolTips.attachBehavior); 241 addEvent(window, 'unload', ToolTips.out); 242 addEvent(window, 'unload', EventCache.flush); 243 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 18:01:28 2007 | par Balluche grâce à PHPXref 0.7 |