import React from 'react'; import { List } from 'immutable'; import cn from 'classnames'; /** * Slate uses React components to render each type of node that it receives. * This is the closest thing Slate has to a schema definition. The types are set * by us when we manually deserialize from Remark's MDAST to Slate's AST. */ export const renderMark = props => { switch (props.mark.type) { case bold: return props => {props.children}; case italic: return props => {props.children}; case strikethrough: return props => {props.children}; case code: return props => {props.children}; } }; export const renderNode = props => { switch (props.node.type) { case 'paragraph': return props =>

{props.children}

; case 'list-item': return props =>
  • {props.children}
  • ; case 'quote': return props =>
    {props.children}
    ; case 'code': return props =>
    {props.children}
    ; case 'heading-one': return props =>

    {props.children}

    ; case 'heading-two': return props =>

    {props.children}

    ; case 'heading-three': return props =>

    {props.children}

    ; case 'heading-four': return props =>

    {props.children}

    ; case 'heading-five': return props =>
    {props.children}
    ; case 'heading-six': return props =>
    {props.children}
    ; case 'table': return props => {props.children}
    ; case 'table-row': return props => {props.children}; case 'table-cell': return props => {props.children}; case 'thematic-break': return props =>
    ; case 'bulleted-list': return props => ; case 'numbered-list': return props => (
      {props.children}
    ); case 'link': return props => { const data = props.node.get('data'); const marks = data.get('marks'); const url = data.get('url'); const title = data.get('title'); const link = {props.children}; const result = !marks ? link : marks.reduce((acc, mark) => { const MarkComponent = MARK_COMPONENTS[mark.type]; return {acc}; }, link); return result; }; case 'image': props => { const data = props.node.get('data'); const marks = data.get('marks'); const url = data.get('url'); const title = data.get('title'); const alt = data.get('alt'); const image = {alt}; const result = !marks ? image : marks.reduce((acc, mark) => { const MarkComponent = MARK_COMPONENTS[mark.type]; return {acc}; }, image); return result; }; case 'shortcode': props => { const { attributes, node, editor } = props; const isSelected = editor.value.selection.hasFocusIn(node); const className = cn('nc-visualEditor-shortcode', { ['nc-visualEditor-shortcodeSelected']: isSelected }); return
    {node.data.get('shortcode')}
    ; }; } };