From 549ff33baf059df147cd84e221095562a997ce55 Mon Sep 17 00:00:00 2001 From: kobi Date: Mon, 13 May 2019 14:03:40 +0300 Subject: [PATCH 1/4] wip --- src/mui/editModal.tsx | 84 ++++++++++++--------------------- src/mui/editModalButton.tsx | 46 ++++++++++++++++++ src/mui/editRemoteTextModal.tsx | 10 ++-- 3 files changed, 83 insertions(+), 57 deletions(-) create mode 100644 src/mui/editModalButton.tsx diff --git a/src/mui/editModal.tsx b/src/mui/editModal.tsx index 1856fa1..dbb3813 100644 --- a/src/mui/editModal.tsx +++ b/src/mui/editModal.tsx @@ -2,8 +2,6 @@ import Button from "@material-ui/core/Button" import Grid from "@material-ui/core/Grid" import Modal, {ModalProps} from "@material-ui/core/Modal" import Paper from "@material-ui/core/Paper" -import {SvgIconProps} from "@material-ui/core/SvgIcon" -import EditIcon from "@material-ui/icons/Edit" import * as React from "react" import {RemoteTextRecord} from "../core/remoteTextRecord" import {RemoteTextNode, RemoteTextValue} from "../core/remoteTextValue" @@ -16,12 +14,10 @@ declare module "medium-editor" { } } -export interface EditModalProps { +export interface EditModalProps extends ModalProps { t: (document: T) => RemoteTextValue namespace?: string - modalProps?: Partial - onModalOpen?: (open: boolean) => any - editIconProps?: SvgIconProps + onSave?: () => any } export interface EditModal extends WithRemoteTextContext { @@ -48,19 +44,6 @@ export class EditModal extends React.Component { - this.setState({modalOpen}, () => { - const {onModalOpen} = this.props - if (onModalOpen != null) { - onModalOpen(this.state.modalOpen) - } - }) - } - componentDidMount() { document.body.appendChild(this.el) } @@ -86,7 +69,10 @@ export class EditModal extends React.Component extends React.Component this.changeModalOpen(false) - - return <> - this.changeModalOpen(true)} {...editIconProps}/> - - - - - - + const {t, namespace, ...rest} = this.props + + return + + + + - - - - + + + - - + + } } diff --git a/src/mui/editModalButton.tsx b/src/mui/editModalButton.tsx new file mode 100644 index 0000000..64bf5ad --- /dev/null +++ b/src/mui/editModalButton.tsx @@ -0,0 +1,46 @@ +import {SvgIconProps} from "@material-ui/core/SvgIcon" +import EditIcon from "@material-ui/icons/Edit" +import * as React from "react" +import {RemoteTextNode, RemoteTextValue} from "../core/remoteTextValue" +import {WithRemoteTextContext} from "../react/withRemoteText" +import {EditModal, EditModalProps} from "./editModal" + +export interface EditModalButtonProps { + t: (document: T) => RemoteTextValue + namespace?: string + editModalProps?: Partial> + onModalOpen?: (open: boolean) => any + editIconProps?: SvgIconProps +} + +export interface EditModalButton extends WithRemoteTextContext { + +} + +export class EditModalButton extends React.Component> { + state = { + modalOpen: false + } + + changeModalOpen = (modalOpen: boolean) => { + this.setState({modalOpen}, () => { + const {onModalOpen} = this.props + if (onModalOpen != null) { + onModalOpen(this.state.modalOpen) + } + }) + } + + render() { + const {t, editModalProps, editIconProps, onModalOpen, namespace} = this.props + const {modalOpen} = this.state + const closeModal = () => this.changeModalOpen(false) + + return <> + this.changeModalOpen(true)} {...editIconProps}/> + + + + } +} diff --git a/src/mui/editRemoteTextModal.tsx b/src/mui/editRemoteTextModal.tsx index 3ec848c..e91d90c 100644 --- a/src/mui/editRemoteTextModal.tsx +++ b/src/mui/editRemoteTextModal.tsx @@ -5,14 +5,15 @@ import * as React from "react" import {RemoteTextNode, RemoteTextValue} from "../core/remoteTextValue" import {RemoteText} from "../react/remoteText" import {withRemoteText, WithRemoteTextContext} from "../react/withRemoteText" -import {EditModal} from "./editModal" +import {EditModal, EditModalProps} from "./editModal" +import {EditModalButton} from "./editModalButton" export interface EditRemoteTextModalProps extends Partial { t: (document: T) => RemoteTextValue namespace?: string children: (value: RemoteTextValue) => React.ReactElement editIconProps?: SvgIconProps - modalProps?: Partial + editModalProps?: Partial> onModalOpen?: (open: boolean) => any } @@ -29,7 +30,7 @@ export class EditRemoteTextModal extends React.Compone changeShowEditIcon = (showEditIcon: boolean) => this.setState({showEditIcon}) render() { - const {t, children, modalProps, onModalOpen, namespace, editIconProps, ...rest} = this.props + const {t, children, editModalProps, onModalOpen, namespace, editIconProps, ...rest} = this.props const {showEditIcon} = this.state return <> extends React.Compone {children} - {showEditIcon && } + {showEditIcon && + } From ce58adb86190a089ca48ff26b0e25aac708ba553 Mon Sep 17 00:00:00 2001 From: kobi Date: Mon, 13 May 2019 16:13:34 +0300 Subject: [PATCH 2/4] wip --- src/mui/editModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mui/editModal.tsx b/src/mui/editModal.tsx index dbb3813..a329167 100644 --- a/src/mui/editModal.tsx +++ b/src/mui/editModal.tsx @@ -82,7 +82,7 @@ export class EditModal extends React.Component Date: Wed, 15 May 2019 21:05:56 +0300 Subject: [PATCH 3/4] wip --- src/mongo/remoteTextMongo.ts | 11 ++++++++++- src/react/mediumEditor.tsx | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/mongo/remoteTextMongo.ts b/src/mongo/remoteTextMongo.ts index c274ae3..68019e8 100644 --- a/src/mongo/remoteTextMongo.ts +++ b/src/mongo/remoteTextMongo.ts @@ -6,6 +6,14 @@ import {RemoteTextDocument} from "../core/remoteTextValue" const allowedTags = sanitizeHtml.defaults.allowedTags.filter(e => e !== "iframe") +const allowedAttributes = { + a: ["href", "name", "target", "style"], + img: ["src"], + p: ["style"], + span: ["style"], + div: ["style"] +} + export interface RemoteTextSchema { namespace: string lang: string @@ -47,7 +55,8 @@ export class RemoteTextMongo { $set: { [`document.${record.id}`]: { html: sanitizeHtml(record.html, { - allowedTags + allowedTags, + allowedAttributes }) } } diff --git a/src/react/mediumEditor.tsx b/src/react/mediumEditor.tsx index 0a3ba3b..2e1bced 100644 --- a/src/react/mediumEditor.tsx +++ b/src/react/mediumEditor.tsx @@ -15,7 +15,8 @@ export class MediumEditor extends React.Component { this.medium = new MediumEditorBase(dom, { paste: { forcePlainText: false - } + }, + targetBlank: true }) this.medium.subscribe("editableInput", () => { const {onTextChange} = this.props From 0e317216be1805600fbe774c92ecc3704f553496 Mon Sep 17 00:00:00 2001 From: kobi Date: Wed, 15 May 2019 22:53:00 +0300 Subject: [PATCH 4/4] wip --- src/mongo/remoteTextMongo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mongo/remoteTextMongo.ts b/src/mongo/remoteTextMongo.ts index 68019e8..e428e98 100644 --- a/src/mongo/remoteTextMongo.ts +++ b/src/mongo/remoteTextMongo.ts @@ -4,7 +4,7 @@ import {Option} from "tsla-util/lib/option" import {RemoteTextRecord} from "../core/remoteTextRecord" import {RemoteTextDocument} from "../core/remoteTextValue" -const allowedTags = sanitizeHtml.defaults.allowedTags.filter(e => e !== "iframe") +const allowedTags = sanitizeHtml.defaults.allowedTags.filter(e => e !== "iframe").concat("span") const allowedAttributes = { a: ["href", "name", "target", "style"],