1
1
import 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
+
3
17
import createMarkdownShortcutsPlugin from 'draft-js-markdown-shortcuts-plugin' ; // eslint-disable-line
4
18
import {
5
19
// convertToRaw,
@@ -10,26 +24,37 @@ import {
10
24
import styles from './styles.css' ;
11
25
// import initialState from './initialState';
12
26
13
- const markdownShortcutsPlugin = createMarkdownShortcutsPlugin ( {
14
- onChangeCheckbox : ( e ) => {
15
- console . info ( 'Checkbox changed' , e ) ; // eslint-disable-line
16
- }
17
- } ) ;
27
+ const plugins = [ createMarkdownShortcutsPlugin ( ) ] ;
18
28
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
+ ] ;
20
43
21
44
// const contentState = ContentState.createFromBlockArray(convertFromRaw(initialState));
22
45
const contentState = ContentState . createFromText ( '' ) ;
46
+ const initialEditorState = EditorState . createWithContent ( contentState ) ;
23
47
24
48
export default class DemoEditor extends Component {
25
49
26
50
state = {
27
- editorState : EditorState . createWithContent ( contentState )
51
+ editorState : initialEditorState
28
52
} ;
29
53
30
54
componentDidMount = ( ) => {
31
- if ( this . editor ) {
32
- this . editor . focus ( ) ;
55
+ const { editor } = this ;
56
+ if ( editor ) {
57
+ setTimeout ( editor . focus . bind ( editor ) , 1000 ) ;
33
58
}
34
59
}
35
60
@@ -47,7 +72,8 @@ export default class DemoEditor extends Component {
47
72
{ placeholder }
48
73
< div className = { styles . editor } onClick = { this . focus } >
49
74
< Editor
50
- editorState = { this . state . editorState }
75
+ decorators = { decorators }
76
+ editorState = { editorState }
51
77
onChange = { this . onChange }
52
78
plugins = { plugins }
53
79
spellCheck
0 commit comments