From 82ff30e3afa05751144b258fc02609f278b0ba74 Mon Sep 17 00:00:00 2001 From: Ben Fischer Date: Sun, 31 Mar 2019 12:24:32 -0500 Subject: [PATCH] fix: add implementation for contenteditable input events --- src/__tests__/events.js | 7 +++++++ src/events.js | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/src/__tests__/events.js b/src/__tests__/events.js index 969a5584..ed80d9dd 100644 --- a/src/__tests__/events.js +++ b/src/__tests__/events.js @@ -169,6 +169,13 @@ test('assigning a value to a target that cannot have a value throws an error', ( ) }) +test('triggers an input event on a contenteditable target', () => { + const node = document.createElement('div') + node.setAttribute('contenteditable', 'true') + fireEvent.change(node, {target: {value: 'i am a rich editor'}}) + expect(node.textContent).toEqual('i am a rich editor') +}) + test('assigning the files property on an input', () => { const node = document.createElement('input') const file = new document.defaultView.File(['(⌐□_□)'], 'chucknorris.png', { diff --git a/src/events.js b/src/events.js index af9681e7..a230f467 100644 --- a/src/events.js +++ b/src/events.js @@ -349,6 +349,11 @@ function setNativeValue(element, value) { prototypeValueSetter.call(element, value) } /* istanbul ignore next (I don't want to bother) */ else if (valueSetter) { valueSetter.call(element, value) + } else if ( + element.isContentEditable || + element.getAttribute('contenteditable') == 'true' + ) { + element.textContent = value } else { throw new Error('The given element does not have a value setter') }