@pie-lib/editable-html 10.0.7-next.1 → 10.0.7-next.12
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 +5 -1
- package/lib/editor.js.map +1 -1
- package/lib/plugins/html/index.js +4 -3
- package/lib/plugins/html/index.js.map +1 -1
- package/lib/plugins/math/index.js +19 -9
- package/lib/plugins/math/index.js.map +1 -1
- package/package.json +4 -4
- package/src/editor.jsx +6 -1
- package/src/plugins/html/index.jsx +4 -3
- package/src/plugins/math/index.jsx +15 -4
package/lib/editor.js
CHANGED
|
@@ -294,6 +294,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
294
294
|
});
|
|
295
295
|
});
|
|
296
296
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onEditingDone", function () {
|
|
297
|
+
if (_this.state.isHtmlMode) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
297
301
|
log('[onEditingDone]');
|
|
298
302
|
|
|
299
303
|
_this.setState({
|
|
@@ -788,7 +792,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
788
792
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
789
793
|
// The cursor is on a zero width element and when that is placed near void elements, it is not visible
|
|
790
794
|
// so we increase the width to at least 2px in order for the user to see it
|
|
791
|
-
if (this.state.isHtmlMode !== prevState.isHtmlMode ||
|
|
795
|
+
if (this.state.isHtmlMode !== prevState.isHtmlMode || this.state.isHtmlMode && this.state.isEdited) {
|
|
792
796
|
this.handlePlugins(this.props);
|
|
793
797
|
this.onEditingDone();
|
|
794
798
|
}
|
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 if (this.state.isHtmlMode !== prevState.isHtmlMode || prevState.isEdited !== 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 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 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"}
|
|
@@ -31,8 +31,9 @@ function HtmlPlugin(opts) {
|
|
|
31
31
|
title: 'Warning',
|
|
32
32
|
text: 'Returning to rich text mode may cause edits to be lost.',
|
|
33
33
|
onConfirm: function onConfirm() {
|
|
34
|
-
toggleToRichText(value, onChange);
|
|
35
34
|
handleAlertDialog(false);
|
|
35
|
+
toggleToRichText(value, onChange);
|
|
36
|
+
toggleHtmlMode();
|
|
36
37
|
},
|
|
37
38
|
onClose: function onClose() {
|
|
38
39
|
handleAlertDialog(false);
|
|
@@ -62,12 +63,12 @@ function HtmlPlugin(opts) {
|
|
|
62
63
|
handleHtmlModeOn(value, onChange);
|
|
63
64
|
} else {
|
|
64
65
|
toggleToRichText(value, onChange);
|
|
66
|
+
toggleHtmlMode();
|
|
65
67
|
}
|
|
66
68
|
} else {
|
|
67
69
|
handleHtmlModeOff(value, onChange);
|
|
70
|
+
toggleHtmlMode();
|
|
68
71
|
}
|
|
69
|
-
|
|
70
|
-
toggleHtmlMode();
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/html/index.jsx"],"names":["toggleToRichText","value","onChange","plainText","document","text","slateValue","change","selectAll","insertFragment","HtmlPlugin","opts","isHtmlMode","isEdited","toggleHtmlMode","handleAlertDialog","handleHtmlModeOn","dialogProps","title","onConfirm","onClose","handleHtmlModeOff","insertText","name","toolbar","icon","buttonStyles","margin","type","onClick"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,KAAD,EAAQC,QAAR,EAAqB;AAC5C,MAAMC,SAAS,GAAGF,KAAK,CAACG,QAAN,CAAeC,IAAjC;AACA,MAAMC,UAAU,GAAG,gCAAYH,SAAZ,CAAnB;AAEA,MAAMI,MAAM,GAAGN,KAAK,CACjBM,MADY,GAEZC,SAFY,eAIZC,cAJY,CAIGH,UAAU,CAACF,QAJd,CAAf;AAKAF,EAAAA,QAAQ,CAACK,MAAD,CAAR;AACD,CAVD;;AAYe,SAASG,UAAT,CAAoBC,IAApB,EAA0B;AACvC,MAAQC,UAAR,GAAoED,IAApE,CAAQC,UAAR;AAAA,MAAoBC,QAApB,GAAoEF,IAApE,CAAoBE,QAApB;AAAA,MAA8BC,cAA9B,GAAoEH,IAApE,CAA8BG,cAA9B;AAAA,MAA8CC,iBAA9C,GAAoEJ,IAApE,CAA8CI,iBAA9C;;AAEA,MAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACf,KAAD,EAAQC,QAAR,EAAqB;AAC5C,QAAMe,WAAW,GAAG;AAClBC,MAAAA,KAAK,EAAE,SADW;AAElBb,MAAAA,IAAI,EAAE,yDAFY;AAGlBc,MAAAA,SAAS,EAAE,qBAAM;
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/html/index.jsx"],"names":["toggleToRichText","value","onChange","plainText","document","text","slateValue","change","selectAll","insertFragment","HtmlPlugin","opts","isHtmlMode","isEdited","toggleHtmlMode","handleAlertDialog","handleHtmlModeOn","dialogProps","title","onConfirm","onClose","handleHtmlModeOff","insertText","name","toolbar","icon","buttonStyles","margin","type","onClick"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,KAAD,EAAQC,QAAR,EAAqB;AAC5C,MAAMC,SAAS,GAAGF,KAAK,CAACG,QAAN,CAAeC,IAAjC;AACA,MAAMC,UAAU,GAAG,gCAAYH,SAAZ,CAAnB;AAEA,MAAMI,MAAM,GAAGN,KAAK,CACjBM,MADY,GAEZC,SAFY,eAIZC,cAJY,CAIGH,UAAU,CAACF,QAJd,CAAf;AAKAF,EAAAA,QAAQ,CAACK,MAAD,CAAR;AACD,CAVD;;AAYe,SAASG,UAAT,CAAoBC,IAApB,EAA0B;AACvC,MAAQC,UAAR,GAAoED,IAApE,CAAQC,UAAR;AAAA,MAAoBC,QAApB,GAAoEF,IAApE,CAAoBE,QAApB;AAAA,MAA8BC,cAA9B,GAAoEH,IAApE,CAA8BG,cAA9B;AAAA,MAA8CC,iBAA9C,GAAoEJ,IAApE,CAA8CI,iBAA9C;;AAEA,MAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACf,KAAD,EAAQC,QAAR,EAAqB;AAC5C,QAAMe,WAAW,GAAG;AAClBC,MAAAA,KAAK,EAAE,SADW;AAElBb,MAAAA,IAAI,EAAE,yDAFY;AAGlBc,MAAAA,SAAS,EAAE,qBAAM;AACfJ,QAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACAf,QAAAA,gBAAgB,CAACC,KAAD,EAAQC,QAAR,CAAhB;AACAY,QAAAA,cAAc;AACf,OAPiB;AAQlBM,MAAAA,OAAO,EAAE,mBAAM;AACbL,QAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD;AAViB,KAApB;AAaAA,IAAAA,iBAAiB,CAAC,IAAD,EAAOE,WAAP,CAAjB;AACD,GAfD;;AAiBA,MAAMI,iBAAiB,GAAG,SAApBA,iBAAoB,CAACpB,KAAD,EAAQC,QAAR,EAAqB;AAC7C,QAAMK,MAAM,GAAGN,KAAK,CACjBM,MADY,GAEZC,SAFY,eAIZc,UAJY,CAID,gCAAYrB,KAAZ,CAJC,CAAf;AAKAC,IAAAA,QAAQ,CAACK,MAAD,CAAR;AACD,GAPD;;AASA,SAAO;AACLgB,IAAAA,IAAI,EAAE,MADD;AAELC,IAAAA,OAAO,EAAE;AACPC,MAAAA,IAAI,eAAE,gCAAC,iBAAD;AAAc,QAAA,UAAU,EAAEb;AAA1B,QADC;AAEPc,MAAAA,YAAY,EAAE;AACZC,QAAAA,MAAM,EAAE;AADI,OAFP;AAKPC,MAAAA,IAAI,EAAE,MALC;AAMPC,MAAAA,OAAO,EAAE,iBAAC5B,KAAD,EAAQC,QAAR,EAAqB;AAC5B,YAAIU,UAAJ,EAAgB;AACd,cAAIC,QAAJ,EAAc;AACZG,YAAAA,gBAAgB,CAACf,KAAD,EAAQC,QAAR,CAAhB;AACD,WAFD,MAEO;AACLF,YAAAA,gBAAgB,CAACC,KAAD,EAAQC,QAAR,CAAhB;AACAY,YAAAA,cAAc;AACf;AACF,SAPD,MAOO;AACLO,UAAAA,iBAAiB,CAACpB,KAAD,EAAQC,QAAR,CAAjB;AACAY,UAAAA,cAAc;AACf;AACF;AAlBM;AAFJ,GAAP;AAuBD","sourcesContent":["import React from 'react';\nimport HtmlModeIcon from './icons';\nimport { htmlToValue, valueToHtml } from './../../serialization';\n\nconst toggleToRichText = (value, onChange) => {\n const plainText = value.document.text;\n const slateValue = htmlToValue(plainText);\n\n const change = value\n .change()\n .selectAll()\n .delete()\n .insertFragment(slateValue.document);\n onChange(change);\n};\n\nexport default function HtmlPlugin(opts) {\n const { isHtmlMode, isEdited, toggleHtmlMode, handleAlertDialog } = opts;\n\n const handleHtmlModeOn = (value, onChange) => {\n const dialogProps = {\n title: 'Warning',\n text: 'Returning to rich text mode may cause edits to be lost.',\n onConfirm: () => {\n handleAlertDialog(false);\n toggleToRichText(value, onChange);\n toggleHtmlMode();\n },\n onClose: () => {\n handleAlertDialog(false);\n },\n };\n\n handleAlertDialog(true, dialogProps);\n };\n\n const handleHtmlModeOff = (value, onChange) => {\n const change = value\n .change()\n .selectAll()\n .delete()\n .insertText(valueToHtml(value));\n onChange(change);\n };\n\n return {\n name: 'html',\n toolbar: {\n icon: <HtmlModeIcon isHtmlMode={isHtmlMode} />,\n buttonStyles: {\n margin: '0 20px 0 auto',\n },\n type: 'html',\n onClick: (value, onChange) => {\n if (isHtmlMode) {\n if (isEdited) {\n handleHtmlModeOn(value, onChange);\n } else {\n toggleToRichText(value, onChange);\n toggleHtmlMode();\n }\n } else {\n handleHtmlModeOff(value, onChange);\n toggleHtmlMode();\n }\n },\n },\n };\n}\n"],"file":"index.js"}
|
|
@@ -269,6 +269,12 @@ var lessThanHandling = function lessThanHandling(input) {
|
|
|
269
269
|
return input;
|
|
270
270
|
};
|
|
271
271
|
|
|
272
|
+
function fixLatexExpression(latexInput) {
|
|
273
|
+
// for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them
|
|
274
|
+
// Replace '\\left.' and '\\right.' with an empty string
|
|
275
|
+
return latexInput.replace(/\\left\.\s*|\\right\.\s*/g, '');
|
|
276
|
+
}
|
|
277
|
+
|
|
272
278
|
var serialization = {
|
|
273
279
|
deserialize: function deserialize(el) {
|
|
274
280
|
var tagName = getTagName(el);
|
|
@@ -292,8 +298,9 @@ var serialization = {
|
|
|
292
298
|
if (MathPlugin.mathMlOptions.mmlEditing) {
|
|
293
299
|
var htmlToUse = (0, _mathRendering.mmlToLatex)(newHtml);
|
|
294
300
|
var latex = htmlDecode(htmlToUse);
|
|
301
|
+
var correctedLatex = fixLatexExpression(latex);
|
|
295
302
|
|
|
296
|
-
var _unWrapMath = (0, _mathRendering.unWrapMath)(
|
|
303
|
+
var _unWrapMath = (0, _mathRendering.unWrapMath)(correctedLatex),
|
|
297
304
|
unwrapped = _unWrapMath.unwrapped,
|
|
298
305
|
wrapType = _unWrapMath.wrapType;
|
|
299
306
|
|
|
@@ -364,21 +371,24 @@ var serialization = {
|
|
|
364
371
|
var strippedNewL = newLatex.replace(/\s/g, ''); // we check if the latex keeps his form after being converted to mathml and back to latex
|
|
365
372
|
// if it does we can safely convert it to mathml
|
|
366
373
|
|
|
367
|
-
if ((0, _isEqual["default"])(strippedL, strippedNewL)) {
|
|
368
|
-
|
|
369
|
-
"data-type": "mathml",
|
|
370
|
-
dangerouslySetInnerHTML: {
|
|
371
|
-
__html: res
|
|
372
|
-
}
|
|
373
|
-
});
|
|
374
|
-
} else {
|
|
374
|
+
if (!(0, _isEqual["default"])(strippedL, strippedNewL)) {
|
|
375
|
+
var correctedLatex = fixLatexExpression(newLatex); // As George requested in PD-3167, I will set the new mathML anyway, and also log differences
|
|
375
376
|
// if it doesn't we keep the latex version
|
|
377
|
+
|
|
376
378
|
console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {
|
|
377
379
|
initialLatex: l,
|
|
378
380
|
newLatex: newLatex,
|
|
381
|
+
correctedLatex: correctedLatex,
|
|
379
382
|
mathML: res
|
|
380
383
|
});
|
|
381
384
|
}
|
|
385
|
+
|
|
386
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
387
|
+
"data-type": "mathml",
|
|
388
|
+
dangerouslySetInnerHTML: {
|
|
389
|
+
__html: res
|
|
390
|
+
}
|
|
391
|
+
});
|
|
382
392
|
}
|
|
383
393
|
|
|
384
394
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/math/index.jsx"],"names":["log","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","value","onFocus","onBlur","onClick","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","html","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","htmlToUse","unwrapped","wrapType","nodes","wrapper","nodeType","hasLatex","hasAttribute","serialize","l","decoded","res","newLatex","strippedL","replace","strippedNewL","console","initialLatex","mathML"],"mappings":"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","sourcesContent":["import Functions from '@material-ui/icons/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../serialization';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\n// eslint-disable-next-line react/display-name\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, value, onFocus, onBlur, onClick } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nexport default function MathPlugin(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\n });\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '<' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const htmlToUse = mmlToLatex(newHtml);\n const latex = htmlDecode(htmlToUse);\n const { unwrapped, wrapType } = unWrapMath(latex);\n\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: newHtml,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const l = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n log('[serialize] latex: ', l);\n const decoded = htmlDecode(lessThanHandling(l));\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const res = renderMath(`<span data-latex=\"\" data-raw=\"${decoded}\">${wrapMath(decoded, wrapper)}</span>`);\n const newLatex = mmlToLatex(res);\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = l.replace(/\\s/g, '');\n const strippedNewL = newLatex.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does we can safely convert it to mathml\n if (isEqual(strippedL, strippedNewL)) {\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: res }} />;\n } else {\n // if it doesn't we keep the latex version\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: l,\n newLatex: newLatex,\n mathML: res,\n });\n }\n }\n\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/math/index.jsx"],"names":["log","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","value","onFocus","onBlur","onClick","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","html","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","fixLatexExpression","latexInput","replace","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","htmlToUse","correctedLatex","unwrapped","wrapType","nodes","wrapper","nodeType","hasLatex","hasAttribute","serialize","l","decoded","res","newLatex","strippedL","strippedNewL","console","initialLatex","mathML"],"mappings":"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","sourcesContent":["import Functions from '@material-ui/icons/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../serialization';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\n// eslint-disable-next-line react/display-name\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, value, onFocus, onBlur, onClick } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nexport default function MathPlugin(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\n });\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '<' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nfunction fixLatexExpression(latexInput) {\n // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them\n // Replace '\\\\left.' and '\\\\right.' with an empty string\n return latexInput.replace(/\\\\left\\.\\s*|\\\\right\\.\\s*/g, '');\n}\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const htmlToUse = mmlToLatex(newHtml);\n const latex = htmlDecode(htmlToUse);\n const correctedLatex = fixLatexExpression(latex);\n const { unwrapped, wrapType } = unWrapMath(correctedLatex);\n\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: newHtml,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const l = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n log('[serialize] latex: ', l);\n const decoded = htmlDecode(lessThanHandling(l));\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const res = renderMath(`<span data-latex=\"\" data-raw=\"${decoded}\">${wrapMath(decoded, wrapper)}</span>`);\n const newLatex = mmlToLatex(res);\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = l.replace(/\\s/g, '');\n const strippedNewL = newLatex.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does we can safely convert it to mathml\n if (!isEqual(strippedL, strippedNewL)) {\n const correctedLatex = fixLatexExpression(newLatex);\n\n // As George requested in PD-3167, I will set the new mathML anyway, and also log differences\n // if it doesn't we keep the latex version\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: l,\n newLatex: newLatex,\n correctedLatex,\n mathML: res,\n });\n }\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: res }} />;\n }\n\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"file":"index.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/editable-html",
|
|
3
|
-
"version": "10.0.7-next.
|
|
3
|
+
"version": "10.0.7-next.12+e111690e",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"@mui/icons-material": "^5.14.3",
|
|
16
16
|
"@mui/material": "^5.14.4",
|
|
17
17
|
"@pie-lib/drag": "^2.2.4",
|
|
18
|
-
"@pie-lib/math-rendering": "^2.5.
|
|
18
|
+
"@pie-lib/math-rendering": "^2.5.18",
|
|
19
19
|
"@pie-lib/math-toolbar": "^1.11.30",
|
|
20
|
-
"@pie-lib/render-ui": "^4.15.
|
|
20
|
+
"@pie-lib/render-ui": "^4.15.2",
|
|
21
21
|
"change-case": "^3.0.2",
|
|
22
22
|
"classnames": "^2.2.6",
|
|
23
23
|
"debug": "^4.1.1",
|
|
@@ -51,6 +51,6 @@
|
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "e111690e5c20877713a2c11f5efdfb7920928b76",
|
|
55
55
|
"scripts": {}
|
|
56
56
|
}
|
package/src/editor.jsx
CHANGED
|
@@ -338,7 +338,8 @@ export class Editor extends React.Component {
|
|
|
338
338
|
componentDidUpdate(prevProps, prevState) {
|
|
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
|
+
if (this.state.isHtmlMode !== prevState.isHtmlMode || (this.state.isHtmlMode && this.state.isEdited)) {
|
|
342
343
|
this.handlePlugins(this.props);
|
|
343
344
|
this.onEditingDone();
|
|
344
345
|
}
|
|
@@ -383,6 +384,10 @@ export class Editor extends React.Component {
|
|
|
383
384
|
};
|
|
384
385
|
|
|
385
386
|
onEditingDone = () => {
|
|
387
|
+
if (this.state.isHtmlMode) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
|
|
386
391
|
log('[onEditingDone]');
|
|
387
392
|
this.setState({ stashedValue: null, focusedNode: null });
|
|
388
393
|
log('[onEditingDone] value: ', this.state.value);
|
|
@@ -22,8 +22,9 @@ export default function HtmlPlugin(opts) {
|
|
|
22
22
|
title: 'Warning',
|
|
23
23
|
text: 'Returning to rich text mode may cause edits to be lost.',
|
|
24
24
|
onConfirm: () => {
|
|
25
|
-
toggleToRichText(value, onChange);
|
|
26
25
|
handleAlertDialog(false);
|
|
26
|
+
toggleToRichText(value, onChange);
|
|
27
|
+
toggleHtmlMode();
|
|
27
28
|
},
|
|
28
29
|
onClose: () => {
|
|
29
30
|
handleAlertDialog(false);
|
|
@@ -56,12 +57,12 @@ export default function HtmlPlugin(opts) {
|
|
|
56
57
|
handleHtmlModeOn(value, onChange);
|
|
57
58
|
} else {
|
|
58
59
|
toggleToRichText(value, onChange);
|
|
60
|
+
toggleHtmlMode();
|
|
59
61
|
}
|
|
60
62
|
} else {
|
|
61
63
|
handleHtmlModeOff(value, onChange);
|
|
64
|
+
toggleHtmlMode();
|
|
62
65
|
}
|
|
63
|
-
|
|
64
|
-
toggleHtmlMode();
|
|
65
66
|
},
|
|
66
67
|
},
|
|
67
68
|
};
|
|
@@ -214,6 +214,12 @@ const lessThanHandling = (input) => {
|
|
|
214
214
|
return input;
|
|
215
215
|
};
|
|
216
216
|
|
|
217
|
+
function fixLatexExpression(latexInput) {
|
|
218
|
+
// for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them
|
|
219
|
+
// Replace '\\left.' and '\\right.' with an empty string
|
|
220
|
+
return latexInput.replace(/\\left\.\s*|\\right\.\s*/g, '');
|
|
221
|
+
}
|
|
222
|
+
|
|
217
223
|
export const serialization = {
|
|
218
224
|
deserialize(el) {
|
|
219
225
|
const tagName = getTagName(el);
|
|
@@ -236,7 +242,8 @@ export const serialization = {
|
|
|
236
242
|
if (MathPlugin.mathMlOptions.mmlEditing) {
|
|
237
243
|
const htmlToUse = mmlToLatex(newHtml);
|
|
238
244
|
const latex = htmlDecode(htmlToUse);
|
|
239
|
-
const
|
|
245
|
+
const correctedLatex = fixLatexExpression(latex);
|
|
246
|
+
const { unwrapped, wrapType } = unWrapMath(correctedLatex);
|
|
240
247
|
|
|
241
248
|
return {
|
|
242
249
|
object: 'inline',
|
|
@@ -303,16 +310,20 @@ export const serialization = {
|
|
|
303
310
|
|
|
304
311
|
// we check if the latex keeps his form after being converted to mathml and back to latex
|
|
305
312
|
// if it does we can safely convert it to mathml
|
|
306
|
-
if (isEqual(strippedL, strippedNewL)) {
|
|
307
|
-
|
|
308
|
-
|
|
313
|
+
if (!isEqual(strippedL, strippedNewL)) {
|
|
314
|
+
const correctedLatex = fixLatexExpression(newLatex);
|
|
315
|
+
|
|
316
|
+
// As George requested in PD-3167, I will set the new mathML anyway, and also log differences
|
|
309
317
|
// if it doesn't we keep the latex version
|
|
310
318
|
console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {
|
|
311
319
|
initialLatex: l,
|
|
312
320
|
newLatex: newLatex,
|
|
321
|
+
correctedLatex,
|
|
313
322
|
mathML: res,
|
|
314
323
|
});
|
|
315
324
|
}
|
|
325
|
+
|
|
326
|
+
return <span data-type="mathml" dangerouslySetInnerHTML={{ __html: res }} />;
|
|
316
327
|
}
|
|
317
328
|
|
|
318
329
|
return (
|