@pie-lib/editable-html 7.22.6 → 8.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -88,22 +88,14 @@ var Component = /*#__PURE__*/function (_React$Component) {
88
88
  var _this$props = _this.props,
89
89
  node = _this$props.node,
90
90
  editor = _this$props.editor;
91
- var resizePercent = node.data.get('resizePercent');
92
- log('[applySizeData]: resizePercent: ', resizePercent);
93
91
  var update = node.data;
92
+ var w = update.get('width');
94
93
 
95
- if (resizePercent) {
96
- update = update.set('width', _this.getWidth(resizePercent));
97
- update = update.set('height', _this.getHeight(resizePercent));
98
- } else {
99
- var w = update.get('width');
100
-
101
- if (w) {
102
- update = update.set('resizePercent', _this.getPercentFromWidth(w));
103
- }
94
+ if (w) {
95
+ update = update.set('resizePercent', _this.getPercentFromWidth(w));
104
96
  }
105
97
 
106
- log('[applySizeData] update: ', update);
98
+ log("[applySizeData] update: ", update);
107
99
 
108
100
  if (!update.equals(node.data)) {
109
101
  editor.change(function (c) {
@@ -114,6 +106,138 @@ var Component = /*#__PURE__*/function (_React$Component) {
114
106
  }
115
107
  });
116
108
 
109
+ _defineProperty(_assertThisInitialized(_this), "initialiseResize", function () {
110
+ window.addEventListener('mousemove', _this.startResizing, false);
111
+ window.addEventListener('mouseup', _this.stopResizing, false);
112
+ });
113
+
114
+ _defineProperty(_assertThisInitialized(_this), "loadImage", function () {
115
+ var _ref = _this.props || {},
116
+ maxImageWidth = _ref.maxImageWidth,
117
+ maxImageHeight = _ref.maxImageHeight;
118
+
119
+ maxImageWidth = maxImageWidth || 700;
120
+ maxImageHeight = maxImageHeight || 900;
121
+ var box = _this.img; //on first load
122
+
123
+ if (!box.style.width || box.style.width === 'auto') {
124
+ var dimensions = {
125
+ width: box && box.naturalWidth || 100,
126
+ height: box && box.naturalHeight || 100
127
+ };
128
+
129
+ var _this$updateImageDime = _this.updateImageDimensions(dimensions, {
130
+ width: dimensions.width < maxImageWidth ? dimensions.width : maxImageWidth,
131
+ height: dimensions.height < maxImageHeight ? dimensions.height : maxImageHeight
132
+ }, true),
133
+ width = _this$updateImageDime.width,
134
+ height = _this$updateImageDime.height;
135
+
136
+ box.style.width = "".concat(width, "px");
137
+ box.style.height = "".concat(height, "px");
138
+
139
+ _this.setState({
140
+ dimensions: {
141
+ height: height,
142
+ width: width
143
+ }
144
+ });
145
+
146
+ var _this$props2 = _this.props,
147
+ node = _this$props2.node,
148
+ editor = _this$props2.editor;
149
+ var update = node.data;
150
+ update = update.set('width', width);
151
+ update = update.set('height', height);
152
+
153
+ if (!update.equals(node.data)) {
154
+ editor.change(function (c) {
155
+ return c.setNodeByKey(node.key, {
156
+ data: update
157
+ });
158
+ });
159
+ }
160
+ }
161
+ });
162
+
163
+ _defineProperty(_assertThisInitialized(_this), "startResizing", function (e) {
164
+ var bounds = e.target.getBoundingClientRect();
165
+ var box = _this.img;
166
+ var dimensions = {
167
+ width: box && box.naturalWidth || 100,
168
+ height: box && box.naturalHeight || 100
169
+ };
170
+
171
+ var _this$updateImageDime2 = _this.updateImageDimensions(dimensions, {
172
+ width: e.clientX - bounds.left,
173
+ height: e.clientY - bounds.top
174
+ }, true),
175
+ width = _this$updateImageDime2.width,
176
+ height = _this$updateImageDime2.height;
177
+
178
+ var hasMinimumWidth = width > 50 && height > 50;
179
+ var hasDimensionsConstraints = width <= 700 && height <= 900;
180
+
181
+ if (hasMinimumWidth && hasDimensionsConstraints && box) {
182
+ box.style.width = "".concat(width, "px");
183
+ box.style.height = "".concat(height, "px");
184
+
185
+ _this.setState({
186
+ dimensions: {
187
+ height: height,
188
+ width: width
189
+ }
190
+ });
191
+
192
+ var _this$props3 = _this.props,
193
+ node = _this$props3.node,
194
+ editor = _this$props3.editor;
195
+ var update = node.data;
196
+ update = update.set('width', width);
197
+ update = update.set('height', height);
198
+
199
+ if (!update.equals(node.data)) {
200
+ editor.change(function (c) {
201
+ return c.setNodeByKey(node.key, {
202
+ data: update
203
+ });
204
+ });
205
+ }
206
+ }
207
+ });
208
+
209
+ _defineProperty(_assertThisInitialized(_this), "stopResizing", function () {
210
+ window.removeEventListener('mousemove', _this.startResizing, false);
211
+ window.removeEventListener('mouseup', _this.stopResizing, false);
212
+ });
213
+
214
+ _defineProperty(_assertThisInitialized(_this), "updateImageDimensions", function (initialDim, nextDim, keepAspectRatio, resizeType) {
215
+ // if we want to keep image aspect ratio
216
+ if (keepAspectRatio) {
217
+ var imageAspectRatio = initialDim.width / initialDim.height;
218
+
219
+ if (resizeType === 'height') {
220
+ // if we want to change image height => we update the width accordingly
221
+ return {
222
+ width: nextDim.height * imageAspectRatio,
223
+ height: nextDim.height
224
+ };
225
+ } // if we want to change image width => we update the height accordingly
226
+
227
+
228
+ return {
229
+ width: nextDim.width,
230
+ height: nextDim.width / imageAspectRatio
231
+ };
232
+ } // if we don't want to keep aspect ratio, we just update both values
233
+
234
+
235
+ return {
236
+ width: nextDim.width,
237
+ height: nextDim.height
238
+ };
239
+ });
240
+
117
241
  return _this;
118
242
  }
119
243
 
@@ -121,6 +245,11 @@ var Component = /*#__PURE__*/function (_React$Component) {
121
245
  key: "componentDidMount",
122
246
  value: function componentDidMount() {
123
247
  this.applySizeData();
248
+ var resizeHandle = this.resize;
249
+
250
+ if (resizeHandle) {
251
+ resizeHandle.addEventListener('mousedown', this.initialiseResize, false);
252
+ }
124
253
  }
125
254
  }, {
126
255
  key: "componentDidUpdate",
@@ -141,12 +270,12 @@ var Component = /*#__PURE__*/function (_React$Component) {
141
270
  value: function render() {
142
271
  var _this2 = this;
143
272
 
144
- var _this$props2 = this.props,
145
- node = _this$props2.node,
146
- editor = _this$props2.editor,
147
- classes = _this$props2.classes,
148
- attributes = _this$props2.attributes,
149
- onFocus = _this$props2.onFocus;
273
+ var _this$props4 = this.props,
274
+ node = _this$props4.node,
275
+ editor = _this$props4.editor,
276
+ classes = _this$props4.classes,
277
+ attributes = _this$props4.attributes,
278
+ onFocus = _this$props4.onFocus;
150
279
  var active = editor.value.isFocused && editor.value.selection.hasEdgeIn(node);
151
280
  var src = node.data.get('src');
152
281
  var percent = node.data.get('percent');
@@ -155,7 +284,7 @@ var Component = /*#__PURE__*/function (_React$Component) {
155
284
  log('[render] node.data:', node.data);
156
285
  var size = this.getSize(node.data);
157
286
  log('[render] style:', size);
158
- var className = (0, _classnames["default"])(classes.root, active && classes.active, !loaded && classes.loading, deleteStatus === 'pending' && classes.pendingDelete);
287
+ var className = (0, _classnames["default"])(classes.root, !loaded && classes.loading, deleteStatus === 'pending' && classes.pendingDelete);
159
288
  var progressClasses = (0, _classnames["default"])(classes.progress, loaded && classes.hideProgress);
160
289
  return [/*#__PURE__*/_react["default"].createElement("span", {
161
290
  key: 'sp1'
@@ -167,13 +296,21 @@ var Component = /*#__PURE__*/function (_React$Component) {
167
296
  mode: "determinate",
168
297
  value: percent > 0 ? percent : 0,
169
298
  className: progressClasses
170
- }), /*#__PURE__*/_react["default"].createElement("img", _extends({
171
- src: src
172
- }, attributes, {
173
- ref: function ref(r) {
174
- return _this2.img = r;
299
+ }), /*#__PURE__*/_react["default"].createElement("div", {
300
+ className: classes.imageContainer
301
+ }, /*#__PURE__*/_react["default"].createElement("img", _extends({}, attributes, {
302
+ className: (0, _classnames["default"])(classes.image, active && classes.active),
303
+ ref: function ref(_ref2) {
304
+ _this2.img = _ref2;
305
+ },
306
+ src: src,
307
+ style: size,
308
+ onLoad: this.loadImage
309
+ })), /*#__PURE__*/_react["default"].createElement("div", {
310
+ ref: function ref(_ref3) {
311
+ _this2.resize = _ref3;
175
312
  },
176
- style: size
313
+ className: (0, _classnames["default"])(classes.resize, 'resize')
177
314
  }))), /*#__PURE__*/_react["default"].createElement("span", {
178
315
  key: 'sp2'
179
316
  }, "\xA0")];
@@ -194,7 +331,9 @@ _defineProperty(Component, "propTypes", {
194
331
  classes: _propTypes["default"].object.isRequired,
195
332
  attributes: _propTypes["default"].object,
196
333
  onFocus: _propTypes["default"].func,
197
- onBlur: _propTypes["default"].func
334
+ onBlur: _propTypes["default"].func,
335
+ maxImageWidth: _propTypes["default"].number,
336
+ maxImageHeight: _propTypes["default"].number
198
337
  });
199
338
 
200
339
  var styles = function styles(theme) {
@@ -234,12 +373,34 @@ var styles = function styles(theme) {
234
373
  display: 'inline-block',
235
374
  transition: 'opacity 200ms linear'
236
375
  },
237
- active: {
238
- border: "solid 1px ".concat(theme.palette.primary.main)
239
- },
240
376
  "delete": {
241
377
  position: 'absolute',
242
378
  right: 0
379
+ },
380
+ imageContainer: {
381
+ position: 'relative',
382
+ width: 'fit-content',
383
+ display: 'flex',
384
+ alignItems: 'center',
385
+ '&&:hover > .resize': {
386
+ display: 'block'
387
+ }
388
+ },
389
+ active: {
390
+ border: "solid 1px ".concat(theme.palette.primary.main)
391
+ },
392
+ resize: {
393
+ backgroundColor: theme.palette.primary.main,
394
+ cursor: 'col-resize',
395
+ height: '35px',
396
+ width: '5px',
397
+ borderRadius: 8,
398
+ marginLeft: '5px',
399
+ marginRight: '10px',
400
+ display: 'none'
401
+ },
402
+ drawableHeight: {
403
+ minHeight: 350
243
404
  }
244
405
  };
245
406
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/image/component.jsx"],"names":["log","size","s","Component","percent","multiplier","img","naturalWidth","naturalHeight","width","floored","parseInt","toFixed","props","node","editor","resizePercent","data","get","update","set","getWidth","getHeight","w","getPercentFromWidth","equals","change","c","setNodeByKey","key","applySizeData","height","objectFit","classes","attributes","onFocus","active","value","isFocused","selection","hasEdgeIn","src","loaded","deleteStatus","getSize","className","root","loading","pendingDelete","progressClasses","progress","hideProgress","r","React","SlatePropTypes","isRequired","PropTypes","shape","func","object","onBlur","styles","theme","portal","position","opacity","transition","floatingButtonRow","backgroundColor","borderRadius","display","padding","border","boxShadow","left","top","palette","primary","main","right"],"mappings":"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","sourcesContent":["import LinearProgress from '@material-ui/core/LinearProgress';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport SlatePropTypes from 'slate-prop-types';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:component');\n\nconst size = s => (s ? `${s}px` : 'auto');\n\nexport class Component extends React.Component {\n static propTypes = {\n node: SlatePropTypes.node.isRequired,\n editor: PropTypes.shape({\n change: PropTypes.func.isRequired,\n value: PropTypes.object\n }).isRequired,\n classes: PropTypes.object.isRequired,\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func\n };\n\n getWidth = percent => {\n const multiplier = percent / 100;\n return this.img.naturalWidth * multiplier;\n };\n\n getHeight = percent => {\n const multiplier = percent / 100;\n return this.img.naturalHeight * multiplier;\n };\n\n getPercentFromWidth = width => {\n var floored = (width / this.img.naturalWidth) * 4;\n return parseInt(floored.toFixed(0) * 25, 10);\n };\n\n applySizeData = () => {\n const { node, editor } = this.props;\n\n const resizePercent = node.data.get('resizePercent');\n log('[applySizeData]: resizePercent: ', resizePercent);\n\n let update = node.data;\n\n if (resizePercent) {\n update = update.set('width', this.getWidth(resizePercent));\n update = update.set('height', this.getHeight(resizePercent));\n } else {\n const w = update.get('width');\n if (w) {\n update = update.set('resizePercent', this.getPercentFromWidth(w));\n }\n }\n\n log('[applySizeData] update: ', update);\n\n if (!update.equals(node.data)) {\n editor.change(c => c.setNodeByKey(node.key, { data: update }));\n }\n };\n\n componentDidMount() {\n this.applySizeData();\n }\n\n componentDidUpdate() {\n this.applySizeData();\n }\n\n getSize(data) {\n return {\n width: size(data.get('width')),\n height: size(data.get('height')),\n objectFit: 'contain'\n };\n }\n\n render() {\n const { node, editor, classes, attributes, onFocus } = this.props;\n const active = editor.value.isFocused && editor.value.selection.hasEdgeIn(node);\n const src = node.data.get('src');\n const percent = node.data.get('percent');\n const loaded = node.data.get('loaded') !== false;\n const deleteStatus = node.data.get('deleteStatus');\n\n log('[render] node.data:', node.data);\n\n const size = this.getSize(node.data);\n\n log('[render] style:', size);\n\n const className = classNames(\n classes.root,\n active && classes.active,\n !loaded && classes.loading,\n deleteStatus === 'pending' && classes.pendingDelete\n );\n\n const progressClasses = classNames(classes.progress, loaded && classes.hideProgress);\n\n return [\n <span key={'sp1'}>&nbsp;</span>,\n <div key={'comp'} onFocus={onFocus} className={className}>\n <LinearProgress\n mode=\"determinate\"\n value={percent > 0 ? percent : 0}\n className={progressClasses}\n />\n <img src={src} {...attributes} ref={r => (this.img = r)} style={size} />\n </div>,\n <span key={'sp2'}>&nbsp;</span>\n ];\n }\n}\n\nconst styles = theme => ({\n portal: {\n position: 'absolute',\n opacity: 0,\n transition: 'opacity 200ms linear'\n },\n floatingButtonRow: {\n backgroundColor: 'white',\n borderRadius: '1px',\n display: 'flex',\n padding: '10px',\n border: 'solid 1px #eeeeee',\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 },\n progress: {\n position: 'absolute',\n left: '0',\n width: '100%',\n top: '0%',\n transition: 'opacity 200ms linear'\n },\n hideProgress: {\n opacity: 0\n },\n loading: {\n opacity: 0.3\n },\n pendingDelete: {\n opacity: 0.3\n },\n root: {\n position: 'relative',\n border: 'solid 1px white',\n display: 'inline-block',\n transition: 'opacity 200ms linear'\n },\n active: {\n border: `solid 1px ${theme.palette.primary.main}`\n },\n delete: {\n position: 'absolute',\n right: 0\n }\n});\n\nexport default withStyles(styles)(Component);\n"],"file":"component.js"}
1
+ {"version":3,"sources":["../../../src/plugins/image/component.jsx"],"names":["log","size","s","Component","percent","multiplier","img","naturalWidth","naturalHeight","width","floored","parseInt","toFixed","props","node","editor","update","data","w","get","set","getPercentFromWidth","equals","change","c","setNodeByKey","key","window","addEventListener","startResizing","stopResizing","maxImageWidth","maxImageHeight","box","style","dimensions","height","updateImageDimensions","setState","e","bounds","target","getBoundingClientRect","clientX","left","clientY","top","hasMinimumWidth","hasDimensionsConstraints","removeEventListener","initialDim","nextDim","keepAspectRatio","resizeType","imageAspectRatio","applySizeData","resizeHandle","resize","initialiseResize","objectFit","classes","attributes","onFocus","active","value","isFocused","selection","hasEdgeIn","src","loaded","deleteStatus","getSize","className","root","loading","pendingDelete","progressClasses","progress","hideProgress","imageContainer","image","ref","loadImage","React","SlatePropTypes","isRequired","PropTypes","shape","func","object","onBlur","number","styles","theme","portal","position","opacity","transition","floatingButtonRow","backgroundColor","borderRadius","display","padding","border","boxShadow","right","alignItems","palette","primary","main","cursor","marginLeft","marginRight","drawableHeight","minHeight"],"mappings":"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","sourcesContent":["import LinearProgress from '@material-ui/core/LinearProgress';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport SlatePropTypes from 'slate-prop-types';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:component');\n\nconst size = s => (s ? `${s}px` : 'auto');\n\nexport class Component extends React.Component {\n static propTypes = {\n node: SlatePropTypes.node.isRequired,\n editor: PropTypes.shape({\n change: PropTypes.func.isRequired,\n value: PropTypes.object\n }).isRequired,\n classes: PropTypes.object.isRequired,\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n };\n\n getWidth = percent => {\n const multiplier = percent / 100;\n return this.img.naturalWidth * multiplier;\n };\n\n getHeight = percent => {\n const multiplier = percent / 100;\n return this.img.naturalHeight * multiplier;\n };\n\n getPercentFromWidth = width => {\n var floored = (width / this.img.naturalWidth) * 4;\n return parseInt(floored.toFixed(0) * 25, 10);\n };\n\n applySizeData = () => {\n const { node, editor } = this.props;\n\n let update = node.data;\n\n const w = update.get('width');\n if (w) {\n update = update.set('resizePercent', this.getPercentFromWidth(w));\n }\n\n log(\"[applySizeData] update: \", update);\n\n if (!update.equals(node.data)) {\n editor.change(c => c.setNodeByKey(node.key, { data: update }));\n }\n };\n\n initialiseResize = () => {\n window.addEventListener('mousemove', this.startResizing, false);\n window.addEventListener('mouseup', this.stopResizing, false);\n };\n\n componentDidMount() {\n this.applySizeData();\n\n const resizeHandle = this.resize;\n\n if (resizeHandle) {\n resizeHandle.addEventListener('mousedown', this.initialiseResize, false);\n }\n }\n\n componentDidUpdate() {\n this.applySizeData();\n }\n\n getSize(data) {\n return {\n width: size(data.get('width')),\n height: size(data.get('height')),\n objectFit: 'contain'\n };\n }\n\n loadImage = () => {\n let { maxImageWidth, maxImageHeight } = this.props || {};\n maxImageWidth = maxImageWidth || 700;\n maxImageHeight = maxImageHeight || 900;\n\n const box = this.img;\n\n //on first load\n if (!box.style.width || box.style.width === 'auto') {\n const dimensions = { width: box && box.naturalWidth || 100, height: box && box.naturalHeight || 100 };\n\n const { width, height } = this.updateImageDimensions(\n dimensions,\n {\n width: dimensions.width < maxImageWidth ? dimensions.width : maxImageWidth,\n height: dimensions.height < maxImageHeight ? dimensions.height : maxImageHeight\n },\n true\n );\n\n box.style.width = `${width}px`;\n box.style.height = `${height}px`;\n\n this.setState({\n dimensions: { height: height, width: width },\n });\n\n const { node, editor } = this.props;\n\n let update = node.data;\n\n update = update.set('width', width);\n update = update.set('height', height);\n\n if (!update.equals(node.data)) {\n editor.change(c => c.setNodeByKey(node.key, { data: update }));\n }\n }\n };\n\n startResizing = (e) => {\n const bounds = e.target.getBoundingClientRect();\n const box = this.img;\n const dimensions = { width: box && box.naturalWidth || 100, height: box && box.naturalHeight || 100};\n\n const { width, height } = this.updateImageDimensions(\n dimensions,\n {\n width: e.clientX - bounds.left,\n height: e.clientY - bounds.top\n },\n true\n );\n\n const hasMinimumWidth = width > 50 && height > 50;\n const hasDimensionsConstraints = width <= 700 && height <= 900;\n\n if (hasMinimumWidth && hasDimensionsConstraints && box) {\n box.style.width = `${width}px`;\n box.style.height = `${height}px`;\n\n this.setState({\n dimensions: { height: height, width: width }\n });\n\n const { node, editor } = this.props;\n\n let update = node.data;\n\n update = update.set('width', width);\n update = update.set('height', height);\n\n if (!update.equals(node.data)) {\n editor.change(c => c.setNodeByKey(node.key, { data: update }));\n }\n }\n };\n\n stopResizing = () => {\n window.removeEventListener('mousemove', this.startResizing, false);\n window.removeEventListener('mouseup', this.stopResizing, false);\n };\n\n updateImageDimensions = (initialDim, nextDim, keepAspectRatio, resizeType) => {\n // if we want to keep image aspect ratio\n if (keepAspectRatio) {\n const imageAspectRatio = initialDim.width / initialDim.height;\n\n if (resizeType === 'height') {\n // if we want to change image height => we update the width accordingly\n return {\n width: nextDim.height * imageAspectRatio,\n height: nextDim.height\n }\n }\n\n // if we want to change image width => we update the height accordingly\n return {\n width: nextDim.width,\n height: nextDim.width / imageAspectRatio\n }\n }\n\n // if we don't want to keep aspect ratio, we just update both values\n return {\n width: nextDim.width,\n height: nextDim.height\n }\n };\n\n\n render() {\n const { node, editor, classes, attributes, onFocus } = this.props;\n const active = editor.value.isFocused && editor.value.selection.hasEdgeIn(node);\n const src = node.data.get('src');\n const percent = node.data.get('percent');\n const loaded = node.data.get('loaded') !== false;\n const deleteStatus = node.data.get('deleteStatus');\n\n log('[render] node.data:', node.data);\n\n const size = this.getSize(node.data);\n\n log('[render] style:', size);\n\n const className = classNames(\n classes.root,\n !loaded && classes.loading,\n deleteStatus === 'pending' && classes.pendingDelete\n );\n\n const progressClasses = classNames(classes.progress, loaded && classes.hideProgress);\n\n return [\n <span key={'sp1'}>&nbsp;</span>,\n <div key={'comp'} onFocus={onFocus} className={className}>\n <LinearProgress\n mode=\"determinate\"\n value={percent > 0 ? percent : 0}\n className={progressClasses}\n />\n <div className={classes.imageContainer}>\n <img\n {...attributes}\n className={classNames(classes.image, active && classes.active)}\n ref={ref => {\n this.img = ref;\n }}\n src={src}\n style={size}\n onLoad={this.loadImage}\n />\n <div ref={ref => {\n this.resize = ref;\n }} className={classNames(classes.resize, 'resize')}/>\n </div>\n </div>,\n <span key={'sp2'}>&nbsp;</span>\n ];\n }\n}\n\nconst styles = theme => ({\n portal: {\n position: 'absolute',\n opacity: 0,\n transition: 'opacity 200ms linear'\n },\n floatingButtonRow: {\n backgroundColor: 'white',\n borderRadius: '1px',\n display: 'flex',\n padding: '10px',\n border: 'solid 1px #eeeeee',\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 },\n progress: {\n position: 'absolute',\n left: '0',\n width: '100%',\n top: '0%',\n transition: 'opacity 200ms linear'\n },\n hideProgress: {\n opacity: 0\n },\n loading: {\n opacity: 0.3\n },\n pendingDelete: {\n opacity: 0.3\n },\n root: {\n position: 'relative',\n border: 'solid 1px white',\n display: 'inline-block',\n transition: 'opacity 200ms linear'\n },\n delete: {\n position: 'absolute',\n right: 0\n },\n imageContainer: {\n position: 'relative',\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n\n '&&:hover > .resize': {\n display: 'block'\n }\n },\n active: {\n border: `solid 1px ${theme.palette.primary.main}`\n },\n resize: {\n backgroundColor: theme.palette.primary.main,\n cursor: 'col-resize',\n height: '35px',\n width: '5px',\n borderRadius: 8,\n marginLeft: '5px',\n marginRight: '10px',\n display: 'none'\n },\n drawableHeight: {\n minHeight: 350,\n },\n});\n\nexport default withStyles(styles)(Component);\n"],"file":"component.js"}
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = exports.ImageToolbar = void 0;
9
9
 
10
- var _toolbarButtons = require("../toolbar/toolbar-buttons");
11
-
12
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
11
 
14
12
  var _react = _interopRequireDefault(require("react"));
@@ -43,76 +41,25 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
43
41
 
44
42
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image:image-toolbar');
45
43
 
46
- var PercentButton = function PercentButton(_ref) {
47
- var percent = _ref.percent,
48
- active = _ref.active,
49
- onClick = _ref.onClick;
50
- var label = "".concat(percent, "%");
51
- return /*#__PURE__*/_react["default"].createElement(_toolbarButtons.MarkButton, {
52
- active: active,
53
- onToggle: function onToggle() {
54
- return onClick(percent);
55
- },
56
- label: label
57
- }, label);
58
- };
59
-
60
- PercentButton.propTypes = {
61
- percent: _propTypes["default"].number.isRequired,
62
- active: _propTypes["default"].bool.isRequired,
63
- onClick: _propTypes["default"].func.isRequired
64
- };
65
-
66
44
  var ImageToolbar = /*#__PURE__*/function (_React$Component) {
67
45
  _inherits(ImageToolbar, _React$Component);
68
46
 
69
47
  var _super = _createSuper(ImageToolbar);
70
48
 
71
49
  function ImageToolbar() {
72
- var _this;
73
-
74
50
  _classCallCheck(this, ImageToolbar);
75
51
 
76
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
77
- args[_key] = arguments[_key];
78
- }
79
-
80
- _this = _super.call.apply(_super, [this].concat(args));
81
-
82
- _defineProperty(_assertThisInitialized(_this), "onPercentClick", function (percent) {
83
- log('[onPercentClick]: percent:', percent);
84
-
85
- _this.props.onChange(percent);
86
- });
87
-
88
- return _this;
52
+ return _super.apply(this, arguments);
89
53
  }
90
54
 
91
55
  _createClass(ImageToolbar, [{
92
56
  key: "render",
93
57
  value: function render() {
94
- var _this$props = this.props,
95
- classes = _this$props.classes,
96
- percent = _this$props.percent;
58
+ // Don't remove toolbar since we will have other new buttons
59
+ var classes = this.props.classes;
97
60
  return /*#__PURE__*/_react["default"].createElement("div", {
98
61
  className: classes.holder
99
- }, /*#__PURE__*/_react["default"].createElement(PercentButton, {
100
- percent: 25,
101
- active: percent === 25,
102
- onClick: this.onPercentClick
103
- }), /*#__PURE__*/_react["default"].createElement(PercentButton, {
104
- percent: 50,
105
- active: percent === 50,
106
- onClick: this.onPercentClick
107
- }), /*#__PURE__*/_react["default"].createElement(PercentButton, {
108
- active: percent === 75,
109
- percent: 75,
110
- onClick: this.onPercentClick
111
- }), /*#__PURE__*/_react["default"].createElement(PercentButton, {
112
- percent: 100,
113
- active: percent === 100 || !percent,
114
- onClick: this.onPercentClick
115
- }));
62
+ });
116
63
  }
117
64
  }]);
118
65
 
@@ -122,7 +69,6 @@ var ImageToolbar = /*#__PURE__*/function (_React$Component) {
122
69
  exports.ImageToolbar = ImageToolbar;
123
70
 
124
71
  _defineProperty(ImageToolbar, "propTypes", {
125
- percent: _propTypes["default"].number.isRequired,
126
72
  onChange: _propTypes["default"].func.isRequired,
127
73
  classes: _propTypes["default"].object.isRequired
128
74
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/image/image-toolbar.jsx"],"names":["log","PercentButton","percent","active","onClick","label","propTypes","PropTypes","number","isRequired","bool","func","ImageToolbar","props","onChange","classes","holder","onPercentClick","React","Component","object","styles","theme","paddingLeft","spacing","unit","display","alignItems"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,oDAAN,CAAZ;;AAEA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,OAAkC;AAAA,MAA/BC,OAA+B,QAA/BA,OAA+B;AAAA,MAAtBC,MAAsB,QAAtBA,MAAsB;AAAA,MAAdC,OAAc,QAAdA,OAAc;AACtD,MAAMC,KAAK,aAAMH,OAAN,MAAX;AACA,sBACE,gCAAC,0BAAD;AAAY,IAAA,MAAM,EAAEC,MAApB;AAA4B,IAAA,QAAQ,EAAE;AAAA,aAAMC,OAAO,CAACF,OAAD,CAAb;AAAA,KAAtC;AAA8D,IAAA,KAAK,EAAEG;AAArE,KACGA,KADH,CADF;AAKD,CAPD;;AASAJ,aAAa,CAACK,SAAd,GAA0B;AACxBJ,EAAAA,OAAO,EAAEK,sBAAUC,MAAV,CAAiBC,UADF;AAExBN,EAAAA,MAAM,EAAEI,sBAAUG,IAAV,CAAeD,UAFC;AAGxBL,EAAAA,OAAO,EAAEG,sBAAUI,IAAV,CAAeF;AAHA,CAA1B;;IAMaG,Y;;;;;;;;;;;;;;;;qEAOM,UAAAV,OAAO,EAAI;AAC1BF,MAAAA,GAAG,CAAC,4BAAD,EAA+BE,OAA/B,CAAH;;AACA,YAAKW,KAAL,CAAWC,QAAX,CAAoBZ,OAApB;AACD,K;;;;;;;WAED,kBAAS;AACP,wBAA6B,KAAKW,KAAlC;AAAA,UAAQE,OAAR,eAAQA,OAAR;AAAA,UAAiBb,OAAjB,eAAiBA,OAAjB;AACA,0BACE;AAAK,QAAA,SAAS,EAAEa,OAAO,CAACC;AAAxB,sBACE,gCAAC,aAAD;AAAe,QAAA,OAAO,EAAE,EAAxB;AAA4B,QAAA,MAAM,EAAEd,OAAO,KAAK,EAAhD;AAAoD,QAAA,OAAO,EAAE,KAAKe;AAAlE,QADF,eAEE,gCAAC,aAAD;AAAe,QAAA,OAAO,EAAE,EAAxB;AAA4B,QAAA,MAAM,EAAEf,OAAO,KAAK,EAAhD;AAAoD,QAAA,OAAO,EAAE,KAAKe;AAAlE,QAFF,eAGE,gCAAC,aAAD;AAAe,QAAA,MAAM,EAAEf,OAAO,KAAK,EAAnC;AAAuC,QAAA,OAAO,EAAE,EAAhD;AAAoD,QAAA,OAAO,EAAE,KAAKe;AAAlE,QAHF,eAIE,gCAAC,aAAD;AACE,QAAA,OAAO,EAAE,GADX;AAEE,QAAA,MAAM,EAAEf,OAAO,KAAK,GAAZ,IAAmB,CAACA,OAF9B;AAGE,QAAA,OAAO,EAAE,KAAKe;AAHhB,QAJF,CADF;AAYD;;;;EA1B+BC,kBAAMC,S;;;;gBAA3BP,Y,eACQ;AACjBV,EAAAA,OAAO,EAAEK,sBAAUC,MAAV,CAAiBC,UADT;AAEjBK,EAAAA,QAAQ,EAAEP,sBAAUI,IAAV,CAAeF,UAFR;AAGjBM,EAAAA,OAAO,EAAER,sBAAUa,MAAV,CAAiBX;AAHT,C;;AA4BrB,IAAMY,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBN,IAAAA,MAAM,EAAE;AACNO,MAAAA,WAAW,EAAED,KAAK,CAACE,OAAN,CAAcC,IADrB;AAENC,MAAAA,OAAO,EAAE,MAFH;AAGNC,MAAAA,UAAU,EAAE;AAHN;AADe,GAAL;AAAA,CAApB;;eAQe,wBAAWN,MAAX,EAAmBT,YAAnB,C","sourcesContent":["import { MarkButton } from '../toolbar/toolbar-buttons';\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:image-toolbar');\n\nconst PercentButton = ({ percent, active, onClick }) => {\n const label = `${percent}%`;\n return (\n <MarkButton active={active} onToggle={() => onClick(percent)} label={label}>\n {label}\n </MarkButton>\n );\n};\n\nPercentButton.propTypes = {\n percent: PropTypes.number.isRequired,\n active: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired\n};\n\nexport class ImageToolbar extends React.Component {\n static propTypes = {\n percent: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired\n };\n\n onPercentClick = percent => {\n log('[onPercentClick]: percent:', percent);\n this.props.onChange(percent);\n };\n\n render() {\n const { classes, percent } = this.props;\n return (\n <div className={classes.holder}>\n <PercentButton percent={25} active={percent === 25} onClick={this.onPercentClick} />\n <PercentButton percent={50} active={percent === 50} onClick={this.onPercentClick} />\n <PercentButton active={percent === 75} percent={75} onClick={this.onPercentClick} />\n <PercentButton\n percent={100}\n active={percent === 100 || !percent}\n onClick={this.onPercentClick}\n />\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n holder: {\n paddingLeft: theme.spacing.unit,\n display: 'flex',\n alignItems: 'center'\n }\n});\n\nexport default withStyles(styles)(ImageToolbar);\n"],"file":"image-toolbar.js"}
1
+ {"version":3,"sources":["../../../src/plugins/image/image-toolbar.jsx"],"names":["log","ImageToolbar","classes","props","holder","React","Component","onChange","PropTypes","func","isRequired","object","styles","theme","paddingLeft","spacing","unit","display","alignItems"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,oDAAN,CAAZ;;IAEaC,Y;;;;;;;;;;;;;WAMX,kBAAS;AACP;AACA,UAAQC,OAAR,GAAoB,KAAKC,KAAzB,CAAQD,OAAR;AACA,0BACE;AAAK,QAAA,SAAS,EAAEA,OAAO,CAACE;AAAxB,QADF;AAID;;;;EAb+BC,kBAAMC,S;;;;gBAA3BL,Y,eACQ;AACjBM,EAAAA,QAAQ,EAAEC,sBAAUC,IAAV,CAAeC,UADR;AAEjBR,EAAAA,OAAO,EAAEM,sBAAUG,MAAV,CAAiBD;AAFT,C;;AAerB,IAAME,MAAM,GAAG,SAATA,MAAS,CAAAC,KAAK;AAAA,SAAK;AACvBT,IAAAA,MAAM,EAAE;AACNU,MAAAA,WAAW,EAAED,KAAK,CAACE,OAAN,CAAcC,IADrB;AAENC,MAAAA,OAAO,EAAE,MAFH;AAGNC,MAAAA,UAAU,EAAE;AAHN;AADe,GAAL;AAAA,CAApB;;eAQe,wBAAWN,MAAX,EAAmBX,YAAnB,C","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:image-toolbar');\n\nexport class ImageToolbar extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired\n };\n\n render() {\n // Don't remove toolbar since we will have other new buttons\n const { classes } = this.props;\n return (\n <div className={classes.holder}>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n holder: {\n paddingLeft: theme.spacing.unit,\n display: 'flex',\n alignItems: 'center'\n }\n});\n\nexport default withStyles(styles)(ImageToolbar);\n"],"file":"image-toolbar.js"}
@@ -128,7 +128,9 @@ function ImagePlugin(opts) {
128
128
  var all = Object.assign({
129
129
  onDelete: opts.onDelete,
130
130
  onFocus: opts.onFocus,
131
- onBlur: opts.onBlur
131
+ onBlur: opts.onBlur,
132
+ maxImageWidth: opts.maxImageWidth,
133
+ maxImageHeight: opts.maxImageHeight
132
134
  }, props);
133
135
  return /*#__PURE__*/_react["default"].createElement(_component["default"], all);
134
136
  }
@@ -1 +1 @@
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","percent","get","resizePercent","update","toObject","setNodeByKey","key","Tb","showDone","name","deleteNode","e","preventDefault","onDelete","merge","Data","deleteStatus","err","v","removeNodeByKey","stopReset","imgPendingInsertion","document","findDescendant","n","renderNode","props","all","Object","assign","onFocus","onBlur","normalizeNode","textNodeMap","updateNodesArray","index","d","text","push","length","withoutNormalization","forEach","insertTextByKey","serialization","deserialize","el","tagName","toLowerCase","style","width","height","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 percent = node.data.get('resizePercent');\n\n const onChange = resizePercent => {\n const update = {\n ...node.data.toObject(),\n resizePercent\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const Tb = () => <ImageToolbar percent={percent || 100} onChange={onChange} />;\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\n .change()\n .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 },\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: '' };\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 }\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 style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style\n };\n\n return <img {...props} />;\n }\n};\n"],"file":"index.js"}
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","percent","get","resizePercent","update","toObject","setNodeByKey","key","Tb","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","parseInt","replace","out","getAttribute","serialize","objectFit"],"mappings":";;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,sCAAN,CAAZ;;AAEe,SAASC,WAAT,CAAqBC,IAArB,EAA2B;AACxC,MAAMC,OAAO,GAAGD,IAAI,CAACE,oBAAL,IAA6B;AAC3CC,IAAAA,IAAI,eAAE,gCAAC,iBAAD,OADqC;AAE3CC,IAAAA,OAAO,EAAE,iBAACC,KAAD,EAAQC,QAAR,EAAqB;AAC5BR,MAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,UAAMS,MAAM,GAAGC,cAAOC,MAAP,CAAc;AAC3BC,QAAAA,IAAI,EAAE,OADqB;AAE3BC,QAAAA,MAAM,EAAE,IAFmB;AAG3BC,QAAAA,IAAI,EAAE;AACJC,UAAAA,MAAM,EAAE,KADJ;AAEJC,UAAAA,GAAG,EAAEC;AAFD;AAHqB,OAAd,CAAf;;AASA,UAAMC,MAAM,GAAGX,KAAK,CAACW,MAAN,GAAeC,YAAf,CAA4BV,MAA5B,CAAf;AACAD,MAAAA,QAAQ,CAACU,MAAD,CAAR;AACAhB,MAAAA,IAAI,CAACE,oBAAL,CAA0B,UAAAgB,QAAQ;AAAA,eAAI,IAAIC,8BAAJ,CAAuBZ,MAAvB,EAA+BW,QAA/B,EAAyCZ,QAAzC,CAAJ;AAAA,OAAlC;AACD,KAhB0C;AAiB3Cc,IAAAA,QAAQ,EAAE,kBAAAC,IAAI;AAAA,aAAIA,IAAI,CAACC,MAAL,KAAgB,QAAhB,IAA4BD,IAAI,CAACX,IAAL,KAAc,OAA9C;AAAA,KAjB6B;AAkB3Ca,IAAAA,aAAa,EAAE,uBAACF,IAAD,EAAOhB,KAAP,EAAcmB,aAAd,EAAgC;AAC7C,UAAMC,OAAO,GAAGJ,IAAI,CAACT,IAAL,CAAUc,GAAV,CAAc,eAAd,CAAhB;;AAEA,UAAMpB,QAAQ,GAAG,SAAXA,QAAW,CAAAqB,aAAa,EAAI;AAChC,YAAMC,MAAM,mCACPP,IAAI,CAACT,IAAL,CAAUiB,QAAV,EADO;AAEVF,UAAAA,aAAa,EAAbA;AAFU,UAAZ;;AAKA,YAAMX,MAAM,GAAGX,KAAK,CAACW,MAAN,GAAec,YAAf,CAA4BT,IAAI,CAACU,GAAjC,EAAsC;AAAEnB,UAAAA,IAAI,EAAEgB;AAAR,SAAtC,CAAf;AACAJ,QAAAA,aAAa,CAACR,MAAD,EAAS,KAAT,CAAb;AACD,OARD;;AAUA,UAAMgB,EAAE,GAAG,SAALA,EAAK;AAAA,4BAAM,gCAAC,wBAAD;AAAc,UAAA,OAAO,EAAEP,OAAO,IAAI,GAAlC;AAAuC,UAAA,QAAQ,EAAEnB;AAAjD,UAAN;AAAA,OAAX;;AACA,aAAO0B,EAAP;AACD,KAjC0C;AAkC3CC,IAAAA,QAAQ,EAAE;AAlCiC,GAA7C;AAqCA,SAAO;AACLC,IAAAA,IAAI,EAAE,OADD;AAELjC,IAAAA,OAAO,EAAPA,OAFK;AAGLkC,IAAAA,UAAU,EAAE,oBAACC,CAAD,EAAIf,IAAJ,EAAUhB,KAAV,EAAiBC,QAAjB,EAA8B;AACxC8B,MAAAA,CAAC,CAACC,cAAF;;AACA,UAAIrC,IAAI,CAACsC,QAAT,EAAmB;AACjB,YAAMV,MAAM,GAAGP,IAAI,CAACT,IAAL,CAAU2B,KAAV,CAAgBC,YAAK/B,MAAL,CAAY;AAAEgC,UAAAA,YAAY,EAAE;AAAhB,SAAZ,CAAhB,CAAf;AAEA,YAAIzB,MAAM,GAAGX,KAAK,CAACW,MAAN,GAAec,YAAf,CAA4BT,IAAI,CAACU,GAAjC,EAAsC;AAAEnB,UAAAA,IAAI,EAAEgB;AAAR,SAAtC,CAAb;AAEAtB,QAAAA,QAAQ,CAACU,MAAD,CAAR;AACAhB,QAAAA,IAAI,CAACsC,QAAL,CAAcjB,IAAI,CAACT,IAAL,CAAUc,GAAV,CAAc,KAAd,CAAd,EAAoC,UAACgB,GAAD,EAAMC,CAAN,EAAY;AAC9C,cAAI,CAACD,GAAL,EAAU;AACR1B,YAAAA,MAAM,GAAG2B,CAAC,CAAC3B,MAAF,GAAW4B,eAAX,CAA2BvB,IAAI,CAACU,GAAhC,CAAT;AACD,WAFD,MAEO;AACLjC,YAAAA,GAAG,CAAC,WAAD,EAAc4C,GAAd,CAAH;AACA1B,YAAAA,MAAM,GAAG2B,CAAC,CACP3B,MADM,GAENc,YAFM,CAEOT,IAAI,CAACU,GAFZ,EAEiBV,IAAI,CAACT,IAAL,CAAU2B,KAAV,CAAgBC,YAAK/B,MAAL,CAAY;AAAEgC,cAAAA,YAAY,EAAE;AAAhB,aAAZ,CAAhB,CAFjB,CAAT;AAGD;;AACDnC,UAAAA,QAAQ,CAACU,MAAD,CAAR;AACD,SAVD;AAWD,OAjBD,MAiBO;AACL,YAAIA,OAAM,GAAGX,KAAK,CAACW,MAAN,GAAe4B,eAAf,CAA+BvB,IAAI,CAACU,GAApC,CAAb;;AACAzB,QAAAA,QAAQ,CAACU,OAAD,CAAR;AACD;AACF,KA1BI;AA2BL6B,IAAAA,SAAS,EAAE,mBAAAxC,KAAK,EAAI;AAClB,UAAMyC,mBAAmB,GAAGzC,KAAK,CAAC0C,QAAN,CAAeC,cAAf,CAA8B,UAAAC,CAAC,EAAI;AAC7D,YAAIA,CAAC,CAACvC,IAAF,KAAW,OAAf,EAAwB;AACtB;AACD;;AACD,eAAOuC,CAAC,CAACrC,IAAF,CAAOc,GAAP,CAAW,QAAX,MAAyB,KAAhC;AACD,OAL2B,CAA5B;AAMA;;AACA,aAAOoB,mBAAmB,KAAK/B,SAAxB,IAAqC+B,mBAAmB,KAAK,IAApE;AACD,KApCI;AAqCLI,IAAAA,UArCK,sBAqCMC,KArCN,EAqCa;AAChB,UAAIA,KAAK,CAAC9B,IAAN,CAAWX,IAAX,KAAoB,OAAxB,EAAiC;AAC/B,YAAM0C,GAAG,GAAGC,MAAM,CAACC,MAAP,CACV;AACEhB,UAAAA,QAAQ,EAAEtC,IAAI,CAACsC,QADjB;AAEEiB,UAAAA,OAAO,EAAEvD,IAAI,CAACuD,OAFhB;AAGEC,UAAAA,MAAM,EAAExD,IAAI,CAACwD,MAHf;AAIEC,UAAAA,aAAa,EAAEzD,IAAI,CAACyD,aAJtB;AAKEC,UAAAA,cAAc,EAAE1D,IAAI,CAAC0D;AALvB,SADU,EAQVP,KARU,CAAZ;AAUA,4BAAO,gCAAC,qBAAD,EAAoBC,GAApB,CAAP;AACD;AACF,KAnDI;AAoDLO,IAAAA,aAAa,EAAE,uBAAAtC,IAAI,EAAI;AACrB,UAAMuC,WAAW,GAAG,EAApB;AACA,UAAMC,gBAAgB,GAAG,EAAzB;AACA,UAAIC,KAAK,GAAG,CAAZ;AAEA,UAAIzC,IAAI,CAACC,MAAL,KAAgB,UAApB,EAAgC;AAEhCD,MAAAA,IAAI,CAAC2B,cAAL,CAAoB,UAAAe,CAAC,EAAI;AACvB,YAAIA,CAAC,CAACzC,MAAF,KAAa,MAAjB,EAAyB;AACvBsC,UAAAA,WAAW,CAACE,KAAD,CAAX,GAAqBC,CAArB;AACD;;AAED,YAAIA,CAAC,CAACrD,IAAF,KAAW,OAAf,EAAwB;AACtB,cAAIoD,KAAK,GAAG,CAAR,IAAaF,WAAW,CAACE,KAAK,GAAG,CAAT,CAAxB,IAAuCF,WAAW,CAACE,KAAK,GAAG,CAAT,CAAX,CAAuBE,IAAvB,KAAgC,EAA3E,EAA+E;AAC7EH,YAAAA,gBAAgB,CAACI,IAAjB,CAAsBL,WAAW,CAACE,KAAK,GAAG,CAAT,CAAjC;AACD;AACF;;AAEDA,QAAAA,KAAK;AACN,OAZD;AAcA,UAAI,CAACD,gBAAgB,CAACK,MAAtB,EAA8B;AAE9B,aAAO,UAAAlD,MAAM,EAAI;AACfA,QAAAA,MAAM,CAACmD,oBAAP,CAA4B,YAAM;AAChCN,UAAAA,gBAAgB,CAACO,OAAjB,CAAyB,UAAAnB,CAAC;AAAA,mBAAIjC,MAAM,CAACqD,eAAP,CAAuBpB,CAAC,CAAClB,GAAzB,EAA8B,CAA9B,EAAiC,GAAjC,CAAJ;AAAA,WAA1B;AACD,SAFD;AAGD,OAJD;AAKD;AAhFI,GAAP;AAkFD;;AAEM,IAAMuC,aAAa,GAAG;AAC3BC,EAAAA,WAD2B,uBACfC;AAAG;AADY,IACA;AACzB,QAAMtC,IAAI,GAAGsC,EAAE,CAACC,OAAH,CAAWC,WAAX,EAAb;AACA,QAAIxC,IAAI,KAAK,KAAb,EAAoB;AAEpBpC,IAAAA,GAAG,CAAC,eAAD,EAAkBoC,IAAlB,CAAH;AACA,QAAMyC,KAAK,GAAGH,EAAE,CAACG,KAAH,IAAY;AAAEC,MAAAA,KAAK,EAAE,EAAT;AAAaC,MAAAA,MAAM,EAAE;AAArB,KAA1B;AACA,QAAMD,KAAK,GAAGE,QAAQ,CAACH,KAAK,CAACC,KAAN,CAAYG,OAAZ,CAAoB,IAApB,EAA0B,EAA1B,CAAD,EAAgC,EAAhC,CAAR,IAA+C,IAA7D;AACA,QAAMF,MAAM,GAAGC,QAAQ,CAACH,KAAK,CAACE,MAAN,CAAaE,OAAb,CAAqB,IAArB,EAA2B,EAA3B,CAAD,EAAiC,EAAjC,CAAR,IAAgD,IAA/D;AAEA,QAAMC,GAAG,GAAG;AACV1D,MAAAA,MAAM,EAAE,QADE;AAEVZ,MAAAA,IAAI,EAAE,OAFI;AAGVC,MAAAA,MAAM,EAAE,IAHE;AAIVC,MAAAA,IAAI,EAAE;AACJE,QAAAA,GAAG,EAAE0D,EAAE,CAACS,YAAH,CAAgB,KAAhB,CADD;AAEJL,QAAAA,KAAK,EAALA,KAFI;AAGJC,QAAAA,MAAM,EAANA;AAHI;AAJI,KAAZ;AAUA/E,IAAAA,GAAG,CAAC,iBAAD,EAAoBkF,GAApB,CAAH;AACA,WAAOA,GAAP;AACD,GAtB0B;AAuB3BE,EAAAA,SAvB2B,qBAuBjB5D;AAAO;AAvBU,IAuBM;AAC/B,QAAIA,MAAM,CAACZ,IAAP,KAAgB,OAApB,EAA6B;AAE7B,QAAQE,IAAR,GAAiBU,MAAjB,CAAQV,IAAR;AACA,QAAME,GAAG,GAAGF,IAAI,CAACc,GAAL,CAAS,KAAT,CAAZ;AACA,QAAMkD,KAAK,GAAGhE,IAAI,CAACc,GAAL,CAAS,OAAT,CAAd;AACA,QAAMmD,MAAM,GAAGjE,IAAI,CAACc,GAAL,CAAS,QAAT,CAAf;AACA,QAAMiD,KAAK,GAAG,EAAd;;AACA,QAAIC,KAAJ,EAAW;AACTD,MAAAA,KAAK,CAACC,KAAN,aAAiBA,KAAjB;AACD;;AAED,QAAIC,MAAJ,EAAY;AACVF,MAAAA,KAAK,CAACE,MAAN,aAAkBA,MAAlB;AACD;;AAEDF,IAAAA,KAAK,CAACQ,SAAN,GAAkB,SAAlB;AAEA,QAAMhC,KAAK,GAAG;AACZrC,MAAAA,GAAG,EAAHA,GADY;AAEZ6D,MAAAA,KAAK,EAALA;AAFY,KAAd;AAKA,wBAAO,uCAASxB,KAAT,CAAP;AACD;AA/C0B,CAAtB","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 percent = node.data.get('resizePercent');\n\n const onChange = resizePercent => {\n const update = {\n ...node.data.toObject(),\n resizePercent\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n onToolbarDone(change, false);\n };\n\n const Tb = () => <ImageToolbar percent={percent || 100} onChange={onChange} />;\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\n .change()\n .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: '' };\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 }\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 style = {};\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n style.objectFit = 'contain';\n\n const props = {\n src,\n style\n };\n\n return <img {...props} />;\n }\n};\n"],"file":"index.js"}
@@ -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) {