@pie-lib/editable-html 10.0.0-beta.7 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.json +1 -1
  2. package/CHANGELOG.md +81 -0
  3. package/LICENSE.md +5 -0
  4. package/lib/editor.js +410 -543
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +200 -101
  7. package/lib/index.js.map +1 -1
  8. package/lib/parse-html.js +5 -6
  9. package/lib/parse-html.js.map +1 -1
  10. package/lib/plugins/characters/custom-popper.js +12 -2
  11. package/lib/plugins/characters/custom-popper.js.map +1 -1
  12. package/lib/plugins/characters/index.js +71 -19
  13. package/lib/plugins/characters/index.js.map +1 -1
  14. package/lib/plugins/characters/utils.js.map +1 -1
  15. package/lib/plugins/html/icons/index.js +38 -0
  16. package/lib/plugins/html/icons/index.js.map +1 -0
  17. package/lib/plugins/html/index.js +75 -0
  18. package/lib/plugins/html/index.js.map +1 -0
  19. package/lib/plugins/image/alt-dialog.js +26 -0
  20. package/lib/plugins/image/alt-dialog.js.map +1 -1
  21. package/lib/plugins/image/component.js +124 -90
  22. package/lib/plugins/image/component.js.map +1 -1
  23. package/lib/plugins/image/image-toolbar.js +45 -7
  24. package/lib/plugins/image/image-toolbar.js.map +1 -1
  25. package/lib/plugins/image/index.js +91 -113
  26. package/lib/plugins/image/index.js.map +1 -1
  27. package/lib/plugins/image/insert-image-handler.js +54 -72
  28. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  29. package/lib/plugins/index.js +71 -31
  30. package/lib/plugins/index.js.map +1 -1
  31. package/lib/plugins/list/index.js +129 -58
  32. package/lib/plugins/list/index.js.map +1 -1
  33. package/lib/plugins/math/index.js +152 -118
  34. package/lib/plugins/math/index.js.map +1 -1
  35. package/lib/plugins/media/index.js +185 -168
  36. package/lib/plugins/media/index.js.map +1 -1
  37. package/lib/plugins/media/media-dialog.js +197 -110
  38. package/lib/plugins/media/media-dialog.js.map +1 -1
  39. package/lib/plugins/media/media-toolbar.js +24 -4
  40. package/lib/plugins/media/media-toolbar.js.map +1 -1
  41. package/lib/plugins/media/media-wrapper.js +65 -23
  42. package/lib/plugins/media/media-wrapper.js.map +1 -1
  43. package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
  44. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  45. package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
  46. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  47. package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
  48. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  49. package/lib/plugins/respArea/icons/index.js +18 -1
  50. package/lib/plugins/respArea/icons/index.js.map +1 -1
  51. package/lib/plugins/respArea/index.js +133 -122
  52. package/lib/plugins/respArea/index.js.map +1 -1
  53. package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
  54. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  55. package/lib/plugins/respArea/utils.js +33 -15
  56. package/lib/plugins/respArea/utils.js.map +1 -1
  57. package/lib/plugins/table/icons/index.js +7 -0
  58. package/lib/plugins/table/icons/index.js.map +1 -1
  59. package/lib/plugins/table/index.js +279 -390
  60. package/lib/plugins/table/index.js.map +1 -1
  61. package/lib/plugins/table/table-toolbar.js +47 -14
  62. package/lib/plugins/table/table-toolbar.js.map +1 -1
  63. package/lib/plugins/toolbar/default-toolbar.js +63 -51
  64. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  65. package/lib/plugins/toolbar/done-button.js +9 -1
  66. package/lib/plugins/toolbar/done-button.js.map +1 -1
  67. package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
  68. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  69. package/lib/plugins/toolbar/index.js +5 -0
  70. package/lib/plugins/toolbar/index.js.map +1 -1
  71. package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
  72. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  73. package/lib/plugins/toolbar/toolbar.js +261 -225
  74. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  75. package/lib/plugins/utils.js +16 -19
  76. package/lib/plugins/utils.js.map +1 -1
  77. package/lib/serialization.js +70 -11
  78. package/lib/serialization.js.map +1 -1
  79. package/lib/theme.js.map +1 -1
  80. package/package.json +18 -17
  81. package/src/editor.jsx +139 -434
  82. package/src/index.jsx +96 -62
  83. package/src/plugins/characters/index.jsx +17 -12
  84. package/src/plugins/html/icons/index.jsx +19 -0
  85. package/src/plugins/html/index.jsx +68 -0
  86. package/src/plugins/image/component.jsx +38 -60
  87. package/src/plugins/image/index.jsx +42 -95
  88. package/src/plugins/image/insert-image-handler.js +27 -62
  89. package/src/plugins/index.jsx +39 -21
  90. package/src/plugins/list/index.jsx +90 -62
  91. package/src/plugins/math/index.jsx +70 -93
  92. package/src/plugins/media/index.jsx +117 -146
  93. package/src/plugins/media/media-dialog.js +9 -10
  94. package/src/plugins/media/media-wrapper.jsx +27 -29
  95. package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
  96. package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
  97. package/src/plugins/respArea/index.jsx +84 -114
  98. package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
  99. package/src/plugins/respArea/utils.jsx +28 -23
  100. package/src/plugins/table/index.jsx +214 -334
  101. package/src/plugins/table/table-toolbar.jsx +4 -3
  102. package/src/plugins/toolbar/default-toolbar.jsx +30 -48
  103. package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
  104. package/src/plugins/toolbar/toolbar.jsx +224 -254
  105. package/src/plugins/utils.js +0 -16
  106. package/src/serialization.jsx +1 -1
  107. package/lib/components.js +0 -92
  108. package/lib/components.js.map +0 -1
  109. package/lib/new-serialization.js +0 -280
  110. package/lib/new-serialization.js.map +0 -1
  111. package/lib/plugins/hotKeys/index.js +0 -60
  112. package/lib/plugins/hotKeys/index.js.map +0 -1
  113. package/lib/test-serializer.js +0 -138
  114. package/lib/test-serializer.js.map +0 -1
  115. package/src/components.js +0 -135
  116. package/src/new-serialization.jsx +0 -310
  117. package/src/plugins/hotKeys/index.js +0 -54
  118. package/src/test-serializer.js +0 -132
@@ -1,71 +1,73 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = ImagePlugin;
8
9
  exports.serialization = void 0;
10
+
9
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
- var _react = _interopRequireDefault(require("react"));
12
- var _slateHyperscript = require("slate-hyperscript");
13
- var _debug = _interopRequireDefault(require("debug"));
14
- var _get = _interopRequireDefault(require("lodash/get"));
12
+
15
13
  var _slate = require("slate");
14
+
16
15
  var _Image = _interopRequireDefault(require("@material-ui/icons/Image"));
16
+
17
17
  var _component = _interopRequireDefault(require("./component"));
18
+
18
19
  var _imageToolbar = _interopRequireDefault(require("./image-toolbar"));
20
+
19
21
  var _insertImageHandler = _interopRequireDefault(require("./insert-image-handler"));
20
- var _slateReact = require("slate-react");
22
+
23
+ var _react = _interopRequireDefault(require("react"));
24
+
25
+ var _debug = _interopRequireDefault(require("debug"));
26
+
21
27
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
28
+
22
29
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
30
+
23
31
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image');
32
+
24
33
  function ImagePlugin(opts) {
25
34
  var toolbar = opts.insertImageRequested && {
26
35
  icon: /*#__PURE__*/_react["default"].createElement(_Image["default"], null),
27
- onClick: function onClick(editor) {
36
+ onClick: function onClick(value, onChange) {
28
37
  log('[toolbar] onClick');
29
- var inline = {
38
+
39
+ var inline = _slate.Inline.create({
30
40
  type: 'image',
41
+ isVoid: true,
31
42
  data: {
32
- newImage: true,
33
43
  loaded: false,
34
44
  src: undefined
35
- },
36
- children: [{
37
- text: ''
38
- }]
39
- };
40
- editor.insertNode(inline);
41
-
42
- // get the element just inserted
43
- var _Editor$node = _slate.Editor.node(editor, editor.selection),
44
- _Editor$node2 = (0, _slicedToArray2["default"])(_Editor$node, 2),
45
- node = _Editor$node2[0],
46
- nodePath = _Editor$node2[1];
47
- opts.insertImageRequested(function () {
48
- return new _insertImageHandler["default"](node, nodePath, editor);
45
+ }
46
+ });
47
+
48
+ var change = value.change().insertInline(inline);
49
+ onChange(change);
50
+ opts.insertImageRequested(function (getValue) {
51
+ return new _insertImageHandler["default"](inline, getValue, onChange);
49
52
  });
50
53
  },
51
- customToolbar: function customToolbar(node, nodePath, editor, onToolbarDone) {
52
- var alignment = node.data.alignment;
53
- var alt = node.data.alt;
54
- var imageLoaded = node.data.loaded !== false;
55
- var onChange = function onChange(newValues) {
56
- var update = _objectSpread(_objectSpread({}, node.data), newValues);
57
- editor.apply({
58
- type: 'set_node',
59
- path: nodePath,
60
- properties: {
61
- data: node.data
62
- },
63
- newProperties: {
64
- data: update
65
- }
54
+ supports: function supports(node) {
55
+ return node.object === 'inline' && node.type === 'image';
56
+ },
57
+ customToolbar: function customToolbar(node, value, onToolbarDone) {
58
+ var alignment = node.data.get('alignment');
59
+ var alt = node.data.get('alt');
60
+ var imageLoaded = node.data.get('loaded') !== false;
61
+
62
+ var onChange = function onChange(newValues, done) {
63
+ var update = _objectSpread(_objectSpread({}, node.data.toObject()), newValues);
64
+
65
+ var change = value.change().setNodeByKey(node.key, {
66
+ data: update
66
67
  });
67
- onToolbarDone(null, false);
68
+ onToolbarDone(change, done);
68
69
  };
70
+
69
71
  var Tb = function Tb() {
70
72
  return /*#__PURE__*/_react["default"].createElement(_imageToolbar["default"], {
71
73
  disableImageAlignmentButtons: opts.disableImageAlignmentButtons,
@@ -75,6 +77,7 @@ function ImagePlugin(opts) {
75
77
  onChange: onChange
76
78
  });
77
79
  };
80
+
78
81
  return Tb;
79
82
  },
80
83
  showDone: true
@@ -82,77 +85,33 @@ function ImagePlugin(opts) {
82
85
  return {
83
86
  name: 'image',
84
87
  toolbar: toolbar,
85
- rules: function rules(editor) {
86
- var isVoid = editor.isVoid,
87
- isInline = editor.isInline;
88
- editor.isVoid = function (element) {
89
- return element.type === 'image' ? true : isVoid(element);
90
- };
91
- editor.isInline = function (element) {
92
- return element.type === 'image' ? true : isInline(element);
93
- };
94
- return editor;
95
- },
96
- supports: function supports(node) {
97
- return node.type === 'image';
98
- },
99
- deleteNode: function deleteNode(e, node, nodePath, editor, onChange) {
88
+ deleteNode: function deleteNode(e, node, value, onChange) {
100
89
  e.preventDefault();
90
+
101
91
  if (opts.onDelete) {
102
- var update = _objectSpread(_objectSpread({}, node.data), {}, {
92
+ var update = node.data.merge(_slate.Data.create({
103
93
  deleteStatus: 'pending'
94
+ }));
95
+ var change = value.change().setNodeByKey(node.key, {
96
+ data: update
104
97
  });
105
- editor.apply({
106
- type: 'set_node',
107
- path: nodePath,
108
- properties: {
109
- data: node.data
110
- },
111
- newProperties: {
112
- data: update
113
- }
114
- });
115
- editor.selection = null;
116
- onChange(editor);
117
- opts.onDelete(node.data.src, function (err) {
98
+ onChange(change);
99
+ opts.onDelete(node.data.get('src'), function (err, v) {
118
100
  if (!err) {
119
- editor.apply({
120
- type: 'remove_node',
121
- path: nodePath
122
- });
101
+ change = v.change().removeNodeByKey(node.key);
123
102
  } else {
124
103
  log('[error]: ', err);
125
- editor.apply({
126
- type: 'set_node',
127
- path: nodePath,
128
- properties: {
129
- data: node.data
130
- },
131
- newProperties: {
132
- data: _objectSpread(_objectSpread({}, node.data), {}, {
133
- deleteStatus: 'failed'
134
- })
135
- }
136
- });
104
+ change = v.change().setNodeByKey(node.key, node.data.merge(_slate.Data.create({
105
+ deleteStatus: 'failed'
106
+ })));
137
107
  }
138
- editor.selection = null;
139
- onChange(editor, function () {
140
- setTimeout(function () {
141
- return _slateReact.ReactEditor.focus(editor);
142
- }, 50);
143
- });
108
+
109
+ onChange(change);
144
110
  });
145
111
  } else {
146
- editor.selection = null;
147
- editor.apply({
148
- type: 'remove_node',
149
- path: nodePath
150
- });
151
- onChange(editor, function () {
152
- setTimeout(function () {
153
- return _slateReact.ReactEditor.focus(editor);
154
- }, 50);
155
- });
112
+ var _change = value.change().removeNodeByKey(node.key);
113
+
114
+ onChange(_change);
156
115
  }
157
116
  },
158
117
  stopReset: function stopReset(value) {
@@ -160,9 +119,11 @@ function ImagePlugin(opts) {
160
119
  if (n.type !== 'image') {
161
120
  return;
162
121
  }
163
- return n.data.loaded === false;
122
+
123
+ return n.data.get('loaded') === false;
164
124
  });
165
125
  /** don't reset if there is an image pending insertion */
126
+
166
127
  return imgPendingInsertion !== undefined && imgPendingInsertion !== null;
167
128
  },
168
129
  renderNode: function renderNode(props) {
@@ -174,7 +135,7 @@ function ImagePlugin(opts) {
174
135
  maxImageWidth: opts.maxImageWidth,
175
136
  maxImageHeight: opts.maxImageHeight
176
137
  }, props);
177
- return /*#__PURE__*/_react["default"].createElement(_component["default"], all, props.children);
138
+ return /*#__PURE__*/_react["default"].createElement(_component["default"], all);
178
139
  }
179
140
  },
180
141
  normalizeNode: function normalizeNode(node) {
@@ -186,11 +147,13 @@ function ImagePlugin(opts) {
186
147
  if (d.object === 'text') {
187
148
  textNodeMap[index] = d;
188
149
  }
150
+
189
151
  if (d.type === 'image') {
190
152
  if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {
191
153
  updateNodesArray.push(textNodeMap[index - 1]);
192
154
  }
193
155
  }
156
+
194
157
  index++;
195
158
  });
196
159
  if (!updateNodesArray.length) return;
@@ -204,8 +167,11 @@ function ImagePlugin(opts) {
204
167
  }
205
168
  };
206
169
  }
170
+
207
171
  var serialization = {
208
- deserialize: function deserialize(el /*, next*/) {
172
+ deserialize: function deserialize(el
173
+ /*, next*/
174
+ ) {
209
175
  var name = el.tagName.toLowerCase();
210
176
  if (name !== 'img') return;
211
177
  log('deserialize: ', name);
@@ -217,8 +183,10 @@ var serialization = {
217
183
  };
218
184
  var width = parseInt(style.width.replace('px', ''), 10) || null;
219
185
  var height = parseInt(style.height.replace('px', ''), 10) || null;
220
- var out = (0, _slateHyperscript.jsx)('element', {
186
+ var out = {
187
+ object: 'inline',
221
188
  type: 'image',
189
+ isVoid: true,
222
190
  data: {
223
191
  src: el.getAttribute('src'),
224
192
  width: width,
@@ -228,48 +196,58 @@ var serialization = {
228
196
  alignment: el.getAttribute('alignment'),
229
197
  alt: el.getAttribute('alt')
230
198
  }
231
- });
199
+ };
232
200
  log('return object: ', out);
233
201
  return out;
234
202
  },
235
- serialize: function serialize(object /*, children*/) {
203
+ serialize: function serialize(object
204
+ /*, children*/
205
+ ) {
236
206
  if (object.type !== 'image') return;
237
207
  var data = object.data;
238
- var alignment = data.alignment,
239
- alt = data.alt,
240
- src = data.src,
241
- height = data.height,
242
- margin = data.margin,
243
- justifyContent = data.justifyContent,
244
- width = data.width;
208
+ var src = data.get('src');
209
+ var width = data.get('width');
210
+ var height = data.get('height');
211
+ var alignment = data.get('alignment') || 'left';
212
+ var margin = data.get('margin');
213
+ var justifyContent = data.get('margin');
214
+ var alt = data.get('alt');
245
215
  var style = {};
216
+
246
217
  if (width) {
247
218
  style.width = "".concat(width, "px");
248
219
  }
220
+
249
221
  if (height) {
250
222
  style.height = "".concat(height, "px");
251
223
  }
224
+
252
225
  style.margin = margin;
253
226
  style.justifyContent = justifyContent;
227
+
254
228
  if (alignment) {
255
229
  switch (alignment) {
256
230
  case 'left':
257
231
  style.justifyContent = 'flex-start';
258
232
  style.margin = '0';
259
233
  break;
234
+
260
235
  case 'center':
261
236
  style.justifyContent = 'center';
262
237
  style.margin = '0 auto';
263
238
  break;
239
+
264
240
  case 'right':
265
241
  style.justifyContent = 'flex-end';
266
242
  style.margin = 'auto 0 0 auto';
267
243
  break;
244
+
268
245
  default:
269
246
  style.justifyContent = 'flex-start';
270
247
  break;
271
248
  }
272
249
  }
250
+
273
251
  style.objectFit = 'contain';
274
252
  var props = {
275
253
  src: src,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_slateHyperscript","_debug","_get","_slate","_Image","_component","_imageToolbar","_insertImageHandler","_slateReact","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","ImagePlugin","opts","toolbar","insertImageRequested","icon","createElement","onClick","editor","inline","type","data","newImage","loaded","src","undefined","children","text","insertNode","_Editor$node","Editor","node","selection","_Editor$node2","_slicedToArray2","nodePath","InsertImageHandler","customToolbar","onToolbarDone","alignment","alt","imageLoaded","onChange","newValues","update","path","properties","newProperties","Tb","disableImageAlignmentButtons","showDone","name","rules","isVoid","isInline","element","supports","deleteNode","e","preventDefault","onDelete","deleteStatus","err","setTimeout","ReactEditor","focus","stopReset","value","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","assign","onFocus","onBlur","maxImageWidth","maxImageHeight","normalizeNode","textNodeMap","updateNodesArray","index","d","change","withoutNormalization","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","margin","justifyContent","parseInt","replace","out","jsx","getAttribute","serialize","concat","objectFit","exports"],"sources":["../../../src/plugins/image/index.jsx"],"sourcesContent":["import React from 'react';\nimport { jsx } from 'slate-hyperscript';\nimport debug from 'debug';\nimport get from 'lodash/get';\nimport { Node as SlateNode, Editor } from 'slate';\n\nimport Image from '@material-ui/icons/Image';\nimport ImageComponent from './component';\nimport ImageToolbar from './image-toolbar';\nimport InsertImageHandler from './insert-image-handler';\nimport { ReactEditor } from 'slate-react';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nexport default function ImagePlugin(opts) {\n const toolbar = opts.insertImageRequested && {\n icon: <Image />,\n onClick: editor => {\n log('[toolbar] onClick');\n const inline = {\n type: 'image',\n data: {\n newImage: true,\n loaded: false,\n src: undefined,\n },\n children: [{ text: '' }],\n };\n\n editor.insertNode(inline);\n\n // get the element just inserted\n const [node, nodePath] = Editor.node(editor, editor.selection);\n\n opts.insertImageRequested(() => new InsertImageHandler(node, nodePath, editor));\n },\n customToolbar: (node, nodePath, editor, onToolbarDone) => {\n const alignment = node.data.alignment;\n const alt = node.data.alt;\n const imageLoaded = node.data.loaded !== false;\n const onChange = newValues => {\n const update = {\n ...node.data,\n ...newValues\n };\n\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: update }\n });\n\n onToolbarDone(null, false);\n };\n\n const Tb = () => (\n <ImageToolbar\n disableImageAlignmentButtons={opts.disableImageAlignmentButtons}\n alt={alt}\n imageLoaded={imageLoaded}\n alignment={alignment || 'left'}\n onChange={onChange}\n />\n );\n return Tb;\n },\n showDone: true,\n };\n\n return {\n name: 'image',\n toolbar,\n rules: editor => {\n const { isVoid, isInline } = editor;\n\n editor.isVoid = element => {\n return element.type === 'image' ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return element.type === 'image' ? true : isInline(element);\n };\n\n return editor;\n },\n supports: node => node.type === 'image',\n deleteNode: (e, node, nodePath, editor, onChange) => {\n e.preventDefault();\n\n if (opts.onDelete) {\n const update = {\n ...node.data,\n deleteStatus: 'pending'\n };\n\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: update }\n });\n\n editor.selection = null;\n onChange(editor);\n opts.onDelete(node.data.src, (err) => {\n if (!err) {\n editor.apply({\n type: 'remove_node',\n path: nodePath\n });\n } else {\n log('[error]: ', err);\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: { ...node.data, deleteStatus: 'failed' } },\n });\n }\n\n editor.selection = null;\n onChange(editor, () => {\n setTimeout(() => ReactEditor.focus(editor), 50);\n });\n });\n } else {\n editor.selection = null;\n editor.apply({\n type: 'remove_node',\n path: nodePath\n });\n onChange(editor, () => {\n setTimeout(() => ReactEditor.focus(editor), 50);\n });\n }\n },\n stopReset: (value) => {\n const imgPendingInsertion = value.document.findDescendant((n) => {\n if (n.type !== 'image') {\n return;\n }\n return n.data.loaded === false;\n });\n /** don't reset if there is an image pending insertion */\n return imgPendingInsertion !== undefined && imgPendingInsertion !== null;\n },\n renderNode(props) {\n if (props.node.type === 'image') {\n const all = Object.assign(\n {\n onDelete: opts.onDelete,\n onFocus: opts.onFocus,\n onBlur: opts.onBlur,\n maxImageWidth: opts.maxImageWidth,\n maxImageHeight: opts.maxImageHeight,\n },\n props,\n );\n return (\n <ImageComponent {...all}>\n {props.children}\n </ImageComponent>\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 if (d.type === 'image') {\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 const name = el.tagName.toLowerCase();\n if (name !== 'img') return;\n\n log('deserialize: ', name);\n const style = el.style || { width: '', height: '', margin: '', justifyContent: '' };\n const width = parseInt(style.width.replace('px', ''), 10) || null;\n const height = parseInt(style.height.replace('px', ''), 10) || null;\n\n const out = jsx('element', {\n type: 'image',\n data: {\n src: el.getAttribute('src'),\n width,\n height,\n margin: el.style.margin,\n justifyContent: el.style.justifyContent,\n alignment: el.getAttribute('alignment'),\n alt: el.getAttribute('alt'),\n },\n });\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n if (object.type !== 'image') return;\n\n const { data } = object;\n const {\n alignment,\n alt,\n src,\n height,\n margin,\n justifyContent,\n width\n } = data;\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 style.margin = margin;\n style.justifyContent = justifyContent;\n\n if (alignment) {\n switch (alignment) {\n case 'left':\n style.justifyContent = 'flex-start';\n style.margin = '0';\n break;\n case 'center':\n style.justifyContent = 'center';\n style.margin = '0 auto';\n break;\n case 'right':\n style.justifyContent = 'flex-end';\n style.margin = 'auto 0 0 auto';\n break;\n default:\n style.justifyContent = 'flex-start';\n break;\n }\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style,\n alignment,\n alt,\n };\n\n return <img {...props} />;\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/plugins/image/index.jsx"],"names":["log","ImagePlugin","opts","toolbar","insertImageRequested","icon","onClick","value","onChange","inline","Inline","create","type","isVoid","data","loaded","src","undefined","change","insertInline","getValue","InsertImageHandler","supports","node","object","customToolbar","onToolbarDone","alignment","get","alt","imageLoaded","newValues","done","update","toObject","setNodeByKey","key","Tb","disableImageAlignmentButtons","showDone","name","deleteNode","e","preventDefault","onDelete","merge","Data","deleteStatus","err","v","removeNodeByKey","stopReset","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","Object","assign","onFocus","onBlur","maxImageWidth","maxImageHeight","normalizeNode","textNodeMap","updateNodesArray","index","d","text","push","length","withoutNormalization","forEach","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","margin","justifyContent","parseInt","replace","out","getAttribute","serialize","objectFit"],"mappings":"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","sourcesContent":["import { Data, Inline } from 'slate';\n\nimport Image from '@material-ui/icons/Image';\nimport ImageComponent from './component';\nimport ImageToolbar from './image-toolbar';\nimport InsertImageHandler from './insert-image-handler';\nimport React from 'react';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nexport default function ImagePlugin(opts) {\n const toolbar = opts.insertImageRequested && {\n icon: <Image />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loaded: false,\n src: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n opts.insertImageRequested((getValue) => new InsertImageHandler(inline, getValue, onChange));\n },\n supports: (node) => node.object === 'inline' && node.type === 'image',\n customToolbar: (node, value, onToolbarDone) => {\n const alignment = node.data.get('alignment');\n const alt = node.data.get('alt');\n const imageLoaded = node.data.get('loaded') !== false;\n const onChange = (newValues, done) => {\n const update = {\n ...node.data.toObject(),\n ...newValues,\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, done);\n };\n\n const Tb = () => (\n <ImageToolbar\n disableImageAlignmentButtons={opts.disableImageAlignmentButtons}\n alt={alt}\n imageLoaded={imageLoaded}\n alignment={alignment || 'left'}\n onChange={onChange}\n />\n );\n return Tb;\n },\n showDone: true,\n };\n\n return {\n name: 'image',\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n if (opts.onDelete) {\n const update = node.data.merge(Data.create({ deleteStatus: 'pending' }));\n\n let change = value.change().setNodeByKey(node.key, { data: update });\n\n onChange(change);\n opts.onDelete(node.data.get('src'), (err, v) => {\n if (!err) {\n change = v.change().removeNodeByKey(node.key);\n } else {\n log('[error]: ', err);\n change = v.change().setNodeByKey(node.key, node.data.merge(Data.create({ deleteStatus: 'failed' })));\n }\n onChange(change);\n });\n } else {\n let change = value.change().removeNodeByKey(node.key);\n onChange(change);\n }\n },\n stopReset: (value) => {\n const imgPendingInsertion = value.document.findDescendant((n) => {\n if (n.type !== 'image') {\n return;\n }\n return n.data.get('loaded') === false;\n });\n /** don't reset if there is an image pending insertion */\n return imgPendingInsertion !== undefined && imgPendingInsertion !== null;\n },\n renderNode(props) {\n if (props.node.type === 'image') {\n const all = Object.assign(\n {\n onDelete: opts.onDelete,\n onFocus: opts.onFocus,\n onBlur: opts.onBlur,\n maxImageWidth: opts.maxImageWidth,\n maxImageHeight: opts.maxImageHeight,\n },\n props,\n );\n return <ImageComponent {...all} />;\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 if (d.type === 'image') {\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 const name = el.tagName.toLowerCase();\n if (name !== 'img') return;\n\n log('deserialize: ', name);\n const style = el.style || { width: '', height: '', margin: '', justifyContent: '' };\n const width = parseInt(style.width.replace('px', ''), 10) || null;\n const height = parseInt(style.height.replace('px', ''), 10) || null;\n\n const out = {\n object: 'inline',\n type: 'image',\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n width,\n height,\n margin: el.style.margin,\n justifyContent: el.style.justifyContent,\n alignment: el.getAttribute('alignment'),\n alt: el.getAttribute('alt'),\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n if (object.type !== 'image') return;\n\n const { data } = object;\n const src = data.get('src');\n const width = data.get('width');\n const height = data.get('height');\n const alignment = data.get('alignment') || 'left';\n const margin = data.get('margin');\n const justifyContent = data.get('margin');\n const alt = data.get('alt');\n const style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.margin = margin;\n style.justifyContent = justifyContent;\n\n if (alignment) {\n switch (alignment) {\n case 'left':\n style.justifyContent = 'flex-start';\n style.margin = '0';\n break;\n case 'center':\n style.justifyContent = 'center';\n style.margin = '0 auto';\n break;\n case 'right':\n style.justifyContent = 'flex-end';\n style.margin = 'auto 0 0 auto';\n break;\n default:\n style.justifyContent = 'flex-start';\n break;\n }\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style,\n alignment,\n alt,\n };\n\n return <img {...props} />;\n },\n};\n"],"file":"index.js"}
@@ -1,45 +1,52 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+
9
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
10
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _omit = _interopRequireDefault(require("lodash/omit"));
13
+
14
+ var _slate = require("slate");
15
+
12
16
  var _debug = _interopRequireDefault(require("debug"));
13
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
- var log = (0, _debug["default"])('@pie-lib:editable-html:image:insert-image-handler');
16
17
 
18
+ var log = (0, _debug["default"])('@pie-lib:editable-html:image:insert-image-handler');
17
19
  /**
18
20
  * Handles user selection, insertion (or cancellation) of an image into the editor.
19
- * @param {Block} placeHolderPath - a block that has been added to the editor as a place holder for the image
21
+ * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image
20
22
  * @param {Function} getValue - a function to return the value of the editor
21
23
  * @param {Function} onChange - callback to notify changes applied by the handler
22
24
  * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted
23
25
  */
26
+
24
27
  var InsertImageHandler = /*#__PURE__*/function () {
25
- function InsertImageHandler(node, placeHolderPath, editor) {
28
+ function InsertImageHandler(placeholderBlock, getValue, onChange) {
26
29
  var isPasted = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
27
30
  (0, _classCallCheck2["default"])(this, InsertImageHandler);
28
- this.node = node;
29
- this.placeHolderPath = placeHolderPath;
30
- this.editor = editor;
31
+ this.placeholderBlock = placeholderBlock;
32
+ this.getValue = getValue;
33
+ this.onChange = onChange;
31
34
  this.isPasted = isPasted;
32
35
  this.chosenFile = null;
33
36
  }
37
+
34
38
  (0, _createClass2["default"])(InsertImageHandler, [{
35
39
  key: "getPlaceholderInDocument",
36
40
  value: function getPlaceholderInDocument(value) {
37
41
  var document = value.document;
38
- var directChild = document.getChild(this.placeHolderPath);
42
+ var directChild = document.getChild(this.placeholderBlock.key);
43
+
39
44
  if (directChild) {
40
45
  return directChild;
41
46
  }
42
- var child = document.getDescendant(this.placeHolderPath);
47
+
48
+ var child = document.getDescendant(this.placeholderBlock.key);
49
+
43
50
  if (child) {
44
51
  return child;
45
52
  } else {
@@ -51,107 +58,81 @@ var InsertImageHandler = /*#__PURE__*/function () {
51
58
  key: "cancel",
52
59
  value: function cancel() {
53
60
  log('insert cancelled');
54
- this.editor.apply({
55
- type: 'remove_node',
56
- path: this.placeHolderPath
57
- });
61
+ var c = this.getValue().change().removeNodeByKey(this.placeholderBlock.key);
62
+ this.onChange(c);
58
63
  }
59
64
  }, {
60
65
  key: "done",
61
66
  value: function done(err, src) {
62
67
  log('done: err:', err);
68
+
63
69
  if (err) {
64
70
  //eslint-disable-next-line
65
71
  console.log(err);
66
72
  } else {
67
- this.editor.apply({
68
- type: 'set_node',
69
- path: this.placeHolderPath,
70
- properties: {
71
- data: this.node.data
72
- },
73
- newProperties: {
74
- data: {
75
- src: src,
76
- loaded: true,
77
- percent: 100
78
- }
79
- }
80
- });
81
- var newData = _objectSpread(_objectSpread({}, this.node.data), {}, {
82
- src: src,
73
+ var value = this.getValue();
74
+ var child = this.getPlaceholderInDocument(value);
75
+ var data = child.data.merge(_slate.Data.create({
83
76
  loaded: true,
77
+ src: src,
84
78
  percent: 100
79
+ }));
80
+ var change = value.change().setNodeByKey(this.placeholderBlock.key, {
81
+ data: data
85
82
  });
86
- this.node = Object.assign({}, this.node, {
87
- data: (0, _omit["default"])(newData, 'newImage')
88
- });
83
+ this.onChange(change);
89
84
  }
90
85
  }
91
-
92
86
  /**
93
87
  * Notify handler that the user chose a file - will create a change with a preview in the editor.
94
88
  *
95
89
  * @param {File} file - the file that the user chose using a file input.
96
90
  */
91
+
97
92
  }, {
98
93
  key: "fileChosen",
99
94
  value: function fileChosen(file) {
100
95
  var _this = this;
96
+
101
97
  if (!file) {
102
98
  return;
103
- }
99
+ } // Save the chosen file to this.chosenFile
100
+
104
101
 
105
- // Save the chosen file to this.chosenFile
106
102
  this.chosenFile = file;
107
103
  log('[fileChosen] file: ', file);
108
104
  var reader = new FileReader();
105
+
109
106
  reader.onload = function () {
107
+ var value = _this.getValue();
108
+
110
109
  var dataURL = reader.result;
111
- _this.editor.apply({
112
- type: 'set_node',
113
- path: _this.placeHolderPath,
114
- properties: {
115
- data: _this.node.data
116
- },
117
- newProperties: {
118
- data: _objectSpread(_objectSpread({}, _this.node.data), {}, {
119
- src: dataURL
120
- })
121
- }
122
- });
123
- _this.node = Object.assign({}, _this.node, {
124
- data: {
125
- src: dataURL
126
- }
110
+
111
+ var child = _this.getPlaceholderInDocument(value);
112
+
113
+ var data = child.data.set('src', dataURL);
114
+ var change = value.change().setNodeByKey(_this.placeholderBlock.key, {
115
+ data: data
127
116
  });
117
+
118
+ _this.onChange(change);
128
119
  };
120
+
129
121
  reader.readAsDataURL(file);
130
122
  }
131
123
  }, {
132
124
  key: "progress",
133
125
  value: function progress(percent, bytes, total) {
134
126
  log('progress: ', percent, bytes, total);
135
- this.editor.apply({
136
- type: 'set_node',
137
- path: this.placeHolderPath,
138
- properties: {
139
- data: this.node.data
140
- },
141
- newProperties: {
142
- data: _objectSpread(_objectSpread({}, this.node.data), {}, {
143
- percent: percent
144
- })
145
- }
146
- });
147
- this.node = Object.assign({}, this.node, {
148
- data: {
149
- percent: percent
150
- }
127
+ var value = this.getValue();
128
+ var child = this.getPlaceholderInDocument(value);
129
+ var data = child.data.set('percent', percent);
130
+ var change = value.change().setNodeByKey(this.placeholderBlock.key, {
131
+ data: data
151
132
  });
152
- }
133
+ this.onChange(change);
134
+ } // Add a getter method to retrieve the chosen file
153
135
 
154
- // Add a getter method to retrieve the chosen file
155
136
  }, {
156
137
  key: "getChosenFile",
157
138
  value: function getChosenFile() {
@@ -160,6 +141,7 @@ var InsertImageHandler = /*#__PURE__*/function () {
160
141
  }]);
161
142
  return InsertImageHandler;
162
143
  }();
144
+
163
145
  var _default = InsertImageHandler;
164
146
  exports["default"] = _default;
165
147
  //# sourceMappingURL=insert-image-handler.js.map