@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.
- package/@types/draft-js/buttons/annotation.d.ts +2 -0
- package/@types/draft-js/buttons/audio.d.ts +9 -0
- package/@types/draft-js/buttons/background-color.d.ts +2 -0
- package/@types/draft-js/buttons/background-image.d.ts +35 -0
- package/@types/draft-js/buttons/background-video.d.ts +35 -0
- package/@types/draft-js/buttons/color-box.d.ts +29 -0
- package/@types/draft-js/buttons/divider.d.ts +2 -0
- package/@types/draft-js/buttons/embedded-code.d.ts +2 -0
- package/@types/draft-js/buttons/enlarge.d.ts +2 -0
- package/@types/draft-js/buttons/font-color.d.ts +2 -0
- package/@types/draft-js/buttons/image.d.ts +9 -0
- package/@types/draft-js/buttons/info-box.d.ts +27 -0
- package/@types/draft-js/buttons/link.d.ts +2 -0
- package/@types/draft-js/buttons/media.d.ts +2 -0
- package/@types/draft-js/buttons/related-post.d.ts +13 -0
- package/@types/draft-js/buttons/selector/align-selector.d.ts +15 -0
- package/@types/draft-js/buttons/selector/audio-selector.d.ts +21 -0
- package/@types/draft-js/buttons/selector/image-selector.d.ts +34 -0
- package/@types/draft-js/buttons/selector/pagination.d.ts +7 -0
- package/@types/draft-js/buttons/selector/post-selector.d.ts +22 -0
- package/@types/draft-js/buttons/selector/search-box.d.ts +6 -0
- package/@types/draft-js/buttons/selector/video-selector.d.ts +24 -0
- package/@types/draft-js/buttons/side-index.d.ts +25 -0
- package/@types/draft-js/buttons/slideshow.d.ts +9 -0
- package/@types/draft-js/buttons/table.d.ts +2 -0
- package/@types/draft-js/buttons/text-align.d.ts +4 -0
- package/@types/draft-js/buttons/video.d.ts +9 -0
- package/@types/draft-js/buttons/youtube.d.ts +23 -0
- package/@types/draft-js/const.d.ts +1 -0
- package/@types/draft-js/draft-converter/api-data-instance.d.ts +11 -0
- package/@types/draft-js/draft-converter/atomic-block-processor.d.ts +17 -0
- package/@types/draft-js/draft-converter/entities.d.ts +74 -0
- package/@types/draft-js/draft-converter/index.d.ts +8 -0
- package/@types/draft-js/draft-converter/inline-styles-processor.d.ts +1 -0
- package/@types/draft-js/modifier.d.ts +6 -0
- package/@types/draft-js/util.d.ts +1 -0
- package/@types/index.d.ts +4 -0
- package/@types/website/mirrormedia/block-renderer/background-image-block.d.ts +17 -0
- package/@types/website/mirrormedia/block-renderer/background-video-block.d.ts +17 -0
- package/@types/website/mirrormedia/block-renderer/color-box-block.d.ts +17 -0
- package/@types/website/mirrormedia/block-renderer/embedded-code-block.d.ts +5 -0
- package/@types/website/mirrormedia/block-renderer/image-block.d.ts +15 -0
- package/@types/website/mirrormedia/block-renderer/info-box-block.d.ts +17 -0
- package/@types/website/mirrormedia/block-renderer/side-index-block.d.ts +15 -0
- package/@types/website/mirrormedia/block-renderer/slideshow-block.d.ts +16 -0
- package/@types/website/mirrormedia/block-renderer/table-block.d.ts +16 -0
- package/@types/website/mirrormedia/block-renderer-fn.d.ts +4 -0
- package/@types/website/mirrormedia/draft-editor.d.ts +75 -0
- package/@types/website/mirrormedia/entity-decorator.d.ts +3 -0
- package/@types/website/mirrormedia/index.d.ts +5 -0
- package/@types/website/mirrormedia/selector/align-selector.d.ts +15 -0
- package/@types/website/mirrormedia/selector/audio-selector.d.ts +20 -0
- package/@types/website/mirrormedia/selector/image-selector.d.ts +44 -0
- package/@types/website/mirrormedia/selector/pagination.d.ts +7 -0
- package/@types/website/mirrormedia/selector/post-selector.d.ts +21 -0
- package/@types/website/mirrormedia/selector/search-box.d.ts +6 -0
- package/@types/website/mirrormedia/selector/video-selector.d.ts +23 -0
- package/@types/website/mirrormedia/shared-style/index.d.ts +3 -0
- package/@types/website/mirrormedia/theme/index.d.ts +19 -0
- package/@types/website/readr/block-renderer/background-image-block.d.ts +29 -0
- package/@types/website/readr/block-renderer/background-video-block.d.ts +29 -0
- package/@types/website/readr/block-renderer/color-box-block.d.ts +17 -0
- package/@types/website/readr/block-renderer/image-block.d.ts +15 -0
- package/@types/website/readr/block-renderer/info-box-block.d.ts +17 -0
- package/@types/website/readr/block-renderer/side-index-block.d.ts +15 -0
- package/@types/website/readr/block-renderer/table-block.d.ts +16 -0
- package/@types/website/readr/block-renderer-fn.d.ts +4 -0
- package/@types/website/readr/draft-editor.d.ts +74 -0
- package/@types/website/readr/entity-decorator.d.ts +3 -0
- package/@types/website/readr/index.d.ts +5 -0
- package/@types/website/readr/selector/align-selector.d.ts +15 -0
- package/@types/website/readr/selector/audio-selector.d.ts +18 -0
- package/@types/website/readr/selector/image-selector.d.ts +36 -0
- package/@types/website/readr/selector/pagination.d.ts +7 -0
- package/@types/website/readr/selector/post-selector.d.ts +20 -0
- package/@types/website/readr/selector/search-box.d.ts +6 -0
- package/@types/website/readr/selector/video-selector.d.ts +23 -0
- package/@types/website/readr/theme/index.d.ts +30 -0
- package/README.md +8 -8
- package/lib/draft-js/buttons/annotation.js +4 -3
- package/lib/draft-js/buttons/audio.js +5 -9
- package/lib/draft-js/buttons/background-color.js +4 -3
- package/lib/draft-js/buttons/background-image.js +5 -3
- package/lib/draft-js/buttons/background-video.js +5 -3
- package/lib/draft-js/buttons/color-box.js +11 -15
- package/lib/draft-js/buttons/divider.js +6 -6
- package/lib/draft-js/buttons/embedded-code.js +8 -13
- package/lib/draft-js/buttons/enlarge.js +2 -6
- package/lib/draft-js/buttons/font-color.js +4 -3
- package/lib/draft-js/buttons/image.js +5 -9
- package/lib/draft-js/buttons/info-box.js +1 -1
- package/lib/draft-js/buttons/link.js +3 -2
- package/lib/draft-js/buttons/related-post.js +6 -10
- package/lib/draft-js/buttons/selector/align-selector.js +5 -9
- package/lib/draft-js/buttons/selector/audio-selector.js +17 -13
- package/lib/draft-js/buttons/selector/image-selector.js +29 -21
- package/lib/draft-js/buttons/selector/pagination.js +6 -8
- package/lib/draft-js/buttons/selector/post-selector.js +17 -13
- package/lib/draft-js/buttons/selector/video-selector.js +15 -10
- package/lib/draft-js/buttons/side-index.js +18 -22
- package/lib/draft-js/buttons/slideshow.js +5 -9
- package/lib/draft-js/buttons/table.js +3 -7
- package/lib/draft-js/buttons/text-align.js +17 -15
- package/lib/draft-js/buttons/type.js +5 -0
- package/lib/draft-js/buttons/video.js +5 -9
- package/lib/draft-js/buttons/youtube.js +12 -16
- package/lib/draft-js/draft-converter/api-data-instance.js +16 -2
- package/lib/draft-js/draft-converter/atomic-block-processor.js +24 -14
- package/lib/draft-js/draft-converter/index.js +68 -17
- package/lib/draft-js/draft-converter/inline-styles-processor.js +74 -26
- package/lib/draft-js/draft-converter/jsdoc.js +24 -0
- package/lib/draft-js/modifier.js +7 -7
- package/lib/draft-js/util.js +3 -1
- package/lib/website/mirrormedia/draft-editor.js +129 -93
- package/lib/website/mirrormedia/selector/align-selector.js +5 -9
- package/lib/website/mirrormedia/selector/audio-selector.js +4 -2
- package/lib/website/mirrormedia/selector/image-selector.js +16 -9
- package/lib/website/mirrormedia/selector/pagination.js +6 -8
- package/lib/website/mirrormedia/selector/post-selector.js +5 -3
- package/lib/website/mirrormedia/selector/video-selector.js +1 -1
- package/package.json +13 -11
- 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
|
-
|
|
62
|
+
const sortedISRanges = _lodash.default.sortBy(block.inlineStyleRanges, 'offset');
|
|
41
63
|
|
|
42
|
-
|
|
64
|
+
const sortedEntityRanges = _lodash.default.sortBy(block.entityRanges, 'offset');
|
|
43
65
|
|
|
44
|
-
|
|
66
|
+
const splitedISInline = [];
|
|
45
67
|
|
|
46
68
|
for (let i = 0; i < sortedEntityRanges.length; i++) {
|
|
47
|
-
|
|
69
|
+
const entityRange = sortedEntityRanges[i];
|
|
48
70
|
|
|
49
71
|
for (let j = 0; j < sortedISRanges.length; j++) {
|
|
50
|
-
|
|
72
|
+
const entityOffset = _lodash.default.get(entityRange, 'offset', 0);
|
|
51
73
|
|
|
52
|
-
|
|
74
|
+
const entityLength = _lodash.default.get(entityRange, 'length', 0);
|
|
53
75
|
|
|
54
|
-
|
|
76
|
+
const inlineLength = _lodash.default.get(sortedISRanges, [j, 'length'], 0);
|
|
55
77
|
|
|
56
|
-
|
|
78
|
+
const inlineOffset = _lodash.default.get(sortedISRanges, [j, 'offset'], 0);
|
|
57
79
|
|
|
58
|
-
|
|
80
|
+
const inlineStyle =
|
|
81
|
+
/** @type {DraftInlineStyleType}*/
|
|
82
|
+
_lodash.default.get(sortedISRanges, [j, 'style'], '');
|
|
59
83
|
|
|
60
|
-
|
|
84
|
+
const nextEntityOffset = _lodash.default.get(sortedEntityRanges, [i + 1, 'offset'], 0);
|
|
61
85
|
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
207
|
+
const compiledTag0 = _lodash.default.template(tag[0], {
|
|
171
208
|
variable: 'data'
|
|
172
209
|
})(data);
|
|
173
210
|
|
|
174
|
-
|
|
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
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
258
|
+
const orderedKeys = Object.keys(tagInsertMap).sort(function (a, b) {
|
|
259
|
+
const x = Number(a);
|
|
260
|
+
const y = Number(b);
|
|
215
261
|
|
|
216
|
-
if (
|
|
262
|
+
if (x > y) {
|
|
217
263
|
return 1;
|
|
218
264
|
}
|
|
219
265
|
|
|
220
|
-
if (
|
|
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
|
-
|
|
230
|
-
tagInsertMap[pos].forEach(function (
|
|
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;
|
package/lib/draft-js/modifier.js
CHANGED
|
@@ -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;
|
package/lib/draft-js/util.js
CHANGED
|
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getSelectionEntityData = void 0;
|
|
7
7
|
|
|
8
|
-
const getSelectionEntityData =
|
|
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());
|