From 562156f50a72ebc97127e59db2ff65b4ce58ae69 Mon Sep 17 00:00:00 2001
From: john <johnbarlas39@gmail.com>
Date: Wed, 4 Jan 2017 16:30:13 +0200
Subject: [PATCH] handle space key

---
 .../SimpleEditor/ContainerEditor.js           | 52 ++++++++++++-------
 .../track_change/TrackChangesProvider.js      |  2 +-
 2 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/app/components/SimpleEditor/ContainerEditor.js b/app/components/SimpleEditor/ContainerEditor.js
index 376773a..532f0d7 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 7174e68..4d4128f 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' })
   }
-- 
GitLab