@pie-lib/editable-html 9.3.1-next.53 → 9.4.0
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 +17 -0
- package/lib/editor.js +244 -114
- package/lib/editor.js.map +1 -1
- package/lib/index.js +51 -5
- package/lib/index.js.map +1 -1
- package/lib/parse-html.js +5 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +12 -2
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +50 -3
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/image/alt-dialog.js +26 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +82 -29
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +45 -7
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +41 -2
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +22 -2
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +34 -13
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +42 -13
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +75 -30
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +75 -18
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +188 -100
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +24 -4
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +29 -5
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +18 -4
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +8 -2
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +18 -1
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +47 -1
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +8 -1
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +22 -0
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +7 -0
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +94 -15
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +43 -11
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +30 -8
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +9 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +48 -18
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +5 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +67 -19
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +15 -0
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +69 -8
- package/lib/serialization.js.map +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +4 -4
- package/src/plugins/media/index.jsx +1 -0
package/lib/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","names":["log","debug","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","error","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","buildPlugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","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","relatedTarget","target","node","findNode","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","getEventTransfer","file","files","fragment","getBase64","inline","Inline","create","isVoid","loading","range","getEventRange","select","ch","insertInline","InsertImageHandler","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","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","equals","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","shape","number","oneOfType","string","any","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","withStyles"],"sources":["../src/editor.jsx"],"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 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 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 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 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 },\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\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 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\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 UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value,\n });\n }\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 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"],"mappings":"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"}
|
|
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","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","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","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","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","equals","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","SlateTypes","shape","number","oneOfType","string","any","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 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 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 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 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 },\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\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 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\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 UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value,\n });\n }\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 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/lib/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -36,27 +38,49 @@ Object.defineProperty(exports, "valueToHtml", {
|
|
|
36
38
|
return _serialization.valueToHtml;
|
|
37
39
|
}
|
|
38
40
|
});
|
|
41
|
+
|
|
39
42
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
43
|
+
|
|
40
44
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
45
|
+
|
|
41
46
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
47
|
+
|
|
42
48
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
49
|
+
|
|
43
50
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
51
|
+
|
|
44
52
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
53
|
+
|
|
45
54
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
55
|
+
|
|
46
56
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
57
|
+
|
|
47
58
|
var _react = _interopRequireDefault(require("react"));
|
|
59
|
+
|
|
48
60
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
61
|
+
|
|
49
62
|
var _editor = _interopRequireWildcard(require("./editor"));
|
|
63
|
+
|
|
50
64
|
var _serialization = require("./serialization");
|
|
65
|
+
|
|
51
66
|
var _parseHtml = require("./parse-html");
|
|
67
|
+
|
|
52
68
|
var _debug = _interopRequireDefault(require("debug"));
|
|
69
|
+
|
|
53
70
|
var _slate = require("slate");
|
|
71
|
+
|
|
54
72
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
73
|
+
|
|
55
74
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
75
|
+
|
|
56
76
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
77
|
+
|
|
57
78
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
79
|
+
|
|
58
80
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
81
|
+
|
|
59
82
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
83
|
+
|
|
60
84
|
var log = (0, _debug["default"])('@pie-lib:editable-html');
|
|
61
85
|
/**
|
|
62
86
|
* Export lower level Editor and serialization functions.
|
|
@@ -68,48 +92,61 @@ var log = (0, _debug["default"])('@pie-lib:editable-html');
|
|
|
68
92
|
* compare it. TODO: This is an interim fix, we'll need to strip back `Editor` and look how best to maintain the
|
|
69
93
|
* `markup` api whilst avoiding the serialization mismatch. We should be making better use of schemas w/ normalize.
|
|
70
94
|
*/
|
|
71
|
-
|
|
72
95
|
var reduceMultipleBrs = function reduceMultipleBrs(markup) {
|
|
73
96
|
try {
|
|
74
97
|
return markup.replace(/(<br\s*\/?>){3,}/gi, '<br>');
|
|
75
98
|
} catch (e) {
|
|
76
99
|
console.log("Couldn't remove <br/> tags: ", e);
|
|
77
100
|
}
|
|
101
|
+
|
|
78
102
|
return markup;
|
|
79
103
|
};
|
|
104
|
+
|
|
80
105
|
var EditableHtml = /*#__PURE__*/function (_React$Component) {
|
|
81
106
|
(0, _inherits2["default"])(EditableHtml, _React$Component);
|
|
107
|
+
|
|
82
108
|
var _super = _createSuper(EditableHtml);
|
|
109
|
+
|
|
83
110
|
function EditableHtml(props) {
|
|
84
111
|
var _this;
|
|
112
|
+
|
|
85
113
|
(0, _classCallCheck2["default"])(this, EditableHtml);
|
|
86
114
|
_this = _super.call(this, props);
|
|
87
115
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChange", function (value, done) {
|
|
88
116
|
var html = (0, _serialization.valueToHtml)(value);
|
|
89
117
|
var htmlParsed = (0, _parseHtml.parseDegrees)(html);
|
|
90
118
|
log('value as html: ', html);
|
|
119
|
+
|
|
91
120
|
if (html !== _this.props.markup) {
|
|
92
121
|
_this.props.onChange(htmlParsed);
|
|
93
122
|
}
|
|
123
|
+
|
|
94
124
|
if (done) {
|
|
95
125
|
_this.props.onDone(htmlParsed);
|
|
96
126
|
}
|
|
97
127
|
});
|
|
98
128
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "focus", function (position, node) {
|
|
99
129
|
var select = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
130
|
+
|
|
100
131
|
if (_this.editorRef) {
|
|
101
132
|
_this.editorRef.change(function (c) {
|
|
102
133
|
var lastText = node ? c.value.document.getNextText(node.key) : c.value.document.getLastText();
|
|
103
134
|
var editorDOM = document.querySelector("[data-key=\"".concat(_this.editorRef.value.document.key, "\"]"));
|
|
135
|
+
|
|
104
136
|
if (editorDOM !== document.activeElement) {
|
|
105
137
|
document.activeElement.blur();
|
|
106
138
|
}
|
|
139
|
+
|
|
107
140
|
c.focus();
|
|
141
|
+
|
|
108
142
|
if (position === 'end' && lastText) {
|
|
109
143
|
var _lastText$text, _lastText$text2;
|
|
144
|
+
|
|
110
145
|
c.moveFocusTo(lastText.key, (_lastText$text = lastText.text) === null || _lastText$text === void 0 ? void 0 : _lastText$text.length).moveAnchorTo(lastText.key, (_lastText$text2 = lastText.text) === null || _lastText$text2 === void 0 ? void 0 : _lastText$text2.length);
|
|
146
|
+
|
|
111
147
|
if (select) {
|
|
112
148
|
var _lastText$text3;
|
|
149
|
+
|
|
113
150
|
var range = _slate.Range.fromJSON({
|
|
114
151
|
anchorKey: lastText.key,
|
|
115
152
|
anchorOffset: 0,
|
|
@@ -118,9 +155,11 @@ var EditableHtml = /*#__PURE__*/function (_React$Component) {
|
|
|
118
155
|
isFocused: true,
|
|
119
156
|
isBackward: false
|
|
120
157
|
});
|
|
158
|
+
|
|
121
159
|
c.select(range);
|
|
122
160
|
}
|
|
123
161
|
}
|
|
162
|
+
|
|
124
163
|
if (position === 'beginning' && lastText) {
|
|
125
164
|
c.moveFocusTo(lastText.key, 0).moveAnchorTo(lastText.key, 0);
|
|
126
165
|
}
|
|
@@ -137,17 +176,19 @@ var EditableHtml = /*#__PURE__*/function (_React$Component) {
|
|
|
137
176
|
value: v
|
|
138
177
|
};
|
|
139
178
|
return _this;
|
|
140
|
-
}
|
|
179
|
+
} // eslint-disable-next-line react/no-deprecated
|
|
180
|
+
|
|
141
181
|
|
|
142
|
-
// eslint-disable-next-line react/no-deprecated
|
|
143
182
|
(0, _createClass2["default"])(EditableHtml, [{
|
|
144
183
|
key: "componentWillReceiveProps",
|
|
145
184
|
value: function componentWillReceiveProps(props) {
|
|
146
185
|
if (!props.allowValidation && props.markup === this.props.markup) {
|
|
147
186
|
return;
|
|
148
187
|
}
|
|
188
|
+
|
|
149
189
|
var v = (0, _serialization.htmlToValue)(reduceMultipleBrs(props.markup));
|
|
150
190
|
var current = (0, _serialization.htmlToValue)(reduceMultipleBrs(this.props.markup));
|
|
191
|
+
|
|
151
192
|
if (v.equals && !v.equals(current)) {
|
|
152
193
|
this.setState({
|
|
153
194
|
value: v
|
|
@@ -158,19 +199,23 @@ var EditableHtml = /*#__PURE__*/function (_React$Component) {
|
|
|
158
199
|
key: "render",
|
|
159
200
|
value: function render() {
|
|
160
201
|
var _this2 = this;
|
|
202
|
+
|
|
161
203
|
var value = this.state.value;
|
|
162
204
|
var _this$props = this.props,
|
|
163
|
-
|
|
164
|
-
|
|
205
|
+
toolbarOpts = _this$props.toolbarOpts,
|
|
206
|
+
error = _this$props.error;
|
|
207
|
+
|
|
165
208
|
if (toolbarOpts) {
|
|
166
209
|
toolbarOpts.error = error;
|
|
167
210
|
}
|
|
211
|
+
|
|
168
212
|
var props = _objectSpread(_objectSpread({}, this.props), {}, {
|
|
169
213
|
markup: null,
|
|
170
214
|
value: value,
|
|
171
215
|
onChange: this.onChange,
|
|
172
216
|
focus: this.focus
|
|
173
217
|
});
|
|
218
|
+
|
|
174
219
|
return /*#__PURE__*/_react["default"].createElement(_editor["default"], (0, _extends2["default"])({
|
|
175
220
|
onRef: function onRef(ref) {
|
|
176
221
|
if (ref) {
|
|
@@ -185,6 +230,7 @@ var EditableHtml = /*#__PURE__*/function (_React$Component) {
|
|
|
185
230
|
}]);
|
|
186
231
|
return EditableHtml;
|
|
187
232
|
}(_react["default"].Component);
|
|
233
|
+
|
|
188
234
|
exports["default"] = EditableHtml;
|
|
189
235
|
(0, _defineProperty2["default"])(EditableHtml, "propTypes", {
|
|
190
236
|
onChange: _propTypes["default"].func.isRequired,
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.jsx"],"names":["log","reduceMultipleBrs","markup","replace","e","console","EditableHtml","props","value","done","html","htmlParsed","onChange","onDone","position","node","select","editorRef","change","c","lastText","document","getNextText","key","getLastText","editorDOM","querySelector","activeElement","blur","focus","moveFocusTo","text","length","moveAnchorTo","range","Range","fromJSON","anchorKey","anchorOffset","focusKey","focusOffset","isFocused","isBackward","onEditingDone","v","state","allowValidation","current","equals","setState","toolbarOpts","error","ref","rootRef","React","Component","PropTypes","func","isRequired","string","bool"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,wBAAN,CAAZ;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,MAAD,EAAY;AACpC,MAAI;AACF,WAAOA,MAAM,CAACC,OAAP,CAAe,oBAAf,EAAqC,MAArC,CAAP;AACD,GAFD,CAEE,OAAOC,CAAP,EAAU;AACVC,IAAAA,OAAO,CAACL,GAAR,CAAY,8BAAZ,EAA4CI,CAA5C;AACD;;AAED,SAAOF,MAAP;AACD,CARD;;IAUqBI,Y;;;;;AAanB,wBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,iGAsBR,UAACC,KAAD,EAAQC,IAAR,EAAiB;AAC1B,UAAMC,IAAI,GAAG,gCAAYF,KAAZ,CAAb;AACA,UAAMG,UAAU,GAAG,6BAAaD,IAAb,CAAnB;AAEAV,MAAAA,GAAG,CAAC,iBAAD,EAAoBU,IAApB,CAAH;;AAEA,UAAIA,IAAI,KAAK,MAAKH,KAAL,CAAWL,MAAxB,EAAgC;AAC9B,cAAKK,KAAL,CAAWK,QAAX,CAAoBD,UAApB;AACD;;AAED,UAAIF,IAAJ,EAAU;AACR,cAAKF,KAAL,CAAWM,MAAX,CAAkBF,UAAlB;AACD;AACF,KAnCkB;AAAA,8FAqCX,UAACG,QAAD,EAAWC,IAAX,EAAoC;AAAA,UAAnBC,MAAmB,uEAAV,KAAU;;AAC1C,UAAI,MAAKC,SAAT,EAAoB;AAClB,cAAKA,SAAL,CAAeC,MAAf,CAAsB,UAACC,CAAD,EAAO;AAC3B,cAAMC,QAAQ,GAAGL,IAAI,GAAGI,CAAC,CAACX,KAAF,CAAQa,QAAR,CAAiBC,WAAjB,CAA6BP,IAAI,CAACQ,GAAlC,CAAH,GAA4CJ,CAAC,CAACX,KAAF,CAAQa,QAAR,CAAiBG,WAAjB,EAAjE;AACA,cAAMC,SAAS,GAAGJ,QAAQ,CAACK,aAAT,uBAAqC,MAAKT,SAAL,CAAeT,KAAf,CAAqBa,QAArB,CAA8BE,GAAnE,SAAlB;;AAEA,cAAIE,SAAS,KAAKJ,QAAQ,CAACM,aAA3B,EAA0C;AACxCN,YAAAA,QAAQ,CAACM,aAAT,CAAuBC,IAAvB;AACD;;AAEDT,UAAAA,CAAC,CAACU,KAAF;;AAEA,cAAIf,QAAQ,KAAK,KAAb,IAAsBM,QAA1B,EAAoC;AAAA;;AAClCD,YAAAA,CAAC,CAACW,WAAF,CAAcV,QAAQ,CAACG,GAAvB,oBAA4BH,QAAQ,CAACW,IAArC,mDAA4B,eAAeC,MAA3C,EAAmDC,YAAnD,CAAgEb,QAAQ,CAACG,GAAzE,qBAA8EH,QAAQ,CAACW,IAAvF,oDAA8E,gBAAeC,MAA7F;;AACA,gBAAIhB,MAAJ,EAAY;AAAA;;AACV,kBAAMkB,KAAK,GAAGC,aAAMC,QAAN,CAAe;AAC3BC,gBAAAA,SAAS,EAAEjB,QAAQ,CAACG,GADO;AAE3Be,gBAAAA,YAAY,EAAE,CAFa;AAG3BC,gBAAAA,QAAQ,EAAEnB,QAAQ,CAACG,GAHQ;AAI3BiB,gBAAAA,WAAW,qBAAEpB,QAAQ,CAACW,IAAX,oDAAE,gBAAeC,MAJD;AAK3BS,gBAAAA,SAAS,EAAE,IALgB;AAM3BC,gBAAAA,UAAU,EAAE;AANe,eAAf,CAAd;;AAQAvB,cAAAA,CAAC,CAACH,MAAF,CAASkB,KAAT;AACD;AACF;;AAED,cAAIpB,QAAQ,KAAK,WAAb,IAA4BM,QAAhC,EAA0C;AACxCD,YAAAA,CAAC,CAACW,WAAF,CAAcV,QAAQ,CAACG,GAAvB,EAA4B,CAA5B,EAA+BU,YAA/B,CAA4Cb,QAAQ,CAACG,GAArD,EAA0D,CAA1D;AACD;AACF,SA5BD;AA6BD;AACF,KArEkB;AAAA,sGAuEH,YAAM;AACpB,UAAI,MAAKN,SAAT,EAAoB;AAClB,cAAKA,SAAL,CAAeV,KAAf,CAAqBoC,aAArB;AACD;AACF,KA3EkB;AAEjB,QAAMC,CAAC,GAAG,gCAAYrC,KAAK,CAACL,MAAlB,CAAV;AACA,UAAK2C,KAAL,GAAa;AACXrC,MAAAA,KAAK,EAAEoC;AADI,KAAb;AAHiB;AAMlB,G,CAED;;;;;WACA,mCAA0BrC,KAA1B,EAAiC;AAC/B,UAAI,CAACA,KAAK,CAACuC,eAAP,IAA0BvC,KAAK,CAACL,MAAN,KAAiB,KAAKK,KAAL,CAAWL,MAA1D,EAAkE;AAChE;AACD;;AAED,UAAM0C,CAAC,GAAG,gCAAY3C,iBAAiB,CAACM,KAAK,CAACL,MAAP,CAA7B,CAAV;AACA,UAAM6C,OAAO,GAAG,gCAAY9C,iBAAiB,CAAC,KAAKM,KAAL,CAAWL,MAAZ,CAA7B,CAAhB;;AAEA,UAAI0C,CAAC,CAACI,MAAF,IAAY,CAACJ,CAAC,CAACI,MAAF,CAASD,OAAT,CAAjB,EAAoC;AAClC,aAAKE,QAAL,CAAc;AAAEzC,UAAAA,KAAK,EAAEoC;AAAT,SAAd;AACD;AACF;;;WAyDD,kBAAS;AAAA;;AACP,UAAQpC,KAAR,GAAkB,KAAKqC,KAAvB,CAAQrC,KAAR;AACA,wBAA+B,KAAKD,KAApC;AAAA,UAAQ2C,WAAR,eAAQA,WAAR;AAAA,UAAqBC,KAArB,eAAqBA,KAArB;;AAEA,UAAID,WAAJ,EAAiB;AACfA,QAAAA,WAAW,CAACC,KAAZ,GAAoBA,KAApB;AACD;;AAED,UAAM5C,KAAK,mCACN,KAAKA,KADC;AAETL,QAAAA,MAAM,EAAE,IAFC;AAGTM,QAAAA,KAAK,EAALA,KAHS;AAITI,QAAAA,QAAQ,EAAE,KAAKA,QAJN;AAKTiB,QAAAA,KAAK,EAAE,KAAKA;AALH,QAAX;;AAQA,0BACE,gCAAC,kBAAD;AACE,QAAA,KAAK,EAAE,eAACuB,GAAD,EAAS;AACd,cAAIA,GAAJ,EAAS;AACP,YAAA,MAAI,CAACC,OAAL,GAAeD,GAAf;AACD;AACF,SALH;AAME,QAAA,SAAS,EAAE,mBAACA,GAAD;AAAA,iBAASA,GAAG,KAAK,MAAI,CAACnC,SAAL,GAAiBmC,GAAtB,CAAZ;AAAA;AANb,SAOM7C,KAPN,EADF;AAWD;;;EArHuC+C,kBAAMC,S;;;iCAA3BjD,Y,eACA;AACjBM,EAAAA,QAAQ,EAAE4C,sBAAUC,IAAV,CAAeC,UADR;AAEjB7C,EAAAA,MAAM,EAAE2C,sBAAUC,IAFD;AAGjBvD,EAAAA,MAAM,EAAEsD,sBAAUG,MAAV,CAAiBD,UAHR;AAIjBZ,EAAAA,eAAe,EAAEU,sBAAUI;AAJV,C;iCADAtD,Y,kBAQG;AACpBO,EAAAA,MAAM,EAAE,kBAAM,CAAE,CADI;AAEpBiC,EAAAA,eAAe,EAAE;AAFG,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Editor, { DEFAULT_PLUGINS, ALL_PLUGINS } from './editor';\nimport { htmlToValue, valueToHtml } from './serialization';\nimport { parseDegrees } from './parse-html';\nimport debug from 'debug';\nimport { Range } from 'slate';\n\nconst log = debug('@pie-lib:editable-html');\n/**\n * Export lower level Editor and serialization functions.\n */\nexport { htmlToValue, valueToHtml, Editor, DEFAULT_PLUGINS, ALL_PLUGINS };\n\n/**\n * Wrapper around the editor that exposes a `markup` and `onChange(markup:string)` api.\n * Because of the mismatch between the markup and the `Value` we need to convert the incoming markup to a value and\n * compare it. TODO: This is an interim fix, we'll need to strip back `Editor` and look how best to maintain the\n * `markup` api whilst avoiding the serialization mismatch. We should be making better use of schemas w/ normalize.\n */\n\nconst reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nexport default class EditableHtml extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func,\n markup: PropTypes.string.isRequired,\n allowValidation: PropTypes.bool,\n };\n\n static defaultProps = {\n onDone: () => {},\n allowValidation: false,\n };\n\n constructor(props) {\n super(props);\n const v = htmlToValue(props.markup);\n this.state = {\n value: v,\n };\n }\n\n // eslint-disable-next-line react/no-deprecated\n componentWillReceiveProps(props) {\n if (!props.allowValidation && props.markup === this.props.markup) {\n return;\n }\n\n const v = htmlToValue(reduceMultipleBrs(props.markup));\n const current = htmlToValue(reduceMultipleBrs(this.props.markup));\n\n if (v.equals && !v.equals(current)) {\n this.setState({ value: v });\n }\n }\n\n onChange = (value, done) => {\n const html = valueToHtml(value);\n const htmlParsed = parseDegrees(html);\n\n log('value as html: ', html);\n\n if (html !== this.props.markup) {\n this.props.onChange(htmlParsed);\n }\n\n if (done) {\n this.props.onDone(htmlParsed);\n }\n };\n\n focus = (position, node, select = false) => {\n if (this.editorRef) {\n this.editorRef.change((c) => {\n const lastText = node ? c.value.document.getNextText(node.key) : c.value.document.getLastText();\n const editorDOM = document.querySelector(`[data-key=\"${this.editorRef.value.document.key}\"]`);\n\n if (editorDOM !== document.activeElement) {\n document.activeElement.blur();\n }\n\n c.focus();\n\n if (position === 'end' && lastText) {\n c.moveFocusTo(lastText.key, lastText.text?.length).moveAnchorTo(lastText.key, lastText.text?.length);\n if (select) {\n const range = Range.fromJSON({\n anchorKey: lastText.key,\n anchorOffset: 0,\n focusKey: lastText.key,\n focusOffset: lastText.text?.length,\n isFocused: true,\n isBackward: false,\n });\n c.select(range);\n }\n }\n\n if (position === 'beginning' && lastText) {\n c.moveFocusTo(lastText.key, 0).moveAnchorTo(lastText.key, 0);\n }\n });\n }\n };\n\n finishEditing = () => {\n if (this.editorRef) {\n this.editorRef.props.onEditingDone();\n }\n };\n\n render() {\n const { value } = this.state;\n const { toolbarOpts, error } = this.props;\n\n if (toolbarOpts) {\n toolbarOpts.error = error;\n }\n\n const props = {\n ...this.props,\n markup: null,\n value,\n onChange: this.onChange,\n focus: this.focus,\n };\n\n return (\n <Editor\n onRef={(ref) => {\n if (ref) {\n this.rootRef = ref;\n }\n }}\n editorRef={(ref) => ref && (this.editorRef = ref)}\n {...props}\n />\n );\n }\n}\n"],"file":"index.js"}
|
package/lib/parse-html.js
CHANGED
|
@@ -4,14 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseDegrees = void 0;
|
|
7
|
+
|
|
7
8
|
var parseDegrees = function parseDegrees(html) {
|
|
8
|
-
return html
|
|
9
|
-
// removes \
|
|
10
|
-
.replace(/\\[
|
|
11
|
-
// removes \) use case: 50°+m<1
|
|
12
|
-
.replace(/\\[)]/g, '')
|
|
13
|
-
// removes \degree use case: 50°
|
|
9
|
+
return html // removes \( use case: 50°
|
|
10
|
+
.replace(/\\[(]/g, '') // removes \) use case: 50°+m<1
|
|
11
|
+
.replace(/\\[)]/g, '') // removes \degree use case: 50°
|
|
14
12
|
.replace(/\\degree/g, '°');
|
|
15
13
|
};
|
|
14
|
+
|
|
16
15
|
exports.parseDegrees = parseDegrees;
|
|
17
16
|
//# sourceMappingURL=parse-html.js.map
|
package/lib/parse-html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/parse-html.js"],"names":["parseDegrees","html","replace"],"mappings":";;;;;;;AAAO,IAAMA,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD;AAAA,SAC1BA,IAAI,CACF;AADE,GAEDC,OAFH,CAEW,QAFX,EAEqB,EAFrB,EAGE;AAHF,GAIGA,OAJH,CAIW,QAJX,EAIqB,EAJrB,EAKE;AALF,GAMGA,OANH,CAMW,WANX,EAMwB,OANxB,CAD0B;AAAA,CAArB","sourcesContent":["export const parseDegrees = (html) =>\n html\n // removes \\( use case: 50°\n .replace(/\\\\[(]/g, '')\n // removes \\) use case: 50°+m<1\n .replace(/\\\\[)]/g, '')\n // removes \\degree use case: 50°\n .replace(/\\\\degree/g, '°');\n"],"file":"parse-html.js"}
|
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports["default"] = void 0;
|
|
9
|
+
|
|
8
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
9
12
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
|
|
10
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
|
+
|
|
11
16
|
var _styles = require("@material-ui/core/styles");
|
|
17
|
+
|
|
12
18
|
var _Popper = _interopRequireDefault(require("@material-ui/core/Popper"));
|
|
19
|
+
|
|
13
20
|
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
21
|
+
|
|
14
22
|
var _excluded = ["classes", "children"];
|
|
23
|
+
|
|
15
24
|
var styles = function styles() {
|
|
16
25
|
return {
|
|
17
26
|
popover: {
|
|
@@ -31,10 +40,11 @@ var styles = function styles() {
|
|
|
31
40
|
}
|
|
32
41
|
};
|
|
33
42
|
};
|
|
43
|
+
|
|
34
44
|
var CustomPopper = (0, _styles.withStyles)(styles)(function (_ref) {
|
|
35
45
|
var classes = _ref.classes,
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
children = _ref.children,
|
|
47
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
38
48
|
return /*#__PURE__*/_react["default"].createElement(_Popper["default"], (0, _extends2["default"])({
|
|
39
49
|
id: "mouse-over-popover",
|
|
40
50
|
open: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/characters/custom-popper.js"],"names":["styles","popover","background","padding","pointerEvents","zIndex","paper","height","width","typography","fontSize","textAlign","CustomPopper","classes","children","props","vertical","horizontal","root"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO;AACpBC,IAAAA,OAAO,EAAE;AACPC,MAAAA,UAAU,EAAE,MADL;AAEPC,MAAAA,OAAO,EAAE,MAFF;AAGPC,MAAAA,aAAa,EAAE,MAHR;AAIPC,MAAAA,MAAM,EAAE;AAJD,KADW;AAOpBC,IAAAA,KAAK,EAAE;AACLH,MAAAA,OAAO,EAAE,EADJ;AAELI,MAAAA,MAAM,EAAE,MAFH;AAGLC,MAAAA,KAAK,EAAE;AAHF,KAPa;AAYpBC,IAAAA,UAAU,EAAE;AACVC,MAAAA,QAAQ,EAAE,EADA;AAEVC,MAAAA,SAAS,EAAE;AAFD;AAZQ,GAAP;AAAA,CAAf;;AAkBA,IAAMC,YAAY,GAAG,wBAAWZ,MAAX,EAAmB;AAAA,MAAGa,OAAH,QAAGA,OAAH;AAAA,MAAYC,QAAZ,QAAYA,QAAZ;AAAA,MAAyBC,KAAzB;AAAA,sBACtC,gCAAC,kBAAD;AACE,IAAA,EAAE,EAAC,oBADL;AAEE,IAAA,IAAI,MAFN;AAGE,IAAA,SAAS,EAAEF,OAAO,CAACZ,OAHrB;AAIE,IAAA,OAAO,EAAE;AACPK,MAAAA,KAAK,EAAEO,OAAO,CAACP;AADR,KAJX;AAOE,IAAA,YAAY,EAAE;AACZU,MAAAA,QAAQ,EAAE,QADE;AAEZC,MAAAA,UAAU,EAAE;AAFA,KAPhB;AAWE,IAAA,eAAe,EAAE;AACfD,MAAAA,QAAQ,EAAE,KADK;AAEfC,MAAAA,UAAU,EAAE;AAFG,KAXnB;AAeE,IAAA,mBAAmB,MAfrB;AAgBE,IAAA,gBAAgB;AAhBlB,KAiBMF,KAjBN,gBAmBE,gCAAC,sBAAD;AAAY,IAAA,OAAO,EAAE;AAAEG,MAAAA,IAAI,EAAEL,OAAO,CAACJ;AAAhB;AAArB,KAAoDK,QAApD,CAnBF,CADsC;AAAA,CAAnB,CAArB;eAwBeF,Y","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Popper from '@material-ui/core/Popper';\nimport Typography from '@material-ui/core/Typography';\n\nconst styles = () => ({\n popover: {\n background: '#fff',\n padding: '10px',\n pointerEvents: 'none',\n zIndex: 99999,\n },\n paper: {\n padding: 20,\n height: 'auto',\n width: 'auto',\n },\n typography: {\n fontSize: 50,\n textAlign: 'center',\n },\n});\n\nconst CustomPopper = withStyles(styles)(({ classes, children, ...props }) => (\n <Popper\n id=\"mouse-over-popover\"\n open\n className={classes.popover}\n classes={{\n paper: classes.paper,\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n disableRestoreFocus\n disableAutoFocus\n {...props}\n >\n <Typography classes={{ root: classes.typography }}>{children}</Typography>\n </Popper>\n));\n\nexport default CustomPopper;\n"],"file":"custom-popper.js"}
|