/**
* This component encapsulates codemirror-binding as a React component.
* Derived from the original ShareDB textarea example found at
*/
import React, { Component } from 'react'
import ShareDBCodeMirrorBinding from 'codemirror-binding'
export default class CodeMirrorBinding extends Component {
componentDidMount () {
if (process.browser) {
const { doc, path, mode, inlet = true, height = 500 } = this.props
const CodeMirror = require('codemirror')
require('codemirror/mode/javascript/javascript')
require('codemirror/mode/jsx/jsx')
require('codemirror/mode/xml/xml')
require('codemirror/mode/css/css')
require('codemirror/mode/htmlmixed/htmlmixed')
require('codemirror/addon/comment/comment')
const codeMirror = CodeMirror(this.el, { mode })
codeMirror.setSize(null, height)
this.binding = new ShareDBCodeMirrorBinding(codeMirror, doc, path)
this.binding.setup()
}
}
componentWillUnmount () {
if (this.binding) {
this.binding.destroy()
}
}
render () {
return <div ref={el => { this.el = el }} />
}
}
P. S. I'd advise against using the word "simple" in your requirements definition ;) A collaborative rich text editor is anything but simple.