From ce1061cf008f577893a154af87ebdb9df160abb4 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Wed, 5 Apr 2017 19:45:17 +0300 Subject: [PATCH] both editors listen throught same provider to compute their nodes (needs to write cleaner notesProvider) --- app/components/SimpleEditor/Editor.js | 4 +- .../SimpleEditor/miniEditor/miniEditor.js | 11 +++++ .../SimpleEditor/panes/Notes/Notes.js | 3 +- .../SimpleEditor/panes/Notes/NotesProvider.js | 41 +++++++++++++++++-- 4 files changed, 53 insertions(+), 6 deletions(-) diff --git a/app/components/SimpleEditor/Editor.js b/app/components/SimpleEditor/Editor.js index 23c4aa4..0c00599 100644 --- a/app/components/SimpleEditor/Editor.js +++ b/app/components/SimpleEditor/Editor.js @@ -259,7 +259,9 @@ class Editor extends ProseEditor { }) // notes provider - const notesProvider = new NotesProvider(doc) + const notesProvider = new NotesProvider(doc, { + miniEditorSession: '' + }) // comments provider const commentsProvider = new CommentsProvider(doc, { diff --git a/app/components/SimpleEditor/miniEditor/miniEditor.js b/app/components/SimpleEditor/miniEditor/miniEditor.js index a23db04..bd036f4 100644 --- a/app/components/SimpleEditor/miniEditor/miniEditor.js +++ b/app/components/SimpleEditor/miniEditor/miniEditor.js @@ -8,6 +8,17 @@ import Comments from '../panes/Comments/CommentBoxList' import CommentsProvider from '../panes/Comments/CommentsProvider' class MiniEditor extends ProseEditor { + + didMount () { + this.editorSession.onUpdate('document', this.setEditorSession, this) + this.context.notesProvider.config.miniEditorSession = this.editorSession + } + + setEditorSession () { + this.context.notesProvider.config.miniEditorSession = this.editorSession + this.context.notesProvider.computeEntries() + } + render ($$) { const el = $$('div').addClass('sc-mini-editor') let toolbar = this._renderMiniToolbar($$) diff --git a/app/components/SimpleEditor/panes/Notes/Notes.js b/app/components/SimpleEditor/panes/Notes/Notes.js index aff2ebf..cc131e2 100644 --- a/app/components/SimpleEditor/panes/Notes/Notes.js +++ b/app/components/SimpleEditor/panes/Notes/Notes.js @@ -55,7 +55,7 @@ class Notes extends Component { configurator.addImporter('html', Importer) const importer = configurator.createImporter('html') - const doc = importer.importDocument('Hello') + const doc = importer.importDocument('') const editorSession = new EditorSession(doc, { configurator: configurator @@ -75,6 +75,7 @@ class Notes extends Component { onNotesUpdated (change) { const notesProvider = this.getProvider() notesProvider.handleDocumentChange(change) + this.context.notesProvider.config.miniEditorSession = this._initMiniEditor() this.rerender() } diff --git a/app/components/SimpleEditor/panes/Notes/NotesProvider.js b/app/components/SimpleEditor/panes/Notes/NotesProvider.js index ba3fe34..277e424 100644 --- a/app/components/SimpleEditor/panes/Notes/NotesProvider.js +++ b/app/components/SimpleEditor/panes/Notes/NotesProvider.js @@ -4,15 +4,24 @@ import { TOCProvider } from 'substance' class NotesProvider extends TOCProvider { computeEntries () { - const doc = this.getDocument() - const nodes = doc.getNodes() + const docMain = this.getDocument() + const nodesMain = docMain.getNodes() + const docMini = this.config.miniEditorSession.document + let nodesMini = '' + if (docMini) nodesMini = docMini.getNodes() // get all notes from the document - const notes = _.pickBy(nodes, function (value, key) { + const notesMain = _.pickBy(nodesMain, function (value, key) { + return value.type === 'note' + }) + + const notesMini = _.pickBy(nodesMini, function (value, key) { return value.type === 'note' }) - const entries = this.sortNodes(notes) + const entries = this.sortNodes(notesMain) + const entriesMini = this.sortNodesMini(notesMini) + console.log(entries, entriesMini) return entries } @@ -41,6 +50,30 @@ class NotesProvider extends TOCProvider { return _.sortBy(notes, ['blockPosition', 'nodePosition']) } + + sortNodesMini (nodes) { + let notes = _.clone(nodes) + if (this.config.miniEditorSession === '') return + + const doc = this.config.miniEditorSession.document + const container = doc.get('mini') + + notes = _.map(notes, function (note) { + const blockId = note.path[0] + const blockPosition = container.getPosition(blockId) + const nodePosition = note.start.offset + + return { + id: note.id, + content: note['note-content'], + blockPosition: blockPosition, + nodePosition: nodePosition, + node: note + } + }) + + return _.sortBy(notes, ['blockPosition', 'nodePosition']) + } } NotesProvider.tocTypes = ['note'] -- GitLab