prototype-bridge.js
上传用户:dawnssy
上传日期:2022-08-06
资源大小:9345k
文件大小:18k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.1.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. (function(){
  8. var libFlyweight,
  9.     version = Prototype.Version.split('.'),
  10.     mouseEnterSupported = (parseInt(version[0]) >= 2) || (parseInt(version[1]) >= 7) || (parseInt(version[2]) >= 1),
  11.     mouseCache = {},
  12.     elContains = function(parent, child) {
  13.        if(parent && parent.firstChild){  
  14.          while(child) {
  15.             if(child === parent) {
  16.                 return true;
  17.             }
  18.             child = child.parentNode;               
  19.             if(child && (child.nodeType != 1)) {
  20.                 child = null;
  21.             }
  22.           }
  23.         }
  24.         return false;
  25.     },
  26.     checkRelatedTarget = function(e) {
  27.         return !elContains(e.currentTarget, pub.getRelatedTarget(e));
  28.     };
  29. Ext.lib.Dom = {
  30.     getViewWidth : function(full){
  31.         return full ? this.getDocumentWidth() : this.getViewportWidth();
  32.     },
  33.     getViewHeight : function(full){
  34.         return full ? this.getDocumentHeight() : this.getViewportHeight();
  35.     },
  36.     getDocumentHeight: function() { // missing from prototype?
  37.         var scrollHeight = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
  38.         return Math.max(scrollHeight, this.getViewportHeight());
  39.     },
  40.     getDocumentWidth: function() { // missing from prototype?
  41.         var scrollWidth = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
  42.         return Math.max(scrollWidth, this.getViewportWidth());
  43.     },
  44.     getViewportHeight: function() { // missing from prototype?
  45.         var height = self.innerHeight;
  46.         var mode = document.compatMode;
  47.         if ( (mode || Ext.isIE) && !Ext.isOpera ) {
  48.             height = (mode == "CSS1Compat") ?
  49.                     document.documentElement.clientHeight : // Standards
  50.                     document.body.clientHeight; // Quirks
  51.         }
  52.         return height;
  53.     },
  54.     getViewportWidth: function() { // missing from prototype?
  55.         var width = self.innerWidth;  // Safari
  56.         var mode = document.compatMode;
  57.         if (mode || Ext.isIE) { // IE, Gecko, Opera
  58.             width = (mode == "CSS1Compat") ?
  59.                     document.documentElement.clientWidth : // Standards
  60.                     document.body.clientWidth; // Quirks
  61.         }
  62.         return width;
  63.     },
  64.     isAncestor : function(p, c){ // missing from prototype?
  65.         var ret = false;
  66.             
  67.         p = Ext.getDom(p);
  68.         c = Ext.getDom(c);
  69.         if (p && c) {
  70.             if (p.contains) {
  71.                 return p.contains(c);
  72.             } else if (p.compareDocumentPosition) {
  73.                 return !!(p.compareDocumentPosition(c) & 16);
  74.             } else {
  75.                 while (c = c.parentNode) {
  76.                     ret = c == p || ret;                        
  77.                 }
  78.             }               
  79.         }   
  80.         return ret;
  81.     },
  82.     getRegion : function(el){
  83.         return Ext.lib.Region.getRegion(el);
  84.     },
  85.     getY : function(el){
  86.         return this.getXY(el)[1];
  87.     },
  88.     getX : function(el){
  89.         return this.getXY(el)[0];
  90.     },
  91.     getXY : function(el){ // this initially used Position.cumulativeOffset but it is not accurate enough
  92.         var p, pe, b, scroll, bd = (document.body || document.documentElement);
  93.         el = Ext.getDom(el);
  94.         if(el == bd){
  95.             return [0, 0];
  96.         }
  97.         if (el.getBoundingClientRect) {
  98.             b = el.getBoundingClientRect();
  99.             scroll = fly(document).getScroll();
  100.             return [Math.round(b.left + scroll.left), Math.round(b.top + scroll.top)];
  101.         }
  102.         var x = 0, y = 0;
  103.         p = el;
  104.         var hasAbsolute = fly(el).getStyle("position") == "absolute";
  105.         while (p) {
  106.             x += p.offsetLeft;
  107.             y += p.offsetTop;
  108.             if (!hasAbsolute && fly(p).getStyle("position") == "absolute") {
  109.                 hasAbsolute = true;
  110.             }
  111.             if (Ext.isGecko) {
  112.                 pe = fly(p);
  113.                 var bt = parseInt(pe.getStyle("borderTopWidth"), 10) || 0;
  114.                 var bl = parseInt(pe.getStyle("borderLeftWidth"), 10) || 0;
  115.                 x += bl;
  116.                 y += bt;
  117.                 if (p != el && pe.getStyle('overflow') != 'visible') {
  118.                     x += bl;
  119.                     y += bt;
  120.                 }
  121.             }
  122.             p = p.offsetParent;
  123.         }
  124.         if (Ext.isSafari && hasAbsolute) {
  125.             x -= bd.offsetLeft;
  126.             y -= bd.offsetTop;
  127.         }
  128.         if (Ext.isGecko && !hasAbsolute) {
  129.             var dbd = fly(bd);
  130.             x += parseInt(dbd.getStyle("borderLeftWidth"), 10) || 0;
  131.             y += parseInt(dbd.getStyle("borderTopWidth"), 10) || 0;
  132.         }
  133.         p = el.parentNode;
  134.         while (p && p != bd) {
  135.             if (!Ext.isOpera || (p.tagName != 'TR' && fly(p).getStyle("display") != "inline")) {
  136.                 x -= p.scrollLeft;
  137.                 y -= p.scrollTop;
  138.             }
  139.             p = p.parentNode;
  140.         }
  141.         return [x, y];
  142.     },
  143.     setXY : function(el, xy){ // this initially used Position.cumulativeOffset but it is not accurate enough
  144.         el = Ext.fly(el, '_setXY');
  145.         el.position();
  146.         var pts = el.translatePoints(xy);
  147.         if(xy[0] !== false){
  148.             el.dom.style.left = pts.left + "px";
  149.         }
  150.         if(xy[1] !== false){
  151.             el.dom.style.top = pts.top + "px";
  152.         }
  153.     },
  154.     setX : function(el, x){
  155.         this.setXY(el, [x, false]);
  156.     },
  157.     setY : function(el, y){
  158.         this.setXY(el, [false, y]);
  159.     }
  160. };
  161. Ext.lib.Event = {
  162.     getPageX : function(e){
  163.         return Event.pointerX(e.browserEvent || e);
  164.     },
  165.     getPageY : function(e){
  166.         return Event.pointerY(e.browserEvent || e);
  167.     },
  168.     getXY : function(e){
  169.         e = e.browserEvent || e;
  170.         return [Event.pointerX(e), Event.pointerY(e)];
  171.     },
  172.     getTarget : function(e){
  173.         return Event.element(e.browserEvent || e);
  174.     },
  175.     resolveTextNode: Ext.isGecko ? function(node){
  176.         if(!node){
  177.             return;
  178.         }
  179.         var s = HTMLElement.prototype.toString.call(node);
  180.         if(s == '[xpconnect wrapped native prototype]' || s == '[object XULElement]'){
  181.             return;
  182.         }
  183.         return node.nodeType == 3 ? node.parentNode : node;
  184.     } : function(node){
  185.         return node && node.nodeType == 3 ? node.parentNode : node;
  186.     },
  187.     getRelatedTarget: function(ev) { // missing from prototype?
  188.         ev = ev.browserEvent || ev;
  189.         var t = ev.relatedTarget;
  190.         if (!t) {
  191.             if (ev.type == "mouseout") {
  192.                 t = ev.toElement;
  193.             } else if (ev.type == "mouseover") {
  194.                 t = ev.fromElement;
  195.             }
  196.         }
  197.         return this.resolveTextNode(t);
  198.     },
  199.     on : function(el, eventName, fn){
  200.         if((eventName == 'mouseenter' || eventName == 'mouseleave') && !mouseEnterSupported){
  201.             var item = mouseCache[el.id] || (mouseCache[el.id] = {});
  202.             item[eventName] = fn;
  203.             fn = fn.createInterceptor(checkRelatedTarget);
  204.             eventName = (eventName == 'mouseenter') ? 'mouseover' : 'mouseout';
  205.         }
  206.         Event.observe(el, eventName, fn, false);
  207.     },
  208.     un : function(el, eventName, fn){
  209.         if((eventName == 'mouseenter' || eventName == 'mouseleave') && !mouseEnterSupported){
  210.             var item = mouseCache[el.id], 
  211.                 ev = item && item[eventName];
  212.             if(ev){
  213.                 fn = ev.fn;
  214.                 delete item[eventName];
  215.                 eventName = (eventName == 'mouseenter') ? 'mouseover' : 'mouseout';
  216.             }
  217.         }
  218.         Event.stopObserving(el, eventName, fn, false);
  219.     },
  220.     purgeElement : function(el){
  221.         // no equiv?
  222.     },
  223.     preventDefault : function(e){   // missing from prototype?
  224.         e = e.browserEvent || e;
  225.         if(e.preventDefault) {
  226.             e.preventDefault();
  227.         } else {
  228.             e.returnValue = false;
  229.         }
  230.     },
  231.     stopPropagation : function(e){   // missing from prototype?
  232.         e = e.browserEvent || e;
  233.         if(e.stopPropagation) {
  234.             e.stopPropagation();
  235.         } else {
  236.             e.cancelBubble = true;
  237.         }
  238.     },
  239.     stopEvent : function(e){
  240.         Event.stop(e.browserEvent || e);
  241.     },
  242.     onAvailable : function(id, fn, scope){  // no equiv
  243.         var start = new Date(), iid;
  244.         var f = function(){
  245.             if(start.getElapsed() > 10000){
  246.                 clearInterval(iid);
  247.             }
  248.             var el = document.getElementById(id);
  249.             if(el){
  250.                 clearInterval(iid);
  251.                 fn.call(scope||window, el);
  252.             }
  253.         };
  254.         iid = setInterval(f, 50);
  255.     }
  256. };
  257. Ext.lib.Ajax = function(){
  258.     var createSuccess = function(cb){
  259.          return cb.success ? function(xhr){
  260.             cb.success.call(cb.scope||window, createResponse(cb, xhr));
  261.          } : Ext.emptyFn;
  262.     };
  263.     var createFailure = function(cb){
  264.          return cb.failure ? function(xhr){
  265.             cb.failure.call(cb.scope||window, createResponse(cb, xhr));
  266.          } : Ext.emptyFn;
  267.     };
  268.     var createResponse = function(cb, xhr){
  269.         var headerObj = {},
  270.             headerStr,              
  271.             t,
  272.             s;
  273.         try {
  274.             headerStr = xhr.getAllResponseHeaders();   
  275.             Ext.each(headerStr.replace(/rn/g, 'n').split('n'), function(v){
  276.                 t = v.indexOf(':');
  277.                 if(t >= 0){
  278.                     s = v.substr(0, t).toLowerCase();
  279.                     if(v.charAt(t + 1) == ' '){
  280.                         ++t;
  281.                     }
  282.                     headerObj[s] = v.substr(t + 1);
  283.                 }
  284.             });
  285.         } catch(e) {}
  286.         
  287.         return {
  288.             responseText: xhr.responseText,
  289.             responseXML : xhr.responseXML,
  290.             argument: cb.argument,
  291.             status: xhr.status,
  292.             statusText: xhr.statusText,
  293.             getResponseHeader : function(header){return headerObj[header.toLowerCase()];},
  294.             getAllResponseHeaders : function(){return headerStr}
  295.         };
  296.     };
  297.     return {
  298.         request : function(method, uri, cb, data, options){
  299.             var o = {
  300.                 method: method,
  301.                 parameters: data || '',
  302.                 timeout: cb.timeout,
  303.                 onSuccess: createSuccess(cb),
  304.                 onFailure: createFailure(cb)
  305.             };
  306.             if(options){
  307.                 var hs = options.headers;
  308.                 if(hs){
  309.                     o.requestHeaders = hs;
  310.                 }
  311.                 if(options.xmlData){
  312.                     method = (method ? method : (options.method ? options.method : 'POST'));
  313.                     if (!hs || !hs['Content-Type']){
  314.                         o.contentType = 'text/xml';
  315.                     }
  316.                     o.postBody = options.xmlData;
  317.                     delete o.parameters;
  318.                 }
  319.                 if(options.jsonData){
  320.                     method = (method ? method : (options.method ? options.method : 'POST'));
  321.                     if (!hs || !hs['Content-Type']){
  322.                         o.contentType = 'application/json';
  323.                     }
  324.                     o.postBody = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
  325.                     delete o.parameters;
  326.                 }
  327.             }
  328.             new Ajax.Request(uri, o);
  329.         },
  330.         formRequest : function(form, uri, cb, data, isUpload, sslUri){
  331.             new Ajax.Request(uri, {
  332.                 method: Ext.getDom(form).method ||'POST',
  333.                 parameters: Form.serialize(form)+(data?'&'+data:''),
  334.                 timeout: cb.timeout,
  335.                 onSuccess: createSuccess(cb),
  336.                 onFailure: createFailure(cb)
  337.             });
  338.         },
  339.         isCallInProgress : function(trans){
  340.             return false;
  341.         },
  342.         abort : function(trans){
  343.             return false;
  344.         },
  345.         
  346.         serializeForm : function(form){
  347.             return Form.serialize(form.dom||form);
  348.         }
  349.     };
  350. }();
  351. Ext.lib.Anim = function(){
  352.     
  353.     var easings = {
  354.         easeOut: function(pos) {
  355.             return 1-Math.pow(1-pos,2);
  356.         },
  357.         easeIn: function(pos) {
  358.             return 1-Math.pow(1-pos,2);
  359.         }
  360.     };
  361.     var createAnim = function(cb, scope){
  362.         return {
  363.             stop : function(skipToLast){
  364.                 this.effect.cancel();
  365.             },
  366.             isAnimated : function(){
  367.                 return this.effect.state == 'running';
  368.             },
  369.             proxyCallback : function(){
  370.                 Ext.callback(cb, scope);
  371.             }
  372.         };
  373.     };
  374.     return {
  375.         scroll : function(el, args, duration, easing, cb, scope){
  376.             // not supported so scroll immediately?
  377.             var anim = createAnim(cb, scope);
  378.             el = Ext.getDom(el);
  379.             if(typeof args.scroll.to[0] == 'number'){
  380.                 el.scrollLeft = args.scroll.to[0];
  381.             }
  382.             if(typeof args.scroll.to[1] == 'number'){
  383.                 el.scrollTop = args.scroll.to[1];
  384.             }
  385.             anim.proxyCallback();
  386.             return anim;
  387.         },
  388.         motion : function(el, args, duration, easing, cb, scope){
  389.             return this.run(el, args, duration, easing, cb, scope);
  390.         },
  391.         color : function(el, args, duration, easing, cb, scope){
  392.             return this.run(el, args, duration, easing, cb, scope);
  393.         },
  394.         run : function(el, args, duration, easing, cb, scope, type){
  395.             var o = {};
  396.             for(var k in args){
  397.                 switch(k){   // scriptaculous doesn't support, so convert these
  398.                     case 'points':
  399.                         var by, pts, e = Ext.fly(el, '_animrun');
  400.                         e.position();
  401.                         if(by = args.points.by){
  402.                             var xy = e.getXY();
  403.                             pts = e.translatePoints([xy[0]+by[0], xy[1]+by[1]]);
  404.                         }else{
  405.                             pts = e.translatePoints(args.points.to);
  406.                         }
  407.                         o.left = pts.left+'px';
  408.                         o.top = pts.top+'px';
  409.                     break;
  410.                     case 'width':
  411.                         o.width = args.width.to+'px';
  412.                     break;
  413.                     case 'height':
  414.                         o.height = args.height.to+'px';
  415.                     break;
  416.                     case 'opacity':
  417.                         o.opacity = String(args.opacity.to);
  418.                     break;
  419.                     default:
  420.                         o[k] = String(args[k].to);
  421.                     break;
  422.                 }
  423.             }
  424.             var anim = createAnim(cb, scope);
  425.             anim.effect = new Effect.Morph(Ext.id(el), {
  426.                 duration: duration,
  427.                 afterFinish: anim.proxyCallback,
  428.                 transition: easings[easing] || Effect.Transitions.linear,
  429.                 style: o
  430.             });
  431.             return anim;
  432.         }
  433.     };
  434. }();
  435. // all lib flyweight calls use their own flyweight to prevent collisions with developer flyweights
  436. function fly(el){
  437.     if(!libFlyweight){
  438.         libFlyweight = new Ext.Element.Flyweight();
  439.     }
  440.     libFlyweight.dom = el;
  441.     return libFlyweight;
  442. }
  443.     
  444. Ext.lib.Region = function(t, r, b, l) {
  445.     this.top = t;
  446.     this[1] = t;
  447.     this.right = r;
  448.     this.bottom = b;
  449.     this.left = l;
  450.     this[0] = l;
  451. };
  452. Ext.lib.Region.prototype = {
  453.     contains : function(region) {
  454.         return ( region.left   >= this.left   &&
  455.                  region.right  <= this.right  &&
  456.                  region.top    >= this.top    &&
  457.                  region.bottom <= this.bottom    );
  458.     },
  459.     getArea : function() {
  460.         return ( (this.bottom - this.top) * (this.right - this.left) );
  461.     },
  462.     intersect : function(region) {
  463.         var t = Math.max( this.top,    region.top    );
  464.         var r = Math.min( this.right,  region.right  );
  465.         var b = Math.min( this.bottom, region.bottom );
  466.         var l = Math.max( this.left,   region.left   );
  467.         if (b >= t && r >= l) {
  468.             return new Ext.lib.Region(t, r, b, l);
  469.         } else {
  470.             return null;
  471.         }
  472.     },
  473.     union : function(region) {
  474.         var t = Math.min( this.top,    region.top    );
  475.         var r = Math.max( this.right,  region.right  );
  476.         var b = Math.max( this.bottom, region.bottom );
  477.         var l = Math.min( this.left,   region.left   );
  478.         return new Ext.lib.Region(t, r, b, l);
  479.     },
  480.     constrainTo : function(r) {
  481.             this.top = this.top.constrain(r.top, r.bottom);
  482.             this.bottom = this.bottom.constrain(r.top, r.bottom);
  483.             this.left = this.left.constrain(r.left, r.right);
  484.             this.right = this.right.constrain(r.left, r.right);
  485.             return this;
  486.     },
  487.     adjust : function(t, l, b, r){
  488.         this.top += t;
  489.         this.left += l;
  490.         this.right += r;
  491.         this.bottom += b;
  492.         return this;
  493.     }
  494. };
  495. Ext.lib.Region.getRegion = function(el) {
  496.     var p = Ext.lib.Dom.getXY(el);
  497.     var t = p[1];
  498.     var r = p[0] + el.offsetWidth;
  499.     var b = p[1] + el.offsetHeight;
  500.     var l = p[0];
  501.     return new Ext.lib.Region(t, r, b, l);
  502. };
  503. Ext.lib.Point = function(x, y) {
  504.    if (Ext.isArray(x)) {
  505.       y = x[1];
  506.       x = x[0];
  507.    }
  508.     this.x = this.right = this.left = this[0] = x;
  509.     this.y = this.top = this.bottom = this[1] = y;
  510. };
  511. Ext.lib.Point.prototype = new Ext.lib.Region();
  512. // prevent IE leaks
  513. if(Ext.isIE) {
  514.     function fnCleanUp() {
  515.         var p = Function.prototype;
  516.         delete p.createSequence;
  517.         delete p.defer;
  518.         delete p.createDelegate;
  519.         delete p.createCallback;
  520.         delete p.createInterceptor;
  521.         window.detachEvent("onunload", fnCleanUp);
  522.     }
  523.     window.attachEvent("onunload", fnCleanUp);
  524. }
  525. })();