From 671edf0def2b4fb0bbdd46ad334b26d32dc87193 Mon Sep 17 00:00:00 2001
From: yannis <yannisbarlas@gmail.com>
Date: Wed, 29 Mar 2017 17:34:44 +0300
Subject: [PATCH] start porting track-changes handler helpers and selection
 helpers to their own files

---
 .../track_change/TrackChangesProvider.js      | 22 +++++------
 .../track_change/utils/handlerHelpers.js      | 22 +++++++++++
 .../track_change/utils/selectionHelpers.js    | 39 +++++++++++++++++++
 3 files changed, 70 insertions(+), 13 deletions(-)
 create mode 100644 app/components/SimpleEditor/elements/track_change/utils/handlerHelpers.js
 create mode 100644 app/components/SimpleEditor/elements/track_change/utils/selectionHelpers.js

diff --git a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js
index 7a0a201..23bf741 100644
--- a/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js
+++ b/app/components/SimpleEditor/elements/track_change/TrackChangesProvider.js
@@ -30,6 +30,10 @@ import {
   truncateTrackAnnotation
 } from './utils/transformations'
 
+import {
+  createAdditionAnnotationOnLastChar
+} from './utils/handlerHelpers'
+
 class TrackChangesProvider extends TOCProvider {
   constructor (document, config) {
     super(document, config)
@@ -37,6 +41,7 @@ class TrackChangesProvider extends TOCProvider {
 
     // handle button actions
     const editor = this.config.controller
+
     editor.handleActions({
       'trackChangesViewUpdate': () => {
         editor.extendState({ trackChangesView: !editor.state.trackChangesView })
@@ -100,7 +105,7 @@ class TrackChangesProvider extends TOCProvider {
           insertText(options)
         }
 
-        if (mode) this.createAdditionAnnotationOnLastChar()
+        if (mode) createAdditionAnnotationOnLastChar(options)
       }
 
       return
@@ -309,16 +314,6 @@ class TrackChangesProvider extends TOCProvider {
     HANDLER COMMON FUNCTIONS
   */
 
-  createAdditionAnnotationOnLastChar () {
-    const selection = this.setSelectionPlusOne('left')
-    const status = 'add'
-    const surface = this.getSurface()
-    const { user } = this.config
-
-    createTrackAnnotation({ selection, status, surface, user })
-    this.moveCursorTo('end')
-  }
-
   deleteAllOwnAdditions (selection) {
     const surface = this.getSurface()
     const originalSelection = selection || this.getSelection()
@@ -408,7 +403,7 @@ class TrackChangesProvider extends TOCProvider {
     insertText(options)
 
     // TODO -- watch it with additions by other users
-    this.createAdditionAnnotationOnLastChar()
+    createAdditionAnnotationOnLastChar(options)
   }
 
   insertCharacterWithoutExpandingAnnotation (annotation, options) {
@@ -426,7 +421,8 @@ class TrackChangesProvider extends TOCProvider {
   }
 
   markSelectionAsDeleted (options) {
-    const { direction, selection } = options
+    // const { direction, selection } = options
+    const { direction } = options
     options.status = 'delete'
     createTrackAnnotation(options)
     this.moveCursorTo(direction.cursorTo)
diff --git a/app/components/SimpleEditor/elements/track_change/utils/handlerHelpers.js b/app/components/SimpleEditor/elements/track_change/utils/handlerHelpers.js
new file mode 100644
index 0000000..08358e0
--- /dev/null
+++ b/app/components/SimpleEditor/elements/track_change/utils/handlerHelpers.js
@@ -0,0 +1,22 @@
+import {
+  getSelection,
+  moveCursorTo,
+  setSelectionPlusOne
+} from './selectionHelpers'
+
+import {
+  createTrackAnnotation
+} from './transformations'
+
+const createAdditionAnnotationOnLastChar = options => {
+  const { surface } = options
+  options.selection = getSelection(surface)
+
+  setSelectionPlusOne(options, 'left')
+  createTrackAnnotation(options)
+  moveCursorTo(options, 'end')
+}
+
+export {
+  createAdditionAnnotationOnLastChar
+}
diff --git a/app/components/SimpleEditor/elements/track_change/utils/selectionHelpers.js b/app/components/SimpleEditor/elements/track_change/utils/selectionHelpers.js
new file mode 100644
index 0000000..d803aad
--- /dev/null
+++ b/app/components/SimpleEditor/elements/track_change/utils/selectionHelpers.js
@@ -0,0 +1,39 @@
+const getSelection = (surface) => {
+  return surface.domSelection.getSelection()
+}
+
+const moveCursorTo = (options, point) => {
+  // const selection = sel || this.getSelection()
+  const { selection, surface } = options
+  // const surface = this.getSurface()
+
+  // TODO -- use substance's selection.collapse(direction)
+  if (point === 'start') {
+    selection.end.offset = selection.start.offset
+  } else if (point === 'end') {
+    selection.start.offset = selection.end.offset
+  } else {
+    selection.start.offset = point
+    selection.end.offset = point
+  }
+
+  surface.editorSession.setSelection(selection)
+}
+
+// const setSelectionPlusOne = (direction) {
+const setSelectionPlusOne = (options, direction) => {
+  const { selection, surface } = options
+
+  if (direction === 'left') selection.start.offset -= 1
+  if (direction === 'right') selection.end.offset += 1
+
+  surface.editorSession.setSelection(selection)
+
+  return selection
+}
+
+export {
+  getSelection,
+  moveCursorTo,
+  setSelectionPlusOne
+}
-- 
GitLab