diff --git a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNote.js b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNote.js index a5f713584b23ed180f0c1eacdef4292bea2a4b15..1225ed1bd09e1c15a180add95bfcc417ade7c8d2 100644 --- a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNote.js +++ b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNote.js @@ -4,15 +4,14 @@ class IsolatedNote extends DocumentNode {} IsolatedNote.define({ 'type': 'isolated-note', - 'note-content': { - type: 'string', - optional: true + 'parentNoteId': { + type: 'string' }, 'index': { type: 'number', optional: true }, - description: 'text' + content: 'text' }) export default IsolatedNote diff --git a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js index 9967cb6262ac6aa024c4a167a31346a79791a348..30c380d89cac4372360df98715b06c9ece0db355 100644 --- a/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js +++ b/app/components/SimpleEditor/elements/isolatedNote/IsolatedNoteComponent.js @@ -6,7 +6,7 @@ class IsolatedNoteComponent extends BlockNodeComponent { let el = $$('div').addClass('sc-entity') el.append( $$(TextPropertyEditor, { - path: [this.props.node.id, 'description'], + path: [this.props.node.id, 'content'], disabled: this.props.disabled, tagName: 'p', multiLine: true diff --git a/app/components/SimpleEditor/elements/note/Note.js b/app/components/SimpleEditor/elements/note/Note.js index 82579d2abe8647801c701959589dba0104bd6250..51af949caa2935a9170c7553d515fa98642330d7 100644 --- a/app/components/SimpleEditor/elements/note/Note.js +++ b/app/components/SimpleEditor/elements/note/Note.js @@ -6,7 +6,7 @@ Note.define({ 'type': 'note', 'note-content': { type: 'string', - optional: true + default: '' } }) diff --git a/app/components/SimpleEditor/elements/note/NoteComponent.js b/app/components/SimpleEditor/elements/note/NoteComponent.js index 3140ee25b3cf1ab15a81b674f11fdd8284bf1bc5..b0b7e29a67e600e67fca2573be1c30ad3f82ae03 100644 --- a/app/components/SimpleEditor/elements/note/NoteComponent.js +++ b/app/components/SimpleEditor/elements/note/NoteComponent.js @@ -22,7 +22,7 @@ class NoteComponent extends Component { if (!selected.node) return const provider = this.getProvider() this.disableTools(selected) - provider.createShowNote(selected) + provider.createShowNote(selected.node) } disableTools () { @@ -50,7 +50,7 @@ class NoteComponent extends Component { if (typeof note[0] !== 'undefined') { return { - node: note + node: note[0] } } else { return { diff --git a/app/components/SimpleEditor/miniEditor/config.js b/app/components/SimpleEditor/miniEditor/config.js index af34a4a4b43b6ecc679295fade2df43457151881..86a57e84e36538cd8f7911d05663800b48f99b16 100644 --- a/app/components/SimpleEditor/miniEditor/config.js +++ b/app/components/SimpleEditor/miniEditor/config.js @@ -10,6 +10,7 @@ import { } from 'substance' import CommentPackage from '../elements/comment/CommentPackage' +import IsolatedNote from '../elements/isolatedNote/IsolatedNotePackage' let config = { name: 'simple-editor', @@ -29,6 +30,7 @@ let config = { config.import(PersistencePackage) config.import(SpellCheckPackage) config.import(CommentPackage) + config.import(IsolatedNote) } } diff --git a/app/components/SimpleEditor/panes/Notes/Notes.js b/app/components/SimpleEditor/panes/Notes/Notes.js index 7a1a40e83ae1c4a9dae022b9faab16d72b9b87cd..631592bc1eefc3164853b4e3ad55e126741fee01 100644 --- a/app/components/SimpleEditor/panes/Notes/Notes.js +++ b/app/components/SimpleEditor/panes/Notes/Notes.js @@ -3,6 +3,7 @@ import { Component, EditorSession, import MiniEditor from '../../miniEditor/miniEditor' import config from '../../miniEditor/config' import Importer from '../../SimpleEditorImporter' +import {forEach} from 'lodash' // import SimpleExporter from '../../SimpleEditorExporter' class Notes extends Component { @@ -11,6 +12,7 @@ class Notes extends Component { this.resize = this.resize.bind(this) this.stopResize = this.stopResize.bind(this) + this.saveNotes = this.saveNotes.bind(this) } // use toc:updated to avoid rewriting TOCProvider's this.handleDocumentChange didMount () { @@ -58,29 +60,59 @@ class Notes extends Component { return el } - _initMiniEditor () { + _initMiniEditor (tx) { const configurator = new Configurator().import(config) configurator.addImporter('html', Importer) - + console.log('tx', tx) const importer = configurator.createImporter('html') const provider = this.getProvider() const notes = provider.computeEntries() - let notesContent = '' - for (var i = 0; i < notes.length; i++) { - notesContent += notes[i].content + let nontesContent = '' + if (this.context.notesProvider.config.miniEditorSession !== '') { + for (var i = 0; i < notes.main.length; i++) { + console.log('old', provider) + console.log('createIsolated', provider.createIsolatedNote(notes.main[i])) + nontesContent += provider.createIsolatedNote(notes.main[i]) + } } + const doc = importer.importDocument(notesContent) const editorSession = new EditorSession(doc, { configurator: configurator }) - + editorSession.setSaveHandler({ + saveDocument: this.saveNotes + }) return editorSession } + saveNotes (source) { + const provider = this.getProvider() + const notes = provider.computeEntries() + let self = this + + console.log('notes', notes) + + forEach(notes.main, function (mainNote) { + forEach(notes.mini, function (miniNote) { + if (miniNote.parentNoteId === mainNote.id) { + self.context.editorSession.transaction(function (tx, args) { + const path = [mainNote.id, 'note-content'] + tx.set(path, miniNote.content) + }) + } + }) + }) + // this.context.editor.rerender() + console.log('notes after', notes) + return new Promise(function (resolve, reject) { + resolve() + }) + } getProvider () { return this.context.notesProvider } diff --git a/app/components/SimpleEditor/panes/Notes/NotesProvider.js b/app/components/SimpleEditor/panes/Notes/NotesProvider.js index d489a13454e811231e7aba6697c84afa7e3ff40a..b0aeb4226fa18dec55efaeb5962ba6b191dd4c3a 100644 --- a/app/components/SimpleEditor/panes/Notes/NotesProvider.js +++ b/app/components/SimpleEditor/panes/Notes/NotesProvider.js @@ -10,18 +10,25 @@ class NotesProvider extends TOCProvider { const docMini = this.config.miniEditorSession.document let nodesMini = '' if (docMini) nodesMini = docMini.getNodes() - // if(docMini)console.log('paragraphs', nodesMini) + + if (docMini)console.log('paragraphs', nodesMini) + // get all notes from the document const notesMain = _.pickBy(nodesMain, function (value, key) { return value.type === 'note' }) const notesMini = _.pickBy(nodesMini, function (value, key) { - return value.type === 'paragraph' + return value.type === 'isolated-note' }) - - const entries = this.sortNodes(notesMain) + const entriesMain = this.sortNodes(notesMain) const entriesMini = this.sortNodesMini(notesMini) - // console.log(entries, entriesMini) + + console.log(entriesMain, entriesMini) + const entries = { + main: entriesMain, + mini: entriesMini + } + return entries } @@ -41,10 +48,9 @@ class NotesProvider extends TOCProvider { return { id: note.id, - content: note['note-content'], + 'note-content': note['note-content'], blockPosition: blockPosition, - nodePosition: nodePosition, - node: note + nodePosition: nodePosition } }) @@ -66,7 +72,8 @@ class NotesProvider extends TOCProvider { return { id: note.id, - content: note.content + content: note.content, + parentNoteId: note.parentNoteId // blockPosition: blockPosition, // nodePosition: nodePosition, // node: note @@ -78,7 +85,42 @@ class NotesProvider extends TOCProvider { createShowNote (note) { console.log('in provider', note) + console.log('this', this) + + if (note['note-content'] !== '') { + console.log('empty') + return + } + + this.createIsolatedNote(note) } + + createNodeData (tx, note) { + return { + 'type': 'isolated-note', + 'content': note['note-content'], + 'parentNoteId': note.id, + 'index': 1 + } + } + + createIsolatedNote (note) { + let self = this + let node = {} + console.log('this', this) + this.config.miniEditorSession.transaction(function (tx) { + var container = tx.get('body') + // console.log('container', container) + // var textType = tx.getSchema().getDefaultTextType() + // console.log('tx', tx) + + let nodeData = self.createNodeData(tx, note) + // console.log('nodeData', nodeData) + node = tx.insertBlockNode(nodeData) + console.log('node', node) + }) + } + } NotesProvider.tocTypes = ['note']