web/rsln-opendata/res/metadataplayer/test/interface 1.2/source/iresizable.js
changeset 66 8a382087127f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/rsln-opendata/res/metadataplayer/test/interface 1.2/source/iresizable.js	Tue Mar 15 13:46:46 2011 +0100
@@ -0,0 +1,453 @@
+/**
+ * Interface Elements for jQuery
+ * Resizable
+ *
+ * http://interface.eyecon.ro
+ *
+ * Copyright (c) 2006 Stefan Petre
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ *
+ */
+
+jQuery.iResize = {
+	resizeElement: null,
+	resizeDirection: null,
+	dragged: null,
+	pointer: null,
+	sizes: null,
+	position: null,
+	/**
+	 * internal: Start function
+	 */
+	startDrag: function(e) {
+		jQuery.iResize.dragged = (this.dragEl) ? this.dragEl: this;
+		jQuery.iResize.pointer = jQuery.iUtil.getPointer(e);
+
+		// Save original size
+		jQuery.iResize.sizes = {
+			width: parseInt(jQuery(jQuery.iResize.dragged).css('width')) || 0,
+			height: parseInt(jQuery(jQuery.iResize.dragged).css('height')) || 0
+		};
+
+		// Save original position
+		jQuery.iResize.position = {
+			top: parseInt(jQuery(jQuery.iResize.dragged).css('top')) || 0,
+			left: parseInt(jQuery(jQuery.iResize.dragged).css('left')) || 0
+		};
+
+		// Assign event handlers
+		jQuery(document)
+			.bind('mousemove', jQuery.iResize.moveDrag)
+			.bind('mouseup', jQuery.iResize.stopDrag);
+
+		// Callback?
+		if (typeof jQuery.iResize.dragged.resizeOptions.onDragStart === 'function') {
+			jQuery.iResize.dragged.resizeOptions.onDragStart.apply(jQuery.iResize.dragged);
+		}
+		return false;
+	},
+	/**
+	 * internal: Stop function
+	 */
+	stopDrag: function(e) {
+		// Unbind event handlers
+		jQuery(document)
+			.unbind('mousemove', jQuery.iResize.moveDrag)
+			.unbind('mouseup', jQuery.iResize.stopDrag);
+
+		// Callback?
+		if (typeof jQuery.iResize.dragged.resizeOptions.onDragStop === 'function') {
+			jQuery.iResize.dragged.resizeOptions.onDragStop.apply(jQuery.iResize.dragged);
+		}
+
+		// Remove dragged element
+		jQuery.iResize.dragged = null;
+	},
+	/**
+	 * internal: Move function
+	 */
+	moveDrag: function(e) {
+		if (!jQuery.iResize.dragged) {
+			return;
+		}
+
+		pointer = jQuery.iUtil.getPointer(e);
+
+		// Calculate new positions
+		newTop = jQuery.iResize.position.top - jQuery.iResize.pointer.y + pointer.y;
+		newLeft = jQuery.iResize.position.left - jQuery.iResize.pointer.x + pointer.x;
+		newTop = Math.max(
+						Math.min(newTop, jQuery.iResize.dragged.resizeOptions.maxBottom - jQuery.iResize.sizes.height),
+						jQuery.iResize.dragged.resizeOptions.minTop
+					);
+		newLeft = Math.max(
+						Math.min(newLeft, jQuery.iResize.dragged.resizeOptions.maxRight- jQuery.iResize.sizes.width),
+						jQuery.iResize.dragged.resizeOptions.minLeft
+					);
+
+		// Callback
+		if (typeof jQuery.iResize.dragged.resizeOptions.onDrag === 'function') {
+			var newPos = jQuery.iResize.dragged.resizeOptions.onDrag.apply(jQuery.iResize.dragged, [newLeft, newTop]);
+			if (typeof newPos == 'array' && newPos.length == 2) {
+				newLeft = newPos[0];
+				newTop = newPos[1];
+			}
+		}
+
+		// Update the element
+		jQuery.iResize.dragged.style.top = newTop + 'px';
+		jQuery.iResize.dragged.style.left = newLeft + 'px';
+
+		return false;
+	},
+	start: function(e) {
+		// Bind event handlers
+		jQuery(document)
+			.bind('mousemove', jQuery.iResize.move)
+			.bind('mouseup', jQuery.iResize.stop);
+
+		// Initialize resizable
+		jQuery.iResize.resizeElement = this.resizeElement;
+		jQuery.iResize.resizeDirection = this.resizeDirection;
+		jQuery.iResize.pointer = jQuery.iUtil.getPointer(e);
+		jQuery.iResize.sizes = {
+				width: parseInt(jQuery(this.resizeElement).css('width'))||0,
+				height: parseInt(jQuery(this.resizeElement).css('height'))||0
+			};
+		jQuery.iResize.position = {
+				top: parseInt(jQuery(this.resizeElement).css('top'))||0,
+				left: parseInt(jQuery(this.resizeElement).css('left'))||0
+			};
+
+		// Callback function
+		if (jQuery.iResize.resizeElement.resizeOptions.onStart) {
+			jQuery.iResize.resizeElement.resizeOptions.onStart.apply(jQuery.iResize.resizeElement, [this]);
+		}
+
+		return false;
+	},
+	stop: function() {
+		// Unbind event handlers
+		jQuery(document)
+			.unbind('mousemove', jQuery.iResize.move)
+			.unbind('mouseup', jQuery.iResize.stop);
+
+		// Callback function
+		if (jQuery.iResize.resizeElement.resizeOptions.onStop) {
+			jQuery.iResize.resizeElement.resizeOptions.onStop.apply(jQuery.iResize.resizeElement, [jQuery.iResize.resizeDirection]);
+		}
+
+		// Unbind
+		jQuery.iResize.resizeElement = null;
+		jQuery.iResize.resizeDirection = null;
+	},
+	getWidth: function(dx, side) {
+		return Math.min(
+						Math.max(jQuery.iResize.sizes.width + dx * side, jQuery.iResize.resizeElement.resizeOptions.minWidth),
+						jQuery.iResize.resizeElement.resizeOptions.maxWidth
+					);
+	},
+	getHeight: function(dy, side) {
+		return Math.min(
+						Math.max(jQuery.iResize.sizes.height + dy * side, jQuery.iResize.resizeElement.resizeOptions.minHeight),
+						jQuery.iResize.resizeElement.resizeOptions.maxHeight
+					);
+	},
+	getHeightMinMax: function(height) {
+		return Math.min(
+						Math.max(height, jQuery.iResize.resizeElement.resizeOptions.minHeight),
+						jQuery.iResize.resizeElement.resizeOptions.maxHeight
+					);
+	},
+	move: function(e) {
+		if (jQuery.iResize.resizeElement == null) {
+			return;
+		}
+
+		pointer = jQuery.iUtil.getPointer(e);
+		dx = pointer.x - jQuery.iResize.pointer.x;
+		dy = pointer.y - jQuery.iResize.pointer.y;
+
+		newSizes = {
+				width: jQuery.iResize.sizes.width,
+				height: jQuery.iResize.sizes.height
+			};
+		newPosition = {
+				top: jQuery.iResize.position.top,
+				left: jQuery.iResize.position.left
+			};
+
+		switch (jQuery.iResize.resizeDirection){
+			case 'e':
+				newSizes.width = jQuery.iResize.getWidth(dx,1);
+				break;
+			case 'se':
+				newSizes.width = jQuery.iResize.getWidth(dx,1);
+				newSizes.height = jQuery.iResize.getHeight(dy,1);
+				break;
+			case 'w':
+				newSizes.width = jQuery.iResize.getWidth(dx,-1);
+				newPosition.left = jQuery.iResize.position.left - newSizes.width + jQuery.iResize.sizes.width;
+				break;
+			case 'sw':
+				newSizes.width = jQuery.iResize.getWidth(dx,-1);
+				newPosition.left = jQuery.iResize.position.left - newSizes.width + jQuery.iResize.sizes.width;
+				newSizes.height = jQuery.iResize.getHeight(dy,1);
+				break;
+			case 'nw':
+				newSizes.height = jQuery.iResize.getHeight(dy,-1);
+				newPosition.top = jQuery.iResize.position.top - newSizes.height + jQuery.iResize.sizes.height;
+				newSizes.width = jQuery.iResize.getWidth(dx,-1);
+				newPosition.left = jQuery.iResize.position.left - newSizes.width + jQuery.iResize.sizes.width;
+				break;
+			case 'n':
+				newSizes.height = jQuery.iResize.getHeight(dy,-1);
+				newPosition.top = jQuery.iResize.position.top - newSizes.height + jQuery.iResize.sizes.height;
+				break;
+			case 'ne':
+				newSizes.height = jQuery.iResize.getHeight(dy,-1);
+				newPosition.top = jQuery.iResize.position.top - newSizes.height + jQuery.iResize.sizes.height;
+				newSizes.width = jQuery.iResize.getWidth(dx,1);
+				break;
+			case 's':
+				newSizes.height = jQuery.iResize.getHeight(dy,1);
+				break;
+		}
+
+		if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
+			if (jQuery.iResize.resizeDirection == 'n' || jQuery.iResize.resizeDirection == 's')
+				nWidth = newSizes.height * jQuery.iResize.resizeElement.resizeOptions.ratio;
+			else
+				nWidth = newSizes.width;
+			nHeight = jQuery.iResize.getHeightMinMax(nWidth * jQuery.iResize.resizeElement.resizeOptions.ratio);
+			nWidth = nHeight / jQuery.iResize.resizeElement.resizeOptions.ratio;
+
+			switch (jQuery.iResize.resizeDirection){
+				case 'n':
+				case 'nw':
+				case 'ne':
+					newPosition.top += newSizes.height - nHeight;
+				break;
+			}
+
+			switch (jQuery.iResize.resizeDirection){
+				case 'nw':
+				case 'w':
+				case 'sw':
+					newPosition.left += newSizes.width - nWidth;
+				break;
+			}
+
+			newSizes.height = nHeight;
+			newSizes.width = nWidth;
+		}
+
+		if (newPosition.top < jQuery.iResize.resizeElement.resizeOptions.minTop) {
+			nHeight = newSizes.height + newPosition.top - jQuery.iResize.resizeElement.resizeOptions.minTop;
+			newPosition.top = jQuery.iResize.resizeElement.resizeOptions.minTop;
+
+			if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
+				nWidth = nHeight / jQuery.iResize.resizeElement.resizeOptions.ratio;
+				switch (jQuery.iResize.resizeDirection){
+					case 'nw':
+					case 'w':
+					case 'sw':
+						newPosition.left += newSizes.width - nWidth;
+					break;
+				}
+				newSizes.width = nWidth;
+			}
+			newSizes.height = nHeight;
+		}
+
+		if (newPosition.left < jQuery.iResize.resizeElement.resizeOptions.minLeft ) {
+			nWidth = newSizes.width + newPosition.left - jQuery.iResize.resizeElement.resizeOptions.minLeft;
+			newPosition.left = jQuery.iResize.resizeElement.resizeOptions.minLeft;
+
+			if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
+				nHeight = nWidth * jQuery.iResize.resizeElement.resizeOptions.ratio;
+				switch (jQuery.iResize.resizeDirection){
+					case 'n':
+					case 'nw':
+					case 'ne':
+						newPosition.top += newSizes.height - nHeight;
+					break;
+				}
+				newSizes.height = nHeight;
+			}
+			newSizes.width = nWidth;
+		}
+
+		if (newPosition.top + newSizes.height > jQuery.iResize.resizeElement.resizeOptions.maxBottom) {
+			newSizes.height = jQuery.iResize.resizeElement.resizeOptions.maxBottom - newPosition.top;
+			if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
+				newSizes.width = newSizes.height / jQuery.iResize.resizeElement.resizeOptions.ratio;
+			}
+
+		}
+
+		if (newPosition.left + newSizes.width > jQuery.iResize.resizeElement.resizeOptions.maxRight) {
+			newSizes.width = jQuery.iResize.resizeElement.resizeOptions.maxRight - newPosition.left;
+			if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
+				newSizes.height = newSizes.width * jQuery.iResize.resizeElement.resizeOptions.ratio;
+			}
+
+		}
+
+		var newDimensions = false;
+		if (jQuery.iResize.resizeElement.resizeOptions.onResize) {
+			newDimensions = jQuery.iResize.resizeElement.resizeOptions.onResize.apply( jQuery.iResize.resizeElement, [ newSizes, newPosition ] );
+			if (newDimensions) {
+				if (newDimensions.sizes) {
+					jQuery.extend(newSizes, newDimensions.sizes);
+				}
+
+				if (newDimensions.position) {
+					jQuery.extend(newPosition, newDimensions.position);
+				}
+			}
+		}
+			elS = jQuery.iResize.resizeElement.style;
+			elS.left = newPosition.left + 'px';
+			elS.top = newPosition.top + 'px';
+			elS.width = newSizes.width + 'px';
+			elS.height = newSizes.height + 'px';
+
+		return false;
+	},
+	/**
+	 * Builds the resizable
+	 */
+	build: function(options) {
+		if (!options || !options.handlers || options.handlers.constructor != Object) {
+			return;
+		}
+
+		return this.each(
+			function() {
+				var el = this;
+				el.resizeOptions = options;
+				el.resizeOptions.minWidth = options.minWidth || 10;
+				el.resizeOptions.minHeight = options.minHeight || 10;
+				el.resizeOptions.maxWidth = options.maxWidth || 3000;
+				el.resizeOptions.maxHeight = options.maxHeight || 3000;
+				el.resizeOptions.minTop = options.minTop || -1000;
+				el.resizeOptions.minLeft = options.minLeft || -1000;
+				el.resizeOptions.maxRight = options.maxRight || 3000;
+				el.resizeOptions.maxBottom = options.maxBottom || 3000;
+				elPosition = jQuery(el).css('position');
+				if (!(elPosition == 'relative' || elPosition == 'absolute')) {
+					el.style.position = 'relative';
+				}
+
+				directions = /n|ne|e|se|s|sw|w|nw/g;
+				for (i in el.resizeOptions.handlers) {
+					if (i.toLowerCase().match(directions) != null) {
+						if (el.resizeOptions.handlers[i].constructor == String) {
+							handle = jQuery(el.resizeOptions.handlers[i]);
+							if (handle.size() > 0) {
+								el.resizeOptions.handlers[i] = handle.get(0);
+							}
+						}
+
+						if (el.resizeOptions.handlers[i].tagName) {
+							el.resizeOptions.handlers[i].resizeElement = el;
+							el.resizeOptions.handlers[i].resizeDirection = i;
+							jQuery(el.resizeOptions.handlers[i]).bind('mousedown', jQuery.iResize.start);
+						}
+					}
+				}
+
+				if (el.resizeOptions.dragHandle) {
+					if (typeof el.resizeOptions.dragHandle === 'string') {
+						handleEl = jQuery(el.resizeOptions.dragHandle);
+						if (handleEl.size() > 0) {
+							handleEl.each(function() {
+									this.dragEl = el;
+								});
+							handleEl.bind('mousedown', jQuery.iResize.startDrag);
+						}
+					} else if (el.resizeOptions.dragHandle == true) {
+						jQuery(this).bind('mousedown', jQuery.iResize.startDrag);
+					}
+				}
+			}
+		);
+	},
+	/**
+	 * Destroys the resizable
+	 */
+	destroy: function() {
+		return this.each(
+			function() {
+				var el = this;
+
+				// Unbind the handlers
+				for (i in el.resizeOptions.handlers) {
+					el.resizeOptions.handlers[i].resizeElement = null;
+					el.resizeOptions.handlers[i].resizeDirection = null;
+					jQuery(el.resizeOptions.handlers[i]).unbind('mousedown', jQuery.iResize.start);
+				}
+
+				// Remove the draghandle
+				if (el.resizeOptions.dragHandle) {
+					if (typeof el.resizeOptions.dragHandle === 'string') {
+						handle = jQuery(el.resizeOptions.dragHandle);
+						if (handle.size() > 0) {
+							handle.unbind('mousedown', jQuery.iResize.startDrag);
+						}
+					} else if (el.resizeOptions.dragHandle == true) {
+						jQuery(this).unbind('mousedown', jQuery.iResize.startDrag);
+					}
+				}
+
+				// Reset the options
+				el.resizeOptions = null;
+			}
+		);
+	}
+};
+
+
+jQuery.fn.extend ({
+		/**
+		 * Create a resizable element with a number of advanced options including callback, dragging
+		 * 
+		 * @name Resizable
+		 * @description Create a resizable element with a number of advanced options including callback, dragging
+		 * @param Hash hash A hash of parameters. All parameters are optional.
+		 * @option Hash handlers hash with keys for each resize direction (e, es, s, sw, w, nw, n) and value string selection
+		 * @option Integer minWidth (optional) the minimum width that element can be resized to
+		 * @option Integer maxWidth (optional) the maximum width that element can be resized to
+		 * @option Integer minHeight (optional) the minimum height that element can be resized to
+		 * @option Integer maxHeight (optional) the maximum height that element can be resized to
+		 * @option Integer minTop (optional) the minmum top position to wich element can be moved to
+		 * @option Integer minLeft (optional) the minmum left position to wich element can be moved to
+		 * @option Integer maxRight (optional) the maximum right position to wich element can be moved to
+		 * @option Integer maxBottom (optional) the maximum bottom position to wich element can be moved to
+		 * @option Float ratio (optional) the ratio between width and height to constrain elements sizes to that ratio
+		 * @option Mixed dragHandle (optional) true to make the element draggable, string selection for drag handle
+		 * @option Function onDragStart (optional) A function to be executed whenever the dragging starts
+		 * @option Function onDragStop (optional) A function to be executed whenever the dragging stops
+		 * @option Function onDrag (optional) A function to be executed whenever the element is dragged
+		 * @option Function onStart (optional) A function to be executed whenever the element starts to be resized
+		 * @option Function onStop (optional) A function to be executed whenever the element stops to be resized
+		 * @option Function onResize (optional) A function to be executed whenever the element is resized
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		Resizable: jQuery.iResize.build,
+		/**
+		 * Destroy a resizable
+		 * 
+		 * @name ResizableDestroy
+		 * @description Destroy a resizable
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		ResizableDestroy: jQuery.iResize.destroy
+	});
\ No newline at end of file