diff -r 861cae17abda -r 6cb4d10f0b8b web/res/metadataplayer/test/css-dock-menu/js/ifx.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/res/metadataplayer/test/css-dock-menu/js/ifx.js Wed Apr 06 16:26:16 2011 +0200 @@ -0,0 +1,490 @@ +/** + * Interface Elements for jQuery + * FX + * + * http://interface.eyecon.ro + * + * Copyright (c) 2006 Stefan Petre + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * + */ + +/** + * Validates elements that can be animated + */ +jQuery.fxCheckTag = function(e) +{ + if (/^tr$|^td$|^tbody$|^caption$|^thead$|^tfoot$|^col$|^colgroup$|^th$|^body$|^header$|^script$|^frame$|^frameset$|^option$|^optgroup$|^meta$/i.test(e.nodeName) ) + return false; + else + return true; +}; + +/** + * Destroy the wrapper used for some animations + */ +jQuery.fx.destroyWrapper = function(e, old) +{ + var c = e.firstChild; + var cs = c.style; + cs.position = old.position; + cs.marginTop = old.margins.t; + cs.marginLeft = old.margins.l; + cs.marginBottom = old.margins.b; + cs.marginRight = old.margins.r; + cs.top = old.top + 'px'; + cs.left = old.left + 'px'; + e.parentNode.insertBefore(c, e); + e.parentNode.removeChild(e); +}; + +/** + * Builds a wrapper used for some animations + */ +jQuery.fx.buildWrapper = function(e) +{ + if (!jQuery.fxCheckTag(e)) + return false; + var t = jQuery(e); + var es = e.style; + var restoreStyle = false; + + if (t.css('display') == 'none') { + oldVisibility = t.css('visibility'); + t.css('visibility', 'hidden').show(); + restoreStyle = true; + } + var oldStyle = {}; + oldStyle.position = t.css('position'); + oldStyle.sizes = jQuery.iUtil.getSize(e); + oldStyle.margins = jQuery.iUtil.getMargins(e); + + var oldFloat = e.currentStyle ? e.currentStyle.styleFloat : t.css('float'); + oldStyle.top = parseInt(t.css('top'))||0; + oldStyle.left = parseInt(t.css('left'))||0; + var wid = 'w_' + parseInt(Math.random() * 10000); + var wr = document.createElement(/^img$|^br$|^input$|^hr$|^select$|^textarea$|^object$|^iframe$|^button$|^form$|^table$|^ul$|^dl$|^ol$/i.test(e.nodeName) ? 'div' : e.nodeName); + jQuery.attr(wr,'id', wid); + var wrapEl = jQuery(wr).addClass('fxWrapper'); + var wrs = wr.style; + var top = 0; + var left = 0; + if (oldStyle.position == 'relative' || oldStyle.position == 'absolute'){ + top = oldStyle.top; + left = oldStyle.left; + } + + wrs.top = top + 'px'; + wrs.left = left + 'px'; + wrs.position = oldStyle.position != 'relative' && oldStyle.position != 'absolute' ? 'relative' : oldStyle.position; + wrs.height = oldStyle.sizes.hb + 'px'; + wrs.width = oldStyle.sizes.wb + 'px'; + wrs.marginTop = oldStyle.margins.t; + wrs.marginRight = oldStyle.margins.r; + wrs.marginBottom = oldStyle.margins.b; + wrs.marginLeft = oldStyle.margins.l; + wrs.overflow = 'hidden'; + if (jQuery.browser.msie) { + wrs.styleFloat = oldFloat; + } else { + wrs.cssFloat = oldFloat; + } + if (jQuery.browser == "msie") { + es.filter = "alpha(opacity=" + 0.999*100 + ")"; + } + es.opacity = 0.999; + //t.wrap(wr); + e.parentNode.insertBefore(wr, e); + wr.appendChild(e); + es.marginTop = '0px'; + es.marginRight = '0px'; + es.marginBottom = '0px'; + es.marginLeft = '0px'; + es.position = 'absolute'; + es.listStyle = 'none'; + es.top = '0px'; + es.left = '0px'; + if (restoreStyle) { + t.hide(); + es.visibility = oldVisibility; + } + return {oldStyle:oldStyle, wrapper:jQuery(wr)}; +}; + +/** + * named colors + */ +jQuery.fx.namedColors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0] +}; + +/** + * parses a color to an object for reg, green and blue + */ +jQuery.fx.parseColor = function(color, notColor) +{ + if (jQuery.fx.namedColors[color]) + return { + r: jQuery.fx.namedColors[color][0], + g: jQuery.fx.namedColors[color][1], + b: jQuery.fx.namedColors[color][2] + }; + else if (result = /^rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)$/.exec(color)) + return { + r: parseInt(result[1]), + g: parseInt(result[2]), + b: parseInt(result[3]) + }; + else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)$/.exec(color)) + return { + r: parseFloat(result[1])*2.55, + g: parseFloat(result[2])*2.55, + b: parseFloat(result[3])*2.55 + }; + else if (result = /^#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/.exec(color)) + return { + r: parseInt("0x"+ result[1] + result[1]), + g: parseInt("0x" + result[2] + result[2]), + b: parseInt("0x" + result[3] + result[3]) + }; + else if (result = /^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/.exec(color)) + return { + r: parseInt("0x" + result[1]), + g: parseInt("0x" + result[2]), + b: parseInt("0x" + result[3]) + }; + else + return notColor == true ? false : {r: 255, g: 255, b: 255}; +}; +/** + * CSS rules that can be animated + */ +jQuery.fx.cssProps = { + borderBottomWidth:1, + borderLeftWidth:1, + borderRightWidth:1, + borderTopWidth:1, + bottom:1, + fontSize:1, + height:1, + left:1, + letterSpacing:1, + lineHeight:1, + marginBottom:1, + marginLeft:1, + marginRight:1, + marginTop:1, + maxHeight:1, + maxWidth:1, + minHeight:1, + minWidth:1, + opacity:1, + outlineOffset:1, + outlineWidth:1, + paddingBottom:1, + paddingLeft:1, + paddingRight:1, + paddingTop:1, + right:1, + textIndent:1, + top:1, + width:1, + zIndex:1 +}; +/** + * CSS color rules that can be animated + */ +jQuery.fx.colorCssProps = { + backgroundColor:1, + borderBottomColor:1, + borderLeftColor:1, + borderRightColor:1, + borderTopColor:1, + color:1, + outlineColor:1 +}; + +jQuery.fx.cssSides = ['Top', 'Right', 'Bottom', 'Left']; +jQuery.fx.cssSidesEnd = { + 'borderWidth': ['border', 'Width'], + 'borderColor': ['border', 'Color'], + 'margin': ['margin', ''], + 'padding': ['padding', ''] +}; + +/** + * Overwrite animation to use new FX function + */ +jQuery.fn.extend({ + + animate: function( prop, speed, easing, callback ) { + return this.queue(function(){ + var opt = jQuery.speed(speed, easing, callback); + var e = new jQuery.fxe( this, opt, prop ); + + }); + }, + pause: function(speed, callback) { + return this.queue(function(){ + var opt = jQuery.speed(speed, callback); + var e = new jQuery.pause( this, opt ); + }); + }, + stop : function(step) { + return this.each(function(){ + if (this.animationHandler) + jQuery.stopAnim(this, step); + + }); + }, + stopAll : function(step) { + return this.each(function(){ + if (this.animationHandler) + jQuery.stopAnim(this, step); + if ( this.queue && this.queue['fx'] ) + this.queue.fx = []; + }); + } +}); +/** + * Improved FXC function that aniamtes collection of properties per timer. Accepts inline styles and class names to animate + */ +jQuery.extend({ + pause: function(elem, options) + { + var z = this, values; + z.step = function() + { + if ( jQuery.isFunction( options.complete ) ) + options.complete.apply( elem ); + }; + z.timer=setInterval(function(){z.step();},options.duration); + elem.animationHandler = z; + }, + easing : { + linear: function(p, n, firstNum, delta, duration) { + return ((-Math.cos(p*Math.PI)/2) + 0.5) * delta + firstNum; + } + }, + fxe: function( elem, options, prop ){ + var z = this, values; + + // The styles + var y = elem.style; + var oldOverflow = jQuery.css(elem, "overflow"); + var oldDisplay= jQuery.css(elem, "display"); + var props = {}; + z.startTime = (new Date()).getTime(); + options.easing = options.easing && jQuery.easing[options.easing] ? options.easing : 'linear'; + + z.getValues = function(tp, vp) + { + if (jQuery.fx.cssProps[tp]) { + if (vp == 'show' || vp == 'hide' || vp == 'toggle') { + if ( !elem.orig ) elem.orig = {}; + var r = parseFloat( jQuery.curCSS(elem, tp) ); + elem.orig[tp] = r && r > -10000 ? r : (parseFloat( jQuery.css(elem,tp) )||0); + vp = vp == 'toggle' ? ( oldDisplay == 'none' ? 'show' : 'hide') : vp; + options[vp] = true; + props[tp] = vp == 'show' ? [0, elem.orig[tp]] : [elem.orig[tp], 0]; + if (tp != 'opacity') + y[tp] = props[tp][0] + (tp != 'zIndex' && tp != 'fontWeight' ? 'px':''); + else + jQuery.attr(y, "opacity", props[tp][0]); + } else { + props[tp] = [parseFloat( jQuery.curCSS(elem, tp) ), parseFloat(vp)||0]; + } + } else if (jQuery.fx.colorCssProps[tp]) + props[tp] = [jQuery.fx.parseColor(jQuery.curCSS(elem, tp)), jQuery.fx.parseColor(vp)]; + else if(/^margin$|padding$|border$|borderColor$|borderWidth$/i.test(tp)) { + var m = vp.replace(/\s+/g, ' ').replace(/rgb\s*\(\s*/g,'rgb(').replace(/\s*,\s*/g,',').replace(/\s*\)/g,')').match(/([^\s]+)/g); + switch(tp){ + case 'margin': + case 'padding': + case 'borderWidth': + case 'borderColor': + m[3] = m[3]||m[1]||m[0]; + m[2] = m[2]||m[0]; + m[1] = m[1]||m[0]; + for(var i = 0; i < jQuery.fx.cssSides.length; i++) { + var nmp = jQuery.fx.cssSidesEnd[tp][0] + jQuery.fx.cssSides[i] + jQuery.fx.cssSidesEnd[tp][1]; + props[nmp] = tp == 'borderColor' ? + [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] + : [parseFloat( jQuery.curCSS(elem, nmp) ), parseFloat(m[i])]; + } + break; + case 'border': + for(var i = 0; i< m.length; i++) { + var floatVal = parseFloat(m[i]); + var sideEnd = !isNaN(floatVal) ? 'Width' : (!/transparent|none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset/i.test(m[i]) ? 'Color' : false); + if (sideEnd) { + for(var j = 0; j < jQuery.fx.cssSides.length; j++) { + nmp = 'border' + jQuery.fx.cssSides[j] + sideEnd; + props[nmp] = sideEnd == 'Color' ? + [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] + : [parseFloat( jQuery.curCSS(elem, nmp) ), floatVal]; + } + } else { + y['borderStyle'] = m[i]; + } + } + break; + } + } else { + y[tp] = vp; + } + return false; + }; + + for(p in prop) { + if (p == 'style') { + var newStyles = jQuery.parseStyle(prop[p]); + for (np in newStyles) { + this.getValues(np, newStyles[np]); + } + } else if (p == 'className') { + if (document.styleSheets) + for (var i=0; i options.duration + z.startTime) { + clearInterval(z.timer); + z.timer = null; + for (p in props) { + if ( p == "opacity" ) + jQuery.attr(y, "opacity", props[p][1]); + else if (typeof props[p][1] == 'object') + y[p] = 'rgb(' + props[p][1].r +',' + props[p][1].g +',' + props[p][1].b +')'; + else + y[p] = props[p][1] + (p != 'zIndex' && p != 'fontWeight' ? 'px':''); + } + if ( options.hide || options.show ) + for ( var p in elem.orig ) + if (p == "opacity") + jQuery.attr(y, p, elem.orig[p]); + else + y[p] = ""; + y.display = options.hide ? 'none' : (oldDisplay !='none' ? oldDisplay : 'block'); + y.overflow = oldOverflow; + elem.animationHandler = null; + if ( jQuery.isFunction( options.complete ) ) + options.complete.apply( elem ); + } else { + var n = t - this.startTime; + var pr = n / options.duration; + for (p in props) { + if (typeof props[p][1] == 'object') { + y[p] = 'rgb(' + + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].r, (props[p][1].r-props[p][0].r), options.duration)) + + ',' + + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].g, (props[p][1].g-props[p][0].g), options.duration)) + + ',' + + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].b, (props[p][1].b-props[p][0].b), options.duration)) + +')'; + } else { + var pValue = jQuery.easing[options.easing](pr, n, props[p][0], (props[p][1]-props[p][0]), options.duration); + if ( p == "opacity" ) + jQuery.attr(y, "opacity", pValue); + else + y[p] = pValue + (p != 'zIndex' && p != 'fontWeight' ? 'px':''); + } + } + + } + }; + z.timer=setInterval(function(){z.step();},13); + elem.animationHandler = z; + }, + stopAnim: function(elem, step) + { + if (step) + elem.animationHandler.startTime -= 100000000; + else { + window.clearInterval(elem.animationHandler.timer); + elem.animationHandler = null; + jQuery.dequeue(elem, "fx"); + } + } +} +); + +jQuery.parseStyle = function(styles) { + var newStyles = {}; + if (typeof styles == 'string') { + styles = styles.toLowerCase().split(';'); + for(var i=0; i< styles.length; i++){ + rule = styles[i].split(':'); + if (rule.length == 2) { + newStyles[jQuery.trim(rule[0].replace(/\-(\w)/g,function(m,c){return c.toUpperCase();}))] = jQuery.trim(rule[1]); + } + } + } + return newStyles; +}; \ No newline at end of file