@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.
- package/CHANGELOG.json +1 -1
- package/CHANGELOG.md +81 -0
- package/LICENSE.md +5 -0
- package/lib/editor.js +410 -543
- package/lib/editor.js.map +1 -1
- package/lib/index.js +200 -101
- package/lib/index.js.map +1 -1
- package/lib/parse-html.js +5 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +12 -2
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +71 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/html/icons/index.js +38 -0
- package/lib/plugins/html/icons/index.js.map +1 -0
- package/lib/plugins/html/index.js +75 -0
- package/lib/plugins/html/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +26 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +124 -90
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +45 -7
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +91 -113
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +54 -72
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +71 -31
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +129 -58
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +152 -118
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +185 -168
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +197 -110
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +24 -4
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +65 -23
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +18 -1
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +133 -122
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +33 -15
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +7 -0
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +279 -390
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +47 -14
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +63 -51
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +9 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +5 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +261 -225
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +16 -19
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +70 -11
- package/lib/serialization.js.map +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -17
- package/src/editor.jsx +139 -434
- package/src/index.jsx +96 -62
- package/src/plugins/characters/index.jsx +17 -12
- package/src/plugins/html/icons/index.jsx +19 -0
- package/src/plugins/html/index.jsx +68 -0
- package/src/plugins/image/component.jsx +38 -60
- package/src/plugins/image/index.jsx +42 -95
- package/src/plugins/image/insert-image-handler.js +27 -62
- package/src/plugins/index.jsx +39 -21
- package/src/plugins/list/index.jsx +90 -62
- package/src/plugins/math/index.jsx +70 -93
- package/src/plugins/media/index.jsx +117 -146
- package/src/plugins/media/media-dialog.js +9 -10
- package/src/plugins/media/media-wrapper.jsx +27 -29
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
- package/src/plugins/respArea/index.jsx +84 -114
- package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
- package/src/plugins/respArea/utils.jsx +28 -23
- package/src/plugins/table/index.jsx +214 -334
- package/src/plugins/table/table-toolbar.jsx +4 -3
- package/src/plugins/toolbar/default-toolbar.jsx +30 -48
- package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
- package/src/plugins/toolbar/toolbar.jsx +224 -254
- package/src/plugins/utils.js +0 -16
- package/src/serialization.jsx +1 -1
- package/lib/components.js +0 -92
- package/lib/components.js.map +0 -1
- package/lib/new-serialization.js +0 -280
- package/lib/new-serialization.js.map +0 -1
- package/lib/plugins/hotKeys/index.js +0 -60
- package/lib/plugins/hotKeys/index.js.map +0 -1
- package/lib/test-serializer.js +0 -138
- package/lib/test-serializer.js.map +0 -1
- package/src/components.js +0 -135
- package/src/new-serialization.jsx +0 -310
- package/src/plugins/hotKeys/index.js +0 -54
- 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
|
-
|
|
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
|
-
|
|
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(
|
|
36
|
+
onClick: function onClick(value, onChange) {
|
|
28
37
|
log('[toolbar] onClick');
|
|
29
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
120
|
-
type: 'remove_node',
|
|
121
|
-
path: nodePath
|
|
122
|
-
});
|
|
101
|
+
change = v.change().removeNodeByKey(node.key);
|
|
123
102
|
} else {
|
|
124
103
|
log('[error]: ', err);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
|
|
139
|
-
onChange(
|
|
140
|
-
setTimeout(function () {
|
|
141
|
-
return _slateReact.ReactEditor.focus(editor);
|
|
142
|
-
}, 50);
|
|
143
|
-
});
|
|
108
|
+
|
|
109
|
+
onChange(change);
|
|
144
110
|
});
|
|
145
111
|
} else {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
203
|
+
serialize: function serialize(object
|
|
204
|
+
/*, children*/
|
|
205
|
+
) {
|
|
236
206
|
if (object.type !== 'image') return;
|
|
237
207
|
var data = object.data;
|
|
238
|
-
var
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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
|
-
|
|
9
|
+
|
|
9
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
10
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
-
|
|
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}
|
|
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(
|
|
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.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
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.
|
|
42
|
+
var directChild = document.getChild(this.placeholderBlock.key);
|
|
43
|
+
|
|
39
44
|
if (directChild) {
|
|
40
45
|
return directChild;
|
|
41
46
|
}
|
|
42
|
-
|
|
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.
|
|
55
|
-
|
|
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.
|
|
68
|
-
|
|
69
|
-
|
|
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.
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|