diff --git a/app/components/SimpleEditor/ContainerEditor.js b/app/components/SimpleEditor/ContainerEditor.js index 376773acd2f1f6f144996eacb97d41cd0d83c92a..532f0d7bca9e4b386d0adc752b1cb596334c21af 100644 --- a/app/components/SimpleEditor/ContainerEditor.js +++ b/app/components/SimpleEditor/ContainerEditor.js @@ -76,35 +76,51 @@ class ContainerEditor extends SubstanceContainerEditor { onTextInput (event) { if (!this.props.trackChanges) return super.onTextInput(event) - event.preventDefault() - event.stopPropagation() - - if (!event.data) return - this._state.skipNextObservation = true - - const trackChangesProvider = this.context.trackChangesProvider - const options = { + this.handleTracking({ event: event, - status: 'add' - } - trackChangesProvider.handleTransaction(options) + status: 'add', + surfaceEvent: 'input' + }) } _handleDeleteKey (event) { if (!this.props.trackChanges) return super._handleDeleteKey(event) + this.handleTracking({ + event: event, + status: 'delete', + surfaceEvent: 'delete' + }) + } + + _handleSpaceKey (event) { + if (!this.props.trackChanges) return super._handleSpaceKey(event) + + this.handleTracking({ + event: event, + status: 'add', + surfaceEvent: 'space' + }) + } + + handleTracking (options) { + const trackChangesProvider = this.context.trackChangesProvider + const { event, surfaceEvent } = options + event.preventDefault() event.stopPropagation() - // TODO -- needed? - const direction = (event.keyCode === keyboardKeys.BACKSPACE) ? 'left' : 'right' + if (surfaceEvent === 'input') { + if (!event.data) return + this._state.skipNextObservation = true + } - const trackChangesProvider = this.context.trackChangesProvider - const options = { - key: (direction === 'left') ? 'BACKSPACE' : 'DELETE', - move: direction, - status: 'delete' + if (surfaceEvent === 'delete') { + const direction = (event.keyCode === keyboardKeys.BACKSPACE) ? 'left' : 'right' + options.move = direction + options.key = (direction === 'left') ? 'BACKSPACE' : 'DELETE' } + trackChangesProvider.handleTransaction(options) } diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js index 7174e68b17877ec0bfdc82ef5e3c17fa7e176d26..4d4128fc48dd1441ccf0ef62fcf30732f2bbe957 100644 --- a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js +++ b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js @@ -387,7 +387,7 @@ class TrackChangesProvider { const surface = this.getSurface() surface.transaction(function (tx, args) { if (surface.domSelection) surface.domSelection.clear() - args.text = event.data + args.text = event.data || ' ' // if no data, it's a space key return surface.insertText(tx, args) }, { action: 'type' }) }