@pie-lib/editable-html 9.7.1-next.0 → 9.7.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [9.7.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@9.7.0...@pie-lib/editable-html@9.7.1) (2023-06-24)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * made sure mathMlOptions are editable live [PD-2150] ([31ce3d3](https://github.com/pie-framework/pie-lib/commit/31ce3d3536788021b912895c611f972aa87161b0))
12
+
13
+
14
+
15
+
16
+
6
17
  # [9.7.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@9.6.6...@pie-lib/editable-html@9.7.0) (2023-06-23)
7
18
 
8
19
 
package/lib/editor.js CHANGED
@@ -714,7 +714,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
714
714
  });
715
715
  }
716
716
 
717
- if (!(0, _isEqual["default"])(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {
717
+ var differentCharacterProps = !(0, _isEqual["default"])(nextProps.languageCharactersProps, this.props.languageCharactersProps);
718
+ var differentMathMlProps = !(0, _isEqual["default"])(nextProps.mathMlOptions, this.props.mathMlOptions);
719
+
720
+ if (differentCharacterProps || differentMathMlProps) {
718
721
  this.handlePlugins(nextProps);
719
722
  }
720
723
 
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","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","mathMlOptions","image","disableImageAlignmentButtons","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableScrollbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","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","newToolbarOpts","equals","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","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';\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) => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n error,\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 };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = (props) => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps,\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 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 { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts, nextProps.error);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\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() {\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 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 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 } = 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 </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","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","mathMlOptions","image","disableImageAlignmentButtons","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableScrollbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","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","newToolbarOpts","differentCharacterProps","differentMathMlProps","equals","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","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';\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) => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n error,\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 };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = (props) => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps,\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 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 { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts, nextProps.error);\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() {\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 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 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 } = 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 </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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "9.7.1-next.0+482534df",
3
+ "version": "9.7.1",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -10,10 +10,10 @@
10
10
  "@material-ui/core": "^3.8.3",
11
11
  "@material-ui/icons": "^3.0.2",
12
12
  "@material-ui/styles": "^3.0.0-alpha.10",
13
- "@pie-lib/drag": "^2.2.0",
14
- "@pie-lib/math-rendering": "^2.5.16",
15
- "@pie-lib/math-toolbar": "^1.11.28",
16
- "@pie-lib/render-ui": "^4.14.27",
13
+ "@pie-lib/drag": "^2.2.1",
14
+ "@pie-lib/math-rendering": "^2.5.17",
15
+ "@pie-lib/math-toolbar": "^1.11.29",
16
+ "@pie-lib/render-ui": "^4.14.28",
17
17
  "change-case": "^3.0.2",
18
18
  "classnames": "^2.2.6",
19
19
  "debug": "^4.1.1",
@@ -47,6 +47,6 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "482534dfd5a1e27ba548c1e8c89fbb3e0860235f",
50
+ "gitHead": "4043c98430c000ce3a25357d92845175b076ea21",
51
51
  "scripts": {}
52
52
  }
package/src/editor.jsx CHANGED
@@ -274,7 +274,10 @@ export class Editor extends React.Component {
274
274
  });
275
275
  }
276
276
 
277
- if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {
277
+ const differentCharacterProps = !isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps);
278
+ const differentMathMlProps = !isEqual(nextProps.mathMlOptions, this.props.mathMlOptions);
279
+
280
+ if (differentCharacterProps || differentMathMlProps) {
278
281
  this.handlePlugins(nextProps);
279
282
  }
280
283