From 1c2e09e9af2b67badb202c20a5a0acaf9dedf044 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 21 Apr 2017 13:02:27 +0300 Subject: [PATCH] creation of isolated note in miniEditor (WIP) --- app/components/SimpleEditor/Editor.js | 2 +- app/components/SimpleEditor/config.js | 2 +- .../SimpleEditor/elements/note/NoteCommand.js | 30 ++++++------- .../SimpleEditor/miniEditor/miniEditor.js | 42 ++++++++++++++++++- .../SimpleEditor/panes/Notes/Notes.js | 28 ++++++++----- .../SimpleEditor/panes/Notes/NotesProvider.js | 28 +++---------- 6 files changed, 81 insertions(+), 51 deletions(-) diff --git a/app/components/SimpleEditor/Editor.js b/app/components/SimpleEditor/Editor.js index 5af3e2e..e5a43a5 100644 --- a/app/components/SimpleEditor/Editor.js +++ b/app/components/SimpleEditor/Editor.js @@ -71,7 +71,7 @@ class Editor extends ProseEditor { let ContextMenu = this.componentRegistry.get('context-menu') // new what does it do? // let Dropzones = this.componentRegistry.get('dropzones') // new what does it do? - const footerNotes = $$(Notes) + const footerNotes = $$(Notes).ref('footer-notes') const props = { book: this.props.book, diff --git a/app/components/SimpleEditor/config.js b/app/components/SimpleEditor/config.js index 7d12ff7..bceffa5 100644 --- a/app/components/SimpleEditor/config.js +++ b/app/components/SimpleEditor/config.js @@ -59,7 +59,7 @@ const config = { config.import(SourceNotePackage) config.import(SpellCheckPackage) config.import(TrackChangePackage) - config.import(IsolatedNotePackage) + // config.import(IsolatedNotePackage) } } diff --git a/app/components/SimpleEditor/elements/note/NoteCommand.js b/app/components/SimpleEditor/elements/note/NoteCommand.js index 88f7bd9..c29dfbf 100644 --- a/app/components/SimpleEditor/elements/note/NoteCommand.js +++ b/app/components/SimpleEditor/elements/note/NoteCommand.js @@ -1,4 +1,4 @@ -import { InsertInlineNodeCommand, documentHelpers } from 'substance' +import { InsertInlineNodeCommand } from 'substance' class NoteCommand extends InsertInlineNodeCommand { createNodeData () { @@ -14,22 +14,22 @@ class NoteCommand extends InsertInlineNodeCommand { return tx.insertInlineNode(nodeData) }) - let selection = editorSession.getSelection() - let selectionBefore = selection._clone() - selectionBefore.start.offset -= 1 - let note = this.getCreatedNote(selectionBefore, editorSession) - const notesProvider = this.getNotesProvider(params) - notesProvider.createIsolatedNote(note) + // let selection = editorSession.getSelection() + // let selectionBefore = selection._clone() + // selectionBefore.start.offset -= 1 + // let note = this.getCreatedNote(selectionBefore, editorSession) + // const notesProvider = this.getNotesProvider(params) + // notesProvider.createIsolatedNote(note) } - getCreatedNote (selection, editorSession) { - const note = documentHelpers.getPropertyAnnotationsForSelection( - editorSession.getDocument(), - selection, - { type: 'note' } - ) - return note[0] - } + // getCreatedNote (selection, editorSession) { + // const note = documentHelpers.getPropertyAnnotationsForSelection( + // editorSession.getDocument(), + // selection, + // { type: 'note' } + // ) + // return note[0] + // } getNotesProvider (params) { return params.surface.context.notesProvider diff --git a/app/components/SimpleEditor/miniEditor/miniEditor.js b/app/components/SimpleEditor/miniEditor/miniEditor.js index 788f1f1..e68daee 100644 --- a/app/components/SimpleEditor/miniEditor/miniEditor.js +++ b/app/components/SimpleEditor/miniEditor/miniEditor.js @@ -10,9 +10,11 @@ import TrackChangesProvider from '../elements/track_change/TrackChangesProvider' class MiniEditor extends ProseEditor { didMount () { - this.context.notesProvider.config.miniEditorContext = this.getChildContext() - this.context.notesProvider.config.miniEditorSession = this.editorSession + const provider = this.getProvider() + provider.config.miniEditorContext = this.getChildContext() + provider.config.miniEditorSession = this.editorSession this.on('noteSelected', this.scrollTo, this) + this.on('notes:updated', this.createNotes, this) } render ($$) { @@ -81,6 +83,42 @@ class MiniEditor extends ProseEditor { this.refs.miniEditorContentPanel.scrollTo(nodeId) } + createNodeData (note, index) { + return { + 'type': 'isolated-note', + 'content': '', + 'parentNoteId': note.id, + index: index + } + } + + createNotes () { + const provider = this.getProvider() + const notes = provider.computeEntries() + console.log('notes Created', notes) + const surface = this.getSurface() + const container = surface.getContainer() + for (let i = 0; i < notes.length; i++) { + let nodeData = this.createNodeData(notes[i], i) + this.editorSession.transaction(function (tx) { + if (!tx.get(nodeData.id)) { + let blockNode = tx.create(nodeData) + tx.update(container.getContentPath(), { type: 'insert', pos: i, value: blockNode.id }) + } + }) + } + } + + getProvider () { + return this.context.notesProvider + } + + getSurface () { + const containerId = this.props.containerId + const provider = this.getProvider() + return provider.config.miniEditorContext.surfaceManager.getSurface(containerId) + } + getChildContext () { const oldContext = super.getChildContext() const doc = this.doc diff --git a/app/components/SimpleEditor/panes/Notes/Notes.js b/app/components/SimpleEditor/panes/Notes/Notes.js index f254738..275c28c 100644 --- a/app/components/SimpleEditor/panes/Notes/Notes.js +++ b/app/components/SimpleEditor/panes/Notes/Notes.js @@ -17,8 +17,8 @@ class Notes extends Component { didMount () { const provider = this.getProvider() + // provider.config.miniEditorSession.onUpdate('', this.saveNotes, this) this.context.editorSession.onUpdate('document', this.onNotesUpdated, this) - provider.config.miniEditorSession.onUpdate('', this.saveNotes, this) } initResize (e) { @@ -75,8 +75,8 @@ class Notes extends Component { const notes = provider.computeEntries() let noteContent = '' - for (var i = 0; i < notes.main.length; i++) { - noteContent += notes.main[i]['note-content'] + for (var i = 0; i < notes.length; i++) { + noteContent += notes[i]['note-content'] } const doc = importer.importDocument(noteContent) @@ -95,7 +95,7 @@ class Notes extends Component { const surface = this.getSurface() // For some reason the first character is not in the annotation so it is not getting saved // so we rerender the Surface - surface.rerender() + // surface.rerender() const notes = provider.computeEntries() const configurator = new Configurator().import(config) const exporter = new SimpleExporter(configurator.config) @@ -125,6 +125,20 @@ class Notes extends Component { return provider.config.miniEditorContext.surfaceManager.getSurface('mini') } + getMiniEditor () { + const provider = this.getProvider() + return provider.config.miniEditorContext.editor + } + + onNotesUpdated (change) { + const notesProvider = this.getProvider() + notesProvider.handleDocumentChange(change) + console.log('change', change) + const miniEditor = this.getMiniEditor() + miniEditor.emit('notes:updated') + // this.el.el.style.height = '95px' + } + getParentProps () { return { comments: this.context.commentsProvider.config.comments, @@ -138,12 +152,6 @@ class Notes extends Component { } } - onNotesUpdated (change) { - const notesProvider = this.getProvider() - notesProvider.handleDocumentChange(change) - // this.el.el.style.height = '95px' - } - dispose () { const provider = this.getProvider() provider.off(this) diff --git a/app/components/SimpleEditor/panes/Notes/NotesProvider.js b/app/components/SimpleEditor/panes/Notes/NotesProvider.js index 1697133..9782f1a 100644 --- a/app/components/SimpleEditor/panes/Notes/NotesProvider.js +++ b/app/components/SimpleEditor/panes/Notes/NotesProvider.js @@ -4,36 +4,20 @@ import { TOCProvider } from 'substance' class NotesProvider extends TOCProvider { computeEntries () { - const docMain = this.getDocument() - const nodesMain = docMain.getNodes() - - const docMini = this.config.miniEditorSession.document - let nodesMini = '' - if (docMini) nodesMini = docMini.getNodes() + console.log('compute') + const doc = this.getDocument() + const nodes = doc.getNodes() if (docMini)console.log('paragraphs', nodesMini) // get all notes from the document - const notesMain = _.pickBy(nodesMain, function (value, key) { + const noteNodes = _.pickBy(nodes, function (value, key) { return value.type === 'note' }) - const notesMini = _.pickBy(nodesMini, function (value, key) { - return value.type === 'isolated-note' - }) - - const entriesMain = this.sortNodes(notesMain) - const entriesMini = _.values(notesMini) - const entries = { - main: entriesMain, - mini: entriesMini - } - - if (entriesMini && entriesMain.length < entriesMini.length) { - this.findDeletedNote(entries) - } + const sortedNoteEntries = this.sortNodes(noteNodes) - return entries + return sortedNoteEntries } sortNodes (nodes) { -- GitLab