@mirrormedia/lilith-draft-editor 1.1.0-alpha.3 → 1.1.0-alpha.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/lib/draft-js/buttons/annotation.js +22 -0
  2. package/lib/draft-js/buttons/audio.js +16 -3
  3. package/lib/draft-js/buttons/background-color.js +26 -0
  4. package/lib/draft-js/buttons/background-image.js +32 -13
  5. package/lib/draft-js/buttons/background-video.js +32 -13
  6. package/lib/draft-js/buttons/color-box.js +21 -5
  7. package/lib/draft-js/buttons/divider.js +12 -3
  8. package/lib/draft-js/buttons/embedded-code.js +16 -5
  9. package/lib/draft-js/buttons/enlarge.js +3 -0
  10. package/lib/draft-js/buttons/font-color.js +26 -0
  11. package/lib/draft-js/buttons/image.js +18 -7
  12. package/lib/draft-js/buttons/info-box.js +21 -5
  13. package/lib/draft-js/buttons/link.js +68 -22
  14. package/lib/draft-js/buttons/media.js +16 -3
  15. package/lib/draft-js/buttons/related-post.js +14 -3
  16. package/lib/draft-js/buttons/selector/align-selector.js +11 -2
  17. package/lib/draft-js/buttons/selector/audio-selector.js +33 -5
  18. package/lib/draft-js/buttons/selector/image-selector.js +64 -16
  19. package/lib/draft-js/buttons/selector/pagination.js +6 -2
  20. package/lib/draft-js/buttons/selector/post-selector.js +39 -6
  21. package/lib/draft-js/buttons/selector/search-box.js +9 -0
  22. package/lib/draft-js/buttons/selector/video-selector.js +33 -4
  23. package/lib/draft-js/buttons/side-index.js +31 -15
  24. package/lib/draft-js/buttons/slideshow.js +16 -7
  25. package/lib/draft-js/buttons/table.js +11 -5
  26. package/lib/draft-js/buttons/text-align.js +14 -0
  27. package/lib/draft-js/buttons/video.js +19 -5
  28. package/lib/draft-js/buttons/youtube.js +147 -0
  29. package/lib/draft-js/const.js +2 -0
  30. package/lib/draft-js/draft-converter/api-data-instance.js +14 -0
  31. package/lib/draft-js/draft-converter/atomic-block-processor.js +42 -12
  32. package/lib/draft-js/draft-converter/entities.js +3 -1
  33. package/lib/draft-js/draft-converter/index.js +29 -10
  34. package/lib/draft-js/draft-converter/inline-styles-processor.js +55 -22
  35. package/lib/draft-js/modifier.js +13 -5
  36. package/lib/draft-js/util.js +32 -0
  37. package/lib/index.js +4 -0
  38. package/lib/website/mirrormedia/block-renderer/background-image-block.js +14 -2
  39. package/lib/website/mirrormedia/block-renderer/background-video-block.js +14 -2
  40. package/lib/website/mirrormedia/block-renderer/color-box-block.js +14 -2
  41. package/lib/website/mirrormedia/block-renderer/embedded-code-block.js +12 -3
  42. package/lib/website/mirrormedia/block-renderer/image-block.js +108 -0
  43. package/lib/website/mirrormedia/block-renderer/info-box-block.js +14 -2
  44. package/lib/website/mirrormedia/block-renderer/side-index-block.js +13 -2
  45. package/lib/website/mirrormedia/block-renderer/slideshow-block.js +93 -7
  46. package/lib/website/mirrormedia/block-renderer/table-block.js +62 -28
  47. package/lib/website/mirrormedia/block-renderer-fn.js +48 -5
  48. package/lib/website/mirrormedia/draft-editor.js +138 -14
  49. package/lib/website/mirrormedia/entity-decorator.js +12 -1
  50. package/lib/website/mirrormedia/index.js +3 -0
  51. package/lib/website/mirrormedia/selector/align-selector.js +11 -2
  52. package/lib/website/mirrormedia/selector/audio-selector.js +34 -5
  53. package/lib/website/mirrormedia/selector/image-selector.js +75 -18
  54. package/lib/website/mirrormedia/selector/pagination.js +6 -2
  55. package/lib/website/mirrormedia/selector/post-selector.js +40 -6
  56. package/lib/website/mirrormedia/selector/search-box.js +9 -0
  57. package/lib/website/mirrormedia/selector/video-selector.js +36 -7
  58. package/lib/website/mirrormedia/shared-style/index.js +17 -0
  59. package/lib/website/mirrormedia/theme/index.js +28 -0
  60. package/lib/website/readr/block-renderer/background-image-block.js +66 -6
  61. package/lib/website/readr/block-renderer/background-video-block.js +76 -6
  62. package/lib/website/readr/block-renderer/color-box-block.js +14 -2
  63. package/lib/website/readr/block-renderer/image-block.js +106 -0
  64. package/lib/website/readr/block-renderer/info-box-block.js +14 -2
  65. package/lib/website/readr/block-renderer/side-index-block.js +13 -2
  66. package/lib/website/readr/block-renderer/table-block.js +62 -28
  67. package/lib/website/readr/block-renderer-fn.js +32 -3
  68. package/lib/website/readr/draft-editor.js +112 -12
  69. package/lib/website/readr/entity-decorator.js +4 -0
  70. package/lib/website/readr/index.js +3 -0
  71. package/lib/website/readr/selector/align-selector.js +11 -2
  72. package/lib/website/readr/selector/audio-selector.js +34 -17
  73. package/lib/website/readr/selector/image-selector.js +62 -16
  74. package/lib/website/readr/selector/pagination.js +6 -2
  75. package/lib/website/readr/selector/post-selector.js +40 -13
  76. package/lib/website/readr/selector/search-box.js +9 -0
  77. package/lib/website/readr/selector/video-selector.js +33 -4
  78. package/lib/website/readr/theme/index.js +39 -0
  79. package/package.json +8 -8
@@ -4,56 +4,72 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.convertToHtml = convertToHtml;
7
+
7
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
+
8
10
  var _const = require("../const");
11
+
9
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- // Modified from https://github.com/dburrows/draft-js-basic-html-editor/blob/master/src/utils/processInlineStylesAndEntities.js
11
13
 
14
+ // Modified from https://github.com/dburrows/draft-js-basic-html-editor/blob/master/src/utils/processInlineStylesAndEntities.js
12
15
  function tagForCustomInlineStyle(style) {
13
16
  const customInlineStylePrefixs = [_const.CUSTOM_STYLE_PREFIX_FONT_COLOR, _const.CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR];
14
17
  const stylePrefix = customInlineStylePrefixs.find(prefix => style.startsWith(prefix));
15
18
  let tag, value;
19
+
16
20
  switch (stylePrefix) {
17
21
  case _const.CUSTOM_STYLE_PREFIX_FONT_COLOR:
18
22
  value = style.split(_const.CUSTOM_STYLE_PREFIX_FONT_COLOR)[1];
19
23
  tag = [`<span style="color: ${value}">`, '</span>'];
20
24
  break;
25
+
21
26
  case _const.CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR:
22
27
  value = style.split(_const.CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR)[1];
23
28
  tag = [`<span style="background-color: ${value}">`, '</span>'];
24
29
  break;
30
+
25
31
  default:
26
32
  break;
27
33
  }
34
+
28
35
  return tag;
29
36
  }
37
+
30
38
  function _fullfilIntersection(block) {
31
39
  // SORT BEFORE PROCESSING
32
40
  let sortedISRanges = _lodash.default.sortBy(block.inlineStyleRanges, 'offset');
41
+
33
42
  let sortedEntityRanges = _lodash.default.sortBy(block.entityRanges, 'offset');
43
+
34
44
  let splitedISInline = [];
45
+
35
46
  for (let i = 0; i < sortedEntityRanges.length; i++) {
36
47
  let entityRange = sortedEntityRanges[i];
48
+
37
49
  for (let j = 0; j < sortedISRanges.length; j++) {
38
50
  let entityOffset = _lodash.default.get(entityRange, 'offset', 0);
51
+
39
52
  let entityLength = _lodash.default.get(entityRange, 'length', 0);
53
+
40
54
  let inlineLength = _lodash.default.get(sortedISRanges, [j, 'length'], 0);
55
+
41
56
  let inlineOffset = _lodash.default.get(sortedISRanges, [j, 'offset'], 0);
57
+
42
58
  let inlineStyle = _lodash.default.get(sortedISRanges, [j, 'style'], '');
59
+
43
60
  let nextEntityOffset = _lodash.default.get(sortedEntityRanges, [i + 1, 'offset'], 0);
44
- let nextEntityLength = _lodash.default.get(sortedEntityRanges, [i + 1, 'length'], 0);
45
61
 
46
- // handle intersections of inline style and entity
62
+ let nextEntityLength = _lodash.default.get(sortedEntityRanges, [i + 1, 'length'], 0); // handle intersections of inline style and entity
47
63
  // <a></a> is entity
48
64
  // <abbr></abbr> is next entity
49
65
  // <strong></strong> is inline style
50
- if (nextEntityOffset >= inlineOffset && nextEntityOffset < inlineOffset + inlineLength && nextEntityOffset + nextEntityLength > inlineOffset + inlineLength &&
51
- // <a><strong></a></strong>
66
+
67
+
68
+ if (nextEntityOffset >= inlineOffset && nextEntityOffset < inlineOffset + inlineLength && nextEntityOffset + nextEntityLength > inlineOffset + inlineLength && // <a><strong></a></strong>
52
69
  entityOffset < inlineOffset && entityOffset + entityLength > inlineOffset && entityOffset + entityLength <= inlineOffset + inlineLength) {
53
70
  // <strong><abbr></strong></abbr>
54
71
  // situation: <a><strong></a><abbr></strong></abbr>
55
72
  // should be: <a><strong></strong></a><strong></strong><abbr><strong></strong></abbr>
56
-
57
73
  // skip next entity checking
58
74
  i = i + 1;
59
75
  splitedISInline.push({
@@ -105,92 +121,109 @@ function _fullfilIntersection(block) {
105
121
  }
106
122
  }
107
123
  }
124
+
108
125
  _lodash.default.forEachRight(splitedISInline, ele => {
109
126
  sortedISRanges.splice(ele.index, 1, ...ele.replace);
110
127
  });
128
+
111
129
  return sortedISRanges;
112
130
  }
131
+
113
132
  function _inlineTag(inlineTagMap, inlineStyleRanges, tagInsertMap = {}) {
114
133
  // SORT BEFORE PROCESSING
115
- let sortedRanges = _lodash.default.sortBy(inlineStyleRanges, 'offset');
134
+ let sortedRanges = _lodash.default.sortBy(inlineStyleRanges, 'offset'); // map all the tag insertions we're going to do
135
+
116
136
 
117
- // map all the tag insertions we're going to do
118
137
  sortedRanges.forEach(function (range) {
119
- let tag = inlineTagMap[range.style];
138
+ let tag = inlineTagMap[range.style]; // handle dynamic inline style
120
139
 
121
- // handle dynamic inline style
122
140
  if (!tag) {
123
141
  tag = tagForCustomInlineStyle(range.style);
124
142
  }
143
+
125
144
  if (!tagInsertMap[range.offset]) {
126
145
  tagInsertMap[range.offset] = [];
127
- }
146
+ } // add starting tag to the end of the array to form the tag nesting
147
+
128
148
 
129
- // add starting tag to the end of the array to form the tag nesting
130
149
  tagInsertMap[range.offset].push(tag[0]);
150
+
131
151
  if (tag[1]) {
132
152
  if (!tagInsertMap[range.offset + range.length]) {
133
153
  tagInsertMap[range.offset + range.length] = [];
134
- }
135
- // add closing tags to start of array, otherwise tag nesting will be invalid
154
+ } // add closing tags to start of array, otherwise tag nesting will be invalid
155
+
156
+
136
157
  tagInsertMap[range.offset + range.length].unshift(tag[1]);
137
158
  }
138
159
  });
139
160
  return tagInsertMap;
140
161
  }
162
+
141
163
  function _entityTag(entityTagMap, entityMap, entityRanges, tagInsertMap = {}) {
142
164
  _lodash.default.forEach(entityRanges, range => {
143
165
  let entity = entityMap[range.key];
144
166
  let type = entity.type && entity.type.toUpperCase();
145
167
  let tag = entityTagMap[type];
146
168
  let data = entity.data;
169
+
147
170
  let compiledTag0 = _lodash.default.template(tag[0], {
148
171
  variable: 'data'
149
172
  })(data);
173
+
150
174
  let compiledTag1 = _lodash.default.template(tag[1], {
151
175
  variable: 'data'
152
176
  })(data);
177
+
153
178
  if (!tagInsertMap[range.offset]) {
154
179
  tagInsertMap[range.offset] = [];
155
- }
180
+ } // add starting tag
181
+
156
182
 
157
- // add starting tag
158
183
  tagInsertMap[range.offset].push(compiledTag0);
184
+
159
185
  if (tag[1]) {
160
186
  if (!tagInsertMap[range.offset + range.length]) {
161
187
  tagInsertMap[range.offset + range.length] = [];
162
- }
163
- // add closing tags to start of array, otherwise tag nesting will be invalid
188
+ } // add closing tags to start of array, otherwise tag nesting will be invalid
189
+
190
+
164
191
  tagInsertMap[range.offset + range.length].unshift(compiledTag1);
165
192
  }
166
193
  });
194
+
167
195
  return tagInsertMap;
168
196
  }
197
+
169
198
  function convertToHtml(inlineTagMap, entityTagMap, entityMap, block) {
170
199
  // exit if there is no inlineStyleRanges/entityRanges or length === 0 as well
171
200
  if (!block.inlineStyleRanges && !block.entityRanges || block.inlineStyleRanges.length === 0 && block.entityRanges.length === 0) {
172
201
  return block.text;
173
202
  }
203
+
174
204
  let html = block.text;
205
+
175
206
  let inlineStyleRanges = _fullfilIntersection(block);
207
+
176
208
  let tagInsertMap = {};
177
209
  tagInsertMap = _entityTag(entityTagMap, entityMap, block.entityRanges, tagInsertMap);
178
- tagInsertMap = _inlineTag(inlineTagMap, inlineStyleRanges, tagInsertMap);
210
+ tagInsertMap = _inlineTag(inlineTagMap, inlineStyleRanges, tagInsertMap); // sort on position, as we'll need to keep track of offset
179
211
 
180
- // sort on position, as we'll need to keep track of offset
181
212
  let orderedKeys = Object.keys(tagInsertMap).sort(function (a, b) {
182
213
  a = Number(a);
183
214
  b = Number(b);
215
+
184
216
  if (a > b) {
185
217
  return 1;
186
218
  }
219
+
187
220
  if (a < b) {
188
221
  return -1;
189
222
  }
223
+
190
224
  return 0;
191
- });
225
+ }); // insert tags into string, keep track of offset caused by our text insertions
192
226
 
193
- // insert tags into string, keep track of offset caused by our text insertions
194
227
  let offset = 0;
195
228
  orderedKeys.forEach(function (pos) {
196
229
  let index = Number(pos);
@@ -4,12 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Modifier = void 0;
7
+
7
8
  var _draftJs = require("draft-js");
9
+
8
10
  var _immutable = require("immutable");
9
- const Modifier = {
10
- ..._draftJs.Modifier
11
- };
12
11
 
12
+ const Modifier = { ..._draftJs.Modifier
13
+ };
13
14
  /*
14
15
  This method is specified for custom inline style such as 'FONT_COLOR_#ffffff'.
15
16
  For this kind of inline style there may be more than one style name 'FONT_COLOR_#ffffff', 'FONT_COLOR_#000000'.
@@ -21,18 +22,20 @@ const Modifier = {
21
22
 
22
23
  Reference: https://github.com/facebook/draft-js/blob/main/src/model/transaction/ContentStateInlineStyle.js#L39-L88
23
24
  */
25
+
24
26
  exports.Modifier = Modifier;
27
+
25
28
  Modifier.removeInlineStyleByPrefix = (contentState, selectionState, inlineStylePrefix) => {
26
29
  const blockMap = contentState.getBlockMap();
27
30
  const startKey = selectionState.getStartKey();
28
31
  const startOffset = selectionState.getStartOffset();
29
32
  const endKey = selectionState.getEndKey();
30
- const endOffset = selectionState.getEndOffset();
33
+ const endOffset = selectionState.getEndOffset(); // loop through all selected blocks and every block chars to remove specific inline style
31
34
 
32
- // loop through all selected blocks and every block chars to remove specific inline style
33
35
  const newBlocks = blockMap.skipUntil((_, k) => k === startKey).takeUntil((_, k) => k === endKey).concat((0, _immutable.Map)([[endKey, blockMap.get(endKey)]])).map((block, blockKey) => {
34
36
  let sliceStart;
35
37
  let sliceEnd;
38
+
36
39
  if (startKey === endKey) {
37
40
  sliceStart = startOffset;
38
41
  sliceEnd = endOffset;
@@ -40,16 +43,21 @@ Modifier.removeInlineStyleByPrefix = (contentState, selectionState, inlineStyleP
40
43
  sliceStart = blockKey === startKey ? startOffset : 0;
41
44
  sliceEnd = blockKey === endKey ? endOffset : block.getLength();
42
45
  }
46
+
43
47
  let chars = block.getCharacterList();
44
48
  let current;
49
+
45
50
  while (sliceStart < sliceEnd) {
46
51
  current = chars.get(sliceStart);
47
52
  const inlineStyle = current.getStyle().find(styleName => styleName.startsWith(inlineStylePrefix));
53
+
48
54
  if (inlineStyle) {
49
55
  chars = chars.set(sliceStart, _draftJs.CharacterMetadata.removeStyle(current, inlineStyle));
50
56
  }
57
+
51
58
  sliceStart++;
52
59
  }
60
+
53
61
  return block.set('characterList', chars);
54
62
  });
55
63
  return contentState.merge({
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSelectionEntityData = void 0;
7
+
8
+ const getSelectionEntityData = editorState => {
9
+ const selection = editorState.getSelection();
10
+ const startOffset = selection.getStartOffset();
11
+ const startBlock = editorState.getCurrentContent().getBlockForKey(selection.getStartKey());
12
+ let data;
13
+ let entityInstance;
14
+ let entityKey;
15
+
16
+ if (!selection.isCollapsed()) {
17
+ entityKey = startBlock.getEntityAt(startOffset);
18
+ } else {
19
+ entityKey = startBlock.getEntityAt(0);
20
+ }
21
+
22
+ const contentState = editorState.getCurrentContent();
23
+
24
+ if (entityKey !== null) {
25
+ entityInstance = contentState.getEntity(entityKey);
26
+ data = entityInstance.getData();
27
+ }
28
+
29
+ return data;
30
+ };
31
+
32
+ exports.getSelectionEntityData = getSelectionEntityData;
package/lib/index.js CHANGED
@@ -21,7 +21,11 @@ Object.defineProperty(exports, "draftConverter", {
21
21
  return _draftConverter.default;
22
22
  }
23
23
  });
24
+
24
25
  var _draftConverter = _interopRequireDefault(require("./draft-js/draft-converter"));
26
+
25
27
  var _mirrormedia = _interopRequireDefault(require("./website/mirrormedia"));
28
+
26
29
  var _readr = _interopRequireDefault(require("./website/readr"));
30
+
27
31
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -4,14 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BGImageEditorBlock = BGImageEditorBlock;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  var _draftConverter = _interopRequireDefault(require("../../../draft-js/draft-converter"));
13
+
10
14
  var _backgroundImage = require("../../../draft-js/buttons/background-image");
15
+
11
16
  var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/mirrormedia"));
17
+
12
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
13
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
14
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
15
24
  const {
16
25
  BGImageBlock
17
26
  } = _mirrormedia.default.blockRenderers;
@@ -21,6 +30,7 @@ const BGImageRenderButton = _styledComponents.default.span`
21
30
  padding: 6px;
22
31
  border-radius: 6px;
23
32
  `;
33
+
24
34
  function BGImageEditorBlock(props) {
25
35
  const [toShowInput, setToShowInput] = (0, _react.useState)(false);
26
36
  const {
@@ -40,6 +50,7 @@ function BGImageEditorBlock(props) {
40
50
  image,
41
51
  rawContentState
42
52
  } = entity.getData();
53
+
43
54
  const onChange = ({
44
55
  textBlockAlign: newTextBlockAlign,
45
56
  image: newImage,
@@ -57,6 +68,7 @@ function BGImageEditorBlock(props) {
57
68
  }
58
69
  });
59
70
  };
71
+
60
72
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_backgroundImage.BGImageInput, {
61
73
  renderBasicEditor: renderBasicEditor,
62
74
  textBlockAlign: textBlockAlign,
@@ -71,8 +83,8 @@ function BGImageEditorBlock(props) {
71
83
  }), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(BGImageBlock, props), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(BGImageRenderButton, {
72
84
  onClick: () => {
73
85
  // call `onEditStart` prop as we are trying to update the BGImage entity
74
- onEditStart();
75
- // open `BGImageInput`
86
+ onEditStart(); // open `BGImageInput`
87
+
76
88
  setToShowInput(true);
77
89
  }
78
90
  }, /*#__PURE__*/_react.default.createElement("i", {
@@ -4,14 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BGVideoEditorBlock = BGVideoEditorBlock;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  var _draftConverter = _interopRequireDefault(require("../../../draft-js/draft-converter"));
13
+
10
14
  var _backgroundVideo = require("../../../draft-js/buttons/background-video");
15
+
11
16
  var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/mirrormedia"));
17
+
12
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
13
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
14
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
15
24
  const {
16
25
  BGVideoBlock
17
26
  } = _mirrormedia.default.blockRenderers;
@@ -21,6 +30,7 @@ const BGVideoRenderButton = _styledComponents.default.span`
21
30
  padding: 6px;
22
31
  border-radius: 6px;
23
32
  `;
33
+
24
34
  function BGVideoEditorBlock(props) {
25
35
  const [toShowInput, setToShowInput] = (0, _react.useState)(false);
26
36
  const {
@@ -40,6 +50,7 @@ function BGVideoEditorBlock(props) {
40
50
  video,
41
51
  rawContentState
42
52
  } = entity.getData();
53
+
43
54
  const onChange = ({
44
55
  textBlockAlign: newTextBlockAlign,
45
56
  video: newVideo,
@@ -57,6 +68,7 @@ function BGVideoEditorBlock(props) {
57
68
  }
58
69
  });
59
70
  };
71
+
60
72
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_backgroundVideo.BGVideoInput, {
61
73
  renderBasicEditor: renderBasicEditor,
62
74
  textBlockAlign: textBlockAlign,
@@ -71,8 +83,8 @@ function BGVideoEditorBlock(props) {
71
83
  }), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(BGVideoBlock, props), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(BGVideoRenderButton, {
72
84
  onClick: () => {
73
85
  // call `onEditStart` prop as we are trying to update the BGVideo entity
74
- onEditStart();
75
- // open `BGVideoInput`
86
+ onEditStart(); // open `BGVideoInput`
87
+
76
88
  setToShowInput(true);
77
89
  }
78
90
  }, /*#__PURE__*/_react.default.createElement("i", {
@@ -4,20 +4,30 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ColorBoxEditorBlock = ColorBoxEditorBlock;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  var _draftConverter = _interopRequireDefault(require("../../../draft-js/draft-converter"));
13
+
10
14
  var _colorBox = require("../../../draft-js/buttons/color-box");
15
+
11
16
  var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/mirrormedia"));
17
+
12
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
13
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
14
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
15
24
  const {
16
25
  ColorBoxBlock
17
26
  } = _mirrormedia.default.blockRenderers;
18
27
  const ColorBoxRenderButton = _styledComponents.default.div`
19
28
  cursor: pointer;
20
29
  `;
30
+
21
31
  function ColorBoxEditorBlock(props) {
22
32
  const [toShowInput, setToShowInput] = (0, _react.useState)(false);
23
33
  const {
@@ -36,6 +46,7 @@ function ColorBoxEditorBlock(props) {
36
46
  color,
37
47
  rawContentState
38
48
  } = entity.getData();
49
+
39
50
  const onChange = ({
40
51
  color: newColor,
41
52
  rawContentState: newRawContentState
@@ -51,6 +62,7 @@ function ColorBoxEditorBlock(props) {
51
62
  }
52
63
  });
53
64
  };
65
+
54
66
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_colorBox.ColorBoxInput, {
55
67
  renderBasicEditor: renderBasicEditor,
56
68
  color: color,
@@ -64,8 +76,8 @@ function ColorBoxEditorBlock(props) {
64
76
  }), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(ColorBoxBlock, props), /*#__PURE__*/_react.default.createElement(ColorBoxRenderButton, {
65
77
  onClick: () => {
66
78
  // call `onEditStart` prop as we are trying to update the ColorBox entity
67
- onEditStart();
68
- // open `ColorBoxInput`
79
+ onEditStart(); // open `ColorBoxInput`
80
+
69
81
  setToShowInput(true);
70
82
  }
71
83
  }, /*#__PURE__*/_react.default.createElement("i", {
@@ -4,11 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.EmbeddedCodeEditorBlock = exports.Caption = exports.Block = void 0;
7
+
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+
8
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
9
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
10
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
11
16
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
12
18
  const Block = _styledComponents.default.div`
13
19
  position: relative;
14
20
  /* styles for image link */
@@ -28,6 +34,7 @@ const Caption = _styledComponents.default.div`
28
34
  padding: 15px 15px 0 15px;
29
35
  `;
30
36
  exports.Caption = Caption;
37
+
31
38
  const EmbeddedCodeEditorBlock = entity => {
32
39
  const {
33
40
  caption,
@@ -37,9 +44,7 @@ const EmbeddedCodeEditorBlock = entity => {
37
44
  (0, _react.useEffect)(() => {
38
45
  if (!embedded.current) return;
39
46
  const node = embedded.current;
40
- const fragment = document.createDocumentFragment();
41
-
42
- // `embeddedCode` is a string, which may includes
47
+ const fragment = document.createDocumentFragment(); // `embeddedCode` is a string, which may includes
43
48
  // multiple '<script>' tags and other html tags.
44
49
  // For executing '<script>' tags on the browser,
45
50
  // we need to extract '<script>' tags from `embeddedCode` string first.
@@ -48,6 +53,7 @@ const EmbeddedCodeEditorBlock = entity => {
48
53
  // and we could use DOM element built-in functions,
49
54
  // such as `querySelectorAll` method, to query '<script>' elements,
50
55
  // and other non '<script>' elements.
56
+
51
57
  const parser = new DOMParser();
52
58
  const ele = parser.parseFromString(`<div id="draft-embed">${embeddedCode}</div>`, 'text/html');
53
59
  const scripts = ele.querySelectorAll('script');
@@ -58,9 +64,11 @@ const EmbeddedCodeEditorBlock = entity => {
58
64
  scripts.forEach(s => {
59
65
  const scriptEle = document.createElement('script');
60
66
  const attrs = s.attributes;
67
+
61
68
  for (let i = 0; i < attrs.length; i++) {
62
69
  scriptEle.setAttribute(attrs[i].name, attrs[i].value);
63
70
  }
71
+
64
72
  scriptEle.text = s.text || '';
65
73
  fragment.appendChild(scriptEle);
66
74
  });
@@ -73,4 +81,5 @@ const EmbeddedCodeEditorBlock = entity => {
73
81
  ref: embedded
74
82
  }), caption ? /*#__PURE__*/_react.default.createElement(Caption, null, caption) : null);
75
83
  };
84
+
76
85
  exports.EmbeddedCodeEditorBlock = EmbeddedCodeEditorBlock;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImageEditorBlock = ImageEditorBlock;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/mirrormedia"));
13
+
14
+ var _imageSelector = require("../selector/image-selector");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ const {
23
+ ImageBlock
24
+ } = _mirrormedia.default.blockRenderers;
25
+ const ImageBlockWrapper = _styledComponents.default.div`
26
+ img {
27
+ min-width: 300px;
28
+ max-width: 600px;
29
+ }
30
+ `;
31
+ const ImageEditButton = _styledComponents.default.span`
32
+ cursor: pointer;
33
+ background-color: white;
34
+ padding: 6px;
35
+ border-radius: 6px;
36
+ `;
37
+
38
+ function ImageEditorBlock(props) {
39
+ const [toShowImageSelector, setToShowImageSelector] = (0, _react.useState)(false);
40
+ const {
41
+ block,
42
+ blockProps,
43
+ contentState
44
+ } = props;
45
+ const {
46
+ onEditStart,
47
+ onEditFinish
48
+ } = blockProps;
49
+ const entityKey = block.getEntityAt(0);
50
+ const entity = contentState.getEntity(entityKey);
51
+ const {
52
+ id,
53
+ name,
54
+ imageFile,
55
+ resized,
56
+ resizedWebp,
57
+ desc,
58
+ url,
59
+ alignment
60
+ } = entity.getData();
61
+ const imageWithMeta = {
62
+ image: {
63
+ id,
64
+ name,
65
+ imageFile,
66
+ resized,
67
+ resizedWebp
68
+ },
69
+ desc,
70
+ url
71
+ };
72
+
73
+ const onImageSelectorChange = (params, align) => {
74
+ if (params.length === 0) {
75
+ onEditFinish({});
76
+ } else {
77
+ const imageEntity = params[0];
78
+ onEditFinish({
79
+ entityKey,
80
+ entityData: { ...imageEntity.image,
81
+ desc: imageEntity.desc,
82
+ url: imageEntity.url,
83
+ alignment: align
84
+ }
85
+ });
86
+ }
87
+
88
+ setToShowImageSelector(false);
89
+ };
90
+
91
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, toShowImageSelector && /*#__PURE__*/_react.default.createElement(_imageSelector.ImageSelector, {
92
+ onChange: onImageSelectorChange,
93
+ enableCaption: true,
94
+ enableUrl: true,
95
+ enableAlignment: true,
96
+ initialAlign: alignment,
97
+ initialSelected: [imageWithMeta]
98
+ }), /*#__PURE__*/_react.default.createElement(ImageBlockWrapper, null, /*#__PURE__*/_react.default.createElement(ImageBlock, props)), /*#__PURE__*/_react.default.createElement(ImageEditButton, {
99
+ onClick: () => {
100
+ // call `onEditStart` prop as we are trying to update the BGImage entity
101
+ onEditStart(); // open `BGImageInput`
102
+
103
+ setToShowImageSelector(true);
104
+ }
105
+ }, /*#__PURE__*/_react.default.createElement("i", {
106
+ className: "fa-solid fa-pen"
107
+ }), /*#__PURE__*/_react.default.createElement("span", null, "Modify")));
108
+ }