aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Gołębiowski <m.goleb@gmail.com>2015-01-25 01:09:26 +0100
committerMichał Gołębiowski <m.goleb@gmail.com>2015-01-25 01:09:26 +0100
commita5e1c9b44c971fd7046d9a95bd0810e50840b663 (patch)
treeb297d02865b36a9920cefccd49d480d589a87271
parente905dcd8f33e99275e29b0333e7b255559197c81 (diff)
downloadjquery-a5e1c9b44c971fd7046d9a95bd0810e50840b663.tar.gz
jquery-a5e1c9b44c971fd7046d9a95bd0810e50840b663.zip
Event: Add a note about a mouseenter bug in Chrome
Refs https://code.google.com/p/chromium/issues/detail?id=333868
-rw-r--r--src/event.js4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/event.js b/src/event.js
index 238c96269..ae0539bb9 100644
--- a/src/event.js
+++ b/src/event.js
@@ -708,6 +708,10 @@ jQuery.Event.prototype = {
// Do the same for pointerenter/pointerleave and pointerover/pointerout
// Support: Safari<7.0
// Safari doesn't support mouseenter/mouseleave at all.
+// Support: Chrome 40+
+// Mouseenter doesn't perform while left mouse button is pressed
+// (and initiated outside the observed element)
+// https://code.google.com/p/chromium/issues/detail?id=333868
jQuery.each({
mouseenter: "mouseover",
mouseleave: "mouseout",
a> 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
define( [
	"jquery",
	"ui/controlgroup",
	"ui/checkboxradio",
	"ui/selectmenu",
	"ui/button"
], function( $ ) {

module( "Controlgroup: methods" );

test( "destroy", function( assert ) {
	expect( 1 );
	assert.domEqual( ".controlgroup", function() {
		$( ".controlgroup" ).controlgroup().controlgroup( "destroy" );
	});
});
test( "disable", function( assert ) {
	expect( 2 );
	var element = $( ".controlgroup" ).controlgroup().controlgroup( "disable" );
	assert.lacksClasses( element, "ui-state-disabled",
		"The widget does not get the disabled class, because we disable each child widget" );
	strictEqual( element.find( ".ui-state-disabled" ).length, 6,
		"Child widgets are disabled" );
});

test( "enable", function( assert ) {
	expect( 2 );
	var element = $( ".controlgroup" ).controlgroup().controlgroup( "enable" );
	assert.lacksClasses( element, "ui-state-disabled",
		"ui-state-disabled is not present on widget after enabling" );
	strictEqual( element.find( "ui-state-disabled" ).length, 0,
		"Child widgets are disabled" );
});

var tests = {
		"checkboxradio": "<input type='checkbox'>",
		"selectmenu": "<select><option>foo</option></select>",
		"button": "<button>"
	},
	orientations = {
		"horizontal": [
			"ui-corner-left",
			false,
			false,
			"ui-corner-right"
		],
		"vertical": [
			"ui-corner-top",
			false,
			false,
			"ui-corner-bottom"
		]
	};

// Iterate through supported element markup
$.each( tests, function( widget, html ) {

	// Check in both horizontal and vertical orientations
	$.each( orientations, function( name, classes ) {

		test( "refresh: " + widget + ": " + name, function( assert ) {
			expect( 41 );

			var i, control, currentClasses,
				controls = [],
				element = $( "<div>" ).controlgroup({
					direction: name
				}).appendTo( "body" );

			// checks the elements with in the controlgroup against the expected class list
			function checkCornerClasses( classList ) {
				for ( var j = 0; j < 4; j++ ) {
					if ( classList[ j ] ) {
						assert.hasClasses( controls[ j ][ widget ]( "widget" ), classList[ j ] );
					} else {
						assert.lacksClassStart( controls[ j ][ widget ]( "widget" ), "ui-corner" );
					}
				}
			}

			function showElements( index, value ) {
				$( value )[ widget ]( "widget" ).show();
			}

			// Hide each element and check the corner classes
			function iterateHidden( excludeInvisible ) {
				for ( i = 0; i < 4; i++ ) {

					$( controls ).each( showElements );

					controls[ i ][ widget ]( "widget" ).hide();

					currentClasses = classes.slice( 0 );
					if ( excludeInvisible ) {
						if ( i === 0 ) {
							currentClasses[ i + 1 ] = classes[ i ];
							currentClasses[ i ] = false;
						} else if ( i === 3 ) {
							currentClasses[ i - 1 ] = classes[ i ];
							currentClasses[ i ] = false;
						}
					}
					element.controlgroup( "refresh" );
					checkCornerClasses( currentClasses );
				}
			}

			// Add a label for each element and then append the element to the control group
			for ( i = 0; i < 4; i++ ) {
				control = $( html ).attr( "id", "id" + i )
					.add( $( "<label>" ).clone().attr( "for", "id" + i ) );

				controls.push( control );
				element.append( control );
			}

			// Refresh the controlgroup now that its populated
			element.controlgroup( "refresh" );
			for ( i = 0; i < 4; i++ ) {
				strictEqual( controls[ i ].is( ":ui-" + widget ), true,
					name + ": " + widget + " " + i + ": is a " + widget + " widget" );
			}

			// Check that we have the right classes
			checkCornerClasses( classes );

			// hide each element and then check its classes
			iterateHidden( true );

			// Set the exclude option to false so we no longer care about hidden
			element.controlgroup( "option", "excludeInvisible", false );

			// Iterate hiding the elements again and check their corner classes
			iterateHidden();

			// Disable the first control
			controls[ 0 ].prop( "disabled", true );

			element.controlgroup( "refresh" );

			assert.hasClasses( controls[ 0 ][ widget ]( "widget" ), "ui-state-disabled" );

			// remove the controlgroup before we start the next set
			element.remove();

		});
	});
});

} );