convert raw editor to Slate

This commit is contained in:
Shawn Erquhart
2017-07-08 23:23:14 -04:00
parent 719c105844
commit ae56ef6dda
6 changed files with 31 additions and 18 deletions

View File

@ -8,8 +8,8 @@
& input, & input,
& textarea, & textarea,
& select { & select,
font-family: 'SFMono-Regular', Consolas, "Liberation Mono", Menlo, Courier, monospace; & div[contenteditable=true] {
display: block; display: block;
width: 100%; width: 100%;
padding: 12px; padding: 12px;
@ -28,6 +28,12 @@
border-color: var(--primaryColor); border-color: var(--primaryColor);
} }
} }
& input,
& textarea,
& select {
font-family: var(--fontFamilyMono);
}
} }
.label { .label {

View File

@ -1,4 +1,6 @@
:root { :root {
--fontFamily: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
--fontFamilyMono: 'SFMono-Regular', Consolas, "Liberation Mono", Menlo, Courier, monospace;
--defaultColor: #333; --defaultColor: #333;
--defaultColorLight: #fff; --defaultColorLight: #fff;
--backgroundColor: #fff; --backgroundColor: #fff;

View File

@ -12,8 +12,10 @@
composes: editorControlBarSticky from "../VisualEditor/index.css"; composes: editorControlBarSticky from "../VisualEditor/index.css";
} }
.textarea { .SlateEditor {
position: relative;
overflow: hidden; overflow: hidden;
resize: none; overflow-x: auto;
min-height: var(--richTextEditorMinHeight); min-height: var(--richTextEditorMinHeight);
font-family: var(--fontFamilyMono);
} }

View File

@ -1,5 +1,5 @@
import React, { PropTypes } from 'react'; import React, { PropTypes } from 'react';
import TextareaAutosize from 'react-textarea-autosize'; import { Editor as SlateEditor, Plain as SlatePlain } from 'slate';
import { markdownToHtml, htmlToMarkdown } from '../../unified'; import { markdownToHtml, htmlToMarkdown } from '../../unified';
import Toolbar from '../Toolbar/Toolbar'; import Toolbar from '../Toolbar/Toolbar';
import { Sticky } from '../../../../UI/Sticky/Sticky'; import { Sticky } from '../../../../UI/Sticky/Sticky';
@ -8,15 +8,20 @@ import styles from './index.css';
export default class RawEditor extends React.Component { export default class RawEditor extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
const value = htmlToMarkdown(this.props.value);
this.state = { this.state = {
value: htmlToMarkdown(this.props.value) || '', editorState: SlatePlain.deserialize(value || ''),
}; };
} }
handleChange = (e) => { handleChange = editorState => {
const html = markdownToHtml(e.target.value); this.setState({ editorState });
}
handleDocumentChange = (doc, editorState) => {
const value = SlatePlain.serialize(editorState);
const html = markdownToHtml(value);
this.props.onChange(html); this.props.onChange(html);
this.setState({ value: e.target.value });
}; };
handleToggleMode = () => { handleToggleMode = () => {
@ -33,10 +38,11 @@ export default class RawEditor extends React.Component {
> >
<Toolbar onToggleMode={this.handleToggleMode} disabled rawMode /> <Toolbar onToggleMode={this.handleToggleMode} disabled rawMode />
</Sticky> </Sticky>
<TextareaAutosize <SlateEditor
className={styles.textarea} className={styles.SlateEditor}
value={this.state.value} state={this.state.editorState}
onChange={this.handleChange} onChange={this.handleChange}
onDocumentChange={this.handleDocumentChange}
/> />
</div> </div>
); );

View File

@ -70,13 +70,10 @@
.slateEditor { .slateEditor {
position: relative; position: relative;
background-color: var(--controlBGColor);
padding: 12px;
overflow: hidden; overflow: hidden;
border-radius: var(--borderRadius);
overflow-x: auto; overflow-x: auto;
border: var(--textFieldBorder);
min-height: var(--richTextEditorMinHeight); min-height: var(--richTextEditorMinHeight);
font-family: var(--fontFamily);
& ul, & ul,
& ol { & ol {

View File

@ -13,7 +13,7 @@ html {
} }
body { body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-family: var(--fontFamily);
height: 100%; height: 100%;
background-color: #fff; background-color: #fff;
color: #7c8382; color: #7c8382;
@ -22,7 +22,7 @@ body {
h1, h2, h3, h4, h5, h6, p { h1, h2, h3, h4, h5, h6, p {
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-family: var(--fontFamily);
} }
h1 { h1 {