@pie-lib/editable-html 9.2.3-next.34 → 9.2.3-next.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/editor.js CHANGED
@@ -120,6 +120,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
120
120
  onBlur: _this.onPluginBlur
121
121
  },
122
122
  image: {
123
+ disableImageAlignmentButtons: props.disableImageAlignmentButtons,
123
124
  onDelete: props.imageSupport && props.imageSupport["delete"] && function (src, done) {
124
125
  props.imageSupport["delete"](src, function (e) {
125
126
  done(e, _this.state.value);
@@ -849,6 +850,7 @@ exports.Editor = Editor;
849
850
  focus: _propTypes["default"].func.isRequired,
850
851
  value: _slatePropTypes["default"].value.isRequired,
851
852
  imageSupport: _propTypes["default"].object,
853
+ disableImageAlignmentButtons: _propTypes["default"].bool,
852
854
  uploadSoundSupport: _propTypes["default"].shape({
853
855
  add: _propTypes["default"].func,
854
856
  "delete": _propTypes["default"].func
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","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","image","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","error","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 => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\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 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([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\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 (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\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)\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 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(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\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);\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 =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n 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 (\n value &&\n value.document &&\n value.document.text &&\n value.document.text.length > charactersLimit\n ) {\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 (\n file &&\n (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')\n ) {\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\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\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 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","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","error","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 => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\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([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\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 (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\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)\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(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\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);\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 =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n 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 (\n value &&\n value.document &&\n value.document.text &&\n value.document.text.length > charactersLimit\n ) {\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 (\n file &&\n (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')\n ) {\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\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\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 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"}
@@ -100,6 +100,11 @@ var AltDialog = /*#__PURE__*/function (_React$Component) {
100
100
  return _this2.setState({
101
101
  value: event.target.value
102
102
  });
103
+ },
104
+ FormHelperTextProps: {
105
+ style: {
106
+ fontSize: 14
107
+ }
103
108
  }
104
109
  }))), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
105
110
  onClick: this.onDone
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/image/alt-dialog.jsx"],"names":["AltDialog","props","allDialogs","document","querySelectorAll","forEach","s","remove","onDone","value","state","closeDialog","alt","display","paddingTop","event","setState","target","React","Component","PropTypes","func","isRequired","string"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,S;;;;;AAMX,qBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,oGAUL,YAAM;AAClB,UAAMC,UAAU,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,cAA1B,CAAnB;AAEAF,MAAAA,UAAU,CAACG,OAAX,CAAmB,UAASC,CAAT,EAAY;AAC7B,eAAOA,CAAC,CAACC,MAAF,EAAP;AACD,OAFD;AAGD,KAhBkB;AAAA,+FAkBV,YAAM;AACb,UAAQC,MAAR,GAAmB,MAAKP,KAAxB,CAAQO,MAAR;AACA,UAAQC,KAAR,GAAkB,MAAKC,KAAvB,CAAQD,KAAR;AAEAD,MAAAA,MAAM,CAACC,KAAD,CAAN;;AACA,YAAKE,WAAL;AACD,KAxBkB;AAGjB,QAAQC,GAAR,GAAgBX,KAAhB,CAAQW,GAAR;AAEA,UAAKF,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAEG;AADI,KAAb;AALiB;AAQlB;;;;WAkBD,kBAAS;AAAA;;AACP,UAAQH,KAAR,GAAkB,KAAKC,KAAvB,CAAQD,KAAR;AAEA,0BACE,gCAAC,kBAAD;AAAQ,QAAA,IAAI,MAAZ;AAAa,QAAA,aAAa,MAA1B;AAA2B,QAAA,OAAO,EAAE,KAAKE,WAAzC;AAAsD,QAAA,EAAE,EAAC,aAAzD;AAAuE,QAAA,YAAY;AAAnF,sBACE,gCAAC,yBAAD,qBACE;AAAK,QAAA,KAAK,EAAE;AAAEE,UAAAA,OAAO,EAAE;AAAX;AAAZ,sBACE,gCAAC,wBAAD;AAAc,QAAA,KAAK,EAAE;AAAEC,UAAAA,UAAU,EAAE;AAAd;AAArB,QADF,eAEE,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,WAAW,EAAE,6CAFf;AAGE,QAAA,UAAU,EACR,0HAJJ;AAME,QAAA,KAAK,EAAEL,KANT;AAOE,QAAA,QAAQ,EAAE,kBAAAM,KAAK;AAAA,iBAAI,MAAI,CAACC,QAAL,CAAc;AAAEP,YAAAA,KAAK,EAAEM,KAAK,CAACE,MAAN,CAAaR;AAAtB,WAAd,CAAJ;AAAA;AAPjB,QAFF,CADF,CADF,eAeE,gCAAC,yBAAD,qBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE,KAAKD;AAAtB,gBADF,CAfF,CADF;AAqBD;;;EAxD4BU,kBAAMC,S;;;iCAAxBnB,S,eACQ;AACjBQ,EAAAA,MAAM,EAAEY,sBAAUC,IAAV,CAAeC,UADN;AAEjBV,EAAAA,GAAG,EAAEQ,sBAAUG;AAFE,C;eA0DNvB,S","sourcesContent":["import React from 'react';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport ArrowBackIos from '@material-ui/icons/ArrowBackIos';\nimport TextField from '@material-ui/core/TextField';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport PropTypes from \"prop-types\";\n\nexport class AltDialog extends React.Component {\n static propTypes = {\n onDone: PropTypes.func.isRequired,\n alt: PropTypes.string\n };\n\n constructor(props) {\n super(props);\n\n const { alt } = props;\n\n this.state = {\n value: alt\n };\n }\n\n closeDialog = () => {\n const allDialogs = document.querySelectorAll('#text-dialog');\n\n allDialogs.forEach(function(s) {\n return s.remove();\n });\n };\n\n onDone = () => {\n const { onDone } = this.props;\n const { value } = this.state;\n\n onDone(value);\n this.closeDialog();\n };\n\n render() {\n const { value } = this.state;\n\n return (\n <Dialog open disablePortal onClose={this.closeDialog} id=\"text-dialog\" hideBackdrop>\n <DialogContent>\n <div style={{ display: 'flex' }}>\n <ArrowBackIos style={{ paddingTop: '6px' }} />\n <TextField\n multiline\n placeholder={'Enter an Alt Text description of this image'}\n helperText={\n 'Users with visual limitations rely on Alt Text, since screen readers cannot otherwise describe the contents of an image.'\n }\n value={value}\n onChange={event => this.setState({ value: event.target.value })}\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={this.onDone}>Done</Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AltDialog;\n"],"file":"alt-dialog.js"}
1
+ {"version":3,"sources":["../../../src/plugins/image/alt-dialog.jsx"],"names":["AltDialog","props","allDialogs","document","querySelectorAll","forEach","s","remove","onDone","value","state","closeDialog","alt","display","paddingTop","event","setState","target","style","fontSize","React","Component","PropTypes","func","isRequired","string"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,S;;;;;AAMX,qBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,oGAUL,YAAM;AAClB,UAAMC,UAAU,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,cAA1B,CAAnB;AAEAF,MAAAA,UAAU,CAACG,OAAX,CAAmB,UAASC,CAAT,EAAY;AAC7B,eAAOA,CAAC,CAACC,MAAF,EAAP;AACD,OAFD;AAGD,KAhBkB;AAAA,+FAkBV,YAAM;AACb,UAAQC,MAAR,GAAmB,MAAKP,KAAxB,CAAQO,MAAR;AACA,UAAQC,KAAR,GAAkB,MAAKC,KAAvB,CAAQD,KAAR;AAEAD,MAAAA,MAAM,CAACC,KAAD,CAAN;;AACA,YAAKE,WAAL;AACD,KAxBkB;AAGjB,QAAQC,GAAR,GAAgBX,KAAhB,CAAQW,GAAR;AAEA,UAAKF,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAEG;AADI,KAAb;AALiB;AAQlB;;;;WAkBD,kBAAS;AAAA;;AACP,UAAQH,KAAR,GAAkB,KAAKC,KAAvB,CAAQD,KAAR;AAEA,0BACE,gCAAC,kBAAD;AAAQ,QAAA,IAAI,MAAZ;AAAa,QAAA,aAAa,MAA1B;AAA2B,QAAA,OAAO,EAAE,KAAKE,WAAzC;AAAsD,QAAA,EAAE,EAAC,aAAzD;AAAuE,QAAA,YAAY;AAAnF,sBACE,gCAAC,yBAAD,qBACE;AAAK,QAAA,KAAK,EAAE;AAAEE,UAAAA,OAAO,EAAE;AAAX;AAAZ,sBACE,gCAAC,wBAAD;AAAc,QAAA,KAAK,EAAE;AAAEC,UAAAA,UAAU,EAAE;AAAd;AAArB,QADF,eAEE,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,WAAW,EAAE,6CAFf;AAGE,QAAA,UAAU,EACR,0HAJJ;AAME,QAAA,KAAK,EAAEL,KANT;AAOE,QAAA,QAAQ,EAAE,kBAAAM,KAAK;AAAA,iBAAI,MAAI,CAACC,QAAL,CAAc;AAAEP,YAAAA,KAAK,EAAEM,KAAK,CAACE,MAAN,CAAaR;AAAtB,WAAd,CAAJ;AAAA,SAPjB;AAQE,QAAA,mBAAmB,EAAE;AAAES,UAAAA,KAAK,EAAE;AAAEC,YAAAA,QAAQ,EAAE;AAAZ;AAAT;AARvB,QAFF,CADF,CADF,eAgBE,gCAAC,yBAAD,qBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE,KAAKX;AAAtB,gBADF,CAhBF,CADF;AAsBD;;;EAzD4BY,kBAAMC,S;;;iCAAxBrB,S,eACQ;AACjBQ,EAAAA,MAAM,EAAEc,sBAAUC,IAAV,CAAeC,UADN;AAEjBZ,EAAAA,GAAG,EAAEU,sBAAUG;AAFE,C;eA2DNzB,S","sourcesContent":["import React from 'react';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport ArrowBackIos from '@material-ui/icons/ArrowBackIos';\nimport TextField from '@material-ui/core/TextField';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport PropTypes from 'prop-types';\n\nexport class AltDialog extends React.Component {\n static propTypes = {\n onDone: PropTypes.func.isRequired,\n alt: PropTypes.string\n };\n\n constructor(props) {\n super(props);\n\n const { alt } = props;\n\n this.state = {\n value: alt\n };\n }\n\n closeDialog = () => {\n const allDialogs = document.querySelectorAll('#text-dialog');\n\n allDialogs.forEach(function(s) {\n return s.remove();\n });\n };\n\n onDone = () => {\n const { onDone } = this.props;\n const { value } = this.state;\n\n onDone(value);\n this.closeDialog();\n };\n\n render() {\n const { value } = this.state;\n\n return (\n <Dialog open disablePortal onClose={this.closeDialog} id=\"text-dialog\" hideBackdrop>\n <DialogContent>\n <div style={{ display: 'flex' }}>\n <ArrowBackIos style={{ paddingTop: '6px' }} />\n <TextField\n multiline\n placeholder={'Enter an Alt Text description of this image'}\n helperText={\n 'Users with visual limitations rely on Alt Text, since screen readers cannot otherwise describe the contents of an image.'\n }\n value={value}\n onChange={event => this.setState({ value: event.target.value })}\n FormHelperTextProps={{ style: { fontSize: 14 } }}\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={this.onDone}>Done</Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AltDialog;\n"],"file":"alt-dialog.js"}
@@ -116,10 +116,11 @@ var ImageToolbar = /*#__PURE__*/function (_React$Component) {
116
116
  var _this$props = this.props,
117
117
  classes = _this$props.classes,
118
118
  alignment = _this$props.alignment,
119
- imageLoaded = _this$props.imageLoaded;
119
+ imageLoaded = _this$props.imageLoaded,
120
+ disableImageAlignmentButtons = _this$props.disableImageAlignmentButtons;
120
121
  return /*#__PURE__*/_react["default"].createElement("div", {
121
122
  className: classes.holder
122
- }, /*#__PURE__*/_react["default"].createElement(AlignmentButton, {
123
+ }, !disableImageAlignmentButtons && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(AlignmentButton, {
123
124
  alignment: 'left',
124
125
  active: alignment === 'left',
125
126
  onClick: this.onAlignmentClick
@@ -131,8 +132,8 @@ var ImageToolbar = /*#__PURE__*/function (_React$Component) {
131
132
  alignment: 'right',
132
133
  active: alignment === 'right',
133
134
  onClick: this.onAlignmentClick
134
- }), /*#__PURE__*/_react["default"].createElement("span", {
135
- className: (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.disabled, !imageLoaded), (0, _defineProperty2["default"])(_classNames, classes.altButton, true), _classNames)),
135
+ })), /*#__PURE__*/_react["default"].createElement("span", {
136
+ className: (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.disabled, !imageLoaded), (0, _defineProperty2["default"])(_classNames, classes.altButton, !disableImageAlignmentButtons), _classNames)),
136
137
  onMouseDown: function onMouseDown(event) {
137
138
  return imageLoaded && _this2.renderDialog(event);
138
139
  }
@@ -148,7 +149,8 @@ exports.ImageToolbar = ImageToolbar;
148
149
  classes: _propTypes["default"].object.isRequired,
149
150
  alignment: _propTypes["default"].string,
150
151
  alt: _propTypes["default"].string,
151
- imageLoaded: _propTypes["default"].bool
152
+ imageLoaded: _propTypes["default"].bool,
153
+ disableImageAlignmentButtons: _propTypes["default"].bool
152
154
  });
153
155
 
154
156
  var styles = function styles(theme) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/image/image-toolbar.jsx"],"names":["log","AlignmentButton","alignment","active","onClick","propTypes","PropTypes","string","isRequired","bool","func","ImageToolbar","newAlt","props","onChange","alt","popoverEl","document","createElement","el","onAltTextDone","ReactDOM","render","body","appendChild","classes","imageLoaded","holder","onAlignmentClick","disabled","altButton","event","renderDialog","React","Component","object","styles","theme","paddingLeft","spacing","unit","display","alignItems","opacity","borderLeft","marginLeft"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport { MarkButton } from '../toolbar/toolbar-buttons';\nimport AltDialog from './alt-dialog';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:image-toolbar');\n\nconst AlignmentButton = ({ alignment, active, onClick }) => {\n return (\n <MarkButton active={active} onToggle={() => onClick(alignment)} label={alignment}>\n {alignment}\n </MarkButton>\n );\n};\n\nAlignmentButton.propTypes = {\n alignment: PropTypes.string.isRequired,\n active: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired\n};\n\nexport class ImageToolbar extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n alignment: PropTypes.string,\n alt: PropTypes.string,\n imageLoaded: PropTypes.bool\n };\n\n onAltTextDone = newAlt => {\n log('[onAltTextDone]: alt:', newAlt);\n\n this.props.onChange({ alt: newAlt });\n };\n\n onAlignmentClick = alignment => {\n log('[onAlignmentClick]: alignment:', alignment);\n this.props.onChange({ alignment });\n };\n\n renderDialog = () => {\n const { alt } = this.props;\n const popoverEl = document.createElement('div');\n\n const el = <AltDialog alt={alt} onDone={this.onAltTextDone} />;\n\n ReactDOM.render(el, popoverEl);\n\n document.body.appendChild(popoverEl);\n };\n\n render() {\n const { classes, alignment, imageLoaded } = this.props;\n\n return (\n <div className={classes.holder}>\n <AlignmentButton\n alignment={'left'}\n active={alignment === 'left'}\n onClick={this.onAlignmentClick}\n />\n <AlignmentButton\n alignment={'center'}\n active={alignment === 'center'}\n onClick={this.onAlignmentClick}\n />\n <AlignmentButton\n alignment={'right'}\n active={alignment === 'right'}\n onClick={this.onAlignmentClick}\n />\n <span\n className={classNames({\n [classes.disabled]: !imageLoaded,\n [classes.altButton]: true\n })}\n onMouseDown={event => imageLoaded && this.renderDialog(event)}\n >\n Alt text\n </span>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n holder: {\n paddingLeft: theme.spacing.unit,\n display: 'flex',\n alignItems: 'center'\n },\n disabled: {\n opacity: 0.5\n },\n altButton: {\n borderLeft: '1px solid grey',\n paddingLeft: 8,\n marginLeft: 4,\n },\n});\n\nexport default withStyles(styles)(ImageToolbar);\n"],"file":"image-toolbar.js"}
1
+ {"version":3,"sources":["../../../src/plugins/image/image-toolbar.jsx"],"names":["log","AlignmentButton","alignment","active","onClick","propTypes","PropTypes","string","isRequired","bool","func","ImageToolbar","newAlt","props","onChange","alt","popoverEl","document","createElement","el","onAltTextDone","ReactDOM","render","body","appendChild","classes","imageLoaded","disableImageAlignmentButtons","holder","onAlignmentClick","disabled","altButton","event","renderDialog","React","Component","object","styles","theme","paddingLeft","spacing","unit","display","alignItems","opacity","borderLeft","marginLeft"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport { MarkButton } from '../toolbar/toolbar-buttons';\nimport AltDialog from './alt-dialog';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:image-toolbar');\n\nconst AlignmentButton = ({ alignment, active, onClick }) => {\n return (\n <MarkButton active={active} onToggle={() => onClick(alignment)} label={alignment}>\n {alignment}\n </MarkButton>\n );\n};\n\nAlignmentButton.propTypes = {\n alignment: PropTypes.string.isRequired,\n active: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired\n};\n\nexport class ImageToolbar extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n alignment: PropTypes.string,\n alt: PropTypes.string,\n imageLoaded: PropTypes.bool,\n disableImageAlignmentButtons: PropTypes.bool\n };\n\n onAltTextDone = newAlt => {\n log('[onAltTextDone]: alt:', newAlt);\n\n this.props.onChange({ alt: newAlt });\n };\n\n onAlignmentClick = alignment => {\n log('[onAlignmentClick]: alignment:', alignment);\n this.props.onChange({ alignment });\n };\n\n renderDialog = () => {\n const { alt } = this.props;\n const popoverEl = document.createElement('div');\n\n const el = <AltDialog alt={alt} onDone={this.onAltTextDone} />;\n\n ReactDOM.render(el, popoverEl);\n\n document.body.appendChild(popoverEl);\n };\n\n render() {\n const { classes, alignment, imageLoaded, disableImageAlignmentButtons } = this.props;\n return (\n <div className={classes.holder}>\n {!disableImageAlignmentButtons && (\n <>\n <AlignmentButton\n alignment={'left'}\n active={alignment === 'left'}\n onClick={this.onAlignmentClick}\n />\n <AlignmentButton\n alignment={'center'}\n active={alignment === 'center'}\n onClick={this.onAlignmentClick}\n />\n <AlignmentButton\n alignment={'right'}\n active={alignment === 'right'}\n onClick={this.onAlignmentClick}\n />\n </>\n )}\n <span\n className={classNames({\n [classes.disabled]: !imageLoaded,\n [classes.altButton]: !disableImageAlignmentButtons\n })}\n onMouseDown={event => imageLoaded && this.renderDialog(event)}\n >\n Alt text\n </span>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n holder: {\n paddingLeft: theme.spacing.unit,\n display: 'flex',\n alignItems: 'center'\n },\n disabled: {\n opacity: 0.5\n },\n altButton: {\n borderLeft: '1px solid grey',\n paddingLeft: 8,\n marginLeft: 4\n }\n});\n\nexport default withStyles(styles)(ImageToolbar);\n"],"file":"image-toolbar.js"}
@@ -70,6 +70,7 @@ function ImagePlugin(opts) {
70
70
 
71
71
  var Tb = function Tb() {
72
72
  return /*#__PURE__*/_react["default"].createElement(_imageToolbar["default"], {
73
+ disableImageAlignmentButtons: opts.disableImageAlignmentButtons,
73
74
  alt: alt,
74
75
  imageLoaded: imageLoaded,
75
76
  alignment: alignment || 'left',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/image/index.jsx"],"names":["log","ImagePlugin","opts","toolbar","insertImageRequested","icon","onClick","value","onChange","inline","Inline","create","type","isVoid","data","loaded","src","undefined","change","insertInline","getValue","InsertImageHandler","supports","node","object","customToolbar","onToolbarDone","alignment","get","alt","imageLoaded","newValues","update","toObject","setNodeByKey","key","Tb","showDone","name","deleteNode","e","preventDefault","onDelete","merge","Data","deleteStatus","err","v","removeNodeByKey","stopReset","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","Object","assign","onFocus","onBlur","maxImageWidth","maxImageHeight","normalizeNode","textNodeMap","updateNodesArray","index","d","text","push","length","withoutNormalization","forEach","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","margin","justifyContent","parseInt","replace","out","getAttribute","serialize","objectFit"],"mappings":"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","sourcesContent":["import { Data, Inline } from 'slate';\n\nimport Image from '@material-ui/icons/Image';\nimport ImageComponent from './component';\nimport ImageToolbar from './image-toolbar';\nimport InsertImageHandler from './insert-image-handler';\nimport React from 'react';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nexport default function ImagePlugin(opts) {\n const toolbar = opts.insertImageRequested && {\n icon: <Image />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loaded: false,\n src: undefined\n }\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n opts.insertImageRequested(getValue => new InsertImageHandler(inline, getValue, onChange));\n },\n supports: node => node.object === 'inline' && node.type === 'image',\n customToolbar: (node, value, onToolbarDone) => {\n const alignment = node.data.get('alignment');\n const alt = node.data.get('alt');\n const imageLoaded = node.data.get('loaded') !== false;\n const onChange = newValues => {\n const update = {\n ...node.data.toObject(),\n ...newValues\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const Tb = () => (\n <ImageToolbar alt={alt} imageLoaded={imageLoaded} alignment={alignment || 'left'} onChange={onChange} />\n );\n return Tb;\n },\n showDone: true\n };\n\n return {\n name: 'image',\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n if (opts.onDelete) {\n const update = node.data.merge(Data.create({ deleteStatus: 'pending' }));\n\n let change = value.change().setNodeByKey(node.key, { data: update });\n\n onChange(change);\n opts.onDelete(node.data.get('src'), (err, v) => {\n if (!err) {\n change = v.change().removeNodeByKey(node.key);\n } else {\n log('[error]: ', err);\n change = v\n .change()\n .setNodeByKey(node.key, node.data.merge(Data.create({ deleteStatus: 'failed' })));\n }\n onChange(change);\n });\n } else {\n let change = value.change().removeNodeByKey(node.key);\n onChange(change);\n }\n },\n stopReset: value => {\n const imgPendingInsertion = value.document.findDescendant(n => {\n if (n.type !== 'image') {\n return;\n }\n return n.data.get('loaded') === false;\n });\n /** don't reset if there is an image pending insertion */\n return imgPendingInsertion !== undefined && imgPendingInsertion !== null;\n },\n renderNode(props) {\n if (props.node.type === 'image') {\n const all = Object.assign(\n {\n onDelete: opts.onDelete,\n onFocus: opts.onFocus,\n onBlur: opts.onBlur,\n maxImageWidth: opts.maxImageWidth,\n maxImageHeight: opts.maxImageHeight\n },\n props\n );\n return <ImageComponent {...all} />;\n }\n },\n normalizeNode: node => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant(d => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n if (d.type === 'image') {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return change => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach(n => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n }\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n const name = el.tagName.toLowerCase();\n if (name !== 'img') return;\n\n log('deserialize: ', name);\n const style = el.style || { width: '', height: '', margin: '', justifyContent: '' };\n const width = parseInt(style.width.replace('px', ''), 10) || null;\n const height = parseInt(style.height.replace('px', ''), 10) || null;\n\n const out = {\n object: 'inline',\n type: 'image',\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n width,\n height,\n margin: el.style.margin,\n justifyContent: el.style.justifyContent,\n alignment: el.getAttribute('alignment'),\n alt: el.getAttribute('alt')\n }\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n if (object.type !== 'image') return;\n\n const { data } = object;\n const src = data.get('src');\n const width = data.get('width');\n const height = data.get('height');\n const alignment = data.get('alignment');\n const margin = data.get('margin');\n const justifyContent = data.get('margin');\n const alt = data.get('alt');\n const style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.margin = margin;\n style.justifyContent = justifyContent;\n\n if (alignment) {\n switch (alignment) {\n case 'left':\n style.justifyContent = 'flex-start';\n style.margin = '0';\n break;\n case 'center':\n style.justifyContent = 'center';\n style.margin = '0 auto';\n break;\n case 'right':\n style.justifyContent = 'flex-end';\n style.margin = 'auto 0 0 auto';\n break;\n default:\n style.justifyContent = 'flex-start';\n break;\n }\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style,\n alignment,\n alt\n };\n\n return <img {...props} />;\n }\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/plugins/image/index.jsx"],"names":["log","ImagePlugin","opts","toolbar","insertImageRequested","icon","onClick","value","onChange","inline","Inline","create","type","isVoid","data","loaded","src","undefined","change","insertInline","getValue","InsertImageHandler","supports","node","object","customToolbar","onToolbarDone","alignment","get","alt","imageLoaded","newValues","update","toObject","setNodeByKey","key","Tb","disableImageAlignmentButtons","showDone","name","deleteNode","e","preventDefault","onDelete","merge","Data","deleteStatus","err","v","removeNodeByKey","stopReset","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","Object","assign","onFocus","onBlur","maxImageWidth","maxImageHeight","normalizeNode","textNodeMap","updateNodesArray","index","d","text","push","length","withoutNormalization","forEach","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","margin","justifyContent","parseInt","replace","out","getAttribute","serialize","objectFit"],"mappings":"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","sourcesContent":["import { Data, Inline } from 'slate';\n\nimport Image from '@material-ui/icons/Image';\nimport ImageComponent from './component';\nimport ImageToolbar from './image-toolbar';\nimport InsertImageHandler from './insert-image-handler';\nimport React from 'react';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nexport default function ImagePlugin(opts) {\n const toolbar = opts.insertImageRequested && {\n icon: <Image />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loaded: false,\n src: undefined\n }\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n opts.insertImageRequested(getValue => new InsertImageHandler(inline, getValue, onChange));\n },\n supports: node => node.object === 'inline' && node.type === 'image',\n customToolbar: (node, value, onToolbarDone) => {\n const alignment = node.data.get('alignment');\n const alt = node.data.get('alt');\n const imageLoaded = node.data.get('loaded') !== false;\n const onChange = newValues => {\n const update = {\n ...node.data.toObject(),\n ...newValues\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const Tb = () => (\n <ImageToolbar\n disableImageAlignmentButtons={opts.disableImageAlignmentButtons}\n alt={alt}\n imageLoaded={imageLoaded}\n alignment={alignment || 'left'}\n onChange={onChange}\n />\n );\n return Tb;\n },\n showDone: true\n };\n\n return {\n name: 'image',\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n if (opts.onDelete) {\n const update = node.data.merge(Data.create({ deleteStatus: 'pending' }));\n\n let change = value.change().setNodeByKey(node.key, { data: update });\n\n onChange(change);\n opts.onDelete(node.data.get('src'), (err, v) => {\n if (!err) {\n change = v.change().removeNodeByKey(node.key);\n } else {\n log('[error]: ', err);\n change = v\n .change()\n .setNodeByKey(node.key, node.data.merge(Data.create({ deleteStatus: 'failed' })));\n }\n onChange(change);\n });\n } else {\n let change = value.change().removeNodeByKey(node.key);\n onChange(change);\n }\n },\n stopReset: value => {\n const imgPendingInsertion = value.document.findDescendant(n => {\n if (n.type !== 'image') {\n return;\n }\n return n.data.get('loaded') === false;\n });\n /** don't reset if there is an image pending insertion */\n return imgPendingInsertion !== undefined && imgPendingInsertion !== null;\n },\n renderNode(props) {\n if (props.node.type === 'image') {\n const all = Object.assign(\n {\n onDelete: opts.onDelete,\n onFocus: opts.onFocus,\n onBlur: opts.onBlur,\n maxImageWidth: opts.maxImageWidth,\n maxImageHeight: opts.maxImageHeight\n },\n props\n );\n return <ImageComponent {...all} />;\n }\n },\n normalizeNode: node => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant(d => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n if (d.type === 'image') {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return change => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach(n => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n }\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n const name = el.tagName.toLowerCase();\n if (name !== 'img') return;\n\n log('deserialize: ', name);\n const style = el.style || { width: '', height: '', margin: '', justifyContent: '' };\n const width = parseInt(style.width.replace('px', ''), 10) || null;\n const height = parseInt(style.height.replace('px', ''), 10) || null;\n\n const out = {\n object: 'inline',\n type: 'image',\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n width,\n height,\n margin: el.style.margin,\n justifyContent: el.style.justifyContent,\n alignment: el.getAttribute('alignment'),\n alt: el.getAttribute('alt')\n }\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n if (object.type !== 'image') return;\n\n const { data } = object;\n const src = data.get('src');\n const width = data.get('width');\n const height = data.get('height');\n const alignment = data.get('alignment');\n const margin = data.get('margin');\n const justifyContent = data.get('margin');\n const alt = data.get('alt');\n const style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.margin = margin;\n style.justifyContent = justifyContent;\n\n if (alignment) {\n switch (alignment) {\n case 'left':\n style.justifyContent = 'flex-start';\n style.margin = '0';\n break;\n case 'center':\n style.justifyContent = 'center';\n style.margin = '0 auto';\n break;\n case 'right':\n style.justifyContent = 'flex-end';\n style.margin = 'auto 0 0 auto';\n break;\n default:\n style.justifyContent = 'flex-start';\n break;\n }\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style,\n alignment,\n alt\n };\n\n return <img {...props} />;\n }\n};\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "9.2.3-next.34+1fd6acbb",
3
+ "version": "9.2.3-next.39+1973d1da",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -47,6 +47,6 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "1fd6acbb1765c559924f23287c3251cce84da13e",
50
+ "gitHead": "1973d1da669bf5e1ee06dc1cfd29a92d15d455ab",
51
51
  "scripts": {}
52
52
  }
package/src/editor.jsx CHANGED
@@ -55,6 +55,7 @@ export class Editor extends React.Component {
55
55
  focus: PropTypes.func.isRequired,
56
56
  value: SlateTypes.value.isRequired,
57
57
  imageSupport: PropTypes.object,
58
+ disableImageAlignmentButtons: PropTypes.bool,
58
59
  uploadSoundSupport: PropTypes.shape({
59
60
  add: PropTypes.func,
60
61
  delete: PropTypes.func
@@ -148,6 +149,7 @@ export class Editor extends React.Component {
148
149
  onBlur: this.onPluginBlur
149
150
  },
150
151
  image: {
152
+ disableImageAlignmentButtons: props.disableImageAlignmentButtons,
151
153
  onDelete:
152
154
  props.imageSupport &&
153
155
  props.imageSupport.delete &&
@@ -5,7 +5,7 @@ import TextField from '@material-ui/core/TextField';
5
5
  import DialogActions from '@material-ui/core/DialogActions';
6
6
  import Button from '@material-ui/core/Button';
7
7
  import Dialog from '@material-ui/core/Dialog';
8
- import PropTypes from "prop-types";
8
+ import PropTypes from 'prop-types';
9
9
 
10
10
  export class AltDialog extends React.Component {
11
11
  static propTypes = {
@@ -55,6 +55,7 @@ export class AltDialog extends React.Component {
55
55
  }
56
56
  value={value}
57
57
  onChange={event => this.setState({ value: event.target.value })}
58
+ FormHelperTextProps={{ style: { fontSize: 14 } }}
58
59
  />
59
60
  </div>
60
61
  </DialogContent>
@@ -30,7 +30,8 @@ export class ImageToolbar extends React.Component {
30
30
  classes: PropTypes.object.isRequired,
31
31
  alignment: PropTypes.string,
32
32
  alt: PropTypes.string,
33
- imageLoaded: PropTypes.bool
33
+ imageLoaded: PropTypes.bool,
34
+ disableImageAlignmentButtons: PropTypes.bool
34
35
  };
35
36
 
36
37
  onAltTextDone = newAlt => {
@@ -56,29 +57,32 @@ export class ImageToolbar extends React.Component {
56
57
  };
57
58
 
58
59
  render() {
59
- const { classes, alignment, imageLoaded } = this.props;
60
-
60
+ const { classes, alignment, imageLoaded, disableImageAlignmentButtons } = this.props;
61
61
  return (
62
62
  <div className={classes.holder}>
63
- <AlignmentButton
64
- alignment={'left'}
65
- active={alignment === 'left'}
66
- onClick={this.onAlignmentClick}
67
- />
68
- <AlignmentButton
69
- alignment={'center'}
70
- active={alignment === 'center'}
71
- onClick={this.onAlignmentClick}
72
- />
73
- <AlignmentButton
74
- alignment={'right'}
75
- active={alignment === 'right'}
76
- onClick={this.onAlignmentClick}
77
- />
63
+ {!disableImageAlignmentButtons && (
64
+ <>
65
+ <AlignmentButton
66
+ alignment={'left'}
67
+ active={alignment === 'left'}
68
+ onClick={this.onAlignmentClick}
69
+ />
70
+ <AlignmentButton
71
+ alignment={'center'}
72
+ active={alignment === 'center'}
73
+ onClick={this.onAlignmentClick}
74
+ />
75
+ <AlignmentButton
76
+ alignment={'right'}
77
+ active={alignment === 'right'}
78
+ onClick={this.onAlignmentClick}
79
+ />
80
+ </>
81
+ )}
78
82
  <span
79
83
  className={classNames({
80
84
  [classes.disabled]: !imageLoaded,
81
- [classes.altButton]: true
85
+ [classes.altButton]: !disableImageAlignmentButtons
82
86
  })}
83
87
  onMouseDown={event => imageLoaded && this.renderDialog(event)}
84
88
  >
@@ -101,8 +105,8 @@ const styles = theme => ({
101
105
  altButton: {
102
106
  borderLeft: '1px solid grey',
103
107
  paddingLeft: 8,
104
- marginLeft: 4,
105
- },
108
+ marginLeft: 4
109
+ }
106
110
  });
107
111
 
108
112
  export default withStyles(styles)(ImageToolbar);
@@ -43,7 +43,13 @@ export default function ImagePlugin(opts) {
43
43
  };
44
44
 
45
45
  const Tb = () => (
46
- <ImageToolbar alt={alt} imageLoaded={imageLoaded} alignment={alignment || 'left'} onChange={onChange} />
46
+ <ImageToolbar
47
+ disableImageAlignmentButtons={opts.disableImageAlignmentButtons}
48
+ alt={alt}
49
+ imageLoaded={imageLoaded}
50
+ alignment={alignment || 'left'}
51
+ onChange={onChange}
52
+ />
47
53
  );
48
54
  return Tb;
49
55
  },