yui-overrides.js
// add ability for callbacks with animations
if(YAHOO.util.Anim){
YAHOO.util.Anim.prototype.animateX = function(callback, scope){
var f = function(){
this.onComplete.unsubscribe(f);
if(typeof callback == 'function'){
callback.call(scope || this, this);
}
};
this.onComplete.subscribe(f, this, true);
this.animate();
};
}
/*
* A simple enhancement to drag drop that allows you to constrain the movement of the
* DD or DDProxy object to a particular element.<br /><br />
*
* Usage:
<pre><code>
var dd = new YAHOO.util.DDProxy("dragDiv1", "proxytest",
{ dragElId: "existingProxyDiv" });
dd.startDrag = function(){
this.constrainTo('parent-id');
};
</code></pre>
* Or you can initalize it using the {@link Ext.Element} object:
<pre><code>
Ext.get('dragDiv1').initDDProxy('proxytest', {dragElId: "existingProxyDiv"}, {
startDrag : function(){
this.constrainTo('parent-id');
}
});
</code></pre>
*/
if(YAHOO.util.DragDrop){
/*
* Provides default constraint padding to "constrainTo" elements (defaults to {left: 0, right:0, top:0, bottom:0}).
* @type Object
*/
YAHOO.util.DragDrop.prototype.defaultPadding = {left:0, right:0, top:0, bottom:0};
/*
* Initializes the drag drop object's constraints to restrict movement to a certain element.
* @param {String/HTMLElement/Element} constrainTo The element to constrain to.
* @param {Object/Number} pad (optional) Pad provides a way to specify "padding" of the constraints,
* and can be either a number for symmetrical padding (4 would be equal to {left:4, right:4, top:4, bottom:4}) or
* an object containing the sides to pad. For example: {right:10, bottom:10}
* @param {Boolean} inContent (optional) Constrain the draggable in the content box of the element (inside padding and borders)
*/
YAHOO.util.DragDrop.prototype.constrainTo = function(constrainTo, pad, inContent){
if(typeof pad == 'number'){
pad = {left: pad, right:pad, top:pad, bottom:pad};
}
pad = pad || this.defaultPadding;
var b = Ext.get(this.getEl()).getBox();
var ce = Ext.get(constrainTo);
var c = ce.dom == document.body ? { x: 0, y: 0,
width: YAHOO.util.Dom.getViewportWidth(),
height: YAHOO.util.Dom.getViewportHeight()} : ce.getBox(inContent || false);
var topSpace = b.y - c.y;
var leftSpace = b.x - c.x;
this.resetConstraints();
this.setXConstraint(leftSpace - (pad.left||0), // left
c.width - leftSpace - b.width - (pad.right||0) //right
);
this.setYConstraint(topSpace - (pad.top||0), //top
c.height - topSpace - b.height - (pad.bottom||0) //bottom
);
};
}
// various Safari fixes, opera fix
if(Ext.isSafari || Ext.isOpera){// modified getXY which has the fix for Safari bug. Changes are preceded with **
YAHOO.util.Dom.getXY = function(el) {
var isIE = Ext.isIE, isSafari = Ext.isSafari, Y = YAHOO.util;
var f = function(el) {
// has to be part of document to have pageXY
if (el.parentNode === null || el.offsetParent === null ||
this.getStyle(el, 'display') == 'none') {
return false;
}
var parentNode = null;
var pos = [];
var box;
if (el.getBoundingClientRect) { // IE
box = el.getBoundingClientRect();
var doc = document;
if ( !this.inDocument(el) && parent.document != document) {// might be in a frame, need to get its scroll
doc = parent.document;
if ( !this.isAncestor(doc.documentElement, el) ) {
return false;
}
}
var scrollTop = Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
var scrollLeft = Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);
return [box.left + scrollLeft, box.top + scrollTop];
} else { // safari, opera, & gecko
pos = [el.offsetLeft, el.offsetTop];
parentNode = el.offsetParent;
var hasAbsolute = false; // ** flag if a parent is positioned
if (parentNode != el) {
while (parentNode) {
pos[0] += parentNode.offsetLeft;
pos[1] += parentNode.offsetTop;
// ** only check if needed
if(isSafari && !hasAbsolute && this.getStyle(parentNode, 'position') == 'absolute' ){
hasAbsolute = true;
}
parentNode = parentNode.offsetParent;
}
}
// ** safari doubles in some cases, use flag from offsetParent's as well
if (isSafari && (hasAbsolute || this.getStyle(el, 'position') == 'absolute')) {
pos[0] -= document.body.offsetLeft;
pos[1] -= document.body.offsetTop;
}
}
if (el.parentNode) { parentNode = el.parentNode; }
else { parentNode = null; }
while (parentNode && parentNode.tagName.toUpperCase() != 'BODY' && parentNode.tagName.toUpperCase() != 'HTML')
{ // account for any scrolled ancestors
// ** opera TR has bad scroll values, so filter them jvs
if (Y.Dom.getStyle(parentNode, 'display') != 'inline' && parentNode.tagName.toUpperCase() != 'TR') { // work around opera inline scrollLeft/Top bug
pos[0] -= parentNode.scrollLeft;
pos[1] -= parentNode.scrollTop;
}
if (parentNode.parentNode) {
parentNode = parentNode.parentNode;
} else { parentNode = null; }
}
return pos;
};
return Y.Dom.batch(el, f, Y.Dom, true);
};
// workaround for Safari anim duration speed problems
if(YAHOO.util.AnimMgr){
YAHOO.util.AnimMgr.fps = 1000;
}
// workaround for Safari 1.3 not supporting hasOwnProperty
if(YAHOO.util.Connect){
YAHOO.util.Connect.setHeader = function(o){
for(var prop in this._http_header){
// if(this._http_header.hasOwnProperty(prop)){
if(typeof this._http_header[prop] != 'function'){
o.conn.setRequestHeader(prop, this._http_header[prop]);
}
}
delete this._http_header;
this._http_header = {};
this._has_http_headers = false;
};
}
}
YAHOO.util.Region.prototype.adjust = function(t, l, b, r){
this.top += t;
this.left += l;
this.right += r;
this.bottom += b;
return this;
};
yui-ext - Copyright © 2006 Jack Slocum. |
Yahoo! UI - Copyright © 2006 Yahoo! Inc.
All rights reserved.