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