Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / yui-bridge.html
1 <html>\r
2 <head>\r
3   <title>The source code</title>\r
4     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
5     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
6 </head>\r
7 <body  onload="prettyPrint();">\r
8     <pre class="prettyprint lang-js">if(typeof YAHOO == "undefined"){
9     throw "Unable to load Ext, core YUI utilities (yahoo, dom, event) not found.";
10 }
11
12 (function(){
13     var E = YAHOO.util.Event,
14         D = YAHOO.util.Dom,
15         CN = YAHOO.util.Connect,
16         ES = YAHOO.util.Easing,
17         A = YAHOO.util.Anim,
18         libFlyweight,
19         version = YAHOO.env.getVersion('yahoo').version.split('.'),
20         mouseEnterSupported = parseInt(version[0]) >= 3,
21         mouseCache = {},
22         isXUL = Ext.isGecko ? function(node){
23             return Object.prototype.toString.call(node) == '[object XULElement]';
24         } : function(){
25         }, isTextNode = Ext.isGecko ? function(node){
26             try{
27                 return node.nodeType == 3;
28             }catch (e){
29                 return false;
30             }
31         } : function(node){
32             return node.nodeType == 3;
33         }, elContains = function(parent, child){
34             if(parent && parent.firstChild){
35                 while(child){
36                     if(child === parent){
37                         return true;
38                     }
39                     try{
40                         child = child.parentNode;
41                     }catch (e){
42                         return false;
43                     }
44                     if(child && (child.nodeType != 1)){
45                         child = null;
46                     }
47                 }
48             }
49             return false;
50         }, checkRelatedTarget = function(e){
51             var related = Ext.lib.Event.getRelatedTarget(e);
52             return !(isXUL(related) || elContains(e.currentTarget, related));
53         };
54
55 Ext.lib.Dom = {
56     getViewWidth : function(full){
57         return full ? D.getDocumentWidth() : D.getViewportWidth();
58     },
59
60     getViewHeight : function(full){
61         return full ? D.getDocumentHeight() : D.getViewportHeight();
62     },
63
64     isAncestor : function(haystack, needle){
65         return D.isAncestor(haystack, needle);
66     },
67
68     getRegion : function(el){
69         return D.getRegion(el);
70     },
71
72     getY : function(el){
73         return this.getXY(el)[1];
74     },
75
76     getX : function(el){
77         return this.getXY(el)[0];
78     },
79
80     // original version based on YahooUI getXY
81     // this version fixes several issues in Safari and FF
82     // and boosts performance by removing the batch overhead, repetitive dom lookups and array index calls
83     getXY : function(el){
84         var p, pe, b, scroll, bd = (document.body || document.documentElement);
85         el = Ext.getDom(el);
86
87         if(el == bd){
88             return [0, 0];
89         }
90
91         if (el.getBoundingClientRect) {
92             b = el.getBoundingClientRect();
93             scroll = fly(document).getScroll();
94             return [Math.round(b.left + scroll.left), Math.round(b.top + scroll.top)];
95         }
96         var x = 0, y = 0;
97
98         p = el;
99
100         var hasAbsolute = fly(el).getStyle("position") == "absolute";
101
102         while (p) {
103
104             x += p.offsetLeft;
105             y += p.offsetTop;
106
107             if (!hasAbsolute && fly(p).getStyle("position") == "absolute") {
108                 hasAbsolute = true;
109             }
110
111             if (Ext.isGecko) {
112                 pe = fly(p);
113
114                 var bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
115                 var bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
116
117
118                 x += bl;
119                 y += bt;
120
121
122                 if (p != el && pe.getStyle('overflow') != 'visible') {
123                     x += bl;
124                     y += bt;
125                 }
126             }
127             p = p.offsetParent;
128         }
129
130         if (Ext.isSafari && hasAbsolute) {
131             x -= bd.offsetLeft;
132             y -= bd.offsetTop;
133         }
134
135         if (Ext.isGecko && !hasAbsolute) {
136             var dbd = fly(bd);
137             x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
138             y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
139         }
140
141         p = el.parentNode;
142         while (p && p != bd) {
143             if (!Ext.isOpera || (p.tagName != 'TR' && fly(p).getStyle("display") != "inline")) {
144                 x -= p.scrollLeft;
145                 y -= p.scrollTop;
146             }
147             p = p.parentNode;
148         }
149         return [x, y];
150     },
151
152     setXY : function(el, xy){
153         el = Ext.fly(el, '_setXY');
154         el.position();
155         var pts = el.translatePoints(xy);
156         if(xy[0] !== false){
157             el.dom.style.left = pts.left + "px";
158         }
159         if(xy[1] !== false){
160             el.dom.style.top = pts.top + "px";
161         }
162     },
163
164     setX : function(el, x){
165         this.setXY(el, [x, false]);
166     },
167
168     setY : function(el, y){
169         this.setXY(el, [false, y]);
170     }
171 };
172
173 Ext.lib.Event = {
174     getPageX : function(e){
175         return E.getPageX(e.browserEvent || e);
176     },
177
178     getPageY : function(e){
179         return E.getPageY(e.browserEvent || e);
180     },
181
182     getXY : function(e){
183         return E.getXY(e.browserEvent || e);
184     },
185
186     getTarget : function(e){
187         return E.getTarget(e.browserEvent || e);
188     },
189
190     getRelatedTarget : function(e){
191         return E.getRelatedTarget(e.browserEvent || e);
192     },
193
194     on : function(el, eventName, fn, scope, override){
195         if((eventName == 'mouseenter' || eventName == 'mouseleave') && !mouseEnterSupported){
196             var item = mouseCache[el.id] || (mouseCache[el.id] = {});
197             item[eventName] = fn;
198             fn = fn.createInterceptor(checkRelatedTarget);
199             eventName = (eventName == 'mouseenter') ? 'mouseover' : 'mouseout';
200         }
201         E.on(el, eventName, fn, scope, override);
202     },
203
204     un : function(el, eventName, fn){
205         if((eventName == 'mouseenter' || eventName == 'mouseleave') && !mouseEnterSupported){
206             var item = mouseCache[el.id], 
207                 ev = item && item[eventName];
208
209             if(ev){
210                 fn = ev.fn;
211                 delete item[eventName];
212                 eventName = (eventName == 'mouseenter') ? 'mouseover' : 'mouseout';
213             }
214         }
215         E.removeListener(el, eventName, fn);;
216     },
217
218     purgeElement : function(el){
219         E.purgeElement(el);
220     },
221
222     preventDefault : function(e){
223         E.preventDefault(e.browserEvent || e);
224     },
225
226     stopPropagation : function(e){
227         E.stopPropagation(e.browserEvent || e);
228     },
229
230     stopEvent : function(e){
231         E.stopEvent(e.browserEvent || e);
232     },
233
234     onAvailable : function(el, fn, scope, override){
235         return E.onAvailable(el, fn, scope, override);
236     }
237 };
238
239 Ext.lib.Ajax = {
240     request : function(method, uri, cb, data, options){
241         if(options){
242             var hs = options.headers;
243             if(hs){
244                 for(var h in hs){
245                     if(hs.hasOwnProperty(h)){
246                         CN.initHeader(h, hs[h], false);
247                     }
248                 }
249             }
250             if(options.xmlData){
251                 if (!hs || !hs['Content-Type']){
252                     CN.initHeader('Content-Type', 'text/xml', false);
253                 }
254                 method = (method ? method : (options.method ? options.method : 'POST'));
255                 data = options.xmlData;
256             }else if(options.jsonData){
257                 if (!hs || !hs['Content-Type']){
258                     CN.initHeader('Content-Type', 'application/json', false);
259                 }
260                 method = (method ? method : (options.method ? options.method : 'POST'));
261                 data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
262             }
263         }
264         return CN.asyncRequest(method, uri, cb, data);
265     },
266
267     formRequest : function(form, uri, cb, data, isUpload, sslUri){
268         CN.setForm(form, isUpload, sslUri);
269         return CN.asyncRequest(Ext.getDom(form).method ||'POST', uri, cb, data);
270     },
271
272     isCallInProgress : function(trans){
273         return CN.isCallInProgress(trans);
274     },
275
276     abort : function(trans){
277         return CN.abort(trans);
278     },
279
280     serializeForm : function(form){
281         var d = CN.setForm(form.dom || form);
282         CN.resetFormState();
283         return d;
284     }
285 };
286
287 Ext.lib.Region = YAHOO.util.Region;
288 Ext.lib.Point = YAHOO.util.Point;
289
290
291 Ext.lib.Anim = {
292     scroll : function(el, args, duration, easing, cb, scope){
293         this.run(el, args, duration, easing, cb, scope, YAHOO.util.Scroll);
294     },
295
296     motion : function(el, args, duration, easing, cb, scope){
297         this.run(el, args, duration, easing, cb, scope, YAHOO.util.Motion);
298     },
299
300     color : function(el, args, duration, easing, cb, scope){
301         this.run(el, args, duration, easing, cb, scope, YAHOO.util.ColorAnim);
302     },
303
304     run : function(el, args, duration, easing, cb, scope, type){
305         type = type || YAHOO.util.Anim;
306         if(typeof easing == "string"){
307             easing = YAHOO.util.Easing[easing];
308         }
309         var anim = new type(el, args, duration, easing);
310         anim.animateX(function(){
311             Ext.callback(cb, scope);
312         });
313         return anim;
314     }
315 };
316
317 // all lib flyweight calls use their own flyweight to prevent collisions with developer flyweights
318 function fly(el){
319     if(!libFlyweight){
320         libFlyweight = new Ext.Element.Flyweight();
321     }
322     libFlyweight.dom = el;
323     return libFlyweight;
324 }
325
326 // prevent IE leaks
327 if(Ext.isIE) {
328     function fnCleanUp() {
329         var p = Function.prototype;
330         delete p.createSequence;
331         delete p.defer;
332         delete p.createDelegate;
333         delete p.createCallback;
334         delete p.createInterceptor;
335
336         window.detachEvent("onunload", fnCleanUp);
337     }
338     window.attachEvent("onunload", fnCleanUp);
339 }
340 // various overrides
341
342 // add ability for callbacks with animations
343 if(YAHOO.util.Anim){
344     YAHOO.util.Anim.prototype.animateX = function(callback, scope){
345         var f = function(){
346             this.onComplete.unsubscribe(f);
347             if(typeof callback == "function"){
348                 callback.call(scope || this, this);
349             }
350         };
351         this.onComplete.subscribe(f, this, true);
352         this.animate();
353     };
354 }
355
356 if(YAHOO.util.DragDrop && Ext.dd.DragDrop){
357     YAHOO.util.DragDrop.defaultPadding = Ext.dd.DragDrop.defaultPadding;
358     YAHOO.util.DragDrop.constrainTo = Ext.dd.DragDrop.constrainTo;
359 }
360
361 YAHOO.util.Dom.getXY = function(el) {
362     var f = function(el) {
363         return Ext.lib.Dom.getXY(el);
364     };
365     return YAHOO.util.Dom.batch(el, f, YAHOO.util.Dom, true);
366 };
367
368
369 // workaround for Safari anim duration speed problems
370 if(YAHOO.util.AnimMgr){
371     YAHOO.util.AnimMgr.fps = 1000;
372 }
373
374 YAHOO.util.Region.prototype.adjust = function(t, l, b, r){
375     this.top += t;
376     this.left += l;
377     this.right += r;
378     this.bottom += b;
379     return this;
380 };
381     
382 YAHOO.util.Region.prototype.constrainTo = function(r) {
383     this.top = this.top.constrain(r.top, r.bottom);
384     this.bottom = this.bottom.constrain(r.top, r.bottom);
385     this.left = this.left.constrain(r.left, r.right);
386     this.right = this.right.constrain(r.left, r.right);
387     return this;
388 };
389
390
391 })();</pre>    \r
392 </body>\r
393 </html>