web/res/metadataplayer/test/interface 1.2/source/ifxopenclose.js
changeset 99 6cb4d10f0b8b
child 133 9578d3ddce17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/test/interface 1.2/source/ifxopenclose.js	Wed Apr 06 16:26:16 2011 +0200
@@ -0,0 +1,227 @@
+/**
+ * Interface Elements for jQuery
+ * FX - open/close/switch
+ * 
+ * http://interface.eyecon.ro
+ * 
+ * Copyright (c) 2006 Stefan Petre
+ * Dual licensed under the MIT (MIT-LICENSE.txt) 
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *   
+ *
+ */
+
+/**
+ * Applies an open/close animation to element
+ */
+jQuery.fn.extend(
+	{
+		/**
+		 * @name CloseVertically
+		 * @description closes the element vertically
+		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
+		 * @param Function callback (optional) A function to be executed whenever the animation completes.
+		 * @param String easing (optional) The name of the easing effect that you want to use.
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		CloseVertically : function (speed, callback, easing) {
+			return this.queue('interfaceFX', function(){
+				new jQuery.fx.OpenClose(this, speed, callback, 'vertically', 'close', easing);
+			});
+		},
+		
+		/**
+		 * @name CloseHorizontally
+		 * @description closes the element horizontally
+		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
+		 * @param Function callback (optional) A function to be executed whenever the animation completes.
+		 * @param String easing (optional) The name of the easing effect that you want to use.
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		CloseHorizontally : function (speed, callback, easing) {
+			return this.queue('interfaceFX', function(){
+				new jQuery.fx.OpenClose(this, speed, callback, 'horizontally', 'close', easing);
+			});
+		},
+		
+		/**
+		 * @name SwitchHorizontally
+		 * @description opens/closes the element horizontally
+		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
+		 * @param Function callback (optional) A function to be executed whenever the animation completes.
+		 * @param String easing (optional) The name of the easing effect that you want to use.
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		SwitchHorizontally : function (speed, callback, easing) 
+		{
+			return this.queue('interfaceFX', function(){
+				if (jQuery.css(this, 'display') == 'none') {
+					new jQuery.fx.OpenClose(this, speed, callback, 'horizontally', 'open', easing);
+				} else {
+					new jQuery.fx.OpenClose(this, speed, callback, 'horizontally', 'close', easing);
+				}
+			});
+		},
+		
+		/**
+		 * @name SwitchVertically
+		 * @description opens/closes the element vertically
+		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
+		 * @param Function callback (optional) A function to be executed whenever the animation completes.
+		 * @param String easing (optional) The name of the easing effect that you want to use.
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		SwitchVertically : function (speed, callback, easing) 
+		{
+			return this.queue('interfaceFX', function(){
+				if (jQuery.css(this, 'display') == 'none') {
+					new jQuery.fx.OpenClose(this, speed, callback, 'vertically', 'open', easing);
+				} else {
+					new jQuery.fx.OpenClose(this, speed, callback, 'vertically', 'close', easing);
+				}
+			});
+		},
+		
+		/**
+		 * @name OpenVertically
+		 * @description opens the element vertically
+		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
+		 * @param Function callback (optional) A function to be executed whenever the animation completes.
+		 * @param String easing (optional) The name of the easing effect that you want to use.
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		OpenVertically : function (speed, callback, easing) {
+			return this.queue('interfaceFX', function(){
+				new jQuery.fx.OpenClose(this, speed, callback, 'vertically', 'open', easing);
+			});
+		},
+		
+		/**
+		 * @name OpenHorizontally
+		 * @description opens the element horizontally
+		 * @param Mixed speed animation speed, integer for miliseconds, string ['slow' | 'normal' | 'fast']
+		 * @param Function callback (optional) A function to be executed whenever the animation completes.
+		 * @param String easing (optional) The name of the easing effect that you want to use.
+		 * @type jQuery
+		 * @cat Plugins/Interface
+		 * @author Stefan Petre
+		 */
+		OpenHorizontally : function (speed, callback, easing) {
+			return this.queue('interfaceFX', function(){
+				new jQuery.fx.OpenClose(this, speed, callback, 'horizontally', 'open', easing);
+			});
+		}
+	}
+);
+
+jQuery.fx.OpenClose = function (e, speed, callback, direction, type, easing)
+{
+	if (!jQuery.fxCheckTag(e)) {
+		jQuery.dequeue(e, 'interfaceFX');
+		return false;
+	}
+	var z = this;
+	var restoreStyle = false;
+	z.el = jQuery(e);
+	z.easing = typeof callback == 'string' ? callback : easing||null;
+	z.callback = typeof callback == 'function' ? callback : null;
+	z.type = type;
+	z.speed = speed;
+	z.oldP = jQuery.iUtil.getSize(e);
+	z.oldStyle = {};
+	z.oldStyle.position = z.el.css('position');
+	z.oldStyle.display = z.el.css('display');
+	if (z.oldStyle.display == 'none') {
+		oldVisibility = z.el.css('visibility');
+		z.el.show();
+		restoreStyle = true;
+	}
+	z.oldStyle.top = z.el.css('top');
+	z.oldStyle.left = z.el.css('left');
+	if (restoreStyle) {
+		z.el.hide();
+		z.el.css('visibility', oldVisibility);
+	}
+	z.oldStyle.width = z.oldP.w + 'px';
+	z.oldStyle.height = z.oldP.h + 'px';
+	z.oldStyle.overflow = z.el.css('overflow');
+	z.oldP.top = parseInt(z.oldStyle.top)||0;
+	z.oldP.left = parseInt(z.oldStyle.left)||0;
+	//z.el.show();
+	
+	if (z.oldStyle.position != 'relative' && z.oldStyle.position != 'absolute') {
+		z.el.css('position', 'relative');
+	}
+	z.el.css('overflow', 'hidden')
+		.css('height', type == 'open' && direction == 'vertically' ? 1 : z.oldP.h + 'px')
+		.css('width', type == 'open' && direction == 'horizontally' ? 1 : z.oldP.w + 'px');
+	
+	z.complete = function()
+	{
+		z.el.css(z.oldStyle);
+		if (z.type == 'close')
+			z.el.hide();
+		else 
+			z.el.show();
+		jQuery.dequeue(z.el.get(0), 'interfaceFX');
+	};
+	
+	switch (direction) {
+		case 'vertically':
+			z.eh = new jQuery.fx(
+				z.el.get(0),
+				jQuery.speed(speed-15, z.easing, callback),
+				'height'
+			);
+			z.et = new jQuery.fx(
+				z.el.get(0),
+				jQuery.speed(
+					z.speed,
+					z.easing,
+					z.complete
+				),
+				'top'
+			);
+			if (z.type == 'close') {
+				z.eh.custom(z.oldP.h,0);
+				z.et.custom(z.oldP.top, z.oldP.top + z.oldP.h/2);
+			} else {
+				z.eh.custom(0, z.oldP.h);
+				z.et.custom(z.oldP.top + z.oldP.h/2, z.oldP.top);
+			}
+		break;
+		case 'horizontally':
+			z.eh = new jQuery.fx(
+				z.el.get(0),
+				jQuery.speed(speed-15, z.easing, callback),
+				'width'
+			);
+			z.et = new jQuery.fx(
+				z.el.get(0),
+				jQuery.speed(
+					z.speed,
+					z.easing,
+					z.complete
+				),
+				'left'
+			);
+			if (z.type == 'close') {
+				z.eh.custom(z.oldP.w,0);
+				z.et.custom(z.oldP.left, z.oldP.left + z.oldP.w/2);
+			} else {
+				z.eh.custom(0, z.oldP.w);
+				z.et.custom(z.oldP.left + z.oldP.w/2, z.oldP.left);
+			}
+		break;
+	}
+};
\ No newline at end of file