[ Index ] |
|
Code source de e107 0.7.8 |
1 /** 2 * $Id: mclayer.js,v 1.4 2006/10/27 22:36:57 e107coders Exp $ 3 * 4 * Moxiecode floating layer script. 5 * 6 * @author Moxiecode 7 * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. 8 */ 9 10 function MCLayer(id) { 11 this.id = id; 12 this.settings = new Array(); 13 this.blockerElement = null; 14 this.isMSIE = navigator.appName == "Microsoft Internet Explorer"; 15 this.events = false; 16 this.autoHideCallback = null; 17 } 18 19 MCLayer.prototype = { 20 moveRelativeTo : function(re, p, a) { 21 var rep = this.getAbsPosition(re); 22 var w = parseInt(re.offsetWidth); 23 var h = parseInt(re.offsetHeight); 24 var x, y; 25 26 switch (p) { 27 case "tl": 28 break; 29 30 case "tr": 31 x = rep.absLeft + w; 32 y = rep.absTop; 33 break; 34 35 case "bl": 36 break; 37 38 case "br": 39 break; 40 } 41 42 this.moveTo(x, y); 43 }, 44 45 moveBy : function(dx, dy) { 46 var e = this.getElement(); 47 var x = parseInt(e.style.left); 48 var y = parseInt(e.style.top); 49 50 e.style.left = (x + dx) + "px"; 51 e.style.top = (y + dy) + "px"; 52 53 this.updateBlocker(); 54 }, 55 56 moveTo : function(x, y) { 57 var e = this.getElement(); 58 59 e.style.left = x + "px"; 60 e.style.top = y + "px"; 61 62 this.updateBlocker(); 63 }, 64 65 show : function() { 66 MCLayer.visibleLayer = this; 67 68 this.getElement().style.display = 'block'; 69 this.updateBlocker(); 70 }, 71 72 hide : function() { 73 this.getElement().style.display = 'none'; 74 this.updateBlocker(); 75 }, 76 77 setAutoHide : function(s, cb) { 78 this.autoHideCallback = cb; 79 this.registerEventHandlers(); 80 }, 81 82 getElement : function() { 83 return document.getElementById(this.id); 84 }, 85 86 updateBlocker : function() { 87 if (!this.isMSIE) 88 return; 89 90 var e = this.getElement(); 91 var b = this.getBlocker(); 92 var x = this.parseInt(e.style.left); 93 var y = this.parseInt(e.style.top); 94 var w = this.parseInt(e.offsetWidth); 95 var h = this.parseInt(e.offsetHeight); 96 97 b.style.left = x + 'px'; 98 b.style.top = y + 'px'; 99 b.style.width = w + 'px'; 100 b.style.height = h + 'px'; 101 b.style.display = e.style.display; 102 }, 103 104 getBlocker : function() { 105 if (!this.blockerElement) { 106 var d = document, b = d.createElement("iframe"); 107 108 b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0'; 109 b.src = 'javascript:false;'; 110 b.frameBorder = '0'; 111 b.scrolling = 'no'; 112 113 d.body.appendChild(b); 114 this.blockerElement = b; 115 } 116 117 return this.blockerElement; 118 }, 119 120 getAbsPosition : function(n) { 121 var p = {absLeft : 0, absTop : 0}; 122 123 while (n) { 124 p.absLeft += n.offsetLeft; 125 p.absTop += n.offsetTop; 126 n = n.offsetParent; 127 } 128 129 return p; 130 }, 131 132 registerEventHandlers : function() { 133 if (!this.events) { 134 var d = document; 135 136 this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown); 137 138 this.events = true; 139 } 140 }, 141 142 addEvent : function(o, n, h) { 143 if (o.attachEvent) 144 o.attachEvent("on" + n, h); 145 else 146 o.addEventListener(n, h, false); 147 }, 148 149 onMouseDown : function(e) { 150 e = typeof(e) == "undefined" ? window.event : e; 151 var b = document.body; 152 var l = MCLayer.visibleLayer; 153 154 if (l) { 155 var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX; 156 var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY; 157 var el = l.getElement(); 158 var x = parseInt(el.style.left); 159 var y = parseInt(el.style.top); 160 var w = parseInt(el.offsetWidth); 161 var h = parseInt(el.offsetHeight); 162 163 if (!(mx > x && mx < x + w && my > y && my < y + h)) { 164 MCLayer.visibleLayer = null; 165 166 if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) 167 return true; 168 169 l.hide(); 170 } 171 } 172 }, 173 174 addCSSClass : function(e, c) { 175 this.removeCSSClass(e, c); 176 var a = this.explode(' ', e.className); 177 a[a.length] = c; 178 e.className = a.join(' '); 179 }, 180 181 removeCSSClass : function(e, c) { 182 var a = this.explode(' ', e.className), i; 183 184 for (i=0; i<a.length; i++) { 185 if (a[i] == c) 186 a[i] = ''; 187 } 188 189 e.className = a.join(' '); 190 }, 191 192 explode : function(d, s) { 193 var ar = s.split(d); 194 var oar = new Array(); 195 196 for (var i = 0; i<ar.length; i++) { 197 if (ar[i] != "") 198 oar[oar.length] = ar[i]; 199 } 200 201 return oar; 202 }, 203 204 parseInt : function(s) { 205 if (s == null || s == '') 206 return 0; 207 208 return parseInt(s); 209 } 210 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Apr 1 01:23:32 2007 | par Balluche grâce à PHPXref 0.7 |