Skip to content

Commit 8f5205e

Browse files
authored
Event: Patch jQuery.event.special's prototype
Allow to use common `Object.prototype` properties on `jQuery.event.special` but warn as well. Closes gh-573 Fixes gh-542
1 parent b1e0990 commit 8f5205e

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
@@ -2,9 +2,11 @@ import {
22
migrateWarn,
33
migrateWarnProp,
44
migratePatchAndInfoFunc,
5-
migratePatchFunc
5+
migratePatchFunc,
6+
migratePatchProp
67
} from "../main.js";
78
import "../disablePatches.js";
9+
import { patchProto } from "../utils.js";
810

911
var oldEventAdd = jQuery.event.add;
1012

@@ -45,3 +47,10 @@ migratePatchAndInfoFunc( jQuery.fn, "hover", jQuery.fn.hover,
4547

4648
migrateWarnProp( jQuery.event, "global", {}, "event-global",
4749
"jQuery.event.global is removed" );
50+
51+
migratePatchProp( jQuery.event, "special",
52+
patchProto( jQuery.extend( Object.create( null ), jQuery.event.special ), {
53+
warningId: "event-special-null-proto",
54+
apiName: "jQuery.event.special"
55+
} ),
56+
"event-special-null-proto" );

test/unit/jquery/event.js

+22
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,25 @@ QUnit.test( "jQuery.event.global", function( assert ) {
9393
assert.deepEqual( jQuery.event.global, {}, "is an empty object" );
9494
} );
9595
} );
96+
97+
QUnit.test( "jQuery.event.special: properties from Object.prototype", function( assert ) {
98+
assert.expect( 4 );
99+
100+
try {
101+
expectNoMessage( assert, "Regular properties", function() {
102+
jQuery.event.special.fakeevent = {};
103+
104+
// eslint-disable-next-line no-unused-expressions
105+
jQuery.event.special.fakeevent;
106+
} );
107+
108+
expectMessage( assert, "Properties from Object.prototype", 2, function() {
109+
assert.ok( jQuery.event.special.hasOwnProperty( "fakeevent" ),
110+
"hasOwnProperty works (property present)" );
111+
assert.ok( !jQuery.event.special.hasOwnProperty( "fakeevent2" ),
112+
"hasOwnProperty works (property missing)" );
113+
} );
114+
} finally {
115+
delete jQuery.event.special.fakeevent;
116+
}
117+
} );

0 commit comments

Comments
 (0)