Commit e83bc970 authored by Greg Lavallee's avatar Greg Lavallee Committed by Timmy Willison

Fixes #12736. Move hover event hack to deprecated.js for removal in 1.9. Closes gh-982.

Signed-off-by: 's avatarTimmy Willison <timmywillisn@gmail.com>
parent fd5facf1
// Limit scope pollution from any deprecated API // Limit scope pollution from any deprecated API
(function() { (function() {
var matched, browser; var matched, browser, eventAdd, eventRemove,
oldToggle = jQuery.fn.toggle,
rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
hoverHack = function( events ) {
return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
};
// Use of jQuery.browser is frowned upon. // Use of jQuery.browser is frowned upon.
// More details: http://api.jquery.com/jQuery.browser // More details: http://api.jquery.com/jQuery.browser
...@@ -60,10 +65,6 @@ jQuery.sub = function() { ...@@ -60,10 +65,6 @@ jQuery.sub = function() {
return jQuerySub; return jQuerySub;
}; };
// Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
jQuery.attrFn = {};
var oldToggle = jQuery.fn.toggle;
jQuery.fn.toggle = function( fn, fn2 ) { jQuery.fn.toggle = function( fn, fn2 ) {
if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) { if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
...@@ -95,4 +96,32 @@ jQuery.fn.toggle = function( fn, fn2 ) { ...@@ -95,4 +96,32 @@ jQuery.fn.toggle = function( fn, fn2 ) {
return this.click( toggler ); return this.click( toggler );
}; };
// Support for 'hover' type
eventAdd = jQuery.event.add;
// Duck punch jQuery.event.add, and jquery.event.remove
// Signatures:
// jQuery.event = {
// add: function( elem, types, handler, data, selector ) {
// remove: function( elem, types, handler, selector, mappedTypes ) {
jQuery.event.add = function( elem, types, handler, data, selector ){
if ( types ) {
types = hoverHack( types );
}
eventAdd.call( this, elem, types, handler, data, selector );
};
eventRemove = jQuery.event.remove;
jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
if ( types ) {
types = hoverHack( types );
}
eventRemove.call( this, elem, types, handler, selector, mappedTypes );
};
// Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
jQuery.attrFn = {};
})(); })();
var rformElems = /^(?:textarea|input|select)$/i, var rformElems = /^(?:textarea|input|select)$/i,
rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
rkeyEvent = /^key/, rkeyEvent = /^key/,
rmouseEvent = /^(?:mouse|contextmenu)|click/, rmouseEvent = /^(?:mouse|contextmenu)|click/,
rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
hoverHack = function( events ) {
return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
};
/* /*
* Helper functions for managing events -- not part of the public interface. * Helper functions for managing events -- not part of the public interface.
...@@ -56,7 +52,7 @@ jQuery.event = { ...@@ -56,7 +52,7 @@ jQuery.event = {
// Handle multiple events separated by a space // Handle multiple events separated by a space
// jQuery(...).bind("mouseover mouseout", fn); // jQuery(...).bind("mouseover mouseout", fn);
types = jQuery.trim( hoverHack(types) ).split( " " ); types = jQuery.trim( types ).split( " " );
for ( t = 0; t < types.length; t++ ) { for ( t = 0; t < types.length; t++ ) {
tns = rtypenamespace.exec( types[t] ) || []; tns = rtypenamespace.exec( types[t] ) || [];
...@@ -139,7 +135,7 @@ jQuery.event = { ...@@ -139,7 +135,7 @@ jQuery.event = {
} }
// Once for each type.namespace in types; type may be omitted // Once for each type.namespace in types; type may be omitted
types = jQuery.trim( hoverHack( types || "" ) ).split(" "); types = jQuery.trim( types ).split(" ");
for ( t = 0; t < types.length; t++ ) { for ( t = 0; t < types.length; t++ ) {
tns = rtypenamespace.exec( types[t] ) || []; tns = rtypenamespace.exec( types[t] ) || [];
type = origType = tns[1]; type = origType = tns[1];
......
...@@ -107,4 +107,33 @@ if ( jQuery.browser ) { ...@@ -107,4 +107,33 @@ if ( jQuery.browser ) {
ok(!!jQuery.attrFn, "attrFnPresent"); ok(!!jQuery.attrFn, "attrFnPresent");
}); });
test("hover pseudo-event", function() {
expect(2);
var balance = 0;
jQuery( "#firstp" )
.on( "hovercraft", function() {
ok( false, "hovercraft is full of ills" );
})
.on( "click.hover.me.not", function( e ) {
equal( e.handleObj.namespace, "hover.me.not", "hover hack doesn't mangle namespaces" );
})
.bind("hover", function( e ) {
if ( e.type === "mouseenter" ) {
balance++;
} else if ( e.type === "mouseleave" ) {
balance--;
} else {
ok( false, "hover pseudo: unknown event type "+e.type );
}
})
.trigger("click")
.trigger("mouseenter")
.trigger("mouseleave")
.unbind("hover")
.trigger("mouseenter");
equal( balance, 0, "hover pseudo-event" );
});
} }
...@@ -798,8 +798,8 @@ test("unbind(eventObject)", function() { ...@@ -798,8 +798,8 @@ test("unbind(eventObject)", function() {
assert( 0 ); assert( 0 );
}); });
test("hover() and hover pseudo-event", function() { test("hover() mouseenter mouseleave", function() {
expect(3); expect(1);
var times = 0, var times = 0,
handler1 = function( event ) { ++times; }, handler1 = function( event ) { ++times; },
...@@ -817,30 +817,6 @@ test("hover() and hover pseudo-event", function() { ...@@ -817,30 +817,6 @@ test("hover() and hover pseudo-event", function() {
equal( times, 4, "hover handlers fired" ); equal( times, 4, "hover handlers fired" );
var balance = 0;
jQuery( "#firstp" )
.on( "hovercraft", function() {
ok( false, "hovercraft is full of ills" );
})
.on( "click.hover.me.not", function( e ) {
equal( e.handleObj.namespace, "hover.me.not", "hover hack doesn't mangle namespaces" );
})
.bind("hover", function( e ) {
if ( e.type === "mouseenter" ) {
balance++;
} else if ( e.type === "mouseleave" ) {
balance--;
} else {
ok( false, "hover pseudo: unknown event type "+e.type );
}
})
.trigger("click")
.trigger("mouseenter")
.trigger("mouseleave")
.unbind("hover")
.trigger("mouseenter");
equal( balance, 0, "hover pseudo-event" );
}); });
test("mouseover triggers mouseenter", function() { test("mouseover triggers mouseenter", function() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment