@mirrormedia/lilith-draft-editor 1.1.0-alpha.3 → 1.1.0-alpha.30
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/lib/draft-js/buttons/annotation.js +22 -0
- package/lib/draft-js/buttons/audio.js +16 -3
- package/lib/draft-js/buttons/background-color.js +26 -0
- package/lib/draft-js/buttons/background-image.js +32 -13
- package/lib/draft-js/buttons/background-video.js +32 -13
- package/lib/draft-js/buttons/color-box.js +21 -5
- package/lib/draft-js/buttons/divider.js +12 -3
- package/lib/draft-js/buttons/embedded-code.js +16 -5
- package/lib/draft-js/buttons/enlarge.js +3 -0
- package/lib/draft-js/buttons/font-color.js +26 -0
- package/lib/draft-js/buttons/image.js +18 -7
- package/lib/draft-js/buttons/info-box.js +21 -5
- package/lib/draft-js/buttons/link.js +68 -22
- package/lib/draft-js/buttons/media.js +16 -3
- package/lib/draft-js/buttons/related-post.js +14 -3
- package/lib/draft-js/buttons/selector/align-selector.js +11 -2
- package/lib/draft-js/buttons/selector/audio-selector.js +33 -5
- package/lib/draft-js/buttons/selector/image-selector.js +64 -16
- package/lib/draft-js/buttons/selector/pagination.js +6 -2
- package/lib/draft-js/buttons/selector/post-selector.js +39 -6
- package/lib/draft-js/buttons/selector/search-box.js +9 -0
- package/lib/draft-js/buttons/selector/video-selector.js +33 -4
- package/lib/draft-js/buttons/side-index.js +31 -15
- package/lib/draft-js/buttons/slideshow.js +16 -7
- package/lib/draft-js/buttons/table.js +11 -5
- package/lib/draft-js/buttons/text-align.js +14 -0
- package/lib/draft-js/buttons/video.js +19 -5
- package/lib/draft-js/buttons/youtube.js +147 -0
- package/lib/draft-js/const.js +2 -0
- package/lib/draft-js/draft-converter/api-data-instance.js +14 -0
- package/lib/draft-js/draft-converter/atomic-block-processor.js +42 -12
- package/lib/draft-js/draft-converter/entities.js +3 -1
- package/lib/draft-js/draft-converter/index.js +29 -10
- package/lib/draft-js/draft-converter/inline-styles-processor.js +55 -22
- package/lib/draft-js/modifier.js +13 -5
- package/lib/draft-js/util.js +32 -0
- package/lib/index.js +4 -0
- package/lib/website/mirrormedia/block-renderer/background-image-block.js +14 -2
- package/lib/website/mirrormedia/block-renderer/background-video-block.js +14 -2
- package/lib/website/mirrormedia/block-renderer/color-box-block.js +14 -2
- package/lib/website/mirrormedia/block-renderer/embedded-code-block.js +12 -3
- package/lib/website/mirrormedia/block-renderer/image-block.js +108 -0
- package/lib/website/mirrormedia/block-renderer/info-box-block.js +14 -2
- package/lib/website/mirrormedia/block-renderer/side-index-block.js +13 -2
- package/lib/website/mirrormedia/block-renderer/slideshow-block.js +93 -7
- package/lib/website/mirrormedia/block-renderer/table-block.js +62 -28
- package/lib/website/mirrormedia/block-renderer-fn.js +48 -5
- package/lib/website/mirrormedia/draft-editor.js +138 -14
- package/lib/website/mirrormedia/entity-decorator.js +12 -1
- package/lib/website/mirrormedia/index.js +3 -0
- package/lib/website/mirrormedia/selector/align-selector.js +11 -2
- package/lib/website/mirrormedia/selector/audio-selector.js +34 -5
- package/lib/website/mirrormedia/selector/image-selector.js +75 -18
- package/lib/website/mirrormedia/selector/pagination.js +6 -2
- package/lib/website/mirrormedia/selector/post-selector.js +40 -6
- package/lib/website/mirrormedia/selector/search-box.js +9 -0
- package/lib/website/mirrormedia/selector/video-selector.js +36 -7
- package/lib/website/mirrormedia/shared-style/index.js +17 -0
- package/lib/website/mirrormedia/theme/index.js +28 -0
- package/lib/website/readr/block-renderer/background-image-block.js +66 -6
- package/lib/website/readr/block-renderer/background-video-block.js +76 -6
- package/lib/website/readr/block-renderer/color-box-block.js +14 -2
- package/lib/website/readr/block-renderer/image-block.js +106 -0
- package/lib/website/readr/block-renderer/info-box-block.js +14 -2
- package/lib/website/readr/block-renderer/side-index-block.js +13 -2
- package/lib/website/readr/block-renderer/table-block.js +62 -28
- package/lib/website/readr/block-renderer-fn.js +32 -3
- package/lib/website/readr/draft-editor.js +112 -12
- package/lib/website/readr/entity-decorator.js +4 -0
- package/lib/website/readr/index.js +3 -0
- package/lib/website/readr/selector/align-selector.js +11 -2
- package/lib/website/readr/selector/audio-selector.js +34 -17
- package/lib/website/readr/selector/image-selector.js +62 -16
- package/lib/website/readr/selector/pagination.js +6 -2
- package/lib/website/readr/selector/post-selector.js +40 -13
- package/lib/website/readr/selector/search-box.js +9 -0
- package/lib/website/readr/selector/video-selector.js +33 -4
- package/lib/website/readr/theme/index.js +39 -0
- 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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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);
|
package/lib/draft-js/modifier.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|