From d12788403ada441ba4f054b39be2e8ef457b7ce1 Mon Sep 17 00:00:00 2001 From: Liad Yosef Date: Thu, 24 Jun 2021 20:52:12 +0300 Subject: [PATCH 1/5] Add fix for $.fn.data calls When calling `$(el).data()`, the received object contains camel-cased keys, this fixes issue #436 --- src/jquery/data.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/jquery/data.js b/src/jquery/data.js index 40e07d96..7db992f5 100644 --- a/src/jquery/data.js +++ b/src/jquery/data.js @@ -2,6 +2,7 @@ import { migrateWarn } from "../main.js"; import { camelCase } from "../utils.js"; var oldData = jQuery.data; +var oldFnData = jQuery.fn.data; jQuery.data = function( elem, name, value ) { var curData, sameKeys, key; @@ -38,3 +39,37 @@ jQuery.data = function( elem, name, value ) { return oldData.apply( this, arguments ); }; + +jQuery.fn.extend({ + data: function(key, value) { + if (arguments.length === 0 && typeof Proxy !== 'undefined') { + var result = oldFnData.call(this); + return new Proxy(result, { + get: function(target, prop) { + if ( + prop !== camelCase(prop) && + target[prop] === undefined + ) { + migrateWarn( + 'jQuery.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.data() always sets/gets camelCased names: ' + key + ); + var args = + arguments.length > 1 + ? [camelCase(key), value] + : [camelCase(key)]; + return oldFnData.apply(this, args); + } + return oldFnData.apply(this, arguments); + } +}); From 5145b9effe8c1631ca8e95cf56b6a1db5e6039a6 Mon Sep 17 00:00:00 2001 From: Liad Yosef Date: Sun, 27 Jun 2021 10:59:48 +0300 Subject: [PATCH 2/5] fix lint issues --- src/jquery/data.js | 47 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/jquery/data.js b/src/jquery/data.js index 7db992f5..bae8f459 100644 --- a/src/jquery/data.js +++ b/src/jquery/data.js @@ -1,8 +1,8 @@ import { migrateWarn } from "../main.js"; import { camelCase } from "../utils.js"; -var oldData = jQuery.data; -var oldFnData = jQuery.fn.data; +var oldData = jQuery.data, + oldFnData = jQuery.fn.data; jQuery.data = function( elem, name, value ) { var curData, sameKeys, key; @@ -40,36 +40,37 @@ jQuery.data = function( elem, name, value ) { return oldData.apply( this, arguments ); }; -jQuery.fn.extend({ - data: function(key, value) { - if (arguments.length === 0 && typeof Proxy !== 'undefined') { - var result = oldFnData.call(this); - return new Proxy(result, { - get: function(target, prop) { +jQuery.fn.extend( { + data: function( key, value ) { + var args, result; + if ( arguments.length === 0 && typeof Proxy !== "undefined" ) { + result = oldFnData.call( this ); + return new Proxy( result, { + get: function( target, prop ) { if ( - prop !== camelCase(prop) && - target[prop] === undefined + prop !== camelCase( prop ) && + target[ prop ] === undefined ) { migrateWarn( - 'jQuery.data() always sets/gets camelCased names: ' + + "jQuery.data() always sets/gets camelCased names: " + prop ); - return target[camelCase(prop)]; + return target[ camelCase( prop ) ]; } - return target[prop]; + return target[ prop ]; } - }); + } ); } - if (arguments.length > 0 && typeof key === 'string' && key !== camelCase(key)) { + if ( arguments.length > 0 && typeof key === "string" && key !== camelCase( key ) ) { migrateWarn( - 'jQuery.data() always sets/gets camelCased names: ' + key + "jQuery.data() always sets/gets camelCased names: " + key ); - var args = - arguments.length > 1 - ? [camelCase(key), value] - : [camelCase(key)]; - return oldFnData.apply(this, args); + args = + arguments.length > 1 ? + [ camelCase( key ), value ] : + [ camelCase( key ) ]; + return oldFnData.apply( this, args ); } - return oldFnData.apply(this, arguments); + return oldFnData.apply( this, arguments ); } -}); +} ); From 570869a28fab8b3367dbd1030a52e91423038cf7 Mon Sep 17 00:00:00 2001 From: Liad Yosef Date: Sun, 27 Jun 2021 11:10:26 +0300 Subject: [PATCH 3/5] fix lint issues --- src/jquery/data.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/jquery/data.js b/src/jquery/data.js index bae8f459..ab0d15c1 100644 --- a/src/jquery/data.js +++ b/src/jquery/data.js @@ -45,6 +45,7 @@ jQuery.fn.extend( { var args, result; if ( arguments.length === 0 && typeof Proxy !== "undefined" ) { result = oldFnData.call( this ); + // eslint-disable-next-line no-undef return new Proxy( result, { get: function( target, prop ) { if ( From c7aa39e4cdf36609cc37cf02474575fcdf39f5fd Mon Sep 17 00:00:00 2001 From: Liad Yosef Date: Sun, 5 Dec 2021 18:47:09 +0200 Subject: [PATCH 4/5] Fix comments --- src/jquery/data.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jquery/data.js b/src/jquery/data.js index ab0d15c1..993f6d6b 100644 --- a/src/jquery/data.js +++ b/src/jquery/data.js @@ -53,7 +53,7 @@ jQuery.fn.extend( { target[ prop ] === undefined ) { migrateWarn( - "jQuery.data() always sets/gets camelCased names: " + + "jQuery.fn.data() always sets/gets camelCased names: " + prop ); return target[ camelCase( prop ) ]; @@ -64,7 +64,7 @@ jQuery.fn.extend( { } if ( arguments.length > 0 && typeof key === "string" && key !== camelCase( key ) ) { migrateWarn( - "jQuery.data() always sets/gets camelCased names: " + key + "jQuery.fn.data() always sets/gets camelCased names: " + key ); args = arguments.length > 1 ? From 5b4dc7d8f449d801909810980981b68a13775c19 Mon Sep 17 00:00:00 2001 From: Liad Yosef Date: Tue, 28 Dec 2021 19:39:58 +0200 Subject: [PATCH 5/5] fix npe in Proxy --- src/jquery/data.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/jquery/data.js b/src/jquery/data.js index 993f6d6b..b4884d9f 100644 --- a/src/jquery/data.js +++ b/src/jquery/data.js @@ -45,6 +45,9 @@ jQuery.fn.extend( { 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 ) {