@pie-lib/editable-html 9.1.6 → 9.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/lib/editor.js +36 -20
- package/lib/editor.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +3 -0
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/media/index.js +47 -4
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +238 -27
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +3 -1
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +14 -4
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +1 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/package.json +3 -3
- package/src/editor.jsx +13 -2
- package/src/plugins/image/insert-image-handler.js +3 -1
- package/src/plugins/media/index.jsx +46 -6
- package/src/plugins/media/media-dialog.js +285 -89
- package/src/plugins/media/media-toolbar.jsx +7 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +15 -7
- package/src/plugins/toolbar/index.jsx +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,40 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [9.2.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@9.2.0...@pie-lib/editable-html@9.2.1) (2022-09-28)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* fire add image method when copy-paste image is used ([23d525e](https://github.com/pie-framework/pie-lib/commit/23d525efda2d41a8bfd603460b4cc4fda5d2a184))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [9.2.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@9.1.6...@pie-lib/editable-html@9.2.0) (2022-09-28)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **editable-html, graphing:** Add support to remove scrollbar from editable-html and removed scrollbar from graphing labels PD-1968 ([d04a0d3](https://github.com/pie-framework/pie-lib/commit/d04a0d3bc66d4b861f60b24198301459c15bd151))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* add upload logic in pie lib (wip) PD-23-updated ([c666f68](https://github.com/pie-framework/pie-lib/commit/c666f68682bf4e9746cea3d7e18c1b1e1948131d))
|
|
28
|
+
* add upload logic in pie lib (wip) PD-23-updated ([0ece29e](https://github.com/pie-framework/pie-lib/commit/0ece29e256ee7d7c84202d1be97244e7d4b70411))
|
|
29
|
+
* hide edit uploaded sound in editable-html for now ([88882e6](https://github.com/pie-framework/pie-lib/commit/88882e6704f5f5f889328666a9b0fe03554339cd))
|
|
30
|
+
* UI improvements and bit of cleanup for PD-23-updated ([37e88e8](https://github.com/pie-framework/pie-lib/commit/37e88e8fb04698eadb805c26b5ee2c57cc0b51a8))
|
|
31
|
+
* **editable-html:** allow audio file upload (editable-html & rendering logic) ([f5df32d](https://github.com/pie-framework/pie-lib/commit/f5df32d1e53859435556f866e8727fef077896d4))
|
|
32
|
+
* **editable-html:** allow audio file upload (modal logic) ([f57cff1](https://github.com/pie-framework/pie-lib/commit/f57cff12d861d1182ab2fa84c8ce2a89f144b222))
|
|
33
|
+
* **editable-html:** finalize audio upload implementation (it works via new prop `pieApi: { token, host }`) PD-23 ([4fa7389](https://github.com/pie-framework/pie-lib/commit/4fa7389e5a6eff8b58c9d893424f82197b574f02))
|
|
34
|
+
* **graphing, plot:** moved graphing labels to plot package + fixed math input + added support for labels rotation PD-1962 ([a85ec39](https://github.com/pie-framework/pie-lib/commit/a85ec3911dd1f6bc89e4eb20a19ef8f957deebf1))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
6
40
|
## [9.1.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@9.1.5...@pie-lib/editable-html@9.1.6) (2022-09-14)
|
|
7
41
|
|
|
8
42
|
**Note:** Version bump only for package @pie-lib/editable-html
|
package/lib/editor.js
CHANGED
|
@@ -67,6 +67,8 @@ var _renderUi = require("@pie-lib/render-ui");
|
|
|
67
67
|
|
|
68
68
|
var _slatePlainSerializer = _interopRequireDefault(require("slate-plain-serializer"));
|
|
69
69
|
|
|
70
|
+
var _insertImageHandler = _interopRequireDefault(require("./plugins/image/insert-image-handler"));
|
|
71
|
+
|
|
70
72
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
71
73
|
|
|
72
74
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -143,6 +145,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
143
145
|
* To minimize converting html -> state -> html
|
|
144
146
|
* We only emit markup once 'done' is clicked.
|
|
145
147
|
*/
|
|
148
|
+
disableScrollbar: !!props.disableScrollbar,
|
|
146
149
|
disableUnderline: props.disableUnderline,
|
|
147
150
|
autoWidth: props.autoWidthToolbar,
|
|
148
151
|
onDone: function onDone() {
|
|
@@ -203,7 +206,8 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
203
206
|
createChange: function createChange() {
|
|
204
207
|
return _this.state.value.change();
|
|
205
208
|
},
|
|
206
|
-
onChange: _this.onChange
|
|
209
|
+
onChange: _this.onChange,
|
|
210
|
+
uploadSoundSupport: props.uploadSoundSupport
|
|
207
211
|
}
|
|
208
212
|
});
|
|
209
213
|
});
|
|
@@ -503,7 +507,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
503
507
|
});
|
|
504
508
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDropPaste", /*#__PURE__*/function () {
|
|
505
509
|
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(event, change, dropContext) {
|
|
506
|
-
var editor, transfer, file, type, fragment, text, src, inline, range, ch, _change$value, _document, selection, startBlock, defaultBlock, defaultMarks, frag;
|
|
510
|
+
var editor, transfer, file, type, fragment, text, src, inline, range, ch, handler, _change$value, _document, selection, startBlock, defaultBlock, defaultMarks, frag;
|
|
507
511
|
|
|
508
512
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
509
513
|
while (1) {
|
|
@@ -517,7 +521,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
517
521
|
text = transfer.text;
|
|
518
522
|
|
|
519
523
|
if (!(file && (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png'))) {
|
|
520
|
-
_context.next =
|
|
524
|
+
_context.next = 27;
|
|
521
525
|
break;
|
|
522
526
|
}
|
|
523
527
|
|
|
@@ -559,52 +563,58 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
559
563
|
|
|
560
564
|
_this.onChange(ch);
|
|
561
565
|
|
|
562
|
-
|
|
566
|
+
handler = new _insertImageHandler["default"](inline, function () {
|
|
567
|
+
return _this.state.value;
|
|
568
|
+
}, _this.onChange, true);
|
|
569
|
+
|
|
570
|
+
_this.props.imageSupport.add(handler);
|
|
571
|
+
|
|
572
|
+
_context.next = 25;
|
|
563
573
|
break;
|
|
564
574
|
|
|
565
|
-
case
|
|
566
|
-
_context.prev =
|
|
575
|
+
case 22:
|
|
576
|
+
_context.prev = 22;
|
|
567
577
|
_context.t0 = _context["catch"](9);
|
|
568
578
|
log('[onDropPaste] error: ', _context.t0);
|
|
569
579
|
|
|
570
|
-
case
|
|
571
|
-
_context.next =
|
|
580
|
+
case 25:
|
|
581
|
+
_context.next = 41;
|
|
572
582
|
break;
|
|
573
583
|
|
|
574
|
-
case
|
|
584
|
+
case 27:
|
|
575
585
|
if (!(type === 'fragment')) {
|
|
576
|
-
_context.next =
|
|
586
|
+
_context.next = 31;
|
|
577
587
|
break;
|
|
578
588
|
}
|
|
579
589
|
|
|
580
590
|
change.insertFragment(fragment);
|
|
581
|
-
_context.next =
|
|
591
|
+
_context.next = 41;
|
|
582
592
|
break;
|
|
583
593
|
|
|
584
|
-
case
|
|
594
|
+
case 31:
|
|
585
595
|
if (!(type === 'text' || type === 'html')) {
|
|
586
|
-
_context.next =
|
|
596
|
+
_context.next = 41;
|
|
587
597
|
break;
|
|
588
598
|
}
|
|
589
599
|
|
|
590
600
|
if (text) {
|
|
591
|
-
_context.next =
|
|
601
|
+
_context.next = 34;
|
|
592
602
|
break;
|
|
593
603
|
}
|
|
594
604
|
|
|
595
605
|
return _context.abrupt("return");
|
|
596
606
|
|
|
597
|
-
case
|
|
607
|
+
case 34:
|
|
598
608
|
_change$value = change.value, _document = _change$value.document, selection = _change$value.selection, startBlock = _change$value.startBlock;
|
|
599
609
|
|
|
600
610
|
if (!startBlock.isVoid) {
|
|
601
|
-
_context.next =
|
|
611
|
+
_context.next = 37;
|
|
602
612
|
break;
|
|
603
613
|
}
|
|
604
614
|
|
|
605
615
|
return _context.abrupt("return");
|
|
606
616
|
|
|
607
|
-
case
|
|
617
|
+
case 37:
|
|
608
618
|
defaultBlock = startBlock;
|
|
609
619
|
defaultMarks = _document.getInsertMarksAtRange(selection);
|
|
610
620
|
frag = _slatePlainSerializer["default"].deserialize(text, {
|
|
@@ -613,12 +623,12 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
613
623
|
}).document;
|
|
614
624
|
change.insertFragment(frag);
|
|
615
625
|
|
|
616
|
-
case
|
|
626
|
+
case 41:
|
|
617
627
|
case "end":
|
|
618
628
|
return _context.stop();
|
|
619
629
|
}
|
|
620
630
|
}
|
|
621
|
-
}, _callee, null, [[9,
|
|
631
|
+
}, _callee, null, [[9, 22]]);
|
|
622
632
|
}));
|
|
623
633
|
|
|
624
634
|
return function (_x, _x2, _x3) {
|
|
@@ -642,7 +652,8 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
642
652
|
maxWidth: '100%',
|
|
643
653
|
whiteSpace: 'nowrap',
|
|
644
654
|
opacity: '0.33',
|
|
645
|
-
pointerEvents: 'none'
|
|
655
|
+
pointerEvents: 'none',
|
|
656
|
+
userSelect: 'none'
|
|
646
657
|
}
|
|
647
658
|
}, editor.props.placeholder);
|
|
648
659
|
});
|
|
@@ -838,6 +849,10 @@ exports.Editor = Editor;
|
|
|
838
849
|
focus: _propTypes["default"].func.isRequired,
|
|
839
850
|
value: _slatePropTypes["default"].value.isRequired,
|
|
840
851
|
imageSupport: _propTypes["default"].object,
|
|
852
|
+
uploadSoundSupport: _propTypes["default"].shape({
|
|
853
|
+
add: _propTypes["default"].func,
|
|
854
|
+
"delete": _propTypes["default"].func
|
|
855
|
+
}),
|
|
841
856
|
charactersLimit: _propTypes["default"].number,
|
|
842
857
|
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
843
858
|
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
@@ -848,6 +863,7 @@ exports.Editor = Editor;
|
|
|
848
863
|
disabled: _propTypes["default"].bool,
|
|
849
864
|
spellCheck: _propTypes["default"].bool,
|
|
850
865
|
nonEmpty: _propTypes["default"].bool,
|
|
866
|
+
disableScrollbar: _propTypes["default"].bool,
|
|
851
867
|
disableUnderline: _propTypes["default"].bool,
|
|
852
868
|
autoWidthToolbar: _propTypes["default"].bool,
|
|
853
869
|
pluginProps: _propTypes["default"].any,
|
package/lib/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","image","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","relatedTarget","target","node","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","preBlurValue","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","stateValue","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","file","files","fragment","inline","Inline","create","isVoid","loading","range","select","ch","insertInline","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","display","width","maxWidth","whiteSpace","opacity","pointerEvents","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","equals","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","number","oneOfType","string","any","shape","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":"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","sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Plain from 'slate-plain-serializer';\n\nimport { getBase64 } from './serialization';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState(\n { preBlurValue: this.state.value, focusedNode: !node ? null : node },\n this.handleBlur.bind(this, resolve)\n );\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n const { value: stateValue } = this.state;\n\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n\n if (stateValue.isFocused) {\n this.onBlur(e);\n }\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\n const { value } = change;\n const { charactersLimit } = this.props;\n\n if (\n value &&\n value.document &&\n value.document.text &&\n value.document.text.length > charactersLimit\n ) {\n return;\n }\n\n this.setState({ value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n getFocusedValue = () => {\n if (this.state.value.isFocused) {\n return this.state.value;\n }\n\n return this.state.preBlurValue;\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n onDropPaste = async (event, change, dropContext) => {\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files && transfer.files[0];\n\n const type = transfer.type;\n const fragment = transfer.fragment;\n const text = transfer.text;\n\n if (\n file &&\n (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')\n ) {\n if (!this.props.imageSupport) {\n return;\n }\n try {\n log('[onDropPaste]');\n const src = await getBase64(file);\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loading: false,\n src\n }\n });\n\n if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n\n const ch = change.insertInline(inline);\n this.onChange(ch);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\n } else if (type === 'fragment') {\n change.insertFragment(fragment);\n } else if (type === 'text' || type === 'html') {\n if (!text) {\n return;\n }\n const {\n value: { document, selection, startBlock }\n } = change;\n\n if (startBlock.isVoid) {\n return;\n }\n\n const defaultBlock = startBlock;\n const defaultMarks = document.getInsertMarksAtRange(selection);\n const frag = Plain.deserialize(text, {\n defaultBlock,\n defaultMarks\n }).document;\n change.insertFragment(frag);\n }\n };\n\n renderPlaceholder = props => {\n const { editor } = props;\n const { document } = editor.value;\n\n if (!editor.props.placeholder || document.text !== '' || document.nodes.size !== 1) {\n return false;\n }\n\n return (\n <span\n contentEditable={false}\n style={{\n display: 'inline-block',\n width: 'fit-content', // for centering the placeholder if text-align is set to center\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.33',\n pointerEvents: 'none'\n }}\n >\n {editor.props.placeholder}\n </span>\n );\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n getFocusedValue={this.getFocusedValue}\n onBlur={this.onBlur}\n onDrop={(event, editor) => this.onDropPaste(event, editor, true)}\n onPaste={(event, editor) => this.onDropPaste(event, editor)}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classNames(\n {\n [classes.noPadding]: toolbarOpts && toolbarOpts.noBorder\n },\n classes.slateEditor\n )}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n renderPlaceholder={this.renderPlaceholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n },\n noPadding: {\n padding: '0 !important'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|
|
1
|
+
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","image","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableScrollbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","uploadSoundSupport","relatedTarget","target","node","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","preBlurValue","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","stateValue","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","file","files","fragment","inline","Inline","create","isVoid","loading","range","select","ch","insertInline","InsertImageHandler","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","display","width","maxWidth","whiteSpace","opacity","pointerEvents","userSelect","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","equals","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","shape","number","oneOfType","string","any","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":"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","sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Plain from 'slate-plain-serializer';\n\nimport { getBase64 } from './serialization';\nimport InsertImageHandler from './plugins/image/insert-image-handler';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func\n }),\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableScrollbar: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableScrollbar: !!props.disableScrollbar,\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange,\n uploadSoundSupport: props.uploadSoundSupport\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState(\n { preBlurValue: this.state.value, focusedNode: !node ? null : node },\n this.handleBlur.bind(this, resolve)\n );\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n const { value: stateValue } = this.state;\n\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n\n if (stateValue.isFocused) {\n this.onBlur(e);\n }\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\n const { value } = change;\n const { charactersLimit } = this.props;\n\n if (\n value &&\n value.document &&\n value.document.text &&\n value.document.text.length > charactersLimit\n ) {\n return;\n }\n\n this.setState({ value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n getFocusedValue = () => {\n if (this.state.value.isFocused) {\n return this.state.value;\n }\n\n return this.state.preBlurValue;\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n onDropPaste = async (event, change, dropContext) => {\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files && transfer.files[0];\n\n const type = transfer.type;\n const fragment = transfer.fragment;\n const text = transfer.text;\n\n if (\n file &&\n (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')\n ) {\n if (!this.props.imageSupport) {\n return;\n }\n try {\n log('[onDropPaste]');\n const src = await getBase64(file);\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loading: false,\n src\n }\n });\n\n if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n\n const ch = change.insertInline(inline);\n this.onChange(ch);\n const handler = new InsertImageHandler(inline, () => this.state.value, this.onChange, true);\n this.props.imageSupport.add(handler);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\n } else if (type === 'fragment') {\n change.insertFragment(fragment);\n } else if (type === 'text' || type === 'html') {\n if (!text) {\n return;\n }\n const {\n value: { document, selection, startBlock }\n } = change;\n\n if (startBlock.isVoid) {\n return;\n }\n\n const defaultBlock = startBlock;\n const defaultMarks = document.getInsertMarksAtRange(selection);\n const frag = Plain.deserialize(text, {\n defaultBlock,\n defaultMarks\n }).document;\n change.insertFragment(frag);\n }\n };\n\n renderPlaceholder = props => {\n const { editor } = props;\n const { document } = editor.value;\n\n if (!editor.props.placeholder || document.text !== '' || document.nodes.size !== 1) {\n return false;\n }\n\n return (\n <span\n contentEditable={false}\n style={{\n display: 'inline-block',\n width: 'fit-content', // for centering the placeholder if text-align is set to center\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.33',\n pointerEvents: 'none',\n userSelect: 'none'\n }}\n >\n {editor.props.placeholder}\n </span>\n );\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n getFocusedValue={this.getFocusedValue}\n onBlur={this.onBlur}\n onDrop={(event, editor) => this.onDropPaste(event, editor, true)}\n onPaste={(event, editor) => this.onDropPaste(event, editor)}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classNames(\n {\n [classes.noPadding]: toolbarOpts && toolbarOpts.noBorder\n },\n classes.slateEditor\n )}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n renderPlaceholder={this.renderPlaceholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n },\n noPadding: {\n padding: '0 !important'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|
|
@@ -21,14 +21,17 @@ var log = (0, _debug["default"])('@pie-lib:editable-html:image:insert-image-hand
|
|
|
21
21
|
* @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image
|
|
22
22
|
* @param {Function} getValue - a function to return the value of the editor
|
|
23
23
|
* @param {Function} onChange - callback to notify changes applied by the handler
|
|
24
|
+
* @param {Boolean} isPasted - a boolean that keeps track if the file is pasted
|
|
24
25
|
*/
|
|
25
26
|
|
|
26
27
|
var InsertImageHandler = /*#__PURE__*/function () {
|
|
27
28
|
function InsertImageHandler(placeholderBlock, getValue, onChange) {
|
|
29
|
+
var isPasted = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
28
30
|
(0, _classCallCheck2["default"])(this, InsertImageHandler);
|
|
29
31
|
this.placeholderBlock = placeholderBlock;
|
|
30
32
|
this.getValue = getValue;
|
|
31
33
|
this.onChange = onChange;
|
|
34
|
+
this.isPasted = isPasted;
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
(0, _createClass2["default"])(InsertImageHandler, [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/image/insert-image-handler.js"],"names":["log","InsertImageHandler","placeholderBlock","getValue","onChange","value","document","directChild","getChild","key","child","getDescendant","Error","c","change","removeNodeByKey","err","src","console","getPlaceholderInDocument","data","merge","Data","create","loaded","percent","setNodeByKey","file","reader","FileReader","onload","dataURL","result","set","readAsDataURL","bytes","total"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAEA,IAAMA,GAAG,GAAG,uBAAM,mDAAN,CAAZ;AAEA;AACA;AACA;AACA;AACA;AACA;;IACMC,kB;AACJ,8BAAYC,gBAAZ,EAA8BC,QAA9B,EAAwCC,QAAxC,
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/image/insert-image-handler.js"],"names":["log","InsertImageHandler","placeholderBlock","getValue","onChange","isPasted","value","document","directChild","getChild","key","child","getDescendant","Error","c","change","removeNodeByKey","err","src","console","getPlaceholderInDocument","data","merge","Data","create","loaded","percent","setNodeByKey","file","reader","FileReader","onload","dataURL","result","set","readAsDataURL","bytes","total"],"mappings":"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","sourcesContent":["import { Data } from 'slate';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:image:insert-image-handler');\n\n/**\n * Handles user selection, insertion (or cancellation) of an image into the editor.\n * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image\n * @param {Function} getValue - a function to return the value of the editor\n * @param {Function} onChange - callback to notify changes applied by the handler\n * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted\n */\nclass InsertImageHandler {\n constructor(placeholderBlock, getValue, onChange, isPasted = false) {\n this.placeholderBlock = placeholderBlock;\n this.getValue = getValue;\n this.onChange = onChange;\n this.isPasted = isPasted;\n }\n\n getPlaceholderInDocument(value) {\n const { document } = value;\n const directChild = document.getChild(this.placeholderBlock.key);\n\n if (directChild) {\n return directChild;\n }\n\n const child = document.getDescendant(this.placeholderBlock.key);\n\n if (child) {\n return child;\n } else {\n //eslint-disable-next-line\n throw new Error(\"insert-image: Can't find placeholder!\");\n }\n }\n\n cancel() {\n log('insert cancelled');\n const c = this.getValue()\n .change()\n .removeNodeByKey(this.placeholderBlock.key);\n this.onChange(c);\n }\n\n done(err, src) {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n } else {\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.merge(Data.create({ loaded: true, src, percent: 100 }));\n\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n }\n }\n\n /**\n * Notify handler that the user chose a file - will create a change with a preview in the editor.\n *\n * @param {File} file - the file that the user chose using a file input.\n */\n fileChosen(file) {\n if (!file) {\n return;\n }\n\n log('[fileChosen] file: ', file);\n const reader = new FileReader();\n reader.onload = () => {\n const value = this.getValue();\n const dataURL = reader.result;\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.set('src', dataURL);\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n };\n reader.readAsDataURL(file);\n }\n\n progress(percent, bytes, total) {\n log('progress: ', percent, bytes, total);\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.set('percent', percent);\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n }\n}\n\nexport default InsertImageHandler;\n"],"file":"insert-image-handler.js"}
|
|
@@ -32,8 +32,8 @@ var _mediaToolbar = _interopRequireDefault(require("./media-toolbar"));
|
|
|
32
32
|
|
|
33
33
|
var _mediaWrapper = _interopRequireDefault(require("./media-wrapper"));
|
|
34
34
|
|
|
35
|
-
var _excluded = ["type", "callback"],
|
|
36
|
-
_excluded2 = ["src", "height", "width", "editing"];
|
|
35
|
+
var _excluded = ["type", "callback", "opts"],
|
|
36
|
+
_excluded2 = ["src", "height", "width", "editing", "tag"];
|
|
37
37
|
|
|
38
38
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
39
39
|
|
|
@@ -52,6 +52,7 @@ var insertDialog = function insertDialog(props) {
|
|
|
52
52
|
var newEl = document.createElement('div');
|
|
53
53
|
var type = props.type,
|
|
54
54
|
callback = props.callback,
|
|
55
|
+
opts = props.opts,
|
|
55
56
|
rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
56
57
|
var initialBodyOverflow = document.body.style.overflow;
|
|
57
58
|
removeDialogs();
|
|
@@ -65,6 +66,7 @@ var insertDialog = function insertDialog(props) {
|
|
|
65
66
|
};
|
|
66
67
|
|
|
67
68
|
var el = /*#__PURE__*/_react["default"].createElement(_mediaDialog["default"], (0, _extends2["default"])({}, rest, {
|
|
69
|
+
uploadSoundSupport: opts.uploadSoundSupport,
|
|
68
70
|
type: type,
|
|
69
71
|
disablePortal: true,
|
|
70
72
|
open: true,
|
|
@@ -104,6 +106,7 @@ function MediaPlugin(type, opts) {
|
|
|
104
106
|
onChange(change);
|
|
105
107
|
insertDialog({
|
|
106
108
|
type: type,
|
|
109
|
+
opts: opts,
|
|
107
110
|
callback: function callback(val, data) {
|
|
108
111
|
var nodeIsThere = change.value.document.findDescendant(function (d) {
|
|
109
112
|
return d.key === inline.key;
|
|
@@ -152,6 +155,7 @@ function MediaPlugin(type, opts) {
|
|
|
152
155
|
height = jsonData.height,
|
|
153
156
|
width = jsonData.width,
|
|
154
157
|
editing = jsonData.editing,
|
|
158
|
+
tag = jsonData.tag,
|
|
155
159
|
rest = (0, _objectWithoutProperties2["default"])(jsonData, _excluded2);
|
|
156
160
|
|
|
157
161
|
var handleEdit = function handleEdit() {
|
|
@@ -165,6 +169,7 @@ function MediaPlugin(type, opts) {
|
|
|
165
169
|
insertDialog(_objectSpread(_objectSpread({}, jsonData), {}, {
|
|
166
170
|
edit: true,
|
|
167
171
|
type: type,
|
|
172
|
+
opts: opts,
|
|
168
173
|
callback: function callback(val, data) {
|
|
169
174
|
var key = node.key;
|
|
170
175
|
var nodeIsThere = change.value.document.findDescendant(function (d) {
|
|
@@ -204,6 +209,22 @@ function MediaPlugin(type, opts) {
|
|
|
204
209
|
style.height = "".concat(height, "px");
|
|
205
210
|
}
|
|
206
211
|
|
|
212
|
+
if (tag === 'audio') {
|
|
213
|
+
return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], (0, _extends2["default"])({
|
|
214
|
+
editor: true,
|
|
215
|
+
"data-type": type,
|
|
216
|
+
width: style.width
|
|
217
|
+
}, rest), /*#__PURE__*/_react["default"].createElement("audio", {
|
|
218
|
+
controls: "controls"
|
|
219
|
+
}, /*#__PURE__*/_react["default"].createElement("source", {
|
|
220
|
+
type: "audio/mp3",
|
|
221
|
+
src: src
|
|
222
|
+
})), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
|
|
223
|
+
hideEdit: true,
|
|
224
|
+
onRemove: handleDelete
|
|
225
|
+
}));
|
|
226
|
+
}
|
|
227
|
+
|
|
207
228
|
return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], (0, _extends2["default"])({
|
|
208
229
|
editor: true,
|
|
209
230
|
"data-type": type,
|
|
@@ -257,8 +278,19 @@ var serialization = {
|
|
|
257
278
|
/*, next*/
|
|
258
279
|
) {
|
|
259
280
|
var type = el.dataset && el.dataset.type;
|
|
281
|
+
var tag = 'iframe';
|
|
282
|
+
var src;
|
|
260
283
|
var typeIndex = types.indexOf(type);
|
|
261
|
-
|
|
284
|
+
|
|
285
|
+
if (typeIndex < 0) {
|
|
286
|
+
if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {
|
|
287
|
+
type = 'audio';
|
|
288
|
+
tag = 'audio';
|
|
289
|
+
src = el.firstChild.getAttribute('src');
|
|
290
|
+
} else {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
262
294
|
|
|
263
295
|
var _ref = el.dataset || {},
|
|
264
296
|
ends = _ref.ends,
|
|
@@ -275,7 +307,8 @@ var serialization = {
|
|
|
275
307
|
type: type,
|
|
276
308
|
isVoid: true,
|
|
277
309
|
data: {
|
|
278
|
-
|
|
310
|
+
tag: tag,
|
|
311
|
+
src: src || el.getAttribute('src'),
|
|
279
312
|
editing: editing,
|
|
280
313
|
ends: ends,
|
|
281
314
|
height: height,
|
|
@@ -296,6 +329,7 @@ var serialization = {
|
|
|
296
329
|
var type = types[typeIndex];
|
|
297
330
|
var data = object.data;
|
|
298
331
|
var editing = data.get('editing');
|
|
332
|
+
var tag = data.get('tag');
|
|
299
333
|
var ends = data.get('ends');
|
|
300
334
|
var src = data.get('src');
|
|
301
335
|
var starts = data.get('starts');
|
|
@@ -325,6 +359,15 @@ var serialization = {
|
|
|
325
359
|
src: src
|
|
326
360
|
});
|
|
327
361
|
|
|
362
|
+
if (tag === 'audio') {
|
|
363
|
+
return /*#__PURE__*/_react["default"].createElement("audio", {
|
|
364
|
+
controls: "controls"
|
|
365
|
+
}, /*#__PURE__*/_react["default"].createElement("source", {
|
|
366
|
+
type: "audio/mp3",
|
|
367
|
+
src: src
|
|
368
|
+
}));
|
|
369
|
+
}
|
|
370
|
+
|
|
328
371
|
return /*#__PURE__*/_react["default"].createElement("iframe", (0, _extends2["default"])({
|
|
329
372
|
"data-type": type,
|
|
330
373
|
src: src
|