diff options
Diffstat (limited to 'www/js/jquery-ui-1.8.11/jquery.ui.position.js')
| -rw-r--r-- | www/js/jquery-ui-1.8.11/jquery.ui.position.js | 252 | 
1 files changed, 252 insertions, 0 deletions
| diff --git a/www/js/jquery-ui-1.8.11/jquery.ui.position.js b/www/js/jquery-ui-1.8.11/jquery.ui.position.js new file mode 100644 index 0000000..b66e59e --- /dev/null +++ b/www/js/jquery-ui-1.8.11/jquery.ui.position.js @@ -0,0 +1,252 @@ +/* + * jQuery UI Position 1.8.11 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, +	verticalPositions = /top|center|bottom/, +	center = "center", +	_position = $.fn.position, +	_offset = $.fn.offset; + +$.fn.position = function( options ) { +	if ( !options || !options.of ) { +		return _position.apply( this, arguments ); +	} + +	// make a copy, we don't want to modify arguments +	options = $.extend( {}, options ); + +	var target = $( options.of ), +		targetElem = target[0], +		collision = ( options.collision || "flip" ).split( " " ), +		offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], +		targetWidth, +		targetHeight, +		basePosition; + +	if ( targetElem.nodeType === 9 ) { +		targetWidth = target.width(); +		targetHeight = target.height(); +		basePosition = { top: 0, left: 0 }; +	// TODO: use $.isWindow() in 1.9 +	} else if ( targetElem.setTimeout ) { +		targetWidth = target.width(); +		targetHeight = target.height(); +		basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; +	} else if ( targetElem.preventDefault ) { +		// force left top to allow flipping +		options.at = "left top"; +		targetWidth = targetHeight = 0; +		basePosition = { top: options.of.pageY, left: options.of.pageX }; +	} else { +		targetWidth = target.outerWidth(); +		targetHeight = target.outerHeight(); +		basePosition = target.offset(); +	} + +	// force my and at to have valid horizontal and veritcal positions +	// if a value is missing or invalid, it will be converted to center  +	$.each( [ "my", "at" ], function() { +		var pos = ( options[this] || "" ).split( " " ); +		if ( pos.length === 1) { +			pos = horizontalPositions.test( pos[0] ) ? +				pos.concat( [center] ) : +				verticalPositions.test( pos[0] ) ? +					[ center ].concat( pos ) : +					[ center, center ]; +		} +		pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; +		pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; +		options[ this ] = pos; +	}); + +	// normalize collision option +	if ( collision.length === 1 ) { +		collision[ 1 ] = collision[ 0 ]; +	} + +	// normalize offset option +	offset[ 0 ] = parseInt( offset[0], 10 ) || 0; +	if ( offset.length === 1 ) { +		offset[ 1 ] = offset[ 0 ]; +	} +	offset[ 1 ] = parseInt( offset[1], 10 ) || 0; + +	if ( options.at[0] === "right" ) { +		basePosition.left += targetWidth; +	} else if ( options.at[0] === center ) { +		basePosition.left += targetWidth / 2; +	} + +	if ( options.at[1] === "bottom" ) { +		basePosition.top += targetHeight; +	} else if ( options.at[1] === center ) { +		basePosition.top += targetHeight / 2; +	} + +	basePosition.left += offset[ 0 ]; +	basePosition.top += offset[ 1 ]; + +	return this.each(function() { +		var elem = $( this ), +			elemWidth = elem.outerWidth(), +			elemHeight = elem.outerHeight(), +			marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, +			marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, +			collisionWidth = elemWidth + marginLeft + +				( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), +			collisionHeight = elemHeight + marginTop + +				( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), +			position = $.extend( {}, basePosition ), +			collisionPosition; + +		if ( options.my[0] === "right" ) { +			position.left -= elemWidth; +		} else if ( options.my[0] === center ) { +			position.left -= elemWidth / 2; +		} + +		if ( options.my[1] === "bottom" ) { +			position.top -= elemHeight; +		} else if ( options.my[1] === center ) { +			position.top -= elemHeight / 2; +		} + +		// prevent fractions (see #5280) +		position.left = Math.round( position.left ); +		position.top = Math.round( position.top ); + +		collisionPosition = { +			left: position.left - marginLeft, +			top: position.top - marginTop +		}; + +		$.each( [ "left", "top" ], function( i, dir ) { +			if ( $.ui.position[ collision[i] ] ) { +				$.ui.position[ collision[i] ][ dir ]( position, { +					targetWidth: targetWidth, +					targetHeight: targetHeight, +					elemWidth: elemWidth, +					elemHeight: elemHeight, +					collisionPosition: collisionPosition, +					collisionWidth: collisionWidth, +					collisionHeight: collisionHeight, +					offset: offset, +					my: options.my, +					at: options.at +				}); +			} +		}); + +		if ( $.fn.bgiframe ) { +			elem.bgiframe(); +		} +		elem.offset( $.extend( position, { using: options.using } ) ); +	}); +}; + +$.ui.position = { +	fit: { +		left: function( position, data ) { +			var win = $( window ), +				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); +			position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); +		}, +		top: function( position, data ) { +			var win = $( window ), +				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); +			position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); +		} +	}, + +	flip: { +		left: function( position, data ) { +			if ( data.at[0] === center ) { +				return; +			} +			var win = $( window ), +				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), +				myOffset = data.my[ 0 ] === "left" ? +					-data.elemWidth : +					data.my[ 0 ] === "right" ? +						data.elemWidth : +						0, +				atOffset = data.at[ 0 ] === "left" ? +					data.targetWidth : +					-data.targetWidth, +				offset = -2 * data.offset[ 0 ]; +			position.left += data.collisionPosition.left < 0 ? +				myOffset + atOffset + offset : +				over > 0 ? +					myOffset + atOffset + offset : +					0; +		}, +		top: function( position, data ) { +			if ( data.at[1] === center ) { +				return; +			} +			var win = $( window ), +				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), +				myOffset = data.my[ 1 ] === "top" ? +					-data.elemHeight : +					data.my[ 1 ] === "bottom" ? +						data.elemHeight : +						0, +				atOffset = data.at[ 1 ] === "top" ? +					data.targetHeight : +					-data.targetHeight, +				offset = -2 * data.offset[ 1 ]; +			position.top += data.collisionPosition.top < 0 ? +				myOffset + atOffset + offset : +				over > 0 ? +					myOffset + atOffset + offset : +					0; +		} +	} +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { +	$.offset.setOffset = function( elem, options ) { +		// set position first, in-case top/left are set even on static elem +		if ( /static/.test( $.curCSS( elem, "position" ) ) ) { +			elem.style.position = "relative"; +		} +		var curElem   = $( elem ), +			curOffset = curElem.offset(), +			curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0, +			curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0, +			props     = { +				top:  (options.top  - curOffset.top)  + curTop, +				left: (options.left - curOffset.left) + curLeft +			}; +		 +		if ( 'using' in options ) { +			options.using.call( elem, props ); +		} else { +			curElem.css( props ); +		} +	}; + +	$.fn.offset = function( options ) { +		var elem = this[ 0 ]; +		if ( !elem || !elem.ownerDocument ) { return null; } +		if ( options ) {  +			return this.each(function() { +				$.offset.setOffset( this, options ); +			}); +		} +		return _offset.call( this ); +	}; +} + +}( jQuery )); | 
