# 富文本及 Markdown 编辑器
基于 [braft-editor](https://github.com/margox/braft-editor) 和 [react-mde](https://github.com/andrerpena/react-mde) 的富文本编辑器。
## install
```
$ npm install git+https://git.links123.net/node/editor.git --save
```
## 使用
#### RichEditor
```js
import React from 'react'
import { RichEditor } from 'editor';
const { EditorState } = RichEditor;
export default class RichEditorDemo extends React.Component {
    state = {
        // 创建一个空的editorState作为初始值
        editorState: EditorState.createFrom('')
    }
    async componentDidMount () {
        // 假设此处从服务端获取html格式的编辑器内容
        const htmlContent = await fetchEditorContent()
        const htmlContent = '
ss
'
        // 使用EditorState.createFrom将html字符串转换为编辑器需要的editorState数据
        this.setState({
            editorState: EditorState.createFrom(htmlContent)
        })
    }
    submitContent = async () => {
        // 在编辑器获得焦点时按下ctrl+s会执行此方法
        // 编辑器内容提交到服务端之前,可直接调用editorState.toHTML()来获取HTML格式的内容
        const htmlContent = this.state.editorState.toHTML()
        const result = await saveEditorContent(htmlContent)
    }
    handleEditorChange = (editorState) => {
        this.setState({ editorState })
    }
    render () {
        const { editorState } = this.state
        return (
            
                
            
        )
    }
}
```
- defaultProps:
|props|type|value|
|:-:|:-:|:-:|
|controls|array||
```js
const controls = [ 'headings', 'text-color', 'bold', 'italic', 'underline', 'strike-through', 'separator',
      'superscript', 'subscript', 'remove-styles', 'emoji', 'text-align', 'separator',
            'list-ul', 'list-ol', 'blockquote', 'code', 'separator',
                'link', 'separator', 'hr', 'separator',
                'media', 'separator',  'undo', 'redo' ]
```
#### MarkdownEditor
```js
import React from "react";
import { MarkdownEditor } from 'editor';
export default class MarkdownEditorDemo extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            mdeState: null,
        };
        this.converter = new Showdown.Converter({tables: true, simplifiedAutoLink: true});
    }
    handleValueChange = (mdeState) => {
        this.setState({mdeState});
    }
    render() {
        return (
            
        );
    }
}
```
- default props:
|props|type|value|
|:-:|:-:|:-:|
|layout|string|'horizontal'|
|buttonContentOptions|object||
|generateMarkdownPreview|func||
```js
const icons = {
    "bold": ,
    "heading": ,
    "italic": ,
    "strikethrough": ,
    "link": ,
    "quote-right": ,
    "code": ,
    "image": ,
    "list-ul": ,
    "list-ol": ,
    "tasks": ,
  };
const iconProvider = (name) => {
  return icons[name] || "❓";
};
  
const defaultProps = {
        layout: 'horizontal',
        buttonContentOptions: { iconProvider },
        generateMarkdownPreview: (markdown) => Promise.resolve(this.converter.makeHtml(markdown)),
}
```