DraftJS Utils code block return
by Thibaud Colas
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.0/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/draft-js/0.10.4/Draft.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/draft-js/0.10.4/Draft.css">
<div id="react-root"></div>
<script>
window.startContent = {
"entityMap": {},
"blocks": [{
"key": "1fv8t",
"text": "Unstyled",
"type": "unstyled",
"depth": 0,
"inlineStyleRanges": [],
"entityRanges": [],
"data": {}
}, {
"key": "f0898",
"text": "List item",
"type": "unordered-list-item",
"depth": 0,
"inlineStyleRanges": [],
"entityRanges": [],
"data": {}
}, {
"key": "9qh91",
"text": "Code block",
"type": "code-block",
"depth": 0,
"inlineStyleRanges": [],
"entityRanges": [],
"data": {}
}]
};
</script>
<script>
require = (dep) => {
switch(dep) {
case 'draft-js': return Draft;
case 'immutable': return Immutable;
}
};
window.DraftUtils = function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t){e.exports=require("draft-js")},function(e,t,n){"use strict";function r(e){var t=e.getSelection(),n=e.getCurrentContent(),r=t.getStartKey(),o=t.getEndKey(),i=n.getBlockMap();return i.toSeq().skipUntil(function(e,t){return...
CSS
body {
font-family: Helvetica, sans-serif;
}
.container-root {
border: 1px solid black;
padding: 5px;
margin: 5px;
background-color: white;
}
Babel + JSX
const {Editor, EditorState, RichUtils, convertFromRaw} = Draft;
class Container extends React.Component {
constructor(props) {
super(props);
this.state = {
editorState: EditorState.createWithContent(convertFromRaw(window.startContent))
};
}
toggleBlock(type, e) {
const { editorState } = this.state;
this._handleChange(RichUtils.toggleBlockType(editorState, type));
}
render() {
return (
<div className="container-root">
<button onClick={this.toggleBlock.bind(this, 'unstyled')}>P</button>
<button onClick={this.toggleBlock.bind(this, 'header-two')}>H2</button>
<button onClick={this.toggleBlock.bind(this, 'code-block')}>Code</button>
<button onClick={this.toggleBlock.bind(this, 'unordered-list-item')}>UL</button>
<Editor
editorState={this.state.editorState}
handleReturn={this.handleReturn.bind(this)}
onChange={this._handleChange}
/>
</div>
);
}
handleReturn(e) {
const { editorState } = this.state;
const newState = DraftUtils.handleNewLine(editorState, e);
if (newState) {
this._handleChange(newState);
return true;
}
return false;
}
_handleChange = (editorState) => {
this.setState({editorState});
}
}
ReactDOM.render(<Container />, document.getElementById('react-root'))