From cce6a9cb2194fad793ad7a18c1165370814d79f2 Mon Sep 17 00:00:00 2001 From: Alexandros Georgantas <alexgeorg86@gmail.com> Date: Wed, 12 Apr 2017 15:30:26 +0300 Subject: [PATCH] WIP isolated notes added in the notes pane --- .../isolatedNote/IsolatedNoteComponent.js | 2 +- .../isolatedNote/IsolatedNoteHTMLConverter.js | 13 +- .../elements/note/NoteComponent.js | 8 +- .../SimpleEditor/miniEditor/config.js | 5 +- .../SimpleEditor/panes/Notes/Notes.js | 3 +- .../SimpleEditor/panes/Notes/NotesProvider.js | 133 +++++++++++++++--- 6 files changed, 127 insertions(+), 37 deletions(-) diff --git a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js index 30c380d..b76cca0 100644 --- a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js +++ b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js @@ -10,7 +10,7 @@ class IsolatedNoteComponent extends BlockNodeComponent { disabled: this.props.disabled, tagName: 'p', multiLine: true - }).ref('nameEditor')) + }).ref('noteContentEditor-' + this.props.node.id)) return el } diff --git a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteHTMLConverter.js b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteHTMLConverter.js index e1006da..69668d7 100644 --- a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteHTMLConverter.js +++ b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteHTMLConverter.js @@ -1,15 +1,4 @@ export default { type: 'isolated-note', - tagName: 'isolated-note', - - import: function (element, node, converter) { - console.log('import', node) - node['note-content'] = element.attr('note-content') - }, - - export: function (node, element, converter) { - console.log('export', node) - var noteContent = node['note-content'] - element.setAttribute('note-content', noteContent) - } + tagName: 'isolated-note' } diff --git a/app/components/SimpleEditor/elements/note/NoteComponent.js b/app/components/SimpleEditor/elements/note/NoteComponent.js index b0b7e29..44bc60a 100644 --- a/app/components/SimpleEditor/elements/note/NoteComponent.js +++ b/app/components/SimpleEditor/elements/note/NoteComponent.js @@ -6,7 +6,7 @@ import { Component, documentHelpers } from 'substance' class NoteComponent extends Component { didMount () { - this.context.editorSession.onUpdate('', this.createShowNote, this) + this.context.editorSession.onUpdate('', this.test, this) } render ($$) { @@ -16,10 +16,16 @@ class NoteComponent extends Component { return el } + test() { + const provider = this.getProvider() + provider.computeEntries() + this.rerender() + } createShowNote () { const selected = this.getSelection() if (!selected.node) return + console.log('in note component', selected.node) const provider = this.getProvider() this.disableTools(selected) provider.createShowNote(selected.node) diff --git a/app/components/SimpleEditor/miniEditor/config.js b/app/components/SimpleEditor/miniEditor/config.js index 76d465c..94b702f 100644 --- a/app/components/SimpleEditor/miniEditor/config.js +++ b/app/components/SimpleEditor/miniEditor/config.js @@ -4,7 +4,8 @@ import { ParagraphPackage, ProseArticle, StrongPackage, - SpellCheckPackage + SpellCheckPackage, + PersistencePackage } from 'substance' @@ -30,7 +31,7 @@ let config = { config.import(SpellCheckPackage) config.import(CommentPackage) config.import(IsolatedNote) - config.import(TrackChangePackage) + config.import(PersistencePackage) } } diff --git a/app/components/SimpleEditor/panes/Notes/Notes.js b/app/components/SimpleEditor/panes/Notes/Notes.js index a9ecff7..6f38008 100644 --- a/app/components/SimpleEditor/panes/Notes/Notes.js +++ b/app/components/SimpleEditor/panes/Notes/Notes.js @@ -25,7 +25,7 @@ class Notes extends Component { provider.createIsolatedNote(notes.main[i]) } - provider.config.miniEditorSession.onUpdate('document', this.saveNotes, this) + // provider.config.miniEditorSession.onUpdate('document', this.saveNotes, this) } initResize (e) { @@ -97,6 +97,7 @@ class Notes extends Component { forEach(notes.main, function (mainNote) { forEach(notes.mini, function (miniNote) { if (miniNote.parentNoteId === mainNote.id) { + console.log('miniNote', miniNote) self.context.editorSession.transaction(function (tx, args) { const path = [mainNote.id, 'note-content'] tx.set(path, miniNote.content) diff --git a/app/components/SimpleEditor/panes/Notes/NotesProvider.js b/app/components/SimpleEditor/panes/Notes/NotesProvider.js index 4c9dec7..6ea7324 100644 --- a/app/components/SimpleEditor/panes/Notes/NotesProvider.js +++ b/app/components/SimpleEditor/panes/Notes/NotesProvider.js @@ -1,6 +1,6 @@ import _ from 'lodash' -import { TOCProvider } from 'substance' +import { TOCProvider, Component } from 'substance' class NotesProvider extends TOCProvider { computeEntries () { @@ -82,44 +82,137 @@ class NotesProvider extends TOCProvider { } createShowNote (note) { - + const notes = this.computeEntries() + _.forEach(notes.mini, function (miniNote) { + if (miniNote.parentNoteId === note.id) { + console.log('if') + return false + } + }.bind(this)) if (note['note-content'] !== '') { console.log('empty') return } - const notes = this.computeEntries() - + + console.log('notes', notes) if (notes.mini.length === 0) { this.createIsolatedNote(note) return } - _.forEach(notes.main, function (mainNote) { - _.forEach(notes.mini, function (miniNote) { - if (miniNote.parentNoteId === mainNote.id) { - return false - } else { - this.createIsolatedNote(note) - } - }.bind(this)) - }.bind(this)) + // _.forEach(notes.main, function (mainNote) { + // _.forEach(notes.mini, function (miniNote) { + // if (miniNote.parentNoteId === mainNote.id) { + // return false + // } else { + // this.createIsolatedNote(note) + // } + // }.bind(this)) + // }.bind(this)) + this.createIsolatedNote(note) + // console.log('something', this.config.miniEditorSession.getSelection()) } - createNodeData (tx, note) { + createNodeData (note) { return { 'type': 'isolated-note', 'content': note['note-content'], - 'parentNoteId': note.id, - 'index': 1 + 'parentNoteId': note.id } } createIsolatedNote (note) { - this.config.miniEditorSession.transaction(function (tx) { - let nodeData = this.createNodeData(tx, note) - tx.insertBlockNode(nodeData) - }.bind(this)) + console.log('create Isolated Note') + // console.log('note', note) + // console.log('config', this.config) + // let rootEl + let existingNodes = this.config.miniEditorContext.doc.getNodes() + let hasIsolatedNotes = false + // console.log('existingNodes', existingIsolatedNodes) + _.mapKeys(existingNodes, function (value, key) { + // console.log('key', key) + if (key.indexOf('isolated-note') !== -1) { + hasIsolatedNotes = true + } + }) + if (hasIsolatedNotes) { + console.log('hello from true') + const docMini = this.config.miniEditorSession.document + let nodesMini = '' + if (docMini) nodesMini = docMini.getNodes() + const notesMini = _.pickBy(nodesMini, function (value, key) { + return value.type === 'isolated-note' + }) + const entriesMini = this.sortNodesMini(notesMini) + // console.log('isolatedNotes', isolatedNotes) + let lastNote = _.last(this.sortNodesMini(entriesMini)) + // console.log('lastNote', lastNote) + // this.config.miniEditorSession.setSelection({ + // type: 'node', + // nodeId: lastNote.id, + // containerId: 'body', + // surfaceId: 'body' + // }) + // let selection = this.config.miniEditorSession.getSelection() + let surface = this.config.miniEditorContext.surfaceManager.getSurface('body') + let container = surface.getContainer() + let nodePos = container.getPosition(lastNote.id, 'strict') + // console.log('nodepos', nodePos) + let nodeData = this.createNodeData(note) + this.config.miniEditorSession.transaction(function (tx) { + if (!tx.get(nodeData.id)) { + let blockNode = tx.create(nodeData) + tx.update(container.getContentPath(), { type: 'insert', pos: nodePos + 1, value: blockNode.id }) + } + }) + // console.log('after new note') + // console.log('selection before', selection) + // selection.start.offset += 1 + // selection.end.offset += 1 + // surface.editorSession.setSelection(selection) + // console.log('selection after', selection) + } else { + // console.log('hello from else') + this.config.miniEditorSession.transaction(function (tx) { + let nodeData = this.createNodeData(note) + tx.insertBlockNode(nodeData) + }.bind(this)) + } + + // this.config.miniEditorSession.transaction(function (tx) { + // let nodeData = this.createNodeData(tx, note) + // tx.insertBlockNode(nodeData) + // }.bind(this)) + // console.log('config after', this.config) + // let selection = this.config.miniEditorSession.getSelection() + // console.log('selection', selection) + // this.config.miniEditorSession.setSelection({ + // type: 'node', + // nodeId: selection.nodeId, + // containerId: selection.containerId, + // surfaceId: selection.surfaceId + // }) + // let node = this.config.miniEditorContext.doc.get(selection.getNodeId()) + // rootEl = this.config.miniEditorContext.domSelection.editor.el + // let comp = Component.unwrap(rootEl.find('*[data-id="'+selection.getNodeId()+'"]')) + // comp.el.focus() + // this.config.miniEditorContext.editor.rerender() + // console.log('node', node) + // console.log('comp', comp) + + } + + getSelection () { + const surface = this.getSurface() + return surface.domSelection.getSelection() + } + + getSurface () { + const surface = this.config.miniEditorSession.getFocusedSurface() + console.log('f_surface', surface) + + return surface } } -- GitLab