UNPKG

kf-slate-editor

Version:

Another rich text editor using Slate framework with toolbar support

176 lines (164 loc) 4.96 kB
// @flow import * as React from "react"; import type {Value, Change} from 'slate'; import styled from 'styled-components'; import {Container} from './components/item'; import FullScreenIcon from './components/fullScreen'; import {AlignCenter, AlignLeft, AlignRight} from '@canner/slate-icon-align'; import Blockquote from '@canner/slate-icon-blockquote'; import Table from '@canner/slate-icon-table'; import CodeBlock from '@canner/slate-icon-codeblock'; import {Header1, Header2, Header3} from '@canner/slate-icon-header'; import Hr from '@canner/slate-icon-hr'; import Image from '@canner/slate-icon-image'; import {Indent, Outdent} from '@canner/slate-icon-indent'; import Link from '@canner/slate-icon-link'; import {OlList, UlList} from '@canner/slate-icon-list'; import Undo from '@canner/slate-icon-undo'; import Redo from '@canner/slate-icon-redo'; import {TerminalIcon} from './components/terminal/terminalIcon'; import {CloudwareIcon} from './components/cloudware/cloudwareIcon'; import {ImageIcon} from './components/image/imageIcon'; type Props = { value: Value, isFull?: boolean, onChange: (change: Change) => void, goFull: () => void, serviceConfig: any } const IconContainer = styled.div` display: inline-block; background: transparent; color: #222; cursor: pointer; -webkit-transition: background 0.2s ease 0s; border-bottom: 0.5px solid #ebebeb; &:hover { background: #ebebeb; } ` const Seperator = styled.div` height: 35px; width: 1px; margin: 2px 0; background: #ebebeb; display: inline-block; vertical-align: top; `; export default class Toolbar extends React.Component<Props> { render() { const { value, onChange, goFull, isFull, serviceConfig } = this.props; const options = [ Undo, Redo, 'seperator', Header1, Header2, Header3, Blockquote, Hr, 'seperator', AlignLeft, AlignCenter, AlignRight, Indent, Outdent, 'seperator', OlList, UlList, 'seperator', Link, CodeBlock, Table, 'ImageIcon', 'seperator', 'TerminalIcon', 'CloudwareIcon', ] /* Video, FontColor, FontBgColor, 'seperator',*/ return ( <Container> {options.map((Type, i) => { if (Type === 'seperator') return <Seperator key={i}/> if (Type === 'fullScreen') { return ( <IconContainer key={i}> <FullScreenIcon className="__canner-editor_topToolbarItem" goFull={goFull} isFull={isFull}/> </IconContainer> ) } if(Type === 'TerminalIcon'){ return( <IconContainer key={i}> <TerminalIcon className="__canner-editor_topToolbarItem" change={value.change()} onChange={onChange} /> </IconContainer> ) } if(Type === 'CloudwareIcon'){ return( <IconContainer key={i}> <CloudwareIcon className="__canner-editor_topToolbarItem" change={value.change()} onChange={onChange} /> </IconContainer> ) } if(Type === 'ImageIcon'){ return( <IconContainer key={i}> <ImageIcon className="__canner-editor_topToolbarItem" change={value.change()} onChange={onChange} /> </IconContainer> ) } // special plugin if (Type === 'image') { Type = Image } return ( <IconContainer key={i}> <Type change={value.change()} onChange={onChange} className="__canner-editor_topToolbarItem" disableClassName="__canner-editor_topToolbarItemDisabled" strokeClassName="qlStroke" serviceConfig={Type === 'image' && serviceConfig} strokeMitterClassName="qlStrokeMitter" fillClassName="qlFill" evenClassName="qlEven" colorLabelClassName="qlColorLabel" thinClassName="qlThin" activeStrokeMitterClassName="qlStrokeMitterActive" activeClassName="__canner-editor_topToolbarItem __canner-editor_topToolbarItemActive" activeStrokeClassName="qlStrokeActive" activeFillClassName="qlFillActive" activeThinClassName="qlThinActive" activeEvenClassName="qlEvenActive" /> </IconContainer> ) })} </Container> ); } }