import React from "react" import classnames from "classnames" import misago from "../../" import ajax from "../../services/ajax" import snackbar from "../../services/snackbar" import MisagoMarkup from "../misago-markup" import MarkupEditorAttachments from "./MarkupEditorAttachments" import MarkupEditorFooter from "./MarkupEditorFooter" import MarkupEditorToolbar from "./MarkupEditorToolbar" import uploadFile from "./uploadFile" class MarkupEditor extends React.Component { constructor(props) { super(props) this.state = { element: null, focused: false, loading: false, preview: false, parsed: null, } } showPreview = () => { if (this.state.loading) return this.setState({ loading: true, preview: true, element: null }) ajax.post(misago.get("PARSE_MARKUP_API"), { post: this.props.value }).then( (data) => { this.setState({ loading: false, parsed: data.parsed }) }, (rejection) => { if (rejection.status === 400) { snackbar.error(rejection.detail) } else { snackbar.apiError(rejection) } this.setState({ loading: false, preview: false }) } ) } closePreview = () => { this.setState({ loading: false, preview: false }) } onDrop = (event) => { event.preventDefault() event.stopPropagation() if (!event.dataTransfer.files) return const { onAttachmentsChange: setState } = this.props if (misago.get("user").acl.max_attachment_size) { for (let i = 0; i < event.dataTransfer.files.length; i++) { const file = event.dataTransfer.files[i] uploadFile(file, setState) } } } onPaste = (event) => { const { onAttachmentsChange: setState } = this.props const files = [] for (let i = 0; i < event.clipboardData.items.length; i++) { const item = event.clipboardData.items[i] if (item.kind === "file") { files.push(item.getAsFile()) } } if (files.length) { event.preventDefault() event.stopPropagation() if (misago.get("user").acl.max_attachment_size) { for (let i = 0; i < files.length; i++) { uploadFile(files[i], setState) } } } } render = () => (