web/rsln/res/metadataplayer/test/css-dock-menu/js/fisheye.js
changeset 50 a1636b31eb98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/rsln/res/metadataplayer/test/css-dock-menu/js/fisheye.js	Fri Feb 18 19:37:15 2011 +0100
@@ -0,0 +1,142 @@
+/**
+ * Interface Elements for jQuery
+ * Fisheye menu
+ * 
+ * http://interface.eyecon.ro
+ * 
+ * Copyright (c) 2006 Stefan Petre
+ * Dual licensed under the MIT (MIT-LICENSE.txt) 
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ */
+
+/**
+ * Build a Fisheye menu from a list of links
+ *
+ * @name Fisheye
+ * @description Build a Fisheye menu from a list of links
+ * @param Hash hash A hash of parameters
+ * @option String items items selection
+ * @option String container container element
+ * @option Integer itemWidth the minimum width for each item
+ * @option Integer maxWidth the maximum width for each item
+ * @option String itemsText selection of element that contains the text for each item
+ * @option Integer proximity the distance from element that make item to interact
+ * @option String valign vertical alignment
+ * @option String halign horizontal alignment
+ *
+ * @type jQuery
+ * @cat Plugins/Interface
+ * @author Stefan Petre
+ */
+jQuery.iFisheye = {
+	
+	build : function(options)
+	{
+	
+		return this.each(
+			function()
+			{
+				var el = this;
+				el.fisheyeCfg = {
+					items : jQuery(options.items, this),
+					container: jQuery(options.container, this),
+					pos : jQuery.iUtil.getPosition(this),
+					itemWidth: options.itemWidth,
+					itemsText: options.itemsText,
+					proximity: options.proximity,
+					valign: options.valign,
+					halign: options.halign,
+					maxWidth : options.maxWidth
+				};
+				jQuery.iFisheye.positionContainer(el, 0);
+				jQuery(window).bind(
+					'resize',
+					function()
+					{
+						el.fisheyeCfg.pos = jQuery.iUtil.getPosition(el);
+						jQuery.iFisheye.positionContainer(el, 0);
+						jQuery.iFisheye.positionItems(el);
+					}
+				);
+				jQuery.iFisheye.positionItems(el);
+				el.fisheyeCfg.items
+					.bind(
+						'mouseover',
+						function()
+						{
+							jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'block';
+						}
+					)
+					.bind(
+						'mouseout',
+						function()
+						{
+							jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'none';
+						}
+					);
+				jQuery(document).bind(
+					'mousemove',
+					function(e)
+					{
+						var pointer = jQuery.iUtil.getPointer(e);
+						var toAdd = 0;
+						if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'center')
+							var posx = pointer.x - el.fisheyeCfg.pos.x - (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size())/2 - el.fisheyeCfg.itemWidth/2;
+						else if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'right')	
+							var posx = pointer.x - el.fisheyeCfg.pos.x - el.offsetWidth + el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size();
+						else 
+							var posx = pointer.x - el.fisheyeCfg.pos.x;
+						var posy = Math.pow(pointer.y - el.fisheyeCfg.pos.y - el.offsetHeight/2,2);
+						el.fisheyeCfg.items.each(
+							function(nr)
+							{
+								distance = Math.sqrt(
+									Math.pow(posx - nr*el.fisheyeCfg.itemWidth, 2)
+									+ posy
+								);
+								distance -= el.fisheyeCfg.itemWidth/2;
+								
+								distance = distance < 0 ? 0 : distance;
+								distance = distance > el.fisheyeCfg.proximity ? el.fisheyeCfg.proximity : distance;
+								distance = el.fisheyeCfg.proximity - distance;
+								
+								extraWidth = el.fisheyeCfg.maxWidth * distance/el.fisheyeCfg.proximity;
+								
+								this.style.width = el.fisheyeCfg.itemWidth + extraWidth + 'px';
+								this.style.left = el.fisheyeCfg.itemWidth * nr + toAdd + 'px';
+								toAdd += extraWidth;
+							}
+						);
+						jQuery.iFisheye.positionContainer(el, toAdd);
+					}
+				);
+			}
+		)
+	},
+	
+	positionContainer : function(el, toAdd)
+	{
+		if (el.fisheyeCfg.halign)
+			if (el.fisheyeCfg.halign == 'center')
+				el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size())/2 - toAdd/2 + 'px';
+			else if (el.fisheyeCfg.halign == 'left')
+				el.fisheyeCfg.container.get(0).style.left =  - toAdd/el.fisheyeCfg.items.size() + 'px';
+			else if (el.fisheyeCfg.halign == 'right')
+				el.fisheyeCfg.container.get(0).style.left =  (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) - toAdd/2 + 'px';
+		el.fisheyeCfg.container.get(0).style.width = el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size() + toAdd + 'px';
+	},
+	
+	positionItems : function(el)
+	{
+		el.fisheyeCfg.items.each(
+			function(nr)
+			{
+				this.style.width = el.fisheyeCfg.itemWidth + 'px';
+				this.style.left = el.fisheyeCfg.itemWidth * nr + 'px';
+			}
+		);
+	}
+};
+
+jQuery.fn.Fisheye = jQuery.iFisheye.build;
\ No newline at end of file