@pie-lib/editable-html 11.0.8 → 11.0.9-next.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/editor.js
CHANGED
|
@@ -477,9 +477,11 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
477
477
|
_this.setState({
|
|
478
478
|
isEdited: false
|
|
479
479
|
});
|
|
480
|
-
}
|
|
480
|
+
} // Mark the editor as edited when in HTML mode and its content has changed.
|
|
481
|
+
// This status will later be used to decide whether to prompt a warning to the user when exiting HTML mode.
|
|
482
|
+
|
|
481
483
|
|
|
482
|
-
if (_this.state.isHtmlMode && !(0, _isEqual["default"])(_this.state.value.document.text, value.document.text)) {
|
|
484
|
+
if (_this.state.isHtmlMode && !_this.state.isEdited && !(0, _isEqual["default"])(_this.state.value.document.text, value.document.text)) {
|
|
483
485
|
_this.setState({
|
|
484
486
|
isEdited: true
|
|
485
487
|
});
|
|
@@ -792,7 +794,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
792
794
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
793
795
|
// The cursor is on a zero width element and when that is placed near void elements, it is not visible
|
|
794
796
|
// so we increase the width to at least 2px in order for the user to see it
|
|
795
|
-
|
|
797
|
+
// Trigger plugins and finish editing if:
|
|
798
|
+
// 1. The 'isHtmlMode' state has been toggled.
|
|
799
|
+
// 2. We're currently in 'isHtmlMode' and the editor value has been modified.
|
|
800
|
+
if (this.state.isHtmlMode !== prevState.isHtmlMode || this.state.isHtmlMode && !prevState.isEdited && this.state.isEdited) {
|
|
796
801
|
this.handlePlugins(this.props);
|
|
797
802
|
this.onEditingDone();
|
|
798
803
|
}
|
package/lib/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","error","isHtmlMode","Editor","props","open","extraDialogProps","callback","setState","dialog","isEdited","prevState","state","newToolbarOpts","normalizedResponseAreaProps","responseAreaProps","htmlPluginOpts","toggleHtmlMode","handleAlertDialog","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","mathMlOptions","html","image","disableImageAlignmentButtons","onDelete","imageSupport","src","done","e","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableScrollbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","uploadSoundSupport","mmlOutput","mmlEditing","runSerializationOnMarkup","relatedTarget","target","node","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","preBlurValue","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","stateValue","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","file","files","fragment","inline","Inline","create","isVoid","loading","range","select","ch","insertInline","InsertImageHandler","fileChosen","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","display","width","maxWidth","whiteSpace","opacity","pointerEvents","userSelect","onResize","handlePlugins","onRef","window","autoFocus","nextProps","differentCharacterProps","differentMathMlProps","equals","prevProps","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","title","onClose","onConfirm","React","Component","PropTypes","bool","func","isRequired","any","SlateTypes","shape","number","oneOfType","string","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":"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","sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Plain from 'slate-plain-serializer';\nimport { AlertDialog } from '@pie-lib/config-ui';\n\nimport { getBase64 } from './serialization';\nimport InsertImageHandler from './plugins/image/insert-image-handler';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur',\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {},\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = (toolbarOpts, error, isHtmlMode) => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n error,\n isHtmlMode,\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n error: PropTypes.any,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n mathMlOptions: PropTypes.shape({\n mmlOutput: PropTypes.bool,\n mmlEditing: PropTypes.bool,\n }),\n disableImageAlignmentButtons: PropTypes.bool,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableScrollbar: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf(['explicit-constructed-response', 'inline-dropdown', 'drag-in-the-blank']),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func,\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),\n }),\n ),\n runSerializationOnMarkup: PropTypes.func,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string,\n }),\n activePlugins: PropTypes.arrayOf((values) => {\n const allValid = values.every((v) => ALL_PLUGINS.includes(v));\n\n return !allValid && new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`);\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n runSerializationOnMarkup: () => {},\n mathMlOptions: {\n mmlOutput: false,\n mmlEditing: false,\n },\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts, props.error),\n isHtmlMode: false,\n isEdited: false,\n dialog: {\n open: false,\n },\n };\n\n this.toggleHtmlMode = this.toggleHtmlMode.bind(this);\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handleAlertDialog = (open, extraDialogProps, callback) => {\n this.setState(\n {\n dialog: {\n open,\n ...extraDialogProps,\n },\n isEdited: false,\n },\n callback,\n );\n };\n\n toggleHtmlMode = () => {\n this.setState(\n (prevState) => ({\n isHtmlMode: !prevState.isHtmlMode,\n }),\n () => {\n const { error } = this.props;\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(toolbarOpts, error, this.state.isHtmlMode);\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n },\n );\n };\n\n handlePlugins = (props) => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps,\n };\n\n const htmlPluginOpts = {\n isHtmlMode: this.state.isHtmlMode,\n isEdited: this.state.isEdited,\n toggleHtmlMode: this.toggleHtmlMode,\n handleAlertDialog: this.handleAlertDialog,\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n ...props.mathMlOptions,\n },\n html: htmlPluginOpts,\n image: {\n disableImageAlignmentButtons: props.disableImageAlignmentButtons,\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, (e) => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n ((getHandler) => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight,\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableScrollbar: !!props.disableScrollbar,\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n },\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n },\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n },\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange,\n uploadSoundSupport: props.uploadSoundSupport,\n },\n });\n\n if (props.mathMlOptions.mmlOutput || props.mathMlOptions.mmlEditing) {\n this.props.runSerializationOnMarkup();\n }\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(`[data-key=\"${this.editor.value.document.key}\"]`);\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { isHtmlMode, toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts, nextProps.error, isHtmlMode);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n }\n\n const differentCharacterProps = !isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps);\n const differentMathMlProps = !isEqual(nextProps.mathMlOptions, this.props.mathMlOptions);\n\n if (differentCharacterProps || differentMathMlProps) {\n this.handlePlugins(nextProps);\n }\n\n if (!nextProps.value?.document?.equals(this.props.value?.document)) {\n this.setState({\n focus: false,\n value: nextProps.value,\n });\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n\n if (this.state.isHtmlMode !== prevState.isHtmlMode || (this.state.isHtmlMode && this.state.isEdited)) {\n this.handlePlugins(this.props);\n this.onEditingDone();\n }\n\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach((el) => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = (e) => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = (e) => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = (node) => {\n this.editor.change((c) => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n if (this.state.isHtmlMode) {\n return;\n }\n\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = (resolve) => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn },\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = (event) => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise((resolve) => {\n this.setState(\n { preBlurValue: this.state.value, focusedNode: !node ? null : node },\n this.handleBlur.bind(this, resolve),\n );\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = (e) => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n const { value: stateValue } = this.state;\n\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement = !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef || document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent = this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n\n if (stateValue.isFocused) {\n this.onBlur(e);\n }\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise((resolve) => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = (force) => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise((resolve) => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\n const { value } = change;\n const { charactersLimit } = this.props;\n\n if (value && value.document && value.document.text && value.document.text.length > charactersLimit) {\n return;\n }\n\n if (!this.state.isHtmlMode) {\n this.setState({ isEdited: false });\n }\n\n if (this.state.isHtmlMode && !isEqual(this.state.value.document.text, value.document.text)) {\n this.setState({ isEdited: true });\n }\n\n this.setState({ value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n getFocusedValue = () => {\n if (this.state.value.isFocused) {\n return this.state.value;\n }\n\n return this.state.preBlurValue;\n };\n\n valueToSize = (v) => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight),\n };\n }\n\n validateNode = (node) => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n onDropPaste = async (event, change, dropContext) => {\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files && transfer.files[0];\n\n const type = transfer.type;\n const fragment = transfer.fragment;\n const text = transfer.text;\n\n if (file && (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')) {\n if (!this.props.imageSupport) {\n return;\n }\n try {\n log('[onDropPaste]');\n const src = await getBase64(file);\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loading: false,\n src,\n },\n });\n\n if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n\n const ch = change.insertInline(inline);\n this.onChange(ch);\n const handler = new InsertImageHandler(inline, () => this.state.value, this.onChange, true);\n handler.fileChosen(file);\n this.props.imageSupport.add(handler);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\n } else if (type === 'fragment') {\n change.insertFragment(fragment);\n } else if (type === 'text' || type === 'html') {\n if (!text) {\n return;\n }\n const {\n value: { document, selection, startBlock },\n } = change;\n\n if (startBlock.isVoid) {\n return;\n }\n\n const defaultBlock = startBlock;\n const defaultMarks = document.getInsertMarksAtRange(selection);\n const frag = Plain.deserialize(text, {\n defaultBlock,\n defaultMarks,\n }).document;\n change.insertFragment(frag);\n }\n };\n\n renderPlaceholder = (props) => {\n const { editor } = props;\n const { document } = editor.value;\n\n if (!editor.props.placeholder || document.text !== '' || document.nodes.size !== 1) {\n return false;\n }\n\n return (\n <span\n contentEditable={false}\n style={{\n display: 'inline-block',\n width: 'fit-content', // for centering the placeholder if text-align is set to center\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.33',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n >\n {editor.props.placeholder}\n </span>\n );\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown,\n } = this.props;\n\n const { value, focusedNode, toolbarOpts, dialog } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top',\n },\n className,\n );\n\n return (\n <div ref={(ref) => (this.wrapperRef = ref)} style={{ width: sizeStyle.width }} className={names}>\n <SlateEditor\n plugins={this.plugins}\n innerRef={(r) => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={(r) => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={(r) => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n getFocusedValue={this.getFocusedValue}\n onBlur={this.onBlur}\n onDrop={(event, editor) => this.onDropPaste(event, editor, true)}\n onPaste={(event, editor) => this.onDropPaste(event, editor)}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n autoCorrect={spellCheck}\n className={classNames(\n {\n [classes.noPadding]: toolbarOpts && toolbarOpts.noBorder,\n },\n classes.slateEditor,\n )}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight,\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n renderPlaceholder={this.renderPlaceholder}\n onDataChange={this.changeData}\n />\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)',\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background(),\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5',\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center',\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5',\n },\n },\n toolbarOnTop: {\n marginTop: '45px',\n },\n noPadding: {\n padding: '0 !important',\n },\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|
|
1
|
+
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","error","isHtmlMode","Editor","props","open","extraDialogProps","callback","setState","dialog","isEdited","prevState","state","newToolbarOpts","normalizedResponseAreaProps","responseAreaProps","htmlPluginOpts","toggleHtmlMode","handleAlertDialog","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","mathMlOptions","html","image","disableImageAlignmentButtons","onDelete","imageSupport","src","done","e","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableScrollbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","uploadSoundSupport","mmlOutput","mmlEditing","runSerializationOnMarkup","relatedTarget","target","node","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","preBlurValue","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","stateValue","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","file","files","fragment","inline","Inline","create","isVoid","loading","range","select","ch","insertInline","InsertImageHandler","fileChosen","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","display","width","maxWidth","whiteSpace","opacity","pointerEvents","userSelect","onResize","handlePlugins","onRef","window","autoFocus","nextProps","differentCharacterProps","differentMathMlProps","equals","prevProps","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","title","onClose","onConfirm","React","Component","PropTypes","bool","func","isRequired","any","SlateTypes","shape","number","oneOfType","string","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":"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","sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Plain from 'slate-plain-serializer';\nimport { AlertDialog } from '@pie-lib/config-ui';\n\nimport { getBase64 } from './serialization';\nimport InsertImageHandler from './plugins/image/insert-image-handler';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur',\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {},\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = (toolbarOpts, error, isHtmlMode) => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n error,\n isHtmlMode,\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n error: PropTypes.any,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n mathMlOptions: PropTypes.shape({\n mmlOutput: PropTypes.bool,\n mmlEditing: PropTypes.bool,\n }),\n disableImageAlignmentButtons: PropTypes.bool,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableScrollbar: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf(['explicit-constructed-response', 'inline-dropdown', 'drag-in-the-blank']),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func,\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),\n }),\n ),\n runSerializationOnMarkup: PropTypes.func,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string,\n }),\n activePlugins: PropTypes.arrayOf((values) => {\n const allValid = values.every((v) => ALL_PLUGINS.includes(v));\n\n return !allValid && new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`);\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n runSerializationOnMarkup: () => {},\n mathMlOptions: {\n mmlOutput: false,\n mmlEditing: false,\n },\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts, props.error),\n isHtmlMode: false,\n isEdited: false,\n dialog: {\n open: false,\n },\n };\n\n this.toggleHtmlMode = this.toggleHtmlMode.bind(this);\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handleAlertDialog = (open, extraDialogProps, callback) => {\n this.setState(\n {\n dialog: {\n open,\n ...extraDialogProps,\n },\n isEdited: false,\n },\n callback,\n );\n };\n\n toggleHtmlMode = () => {\n this.setState(\n (prevState) => ({\n isHtmlMode: !prevState.isHtmlMode,\n }),\n () => {\n const { error } = this.props;\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(toolbarOpts, error, this.state.isHtmlMode);\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n },\n );\n };\n\n handlePlugins = (props) => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps,\n };\n\n const htmlPluginOpts = {\n isHtmlMode: this.state.isHtmlMode,\n isEdited: this.state.isEdited,\n toggleHtmlMode: this.toggleHtmlMode,\n handleAlertDialog: this.handleAlertDialog,\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n ...props.mathMlOptions,\n },\n html: htmlPluginOpts,\n image: {\n disableImageAlignmentButtons: props.disableImageAlignmentButtons,\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, (e) => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n ((getHandler) => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight,\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableScrollbar: !!props.disableScrollbar,\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n },\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n },\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n },\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange,\n uploadSoundSupport: props.uploadSoundSupport,\n },\n });\n\n if (props.mathMlOptions.mmlOutput || props.mathMlOptions.mmlEditing) {\n this.props.runSerializationOnMarkup();\n }\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(`[data-key=\"${this.editor.value.document.key}\"]`);\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { isHtmlMode, toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts, nextProps.error, isHtmlMode);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n }\n\n const differentCharacterProps = !isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps);\n const differentMathMlProps = !isEqual(nextProps.mathMlOptions, this.props.mathMlOptions);\n\n if (differentCharacterProps || differentMathMlProps) {\n this.handlePlugins(nextProps);\n }\n\n if (!nextProps.value?.document?.equals(this.props.value?.document)) {\n this.setState({\n focus: false,\n value: nextProps.value,\n });\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n\n // Trigger plugins and finish editing if:\n // 1. The 'isHtmlMode' state has been toggled.\n // 2. We're currently in 'isHtmlMode' and the editor value has been modified.\n if (\n this.state.isHtmlMode !== prevState.isHtmlMode ||\n (this.state.isHtmlMode && !prevState.isEdited && this.state.isEdited)\n ) {\n this.handlePlugins(this.props);\n this.onEditingDone();\n }\n\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach((el) => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = (e) => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = (e) => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = (node) => {\n this.editor.change((c) => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n if (this.state.isHtmlMode) {\n return;\n }\n\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = (resolve) => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn },\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = (event) => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise((resolve) => {\n this.setState(\n { preBlurValue: this.state.value, focusedNode: !node ? null : node },\n this.handleBlur.bind(this, resolve),\n );\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = (e) => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n const { value: stateValue } = this.state;\n\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement = !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef || document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent = this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n\n if (stateValue.isFocused) {\n this.onBlur(e);\n }\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise((resolve) => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = (force) => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise((resolve) => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\n const { value } = change;\n const { charactersLimit } = this.props;\n\n if (value && value.document && value.document.text && value.document.text.length > charactersLimit) {\n return;\n }\n\n if (!this.state.isHtmlMode) {\n this.setState({ isEdited: false });\n }\n\n // Mark the editor as edited when in HTML mode and its content has changed.\n // This status will later be used to decide whether to prompt a warning to the user when exiting HTML mode.\n if (\n this.state.isHtmlMode &&\n !this.state.isEdited &&\n !isEqual(this.state.value.document.text, value.document.text)\n ) {\n this.setState({ isEdited: true });\n }\n\n this.setState({ value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n getFocusedValue = () => {\n if (this.state.value.isFocused) {\n return this.state.value;\n }\n\n return this.state.preBlurValue;\n };\n\n valueToSize = (v) => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight),\n };\n }\n\n validateNode = (node) => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n onDropPaste = async (event, change, dropContext) => {\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files && transfer.files[0];\n\n const type = transfer.type;\n const fragment = transfer.fragment;\n const text = transfer.text;\n\n if (file && (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')) {\n if (!this.props.imageSupport) {\n return;\n }\n try {\n log('[onDropPaste]');\n const src = await getBase64(file);\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loading: false,\n src,\n },\n });\n\n if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n\n const ch = change.insertInline(inline);\n this.onChange(ch);\n const handler = new InsertImageHandler(inline, () => this.state.value, this.onChange, true);\n handler.fileChosen(file);\n this.props.imageSupport.add(handler);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\n } else if (type === 'fragment') {\n change.insertFragment(fragment);\n } else if (type === 'text' || type === 'html') {\n if (!text) {\n return;\n }\n const {\n value: { document, selection, startBlock },\n } = change;\n\n if (startBlock.isVoid) {\n return;\n }\n\n const defaultBlock = startBlock;\n const defaultMarks = document.getInsertMarksAtRange(selection);\n const frag = Plain.deserialize(text, {\n defaultBlock,\n defaultMarks,\n }).document;\n change.insertFragment(frag);\n }\n };\n\n renderPlaceholder = (props) => {\n const { editor } = props;\n const { document } = editor.value;\n\n if (!editor.props.placeholder || document.text !== '' || document.nodes.size !== 1) {\n return false;\n }\n\n return (\n <span\n contentEditable={false}\n style={{\n display: 'inline-block',\n width: 'fit-content', // for centering the placeholder if text-align is set to center\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.33',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n >\n {editor.props.placeholder}\n </span>\n );\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown,\n } = this.props;\n\n const { value, focusedNode, toolbarOpts, dialog } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top',\n },\n className,\n );\n\n return (\n <div ref={(ref) => (this.wrapperRef = ref)} style={{ width: sizeStyle.width }} className={names}>\n <SlateEditor\n plugins={this.plugins}\n innerRef={(r) => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={(r) => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={(r) => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n getFocusedValue={this.getFocusedValue}\n onBlur={this.onBlur}\n onDrop={(event, editor) => this.onDropPaste(event, editor, true)}\n onPaste={(event, editor) => this.onDropPaste(event, editor)}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n autoCorrect={spellCheck}\n className={classNames(\n {\n [classes.noPadding]: toolbarOpts && toolbarOpts.noBorder,\n },\n classes.slateEditor,\n )}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight,\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n renderPlaceholder={this.renderPlaceholder}\n onDataChange={this.changeData}\n />\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)',\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background(),\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5',\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center',\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5',\n },\n },\n toolbarOnTop: {\n marginTop: '45px',\n },\n noPadding: {\n padding: '0 !important',\n },\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|
|
@@ -131,7 +131,7 @@ var DefaultToolbar = function DefaultToolbar(_ref) {
|
|
|
131
131
|
onChange: onChange,
|
|
132
132
|
getFocusedValue: getFocusedValue
|
|
133
133
|
}));
|
|
134
|
-
})), showDone && !deletable && /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
|
|
134
|
+
})), showDone && !deletable && !isHtmlMode && /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
|
|
135
135
|
onClick: onDone
|
|
136
136
|
}));
|
|
137
137
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/toolbar/default-toolbar.jsx"],"names":["log","ToolbarButton","props","onToggle","c","value","change","onChange","isMark","isActive","type","icon","disabled","onClick","getFocusedValue","buttonStyles","propTypes","PropTypes","object","bool","any","func","string","isActiveToolbarPlugin","plugin","isDisabled","name","toolbar","DefaultToolbar","plugins","pluginProps","onDone","classes","showDone","deletable","isHtmlMode","html","filtered","filter","map","p","defaultToolbar","buttonsContainer","index","isRequired","array","SlatePropTypes","addArea","defaultProps","toolbarStyles","display","width","justifyContent","alignItems"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/toolbar/default-toolbar.jsx"],"names":["log","ToolbarButton","props","onToggle","c","value","change","onChange","isMark","isActive","type","icon","disabled","onClick","getFocusedValue","buttonStyles","propTypes","PropTypes","object","bool","any","func","string","isActiveToolbarPlugin","plugin","isDisabled","name","toolbar","DefaultToolbar","plugins","pluginProps","onDone","classes","showDone","deletable","isHtmlMode","html","filtered","filter","map","p","defaultToolbar","buttonsContainer","index","isRequired","array","SlatePropTypes","addArea","defaultProps","toolbarStyles","display","width","justifyContent","alignItems"],"mappings":"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","sourcesContent":["import { DoneButton } from './done-button';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport SlatePropTypes from 'slate-prop-types';\n\nimport { hasBlock, hasMark } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Button, MarkButton } from './toolbar-buttons';\nimport debug from 'debug';\nimport { is } from 'immutable';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nexport const ToolbarButton = (props) => {\n const onToggle = () => {\n const c = props.onToggle(props.value.change(), props);\n\n props.onChange(c);\n };\n\n if (props.isMark) {\n const isActive = hasMark(props.value, props.type);\n\n log('[ToolbarButton] mark:isActive: ', isActive);\n\n return (\n <MarkButton active={isActive} label={props.type} onToggle={onToggle} mark={props.type}>\n {props.icon}\n </MarkButton>\n );\n } else {\n const { disabled } = props;\n const isActive = props.isActive ? props.isActive(props.value, props.type) : hasBlock(props.value, props.type);\n\n log('[ToolbarButton] block:isActive: ', isActive);\n\n return (\n <Button\n active={isActive}\n disabled={disabled}\n onClick={() => props.onClick(props.value, props.onChange, props.getFocusedValue)}\n extraStyles={props.buttonStyles}\n >\n {props.icon}\n </Button>\n );\n }\n};\n\nToolbarButton.propTypes = {\n buttonStyles: PropTypes.object,\n disabled: PropTypes.bool,\n icon: PropTypes.any,\n isActive: PropTypes.bool,\n isMark: PropTypes.bool,\n getFocusedValue: PropTypes.func,\n onToggle: PropTypes.func,\n onChange: PropTypes.func,\n onClick: PropTypes.func,\n type: PropTypes.string,\n value: PropTypes.object,\n};\n\nconst isActiveToolbarPlugin = (props) => (plugin) => {\n const isDisabled = (props[plugin.name] || {}).disabled;\n\n return plugin && plugin.toolbar && !isDisabled;\n};\n\nexport const DefaultToolbar = ({\n plugins,\n pluginProps,\n value,\n onChange,\n getFocusedValue,\n onDone,\n classes,\n showDone,\n deletable,\n isHtmlMode,\n}) => {\n pluginProps = {\n // disable HTML plugin by default, at least for now\n html: { disabled: true },\n ...pluginProps,\n };\n let filtered;\n\n if (isHtmlMode) {\n filtered = plugins\n .filter((plugin) => {\n return isActiveToolbarPlugin(pluginProps)(plugin) && (plugin.name === 'characters' || plugin.name === 'html');\n })\n .map((p) => p.toolbar);\n } else {\n filtered = plugins.filter(isActiveToolbarPlugin(pluginProps)).map((p) => p.toolbar);\n }\n\n return (\n <div className={classes.defaultToolbar}>\n <div className={classes.buttonsContainer}>\n {filtered.map((p, index) => {\n return (\n <ToolbarButton {...p} key={index} value={value} onChange={onChange} getFocusedValue={getFocusedValue} />\n );\n })}\n </div>\n {showDone && !deletable && !isHtmlMode && <DoneButton onClick={onDone} />}\n </div>\n );\n};\n\nDefaultToolbar.propTypes = {\n classes: PropTypes.object.isRequired,\n plugins: PropTypes.array.isRequired,\n pluginProps: PropTypes.object,\n value: SlatePropTypes.value.isRequired,\n onChange: PropTypes.func.isRequired,\n getFocusedValue: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n showDone: PropTypes.bool,\n addArea: PropTypes.bool,\n deletable: PropTypes.bool,\n};\n\nDefaultToolbar.defaultProps = {\n pluginProps: {},\n};\n\nconst toolbarStyles = () => ({\n defaultToolbar: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n },\n buttonsContainer: {\n alignItems: 'center',\n display: 'flex',\n width: '100%',\n },\n});\n\nexport default withStyles(toolbarStyles)(DefaultToolbar);\n"],"file":"default-toolbar.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/editable-html",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.9-next.14+43d46c84",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -47,6 +47,6 @@
|
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "43d46c8411304c7ddd296667624ce2ef6a2ec768",
|
|
51
51
|
"scripts": {}
|
|
52
52
|
}
|
package/src/editor.jsx
CHANGED
|
@@ -339,7 +339,13 @@ export class Editor extends React.Component {
|
|
|
339
339
|
// The cursor is on a zero width element and when that is placed near void elements, it is not visible
|
|
340
340
|
// so we increase the width to at least 2px in order for the user to see it
|
|
341
341
|
|
|
342
|
-
|
|
342
|
+
// Trigger plugins and finish editing if:
|
|
343
|
+
// 1. The 'isHtmlMode' state has been toggled.
|
|
344
|
+
// 2. We're currently in 'isHtmlMode' and the editor value has been modified.
|
|
345
|
+
if (
|
|
346
|
+
this.state.isHtmlMode !== prevState.isHtmlMode ||
|
|
347
|
+
(this.state.isHtmlMode && !prevState.isEdited && this.state.isEdited)
|
|
348
|
+
) {
|
|
343
349
|
this.handlePlugins(this.props);
|
|
344
350
|
this.onEditingDone();
|
|
345
351
|
}
|
|
@@ -568,7 +574,13 @@ export class Editor extends React.Component {
|
|
|
568
574
|
this.setState({ isEdited: false });
|
|
569
575
|
}
|
|
570
576
|
|
|
571
|
-
|
|
577
|
+
// Mark the editor as edited when in HTML mode and its content has changed.
|
|
578
|
+
// This status will later be used to decide whether to prompt a warning to the user when exiting HTML mode.
|
|
579
|
+
if (
|
|
580
|
+
this.state.isHtmlMode &&
|
|
581
|
+
!this.state.isEdited &&
|
|
582
|
+
!isEqual(this.state.value.document.text, value.document.text)
|
|
583
|
+
) {
|
|
572
584
|
this.setState({ isEdited: true });
|
|
573
585
|
}
|
|
574
586
|
|