@pie-lib/editable-html 7.17.4-next.592 → 7.17.4-next.597

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/editor.js CHANGED
@@ -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; }
@@ -505,7 +507,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
505
507
  });
506
508
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDropPaste", /*#__PURE__*/function () {
507
509
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(event, change, dropContext) {
508
- 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;
509
511
 
510
512
  return _regenerator["default"].wrap(function _callee$(_context) {
511
513
  while (1) {
@@ -519,7 +521,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
519
521
  text = transfer.text;
520
522
 
521
523
  if (!(file && (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png'))) {
522
- _context.next = 25;
524
+ _context.next = 27;
523
525
  break;
524
526
  }
525
527
 
@@ -561,52 +563,58 @@ var Editor = /*#__PURE__*/function (_React$Component) {
561
563
 
562
564
  _this.onChange(ch);
563
565
 
564
- _context.next = 23;
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;
565
573
  break;
566
574
 
567
- case 20:
568
- _context.prev = 20;
575
+ case 22:
576
+ _context.prev = 22;
569
577
  _context.t0 = _context["catch"](9);
570
578
  log('[onDropPaste] error: ', _context.t0);
571
579
 
572
- case 23:
573
- _context.next = 39;
580
+ case 25:
581
+ _context.next = 41;
574
582
  break;
575
583
 
576
- case 25:
584
+ case 27:
577
585
  if (!(type === 'fragment')) {
578
- _context.next = 29;
586
+ _context.next = 31;
579
587
  break;
580
588
  }
581
589
 
582
590
  change.insertFragment(fragment);
583
- _context.next = 39;
591
+ _context.next = 41;
584
592
  break;
585
593
 
586
- case 29:
594
+ case 31:
587
595
  if (!(type === 'text' || type === 'html')) {
588
- _context.next = 39;
596
+ _context.next = 41;
589
597
  break;
590
598
  }
591
599
 
592
600
  if (text) {
593
- _context.next = 32;
601
+ _context.next = 34;
594
602
  break;
595
603
  }
596
604
 
597
605
  return _context.abrupt("return");
598
606
 
599
- case 32:
607
+ case 34:
600
608
  _change$value = change.value, _document = _change$value.document, selection = _change$value.selection, startBlock = _change$value.startBlock;
601
609
 
602
610
  if (!startBlock.isVoid) {
603
- _context.next = 35;
611
+ _context.next = 37;
604
612
  break;
605
613
  }
606
614
 
607
615
  return _context.abrupt("return");
608
616
 
609
- case 35:
617
+ case 37:
610
618
  defaultBlock = startBlock;
611
619
  defaultMarks = _document.getInsertMarksAtRange(selection);
612
620
  frag = _slatePlainSerializer["default"].deserialize(text, {
@@ -615,12 +623,12 @@ var Editor = /*#__PURE__*/function (_React$Component) {
615
623
  }).document;
616
624
  change.insertFragment(frag);
617
625
 
618
- case 39:
626
+ case 41:
619
627
  case "end":
620
628
  return _context.stop();
621
629
  }
622
630
  }
623
- }, _callee, null, [[9, 20]]);
631
+ }, _callee, null, [[9, 22]]);
624
632
  }));
625
633
 
626
634
  return function (_x, _x2, _x3) {
package/lib/editor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","names":["log","debug","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","buildPlugins","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","findNode","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","preBlurValue","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","stateValue","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","getEventTransfer","file","files","fragment","getBase64","inline","Inline","create","isVoid","loading","range","getEventRange","select","ch","insertInline","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","display","width","maxWidth","whiteSpace","opacity","pointerEvents","userSelect","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","equals","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","shape","number","oneOfType","string","any","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop","withStyles"],"sources":["../src/editor.jsx"],"sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Plain from 'slate-plain-serializer';\n\nimport { getBase64 } from './serialization';\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 } 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"],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","names":["log","debug","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","buildPlugins","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","findNode","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","preBlurValue","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","stateValue","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","getEventTransfer","file","files","fragment","getBase64","inline","Inline","create","isVoid","loading","range","getEventRange","select","ch","insertInline","InsertImageHandler","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","display","width","maxWidth","whiteSpace","opacity","pointerEvents","userSelect","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","equals","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","noBorder","renderPlaceholder","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","shape","number","oneOfType","string","any","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop","withStyles"],"sources":["../src/editor.jsx"],"sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Plain from 'slate-plain-serializer';\n\nimport { getBase64 } from './serialization';\nimport InsertImageHandler from './plugins/image/insert-image-handler';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\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"],"mappings":"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"}
@@ -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,"file":"insert-image-handler.js","names":["log","debug","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"],"sources":["../../../src/plugins/image/insert-image-handler.js"],"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 */\nclass InsertImageHandler {\n constructor(placeholderBlock, getValue, onChange) {\n this.placeholderBlock = placeholderBlock;\n this.getValue = getValue;\n this.onChange = onChange;\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"],"mappings":"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"}
1
+ {"version":3,"file":"insert-image-handler.js","names":["log","debug","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"],"sources":["../../../src/plugins/image/insert-image-handler.js"],"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"],"mappings":"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"}
@@ -220,7 +220,7 @@ function MediaPlugin(type, opts) {
220
220
  type: "audio/mp3",
221
221
  src: src
222
222
  })), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
223
- onEdit: handleEdit,
223
+ hideEdit: true,
224
224
  onRemove: handleDelete
225
225
  }));
226
226
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["log","debug","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","opts","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","uploadSoundSupport","ReactDOM","render","appendChild","types","MediaPlugin","toolbar","icon","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","firstChild","getAttribute","parseInt","out","serialize","divProps"],"sources":["../../../src/plugins/media/index.jsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach(s => s.remove());\n};\n\nexport const insertDialog = props => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined\n }\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant(d => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n }\n });\n },\n supports: node => node.object === 'inline' && node.type === type\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true\n }\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n d => d.type === type && d.data.get('editing')\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n }\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: node => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant(d => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return change => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach(n => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n }\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url\n }\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url\n };\n const props = {\n ...style,\n src\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["log","debug","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","opts","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","uploadSoundSupport","ReactDOM","render","appendChild","types","MediaPlugin","toolbar","icon","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","firstChild","getAttribute","parseInt","out","serialize","divProps"],"sources":["../../../src/plugins/media/index.jsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach(s => s.remove());\n};\n\nexport const insertDialog = props => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined\n }\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant(d => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n }\n });\n },\n supports: node => node.object === 'inline' && node.type === type\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true\n }\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n d => d.type === type && d.data.get('editing')\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n }\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar hideEdit onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: node => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant(d => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return change => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach(n => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n }\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url\n }\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url\n };\n const props = {\n ...style,\n src\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n }\n};\n"],"mappings":"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"}
@@ -259,7 +259,7 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
259
259
  var isInsertURL = tabValue === 0;
260
260
 
261
261
  if (!val) {
262
- if (fileUpload.localUrl) {
262
+ if (fileUpload.url) {
263
263
  _this.handleRemoveFile();
264
264
  }
265
265
 
@@ -286,7 +286,7 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
286
286
  } else {
287
287
  handleClose(val, {
288
288
  tag: 'audio',
289
- src: fileUpload.localUrl
289
+ src: fileUpload.url
290
290
  });
291
291
  }
292
292
  });
@@ -301,26 +301,20 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
301
301
 
302
302
  _this.setState({
303
303
  fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
304
- uploadIsLoading: true
304
+ error: null,
305
+ loading: true
305
306
  })
306
307
  });
307
308
 
308
309
  fileChosen = e.target.files[0];
309
310
  reader = new FileReader();
310
311
 
311
- _this.setState({
312
- fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
313
- uploadIsLoading: true
314
- })
315
- });
316
-
317
312
  reader.onload = function () {
318
313
  var dataURL = reader.result;
319
314
 
320
315
  _this.setState({
321
316
  fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
322
- localUrl: dataURL,
323
- uploadIsLoading: false
317
+ url: dataURL
324
318
  })
325
319
  });
326
320
  };
@@ -329,12 +323,31 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
329
323
 
330
324
  _this.props.uploadSoundSupport.add({
331
325
  fileChosen: fileChosen,
332
- done: function done(e) {
333
- console.log('add done: ', e);
326
+ done: function done(err, src) {
327
+ log('done: err:', err);
328
+
329
+ if (err) {
330
+ //eslint-disable-next-line
331
+ console.log(err);
332
+
333
+ _this.setState({
334
+ fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
335
+ loading: false,
336
+ error: err
337
+ })
338
+ });
339
+ } else {
340
+ _this.setState({
341
+ fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
342
+ loading: false,
343
+ url: src
344
+ })
345
+ });
346
+ }
334
347
  }
335
348
  });
336
349
 
337
- case 8:
350
+ case 7:
338
351
  case "end":
339
352
  return _context.stop();
340
353
  }
@@ -351,13 +364,24 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
351
364
  while (1) {
352
365
  switch (_context2.prev = _context2.next) {
353
366
  case 0:
354
- _this.props.uploadSoundSupport["delete"](_this.state.fileUpload.localUrl, function (e) {
355
- console.log('delete done', e);
356
- });
367
+ _this.props.uploadSoundSupport["delete"](_this.state.fileUpload.url, function (err) {
368
+ if (err) {
369
+ //eslint-disable-next-line
370
+ console.log(err);
371
+
372
+ _this.setState({
373
+ fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
374
+ error: err
375
+ })
376
+ });
377
+ }
378
+ }); // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes
379
+
357
380
 
358
381
  _this.setState({
359
382
  fileUpload: _objectSpread(_objectSpread({}, _this.state.fileUpload), {}, {
360
- localUrl: ''
383
+ loading: false,
384
+ url: ''
361
385
  })
362
386
  });
363
387
 
@@ -368,7 +392,7 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
368
392
  }
369
393
  }, _callee2);
370
394
  })));
371
- var src = props.src,
395
+ var _src = props.src,
372
396
  _starts = props.starts,
373
397
  _ends = props.ends,
374
398
  _height = props.height,
@@ -379,15 +403,15 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
379
403
  ends: _ends || 0,
380
404
  url: _url,
381
405
  urlToUse: _urlToUse,
382
- formattedUrl: src,
406
+ formattedUrl: _src,
383
407
  height: _height || 315,
384
408
  invalid: false,
385
409
  starts: _starts || 0,
386
410
  width: _width || 560,
387
411
  tabValue: 0,
388
412
  fileUpload: {
389
- uploadIsLoading: false,
390
- localUrl: '',
413
+ loading: false,
414
+ url: '',
391
415
  error: null
392
416
  }
393
417
  };
@@ -431,7 +455,7 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
431
455
  var isYoutube = matchYoutubeUrl(url);
432
456
  var isInsertURL = tabValue === 0;
433
457
  var isUploadMedia = tabValue === 1;
434
- var submitIsDisabled = isInsertURL ? invalid || url === null || url === undefined : !fileUpload.localUrl;
458
+ var submitIsDisabled = isInsertURL ? invalid || url === null || url === undefined : !fileUpload.url;
435
459
  return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
436
460
  classes: {
437
461
  paper: classes.paper
@@ -523,25 +547,25 @@ var MediaDialog = /*#__PURE__*/function (_React$Component) {
523
547
  onChange: this.changeHandler('ends')
524
548
  })))), isUploadMedia && /*#__PURE__*/_react["default"].createElement("div", {
525
549
  className: classes.uploadInput
526
- }, fileUpload.uploadIsLoading ? /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
527
- variant: "subheading"
528
- }, "Loading...") : /*#__PURE__*/_react["default"].createElement("div", null, fileUpload.localUrl ? /*#__PURE__*/_react["default"].createElement("div", {
550
+ }, /*#__PURE__*/_react["default"].createElement("div", null, fileUpload.url ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
529
551
  className: classes.row
530
552
  }, /*#__PURE__*/_react["default"].createElement("audio", {
531
553
  controls: "controls"
532
554
  }, /*#__PURE__*/_react["default"].createElement("source", {
533
555
  type: "audio/mp3",
534
- src: fileUpload.localUrl
556
+ src: fileUpload.url
535
557
  })), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
536
558
  "aria-label": "delete",
537
559
  className: classes.deleteIcon,
538
560
  onClick: this.handleRemoveFile
539
- }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null))) : /*#__PURE__*/_react["default"].createElement("input", {
561
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null))), fileUpload.loading ? /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
562
+ variant: "subheading"
563
+ }, "Loading...") : null) : !fileUpload.loading ? /*#__PURE__*/_react["default"].createElement("input", {
540
564
  accept: "audio/*",
541
565
  className: classes.input,
542
566
  onChange: this.handleUploadFile,
543
567
  type: "file"
544
- }), !!fileUpload.error && /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
568
+ }) : null, !!fileUpload.error && /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
545
569
  className: classes.error,
546
570
  variant: "caption"
547
571
  }, fileUpload.error))))), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
@@ -1 +1 @@
1
- {"version":3,"file":"media-dialog.js","names":["log","debug","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","e","target","value","type","handleStateChange","invalid","regExp","id","replace","val","handleClose","tabValue","fileUpload","isInsertURL","localUrl","handleRemoveFile","height","width","tag","preventDefault","uploadIsLoading","fileChosen","files","reader","FileReader","onload","dataURL","result","readAsDataURL","uploadSoundSupport","add","done","console","error","urlChange","classes","open","disablePortal","edit","isUploadMedia","submitIsDisabled","undefined","paper","handleDone","row","event","root","properties","changeHandler","uploadInput","deleteIcon","input","handleUploadFile","React","Component","PropTypes","object","isRequired","bool","func","shape","string","number","styles","minWidth","padding","display","flexDirection","rowItem","marginRight","cursor","active","color","primary","borderBottom","marginTop","marginLeft","withStyles"],"sources":["../../../src/plugins/media/media-dialog.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { color } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport MuiTabs from '@material-ui/core/Tabs';\nimport MuiTab from '@material-ui/core/Tab';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionDelete from '@material-ui/icons/Delete';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = url => {\n if (!url) {\n return false;\n }\n\n const p = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = url =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url\n );\n\nconst matchSoundCloudUrl = url => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = url => {\n return new Promise(resolve => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then(response => response.json())\n .then(json => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch(err => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio'\n};\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func\n }),\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number\n };\n\n constructor(props) {\n super(props);\n\n const { src, starts, ends, height, url, urlToUse, width } = props;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560,\n tabValue: 0,\n fileUpload: {\n uploadIsLoading: false,\n localUrl: '',\n error: null\n }\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url\n }\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = newState => this.setState(newState, this.formatUrl);\n\n urlChange = e => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then(urlToUse => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value\n });\n })\n .catch(log);\n\n return;\n }\n } else if (type && type === 'video') {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false\n });\n\n return;\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false\n });\n\n return;\n }\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true\n });\n };\n\n changeHandler = type => e => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = val => {\n const { handleClose } = this.props;\n const { tabValue, fileUpload } = this.state;\n const isInsertURL = tabValue === 0;\n\n if (!val) {\n if (fileUpload.localUrl) {\n this.handleRemoveFile();\n }\n\n handleClose(val);\n } else if (isInsertURL) {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n tag: 'iframe',\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl\n });\n } else {\n handleClose(val, {\n tag: 'audio',\n src: fileUpload.localUrl\n });\n }\n };\n\n handleUploadFile = async e => {\n e.preventDefault();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n uploadIsLoading: true\n }\n });\n\n const fileChosen = e.target.files[0];\n\n const reader = new FileReader();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n uploadIsLoading: true\n }\n });\n\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n localUrl: dataURL,\n uploadIsLoading: false\n }\n });\n };\n reader.readAsDataURL(fileChosen);\n\n this.props.uploadSoundSupport.add({\n fileChosen,\n done: e => {\n console.log('add done: ', e);\n }\n });\n };\n\n handleRemoveFile = async () => {\n this.props.uploadSoundSupport.delete(this.state.fileUpload.localUrl, e => {\n console.log('delete done', e);\n });\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n localUrl: ''\n }\n });\n };\n\n render() {\n const { classes, open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const {\n ends,\n height,\n invalid,\n starts,\n width,\n url,\n formattedUrl,\n updating,\n tabValue,\n fileUpload\n } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isInsertURL = tabValue === 0;\n const isUploadMedia = tabValue === 1;\n const submitIsDisabled = isInsertURL\n ? invalid || url === null || url === undefined\n : !fileUpload.localUrl;\n\n return (\n <Dialog\n classes={{\n paper: classes.paper\n }}\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <div>\n <div className={classes.row}>\n <MuiTabs\n indicatorColor=\"primary\"\n value={tabValue}\n onChange={(event, value) => {\n this.setState({ tabValue: value });\n }}\n >\n <MuiTab\n label={type === 'video' ? 'Insert YouTube or Vimeo URL' : 'Insert SoundCloud URL'}\n />\n {uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video' ? (\n <MuiTab label=\"Upload file\" />\n ) : null}\n </MuiTabs>\n </div>\n {isInsertURL && (\n <div>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </DialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </DialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <div className={classes.uploadInput}>\n {fileUpload.uploadIsLoading ? (\n <Typography variant=\"subheading\">Loading...</Typography>\n ) : (\n <div>\n {fileUpload.localUrl ? (\n <div className={classes.row}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={fileUpload.localUrl} />\n </audio>\n <IconButton\n aria-label=\"delete\"\n className={classes.deleteIcon}\n onClick={this.handleRemoveFile}\n >\n <ActionDelete />\n </IconButton>\n </div>\n ) : (\n <input\n accept=\"audio/*\"\n className={classes.input}\n onChange={this.handleUploadFile}\n type=\"file\"\n />\n )}\n {!!fileUpload.error && (\n <Typography className={classes.error} variant=\"caption\">\n {fileUpload.error}\n </Typography>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button disabled={submitIsDisabled} onClick={() => this.handleDone(true)} color=\"primary\">\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nconst styles = () => ({\n paper: {\n minWidth: '500px'\n },\n properties: {\n padding: 0\n },\n row: {\n display: 'flex',\n flexDirection: 'space-between'\n },\n rowItem: {\n marginRight: '12px',\n cursor: 'pointer'\n },\n active: {\n color: color.primary(),\n borderBottom: `2px solid ${color.primary()}`\n },\n uploadInput: {\n marginTop: '12px'\n },\n error: {\n marginTop: '12px',\n color: 'red'\n },\n deleteIcon: {\n marginLeft: '12px'\n }\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"mappings":"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"}
1
+ {"version":3,"file":"media-dialog.js","names":["log","debug","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","e","target","value","type","handleStateChange","invalid","regExp","id","replace","val","handleClose","tabValue","fileUpload","isInsertURL","handleRemoveFile","height","width","tag","preventDefault","error","loading","fileChosen","files","reader","FileReader","onload","dataURL","result","readAsDataURL","uploadSoundSupport","add","done","console","urlChange","classes","open","disablePortal","edit","isUploadMedia","submitIsDisabled","undefined","paper","handleDone","row","event","root","properties","changeHandler","uploadInput","deleteIcon","input","handleUploadFile","React","Component","PropTypes","object","isRequired","bool","func","shape","string","number","styles","minWidth","padding","display","flexDirection","rowItem","marginRight","cursor","active","color","primary","borderBottom","marginTop","marginLeft","withStyles"],"sources":["../../../src/plugins/media/media-dialog.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { color } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport MuiTabs from '@material-ui/core/Tabs';\nimport MuiTab from '@material-ui/core/Tab';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionDelete from '@material-ui/icons/Delete';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = url => {\n if (!url) {\n return false;\n }\n\n const p = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = url =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url\n );\n\nconst matchSoundCloudUrl = url => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = url => {\n return new Promise(resolve => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then(response => response.json())\n .then(json => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch(err => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio'\n};\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func\n }),\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number\n };\n\n constructor(props) {\n super(props);\n\n const { src, starts, ends, height, url, urlToUse, width } = props;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560,\n tabValue: 0,\n fileUpload: {\n loading: false,\n url: '',\n error: null\n }\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url\n }\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = newState => this.setState(newState, this.formatUrl);\n\n urlChange = e => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then(urlToUse => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value\n });\n })\n .catch(log);\n\n return;\n }\n } else if (type && type === 'video') {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false\n });\n\n return;\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false\n });\n\n return;\n }\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true\n });\n };\n\n changeHandler = type => e => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = val => {\n const { handleClose } = this.props;\n const { tabValue, fileUpload } = this.state;\n const isInsertURL = tabValue === 0;\n\n if (!val) {\n if (fileUpload.url) {\n this.handleRemoveFile();\n }\n\n handleClose(val);\n } else if (isInsertURL) {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n tag: 'iframe',\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl\n });\n } else {\n handleClose(val, {\n tag: 'audio',\n src: fileUpload.url\n });\n }\n };\n\n handleUploadFile = async e => {\n e.preventDefault();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: null,\n loading: true\n }\n });\n\n const fileChosen = e.target.files[0];\n\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n url: dataURL\n }\n });\n };\n reader.readAsDataURL(fileChosen);\n\n this.props.uploadSoundSupport.add({\n fileChosen,\n done: (err, src) => {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n error: err\n }\n });\n } else {\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n url: src\n }\n });\n }\n }\n });\n };\n\n handleRemoveFile = async () => {\n this.props.uploadSoundSupport.delete(this.state.fileUpload.url, err => {\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: err\n }\n });\n }\n });\n\n // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n url: ''\n }\n });\n };\n\n render() {\n const { classes, open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const {\n ends,\n height,\n invalid,\n starts,\n width,\n url,\n formattedUrl,\n updating,\n tabValue,\n fileUpload\n } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isInsertURL = tabValue === 0;\n const isUploadMedia = tabValue === 1;\n const submitIsDisabled = isInsertURL\n ? invalid || url === null || url === undefined\n : !fileUpload.url;\n\n return (\n <Dialog\n classes={{\n paper: classes.paper\n }}\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <div>\n <div className={classes.row}>\n <MuiTabs\n indicatorColor=\"primary\"\n value={tabValue}\n onChange={(event, value) => {\n this.setState({ tabValue: value });\n }}\n >\n <MuiTab\n label={type === 'video' ? 'Insert YouTube or Vimeo URL' : 'Insert SoundCloud URL'}\n />\n {uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video' ? (\n <MuiTab label=\"Upload file\" />\n ) : null}\n </MuiTabs>\n </div>\n {isInsertURL && (\n <div>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </DialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <DialogContent\n classes={{\n root: classes.properties\n }}\n >\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </DialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <div className={classes.uploadInput}>\n <div>\n {fileUpload.url ? (\n <>\n <div className={classes.row}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={fileUpload.url} />\n </audio>\n <IconButton\n aria-label=\"delete\"\n className={classes.deleteIcon}\n onClick={this.handleRemoveFile}\n >\n <ActionDelete />\n </IconButton>\n </div>\n {fileUpload.loading ? (\n <Typography variant=\"subheading\">Loading...</Typography>\n ) : null}\n </>\n ) : !fileUpload.loading ? (\n <input\n accept=\"audio/*\"\n className={classes.input}\n onChange={this.handleUploadFile}\n type=\"file\"\n />\n ) : null}\n {!!fileUpload.error && (\n <Typography className={classes.error} variant=\"caption\">\n {fileUpload.error}\n </Typography>\n )}\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button disabled={submitIsDisabled} onClick={() => this.handleDone(true)} color=\"primary\">\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nconst styles = () => ({\n paper: {\n minWidth: '500px'\n },\n properties: {\n padding: 0\n },\n row: {\n display: 'flex',\n flexDirection: 'space-between'\n },\n rowItem: {\n marginRight: '12px',\n cursor: 'pointer'\n },\n active: {\n color: color.primary(),\n borderBottom: `2px solid ${color.primary()}`\n },\n uploadInput: {\n marginTop: '12px'\n },\n error: {\n marginTop: '12px',\n color: 'red'\n },\n deleteIcon: {\n marginLeft: '12px'\n }\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"mappings":"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"}
@@ -71,11 +71,12 @@ var MediaToolbar = /*#__PURE__*/function (_React$Component) {
71
71
  value: function render() {
72
72
  var _this$props = this.props,
73
73
  classes = _this$props.classes,
74
+ hideEdit = _this$props.hideEdit,
74
75
  onEdit = _this$props.onEdit,
75
76
  onRemove = _this$props.onRemove;
76
77
  return /*#__PURE__*/_react["default"].createElement("span", {
77
78
  className: classes.root
78
- }, /*#__PURE__*/_react["default"].createElement("span", {
79
+ }, hideEdit ? null : /*#__PURE__*/_react["default"].createElement("span", {
79
80
  className: classes.editContainer,
80
81
  onClick: onEdit
81
82
  }, "Edit Settings"), /*#__PURE__*/_react["default"].createElement("span", {
@@ -90,6 +91,7 @@ var MediaToolbar = /*#__PURE__*/function (_React$Component) {
90
91
  (0, _defineProperty2["default"])(MediaToolbar, "propTypes", {
91
92
  classes: _propTypes["default"].object,
92
93
  onEdit: _propTypes["default"].func,
94
+ hideEdit: _propTypes["default"].bool,
93
95
  onRemove: _propTypes["default"].func
94
96
  });
95
97
 
@@ -1 +1 @@
1
- {"version":3,"file":"media-toolbar.js","names":["useStyles","withStyles","theme","root","position","bottom","left","width","background","display","padding","boxShadow","editContainer","cursor","flex","border","textAlign","borderWidth","marginRight","paddingRight","removeContainer","MediaToolbar","props","classes","onEdit","onRemove","React","Component","PropTypes","object","func"],"sources":["../../../src/plugins/media/media-toolbar.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst useStyles = withStyles(theme => ({\n root: {\n position: 'relative',\n bottom: '5px',\n left: 0,\n width: '100%',\n background: 'white',\n display: 'inline-flex',\n padding: '5px',\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)'\n },\n editContainer: {\n cursor: 'pointer',\n flex: 3,\n border: 'solid black',\n textAlign: 'right',\n borderWidth: '0 2px 0 0',\n marginRight: '5px',\n paddingRight: '5px'\n },\n removeContainer: {\n cursor: 'pointer'\n }\n}));\n\nclass MediaToolbar extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n onEdit: PropTypes.func,\n onRemove: PropTypes.func\n };\n\n render() {\n const { classes, onEdit, onRemove } = this.props;\n\n return (\n <span className={classes.root}>\n <span className={classes.editContainer} onClick={onEdit}>\n Edit Settings\n </span>\n <span className={classes.removeContainer} onClick={onRemove}>\n Remove\n </span>\n </span>\n );\n }\n}\n\nexport default useStyles(MediaToolbar);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAEA,IAAMA,SAAS,GAAG,IAAAC,kBAAA,EAAW,UAAAC,KAAK;EAAA,OAAK;IACrCC,IAAI,EAAE;MACJC,QAAQ,EAAE,UADN;MAEJC,MAAM,EAAE,KAFJ;MAGJC,IAAI,EAAE,CAHF;MAIJC,KAAK,EAAE,MAJH;MAKJC,UAAU,EAAE,OALR;MAMJC,OAAO,EAAE,aANL;MAOJC,OAAO,EAAE,KAPL;MAQJC,SAAS,EAAE;IARP,CAD+B;IAWrCC,aAAa,EAAE;MACbC,MAAM,EAAE,SADK;MAEbC,IAAI,EAAE,CAFO;MAGbC,MAAM,EAAE,aAHK;MAIbC,SAAS,EAAE,OAJE;MAKbC,WAAW,EAAE,WALA;MAMbC,WAAW,EAAE,KANA;MAObC,YAAY,EAAE;IAPD,CAXsB;IAoBrCC,eAAe,EAAE;MACfP,MAAM,EAAE;IADO;EApBoB,CAAL;AAAA,CAAhB,CAAlB;;IAyBMQ,Y;;;;;;;;;;;;WAOJ,kBAAS;MACP,kBAAsC,KAAKC,KAA3C;MAAA,IAAQC,OAAR,eAAQA,OAAR;MAAA,IAAiBC,MAAjB,eAAiBA,MAAjB;MAAA,IAAyBC,QAAzB,eAAyBA,QAAzB;MAEA,oBACE;QAAM,SAAS,EAAEF,OAAO,CAACpB;MAAzB,gBACE;QAAM,SAAS,EAAEoB,OAAO,CAACX,aAAzB;QAAwC,OAAO,EAAEY;MAAjD,mBADF,eAIE;QAAM,SAAS,EAAED,OAAO,CAACH,eAAzB;QAA0C,OAAO,EAAEK;MAAnD,YAJF,CADF;IAUD;;;EApBwBC,iBAAA,CAAMC,S;;iCAA3BN,Y,eACe;EACjBE,OAAO,EAAEK,qBAAA,CAAUC,MADF;EAEjBL,MAAM,EAAEI,qBAAA,CAAUE,IAFD;EAGjBL,QAAQ,EAAEG,qBAAA,CAAUE;AAHH,C;;eAsBN9B,SAAS,CAACqB,YAAD,C"}
1
+ {"version":3,"file":"media-toolbar.js","names":["useStyles","withStyles","theme","root","position","bottom","left","width","background","display","padding","boxShadow","editContainer","cursor","flex","border","textAlign","borderWidth","marginRight","paddingRight","removeContainer","MediaToolbar","props","classes","hideEdit","onEdit","onRemove","React","Component","PropTypes","object","func","bool"],"sources":["../../../src/plugins/media/media-toolbar.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst useStyles = withStyles(theme => ({\n root: {\n position: 'relative',\n bottom: '5px',\n left: 0,\n width: '100%',\n background: 'white',\n display: 'inline-flex',\n padding: '5px',\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)'\n },\n editContainer: {\n cursor: 'pointer',\n flex: 3,\n border: 'solid black',\n textAlign: 'right',\n borderWidth: '0 2px 0 0',\n marginRight: '5px',\n paddingRight: '5px'\n },\n removeContainer: {\n cursor: 'pointer'\n }\n}));\n\nclass MediaToolbar extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n onEdit: PropTypes.func,\n hideEdit: PropTypes.bool,\n onRemove: PropTypes.func\n };\n\n render() {\n const { classes, hideEdit, onEdit, onRemove } = this.props;\n\n return (\n <span className={classes.root}>\n {hideEdit ? null : (\n <span className={classes.editContainer} onClick={onEdit}>\n Edit Settings\n </span>\n )}\n <span className={classes.removeContainer} onClick={onRemove}>\n Remove\n </span>\n </span>\n );\n }\n}\n\nexport default useStyles(MediaToolbar);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAEA,IAAMA,SAAS,GAAG,IAAAC,kBAAA,EAAW,UAAAC,KAAK;EAAA,OAAK;IACrCC,IAAI,EAAE;MACJC,QAAQ,EAAE,UADN;MAEJC,MAAM,EAAE,KAFJ;MAGJC,IAAI,EAAE,CAHF;MAIJC,KAAK,EAAE,MAJH;MAKJC,UAAU,EAAE,OALR;MAMJC,OAAO,EAAE,aANL;MAOJC,OAAO,EAAE,KAPL;MAQJC,SAAS,EAAE;IARP,CAD+B;IAWrCC,aAAa,EAAE;MACbC,MAAM,EAAE,SADK;MAEbC,IAAI,EAAE,CAFO;MAGbC,MAAM,EAAE,aAHK;MAIbC,SAAS,EAAE,OAJE;MAKbC,WAAW,EAAE,WALA;MAMbC,WAAW,EAAE,KANA;MAObC,YAAY,EAAE;IAPD,CAXsB;IAoBrCC,eAAe,EAAE;MACfP,MAAM,EAAE;IADO;EApBoB,CAAL;AAAA,CAAhB,CAAlB;;IAyBMQ,Y;;;;;;;;;;;;WAQJ,kBAAS;MACP,kBAAgD,KAAKC,KAArD;MAAA,IAAQC,OAAR,eAAQA,OAAR;MAAA,IAAiBC,QAAjB,eAAiBA,QAAjB;MAAA,IAA2BC,MAA3B,eAA2BA,MAA3B;MAAA,IAAmCC,QAAnC,eAAmCA,QAAnC;MAEA,oBACE;QAAM,SAAS,EAAEH,OAAO,CAACpB;MAAzB,GACGqB,QAAQ,GAAG,IAAH,gBACP;QAAM,SAAS,EAAED,OAAO,CAACX,aAAzB;QAAwC,OAAO,EAAEa;MAAjD,mBAFJ,eAME;QAAM,SAAS,EAAEF,OAAO,CAACH,eAAzB;QAA0C,OAAO,EAAEM;MAAnD,YANF,CADF;IAYD;;;EAvBwBC,iBAAA,CAAMC,S;;iCAA3BP,Y,eACe;EACjBE,OAAO,EAAEM,qBAAA,CAAUC,MADF;EAEjBL,MAAM,EAAEI,qBAAA,CAAUE,IAFD;EAGjBP,QAAQ,EAAEK,qBAAA,CAAUG,IAHH;EAIjBN,QAAQ,EAAEG,qBAAA,CAAUE;AAJH,C;;eAyBN/B,SAAS,CAACqB,YAAD,C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "7.17.4-next.592+3bdcdcda",
3
+ "version": "7.17.4-next.597+de1ac6fc",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -47,6 +47,6 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "3bdcdcdab0e0b0556d5a0854e8779804852c5ffa",
50
+ "gitHead": "de1ac6fc9b1084267d2201f10a6609fcef412c71",
51
51
  "scripts": {}
52
52
  }
package/src/editor.jsx CHANGED
@@ -14,6 +14,7 @@ import { color } from '@pie-lib/render-ui';
14
14
  import Plain from 'slate-plain-serializer';
15
15
 
16
16
  import { getBase64 } from './serialization';
17
+ import InsertImageHandler from './plugins/image/insert-image-handler';
17
18
 
18
19
  export { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };
19
20
 
@@ -635,6 +636,8 @@ export class Editor extends React.Component {
635
636
 
636
637
  const ch = change.insertInline(inline);
637
638
  this.onChange(ch);
639
+ const handler = new InsertImageHandler(inline, () => this.state.value, this.onChange, true);
640
+ this.props.imageSupport.add(handler);
638
641
  } catch (err) {
639
642
  log('[onDropPaste] error: ', err);
640
643
  }
@@ -8,12 +8,14 @@ const log = debug('@pie-lib:editable-html:image:insert-image-handler');
8
8
  * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image
9
9
  * @param {Function} getValue - a function to return the value of the editor
10
10
  * @param {Function} onChange - callback to notify changes applied by the handler
11
+ * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted
11
12
  */
12
13
  class InsertImageHandler {
13
- constructor(placeholderBlock, getValue, onChange) {
14
+ constructor(placeholderBlock, getValue, onChange, isPasted = false) {
14
15
  this.placeholderBlock = placeholderBlock;
15
16
  this.getValue = getValue;
16
17
  this.onChange = onChange;
18
+ this.isPasted = isPasted;
17
19
  }
18
20
 
19
21
  getPlaceholderInDocument(value) {
@@ -165,7 +165,7 @@ export default function MediaPlugin(type, opts) {
165
165
  <audio controls="controls">
166
166
  <source type="audio/mp3" src={src} />
167
167
  </audio>
168
- <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />
168
+ <MediaToolbar hideEdit onRemove={handleDelete} />
169
169
  </MediaWrapper>
170
170
  );
171
171
  }
@@ -111,8 +111,8 @@ export class MediaDialog extends React.Component {
111
111
  width: width || 560,
112
112
  tabValue: 0,
113
113
  fileUpload: {
114
- uploadIsLoading: false,
115
- localUrl: '',
114
+ loading: false,
115
+ url: '',
116
116
  error: null
117
117
  }
118
118
  };
@@ -240,7 +240,7 @@ export class MediaDialog extends React.Component {
240
240
  const isInsertURL = tabValue === 0;
241
241
 
242
242
  if (!val) {
243
- if (fileUpload.localUrl) {
243
+ if (fileUpload.url) {
244
244
  this.handleRemoveFile();
245
245
  }
246
246
 
@@ -261,7 +261,7 @@ export class MediaDialog extends React.Component {
261
261
  } else {
262
262
  handleClose(val, {
263
263
  tag: 'audio',
264
- src: fileUpload.localUrl
264
+ src: fileUpload.url
265
265
  });
266
266
  }
267
267
  };
@@ -272,7 +272,8 @@ export class MediaDialog extends React.Component {
272
272
  this.setState({
273
273
  fileUpload: {
274
274
  ...this.state.fileUpload,
275
- uploadIsLoading: true
275
+ error: null,
276
+ loading: true
276
277
  }
277
278
  });
278
279
 
@@ -280,21 +281,13 @@ export class MediaDialog extends React.Component {
280
281
 
281
282
  const reader = new FileReader();
282
283
 
283
- this.setState({
284
- fileUpload: {
285
- ...this.state.fileUpload,
286
- uploadIsLoading: true
287
- }
288
- });
289
-
290
284
  reader.onload = () => {
291
285
  const dataURL = reader.result;
292
286
 
293
287
  this.setState({
294
288
  fileUpload: {
295
289
  ...this.state.fileUpload,
296
- localUrl: dataURL,
297
- uploadIsLoading: false
290
+ url: dataURL
298
291
  }
299
292
  });
300
293
  };
@@ -302,21 +295,51 @@ export class MediaDialog extends React.Component {
302
295
 
303
296
  this.props.uploadSoundSupport.add({
304
297
  fileChosen,
305
- done: e => {
306
- console.log('add done: ', e);
298
+ done: (err, src) => {
299
+ log('done: err:', err);
300
+ if (err) {
301
+ //eslint-disable-next-line
302
+ console.log(err);
303
+ this.setState({
304
+ fileUpload: {
305
+ ...this.state.fileUpload,
306
+ loading: false,
307
+ error: err
308
+ }
309
+ });
310
+ } else {
311
+ this.setState({
312
+ fileUpload: {
313
+ ...this.state.fileUpload,
314
+ loading: false,
315
+ url: src
316
+ }
317
+ });
318
+ }
307
319
  }
308
320
  });
309
321
  };
310
322
 
311
323
  handleRemoveFile = async () => {
312
- this.props.uploadSoundSupport.delete(this.state.fileUpload.localUrl, e => {
313
- console.log('delete done', e);
324
+ this.props.uploadSoundSupport.delete(this.state.fileUpload.url, err => {
325
+ if (err) {
326
+ //eslint-disable-next-line
327
+ console.log(err);
328
+ this.setState({
329
+ fileUpload: {
330
+ ...this.state.fileUpload,
331
+ error: err
332
+ }
333
+ });
334
+ }
314
335
  });
315
336
 
337
+ // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes
316
338
  this.setState({
317
339
  fileUpload: {
318
340
  ...this.state.fileUpload,
319
- localUrl: ''
341
+ loading: false,
342
+ url: ''
320
343
  }
321
344
  });
322
345
  };
@@ -340,7 +363,7 @@ export class MediaDialog extends React.Component {
340
363
  const isUploadMedia = tabValue === 1;
341
364
  const submitIsDisabled = isInsertURL
342
365
  ? invalid || url === null || url === undefined
343
- : !fileUpload.localUrl;
366
+ : !fileUpload.url;
344
367
 
345
368
  return (
346
369
  <Dialog
@@ -461,14 +484,12 @@ export class MediaDialog extends React.Component {
461
484
  )}
462
485
  {isUploadMedia && (
463
486
  <div className={classes.uploadInput}>
464
- {fileUpload.uploadIsLoading ? (
465
- <Typography variant="subheading">Loading...</Typography>
466
- ) : (
467
- <div>
468
- {fileUpload.localUrl ? (
487
+ <div>
488
+ {fileUpload.url ? (
489
+ <>
469
490
  <div className={classes.row}>
470
491
  <audio controls="controls">
471
- <source type="audio/mp3" src={fileUpload.localUrl} />
492
+ <source type="audio/mp3" src={fileUpload.url} />
472
493
  </audio>
473
494
  <IconButton
474
495
  aria-label="delete"
@@ -478,21 +499,24 @@ export class MediaDialog extends React.Component {
478
499
  <ActionDelete />
479
500
  </IconButton>
480
501
  </div>
481
- ) : (
482
- <input
483
- accept="audio/*"
484
- className={classes.input}
485
- onChange={this.handleUploadFile}
486
- type="file"
487
- />
488
- )}
489
- {!!fileUpload.error && (
490
- <Typography className={classes.error} variant="caption">
491
- {fileUpload.error}
492
- </Typography>
493
- )}
494
- </div>
495
- )}
502
+ {fileUpload.loading ? (
503
+ <Typography variant="subheading">Loading...</Typography>
504
+ ) : null}
505
+ </>
506
+ ) : !fileUpload.loading ? (
507
+ <input
508
+ accept="audio/*"
509
+ className={classes.input}
510
+ onChange={this.handleUploadFile}
511
+ type="file"
512
+ />
513
+ ) : null}
514
+ {!!fileUpload.error && (
515
+ <Typography className={classes.error} variant="caption">
516
+ {fileUpload.error}
517
+ </Typography>
518
+ )}
519
+ </div>
496
520
  </div>
497
521
  )}
498
522
  </div>
@@ -31,17 +31,20 @@ class MediaToolbar extends React.Component {
31
31
  static propTypes = {
32
32
  classes: PropTypes.object,
33
33
  onEdit: PropTypes.func,
34
+ hideEdit: PropTypes.bool,
34
35
  onRemove: PropTypes.func
35
36
  };
36
37
 
37
38
  render() {
38
- const { classes, onEdit, onRemove } = this.props;
39
+ const { classes, hideEdit, onEdit, onRemove } = this.props;
39
40
 
40
41
  return (
41
42
  <span className={classes.root}>
42
- <span className={classes.editContainer} onClick={onEdit}>
43
- Edit Settings
44
- </span>
43
+ {hideEdit ? null : (
44
+ <span className={classes.editContainer} onClick={onEdit}>
45
+ Edit Settings
46
+ </span>
47
+ )}
45
48
  <span className={classes.removeContainer} onClick={onRemove}>
46
49
  Remove
47
50
  </span>