@pie-lib/editable-html 7.20.0 → 7.21.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 CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.21.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.20.0...@pie-lib/editable-html@7.21.0) (2022-04-28)
7
+
8
+
9
+ ### Features
10
+
11
+ * **editable-html:** disabled add response area button when maxResponseArea value is reached PD-1699 ([9c28e5b](https://github.com/pie-framework/pie-lib/commit/9c28e5b1702995a497e8528038a1b9e71b72c84f))
12
+ * **editable-html:** PD-1707 add validation ui/ux to responses areas in ecr ([7381c58](https://github.com/pie-framework/pie-lib/commit/7381c581e9f1099f48f8cfbe307f23dbd8776773))
13
+
14
+
15
+
16
+
17
+
6
18
  # [7.20.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.19.3...@pie-lib/editable-html@7.20.0) (2022-04-12)
7
19
 
8
20
 
package/lib/editor.js CHANGED
@@ -475,8 +475,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
475
475
  responseArea: {
476
476
  type: normalizedResponseAreaProps.type,
477
477
  options: normalizedResponseAreaProps.options,
478
+ maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,
478
479
  respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,
479
480
  onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,
481
+ error: normalizedResponseAreaProps.error,
480
482
  onFocus: function onFocus() {
481
483
  log('[table:onFocus]...');
482
484
 
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","createToolbarOpts","toolbarOpts","Editor","props","e","relatedTarget","target","node","state","value","setState","focusedNode","resetValue","stashedValue","stashValue","editor","change","c","collapseToStartOf","selectedNode","onChange","resolve","nonEmpty","toolbarInFocus","blur","startText","text","length","then","onEditingDone","event","Promise","handleBlur","bind","onBlur","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","onFocus","force","stopReset","plugins","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","done","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","type","parent","getParent","Block","pos","focus","normalizedResponseAreaProps","responseAreaProps","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","oneOfType","string","number","any","shape","oneOf","arrayOf","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 } 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 } 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';\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 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 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 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 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 };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\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 this.props.imageSupport &&\n this.props.imageSupport.delete &&\n ((src, done) => {\n this.props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n this.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 this.props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = this.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 respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\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\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({ focusedNode: node }, this.handleBlur.bind(this, resolve));\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 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 this.onBlur(e);\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 this.setState({ value: change.value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\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 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 onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\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 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};\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","createToolbarOpts","toolbarOpts","Editor","props","e","relatedTarget","target","node","state","value","setState","focusedNode","resetValue","stashedValue","stashValue","editor","change","c","collapseToStartOf","selectedNode","onChange","resolve","nonEmpty","toolbarInFocus","blur","startText","text","length","then","onEditingDone","event","Promise","handleBlur","bind","onBlur","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","onFocus","force","stopReset","plugins","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","done","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","type","parent","getParent","Block","pos","focus","normalizedResponseAreaProps","responseAreaProps","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","maxResponseAreas","error","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","oneOfType","string","number","any","shape","oneOf","arrayOf","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 } 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 } 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';\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 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 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 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 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 };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\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 this.props.imageSupport &&\n this.props.imageSupport.delete &&\n ((src, done) => {\n this.props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n this.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 this.props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = this.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 media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\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\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({ focusedNode: node }, this.handleBlur.bind(this, resolve));\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 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 this.onBlur(e);\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 this.setState({ value: change.value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\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 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 onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\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 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};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
@@ -15,7 +15,8 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
15
15
 
16
16
  var ExplicitConstructedResponse = function ExplicitConstructedResponse(props) {
17
17
  var attributes = props.attributes,
18
- value = props.value;
18
+ value = props.value,
19
+ error = props.error;
19
20
  return /*#__PURE__*/_react["default"].createElement("span", _extends({}, attributes, {
20
21
  style: {
21
22
  display: 'inline-flex',
@@ -32,7 +33,7 @@ var ExplicitConstructedResponse = function ExplicitConstructedResponse(props) {
32
33
  minHeight: '36px',
33
34
  height: '36px',
34
35
  background: '#FFF',
35
- border: '1px solid #C0C3CF',
36
+ border: "1px solid ".concat(error ? 'red' : '#C0C3CF'),
36
37
  boxSizing: 'border-box',
37
38
  borderRadius: '3px',
38
39
  overflow: 'hidden',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/plugins/respArea/explicit-constructed-response/index.jsx"],"names":["ExplicitConstructedResponse","props","attributes","value","display","minHeight","minWidth","position","margin","cursor","height","background","border","boxSizing","borderRadius","overflow","padding","__html","propTypes","PropTypes","object","string"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEA,IAAMA,2BAA2B,GAAG,SAA9BA,2BAA8B,CAAAC,KAAK,EAAI;AAC3C,MAAQC,UAAR,GAA8BD,KAA9B,CAAQC,UAAR;AAAA,MAAoBC,KAApB,GAA8BF,KAA9B,CAAoBE,KAApB;AAEA,sBACE,qDACMD,UADN;AAEE,IAAA,KAAK,EAAE;AACLE,MAAAA,OAAO,EAAE,aADJ;AAELC,MAAAA,SAAS,EAAE,MAFN;AAGLC,MAAAA,QAAQ,EAAE,OAHL;AAILC,MAAAA,QAAQ,EAAE,UAJL;AAKLC,MAAAA,MAAM,EAAE,OALH;AAMLC,MAAAA,MAAM,EAAE;AANH;AAFT,mBAWE;AACE,IAAA,KAAK,EAAE;AACLL,MAAAA,OAAO,EAAE,aADJ;AAELE,MAAAA,QAAQ,EAAE,OAFL;AAGLD,MAAAA,SAAS,EAAE,MAHN;AAILK,MAAAA,MAAM,EAAE,MAJH;AAKLC,MAAAA,UAAU,EAAE,MALP;AAMLC,MAAAA,MAAM,EAAE,mBANH;AAOLC,MAAAA,SAAS,EAAE,YAPN;AAQLC,MAAAA,YAAY,EAAE,KART;AASLC,MAAAA,QAAQ,EAAE,QATL;AAULC,MAAAA,OAAO,EAAE;AAVJ,KADT;AAaE,IAAA,uBAAuB,EAAE;AACvBC,MAAAA,MAAM,EAAEd,KAAK,IAAI;AADM;AAb3B,IAXF,CADF;AA+BD,CAlCD;;AAoCAH,2BAA2B,CAACkB,SAA5B,GAAwC;AACtChB,EAAAA,UAAU,EAAEiB,sBAAUC,MADgB;AAEtCjB,EAAAA,KAAK,EAAEgB,sBAAUE;AAFqB,CAAxC;eAKerB,2B","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst ExplicitConstructedResponse = props => {\n const { attributes, value } = props;\n\n return (\n <span\n {...attributes}\n style={{\n display: 'inline-flex',\n minHeight: '50px',\n minWidth: '178px',\n position: 'relative',\n margin: '0 5px',\n cursor: 'pointer'\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n padding: '8px'\n }}\n dangerouslySetInnerHTML={{\n __html: value || '<div>&nbsp;</div>'\n }}\n />\n </span>\n );\n};\n\nExplicitConstructedResponse.propTypes = {\n attributes: PropTypes.object,\n value: PropTypes.string\n};\n\nexport default ExplicitConstructedResponse;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/plugins/respArea/explicit-constructed-response/index.jsx"],"names":["ExplicitConstructedResponse","props","attributes","value","error","display","minHeight","minWidth","position","margin","cursor","height","background","border","boxSizing","borderRadius","overflow","padding","__html","propTypes","PropTypes","object","string"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEA,IAAMA,2BAA2B,GAAG,SAA9BA,2BAA8B,CAAAC,KAAK,EAAI;AAC3C,MAAQC,UAAR,GAAqCD,KAArC,CAAQC,UAAR;AAAA,MAAoBC,KAApB,GAAqCF,KAArC,CAAoBE,KAApB;AAAA,MAA2BC,KAA3B,GAAqCH,KAArC,CAA2BG,KAA3B;AAEA,sBACE,qDACMF,UADN;AAEE,IAAA,KAAK,EAAE;AACLG,MAAAA,OAAO,EAAE,aADJ;AAELC,MAAAA,SAAS,EAAE,MAFN;AAGLC,MAAAA,QAAQ,EAAE,OAHL;AAILC,MAAAA,QAAQ,EAAE,UAJL;AAKLC,MAAAA,MAAM,EAAE,OALH;AAMLC,MAAAA,MAAM,EAAE;AANH;AAFT,mBAWE;AACE,IAAA,KAAK,EAAE;AACLL,MAAAA,OAAO,EAAE,aADJ;AAELE,MAAAA,QAAQ,EAAE,OAFL;AAGLD,MAAAA,SAAS,EAAE,MAHN;AAILK,MAAAA,MAAM,EAAE,MAJH;AAKLC,MAAAA,UAAU,EAAE,MALP;AAMLC,MAAAA,MAAM,sBAAeT,KAAK,GAAG,KAAH,GAAW,SAA/B,CAND;AAOLU,MAAAA,SAAS,EAAE,YAPN;AAQLC,MAAAA,YAAY,EAAE,KART;AASLC,MAAAA,QAAQ,EAAE,QATL;AAULC,MAAAA,OAAO,EAAE;AAVJ,KADT;AAaE,IAAA,uBAAuB,EAAE;AACvBC,MAAAA,MAAM,EAAEf,KAAK,IAAI;AADM;AAb3B,IAXF,CADF;AA+BD,CAlCD;;AAoCAH,2BAA2B,CAACmB,SAA5B,GAAwC;AACtCjB,EAAAA,UAAU,EAAEkB,sBAAUC,MADgB;AAEtClB,EAAAA,KAAK,EAAEiB,sBAAUE;AAFqB,CAAxC;eAKetB,2B","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst ExplicitConstructedResponse = props => {\n const { attributes, value, error } = props;\n\n return (\n <span\n {...attributes}\n style={{\n display: 'inline-flex',\n minHeight: '50px',\n minWidth: '178px',\n position: 'relative',\n margin: '0 5px',\n cursor: 'pointer'\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n height: '36px',\n background: '#FFF',\n border: `1px solid ${error ? 'red' : '#C0C3CF'}`,\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n padding: '8px'\n }}\n dangerouslySetInnerHTML={{\n __html: value || '<div>&nbsp;</div>'\n }}\n />\n </span>\n );\n};\n\nExplicitConstructedResponse.propTypes = {\n attributes: PropTypes.object,\n value: PropTypes.string\n};\n\nexport default ExplicitConstructedResponse;\n"],"file":"index.js"}
@@ -34,6 +34,10 @@ var elTypesMap = {
34
34
  var elTypesArray = Object.values(elTypesMap);
35
35
 
36
36
  function ResponseAreaPlugin(opts) {
37
+ var isOfCurrentType = function isOfCurrentType(d) {
38
+ return d.type === opts.type || d.type === elTypesMap[opts.type];
39
+ };
40
+
37
41
  var toolbar = {
38
42
  icon: /*#__PURE__*/_react["default"].createElement(_icons.ToolbarIcon, null),
39
43
  buttonStyles: {
@@ -42,6 +46,12 @@ function ResponseAreaPlugin(opts) {
42
46
  onClick: function onClick(value, onChange) {
43
47
  log('[toolbar] onClick');
44
48
  var change = value.change();
49
+ var currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
50
+
51
+ if (currentRespAreaList.size >= opts.maxResponseAreas) {
52
+ return;
53
+ }
54
+
45
55
  var type = opts.type.replace(/-/g, '_');
46
56
  var prevIndex = lastIndexMap[type];
47
57
  var newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;
@@ -105,7 +115,8 @@ function ResponseAreaPlugin(opts) {
105
115
  var data = n.data.toJSON();
106
116
  return /*#__PURE__*/_react["default"].createElement(_explicitConstructedResponse["default"], {
107
117
  attributes: attributes,
108
- value: data.value
118
+ value: data.value,
119
+ error: opts.error && opts.error[data.value]
109
120
  });
110
121
  }
111
122
 
@@ -150,12 +161,15 @@ function ResponseAreaPlugin(opts) {
150
161
  return;
151
162
  }
152
163
 
153
- var isOfCurrentType = function isOfCurrentType(d) {
154
- return d.type === opts.type || d.type === elTypesMap[opts.type];
155
- };
156
-
157
164
  var currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
158
165
  var oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);
166
+
167
+ if (currentRespAreaList.size >= opts.maxResponseAreas) {
168
+ toolbar.disabled = true;
169
+ } else {
170
+ toolbar.disabled = false;
171
+ }
172
+
159
173
  var arrayToFilter = oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;
160
174
  var arrayToUseForFilter = arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;
161
175
  var elementsWithChangedStatus = arrayToFilter.filter(function (d) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/respArea/index.jsx"],"names":["log","lastIndexMap","elTypesMap","elTypesArray","Object","values","ResponseAreaPlugin","opts","toolbar","icon","buttonStyles","margin","onClick","value","onChange","change","type","replace","prevIndex","newIndex","newInline","selection","startKey","endKey","insertInline","lastText","document","getLastText","parentNode","getParent","key","index","nodes","indexOf","isVoid","insertNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","customToolbar","respAreaToolbar","supports","node","object","showDone","name","filterPlugins","plugins","filter","p","deleteNode","e","preventDefault","removeNodeByKey","renderNode","props","attributes","n","data","toJSON","editor","forEachDescendant","d","parseInt","get","isOfCurrentType","currentRespAreaList","filterDescendants","oldRespAreaList","arrayToFilter","size","arrayToUseForFilter","elementsWithChangedStatus","find","onHandleAreaChange","onDrop","event","closestEl","target","closest","inline","findDescendant","dataset","serialization","deserialize","el","id","inTable","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport isUndefined from 'lodash/isUndefined';\n\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesMap = {\n 'inline-dropdown': 'inline_dropdown',\n 'explicit-constructed-response': 'explicit_constructed_response',\n 'drag-in-the-blank': 'drag_in_the_blank'\n};\nconst elTypesArray = Object.values(elTypesMap);\n\nexport default function ResponseAreaPlugin(opts) {\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto'\n },\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const change = value.change();\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }\n\n onChange(change);\n }\n },\n customToolbar: opts.respAreaToolbar,\n supports: node => node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0,\n showDone: false\n };\n\n return {\n name: 'response_area',\n toolbar,\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter(p => p.name !== 'response_area');\n },\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n const { attributes, node: n } = props;\n\n if (n.type === 'explicit_constructed_response') {\n const data = n.data.toJSON();\n\n return <ExplicitConstructedResponse attributes={attributes} value={data.value} />;\n }\n\n if (n.type === 'drag_in_the_blank') {\n const data = n.data.toJSON();\n\n return (\n <DragInTheBlank attributes={attributes} data={data} n={n} nodeProps={props} opts={opts} />\n );\n }\n\n if (n.type === 'inline_dropdown') {\n const data = n.data.toJSON();\n\n return <InlineDropdown attributes={attributes} selectedItem={data.value} />;\n }\n },\n onChange(change, editor) {\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n change.value.document.forEachDescendant(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.get('index'), 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n\n if (!editor.value) {\n return;\n }\n\n const isOfCurrentType = d => d.type === opts.type || d.type === elTypesMap[opts.type];\n const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);\n const oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);\n\n const arrayToFilter =\n oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;\n const arrayToUseForFilter =\n arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;\n\n const elementsWithChangedStatus = arrayToFilter.filter(\n d => !arrayToUseForFilter.find(e => e.data.get('index') === d.data.get('index'))\n );\n\n if (elementsWithChangedStatus.size && oldRespAreaList.size > currentRespAreaList.size) {\n opts.onHandleAreaChange(elementsWithChangedStatus);\n }\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant(d => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n }\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return {\n object: 'inline',\n type: 'inline_dropdown',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'explicit_constructed_response':\n return {\n object: 'inline',\n type: 'explicit_constructed_response',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'drag_in_the_blank':\n return {\n object: 'inline',\n type: 'drag_in_the_blank',\n isVoid: true,\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n };\n }\n },\n serialize(object) {\n if (object.object !== 'inline') {\n return;\n }\n\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data.toJSON();\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"explicit_constructed_response\"\n data-index={data.index}\n data-value={data.value}\n />\n );\n }\n case 'drag_in_the_blank': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n }\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/plugins/respArea/index.jsx"],"names":["log","lastIndexMap","elTypesMap","elTypesArray","Object","values","ResponseAreaPlugin","opts","isOfCurrentType","d","type","toolbar","icon","buttonStyles","margin","onClick","value","onChange","change","currentRespAreaList","document","filterDescendants","size","maxResponseAreas","replace","prevIndex","newIndex","newInline","selection","startKey","endKey","insertInline","lastText","getLastText","parentNode","getParent","key","index","nodes","indexOf","isVoid","insertNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","customToolbar","respAreaToolbar","supports","node","object","showDone","name","filterPlugins","plugins","filter","p","deleteNode","e","preventDefault","removeNodeByKey","renderNode","props","attributes","n","data","toJSON","error","editor","forEachDescendant","parseInt","get","oldRespAreaList","disabled","arrayToFilter","arrayToUseForFilter","elementsWithChangedStatus","find","onHandleAreaChange","onDrop","event","closestEl","target","closest","inline","findDescendant","dataset","serialization","deserialize","el","id","inTable","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport isUndefined from 'lodash/isUndefined';\n\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesMap = {\n 'inline-dropdown': 'inline_dropdown',\n 'explicit-constructed-response': 'explicit_constructed_response',\n 'drag-in-the-blank': 'drag_in_the_blank'\n};\nconst elTypesArray = Object.values(elTypesMap);\n\nexport default function ResponseAreaPlugin(opts) {\n const isOfCurrentType = d => d.type === opts.type || d.type === elTypesMap[opts.type];\n\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto'\n },\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const change = value.change();\n const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);\n\n if (currentRespAreaList.size >= opts.maxResponseAreas) {\n return;\n }\n\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }\n\n onChange(change);\n }\n },\n customToolbar: opts.respAreaToolbar,\n supports: node => node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0,\n showDone: false\n };\n\n return {\n name: 'response_area',\n toolbar,\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter(p => p.name !== 'response_area');\n },\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n const { attributes, node: n } = props;\n\n if (n.type === 'explicit_constructed_response') {\n const data = n.data.toJSON();\n\n return (\n <ExplicitConstructedResponse\n attributes={attributes}\n value={data.value}\n error={opts.error && opts.error[data.value]}\n />\n );\n }\n\n if (n.type === 'drag_in_the_blank') {\n const data = n.data.toJSON();\n\n return (\n <DragInTheBlank attributes={attributes} data={data} n={n} nodeProps={props} opts={opts} />\n );\n }\n\n if (n.type === 'inline_dropdown') {\n const data = n.data.toJSON();\n\n return <InlineDropdown attributes={attributes} selectedItem={data.value} />;\n }\n },\n onChange(change, editor) {\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n change.value.document.forEachDescendant(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.get('index'), 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n\n if (!editor.value) {\n return;\n }\n\n const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);\n const oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);\n\n if (currentRespAreaList.size >= opts.maxResponseAreas) {\n toolbar.disabled = true;\n } else {\n toolbar.disabled = false;\n }\n\n const arrayToFilter =\n oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;\n const arrayToUseForFilter =\n arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;\n\n const elementsWithChangedStatus = arrayToFilter.filter(\n d => !arrayToUseForFilter.find(e => e.data.get('index') === d.data.get('index'))\n );\n\n if (elementsWithChangedStatus.size && oldRespAreaList.size > currentRespAreaList.size) {\n opts.onHandleAreaChange(elementsWithChangedStatus);\n }\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant(d => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n }\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return {\n object: 'inline',\n type: 'inline_dropdown',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'explicit_constructed_response':\n return {\n object: 'inline',\n type: 'explicit_constructed_response',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'drag_in_the_blank':\n return {\n object: 'inline',\n type: 'drag_in_the_blank',\n isVoid: true,\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n };\n }\n },\n serialize(object) {\n if (object.object !== 'inline') {\n return;\n }\n\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data.toJSON();\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"explicit_constructed_response\"\n data-index={data.index}\n data-value={data.value}\n />\n );\n }\n case 'drag_in_the_blank': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n }\n};\n"],"file":"index.js"}
@@ -43,11 +43,14 @@ var ToolbarButton = function ToolbarButton(props) {
43
43
  mark: props.type
44
44
  }, props.icon);
45
45
  } else {
46
+ var disabled = props.disabled;
47
+
46
48
  var _isActive = props.isActive ? props.isActive(props.value, props.type) : (0, _utils.hasBlock)(props.value, props.type);
47
49
 
48
50
  log('[ToolbarButton] block:isActive: ', _isActive);
49
51
  return /*#__PURE__*/_react["default"].createElement(_toolbarButtons.Button, {
50
52
  active: _isActive,
53
+ disabled: disabled,
51
54
  onClick: function onClick() {
52
55
  return props.onClick(props.value, props.onChange);
53
56
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/toolbar/default-toolbar.jsx"],"names":["log","ToolbarButton","props","onToggle","c","value","change","onChange","isMark","isActive","type","icon","onClick","buttonStyles","isActiveToolbarPlugin","plugin","isDisabled","name","disabled","toolbar","DefaultToolbar","plugins","pluginProps","onDone","classes","showDone","deletable","filtered","filter","map","p","defaultToolbar","buttonsContainer","index","propTypes","PropTypes","object","isRequired","array","SlatePropTypes","func","bool","addArea","defaultProps","toolbarStyles","display","width","justifyContent","alignItems"],"mappings":"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","sourcesContent":["import { DoneButton } from './done-button';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport SlatePropTypes from 'slate-prop-types';\n\nimport { hasBlock, hasMark } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Button, MarkButton } from './toolbar-buttons';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nexport const ToolbarButton = props => {\n const onToggle = () => {\n const c = props.onToggle(props.value.change(), props);\n props.onChange(c);\n };\n\n if (props.isMark) {\n const isActive = hasMark(props.value, props.type);\n log('[ToolbarButton] mark:isActive: ', isActive);\n return (\n <MarkButton active={isActive} label={props.type} onToggle={onToggle} mark={props.type}>\n {props.icon}\n </MarkButton>\n );\n } else {\n const isActive = props.isActive\n ? props.isActive(props.value, props.type)\n : hasBlock(props.value, props.type);\n log('[ToolbarButton] block:isActive: ', isActive);\n return (\n <Button\n active={isActive}\n onClick={() => props.onClick(props.value, props.onChange)}\n extraStyles={props.buttonStyles}\n >\n {props.icon}\n </Button>\n );\n }\n};\n\nconst isActiveToolbarPlugin = props => plugin => {\n const isDisabled = (props[plugin.name] || {}).disabled;\n return plugin && plugin.toolbar && !isDisabled;\n};\n\nexport const DefaultToolbar = ({\n plugins,\n pluginProps,\n value,\n onChange,\n onDone,\n classes,\n showDone,\n deletable\n}) => {\n const filtered = plugins.filter(isActiveToolbarPlugin(pluginProps)).map(p => p.toolbar);\n\n return (\n <div className={classes.defaultToolbar}>\n <div className={classes.buttonsContainer}>\n {filtered.map((p, index) => {\n return <ToolbarButton {...p} key={index} value={value} onChange={onChange} />;\n })}\n </div>\n {showDone && !deletable && <DoneButton onClick={onDone} />}\n </div>\n );\n};\n\nDefaultToolbar.propTypes = {\n classes: PropTypes.object.isRequired,\n plugins: PropTypes.array.isRequired,\n pluginProps: PropTypes.object,\n value: SlatePropTypes.value.isRequired,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n showDone: PropTypes.bool,\n addArea: PropTypes.bool,\n deletable: PropTypes.bool\n};\n\nDefaultToolbar.defaultProps = {\n pluginProps: {}\n};\n\nconst toolbarStyles = () => ({\n defaultToolbar: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between'\n },\n buttonsContainer: {\n alignItems: 'center',\n display: 'flex',\n width: '100%'\n }\n});\n\nexport default withStyles(toolbarStyles)(DefaultToolbar);\n"],"file":"default-toolbar.js"}
1
+ {"version":3,"sources":["../../../src/plugins/toolbar/default-toolbar.jsx"],"names":["log","ToolbarButton","props","onToggle","c","value","change","onChange","isMark","isActive","type","icon","disabled","onClick","buttonStyles","isActiveToolbarPlugin","plugin","isDisabled","name","toolbar","DefaultToolbar","plugins","pluginProps","onDone","classes","showDone","deletable","filtered","filter","map","p","defaultToolbar","buttonsContainer","index","propTypes","PropTypes","object","isRequired","array","SlatePropTypes","func","bool","addArea","defaultProps","toolbarStyles","display","width","justifyContent","alignItems"],"mappings":"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","sourcesContent":["import { DoneButton } from './done-button';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport SlatePropTypes from 'slate-prop-types';\n\nimport { hasBlock, hasMark } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Button, MarkButton } from './toolbar-buttons';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nexport const ToolbarButton = props => {\n const onToggle = () => {\n const c = props.onToggle(props.value.change(), props);\n\n props.onChange(c);\n };\n\n if (props.isMark) {\n const isActive = hasMark(props.value, props.type);\n\n log('[ToolbarButton] mark:isActive: ', isActive);\n\n return (\n <MarkButton active={isActive} label={props.type} onToggle={onToggle} mark={props.type}>\n {props.icon}\n </MarkButton>\n );\n } else {\n const { disabled } = props;\n const isActive = props.isActive\n ? props.isActive(props.value, props.type)\n : hasBlock(props.value, props.type);\n\n log('[ToolbarButton] block:isActive: ', isActive);\n\n return (\n <Button\n active={isActive}\n disabled={disabled}\n onClick={() => props.onClick(props.value, props.onChange)}\n extraStyles={props.buttonStyles}\n >\n {props.icon}\n </Button>\n );\n }\n};\n\nconst isActiveToolbarPlugin = props => plugin => {\n const isDisabled = (props[plugin.name] || {}).disabled;\n\n return plugin && plugin.toolbar && !isDisabled;\n};\n\nexport const DefaultToolbar = ({\n plugins,\n pluginProps,\n value,\n onChange,\n onDone,\n classes,\n showDone,\n deletable\n}) => {\n const filtered = plugins.filter(isActiveToolbarPlugin(pluginProps)).map(p => p.toolbar);\n\n return (\n <div className={classes.defaultToolbar}>\n <div className={classes.buttonsContainer}>\n {filtered.map((p, index) => {\n return <ToolbarButton {...p} key={index} value={value} onChange={onChange} />;\n })}\n </div>\n {showDone && !deletable && <DoneButton onClick={onDone} />}\n </div>\n );\n};\n\nDefaultToolbar.propTypes = {\n classes: PropTypes.object.isRequired,\n plugins: PropTypes.array.isRequired,\n pluginProps: PropTypes.object,\n value: SlatePropTypes.value.isRequired,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n showDone: PropTypes.bool,\n addArea: PropTypes.bool,\n deletable: PropTypes.bool\n};\n\nDefaultToolbar.defaultProps = {\n pluginProps: {}\n};\n\nconst toolbarStyles = () => ({\n defaultToolbar: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between'\n },\n buttonsContainer: {\n alignItems: 'center',\n display: 'flex',\n width: '100%'\n }\n});\n\nexport default withStyles(toolbarStyles)(DefaultToolbar);\n"],"file":"default-toolbar.js"}
@@ -53,6 +53,13 @@ var styles = function styles() {
53
53
  },
54
54
  active: {
55
55
  color: 'black'
56
+ },
57
+ disabled: {
58
+ opacity: 0.7,
59
+ cursor: 'not-allowed',
60
+ '& :hover': {
61
+ color: 'grey'
62
+ }
56
63
  }
57
64
  };
58
65
  };
@@ -84,12 +91,15 @@ var RawButton = /*#__PURE__*/function (_React$Component) {
84
91
  _createClass(RawButton, [{
85
92
  key: "render",
86
93
  value: function render() {
94
+ var _classNames;
95
+
87
96
  var _this$props = this.props,
88
97
  active = _this$props.active,
89
98
  classes = _this$props.classes,
90
99
  children = _this$props.children,
100
+ disabled = _this$props.disabled,
91
101
  extraStyles = _this$props.extraStyles;
92
- var names = (0, _classnames["default"])(classes.button, active && classes.active);
102
+ var names = (0, _classnames["default"])(classes.button, (_classNames = {}, _defineProperty(_classNames, classes.active, active), _defineProperty(_classNames, classes.disabled, disabled), _classNames));
93
103
  return /*#__PURE__*/_react["default"].createElement("div", {
94
104
  style: extraStyles,
95
105
  className: names,
@@ -108,6 +118,7 @@ _defineProperty(RawButton, "propTypes", {
108
118
  classes: _propTypes["default"].object.isRequired,
109
119
  children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired,
110
120
  active: _propTypes["default"].bool,
121
+ disabled: _propTypes["default"].bool,
111
122
  extraStyles: _propTypes["default"].object
112
123
  });
113
124
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/toolbar/toolbar-buttons.jsx"],"names":["styles","button","color","display","padding","active","log","RawButton","props","e","preventDefault","onClick","classes","children","extraStyles","names","React","Component","PropTypes","func","isRequired","object","oneOfType","arrayOf","node","bool","Button","RawMarkButton","onToggle","mark","string","MarkButton"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport injectSheet from 'react-jss';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nconst styles = () => ({\n button: {\n color: 'grey',\n display: 'inline-flex',\n padding: '2px',\n '& :hover': {\n color: 'black'\n }\n },\n active: {\n color: 'black'\n }\n});\n\nconst log = debug('pie-elements:editable-html:raw-button');\n\nexport class RawButton extends React.Component {\n static propTypes = {\n onClick: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n active: PropTypes.bool,\n extraStyles: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n }\n\n onClick = e => {\n log('[onClick]');\n e.preventDefault();\n const { onClick } = this.props;\n onClick(e);\n };\n\n render() {\n const { active, classes, children, extraStyles } = this.props;\n const names = classNames(classes.button, active && classes.active);\n\n return (\n <div style={extraStyles} className={names} onMouseDown={this.onClick}>\n {children}\n </div>\n );\n }\n}\n\nexport const Button = injectSheet(styles())(RawButton);\n\nexport class RawMarkButton extends React.Component {\n static propTypes = {\n onToggle: PropTypes.func.isRequired,\n mark: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n classes: PropTypes.object.isRequired,\n active: PropTypes.bool\n };\n\n constructor(props) {\n super(props);\n }\n\n onToggle = e => {\n e.preventDefault();\n this.props.onToggle(this.props.mark);\n };\n\n render() {\n const { classes, children, active } = this.props;\n const names = classNames(classes.button, active && classes.active);\n return (\n <span className={names} onMouseDown={this.onToggle}>\n {children}\n </span>\n );\n }\n}\n\nexport const MarkButton = injectSheet(styles())(RawMarkButton);\n"],"file":"toolbar-buttons.js"}
1
+ {"version":3,"sources":["../../../src/plugins/toolbar/toolbar-buttons.jsx"],"names":["styles","button","color","display","padding","active","disabled","opacity","cursor","log","RawButton","props","e","preventDefault","onClick","classes","children","extraStyles","names","React","Component","PropTypes","func","isRequired","object","oneOfType","arrayOf","node","bool","Button","RawMarkButton","onToggle","mark","string","MarkButton"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport injectSheet from 'react-jss';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nconst styles = () => ({\n button: {\n color: 'grey',\n display: 'inline-flex',\n padding: '2px',\n '& :hover': {\n color: 'black'\n }\n },\n active: {\n color: 'black'\n },\n disabled: {\n opacity: 0.7,\n cursor: 'not-allowed',\n '& :hover': {\n color: 'grey'\n }\n }\n});\n\nconst log = debug('pie-elements:editable-html:raw-button');\n\nexport class RawButton extends React.Component {\n static propTypes = {\n onClick: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n active: PropTypes.bool,\n disabled: PropTypes.bool,\n extraStyles: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n }\n\n onClick = e => {\n log('[onClick]');\n e.preventDefault();\n const { onClick } = this.props;\n onClick(e);\n };\n\n render() {\n const { active, classes, children, disabled, extraStyles } = this.props;\n const names = classNames(classes.button, {\n [classes.active]: active,\n [classes.disabled]: disabled\n });\n\n return (\n <div style={extraStyles} className={names} onMouseDown={this.onClick}>\n {children}\n </div>\n );\n }\n}\n\nexport const Button = injectSheet(styles())(RawButton);\n\nexport class RawMarkButton extends React.Component {\n static propTypes = {\n onToggle: PropTypes.func.isRequired,\n mark: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n classes: PropTypes.object.isRequired,\n active: PropTypes.bool\n };\n\n constructor(props) {\n super(props);\n }\n\n onToggle = e => {\n e.preventDefault();\n this.props.onToggle(this.props.mark);\n };\n\n render() {\n const { classes, children, active } = this.props;\n const names = classNames(classes.button, active && classes.active);\n return (\n <span className={names} onMouseDown={this.onToggle}>\n {children}\n </span>\n );\n }\n}\n\nexport const MarkButton = injectSheet(styles())(RawMarkButton);\n"],"file":"toolbar-buttons.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "7.20.0",
3
+ "version": "7.21.0",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -11,9 +11,9 @@
11
11
  "@material-ui/icons": "^3.0.2",
12
12
  "@material-ui/styles": "^3.0.0-alpha.10",
13
13
  "@pie-lib/drag": "^1.1.52",
14
- "@pie-lib/math-rendering": "^2.3.13",
14
+ "@pie-lib/math-rendering": "^2.4.0",
15
15
  "@pie-lib/math-toolbar": "^1.8.9",
16
- "@pie-lib/render-ui": "^4.12.5",
16
+ "@pie-lib/render-ui": "^4.12.6",
17
17
  "change-case": "^3.0.2",
18
18
  "classnames": "^2.2.6",
19
19
  "debug": "^4.1.1",
@@ -46,6 +46,6 @@
46
46
  "publishConfig": {
47
47
  "access": "public"
48
48
  },
49
- "gitHead": "c37429328de4f87b6a7095de6e671c2cc53dd7f5",
49
+ "gitHead": "15c7a1364de782a095f8387f6be54af23e45fa10",
50
50
  "scripts": {}
51
51
  }
package/src/editor.jsx CHANGED
@@ -179,8 +179,10 @@ export class Editor extends React.Component {
179
179
  responseArea: {
180
180
  type: normalizedResponseAreaProps.type,
181
181
  options: normalizedResponseAreaProps.options,
182
+ maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,
182
183
  respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,
183
184
  onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,
185
+ error: normalizedResponseAreaProps.error,
184
186
  onFocus: () => {
185
187
  log('[table:onFocus]...');
186
188
  this.onPluginFocus();
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
 
4
4
  const ExplicitConstructedResponse = props => {
5
- const { attributes, value } = props;
5
+ const { attributes, value, error } = props;
6
6
 
7
7
  return (
8
8
  <span
@@ -23,7 +23,7 @@ const ExplicitConstructedResponse = props => {
23
23
  minHeight: '36px',
24
24
  height: '36px',
25
25
  background: '#FFF',
26
- border: '1px solid #C0C3CF',
26
+ border: `1px solid ${error ? 'red' : '#C0C3CF'}`,
27
27
  boxSizing: 'border-box',
28
28
  borderRadius: '3px',
29
29
  overflow: 'hidden',
@@ -19,6 +19,8 @@ const elTypesMap = {
19
19
  const elTypesArray = Object.values(elTypesMap);
20
20
 
21
21
  export default function ResponseAreaPlugin(opts) {
22
+ const isOfCurrentType = d => d.type === opts.type || d.type === elTypesMap[opts.type];
23
+
22
24
  const toolbar = {
23
25
  icon: <ToolbarIcon />,
24
26
  buttonStyles: {
@@ -27,6 +29,12 @@ export default function ResponseAreaPlugin(opts) {
27
29
  onClick: (value, onChange) => {
28
30
  log('[toolbar] onClick');
29
31
  const change = value.change();
32
+ const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
33
+
34
+ if (currentRespAreaList.size >= opts.maxResponseAreas) {
35
+ return;
36
+ }
37
+
30
38
  const type = opts.type.replace(/-/g, '_');
31
39
  const prevIndex = lastIndexMap[type];
32
40
  const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;
@@ -90,7 +98,13 @@ export default function ResponseAreaPlugin(opts) {
90
98
  if (n.type === 'explicit_constructed_response') {
91
99
  const data = n.data.toJSON();
92
100
 
93
- return <ExplicitConstructedResponse attributes={attributes} value={data.value} />;
101
+ return (
102
+ <ExplicitConstructedResponse
103
+ attributes={attributes}
104
+ value={data.value}
105
+ error={opts.error && opts.error[data.value]}
106
+ />
107
+ );
94
108
  }
95
109
 
96
110
  if (n.type === 'drag_in_the_blank') {
@@ -128,10 +142,15 @@ export default function ResponseAreaPlugin(opts) {
128
142
  return;
129
143
  }
130
144
 
131
- const isOfCurrentType = d => d.type === opts.type || d.type === elTypesMap[opts.type];
132
145
  const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
133
146
  const oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);
134
147
 
148
+ if (currentRespAreaList.size >= opts.maxResponseAreas) {
149
+ toolbar.disabled = true;
150
+ } else {
151
+ toolbar.disabled = false;
152
+ }
153
+
135
154
  const arrayToFilter =
136
155
  oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;
137
156
  const arrayToUseForFilter =
@@ -14,25 +14,32 @@ const log = debug('@pie-lib:editable-html:plugins:toolbar');
14
14
  export const ToolbarButton = props => {
15
15
  const onToggle = () => {
16
16
  const c = props.onToggle(props.value.change(), props);
17
+
17
18
  props.onChange(c);
18
19
  };
19
20
 
20
21
  if (props.isMark) {
21
22
  const isActive = hasMark(props.value, props.type);
23
+
22
24
  log('[ToolbarButton] mark:isActive: ', isActive);
25
+
23
26
  return (
24
27
  <MarkButton active={isActive} label={props.type} onToggle={onToggle} mark={props.type}>
25
28
  {props.icon}
26
29
  </MarkButton>
27
30
  );
28
31
  } else {
32
+ const { disabled } = props;
29
33
  const isActive = props.isActive
30
34
  ? props.isActive(props.value, props.type)
31
35
  : hasBlock(props.value, props.type);
36
+
32
37
  log('[ToolbarButton] block:isActive: ', isActive);
38
+
33
39
  return (
34
40
  <Button
35
41
  active={isActive}
42
+ disabled={disabled}
36
43
  onClick={() => props.onClick(props.value, props.onChange)}
37
44
  extraStyles={props.buttonStyles}
38
45
  >
@@ -44,6 +51,7 @@ export const ToolbarButton = props => {
44
51
 
45
52
  const isActiveToolbarPlugin = props => plugin => {
46
53
  const isDisabled = (props[plugin.name] || {}).disabled;
54
+
47
55
  return plugin && plugin.toolbar && !isDisabled;
48
56
  };
49
57
 
@@ -15,6 +15,13 @@ const styles = () => ({
15
15
  },
16
16
  active: {
17
17
  color: 'black'
18
+ },
19
+ disabled: {
20
+ opacity: 0.7,
21
+ cursor: 'not-allowed',
22
+ '& :hover': {
23
+ color: 'grey'
24
+ }
18
25
  }
19
26
  });
20
27
 
@@ -26,6 +33,7 @@ export class RawButton extends React.Component {
26
33
  classes: PropTypes.object.isRequired,
27
34
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
28
35
  active: PropTypes.bool,
36
+ disabled: PropTypes.bool,
29
37
  extraStyles: PropTypes.object
30
38
  };
31
39
 
@@ -41,8 +49,11 @@ export class RawButton extends React.Component {
41
49
  };
42
50
 
43
51
  render() {
44
- const { active, classes, children, extraStyles } = this.props;
45
- const names = classNames(classes.button, active && classes.active);
52
+ const { active, classes, children, disabled, extraStyles } = this.props;
53
+ const names = classNames(classes.button, {
54
+ [classes.active]: active,
55
+ [classes.disabled]: disabled
56
+ });
46
57
 
47
58
  return (
48
59
  <div style={extraStyles} className={names} onMouseDown={this.onClick}>