Diffstat (limited to 'frontend/gamma/js/MochiKit/Position.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/MochiKit/Position.js | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/frontend/gamma/js/MochiKit/Position.js b/frontend/gamma/js/MochiKit/Position.js new file mode 100644 index 0000000..6bc5b39 --- a/dev/null +++ b/frontend/gamma/js/MochiKit/Position.js | |||
@@ -0,0 +1,218 @@ | |||
1 | /*** | ||
2 | |||
3 | MochiKit.Position 1.5 | ||
4 | |||
5 | See <http://mochikit.com/> for documentation, downloads, license, etc. | ||
6 | |||
7 | (c) 2005-2006 Bob Ippolito and others. All rights Reserved. | ||
8 | |||
9 | ***/ | ||
10 | |||
11 | MochiKit.Base._module('Position', '1.5', ['Base', 'DOM', 'Style']); | ||
12 | |||
13 | MochiKit.Base.update(MochiKit.Position, { | ||
14 | // Don't export from this module | ||
15 | __export__: false, | ||
16 | |||
17 | // set to true if needed, warning: firefox performance problems | ||
18 | // NOT neeeded for page scrolling, only if draggable contained in | ||
19 | // scrollable elements | ||
20 | includeScrollOffsets: false, | ||
21 | |||
22 | /** @id MochiKit.Position.prepare */ | ||
23 | prepare: function () { | ||
24 | var deltaX = window.pageXOffset | ||
25 | || document.documentElement.scrollLeft | ||
26 | || document.body.scrollLeft | ||
27 | || 0; | ||
28 | var deltaY = window.pageYOffset | ||
29 | || document.documentElement.scrollTop | ||
30 | || document.body.scrollTop | ||
31 | || 0; | ||
32 | this.windowOffset = new MochiKit.Style.Coordinates(deltaX, deltaY); | ||
33 | }, | ||
34 | |||
35 | /** @id MochiKit.Position.cumulativeOffset */ | ||
36 | cumulativeOffset: function (element) { | ||
37 | var valueT = 0; | ||
38 | var valueL = 0; | ||
39 | do { | ||
40 | valueT += element.offsetTop || 0; | ||
41 | valueL += element.offsetLeft || 0; | ||
42 | element = element.offsetParent; | ||
43 | } while (element); | ||
44 | return new MochiKit.Style.Coordinates(valueL, valueT); | ||
45 | }, | ||
46 | |||
47 | /** @id MochiKit.Position.realOffset */ | ||
48 | realOffset: function (element) { | ||
49 | var valueT = 0; | ||
50 | var valueL = 0; | ||
51 | do { | ||
52 | valueT += element.scrollTop || 0; | ||
53 | valueL += element.scrollLeft || 0; | ||
54 | element = element.parentNode; | ||
55 | } while (element); | ||
56 | return new MochiKit.Style.Coordinates(valueL, valueT); | ||
57 | }, | ||
58 | |||
59 | /** @id MochiKit.Position.within */ | ||
60 | within: function (element, x, y) { | ||
61 | if (this.includeScrollOffsets) { | ||
62 | return this.withinIncludingScrolloffsets(element, x, y); | ||
63 | } | ||
64 | this.xcomp = x; | ||
65 | this.ycomp = y; | ||
66 | this.offset = this.cumulativeOffset(element); | ||
67 | if (element.style.position == "fixed") { | ||
68 | this.offset.x += this.windowOffset.x; | ||
69 | this.offset.y += this.windowOffset.y; | ||
70 | } | ||
71 | |||
72 | return (y >= this.offset.y && | ||
73 | y < this.offset.y + element.offsetHeight && | ||
74 | x >= this.offset.x && | ||
75 | x < this.offset.x + element.offsetWidth); | ||
76 | }, | ||
77 | |||
78 | /** @id MochiKit.Position.withinIncludingScrolloffsets */ | ||
79 | withinIncludingScrolloffsets: function (element, x, y) { | ||
80 | var offsetcache = this.realOffset(element); | ||
81 | |||
82 | this.xcomp = x + offsetcache.x - this.windowOffset.x; | ||
83 | this.ycomp = y + offsetcache.y - this.windowOffset.y; | ||
84 | this.offset = this.cumulativeOffset(element); | ||
85 | |||
86 | return (this.ycomp >= this.offset.y && | ||
87 | this.ycomp < this.offset.y + element.offsetHeight && | ||
88 | this.xcomp >= this.offset.x && | ||
89 | this.xcomp < this.offset.x + element.offsetWidth); | ||
90 | }, | ||
91 | |||
92 | // within must be called directly before | ||
93 | /** @id MochiKit.Position.overlap */ | ||
94 | overlap: function (mode, element) { | ||
95 | if (!mode) { | ||
96 | return 0; | ||
97 | } | ||
98 | if (mode == 'vertical') { | ||
99 | return ((this.offset.y + element.offsetHeight) - this.ycomp) / | ||
100 | element.offsetHeight; | ||
101 | } | ||
102 | if (mode == 'horizontal') { | ||
103 | return ((this.offset.x + element.offsetWidth) - this.xcomp) / | ||
104 | element.offsetWidth; | ||
105 | } | ||
106 | }, | ||
107 | |||
108 | /** @id MochiKit.Position.absolutize */ | ||
109 | absolutize: function (element) { | ||
110 | element = MochiKit.DOM.getElement(element); | ||
111 | if (element.style.position == 'absolute') { | ||
112 | return; | ||
113 | } | ||
114 | MochiKit.Position.prepare(); | ||
115 | |||
116 | var offsets = MochiKit.Position.positionedOffset(element); | ||
117 | var width = element.clientWidth; | ||
118 | var height = element.clientHeight; | ||
119 | |||
120 | var oldStyle = { | ||
121 | 'position': element.style.position, | ||
122 | 'left': offsets.x - parseFloat(element.style.left || 0), | ||
123 | 'top': offsets.y - parseFloat(element.style.top || 0), | ||
124 | 'width': element.style.width, | ||
125 | 'height': element.style.height | ||
126 | }; | ||
127 | |||
128 | element.style.position = 'absolute'; | ||
129 | element.style.top = offsets.y + 'px'; | ||
130 | element.style.left = offsets.x + 'px'; | ||
131 | element.style.width = width + 'px'; | ||
132 | element.style.height = height + 'px'; | ||
133 | |||
134 | return oldStyle; | ||
135 | }, | ||
136 | |||
137 | /** @id MochiKit.Position.positionedOffset */ | ||
138 | positionedOffset: function (element) { | ||
139 | var valueT = 0, valueL = 0; | ||
140 | do { | ||
141 | valueT += element.offsetTop || 0; | ||
142 | valueL += element.offsetLeft || 0; | ||
143 | element = element.offsetParent; | ||
144 | if (element) { | ||
145 | var p = MochiKit.Style.getStyle(element, 'position'); | ||
146 | if (p == 'relative' || p == 'absolute') { | ||
147 | break; | ||
148 | } | ||
149 | } | ||
150 | } while (element); | ||
151 | return new MochiKit.Style.Coordinates(valueL, valueT); | ||
152 | }, | ||
153 | |||
154 | /** @id MochiKit.Position.relativize */ | ||
155 | relativize: function (element, oldPos) { | ||
156 | element = MochiKit.DOM.getElement(element); | ||
157 | if (element.style.position == 'relative') { | ||
158 | return; | ||
159 | } | ||
160 | MochiKit.Position.prepare(); | ||
161 | |||
162 | var top = parseFloat(element.style.top || 0) - | ||
163 | (oldPos['top'] || 0); | ||
164 | var left = parseFloat(element.style.left || 0) - | ||
165 | (oldPos['left'] || 0); | ||
166 | |||
167 | element.style.position = oldPos['position']; | ||
168 | element.style.top = top + 'px'; | ||
169 | element.style.left = left + 'px'; | ||
170 | element.style.width = oldPos['width']; | ||
171 | element.style.height = oldPos['height']; | ||
172 | }, | ||
173 | |||
174 | /** @id MochiKit.Position.clone */ | ||
175 | clone: function (source, target) { | ||
176 | source = MochiKit.DOM.getElement(source); | ||
177 | target = MochiKit.DOM.getElement(target); | ||
178 | target.style.position = 'absolute'; | ||
179 | var offsets = this.cumulativeOffset(source); | ||
180 | target.style.top = offsets.y + 'px'; | ||
181 | target.style.left = offsets.x + 'px'; | ||
182 | target.style.width = source.offsetWidth + 'px'; | ||
183 | target.style.height = source.offsetHeight + 'px'; | ||
184 | }, | ||
185 | |||
186 | /** @id MochiKit.Position.page */ | ||
187 | page: function (forElement) { | ||
188 | var valueT = 0; | ||
189 | var valueL = 0; | ||
190 | |||
191 | var element = forElement; | ||
192 | do { | ||
193 | valueT += element.offsetTop || 0; | ||
194 | valueL += element.offsetLeft || 0; | ||
195 | |||
196 | // Safari fix | ||
197 | if (element.offsetParent == document.body && MochiKit.Style.getStyle(element, 'position') == 'absolute') { | ||
198 | break; | ||
199 | } | ||
200 | } while (element = element.offsetParent); | ||
201 | |||
202 | element = forElement; | ||
203 | do { | ||
204 | valueT -= element.scrollTop || 0; | ||
205 | valueL -= element.scrollLeft || 0; | ||
206 | } while (element = element.parentNode); | ||
207 | |||
208 | return new MochiKit.Style.Coordinates(valueL, valueT); | ||
209 | } | ||
210 | }); | ||
211 | |||
212 | MochiKit.Position.__new__ = function (win) { | ||
213 | MochiKit.Base.nameFunctions(this); | ||
214 | }; | ||
215 | |||
216 | MochiKit.Position.__new__(this); | ||
217 | |||
218 | MochiKit.Base._exportSymbols(this, MochiKit.Position); | ||