prototype-bridge.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:18k
源码类别:

中间件编程

开发平台:

JavaScript

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