diff --git a/src/jquery/data.js b/src/jquery/data.js index 40e07d96..b4884d9f 100644 --- a/src/jquery/data.js +++ b/src/jquery/data.js @@ -1,7 +1,8 @@ import { migrateWarn } from "../main.js"; import { camelCase } from "../utils.js"; -var oldData = jQuery.data; +var oldData = jQuery.data, + oldFnData = jQuery.fn.data; jQuery.data = function( elem, name, value ) { var curData, sameKeys, key; @@ -38,3 +39,42 @@ jQuery.data = function( elem, name, value ) { return oldData.apply( this, arguments ); }; + +jQuery.fn.extend( { + data: function( key, value ) { + var args, result; + if ( arguments.length === 0 && typeof Proxy !== "undefined" ) { + result = oldFnData.call( this ); + if(!result) { + return result; + } + // eslint-disable-next-line no-undef + return new Proxy( result, { + get: function( target, prop ) { + if ( + prop !== camelCase( prop ) && + target[ prop ] === undefined + ) { + migrateWarn( + "jQuery.fn.data() always sets/gets camelCased names: " + + prop + ); + return target[ camelCase( prop ) ]; + } + return target[ prop ]; + } + } ); + } + if ( arguments.length > 0 && typeof key === "string" && key !== camelCase( key ) ) { + migrateWarn( + "jQuery.fn.data() always sets/gets camelCased names: " + key + ); + args = + arguments.length > 1 ? + [ camelCase( key ), value ] : + [ camelCase( key ) ]; + return oldFnData.apply( this, args ); + } + return oldFnData.apply( this, arguments ); + } +} );