@pie-lib/editable-html 7.17.4-next.367 → 7.17.4-next.373

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
@@ -51,12 +51,6 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
51
51
 
52
52
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
53
53
 
54
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
55
-
56
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
57
-
58
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
59
-
60
54
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
61
55
 
62
56
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -507,80 +501,45 @@ var Editor = /*#__PURE__*/function (_React$Component) {
507
501
  _this.props.focus(position, node);
508
502
  });
509
503
 
510
- _defineProperty(_assertThisInitialized(_this), "onDropPaste", /*#__PURE__*/function () {
511
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(event, change, dropContext) {
512
- var editor, transfer, file, src, inline, range, ch;
513
- return _regeneratorRuntime().wrap(function _callee$(_context) {
514
- while (1) {
515
- switch (_context.prev = _context.next) {
516
- case 0:
517
- if (_this.props.imageSupport) {
518
- _context.next = 2;
519
- break;
520
- }
521
-
522
- return _context.abrupt("return");
523
-
524
- case 2:
525
- editor = change.editor;
526
- transfer = (0, _slateReact.getEventTransfer)(event);
527
- file = transfer.files[0];
528
-
529
- if (!(file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')) {
530
- _context.next = 20;
531
- break;
532
- }
533
-
534
- _context.prev = 6;
535
- log('[onDropPaste]');
536
- _context.next = 10;
537
- return (0, serialization.getBase64)(file);
538
-
539
- case 10:
540
- src = _context.sent;
541
- inline = _slate.Inline.create({
542
- type: 'image',
543
- isVoid: true,
544
- data: {
545
- loading: false,
546
- src: src
547
- }
548
- });
549
-
550
- if (dropContext) {
551
- _this.focus();
552
- } else {
553
- range = (0, _slateReact.getEventRange)(event, editor);
554
-
555
- if (range) {
556
- change.select(range);
557
- }
558
- }
559
-
560
- ch = change.insertInline(inline);
561
-
562
- _this.onChange(ch);
563
-
564
- _context.next = 20;
565
- break;
566
-
567
- case 17:
568
- _context.prev = 17;
569
- _context.t0 = _context["catch"](6);
570
- log('[onDropPaste] error: ', _context.t0);
571
-
572
- case 20:
573
- case "end":
574
- return _context.stop();
504
+ _defineProperty(_assertThisInitialized(_this), "onDropPaste", function (event, change, dropContext) {
505
+ if (!_this.props.imageSupport) {
506
+ return;
507
+ }
508
+
509
+ var editor = change.editor;
510
+ var transfer = (0, _slateReact.getEventTransfer)(event);
511
+ var file = transfer.files[0];
512
+
513
+ if (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png') {
514
+ log('[onDropPaste]');
515
+ (0, serialization.getBase64)(file).then(function (src) {
516
+ var inline = _slate.Inline.create({
517
+ type: 'image',
518
+ isVoid: true,
519
+ data: {
520
+ loading: false,
521
+ src: src
522
+ }
523
+ });
524
+
525
+ if (dropContext) {
526
+ _this.focus();
527
+ } else {
528
+ var range = (0, _slateReact.getEventRange)(event, editor);
529
+
530
+ if (range) {
531
+ change.select(range);
575
532
  }
576
533
  }
577
- }, _callee, null, [[6, 17]]);
578
- }));
579
534
 
580
- return function (_x, _x2, _x3) {
581
- return _ref.apply(this, arguments);
582
- };
583
- }());
535
+ var ch = change.insertInline(inline);
536
+
537
+ _this.onChange(ch);
538
+ })["catch"](function (err) {
539
+ return log('[onDropPaste] error: ', err);
540
+ });
541
+ }
542
+ });
584
543
 
585
544
  _this.state = {
586
545
  value: _props.value,
@@ -704,8 +663,8 @@ var Editor = /*#__PURE__*/function (_React$Component) {
704
663
  var sizeStyle = this.buildSizeStyle();
705
664
  var names = (0, _classnames["default"])((_classNames = {}, _defineProperty(_classNames, classes.withBg, highlightShape), _defineProperty(_classNames, classes.toolbarOnTop, toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'), _classNames), className);
706
665
  return /*#__PURE__*/_react["default"].createElement("div", {
707
- ref: function ref(_ref2) {
708
- return _this3.wrapperRef = _ref2;
666
+ ref: function ref(_ref) {
667
+ return _this3.wrapperRef = _ref;
709
668
  },
710
669
  style: {
711
670
  width: sizeStyle.width
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","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","relatedTarget","target","node","findNode","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","getEventTransfer","file","files","getBase64","inline","Inline","create","isVoid","loading","range","getEventRange","select","ch","insertInline","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","onDropPaste","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","number","oneOfType","string","any","shape","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop","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 { getBase64 } from './serialization';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\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 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 if (!this.props.imageSupport) {\n return;\n }\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files[0];\n\n if (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png') {\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 if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n const ch = change.insertInline(inline);\n this.onChange(ch);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\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 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={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"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","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","relatedTarget","target","node","findNode","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","getEventTransfer","file","files","getBase64","inline","Inline","create","isVoid","loading","range","getEventRange","select","ch","insertInline","err","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","isEqual","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","classNames","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","onDropPaste","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","number","oneOfType","string","any","shape","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop","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 { 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 },\n onHandleAreaChange: () => {\n }\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {\n },\n onBlur: () => {\n },\n onKeyDown: () => {\n },\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\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 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 = (event, change, dropContext) => {\n if (!this.props.imageSupport) {\n return;\n }\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files[0];\n\n if (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png') {\n log('[onDropPaste]');\n\n getBase64(file)\n .then(src => {\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 })\n .catch(err => log('[onDropPaste] error: ', err));\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 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={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"mappings":"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"}
@@ -7,7 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = exports.Toolbar = void 0;
9
9
 
10
- var _doneButton = require("./done-button");
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _slate = require("slate");
11
13
 
12
14
  var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
13
15
 
@@ -15,8 +17,6 @@ var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton")
15
17
 
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
19
 
18
- var _react = _interopRequireDefault(require("react"));
19
-
20
20
  var _classnames = _interopRequireDefault(require("classnames"));
21
21
 
22
22
  var _debug = _interopRequireDefault(require("debug"));
@@ -25,6 +25,8 @@ var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
25
25
 
26
26
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
27
27
 
28
+ var _doneButton = require("./done-button");
29
+
28
30
  var _utils = require("../utils");
29
31
 
30
32
  var _styles = require("@material-ui/core/styles");
@@ -209,6 +211,11 @@ var Toolbar = /*#__PURE__*/function (_React$Component) {
209
211
  log('[render] plugin: ', plugin);
210
212
 
211
213
  var handleDone = function handleDone(change, done) {
214
+ // use handler only if this is an actual Slate Change
215
+ if (!(change instanceof _slate.Change)) {
216
+ return;
217
+ }
218
+
212
219
  var handler = onDone;
213
220
 
214
221
  if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","names":["log","debug","getCustomToolbar","plugin","node","value","handleDone","onDataChange","toolbar","CustomToolbarComp","customToolbar","Toolbar","props","type","marks","some","mark","blocks","onChange","onToggle","change","e","preventDefault","fn","finishEditing","onDone","debounce","deleteNode","persist","onDeleteClick","state","classes","plugins","pluginProps","toolbarOpts","autoWidth","isFocused","toolbarRef","findSingleNode","parentNode","findParentNode","find","p","supports","parentPlugin","done","handler","onToolbarDone","handleDataChange","key","data","CustomToolbar","filteredPlugins","filterPlugins","parentExtraStyles","pluginStyles","pluginExtraStyles","extraStyles","deletable","customToolbarShowDone","showDone","alwaysVisible","defaultToolbarShowDone","hasDoneButton","names","classNames","toolbarWithNoDone","toolbarTop","position","toolbarRight","alignment","focused","fullWidth","onClick","shared","iconRoot","onDeleteMouseDown","root","React","Component","zIndex","PropTypes","number","SlatePropTypes","isRequired","array","object","onImageClick","func","bool","shape","oneOf","ref","style","cursor","justifyContent","background","minWidth","margin","padding","boxShadow","boxSizing","display","top","right","width","height","verticalAlign","label","color","withStyles","index"],"sources":["../../../src/plugins/toolbar/toolbar.jsx"],"sourcesContent":["import { DoneButton } from './done-button';\nimport Delete from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport debounce from 'lodash/debounce';\n\nimport { findSingleNode, findParentNode } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\nimport DefaultToolbar from './default-toolbar';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nconst getCustomToolbar = (plugin, node, value, handleDone, onDataChange) => {\n if (!plugin) {\n return;\n }\n if (!plugin.toolbar) {\n return;\n }\n if (plugin.toolbar.CustomToolbarComp) {\n /**\n * Using a pre-defined Component should be preferred\n * as the rendering of it (and it's children) can be optimized by React.\n * If you keep re-defining the comp with an inline function\n * then react will have to re-render.\n */\n return plugin.toolbar.CustomToolbarComp;\n } else if (typeof plugin.toolbar.customToolbar === 'function') {\n log('deprecated - use CustomToolbarComp');\n return plugin.toolbar.customToolbar(node, value, handleDone, onDataChange);\n }\n};\n\nexport class Toolbar extends React.Component {\n static propTypes = {\n zIndex: PropTypes.number,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array,\n plugin: PropTypes.object,\n onImageClick: PropTypes.func,\n onDone: PropTypes.func.isRequired,\n toolbarRef: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n isFocused: PropTypes.bool,\n autoWidth: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n ref: PropTypes.func,\n showDone: PropTypes.bool\n }),\n onDataChange: PropTypes.func\n };\n\n constructor(props) {\n super(props);\n this.state = {\n change: null\n };\n }\n\n hasMark = type => {\n const { value } = this.props;\n return value.marks.some(mark => mark.type == type);\n };\n\n hasBlock = type => {\n const { value } = this.props;\n return value.blocks.some(node => node.type == type);\n };\n\n onToggle = plugin => {\n const { value, onChange } = this.props;\n\n if (!plugin.onToggle) return;\n\n const change = plugin.onToggle(value.change());\n onChange(change);\n };\n\n onClick = e => {\n log('[onClick]');\n e.preventDefault();\n };\n\n onButtonClick = fn => {\n return e => {\n e.preventDefault();\n fn();\n };\n };\n\n onToolbarDone = (change, finishEditing) => {\n log('[onToolbarDone] change: ', change, 'finishEditing: ', finishEditing);\n const { onChange, onDone } = this.props;\n\n if (change) {\n onChange(change, () => {\n if (finishEditing) {\n onDone();\n }\n });\n } else {\n if (finishEditing) {\n log('[onToolbarChange] call onDone');\n onDone();\n }\n }\n };\n\n onDeleteClick = debounce(\n (e, plugin, node, value, onChange) => plugin.deleteNode(e, node, value, onChange),\n 500\n );\n\n onDeleteMouseDown = (e, plugin, node, value, onChange) => {\n e.persist();\n this.onDeleteClick(e, plugin, node, value, onChange);\n };\n\n render() {\n const {\n classes,\n plugins,\n pluginProps,\n toolbarOpts,\n value,\n autoWidth,\n onChange,\n isFocused,\n onDone,\n toolbarRef\n } = this.props;\n\n const node = findSingleNode(value);\n const parentNode = findParentNode(value, node);\n\n log(' --------------> [render] node: ', node);\n log('[render] node: ', node);\n\n const plugin = plugins.find(p => {\n if (!node) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(node, value);\n }\n });\n const parentPlugin = plugins.find(p => {\n if (!parentNode) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(parentNode, value);\n }\n });\n\n log('[render] plugin: ', plugin);\n\n const handleDone = (change, done) => {\n let handler = onDone;\n\n if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {\n handler = this.onToolbarDone;\n }\n\n handler(change, done);\n\n if (parentPlugin && parentPlugin.handleDone) {\n parentPlugin.handleDone(value, node, plugin, onChange);\n }\n };\n\n const handleDataChange = (key, data) => {\n this.props.onDataChange(key, data);\n };\n\n const CustomToolbar = getCustomToolbar(\n plugin,\n node,\n value,\n handleDone,\n this.props.onDataChange\n );\n\n const filteredPlugins =\n plugin && plugin.filterPlugins ? plugin.filterPlugins(node, plugins) : plugins;\n\n log('[render] CustomToolbar: ', CustomToolbar);\n const parentExtraStyles =\n parentPlugin && parentPlugin.pluginStyles\n ? parentPlugin.pluginStyles(node, parentNode, plugin)\n : {};\n const pluginExtraStyles =\n plugin && plugin.pluginStyles ? plugin.pluginStyles(node, parentNode, plugin) : {};\n const extraStyles = {\n ...pluginExtraStyles,\n ...parentExtraStyles\n };\n\n const deletable = node && plugin && plugin.deleteNode;\n const customToolbarShowDone =\n node && plugin && plugin.toolbar && plugin.toolbar.showDone && !toolbarOpts.alwaysVisible;\n\n // If there is a toolbarOpts we check if the showDone is not equal to false\n const defaultToolbarShowDone = !toolbarOpts || toolbarOpts.showDone !== false;\n\n const hasDoneButton = defaultToolbarShowDone || customToolbarShowDone;\n\n const names = classNames(classes.toolbar, {\n [classes.toolbarWithNoDone]: !hasDoneButton,\n [classes.toolbarTop]: toolbarOpts.position === 'top',\n [classes.toolbarRight]: toolbarOpts.alignment === 'right',\n [classes.focused]: toolbarOpts.alwaysVisible || isFocused,\n [classes.autoWidth]: autoWidth,\n [classes.fullWidth]: !autoWidth\n });\n\n return (\n <div className={names} style={extraStyles} onClick={this.onClick} ref={toolbarRef}>\n {CustomToolbar ? (\n <CustomToolbar\n node={node}\n value={value}\n onToolbarDone={this.onToolbarDone}\n onDataChange={handleDataChange}\n pluginProps={pluginProps}\n />\n ) : (\n <DefaultToolbar\n plugins={filteredPlugins}\n pluginProps={pluginProps}\n value={value}\n onChange={onChange}\n showDone={defaultToolbarShowDone}\n onDone={handleDone}\n deletable={deletable}\n />\n )}\n\n <div className={classes.shared}>\n {deletable && (\n <IconButton\n aria-label=\"Delete\"\n className={classes.iconRoot}\n onMouseDown={e => this.onDeleteMouseDown(e, plugin, node, value, onChange)}\n classes={{\n root: classes.iconRoot\n }}\n >\n <Delete />\n </IconButton>\n )}\n {customToolbarShowDone && <DoneButton onClick={handleDone} />}\n </div>\n </div>\n );\n }\n}\n\nconst style = {\n toolbar: {\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: '280px',\n margin: '5px 0 0 0',\n padding: '2px',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n boxSizing: 'border-box',\n display: 'none'\n },\n toolbarWithNoDone: {\n minWidth: '265px'\n },\n toolbarTop: {\n top: '-45px'\n },\n toolbarRight: {\n right: 0\n },\n fullWidth: {\n width: '100%'\n },\n autoWidth: {\n width: 'auto'\n },\n focused: {\n display: 'flex'\n },\n iconRoot: {\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top'\n },\n label: {\n color: 'var(--editable-html-toolbar-check, #00bb00)'\n },\n shared: {\n display: 'flex'\n }\n};\nexport default withStyles(style, { index: 1000 })(Toolbar);\n"],"mappings":"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"}
1
+ {"version":3,"file":"toolbar.js","names":["log","debug","getCustomToolbar","plugin","node","value","handleDone","onDataChange","toolbar","CustomToolbarComp","customToolbar","Toolbar","props","type","marks","some","mark","blocks","onChange","onToggle","change","e","preventDefault","fn","finishEditing","onDone","debounce","deleteNode","persist","onDeleteClick","state","classes","plugins","pluginProps","toolbarOpts","autoWidth","isFocused","toolbarRef","findSingleNode","parentNode","findParentNode","find","p","supports","parentPlugin","done","Change","handler","onToolbarDone","handleDataChange","key","data","CustomToolbar","filteredPlugins","filterPlugins","parentExtraStyles","pluginStyles","pluginExtraStyles","extraStyles","deletable","customToolbarShowDone","showDone","alwaysVisible","defaultToolbarShowDone","hasDoneButton","names","classNames","toolbarWithNoDone","toolbarTop","position","toolbarRight","alignment","focused","fullWidth","onClick","shared","iconRoot","onDeleteMouseDown","root","React","Component","zIndex","PropTypes","number","SlatePropTypes","isRequired","array","object","onImageClick","func","bool","shape","oneOf","ref","style","cursor","justifyContent","background","minWidth","margin","padding","boxShadow","boxSizing","display","top","right","width","height","verticalAlign","label","color","withStyles","index"],"sources":["../../../src/plugins/toolbar/toolbar.jsx"],"sourcesContent":["import React from 'react';\nimport { Change } from 'slate';\nimport Delete from '@material-ui/icons/Delete';\nimport IconButton from '@material-ui/core/IconButton';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport debounce from 'lodash/debounce';\n\nimport { DoneButton } from './done-button';\n\nimport { findSingleNode, findParentNode } from '../utils';\nimport { withStyles } from '@material-ui/core/styles';\nimport DefaultToolbar from './default-toolbar';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar');\n\nconst getCustomToolbar = (plugin, node, value, handleDone, onDataChange) => {\n if (!plugin) {\n return;\n }\n if (!plugin.toolbar) {\n return;\n }\n if (plugin.toolbar.CustomToolbarComp) {\n /**\n * Using a pre-defined Component should be preferred\n * as the rendering of it (and it's children) can be optimized by React.\n * If you keep re-defining the comp with an inline function\n * then react will have to re-render.\n */\n return plugin.toolbar.CustomToolbarComp;\n } else if (typeof plugin.toolbar.customToolbar === 'function') {\n log('deprecated - use CustomToolbarComp');\n return plugin.toolbar.customToolbar(node, value, handleDone, onDataChange);\n }\n};\n\nexport class Toolbar extends React.Component {\n static propTypes = {\n zIndex: PropTypes.number,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array,\n plugin: PropTypes.object,\n onImageClick: PropTypes.func,\n onDone: PropTypes.func.isRequired,\n toolbarRef: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n isFocused: PropTypes.bool,\n autoWidth: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n ref: PropTypes.func,\n showDone: PropTypes.bool\n }),\n onDataChange: PropTypes.func\n };\n\n constructor(props) {\n super(props);\n this.state = {\n change: null\n };\n }\n\n hasMark = type => {\n const { value } = this.props;\n return value.marks.some(mark => mark.type == type);\n };\n\n hasBlock = type => {\n const { value } = this.props;\n return value.blocks.some(node => node.type == type);\n };\n\n onToggle = plugin => {\n const { value, onChange } = this.props;\n\n if (!plugin.onToggle) return;\n\n const change = plugin.onToggle(value.change());\n onChange(change);\n };\n\n onClick = e => {\n log('[onClick]');\n e.preventDefault();\n };\n\n onButtonClick = fn => {\n return e => {\n e.preventDefault();\n fn();\n };\n };\n\n onToolbarDone = (change, finishEditing) => {\n log('[onToolbarDone] change: ', change, 'finishEditing: ', finishEditing);\n const { onChange, onDone } = this.props;\n\n if (change) {\n onChange(change, () => {\n if (finishEditing) {\n onDone();\n }\n });\n } else {\n if (finishEditing) {\n log('[onToolbarChange] call onDone');\n onDone();\n }\n }\n };\n\n onDeleteClick = debounce(\n (e, plugin, node, value, onChange) => plugin.deleteNode(e, node, value, onChange),\n 500\n );\n\n onDeleteMouseDown = (e, plugin, node, value, onChange) => {\n e.persist();\n this.onDeleteClick(e, plugin, node, value, onChange);\n };\n\n render() {\n const {\n classes,\n plugins,\n pluginProps,\n toolbarOpts,\n value,\n autoWidth,\n onChange,\n isFocused,\n onDone,\n toolbarRef\n } = this.props;\n\n const node = findSingleNode(value);\n const parentNode = findParentNode(value, node);\n\n log(' --------------> [render] node: ', node);\n log('[render] node: ', node);\n\n const plugin = plugins.find(p => {\n if (!node) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(node, value);\n }\n });\n const parentPlugin = plugins.find(p => {\n if (!parentNode) {\n return;\n }\n\n if (p.toolbar) {\n return p.toolbar.supports && p.toolbar.supports(parentNode, value);\n }\n });\n\n log('[render] plugin: ', plugin);\n\n const handleDone = (change, done) => {\n // use handler only if this is an actual Slate Change\n if (!(change instanceof Change)) {\n return;\n }\n\n let handler = onDone;\n\n if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {\n handler = this.onToolbarDone;\n }\n\n handler(change, done);\n\n if (parentPlugin && parentPlugin.handleDone) {\n parentPlugin.handleDone(value, node, plugin, onChange);\n }\n };\n\n const handleDataChange = (key, data) => {\n this.props.onDataChange(key, data);\n };\n\n const CustomToolbar = getCustomToolbar(\n plugin,\n node,\n value,\n handleDone,\n this.props.onDataChange\n );\n\n const filteredPlugins =\n plugin && plugin.filterPlugins ? plugin.filterPlugins(node, plugins) : plugins;\n\n log('[render] CustomToolbar: ', CustomToolbar);\n const parentExtraStyles =\n parentPlugin && parentPlugin.pluginStyles\n ? parentPlugin.pluginStyles(node, parentNode, plugin)\n : {};\n const pluginExtraStyles =\n plugin && plugin.pluginStyles ? plugin.pluginStyles(node, parentNode, plugin) : {};\n const extraStyles = {\n ...pluginExtraStyles,\n ...parentExtraStyles\n };\n\n const deletable = node && plugin && plugin.deleteNode;\n const customToolbarShowDone =\n node && plugin && plugin.toolbar && plugin.toolbar.showDone && !toolbarOpts.alwaysVisible;\n\n // If there is a toolbarOpts we check if the showDone is not equal to false\n const defaultToolbarShowDone = !toolbarOpts || toolbarOpts.showDone !== false;\n\n const hasDoneButton = defaultToolbarShowDone || customToolbarShowDone;\n\n const names = classNames(classes.toolbar, {\n [classes.toolbarWithNoDone]: !hasDoneButton,\n [classes.toolbarTop]: toolbarOpts.position === 'top',\n [classes.toolbarRight]: toolbarOpts.alignment === 'right',\n [classes.focused]: toolbarOpts.alwaysVisible || isFocused,\n [classes.autoWidth]: autoWidth,\n [classes.fullWidth]: !autoWidth\n });\n\n return (\n <div className={names} style={extraStyles} onClick={this.onClick} ref={toolbarRef}>\n {CustomToolbar ? (\n <CustomToolbar\n node={node}\n value={value}\n onToolbarDone={this.onToolbarDone}\n onDataChange={handleDataChange}\n pluginProps={pluginProps}\n />\n ) : (\n <DefaultToolbar\n plugins={filteredPlugins}\n pluginProps={pluginProps}\n value={value}\n onChange={onChange}\n showDone={defaultToolbarShowDone}\n onDone={handleDone}\n deletable={deletable}\n />\n )}\n\n <div className={classes.shared}>\n {deletable && (\n <IconButton\n aria-label=\"Delete\"\n className={classes.iconRoot}\n onMouseDown={e => this.onDeleteMouseDown(e, plugin, node, value, onChange)}\n classes={{\n root: classes.iconRoot\n }}\n >\n <Delete />\n </IconButton>\n )}\n {customToolbarShowDone && <DoneButton onClick={handleDone} />}\n </div>\n </div>\n );\n }\n}\n\nconst style = {\n toolbar: {\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: '280px',\n margin: '5px 0 0 0',\n padding: '2px',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n boxSizing: 'border-box',\n display: 'none'\n },\n toolbarWithNoDone: {\n minWidth: '265px'\n },\n toolbarTop: {\n top: '-45px'\n },\n toolbarRight: {\n right: 0\n },\n fullWidth: {\n width: '100%'\n },\n autoWidth: {\n width: 'auto'\n },\n focused: {\n display: 'flex'\n },\n iconRoot: {\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top'\n },\n label: {\n color: 'var(--editable-html-toolbar-check, #00bb00)'\n },\n shared: {\n display: 'flex'\n }\n};\nexport default withStyles(style, { index: 1000 })(Toolbar);\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "7.17.4-next.367+605aaece",
3
+ "version": "7.17.4-next.373+5163878a",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -46,6 +46,6 @@
46
46
  "publishConfig": {
47
47
  "access": "public"
48
48
  },
49
- "gitHead": "605aaece22d3f7ea4c8635b636fb9eb32eb74c4a",
49
+ "gitHead": "5163878afe225f4c896d5e617b01f35a1d134ea1",
50
50
  "scripts": {}
51
51
  }
package/src/editor.jsx CHANGED
@@ -27,8 +27,10 @@ const defaultToolbarOpts = {
27
27
 
28
28
  const defaultResponseAreaProps = {
29
29
  options: {},
30
- respAreaToolbar: () => {},
31
- onHandleAreaChange: () => {}
30
+ respAreaToolbar: () => {
31
+ },
32
+ onHandleAreaChange: () => {
33
+ }
32
34
  };
33
35
 
34
36
  const defaultLanguageCharactersProps = [];
@@ -105,9 +107,12 @@ export class Editor extends React.Component {
105
107
 
106
108
  static defaultProps = {
107
109
  disableUnderline: true,
108
- onFocus: () => {},
109
- onBlur: () => {},
110
- onKeyDown: () => {},
110
+ onFocus: () => {
111
+ },
112
+ onBlur: () => {
113
+ },
114
+ onKeyDown: () => {
115
+ },
111
116
  toolbarOpts: defaultToolbarOpts,
112
117
  responseAreaProps: defaultResponseAreaProps,
113
118
  languageCharactersProps: defaultLanguageCharactersProps
@@ -571,7 +576,7 @@ export class Editor extends React.Component {
571
576
  this.props.focus(position, node);
572
577
  };
573
578
 
574
- onDropPaste = async (event, change, dropContext) => {
579
+ onDropPaste = (event, change, dropContext) => {
575
580
  if (!this.props.imageSupport) {
576
581
  return;
577
582
  }
@@ -580,30 +585,32 @@ export class Editor extends React.Component {
580
585
  const file = transfer.files[0];
581
586
 
582
587
  if (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png') {
583
- try {
584
- log('[onDropPaste]');
585
- const src = await getBase64(file);
586
- const inline = Inline.create({
587
- type: 'image',
588
- isVoid: true,
589
- data: {
590
- loading: false,
591
- src
592
- }
593
- });
594
- if (dropContext) {
595
- this.focus();
596
- } else {
597
- const range = getEventRange(event, editor);
598
- if (range) {
599
- change.select(range);
588
+ log('[onDropPaste]');
589
+
590
+ getBase64(file)
591
+ .then(src => {
592
+ const inline = Inline.create({
593
+ type: 'image',
594
+ isVoid: true,
595
+ data: {
596
+ loading: false,
597
+ src
598
+ }
599
+ });
600
+
601
+ if (dropContext) {
602
+ this.focus();
603
+ } else {
604
+ const range = getEventRange(event, editor);
605
+ if (range) {
606
+ change.select(range);
607
+ }
600
608
  }
601
- }
602
- const ch = change.insertInline(inline);
603
- this.onChange(ch);
604
- } catch (err) {
605
- log('[onDropPaste] error: ', err);
606
- }
609
+
610
+ const ch = change.insertInline(inline);
611
+ this.onChange(ch);
612
+ })
613
+ .catch(err => log('[onDropPaste] error: ', err));
607
614
  }
608
615
  };
609
616
 
@@ -1,13 +1,15 @@
1
- import { DoneButton } from './done-button';
1
+ import React from 'react';
2
+ import { Change } from 'slate';
2
3
  import Delete from '@material-ui/icons/Delete';
3
4
  import IconButton from '@material-ui/core/IconButton';
4
5
  import PropTypes from 'prop-types';
5
- import React from 'react';
6
6
  import classNames from 'classnames';
7
7
  import debug from 'debug';
8
8
  import SlatePropTypes from 'slate-prop-types';
9
9
  import debounce from 'lodash/debounce';
10
10
 
11
+ import { DoneButton } from './done-button';
12
+
11
13
  import { findSingleNode, findParentNode } from '../utils';
12
14
  import { withStyles } from '@material-ui/core/styles';
13
15
  import DefaultToolbar from './default-toolbar';
@@ -167,6 +169,11 @@ export class Toolbar extends React.Component {
167
169
  log('[render] plugin: ', plugin);
168
170
 
169
171
  const handleDone = (change, done) => {
172
+ // use handler only if this is an actual Slate Change
173
+ if (!(change instanceof Change)) {
174
+ return;
175
+ }
176
+
170
177
  let handler = onDone;
171
178
 
172
179
  if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {