Skip to content

Commit f42a751

Browse files
committed
Event: Patch jQuery.event.special's prototype
Allow to use common `Object.prototype` properties on `jQuery.event.special` but warn as well. Fixes jquerygh-542
1 parent b1c0d14 commit f42a751

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/jquery/event.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import {
22
migrateWarn,
33
migratePatchAndInfoFunc,
4-
migratePatchFunc
4+
migratePatchFunc,
5+
migratePatchProp
56
} from "../main.js";
67
import "../disablePatches.js";
8+
import { patchProto } from "../utils.js";
79

810
var oldEventAdd = jQuery.event.add;
911

@@ -41,3 +43,10 @@ migratePatchAndInfoFunc( jQuery.fn, "undelegate", jQuery.fn.undelegate,
4143

4244
migratePatchAndInfoFunc( jQuery.fn, "hover", jQuery.fn.hover,
4345
"hover", "jQuery.fn.hover() is deprecated" );
46+
47+
migratePatchProp( jQuery.event, "special",
48+
patchProto( jQuery.extend( Object.create( null ), jQuery.event.special ), {
49+
warningId: "event-special-null-proto",
50+
apiName: "jQuery.event.special"
51+
} ),
52+
"event-special-null-proto" );

test/unit/jquery/event.js

+22
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,25 @@ TestManager.runIframeTest( "Load within a ready handler", "event-lateload.html",
8484
JSON.stringify( jQuery.migrateMessages ) );
8585
assert.ok( /load/.test( jQuery.migrateMessages[ 0 ] ), "message ok" );
8686
} );
87+
88+
QUnit.test( "jQuery.event.special: properties from Object.prototype", function( assert ) {
89+
assert.expect( 4 );
90+
91+
try {
92+
expectNoMessage( assert, "Regular properties", function() {
93+
jQuery.event.special.fakeevent = {};
94+
95+
// eslint-disable-next-line no-unused-expressions
96+
jQuery.event.special.fakeevent;
97+
} );
98+
99+
expectMessage( assert, "Properties from Object.prototype", 2, function() {
100+
assert.ok( jQuery.event.special.hasOwnProperty( "fakeevent" ),
101+
"hasOwnProperty works (property present)" );
102+
assert.ok( !jQuery.event.special.hasOwnProperty( "fakeevent2" ),
103+
"hasOwnProperty works (property missing)" );
104+
} );
105+
} finally {
106+
delete jQuery.event.special.fakeevent;
107+
}
108+
} );

0 commit comments

Comments
 (0)