@pie-lib/editable-html 7.17.5 → 7.17.9
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.json +30 -0
- package/CHANGELOG.md +38 -0
- package/lib/editor.js +31 -10
- package/lib/editor.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +4 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +6 -2
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/package.json +3 -3
- package/src/editor.jsx +33 -9
- package/src/plugins/toolbar/editor-and-toolbar.jsx +4 -1
- package/src/plugins/toolbar/toolbar.jsx +5 -2
package/CHANGELOG.json
CHANGED
|
@@ -3158,5 +3158,35 @@
|
|
|
3158
3158
|
"committerDate": "2021-08-12 13:40:51 +0300",
|
|
3159
3159
|
"isTagged": true,
|
|
3160
3160
|
"tag": "@pie-lib/editable-html@7.17.3"
|
|
3161
|
+
},
|
|
3162
|
+
{
|
|
3163
|
+
"type": "fix",
|
|
3164
|
+
"scope": "editor",
|
|
3165
|
+
"subject": "made sure that if the editor loses focus, the onBlur function is called only if the focus is still not inside the dom element [PD-1126]",
|
|
3166
|
+
"merge": null,
|
|
3167
|
+
"header": "fix(editor): made sure that if the editor loses focus, the onBlur function is called only if the focus is still not inside the dom element [PD-1126]",
|
|
3168
|
+
"body": null,
|
|
3169
|
+
"footer": null,
|
|
3170
|
+
"notes": [],
|
|
3171
|
+
"hash": "e74f00a7949ab1ab993fb618d087f6156ab0e67f",
|
|
3172
|
+
"gitTags": " (origin/fix/editable-html-dom-blur)",
|
|
3173
|
+
"committerDate": "2021-09-20 11:10:47 +0300",
|
|
3174
|
+
"isTagged": true,
|
|
3175
|
+
"tag": "@pie-lib/editable-html@7.17.8"
|
|
3176
|
+
},
|
|
3177
|
+
{
|
|
3178
|
+
"type": "fix",
|
|
3179
|
+
"scope": "editor",
|
|
3180
|
+
"subject": "used dom refs in order to check if the editor is still in focus [PD-1126]",
|
|
3181
|
+
"merge": null,
|
|
3182
|
+
"header": "fix(editor): used dom refs in order to check if the editor is still in focus [PD-1126]",
|
|
3183
|
+
"body": null,
|
|
3184
|
+
"footer": null,
|
|
3185
|
+
"notes": [],
|
|
3186
|
+
"hash": "99e0f72de5a208c5760723bad4698b9115ac80e7",
|
|
3187
|
+
"gitTags": " (origin/fix/editable-html-dom-blur-query-fix)",
|
|
3188
|
+
"committerDate": "2021-09-20 13:43:11 +0300",
|
|
3189
|
+
"isTagged": true,
|
|
3190
|
+
"tag": "@pie-lib/editable-html@7.17.9"
|
|
3161
3191
|
}
|
|
3162
3192
|
]
|
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
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.17.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.17.8...@pie-lib/editable-html@7.17.9) (2021-09-20)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **editor:** used dom refs in order to check if the editor is still in focus [PD-1126] ([99e0f72](https://github.com/pie-framework/pie-lib/commit/99e0f72))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [7.17.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.17.7...@pie-lib/editable-html@7.17.8) (2021-09-20)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **editor:** made sure that if the editor loses focus, the onBlur function is called only if the focus is still not inside the dom element [PD-1126] ([e74f00a](https://github.com/pie-framework/pie-lib/commit/e74f00a))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## [7.17.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.17.6...@pie-lib/editable-html@7.17.7) (2021-09-20)
|
|
29
|
+
|
|
30
|
+
**Note:** Version bump only for package @pie-lib/editable-html
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [7.17.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.17.5...@pie-lib/editable-html@7.17.6) (2021-09-16)
|
|
37
|
+
|
|
38
|
+
**Note:** Version bump only for package @pie-lib/editable-html
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
## [7.17.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.17.4...@pie-lib/editable-html@7.17.5) (2021-09-08)
|
|
7
45
|
|
|
8
46
|
**Note:** Version bump only for package @pie-lib/editable-html
|
package/lib/editor.js
CHANGED
|
@@ -196,6 +196,26 @@ function (_React$Component) {
|
|
|
196
196
|
});
|
|
197
197
|
});
|
|
198
198
|
|
|
199
|
+
_defineProperty(_assertThisInitialized(_this), "handleDomBlur", function (e) {
|
|
200
|
+
var editorDOM = document.querySelector("[data-key=\"".concat(_this.state.value.document.key, "\"]"));
|
|
201
|
+
setTimeout(function () {
|
|
202
|
+
if (!_this.wrapperRef) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
var editorElement = !editorDOM || document.activeElement.closest("[class*=\"".concat(editorDOM.className, "\"]"));
|
|
207
|
+
var toolbarElement = !_this.toolbarRef || document.activeElement.closest("[class*=\"".concat(_this.toolbarRef.className, "\"]"));
|
|
208
|
+
|
|
209
|
+
var isInCurrentComponent = _this.wrapperRef.contains(editorElement) || _this.wrapperRef.contains(toolbarElement);
|
|
210
|
+
|
|
211
|
+
if (!isInCurrentComponent) {
|
|
212
|
+
editorDOM.removeEventListener('blur', _this.handleDomBlur);
|
|
213
|
+
|
|
214
|
+
_this.onBlur(e);
|
|
215
|
+
}
|
|
216
|
+
}, 50);
|
|
217
|
+
});
|
|
218
|
+
|
|
199
219
|
_defineProperty(_assertThisInitialized(_this), "onFocus", function () {
|
|
200
220
|
return new Promise(function (resolve) {
|
|
201
221
|
var editorDOM = document.querySelector("[data-key=\"".concat(_this.state.value.document.key, "\"]"));
|
|
@@ -231,13 +251,8 @@ function (_React$Component) {
|
|
|
231
251
|
|
|
232
252
|
|
|
233
253
|
if (editorDOM === document.activeElement) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
_this.onBlur(e);
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
editorDOM.addEventListener('blur', handleDomBlur);
|
|
254
|
+
editorDOM.removeEventListener('blur', _this.handleDomBlur);
|
|
255
|
+
editorDOM.addEventListener('blur', _this.handleDomBlur);
|
|
241
256
|
}
|
|
242
257
|
|
|
243
258
|
_this.stashValue();
|
|
@@ -350,9 +365,10 @@ function (_React$Component) {
|
|
|
350
365
|
* HACK ALERT: We should be calling setState here and storing the change data:
|
|
351
366
|
*
|
|
352
367
|
* <code>this.setState({changeData: { key, data}})</code>
|
|
353
|
-
* However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no
|
|
354
|
-
* The issues seem to be related to the promises in onBlur/onFocus. But removing these
|
|
355
|
-
* A major clean up is planned for this component so I've decided to temporarily settle
|
|
368
|
+
* However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no
|
|
369
|
+
* more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these
|
|
370
|
+
* brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle
|
|
371
|
+
* on this hack rather than spend more time on this.
|
|
356
372
|
*/
|
|
357
373
|
// Uncomment this line to see the bug described above.
|
|
358
374
|
// this.setState({changeData: {key, data}})
|
|
@@ -578,6 +594,11 @@ function (_React$Component) {
|
|
|
578
594
|
ref: function ref(r) {
|
|
579
595
|
return _this3.editor = r && _this3.props.editorRef(r);
|
|
580
596
|
},
|
|
597
|
+
toolbarRef: function toolbarRef(r) {
|
|
598
|
+
if (r) {
|
|
599
|
+
_this3.toolbarRef = r;
|
|
600
|
+
}
|
|
601
|
+
},
|
|
581
602
|
value: value,
|
|
582
603
|
focus: this.focus,
|
|
583
604
|
onKeyDown: onKeyDown,
|
package/lib/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","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","activeElement","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","handleDomBlur","removeEventListener","addEventListener","onFocus","force","stopReset","plugins","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","setTimeout","done","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","type","parent","getParent","Block","pos","focus","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","responseAreaProps","options","respAreaToolbar","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","equals","width","minHeight","height","maxHeight","valueToSize","disabled","highlightShape","classes","className","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","wrapperRef","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","border","padding","textAlign","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 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 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 onDelete: 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 toolbarOpts: defaultToolbarOpts,\n onKeyDown: () => {}\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.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: props.responseAreaProps && props.responseAreaProps.type,\n options: props.responseAreaProps && props.responseAreaProps.options,\n respAreaToolbar: props.responseAreaProps && props.responseAreaProps.respAreaToolbar,\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 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 /*\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 const handleDomBlur = e => {\n editorDOM.removeEventListener('blur', handleDomBlur);\n this.onBlur(e);\n };\n\n editorDOM.addEventListener('blur', 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 more changes get through.\n * The issues seem to be related to the promises in onBlur/onFocus. But removing these brings it's own problems.\n * A major clean up is planned for this component so I've decided to temporarily settle 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 highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\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 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 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 '& 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 border: '1px solid #dfe2e5',\n padding: '.6em 1em',\n textAlign: 'center'\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","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","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","responseAreaProps","options","respAreaToolbar","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","equals","width","minHeight","height","maxHeight","valueToSize","disabled","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","border","padding","textAlign","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 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 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 onDelete: 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 toolbarOpts: defaultToolbarOpts,\n onKeyDown: () => {}\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.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: props.responseAreaProps && props.responseAreaProps.type,\n options: props.responseAreaProps && props.responseAreaProps.options,\n respAreaToolbar: props.responseAreaProps && props.responseAreaProps.respAreaToolbar,\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 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 || 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 highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\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 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 '& 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 border: '1px solid #dfe2e5',\n padding: '.6em 1em',\n textAlign: 'center'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|
|
@@ -89,7 +89,8 @@ function (_React$Component) {
|
|
|
89
89
|
disableUnderline = _this$props.disableUnderline,
|
|
90
90
|
pluginProps = _this$props.pluginProps,
|
|
91
91
|
toolbarOpts = _this$props.toolbarOpts,
|
|
92
|
-
onDataChange = _this$props.onDataChange
|
|
92
|
+
onDataChange = _this$props.onDataChange,
|
|
93
|
+
toolbarRef = _this$props.toolbarRef;
|
|
93
94
|
var inFocus = value.isFocused || focusedNode !== null && focusedNode !== undefined;
|
|
94
95
|
var holderNames = (0, _classnames["default"])(classes.editorHolder, inFocus && classes.editorInFocus, readOnly && classes.readOnly, disableUnderline && classes.disabledUnderline);
|
|
95
96
|
var clonedChildren = children;
|
|
@@ -118,6 +119,7 @@ function (_React$Component) {
|
|
|
118
119
|
onChange: onChange,
|
|
119
120
|
onDone: onDone,
|
|
120
121
|
onDataChange: onDataChange,
|
|
122
|
+
toolbarRef: toolbarRef,
|
|
121
123
|
pluginProps: pluginProps,
|
|
122
124
|
toolbarOpts: toolbarOpts
|
|
123
125
|
}));
|
|
@@ -136,6 +138,7 @@ _defineProperty(EditorAndToolbar, "propTypes", {
|
|
|
136
138
|
onChange: _propTypes["default"].func.isRequired,
|
|
137
139
|
onDone: _propTypes["default"].func.isRequired,
|
|
138
140
|
onDataChange: _propTypes["default"].func,
|
|
141
|
+
toolbarRef: _propTypes["default"].func,
|
|
139
142
|
focusedNode: _slatePropTypes["default"].node,
|
|
140
143
|
readOnly: _propTypes["default"].bool,
|
|
141
144
|
disableUnderline: _propTypes["default"].bool,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/toolbar/editor-and-toolbar.jsx"],"names":["log","EditorAndToolbar","IS_FIREFOX","editorRef","tmp","isUpdatingSelection","props","classes","children","value","plugins","onChange","onDone","focusedNode","autoWidth","readOnly","disableUnderline","pluginProps","toolbarOpts","onDataChange","inFocus","isFocused","undefined","holderNames","editorHolder","editorInFocus","disabledUnderline","clonedChildren","React","cloneElement","ref","el","root","Component","PropTypes","oneOfType","arrayOf","node","isRequired","SlatePropTypes","array","func","bool","object","shape","position","oneOf","alwaysVisible","style","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","overflowY","color","text","backgroundColor","background","left","right","bottom","height","content","transition","pointerEvents","transform","primary","display","backgroundSize","backgroundImage","backgroundRepeat","backgroundPosition"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Toolbar from './toolbar';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { primary } from '../../theme';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { IS_FIREFOX } from 'slate-dev-environment';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');\n\nexport class EditorAndToolbar extends React.Component {\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n onDataChange: PropTypes.func,\n focusedNode: SlatePropTypes.node,\n readOnly: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidth: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alwaysVisible: PropTypes.bool\n })\n };\n\n /** This is an interim fix until this PR is merged in slate:\n * https://github.com/ianstormtaylor/slate/pull/2236\n */\n componentDidMount() {\n if (IS_FIREFOX) {\n this.editorRef.tmp.isUpdatingSelection = true;\n }\n }\n\n render() {\n const {\n classes,\n children,\n value,\n plugins,\n onChange,\n onDone,\n focusedNode,\n autoWidth,\n readOnly,\n disableUnderline,\n pluginProps,\n toolbarOpts,\n onDataChange\n } = this.props;\n\n const inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined);\n const holderNames = classNames(\n classes.editorHolder,\n inFocus && classes.editorInFocus,\n readOnly && classes.readOnly,\n disableUnderline && classes.disabledUnderline\n );\n let clonedChildren = children;\n\n if (typeof children !== 'string') {\n clonedChildren = React.cloneElement(children, {\n ref: el => (this.editorRef = el)\n });\n }\n\n log(\n '[render] inFocus: ',\n inFocus,\n 'value.isFocused:',\n value.isFocused,\n 'focused node: ',\n focusedNode\n );\n\n return (\n <div className={classes.root}>\n <div className={holderNames}>\n <div className={classes.children}>{clonedChildren}</div>\n </div>\n <Toolbar\n autoWidth={autoWidth}\n plugins={plugins}\n focusedNode={focusedNode}\n value={value}\n isFocused={inFocus}\n onChange={onChange}\n onDone={onDone}\n onDataChange={onDataChange}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n}\n\nconst style = {\n root: {\n position: 'relative',\n padding: '0px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n padding: '5px 0'\n }\n },\n children: {\n padding: '10px 16px'\n },\n editorHolder: {\n position: 'relative',\n padding: '0px',\n overflowY: 'scroll',\n color: color.text(),\n backgroundColor: color.background(),\n '&::before': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition:\n 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&:focus': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n }\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n disabledUnderline: {\n '&::before': {\n display: 'none'\n },\n '&::after': {\n display: 'none'\n }\n },\n\n readOnly: {\n '&::before': {\n background: 'transparent',\n backgroundSize: '5px 1px',\n backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',\n backgroundRepeat: 'repeat-x',\n backgroundPosition: 'left top'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(0)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n editorInFocus: {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n },\n '&:hover': {\n '&::after': {\n backgroundColor: primary\n }\n }\n }\n};\n\nexport default withStyles(style)(EditorAndToolbar);\n"],"file":"editor-and-toolbar.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/toolbar/editor-and-toolbar.jsx"],"names":["log","EditorAndToolbar","IS_FIREFOX","editorRef","tmp","isUpdatingSelection","props","classes","children","value","plugins","onChange","onDone","focusedNode","autoWidth","readOnly","disableUnderline","pluginProps","toolbarOpts","onDataChange","toolbarRef","inFocus","isFocused","undefined","holderNames","editorHolder","editorInFocus","disabledUnderline","clonedChildren","React","cloneElement","ref","el","root","Component","PropTypes","oneOfType","arrayOf","node","isRequired","SlatePropTypes","array","func","bool","object","shape","position","oneOf","alwaysVisible","style","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","overflowY","color","text","backgroundColor","background","left","right","bottom","height","content","transition","pointerEvents","transform","primary","display","backgroundSize","backgroundImage","backgroundRepeat","backgroundPosition"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Toolbar from './toolbar';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { primary } from '../../theme';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { IS_FIREFOX } from 'slate-dev-environment';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');\n\nexport class EditorAndToolbar extends React.Component {\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n onDataChange: PropTypes.func,\n toolbarRef: PropTypes.func,\n focusedNode: SlatePropTypes.node,\n readOnly: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidth: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alwaysVisible: PropTypes.bool\n })\n };\n\n /** This is an interim fix until this PR is merged in slate:\n * https://github.com/ianstormtaylor/slate/pull/2236\n */\n componentDidMount() {\n if (IS_FIREFOX) {\n this.editorRef.tmp.isUpdatingSelection = true;\n }\n }\n\n render() {\n const {\n classes,\n children,\n value,\n plugins,\n onChange,\n onDone,\n focusedNode,\n autoWidth,\n readOnly,\n disableUnderline,\n pluginProps,\n toolbarOpts,\n onDataChange,\n toolbarRef\n } = this.props;\n\n const inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined);\n const holderNames = classNames(\n classes.editorHolder,\n inFocus && classes.editorInFocus,\n readOnly && classes.readOnly,\n disableUnderline && classes.disabledUnderline\n );\n let clonedChildren = children;\n\n if (typeof children !== 'string') {\n clonedChildren = React.cloneElement(children, {\n ref: el => (this.editorRef = el)\n });\n }\n\n log(\n '[render] inFocus: ',\n inFocus,\n 'value.isFocused:',\n value.isFocused,\n 'focused node: ',\n focusedNode\n );\n\n return (\n <div className={classes.root}>\n <div className={holderNames}>\n <div className={classes.children}>{clonedChildren}</div>\n </div>\n <Toolbar\n autoWidth={autoWidth}\n plugins={plugins}\n focusedNode={focusedNode}\n value={value}\n isFocused={inFocus}\n onChange={onChange}\n onDone={onDone}\n onDataChange={onDataChange}\n toolbarRef={toolbarRef}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n}\n\nconst style = {\n root: {\n position: 'relative',\n padding: '0px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n padding: '5px 0'\n }\n },\n children: {\n padding: '10px 16px'\n },\n editorHolder: {\n position: 'relative',\n padding: '0px',\n overflowY: 'scroll',\n color: color.text(),\n backgroundColor: color.background(),\n '&::before': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition:\n 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&:focus': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n }\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n disabledUnderline: {\n '&::before': {\n display: 'none'\n },\n '&::after': {\n display: 'none'\n }\n },\n\n readOnly: {\n '&::before': {\n background: 'transparent',\n backgroundSize: '5px 1px',\n backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',\n backgroundRepeat: 'repeat-x',\n backgroundPosition: 'left top'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(0)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n editorInFocus: {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n },\n '&:hover': {\n '&::after': {\n backgroundColor: primary\n }\n }\n }\n};\n\nexport default withStyles(style)(EditorAndToolbar);\n"],"file":"editor-and-toolbar.js"}
|
|
@@ -178,7 +178,8 @@ function (_React$Component) {
|
|
|
178
178
|
autoWidth = _this$props3.autoWidth,
|
|
179
179
|
onChange = _this$props3.onChange,
|
|
180
180
|
isFocused = _this$props3.isFocused,
|
|
181
|
-
onDone = _this$props3.onDone
|
|
181
|
+
onDone = _this$props3.onDone,
|
|
182
|
+
toolbarRef = _this$props3.toolbarRef;
|
|
182
183
|
var node = (0, _utils.findSingleNode)(value);
|
|
183
184
|
var parentNode = (0, _utils.findParentNode)(value, node);
|
|
184
185
|
log(' --------------> [render] node: ', node);
|
|
@@ -238,7 +239,8 @@ function (_React$Component) {
|
|
|
238
239
|
return _react["default"].createElement("div", {
|
|
239
240
|
className: names,
|
|
240
241
|
style: extraStyles,
|
|
241
|
-
onClick: this.onClick
|
|
242
|
+
onClick: this.onClick,
|
|
243
|
+
ref: toolbarRef
|
|
242
244
|
}, CustomToolbar ? _react["default"].createElement(CustomToolbar, {
|
|
243
245
|
node: node,
|
|
244
246
|
value: value,
|
|
@@ -282,6 +284,7 @@ _defineProperty(Toolbar, "propTypes", {
|
|
|
282
284
|
plugin: _propTypes["default"].object,
|
|
283
285
|
onImageClick: _propTypes["default"].func,
|
|
284
286
|
onDone: _propTypes["default"].func.isRequired,
|
|
287
|
+
toolbarRef: _propTypes["default"].func.isRequired,
|
|
285
288
|
classes: _propTypes["default"].object.isRequired,
|
|
286
289
|
isFocused: _propTypes["default"].bool,
|
|
287
290
|
autoWidth: _propTypes["default"].bool,
|
|
@@ -291,6 +294,7 @@ _defineProperty(Toolbar, "propTypes", {
|
|
|
291
294
|
position: _propTypes["default"].oneOf(['bottom', 'top']),
|
|
292
295
|
alignment: _propTypes["default"].oneOf(['left', 'right']),
|
|
293
296
|
alwaysVisible: _propTypes["default"].bool,
|
|
297
|
+
ref: _propTypes["default"].obj,
|
|
294
298
|
showDone: _propTypes["default"].bool
|
|
295
299
|
}),
|
|
296
300
|
onDataChange: _propTypes["default"].func
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/toolbar/toolbar.jsx"],"names":["log","getCustomToolbar","plugin","node","value","handleDone","onDataChange","toolbar","CustomToolbarComp","customToolbar","Toolbar","props","type","marks","some","mark","blocks","onChange","onToggle","change","e","preventDefault","fn","finishEditing","onDone","deleteNode","persist","onDeleteClick","state","classes","plugins","pluginProps","toolbarOpts","autoWidth","isFocused","parentNode","find","p","supports","parentPlugin","done","handler","onToolbarDone","handleDataChange","key","data","CustomToolbar","filteredPlugins","filterPlugins","parentExtraStyles","pluginStyles","pluginExtraStyles","extraStyles","deletable","customToolbarShowDone","showDone","alwaysVisible","defaultToolbarShowDone","hasDoneButton","names","toolbarWithNoDone","toolbarTop","position","toolbarRight","alignment","focused","fullWidth","onClick","shared","iconRoot","onDeleteMouseDown","root","React","Component","zIndex","PropTypes","number","SlatePropTypes","isRequired","array","object","onImageClick","func","bool","shape","oneOf","style","cursor","justifyContent","background","minWidth","margin","padding","boxShadow","boxSizing","display","top","right","width","height","verticalAlign","label","color","index"],"mappings":"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","sourcesContent":["import { DoneButton } from './done-button';\nimport Delete from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport debounce from 'lodash/debounce';\n\nimport { findSingleNode, findParentNode } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\nimport DefaultToolbar from './default-toolbar';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nconst getCustomToolbar = (plugin, node, value, handleDone, onDataChange) => {\n if (!plugin) {\n return;\n }\n if (!plugin.toolbar) {\n return;\n }\n if (plugin.toolbar.CustomToolbarComp) {\n /**\n * Using a pre-defined Component should be preferred\n * as the rendering of it (and it's children) can be optimized by React.\n * If you keep re-defining the comp with an inline function\n * then react will have to re-render.\n */\n return plugin.toolbar.CustomToolbarComp;\n } else if (typeof plugin.toolbar.customToolbar === 'function') {\n log('deprecated - use CustomToolbarComp');\n return plugin.toolbar.customToolbar(node, value, handleDone, onDataChange);\n }\n};\n\nexport class Toolbar extends React.Component {\n static propTypes = {\n zIndex: PropTypes.number,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array,\n plugin: PropTypes.object,\n onImageClick: PropTypes.func,\n onDone: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n isFocused: PropTypes.bool,\n autoWidth: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n pluginProps: PropTypes.object,\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 }),\n onDataChange: PropTypes.func\n };\n\n constructor(props) {\n super(props);\n this.state = {\n change: null\n };\n }\n\n hasMark = type => {\n const { value } = this.props;\n return value.marks.some(mark => mark.type == type);\n };\n\n hasBlock = type => {\n const { value } = this.props;\n return value.blocks.some(node => node.type == type);\n };\n\n onToggle = plugin => {\n const { value, onChange } = this.props;\n\n if (!plugin.onToggle) return;\n\n const change = plugin.onToggle(value.change());\n onChange(change);\n };\n\n onClick = e => {\n log('[onClick]');\n e.preventDefault();\n };\n\n onButtonClick = fn => {\n return e => {\n e.preventDefault();\n fn();\n };\n };\n\n onToolbarDone = (change, finishEditing) => {\n log('[onToolbarDone] change: ', change, 'finishEditing: ', finishEditing);\n const { onChange, onDone } = this.props;\n\n if (change) {\n onChange(change, () => {\n if (finishEditing) {\n onDone();\n }\n });\n } else {\n if (finishEditing) {\n log('[onToolbarChange] call onDone');\n onDone();\n }\n }\n };\n\n onDeleteClick = debounce(\n (e, plugin, node, value, onChange) => plugin.deleteNode(e, node, value, onChange),\n 500\n );\n\n onDeleteMouseDown = (e, plugin, node, value, onChange) => {\n e.persist();\n this.onDeleteClick(e, plugin, node, value, onChange);\n };\n\n render() {\n const {\n classes,\n plugins,\n pluginProps,\n toolbarOpts,\n value,\n autoWidth,\n onChange,\n isFocused,\n onDone\n } = this.props;\n\n const node = findSingleNode(value);\n const parentNode = findParentNode(value, node);\n\n log(' --------------> [render] node: ', node);\n log('[render] node: ', node);\n\n const plugin = plugins.find(p => {\n if (!node) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(node, value);\n }\n });\n const parentPlugin = plugins.find(p => {\n if (!parentNode) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(parentNode, value);\n }\n });\n\n log('[render] plugin: ', plugin);\n\n const handleDone = (change, done) => {\n let handler = onDone;\n\n if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {\n handler = this.onToolbarDone;\n }\n\n handler(change, done);\n\n if (parentPlugin && parentPlugin.handleDone) {\n parentPlugin.handleDone(value, node, plugin, onChange);\n }\n };\n\n const handleDataChange = (key, data) => {\n this.props.onDataChange(key, data);\n };\n\n const CustomToolbar = getCustomToolbar(\n plugin,\n node,\n value,\n handleDone,\n this.props.onDataChange\n );\n\n const filteredPlugins =\n plugin && plugin.filterPlugins ? plugin.filterPlugins(node, plugins) : plugins;\n\n log('[render] CustomToolbar: ', CustomToolbar);\n const parentExtraStyles =\n parentPlugin && parentPlugin.pluginStyles\n ? parentPlugin.pluginStyles(node, parentNode, plugin)\n : {};\n const pluginExtraStyles =\n plugin && plugin.pluginStyles ? plugin.pluginStyles(node, parentNode, plugin) : {};\n const extraStyles = {\n ...pluginExtraStyles,\n ...parentExtraStyles\n };\n\n const deletable = node && plugin && plugin.deleteNode;\n const customToolbarShowDone =\n node && plugin && plugin.toolbar && plugin.toolbar.showDone && !toolbarOpts.alwaysVisible;\n\n // If there is a toolbarOpts we check if the showDone is not equal to false\n const defaultToolbarShowDone = !toolbarOpts || toolbarOpts.showDone !== false;\n\n const hasDoneButton = defaultToolbarShowDone || customToolbarShowDone;\n\n const names = classNames(classes.toolbar, {\n [classes.toolbarWithNoDone]: !hasDoneButton,\n [classes.toolbarTop]: toolbarOpts.position === 'top',\n [classes.toolbarRight]: toolbarOpts.alignment === 'right',\n [classes.focused]: toolbarOpts.alwaysVisible || isFocused,\n [classes.autoWidth]: autoWidth,\n [classes.fullWidth]: !autoWidth\n });\n\n return (\n <div className={names} style={extraStyles} onClick={this.onClick}>\n {CustomToolbar ? (\n <CustomToolbar\n node={node}\n value={value}\n onToolbarDone={this.onToolbarDone}\n onDataChange={handleDataChange}\n pluginProps={pluginProps}\n />\n ) : (\n <DefaultToolbar\n plugins={filteredPlugins}\n pluginProps={pluginProps}\n value={value}\n onChange={onChange}\n showDone={defaultToolbarShowDone}\n onDone={handleDone}\n deletable={deletable}\n />\n )}\n\n <div className={classes.shared}>\n {deletable && (\n <IconButton\n aria-label=\"Delete\"\n className={classes.iconRoot}\n onMouseDown={e => this.onDeleteMouseDown(e, plugin, node, value, onChange)}\n classes={{\n root: classes.iconRoot\n }}\n >\n <Delete />\n </IconButton>\n )}\n {customToolbarShowDone && <DoneButton onClick={handleDone} />}\n </div>\n </div>\n );\n }\n}\n\nconst style = {\n toolbar: {\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: '280px',\n margin: '5px 0 0 0',\n padding: '2px',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n boxSizing: 'border-box',\n display: 'none'\n },\n toolbarWithNoDone: {\n minWidth: '265px'\n },\n toolbarTop: {\n top: '-45px'\n },\n toolbarRight: {\n right: 0\n },\n fullWidth: {\n width: '100%'\n },\n autoWidth: {\n width: 'auto'\n },\n focused: {\n display: 'flex'\n },\n iconRoot: {\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top'\n },\n label: {\n color: 'var(--editable-html-toolbar-check, #00bb00)'\n },\n shared: {\n display: 'flex'\n }\n};\nexport default withStyles(style, { index: 1000 })(Toolbar);\n"],"file":"toolbar.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/toolbar/toolbar.jsx"],"names":["log","getCustomToolbar","plugin","node","value","handleDone","onDataChange","toolbar","CustomToolbarComp","customToolbar","Toolbar","props","type","marks","some","mark","blocks","onChange","onToggle","change","e","preventDefault","fn","finishEditing","onDone","deleteNode","persist","onDeleteClick","state","classes","plugins","pluginProps","toolbarOpts","autoWidth","isFocused","toolbarRef","parentNode","find","p","supports","parentPlugin","done","handler","onToolbarDone","handleDataChange","key","data","CustomToolbar","filteredPlugins","filterPlugins","parentExtraStyles","pluginStyles","pluginExtraStyles","extraStyles","deletable","customToolbarShowDone","showDone","alwaysVisible","defaultToolbarShowDone","hasDoneButton","names","toolbarWithNoDone","toolbarTop","position","toolbarRight","alignment","focused","fullWidth","onClick","shared","iconRoot","onDeleteMouseDown","root","React","Component","zIndex","PropTypes","number","SlatePropTypes","isRequired","array","object","onImageClick","func","bool","shape","oneOf","ref","obj","style","cursor","justifyContent","background","minWidth","margin","padding","boxShadow","boxSizing","display","top","right","width","height","verticalAlign","label","color","index"],"mappings":"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","sourcesContent":["import { DoneButton } from './done-button';\nimport Delete from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport debounce from 'lodash/debounce';\n\nimport { findSingleNode, findParentNode } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\nimport DefaultToolbar from './default-toolbar';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nconst getCustomToolbar = (plugin, node, value, handleDone, onDataChange) => {\n if (!plugin) {\n return;\n }\n if (!plugin.toolbar) {\n return;\n }\n if (plugin.toolbar.CustomToolbarComp) {\n /**\n * Using a pre-defined Component should be preferred\n * as the rendering of it (and it's children) can be optimized by React.\n * If you keep re-defining the comp with an inline function\n * then react will have to re-render.\n */\n return plugin.toolbar.CustomToolbarComp;\n } else if (typeof plugin.toolbar.customToolbar === 'function') {\n log('deprecated - use CustomToolbarComp');\n return plugin.toolbar.customToolbar(node, value, handleDone, onDataChange);\n }\n};\n\nexport class Toolbar extends React.Component {\n static propTypes = {\n zIndex: PropTypes.number,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array,\n plugin: PropTypes.object,\n onImageClick: PropTypes.func,\n onDone: PropTypes.func.isRequired,\n toolbarRef: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n isFocused: PropTypes.bool,\n autoWidth: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n ref: PropTypes.obj,\n showDone: PropTypes.bool\n }),\n onDataChange: PropTypes.func\n };\n\n constructor(props) {\n super(props);\n this.state = {\n change: null\n };\n }\n\n hasMark = type => {\n const { value } = this.props;\n return value.marks.some(mark => mark.type == type);\n };\n\n hasBlock = type => {\n const { value } = this.props;\n return value.blocks.some(node => node.type == type);\n };\n\n onToggle = plugin => {\n const { value, onChange } = this.props;\n\n if (!plugin.onToggle) return;\n\n const change = plugin.onToggle(value.change());\n onChange(change);\n };\n\n onClick = e => {\n log('[onClick]');\n e.preventDefault();\n };\n\n onButtonClick = fn => {\n return e => {\n e.preventDefault();\n fn();\n };\n };\n\n onToolbarDone = (change, finishEditing) => {\n log('[onToolbarDone] change: ', change, 'finishEditing: ', finishEditing);\n const { onChange, onDone } = this.props;\n\n if (change) {\n onChange(change, () => {\n if (finishEditing) {\n onDone();\n }\n });\n } else {\n if (finishEditing) {\n log('[onToolbarChange] call onDone');\n onDone();\n }\n }\n };\n\n onDeleteClick = debounce(\n (e, plugin, node, value, onChange) => plugin.deleteNode(e, node, value, onChange),\n 500\n );\n\n onDeleteMouseDown = (e, plugin, node, value, onChange) => {\n e.persist();\n this.onDeleteClick(e, plugin, node, value, onChange);\n };\n\n render() {\n const {\n classes,\n plugins,\n pluginProps,\n toolbarOpts,\n value,\n autoWidth,\n onChange,\n isFocused,\n onDone,\n toolbarRef\n } = this.props;\n\n const node = findSingleNode(value);\n const parentNode = findParentNode(value, node);\n\n log(' --------------> [render] node: ', node);\n log('[render] node: ', node);\n\n const plugin = plugins.find(p => {\n if (!node) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(node, value);\n }\n });\n const parentPlugin = plugins.find(p => {\n if (!parentNode) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(parentNode, value);\n }\n });\n\n log('[render] plugin: ', plugin);\n\n const handleDone = (change, done) => {\n let handler = onDone;\n\n if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {\n handler = this.onToolbarDone;\n }\n\n handler(change, done);\n\n if (parentPlugin && parentPlugin.handleDone) {\n parentPlugin.handleDone(value, node, plugin, onChange);\n }\n };\n\n const handleDataChange = (key, data) => {\n this.props.onDataChange(key, data);\n };\n\n const CustomToolbar = getCustomToolbar(\n plugin,\n node,\n value,\n handleDone,\n this.props.onDataChange\n );\n\n const filteredPlugins =\n plugin && plugin.filterPlugins ? plugin.filterPlugins(node, plugins) : plugins;\n\n log('[render] CustomToolbar: ', CustomToolbar);\n const parentExtraStyles =\n parentPlugin && parentPlugin.pluginStyles\n ? parentPlugin.pluginStyles(node, parentNode, plugin)\n : {};\n const pluginExtraStyles =\n plugin && plugin.pluginStyles ? plugin.pluginStyles(node, parentNode, plugin) : {};\n const extraStyles = {\n ...pluginExtraStyles,\n ...parentExtraStyles\n };\n\n const deletable = node && plugin && plugin.deleteNode;\n const customToolbarShowDone =\n node && plugin && plugin.toolbar && plugin.toolbar.showDone && !toolbarOpts.alwaysVisible;\n\n // If there is a toolbarOpts we check if the showDone is not equal to false\n const defaultToolbarShowDone = !toolbarOpts || toolbarOpts.showDone !== false;\n\n const hasDoneButton = defaultToolbarShowDone || customToolbarShowDone;\n\n const names = classNames(classes.toolbar, {\n [classes.toolbarWithNoDone]: !hasDoneButton,\n [classes.toolbarTop]: toolbarOpts.position === 'top',\n [classes.toolbarRight]: toolbarOpts.alignment === 'right',\n [classes.focused]: toolbarOpts.alwaysVisible || isFocused,\n [classes.autoWidth]: autoWidth,\n [classes.fullWidth]: !autoWidth\n });\n\n return (\n <div className={names} style={extraStyles} onClick={this.onClick} ref={toolbarRef}>\n {CustomToolbar ? (\n <CustomToolbar\n node={node}\n value={value}\n onToolbarDone={this.onToolbarDone}\n onDataChange={handleDataChange}\n pluginProps={pluginProps}\n />\n ) : (\n <DefaultToolbar\n plugins={filteredPlugins}\n pluginProps={pluginProps}\n value={value}\n onChange={onChange}\n showDone={defaultToolbarShowDone}\n onDone={handleDone}\n deletable={deletable}\n />\n )}\n\n <div className={classes.shared}>\n {deletable && (\n <IconButton\n aria-label=\"Delete\"\n className={classes.iconRoot}\n onMouseDown={e => this.onDeleteMouseDown(e, plugin, node, value, onChange)}\n classes={{\n root: classes.iconRoot\n }}\n >\n <Delete />\n </IconButton>\n )}\n {customToolbarShowDone && <DoneButton onClick={handleDone} />}\n </div>\n </div>\n );\n }\n}\n\nconst style = {\n toolbar: {\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: '280px',\n margin: '5px 0 0 0',\n padding: '2px',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n boxSizing: 'border-box',\n display: 'none'\n },\n toolbarWithNoDone: {\n minWidth: '265px'\n },\n toolbarTop: {\n top: '-45px'\n },\n toolbarRight: {\n right: 0\n },\n fullWidth: {\n width: '100%'\n },\n autoWidth: {\n width: 'auto'\n },\n focused: {\n display: 'flex'\n },\n iconRoot: {\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top'\n },\n label: {\n color: 'var(--editable-html-toolbar-check, #00bb00)'\n },\n shared: {\n display: 'flex'\n }\n};\nexport default withStyles(style, { index: 1000 })(Toolbar);\n"],"file":"toolbar.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/editable-html",
|
|
3
|
-
"version": "7.17.
|
|
3
|
+
"version": "7.17.9",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"@material-ui/styles": "^3.0.0-alpha.10",
|
|
13
13
|
"@pie-lib/drag": "^1.1.52",
|
|
14
14
|
"@pie-lib/math-rendering": "^2.3.11",
|
|
15
|
-
"@pie-lib/math-toolbar": "^1.8.
|
|
15
|
+
"@pie-lib/math-toolbar": "^1.8.4",
|
|
16
16
|
"@pie-lib/render-ui": "^4.12.2",
|
|
17
17
|
"change-case": "^3.0.2",
|
|
18
18
|
"classnames": "^2.2.6",
|
|
@@ -46,6 +46,6 @@
|
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "e2494f7cbf291862b255fc7280c2d6f4c25da8df",
|
|
50
50
|
"scripts": {}
|
|
51
51
|
}
|
package/src/editor.jsx
CHANGED
|
@@ -303,6 +303,28 @@ export class Editor extends React.Component {
|
|
|
303
303
|
});
|
|
304
304
|
};
|
|
305
305
|
|
|
306
|
+
handleDomBlur = e => {
|
|
307
|
+
const editorDOM = document.querySelector(`[data-key="${this.state.value.document.key}"]`);
|
|
308
|
+
|
|
309
|
+
setTimeout(() => {
|
|
310
|
+
if (!this.wrapperRef) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const editorElement =
|
|
315
|
+
!editorDOM || document.activeElement.closest(`[class*="${editorDOM.className}"]`);
|
|
316
|
+
const toolbarElement =
|
|
317
|
+
!this.toolbarRef || document.activeElement.closest(`[class*="${this.toolbarRef.className}"]`);
|
|
318
|
+
const isInCurrentComponent =
|
|
319
|
+
this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);
|
|
320
|
+
|
|
321
|
+
if (!isInCurrentComponent) {
|
|
322
|
+
editorDOM.removeEventListener('blur', this.handleDomBlur);
|
|
323
|
+
this.onBlur(e);
|
|
324
|
+
}
|
|
325
|
+
}, 50);
|
|
326
|
+
};
|
|
327
|
+
|
|
306
328
|
/*
|
|
307
329
|
* Needs to be wrapped otherwise it causes issues because of race conditions
|
|
308
330
|
* Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097
|
|
@@ -339,12 +361,8 @@ export class Editor extends React.Component {
|
|
|
339
361
|
* is focused.
|
|
340
362
|
*/
|
|
341
363
|
if (editorDOM === document.activeElement) {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
this.onBlur(e);
|
|
345
|
-
};
|
|
346
|
-
|
|
347
|
-
editorDOM.addEventListener('blur', handleDomBlur);
|
|
364
|
+
editorDOM.removeEventListener('blur', this.handleDomBlur);
|
|
365
|
+
editorDOM.addEventListener('blur', this.handleDomBlur);
|
|
348
366
|
}
|
|
349
367
|
|
|
350
368
|
this.stashValue();
|
|
@@ -469,9 +487,10 @@ export class Editor extends React.Component {
|
|
|
469
487
|
* HACK ALERT: We should be calling setState here and storing the change data:
|
|
470
488
|
*
|
|
471
489
|
* <code>this.setState({changeData: { key, data}})</code>
|
|
472
|
-
* However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no
|
|
473
|
-
* The issues seem to be related to the promises in onBlur/onFocus. But removing these
|
|
474
|
-
* A major clean up is planned for this component so I've decided to temporarily settle
|
|
490
|
+
* However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no
|
|
491
|
+
* more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these
|
|
492
|
+
* brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle
|
|
493
|
+
* on this hack rather than spend more time on this.
|
|
475
494
|
*/
|
|
476
495
|
|
|
477
496
|
// Uncomment this line to see the bug described above.
|
|
@@ -522,6 +541,11 @@ export class Editor extends React.Component {
|
|
|
522
541
|
}
|
|
523
542
|
}}
|
|
524
543
|
ref={r => (this.editor = r && this.props.editorRef(r))}
|
|
544
|
+
toolbarRef={r => {
|
|
545
|
+
if (r) {
|
|
546
|
+
this.toolbarRef = r;
|
|
547
|
+
}
|
|
548
|
+
}}
|
|
525
549
|
value={value}
|
|
526
550
|
focus={this.focus}
|
|
527
551
|
onKeyDown={onKeyDown}
|
|
@@ -19,6 +19,7 @@ export class EditorAndToolbar extends React.Component {
|
|
|
19
19
|
onChange: PropTypes.func.isRequired,
|
|
20
20
|
onDone: PropTypes.func.isRequired,
|
|
21
21
|
onDataChange: PropTypes.func,
|
|
22
|
+
toolbarRef: PropTypes.func,
|
|
22
23
|
focusedNode: SlatePropTypes.node,
|
|
23
24
|
readOnly: PropTypes.bool,
|
|
24
25
|
disableUnderline: PropTypes.bool,
|
|
@@ -54,7 +55,8 @@ export class EditorAndToolbar extends React.Component {
|
|
|
54
55
|
disableUnderline,
|
|
55
56
|
pluginProps,
|
|
56
57
|
toolbarOpts,
|
|
57
|
-
onDataChange
|
|
58
|
+
onDataChange,
|
|
59
|
+
toolbarRef
|
|
58
60
|
} = this.props;
|
|
59
61
|
|
|
60
62
|
const inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined);
|
|
@@ -95,6 +97,7 @@ export class EditorAndToolbar extends React.Component {
|
|
|
95
97
|
onChange={onChange}
|
|
96
98
|
onDone={onDone}
|
|
97
99
|
onDataChange={onDataChange}
|
|
100
|
+
toolbarRef={toolbarRef}
|
|
98
101
|
pluginProps={pluginProps}
|
|
99
102
|
toolbarOpts={toolbarOpts}
|
|
100
103
|
/>
|
|
@@ -43,6 +43,7 @@ export class Toolbar extends React.Component {
|
|
|
43
43
|
plugin: PropTypes.object,
|
|
44
44
|
onImageClick: PropTypes.func,
|
|
45
45
|
onDone: PropTypes.func.isRequired,
|
|
46
|
+
toolbarRef: PropTypes.func.isRequired,
|
|
46
47
|
classes: PropTypes.object.isRequired,
|
|
47
48
|
isFocused: PropTypes.bool,
|
|
48
49
|
autoWidth: PropTypes.bool,
|
|
@@ -52,6 +53,7 @@ export class Toolbar extends React.Component {
|
|
|
52
53
|
position: PropTypes.oneOf(['bottom', 'top']),
|
|
53
54
|
alignment: PropTypes.oneOf(['left', 'right']),
|
|
54
55
|
alwaysVisible: PropTypes.bool,
|
|
56
|
+
ref: PropTypes.obj,
|
|
55
57
|
showDone: PropTypes.bool
|
|
56
58
|
}),
|
|
57
59
|
onDataChange: PropTypes.func
|
|
@@ -133,7 +135,8 @@ export class Toolbar extends React.Component {
|
|
|
133
135
|
autoWidth,
|
|
134
136
|
onChange,
|
|
135
137
|
isFocused,
|
|
136
|
-
onDone
|
|
138
|
+
onDone,
|
|
139
|
+
toolbarRef
|
|
137
140
|
} = this.props;
|
|
138
141
|
|
|
139
142
|
const node = findSingleNode(value);
|
|
@@ -223,7 +226,7 @@ export class Toolbar extends React.Component {
|
|
|
223
226
|
});
|
|
224
227
|
|
|
225
228
|
return (
|
|
226
|
-
<div className={names} style={extraStyles} onClick={this.onClick}>
|
|
229
|
+
<div className={names} style={extraStyles} onClick={this.onClick} ref={toolbarRef}>
|
|
227
230
|
{CustomToolbar ? (
|
|
228
231
|
<CustomToolbar
|
|
229
232
|
node={node}
|