Slate Example

A simple example showing how to use Slate in a JSFiddle.

by yeuem1vannam

HTML

<script src="https://npmcdn.com/[email protected]/umd/react.development.js"></script>
<script src="https://npmcdn.com/[email protected]/umd/react-dom.development.js"></script>
<script src="https://npmcdn.com/immutable/dist/immutable.js"></script>
<script src="https://npmcdn.com/slate/dist/slate.js"></script>
<script src="https://npmcdn.com/slate-base64-serializer/dist/slate-base64-serializer.js"></script>
<script src="https://npmcdn.com/slate-html-serializer/dist/slate-html-serializer.js"></script>
<script src="https://npmcdn.com/slate-hyperscript/dist/slate-hyperscript.js"></script>
<script src="https://npmcdn.com/slate-plain-serializer/dist/slate-plain-serializer.js"></script>
<script src="https://npmcdn.com/slate-prop-types/dist/slate-prop-types.js"></script>
<script src="https://npmcdn.com/slate-react/dist/slate-react.js"></script>
<script src="https://npmcdn.com/slate-simulator/dist/slate-simulator.js"></script>
<div id="main"></div>

Babel + JSX

// The packages & plugins are exposed as globals...
const { Value } = window.Slate.default
const { Editor } = window.SlateReact.default

const initialValue = Value.fromJSON({
  document: {
    nodes: [
      {
        kind: 'block',
        type: 'paragraph',
        nodes: [
          {
            kind: 'text',
            leaves: [{ text: 'A line of text in a paragraph.' }]
          }
        ]
      }
    ]
  }
})

class MyEditor extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
      value: initialValue
    }
  }

  onChange({ value }) {
    this.setState({ value })
  }
  
  onFocus = (e) => {  	
   	e.preventDefault();
  	window.setTimeout(() => {
  	const { value } = this.state;
    const change = value.change();
    console.log('Focusing');
    change.collapseToStartOf(change.value.document.nodes.find(b => b)).focus();
    }, 1000)
  }

  render() {
    return (
    	<div>
        <Editor
          placeholder="Enter some text..."
          onChange={change => this.onChange(change)}
          value={this.state.value}
        />
        <button onClick={this.onFocus}>Focus</button>
    	</div>

    )
  }

}

ReactDOM.render(<MyEditor />, document.getElementById('main'))