@mirrormedia/lilith-draft-editor 1.3.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/@types/draft-js/buttons/annotation.d.ts +2 -0
  2. package/@types/draft-js/buttons/audio.d.ts +9 -0
  3. package/@types/draft-js/buttons/background-color.d.ts +2 -0
  4. package/@types/draft-js/buttons/background-image.d.ts +35 -0
  5. package/@types/draft-js/buttons/background-video.d.ts +35 -0
  6. package/@types/draft-js/buttons/color-box.d.ts +29 -0
  7. package/@types/draft-js/buttons/divider.d.ts +2 -0
  8. package/@types/draft-js/buttons/embedded-code.d.ts +2 -0
  9. package/@types/draft-js/buttons/enlarge.d.ts +2 -0
  10. package/@types/draft-js/buttons/font-color.d.ts +2 -0
  11. package/@types/draft-js/buttons/image.d.ts +9 -0
  12. package/@types/draft-js/buttons/info-box.d.ts +27 -0
  13. package/@types/draft-js/buttons/link.d.ts +2 -0
  14. package/@types/draft-js/buttons/media.d.ts +2 -0
  15. package/@types/draft-js/buttons/related-post.d.ts +13 -0
  16. package/@types/draft-js/buttons/selector/align-selector.d.ts +15 -0
  17. package/@types/draft-js/buttons/selector/audio-selector.d.ts +21 -0
  18. package/@types/draft-js/buttons/selector/image-selector.d.ts +34 -0
  19. package/@types/draft-js/buttons/selector/pagination.d.ts +7 -0
  20. package/@types/draft-js/buttons/selector/post-selector.d.ts +22 -0
  21. package/@types/draft-js/buttons/selector/search-box.d.ts +6 -0
  22. package/@types/draft-js/buttons/selector/video-selector.d.ts +24 -0
  23. package/@types/draft-js/buttons/side-index.d.ts +25 -0
  24. package/@types/draft-js/buttons/slideshow.d.ts +9 -0
  25. package/@types/draft-js/buttons/table.d.ts +2 -0
  26. package/@types/draft-js/buttons/text-align.d.ts +4 -0
  27. package/@types/draft-js/buttons/video.d.ts +9 -0
  28. package/@types/draft-js/buttons/youtube.d.ts +23 -0
  29. package/@types/draft-js/const.d.ts +1 -0
  30. package/@types/draft-js/draft-converter/api-data-instance.d.ts +11 -0
  31. package/@types/draft-js/draft-converter/atomic-block-processor.d.ts +17 -0
  32. package/@types/draft-js/draft-converter/entities.d.ts +74 -0
  33. package/@types/draft-js/draft-converter/index.d.ts +8 -0
  34. package/@types/draft-js/draft-converter/inline-styles-processor.d.ts +1 -0
  35. package/@types/draft-js/modifier.d.ts +6 -0
  36. package/@types/draft-js/util.d.ts +1 -0
  37. package/@types/index.d.ts +4 -0
  38. package/@types/website/mirrormedia/block-renderer/background-image-block.d.ts +17 -0
  39. package/@types/website/mirrormedia/block-renderer/background-video-block.d.ts +17 -0
  40. package/@types/website/mirrormedia/block-renderer/color-box-block.d.ts +17 -0
  41. package/@types/website/mirrormedia/block-renderer/embedded-code-block.d.ts +5 -0
  42. package/@types/website/mirrormedia/block-renderer/image-block.d.ts +15 -0
  43. package/@types/website/mirrormedia/block-renderer/info-box-block.d.ts +17 -0
  44. package/@types/website/mirrormedia/block-renderer/side-index-block.d.ts +15 -0
  45. package/@types/website/mirrormedia/block-renderer/slideshow-block.d.ts +16 -0
  46. package/@types/website/mirrormedia/block-renderer/table-block.d.ts +16 -0
  47. package/@types/website/mirrormedia/block-renderer-fn.d.ts +4 -0
  48. package/@types/website/mirrormedia/draft-editor.d.ts +75 -0
  49. package/@types/website/mirrormedia/entity-decorator.d.ts +3 -0
  50. package/@types/website/mirrormedia/index.d.ts +5 -0
  51. package/@types/website/mirrormedia/selector/align-selector.d.ts +15 -0
  52. package/@types/website/mirrormedia/selector/audio-selector.d.ts +20 -0
  53. package/@types/website/mirrormedia/selector/image-selector.d.ts +44 -0
  54. package/@types/website/mirrormedia/selector/pagination.d.ts +7 -0
  55. package/@types/website/mirrormedia/selector/post-selector.d.ts +21 -0
  56. package/@types/website/mirrormedia/selector/search-box.d.ts +6 -0
  57. package/@types/website/mirrormedia/selector/video-selector.d.ts +23 -0
  58. package/@types/website/mirrormedia/shared-style/index.d.ts +3 -0
  59. package/@types/website/mirrormedia/theme/index.d.ts +19 -0
  60. package/@types/website/readr/block-renderer/background-image-block.d.ts +29 -0
  61. package/@types/website/readr/block-renderer/background-video-block.d.ts +29 -0
  62. package/@types/website/readr/block-renderer/color-box-block.d.ts +17 -0
  63. package/@types/website/readr/block-renderer/image-block.d.ts +15 -0
  64. package/@types/website/readr/block-renderer/info-box-block.d.ts +17 -0
  65. package/@types/website/readr/block-renderer/side-index-block.d.ts +15 -0
  66. package/@types/website/readr/block-renderer/table-block.d.ts +16 -0
  67. package/@types/website/readr/block-renderer-fn.d.ts +4 -0
  68. package/@types/website/readr/draft-editor.d.ts +74 -0
  69. package/@types/website/readr/entity-decorator.d.ts +3 -0
  70. package/@types/website/readr/index.d.ts +5 -0
  71. package/@types/website/readr/selector/align-selector.d.ts +15 -0
  72. package/@types/website/readr/selector/audio-selector.d.ts +18 -0
  73. package/@types/website/readr/selector/image-selector.d.ts +36 -0
  74. package/@types/website/readr/selector/pagination.d.ts +7 -0
  75. package/@types/website/readr/selector/post-selector.d.ts +20 -0
  76. package/@types/website/readr/selector/search-box.d.ts +6 -0
  77. package/@types/website/readr/selector/video-selector.d.ts +23 -0
  78. package/@types/website/readr/theme/index.d.ts +30 -0
  79. package/README.md +8 -8
  80. package/lib/draft-js/buttons/annotation.js +4 -3
  81. package/lib/draft-js/buttons/audio.js +5 -9
  82. package/lib/draft-js/buttons/background-color.js +4 -3
  83. package/lib/draft-js/buttons/background-image.js +5 -3
  84. package/lib/draft-js/buttons/background-video.js +5 -3
  85. package/lib/draft-js/buttons/color-box.js +11 -15
  86. package/lib/draft-js/buttons/divider.js +6 -6
  87. package/lib/draft-js/buttons/embedded-code.js +8 -13
  88. package/lib/draft-js/buttons/enlarge.js +2 -6
  89. package/lib/draft-js/buttons/font-color.js +4 -3
  90. package/lib/draft-js/buttons/image.js +5 -9
  91. package/lib/draft-js/buttons/info-box.js +1 -1
  92. package/lib/draft-js/buttons/link.js +3 -2
  93. package/lib/draft-js/buttons/related-post.js +6 -10
  94. package/lib/draft-js/buttons/selector/align-selector.js +5 -9
  95. package/lib/draft-js/buttons/selector/audio-selector.js +17 -13
  96. package/lib/draft-js/buttons/selector/image-selector.js +29 -21
  97. package/lib/draft-js/buttons/selector/pagination.js +6 -8
  98. package/lib/draft-js/buttons/selector/post-selector.js +17 -13
  99. package/lib/draft-js/buttons/selector/video-selector.js +15 -10
  100. package/lib/draft-js/buttons/side-index.js +18 -22
  101. package/lib/draft-js/buttons/slideshow.js +5 -9
  102. package/lib/draft-js/buttons/table.js +3 -7
  103. package/lib/draft-js/buttons/text-align.js +17 -15
  104. package/lib/draft-js/buttons/type.js +5 -0
  105. package/lib/draft-js/buttons/video.js +5 -9
  106. package/lib/draft-js/buttons/youtube.js +12 -16
  107. package/lib/draft-js/draft-converter/api-data-instance.js +16 -2
  108. package/lib/draft-js/draft-converter/atomic-block-processor.js +24 -14
  109. package/lib/draft-js/draft-converter/index.js +68 -17
  110. package/lib/draft-js/draft-converter/inline-styles-processor.js +74 -26
  111. package/lib/draft-js/draft-converter/jsdoc.js +24 -0
  112. package/lib/draft-js/modifier.js +7 -7
  113. package/lib/draft-js/util.js +3 -1
  114. package/lib/website/mirrormedia/draft-editor.js +129 -93
  115. package/lib/website/mirrormedia/selector/align-selector.js +5 -9
  116. package/lib/website/mirrormedia/selector/audio-selector.js +4 -2
  117. package/lib/website/mirrormedia/selector/image-selector.js +16 -9
  118. package/lib/website/mirrormedia/selector/pagination.js +6 -8
  119. package/lib/website/mirrormedia/selector/post-selector.js +5 -3
  120. package/lib/website/mirrormedia/selector/video-selector.js +1 -1
  121. package/package.json +13 -11
  122. package/lib/draft-js/buttons/media.js +0 -121
@@ -12,9 +12,26 @@ var _const = require("../const");
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
14
  // Modified from https://github.com/dburrows/draft-js-basic-html-editor/blob/master/src/utils/processInlineStylesAndEntities.js
15
+
16
+ /**
17
+ * @typedef {import('./jsdoc').RawDraftContentBlock} RawDraftContentBlock
18
+ * @typedef {import('./jsdoc').EntityMap} EntityMap
19
+ * @typedef {import('./jsdoc').RawDraftEntityRange} RawDraftEntityRange
20
+ * @typedef {import('./jsdoc').DraftInlineStyleType} DraftInlineStyleType
21
+ * @typedef {import('./jsdoc').RawDraftInlineStyleRange} RawDraftInlineStyleRange
22
+ * @typedef {import('./jsdoc').EntityTagMap} EntityTagMap
23
+ * @typedef {import('./jsdoc').InlineTagMap} InlineTagMap
24
+ * @typedef {Record<string, any>} TagInsertMap
25
+ */
26
+
27
+ /**
28
+ * @param {DraftInlineStyleType} style
29
+ */
15
30
  function tagForCustomInlineStyle(style) {
16
31
  const customInlineStylePrefixs = [_const.CUSTOM_STYLE_PREFIX_FONT_COLOR, _const.CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR];
17
32
  const stylePrefix = customInlineStylePrefixs.find(prefix => style.startsWith(prefix));
33
+ /** @type {string[]} */
34
+
18
35
  let tag, value;
19
36
 
20
37
  switch (stylePrefix) {
@@ -29,37 +46,44 @@ function tagForCustomInlineStyle(style) {
29
46
  break;
30
47
 
31
48
  default:
49
+ tag = [];
32
50
  break;
33
51
  }
34
52
 
35
53
  return tag;
36
54
  }
55
+ /**
56
+ * @param {RawDraftContentBlock} block
57
+ */
58
+
37
59
 
38
60
  function _fullfilIntersection(block) {
39
61
  // SORT BEFORE PROCESSING
40
- let sortedISRanges = _lodash.default.sortBy(block.inlineStyleRanges, 'offset');
62
+ const sortedISRanges = _lodash.default.sortBy(block.inlineStyleRanges, 'offset');
41
63
 
42
- let sortedEntityRanges = _lodash.default.sortBy(block.entityRanges, 'offset');
64
+ const sortedEntityRanges = _lodash.default.sortBy(block.entityRanges, 'offset');
43
65
 
44
- let splitedISInline = [];
66
+ const splitedISInline = [];
45
67
 
46
68
  for (let i = 0; i < sortedEntityRanges.length; i++) {
47
- let entityRange = sortedEntityRanges[i];
69
+ const entityRange = sortedEntityRanges[i];
48
70
 
49
71
  for (let j = 0; j < sortedISRanges.length; j++) {
50
- let entityOffset = _lodash.default.get(entityRange, 'offset', 0);
72
+ const entityOffset = _lodash.default.get(entityRange, 'offset', 0);
51
73
 
52
- let entityLength = _lodash.default.get(entityRange, 'length', 0);
74
+ const entityLength = _lodash.default.get(entityRange, 'length', 0);
53
75
 
54
- let inlineLength = _lodash.default.get(sortedISRanges, [j, 'length'], 0);
76
+ const inlineLength = _lodash.default.get(sortedISRanges, [j, 'length'], 0);
55
77
 
56
- let inlineOffset = _lodash.default.get(sortedISRanges, [j, 'offset'], 0);
78
+ const inlineOffset = _lodash.default.get(sortedISRanges, [j, 'offset'], 0);
57
79
 
58
- let inlineStyle = _lodash.default.get(sortedISRanges, [j, 'style'], '');
80
+ const inlineStyle =
81
+ /** @type {DraftInlineStyleType}*/
82
+ _lodash.default.get(sortedISRanges, [j, 'style'], '');
59
83
 
60
- let nextEntityOffset = _lodash.default.get(sortedEntityRanges, [i + 1, 'offset'], 0);
84
+ const nextEntityOffset = _lodash.default.get(sortedEntityRanges, [i + 1, 'offset'], 0);
61
85
 
62
- let nextEntityLength = _lodash.default.get(sortedEntityRanges, [i + 1, 'length'], 0); // handle intersections of inline style and entity
86
+ const nextEntityLength = _lodash.default.get(sortedEntityRanges, [i + 1, 'length'], 0); // handle intersections of inline style and entity
63
87
  // <a></a> is entity
64
88
  // <abbr></abbr> is next entity
65
89
  // <strong></strong> is inline style
@@ -128,10 +152,16 @@ function _fullfilIntersection(block) {
128
152
 
129
153
  return sortedISRanges;
130
154
  }
155
+ /**
156
+ * @param {InlineTagMap} inlineTagMap
157
+ * @param {RawDraftInlineStyleRange[]} inlineStyleRanges
158
+ * @param {TagInsertMap} [tagInsertMap]
159
+ */
160
+
131
161
 
132
162
  function _inlineTag(inlineTagMap, inlineStyleRanges, tagInsertMap = {}) {
133
163
  // SORT BEFORE PROCESSING
134
- let sortedRanges = _lodash.default.sortBy(inlineStyleRanges, 'offset'); // map all the tag insertions we're going to do
164
+ const sortedRanges = _lodash.default.sortBy(inlineStyleRanges, 'offset'); // map all the tag insertions we're going to do
135
165
 
136
166
 
137
167
  sortedRanges.forEach(function (range) {
@@ -159,19 +189,26 @@ function _inlineTag(inlineTagMap, inlineStyleRanges, tagInsertMap = {}) {
159
189
  });
160
190
  return tagInsertMap;
161
191
  }
192
+ /**
193
+ * @param {EntityTagMap} entityTagMap
194
+ * @param {EntityMap} entityMap
195
+ * @param {RawDraftEntityRange[]} entityRanges
196
+ * @param {TagInsertMap} tagInsertMap
197
+ */
198
+
162
199
 
163
200
  function _entityTag(entityTagMap, entityMap, entityRanges, tagInsertMap = {}) {
164
201
  _lodash.default.forEach(entityRanges, range => {
165
- let entity = entityMap[range.key];
166
- let type = entity.type && entity.type.toUpperCase();
167
- let tag = entityTagMap[type];
168
- let data = entity.data;
202
+ const entity = entityMap[range.key];
203
+ const type = entity.type && entity.type.toUpperCase();
204
+ const tag = entityTagMap[type];
205
+ const data = entity.data;
169
206
 
170
- let compiledTag0 = _lodash.default.template(tag[0], {
207
+ const compiledTag0 = _lodash.default.template(tag[0], {
171
208
  variable: 'data'
172
209
  })(data);
173
210
 
174
- let compiledTag1 = _lodash.default.template(tag[1], {
211
+ const compiledTag1 = _lodash.default.template(tag[1], {
175
212
  variable: 'data'
176
213
  })(data);
177
214
 
@@ -194,6 +231,13 @@ function _entityTag(entityTagMap, entityMap, entityRanges, tagInsertMap = {}) {
194
231
 
195
232
  return tagInsertMap;
196
233
  }
234
+ /**
235
+ * @param {InlineTagMap} inlineTagMap
236
+ * @param {EntityTagMap} entityTagMap
237
+ * @param {EntityMap} entityMap
238
+ * @param {RawDraftContentBlock} block
239
+ */
240
+
197
241
 
198
242
  function convertToHtml(inlineTagMap, entityTagMap, entityMap, block) {
199
243
  // exit if there is no inlineStyleRanges/entityRanges or length === 0 as well
@@ -203,21 +247,23 @@ function convertToHtml(inlineTagMap, entityTagMap, entityMap, block) {
203
247
 
204
248
  let html = block.text;
205
249
 
206
- let inlineStyleRanges = _fullfilIntersection(block);
250
+ const inlineStyleRanges = _fullfilIntersection(block);
251
+ /** @type {TagInsertMap} */
252
+
207
253
 
208
254
  let tagInsertMap = {};
209
255
  tagInsertMap = _entityTag(entityTagMap, entityMap, block.entityRanges, tagInsertMap);
210
256
  tagInsertMap = _inlineTag(inlineTagMap, inlineStyleRanges, tagInsertMap); // sort on position, as we'll need to keep track of offset
211
257
 
212
- let orderedKeys = Object.keys(tagInsertMap).sort(function (a, b) {
213
- a = Number(a);
214
- b = Number(b);
258
+ const orderedKeys = Object.keys(tagInsertMap).sort(function (a, b) {
259
+ const x = Number(a);
260
+ const y = Number(b);
215
261
 
216
- if (a > b) {
262
+ if (x > y) {
217
263
  return 1;
218
264
  }
219
265
 
220
- if (a < b) {
266
+ if (x < y) {
221
267
  return -1;
222
268
  }
223
269
 
@@ -226,8 +272,10 @@ function convertToHtml(inlineTagMap, entityTagMap, entityMap, block) {
226
272
 
227
273
  let offset = 0;
228
274
  orderedKeys.forEach(function (pos) {
229
- let index = Number(pos);
230
- tagInsertMap[pos].forEach(function (tag) {
275
+ const index = Number(pos);
276
+ tagInsertMap[pos].forEach(function (
277
+ /** @type {any} */
278
+ tag) {
231
279
  html = html.substr(0, offset + index) + tag + html.substr(offset + index);
232
280
  offset += tag.length;
233
281
  });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = {};
8
+ /**
9
+ * @typedef {import('draft-js').RawDraftContentState} RawDraftContentState
10
+ * @typedef {import('draft-js').RawDraftContentBlock} RawDraftContentBlock
11
+ * @typedef {import('draft-js').RawDraftEntity} RawDraftEntity
12
+ * @typedef {import('draft-js').RawDraftEntityRange} RawDraftEntityRange
13
+ * @typedef {import('draft-js').DraftInlineStyleType} DraftInlineStyleType
14
+ * @typedef {import('draft-js').RawDraftInlineStyleRange} RawDraftInlineStyleRange
15
+ */
16
+
17
+ /**
18
+ * @typedef {Record<string, RawDraftEntity>} EntityMap
19
+ * @typedef {Record<string, any>} BlockTagMap
20
+ * @typedef {Record<string, string[]>} EntityTagMap
21
+ * @typedef {EntityTagMap} InlineTagMap
22
+ */
23
+
24
+ exports.default = _default;
@@ -9,8 +9,6 @@ var _draftJs = require("draft-js");
9
9
 
10
10
  var _immutable = require("immutable");
11
11
 
12
- const Modifier = { ..._draftJs.Modifier
13
- };
14
12
  /*
15
13
  This method is specified for custom inline style such as 'FONT_COLOR_#ffffff'.
16
14
  For this kind of inline style there may be more than one style name 'FONT_COLOR_#ffffff', 'FONT_COLOR_#000000'.
@@ -22,10 +20,7 @@ const Modifier = { ..._draftJs.Modifier
22
20
 
23
21
  Reference: https://github.com/facebook/draft-js/blob/main/src/model/transaction/ContentStateInlineStyle.js#L39-L88
24
22
  */
25
-
26
- exports.Modifier = Modifier;
27
-
28
- Modifier.removeInlineStyleByPrefix = (contentState, selectionState, inlineStylePrefix) => {
23
+ const removeInlineStyleByPrefix = (contentState, selectionState, inlineStylePrefix) => {
29
24
  const blockMap = contentState.getBlockMap();
30
25
  const startKey = selectionState.getStartKey();
31
26
  const startOffset = selectionState.getStartOffset();
@@ -65,4 +60,9 @@ Modifier.removeInlineStyleByPrefix = (contentState, selectionState, inlineStyleP
65
60
  selectionBefore: selectionState,
66
61
  selectionAfter: selectionState
67
62
  });
68
- };
63
+ };
64
+
65
+ const Modifier = Object.assign({}, _draftJs.Modifier, {
66
+ removeInlineStyleByPrefix
67
+ });
68
+ exports.Modifier = Modifier;
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getSelectionEntityData = void 0;
7
7
 
8
- const getSelectionEntityData = editorState => {
8
+ const getSelectionEntityData = (
9
+ /** @type {import('draft-js').EditorState} */
10
+ editorState) => {
9
11
  const selection = editorState.getSelection();
10
12
  const startOffset = selection.getStartOffset();
11
13
  const startBlock = editorState.getCurrentContent().getBlockForKey(selection.getStartKey());