<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Animation Test Suite</title> <script src="../dist/jquery.js"></script> <style> div#tests h4 { background: red; } div#tests h4.pass { background: green; } div#tests div.box { background: red url(cow.jpg) no-repeat; overflow: hidden; border: 2px solid #000; } div#tests div.overflow { overflow: visible; } div.inline { display: inline; } div.autoheight { height: auto; } div.autowidth { width: auto; } div.autoopacity { opacity: auto; } div.largewidth { width: 100px; } div.largeheight { height: 100px; } div.largeopacity { filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); } div.medwidth { width: 50px; } div.medheight { height: 50px; } div.medopacity { opacity: 0.5; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50); } div.nowidth { width: 0px; } div.noheight { height: 0px; } div.noopacity { opacity: 0; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); } div.hidden { display: none; } div#tests div.widewidth { background-repeat: repeat-x; } div#tests div.wideheight { background-repeat: repeat-y; } div#tests div.widewidth.wideheight { background-repeat: repeat; } div#tests div.noback { background-image: none; } </style> <script> var visible = { Normal: function(elem){}, "CSS Hidden": function(elem){ $(this).addClass("hidden"); }, "JS Hidden": function(elem){ $(this).hide(); } }; var from = { "CSS Auto": function(elem,prop){ $(elem).addClass("auto" + prop) .text("This is a long string of text."); return ""; }, "JS Auto": function(elem,prop){ $(elem).css(prop,"auto") .text("This is a long string of text."); return ""; }, "CSS 100": function(elem,prop){ $(elem).addClass("large" + prop); return ""; }, "JS 100": function(elem,prop){ $(elem).css(prop,prop == "opacity" ? 1 : "100px"); return prop == "opacity" ? 1 : 100; }, "CSS 50": function(elem,prop){ $(elem).addClass("med" + prop); return ""; }, "JS 50": function(elem,prop){ $(elem).css(prop,prop == "opacity" ? 0.50 : "50px"); return prop == "opacity" ? 0.5 : 50; }, "CSS 0": function(elem,prop){ $(elem).addClass("no" + prop); return ""; }, "JS 0": function(elem,prop){ $(elem).css(prop,prop == "opacity" ? 0 : "0px"); return 0; } }; var to = { /*"Auto": function(elem,prop){ $(elem).addClass("wide"+prop); return "auto"; },*/ /*"toggle (show)": function(elem,prop){ $(elem).hide().addClass("wide"+prop); return "show"; },*/ "show": function(elem,prop){ $(elem).hide().addClass("wide"+prop); return "show"; }, "hide": function(elem,prop){ $(elem).addClass("wide"+prop); return "hide"; }, "100": function(elem,prop){ $(elem).addClass("wide"+prop); return prop == "opacity" ? 1 : 100; }, "50": function(elem,prop){ return prop == "opacity" ? 0.50 : 50; }, "0": function(elem,prop){ $(elem).addClass("noback"); return 0; } }; /*var oldAttr = jQuery.attr; jQuery.attr = function( elem, name, value ){ if ( arguments.length == 3 ) { var prev = elem.previousSibling; if ( prev && prev.nodeName == "UL" ) { $(prev).append( name + ": " + value ); } } return oldAttr.apply( jQuery, arguments ); };*/ $(document).ready(function(){ makeTest( "JS Overflow and Display" ) .addClass("widewidth") .css({ overflow: "visible", display: "inline" }) .add( makeTest( "CSS Overflow and Display" ).addClass("overflow inline") ) .addClass("widewidth") .text("Some sample text.") .before("text before") .after("text after") .animate({ opacity: 0.5 }, "slow", function(){ var o = jQuery.css( this, "overflow" ); if ( o != "visible" ) return msg(this, "Overflow should be visible: " + o); if ( jQuery.css( this, "display" ) != "inline" ) return msg(this, "Display has been tampered with."); pass( this ); }); jQuery.each( from, function(fn, f){ jQuery.each( to, function(tn, t){ var elem = makeTest( fn + " to " + tn ); var t_w = t( elem, "width" ); var f_w = f( elem, "width" ); var t_h = t( elem, "height" ); var f_h = f( elem, "height" ); var t_o = t( elem, "opacity" ); var f_o = f( elem, "opacity" ); var anim = { width: t_w, height: t_h, opacity: t_o }; elem.animate(anim, "slow", function(){ if ( t_w == "show" && this.style.display != "block" ) return msg(this, "Showing, display not block: " + this.style.display); if ( (t_w == "hide"||t_w == "show") && this.style.width.indexOf(f_w) != 0 ) return msg(this, "Width not reset to " + f_w + ": " + this.style.width); if ( (t_h == "hide"||t_h == "show") && this.style.height.indexOf(f_h) != 0 ) return msg(this, "Height not reset to " + f_h + ": " + this.style.height); var cur_o = jQuery.attr(this.style, "opacity"); if ( cur_o !== "" ) cur_o = parseFloat( cur_o ); if ( (t_o == "hide"||t_o == "show") && cur_o != f_o ) { return msg(this, "Opacity not reset to " + f_o + ": " + cur_o); } if ( t_w == "hide" && this.style.display != "none" ) return msg(this, "Hiding, display not none: " + this.style.display); if ( t_o.constructor == Number && cur_o != t_o ) return msg(this, "Final opacity is not " + t_o + ": " + cur_o); if ( t_w.constructor == Number && this.style.width != t_w + "px" ) return msg(this, "Final width is not " + t_w + ": " + this.style.width); if ( t_h.constructor == Number && this.style.height != t_h + "px" ) return msg(this, "Final height is not " + t_h + ": " + this.style.height); var cur_w = jQuery.css(this,"width"); if ( t_w.constructor == Number && this.style.width == "" && cur_w != t_w ) return msg(this, "Width should be explicitly set to " + t_w + ", is instead: " + cur_w); var cur_h = jQuery.css(this,"height"); if ( t_h.constructor == Number && this.style.height == "" && cur_h != t_h ) return msg(this, "Height should be explicitly set to " + t_h + ", is instead: " + cur_w); if ( t_o.constructor == Number && jQuery.curCSS(this, "opacity") == "" && cur_o != t_o ) return msg(this, "Opacity should be explicitly set to " + t_o + ", is instead: " + cur_o); if ( t_h == "show" ) { var old_h = jQuery.curCSS(this, "height"); $(elem).append("<br>Some more text<br>and some more..."); if ( old_h == jQuery.css(this, "height" ) ) return msg(this, "Height is not truly auto."); } pass( this ); }); }); }); }); function pass( elem ) { $(elem).prev().addClass("pass"); } function makeTest( text ){ var elem = $("<div></div>") .attr("id", "test" + makeTest.id++) .addClass("box"); $("<h4></h4>") .text( text ) .appendTo("#tests") .click(function(){ $(this).next().toggle(); }) .after( elem ); return elem; } makeTest.id = 1; function msg(elem,txt){ $(elem).prev().append( "<tt> " + txt + "</tt>" ); } </script> </head> <body> <div id="tests"></div> </body> </html>