1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mochitest/tests/MochiKit-1.4.2/MochiKit/Position.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,236 @@ 1.4 +/*** 1.5 + 1.6 +MochiKit.Position 1.4.2 1.7 + 1.8 +See <http://mochikit.com/> for documentation, downloads, license, etc. 1.9 + 1.10 +(c) 2005-2006 Bob Ippolito and others. All rights Reserved. 1.11 + 1.12 +***/ 1.13 + 1.14 +MochiKit.Base._deps('Position', ['Base', 'DOM', 'Style']); 1.15 + 1.16 +MochiKit.Position.NAME = 'MochiKit.Position'; 1.17 +MochiKit.Position.VERSION = '1.4.2'; 1.18 +MochiKit.Position.__repr__ = function () { 1.19 + return '[' + this.NAME + ' ' + this.VERSION + ']'; 1.20 +}; 1.21 +MochiKit.Position.toString = function () { 1.22 + return this.__repr__(); 1.23 +}; 1.24 + 1.25 +MochiKit.Position.EXPORT_OK = []; 1.26 + 1.27 +MochiKit.Position.EXPORT = [ 1.28 +]; 1.29 + 1.30 + 1.31 +MochiKit.Base.update(MochiKit.Position, { 1.32 + // set to true if needed, warning: firefox performance problems 1.33 + // NOT neeeded for page scrolling, only if draggable contained in 1.34 + // scrollable elements 1.35 + includeScrollOffsets: false, 1.36 + 1.37 + /** @id MochiKit.Position.prepare */ 1.38 + prepare: function () { 1.39 + var deltaX = window.pageXOffset 1.40 + || document.documentElement.scrollLeft 1.41 + || document.body.scrollLeft 1.42 + || 0; 1.43 + var deltaY = window.pageYOffset 1.44 + || document.documentElement.scrollTop 1.45 + || document.body.scrollTop 1.46 + || 0; 1.47 + this.windowOffset = new MochiKit.Style.Coordinates(deltaX, deltaY); 1.48 + }, 1.49 + 1.50 + /** @id MochiKit.Position.cumulativeOffset */ 1.51 + cumulativeOffset: function (element) { 1.52 + var valueT = 0; 1.53 + var valueL = 0; 1.54 + do { 1.55 + valueT += element.offsetTop || 0; 1.56 + valueL += element.offsetLeft || 0; 1.57 + element = element.offsetParent; 1.58 + } while (element); 1.59 + return new MochiKit.Style.Coordinates(valueL, valueT); 1.60 + }, 1.61 + 1.62 + /** @id MochiKit.Position.realOffset */ 1.63 + realOffset: function (element) { 1.64 + var valueT = 0; 1.65 + var valueL = 0; 1.66 + do { 1.67 + valueT += element.scrollTop || 0; 1.68 + valueL += element.scrollLeft || 0; 1.69 + element = element.parentNode; 1.70 + } while (element); 1.71 + return new MochiKit.Style.Coordinates(valueL, valueT); 1.72 + }, 1.73 + 1.74 + /** @id MochiKit.Position.within */ 1.75 + within: function (element, x, y) { 1.76 + if (this.includeScrollOffsets) { 1.77 + return this.withinIncludingScrolloffsets(element, x, y); 1.78 + } 1.79 + this.xcomp = x; 1.80 + this.ycomp = y; 1.81 + this.offset = this.cumulativeOffset(element); 1.82 + if (element.style.position == "fixed") { 1.83 + this.offset.x += this.windowOffset.x; 1.84 + this.offset.y += this.windowOffset.y; 1.85 + } 1.86 + 1.87 + return (y >= this.offset.y && 1.88 + y < this.offset.y + element.offsetHeight && 1.89 + x >= this.offset.x && 1.90 + x < this.offset.x + element.offsetWidth); 1.91 + }, 1.92 + 1.93 + /** @id MochiKit.Position.withinIncludingScrolloffsets */ 1.94 + withinIncludingScrolloffsets: function (element, x, y) { 1.95 + var offsetcache = this.realOffset(element); 1.96 + 1.97 + this.xcomp = x + offsetcache.x - this.windowOffset.x; 1.98 + this.ycomp = y + offsetcache.y - this.windowOffset.y; 1.99 + this.offset = this.cumulativeOffset(element); 1.100 + 1.101 + return (this.ycomp >= this.offset.y && 1.102 + this.ycomp < this.offset.y + element.offsetHeight && 1.103 + this.xcomp >= this.offset.x && 1.104 + this.xcomp < this.offset.x + element.offsetWidth); 1.105 + }, 1.106 + 1.107 + // within must be called directly before 1.108 + /** @id MochiKit.Position.overlap */ 1.109 + overlap: function (mode, element) { 1.110 + if (!mode) { 1.111 + return 0; 1.112 + } 1.113 + if (mode == 'vertical') { 1.114 + return ((this.offset.y + element.offsetHeight) - this.ycomp) / 1.115 + element.offsetHeight; 1.116 + } 1.117 + if (mode == 'horizontal') { 1.118 + return ((this.offset.x + element.offsetWidth) - this.xcomp) / 1.119 + element.offsetWidth; 1.120 + } 1.121 + }, 1.122 + 1.123 + /** @id MochiKit.Position.absolutize */ 1.124 + absolutize: function (element) { 1.125 + element = MochiKit.DOM.getElement(element); 1.126 + if (element.style.position == 'absolute') { 1.127 + return; 1.128 + } 1.129 + MochiKit.Position.prepare(); 1.130 + 1.131 + var offsets = MochiKit.Position.positionedOffset(element); 1.132 + var width = element.clientWidth; 1.133 + var height = element.clientHeight; 1.134 + 1.135 + var oldStyle = { 1.136 + 'position': element.style.position, 1.137 + 'left': offsets.x - parseFloat(element.style.left || 0), 1.138 + 'top': offsets.y - parseFloat(element.style.top || 0), 1.139 + 'width': element.style.width, 1.140 + 'height': element.style.height 1.141 + }; 1.142 + 1.143 + element.style.position = 'absolute'; 1.144 + element.style.top = offsets.y + 'px'; 1.145 + element.style.left = offsets.x + 'px'; 1.146 + element.style.width = width + 'px'; 1.147 + element.style.height = height + 'px'; 1.148 + 1.149 + return oldStyle; 1.150 + }, 1.151 + 1.152 + /** @id MochiKit.Position.positionedOffset */ 1.153 + positionedOffset: function (element) { 1.154 + var valueT = 0, valueL = 0; 1.155 + do { 1.156 + valueT += element.offsetTop || 0; 1.157 + valueL += element.offsetLeft || 0; 1.158 + element = element.offsetParent; 1.159 + if (element) { 1.160 + p = MochiKit.Style.getStyle(element, 'position'); 1.161 + if (p == 'relative' || p == 'absolute') { 1.162 + break; 1.163 + } 1.164 + } 1.165 + } while (element); 1.166 + return new MochiKit.Style.Coordinates(valueL, valueT); 1.167 + }, 1.168 + 1.169 + /** @id MochiKit.Position.relativize */ 1.170 + relativize: function (element, oldPos) { 1.171 + element = MochiKit.DOM.getElement(element); 1.172 + if (element.style.position == 'relative') { 1.173 + return; 1.174 + } 1.175 + MochiKit.Position.prepare(); 1.176 + 1.177 + var top = parseFloat(element.style.top || 0) - 1.178 + (oldPos['top'] || 0); 1.179 + var left = parseFloat(element.style.left || 0) - 1.180 + (oldPos['left'] || 0); 1.181 + 1.182 + element.style.position = oldPos['position']; 1.183 + element.style.top = top + 'px'; 1.184 + element.style.left = left + 'px'; 1.185 + element.style.width = oldPos['width']; 1.186 + element.style.height = oldPos['height']; 1.187 + }, 1.188 + 1.189 + /** @id MochiKit.Position.clone */ 1.190 + clone: function (source, target) { 1.191 + source = MochiKit.DOM.getElement(source); 1.192 + target = MochiKit.DOM.getElement(target); 1.193 + target.style.position = 'absolute'; 1.194 + var offsets = this.cumulativeOffset(source); 1.195 + target.style.top = offsets.y + 'px'; 1.196 + target.style.left = offsets.x + 'px'; 1.197 + target.style.width = source.offsetWidth + 'px'; 1.198 + target.style.height = source.offsetHeight + 'px'; 1.199 + }, 1.200 + 1.201 + /** @id MochiKit.Position.page */ 1.202 + page: function (forElement) { 1.203 + var valueT = 0; 1.204 + var valueL = 0; 1.205 + 1.206 + var element = forElement; 1.207 + do { 1.208 + valueT += element.offsetTop || 0; 1.209 + valueL += element.offsetLeft || 0; 1.210 + 1.211 + // Safari fix 1.212 + if (element.offsetParent == document.body && MochiKit.Style.getStyle(element, 'position') == 'absolute') { 1.213 + break; 1.214 + } 1.215 + } while (element = element.offsetParent); 1.216 + 1.217 + element = forElement; 1.218 + do { 1.219 + valueT -= element.scrollTop || 0; 1.220 + valueL -= element.scrollLeft || 0; 1.221 + } while (element = element.parentNode); 1.222 + 1.223 + return new MochiKit.Style.Coordinates(valueL, valueT); 1.224 + } 1.225 +}); 1.226 + 1.227 +MochiKit.Position.__new__ = function (win) { 1.228 + var m = MochiKit.Base; 1.229 + this.EXPORT_TAGS = { 1.230 + ':common': this.EXPORT, 1.231 + ':all': m.concat(this.EXPORT, this.EXPORT_OK) 1.232 + }; 1.233 + 1.234 + m.nameFunctions(this); 1.235 +}; 1.236 + 1.237 +MochiKit.Position.__new__(this); 1.238 + 1.239 +MochiKit.Base._exportSymbols(this, MochiKit.Position); 1.240 \ No newline at end of file