-
chris authored1722d2e2
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Forked from
Coko Org / Products / ketty / editoria-app
346 commits behind the upstream repository.
Notes.js 4.29 KiB
import { Component, EditorSession,
ProseEditorConfigurator as Configurator } from 'substance'
import MiniEditor from '../../miniEditor/miniEditor'
import config from '../../miniEditor/config'
import Importer from '../../miniEditor/MiniEditorImporter'
import {isEmpty, find} from 'lodash'
class Notes extends Component {
constructor (props) {
super(props)
this.resize = this.resize.bind(this)
this.stopResize = this.stopResize.bind(this)
}
didMount () {
this.context.editorSession.onUpdate('document', this.onNotesUpdated, this)
}
render ($$) {
const miniSessionConf = this._initMiniEditor()
const resizer = $$('div').addClass('resize-area')
const el = $$('div')
.addClass('notes-container').append(resizer)
const miniEditorProps = this.getParentProps()
el.append($$(MiniEditor, {
book: miniEditorProps.book,
editorSession: miniSessionConf.editorSession,
comments: miniEditorProps.comments,
configurator: miniSessionConf.configurator,
containerId: 'mini',
history: miniEditorProps.history,
disabled: miniEditorProps.disabled,
fragment: miniEditorProps.fragment,
trackChanges: miniEditorProps.trackChanges,
update: miniEditorProps.update,
user: miniEditorProps.user
}))
resizer.addEventListener('mousedown', this.initResize, false)
return el
}
_initMiniEditor () {
const configurator = new Configurator().import(config)
configurator.addImporter('html', Importer)
const importer = configurator.createImporter('html')
const provider = this.getProvider()
const notes = provider.computeEntries()
let noteContent = ''
for (var i = 0; i < notes.length; i++) {
noteContent += notes[i]['note-content']
}
const doc = importer.importDocument(noteContent)
// const doc = importer.importDocument()
const editorSession = new EditorSession(doc, {
configurator: configurator
})
editorSession.setSaveHandler({
saveDocument: this.saveNotes
})
return {
editorSession: editorSession,
configurator: configurator
}
}
initResize (e) {
window.addEventListener('mousemove', this.resize, false)
window.addEventListener('mouseup', this.stopResize, false)
}
resize (e) {
const height = (this.el.el.offsetHeight + this.el.el.offsetTop - e.clientY)
const scrollPane = document.getElementById('mini-editor-content-panel').children
scrollPane[0].style.minHeight = height - 40 + 'px'
const mainScrollPane = document.getElementById('content-panel').children
mainScrollPane[0].style.maxHeight = this.el.el.offsetTop - 140 + 'px'
this.el.el.style.height = height + 'px'
}
stopResize (e) {
window.removeEventListener('mousemove', this.resize, false)
window.removeEventListener('mouseup', this.stopResize, false)
}
onNotesUpdated (change) {
const notesProvider = this.getProvider()
notesProvider.handleDocumentChange(change)
const miniEditor = this.getMiniEditor()
const NoteCreated = find(change.created, function (value, key) {
return value.type === 'note'
})
const NoteDeleted = find(change.deleted, function (value, key) {
return value.type === 'note'
})
if (!isEmpty(NoteCreated)) {
miniEditor.emit('notes:inserted', NoteCreated.id)
return false
}
if (!isEmpty(NoteDeleted)) {
miniEditor.emit('notes:deleted', NoteDeleted.id)
return false
}
}
getParentProps () {
return {
comments: this.context.commentsProvider.config.comments,
disabled: this.context.editor.props.disabled,
book: this.context.editor.props.book,
fragment: this.context.editor.props.fragment,
history: this.context.editor.props.history,
trackChanges: this.context.editor.props.trackChanges,
update: this.context.editor.props.update,
user: this.context.editor.props.user
}
}
getProvider () {
return this.context.notesProvider
}
getSurface () {
const provider = this.getProvider()
return provider.config.miniEditorContext.surfaceManager.getSurface('mini')
}
getMiniEditor () {
const provider = this.getProvider()
return provider.config.miniEditorContext.editor
}
dispose () {
const provider = this.getProvider()
provider.off(this)
}
}
export default Notes