From 65b16b1c7e4d0e5e622c733a3f106901e515124d Mon Sep 17 00:00:00 2001 From: Georgios Giannoutsos Barkas Date: Tue, 10 Oct 2017 02:31:24 +0200 Subject: [PATCH] Allow custom attribute named `on` to be passed on to elements (#11153) * Allow single `on` property for custom elements * Remove test from ReactDOMComponent-test * Allow custom attribute named 'on' to be passed * Check property length instead of comparing strings --- src/renderers/dom/shared/DOMProperty.js | 3 ++- .../dom/shared/__tests__/ReactDOMServerIntegration-test.js | 5 +++++ .../dom/shared/hooks/ReactDOMUnknownPropertyHook.js | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/renderers/dom/shared/DOMProperty.js b/src/renderers/dom/shared/DOMProperty.js index 197b57971b..5727ab0f44 100644 --- a/src/renderers/dom/shared/DOMProperty.js +++ b/src/renderers/dom/shared/DOMProperty.js @@ -205,7 +205,8 @@ var DOMProperty = { } if ( (name[0] === 'o' || name[0] === 'O') && - (name[1] === 'n' || name[1] === 'N') + (name[1] === 'n' || name[1] === 'N') && + name.length > 2 ) { return false; } diff --git a/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js b/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js index f4949a77ce..3f7ba7abcf 100644 --- a/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js +++ b/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js @@ -991,6 +991,11 @@ describe('ReactDOMServerIntegration', () => { ); expect(e.getAttribute('onunknownevent')).toBe(null); }); + + itRenders('custom attribute named `on`', async render => { + const e = await render(
); + expect(e.getAttribute('on')).toEqual('tap:do-something'); + }); }); describe('elements and children', function() { diff --git a/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js b/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js index 75d20e7d77..3fb07e4ca9 100644 --- a/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js +++ b/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js @@ -70,7 +70,7 @@ if (__DEV__) { return true; } - if (lowerCasedName.indexOf('on') === 0) { + if (lowerCasedName.indexOf('on') === 0 && lowerCasedName.length > 2) { warning( false, 'Unknown event handler property `%s`. It will be ignored.%s',