diff -r e93dd6da4c6d -r 8a382087127f web/rsln-opendata/res/metadataplayer/test/interface 1.2/source/fisheye.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/rsln-opendata/res/metadataplayer/test/interface 1.2/source/fisheye.js Tue Mar 15 13:46:46 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