11import React , { Component } from 'react' ;
2- import Editor from 'draft-js-plugins-editor' ; // eslint-disable-line import/no-unresolved
2+ import Editor from 'draft-js-plugins-editor' ;
3+ import PrismDecorator from 'draft-js-prism' ;
4+ import Prism from 'prismjs' ;
5+ import 'prismjs/components/prism-java' ;
6+ import 'prismjs/components/prism-scala' ;
7+ import 'prismjs/components/prism-go' ;
8+ import 'prismjs/components/prism-sql' ;
9+ import 'prismjs/components/prism-bash' ;
10+ import 'prismjs/components/prism-c' ;
11+ import 'prismjs/components/prism-cpp' ;
12+ import 'prismjs/components/prism-kotlin' ;
13+ import 'prismjs/components/prism-perl' ;
14+ import 'prismjs/components/prism-ruby' ;
15+ import 'prismjs/components/prism-swift' ;
16+
317import createMarkdownShortcutsPlugin from 'draft-js-markdown-shortcuts-plugin' ; // eslint-disable-line
418import {
519 // convertToRaw,
@@ -10,26 +24,37 @@ import {
1024import styles from './styles.css' ;
1125// import initialState from './initialState';
1226
13- const markdownShortcutsPlugin = createMarkdownShortcutsPlugin ( {
14- onChangeCheckbox : ( e ) => {
15- console . info ( 'Checkbox changed' , e ) ; // eslint-disable-line
16- }
17- } ) ;
27+ const plugins = [ createMarkdownShortcutsPlugin ( ) ] ;
1828
19- const plugins = [ markdownShortcutsPlugin ] ;
29+ const decorators = [
30+ new PrismDecorator ( {
31+ getSyntax ( block ) {
32+ const language = block . getData ( ) . get ( 'language' ) ;
33+ if ( typeof Prism . languages [ language ] === 'object' ) {
34+ return language ;
35+ }
36+ return null ;
37+ } ,
38+ render ( { type, children } ) {
39+ return < span className = { `prism-token token ${ type } ` } > { children } </ span > ;
40+ }
41+ } )
42+ ] ;
2043
2144// const contentState = ContentState.createFromBlockArray(convertFromRaw(initialState));
2245const contentState = ContentState . createFromText ( '' ) ;
46+ const initialEditorState = EditorState . createWithContent ( contentState ) ;
2347
2448export default class DemoEditor extends Component {
2549
2650 state = {
27- editorState : EditorState . createWithContent ( contentState )
51+ editorState : initialEditorState
2852 } ;
2953
3054 componentDidMount = ( ) => {
31- if ( this . editor ) {
32- this . editor . focus ( ) ;
55+ const { editor } = this ;
56+ if ( editor ) {
57+ setTimeout ( editor . focus . bind ( editor ) , 1000 ) ;
3358 }
3459 }
3560
@@ -47,7 +72,8 @@ export default class DemoEditor extends Component {
4772 { placeholder }
4873 < div className = { styles . editor } onClick = { this . focus } >
4974 < Editor
50- editorState = { this . state . editorState }
75+ decorators = { decorators }
76+ editorState = { editorState }
5177 onChange = { this . onChange }
5278 plugins = { plugins }
5379 spellCheck
0 commit comments