@lexical/text 0.7.8 → 0.7.9
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/LexicalText.dev.js +4 -55
- package/package.json +2 -2
package/LexicalText.dev.js
CHANGED
@@ -12,64 +12,49 @@ var lexical = require('lexical');
|
|
12
12
|
function $findTextIntersectionFromCharacters(root, targetCharacters) {
|
13
13
|
let node = root.getFirstChild();
|
14
14
|
let currentCharacters = 0;
|
15
|
-
|
16
15
|
mainLoop: while (node !== null) {
|
17
16
|
if (lexical.$isElementNode(node)) {
|
18
17
|
const child = node.getFirstChild();
|
19
|
-
|
20
18
|
if (child !== null) {
|
21
19
|
node = child;
|
22
20
|
continue;
|
23
21
|
}
|
24
22
|
} else if (lexical.$isTextNode(node)) {
|
25
23
|
const characters = node.getTextContentSize();
|
26
|
-
|
27
24
|
if (currentCharacters + characters > targetCharacters) {
|
28
25
|
return {
|
29
26
|
node,
|
30
27
|
offset: targetCharacters - currentCharacters
|
31
28
|
};
|
32
29
|
}
|
33
|
-
|
34
30
|
currentCharacters += characters;
|
35
31
|
}
|
36
|
-
|
37
32
|
const sibling = node.getNextSibling();
|
38
|
-
|
39
33
|
if (sibling !== null) {
|
40
34
|
node = sibling;
|
41
35
|
continue;
|
42
36
|
}
|
43
|
-
|
44
37
|
let parent = node.getParent();
|
45
|
-
|
46
38
|
while (parent !== null) {
|
47
39
|
const parentSibling = parent.getNextSibling();
|
48
|
-
|
49
40
|
if (parentSibling !== null) {
|
50
41
|
node = parentSibling;
|
51
42
|
continue mainLoop;
|
52
43
|
}
|
53
|
-
|
54
44
|
parent = parent.getParent();
|
55
45
|
}
|
56
|
-
|
57
46
|
break;
|
58
47
|
}
|
59
|
-
|
60
48
|
return null;
|
61
49
|
}
|
62
50
|
function $isRootTextContentEmpty(isEditorComposing, trim = true) {
|
63
51
|
if (isEditorComposing) {
|
64
52
|
return false;
|
65
53
|
}
|
66
|
-
|
67
54
|
let text = $rootTextContent();
|
68
|
-
|
69
55
|
if (trim) {
|
70
56
|
text = text.trim();
|
71
57
|
}
|
72
|
-
|
73
58
|
return text === '';
|
74
59
|
}
|
75
60
|
function $isRootTextContentEmptyCurry(isEditorComposing, trim) {
|
@@ -83,40 +68,31 @@ function $canShowPlaceholder(isComposing) {
|
|
83
68
|
if (!$isRootTextContentEmpty(isComposing, false)) {
|
84
69
|
return false;
|
85
70
|
}
|
86
|
-
|
87
71
|
const root = lexical.$getRoot();
|
88
72
|
const children = root.getChildren();
|
89
73
|
const childrenLength = children.length;
|
90
|
-
|
91
74
|
if (childrenLength > 1) {
|
92
75
|
return false;
|
93
76
|
}
|
94
|
-
|
95
77
|
for (let i = 0; i < childrenLength; i++) {
|
96
78
|
const topBlock = children[i];
|
97
|
-
|
98
79
|
if (lexical.$isElementNode(topBlock)) {
|
99
80
|
if (!lexical.$isParagraphNode(topBlock)) {
|
100
81
|
return false;
|
101
82
|
}
|
102
|
-
|
103
83
|
if (topBlock.__indent !== 0) {
|
104
84
|
return false;
|
105
85
|
}
|
106
|
-
|
107
86
|
const topBlockChildren = topBlock.getChildren();
|
108
87
|
const topBlockChildrenLength = topBlockChildren.length;
|
109
|
-
|
110
88
|
for (let s = 0; s < topBlockChildrenLength; s++) {
|
111
89
|
const child = topBlockChildren[i];
|
112
|
-
|
113
90
|
if (!lexical.$isTextNode(child)) {
|
114
91
|
return false;
|
115
92
|
}
|
116
93
|
}
|
117
94
|
}
|
118
95
|
}
|
119
|
-
|
120
96
|
return true;
|
121
97
|
}
|
122
98
|
function $canShowPlaceholderCurry(isEditorComposing) {
|
@@ -126,80 +102,67 @@ function registerLexicalTextEntity(editor, getMatch, targetNode, createNode) {
|
|
126
102
|
const isTargetNode = node => {
|
127
103
|
return node instanceof targetNode;
|
128
104
|
};
|
129
|
-
|
130
105
|
const replaceWithSimpleText = node => {
|
131
106
|
const textNode = lexical.$createTextNode(node.getTextContent());
|
132
107
|
textNode.setFormat(node.getFormat());
|
133
108
|
node.replace(textNode);
|
134
109
|
};
|
135
|
-
|
136
110
|
const getMode = node => {
|
137
111
|
return node.getLatest().__mode;
|
138
112
|
};
|
139
|
-
|
140
113
|
const textNodeTransform = node => {
|
141
114
|
if (!node.isSimpleText()) {
|
142
115
|
return;
|
143
116
|
}
|
144
|
-
|
145
117
|
const prevSibling = node.getPreviousSibling();
|
146
118
|
let text = node.getTextContent();
|
147
119
|
let currentNode = node;
|
148
120
|
let match;
|
149
|
-
|
150
121
|
if (lexical.$isTextNode(prevSibling)) {
|
151
122
|
const previousText = prevSibling.getTextContent();
|
152
123
|
const combinedText = previousText + text;
|
153
124
|
const prevMatch = getMatch(combinedText);
|
154
|
-
|
155
125
|
if (isTargetNode(prevSibling)) {
|
156
126
|
if (prevMatch === null || getMode(prevSibling) !== 0) {
|
157
127
|
replaceWithSimpleText(prevSibling);
|
158
128
|
return;
|
159
129
|
} else {
|
160
130
|
const diff = prevMatch.end - previousText.length;
|
161
|
-
|
162
131
|
if (diff > 0) {
|
163
132
|
const concatText = text.slice(0, diff);
|
164
133
|
const newTextContent = previousText + concatText;
|
165
134
|
prevSibling.select();
|
166
135
|
prevSibling.setTextContent(newTextContent);
|
167
|
-
|
168
136
|
if (diff === text.length) {
|
169
137
|
node.remove();
|
170
138
|
} else {
|
171
139
|
const remainingText = text.slice(diff);
|
172
140
|
node.setTextContent(remainingText);
|
173
141
|
}
|
174
|
-
|
175
142
|
return;
|
176
143
|
}
|
177
144
|
}
|
178
145
|
} else if (prevMatch === null || prevMatch.start < previousText.length) {
|
179
146
|
return;
|
180
147
|
}
|
181
|
-
}
|
182
|
-
|
148
|
+
}
|
183
149
|
|
150
|
+
// eslint-disable-next-line no-constant-condition
|
184
151
|
while (true) {
|
185
152
|
match = getMatch(text);
|
186
153
|
let nextText = match === null ? '' : text.slice(match.end);
|
187
154
|
text = nextText;
|
188
|
-
|
189
155
|
if (nextText === '') {
|
190
156
|
const nextSibling = currentNode.getNextSibling();
|
191
|
-
|
192
157
|
if (lexical.$isTextNode(nextSibling)) {
|
193
158
|
nextText = currentNode.getTextContent() + nextSibling.getTextContent();
|
194
159
|
const nextMatch = getMatch(nextText);
|
195
|
-
|
196
160
|
if (nextMatch === null) {
|
197
161
|
if (isTargetNode(nextSibling)) {
|
198
162
|
replaceWithSimpleText(nextSibling);
|
199
163
|
} else {
|
200
164
|
nextSibling.markDirty();
|
201
165
|
}
|
202
|
-
|
203
166
|
return;
|
204
167
|
} else if (nextMatch.start !== 0) {
|
205
168
|
return;
|
@@ -207,70 +170,56 @@ function registerLexicalTextEntity(editor, getMatch, targetNode, createNode) {
|
|
207
170
|
}
|
208
171
|
} else {
|
209
172
|
const nextMatch = getMatch(nextText);
|
210
|
-
|
211
173
|
if (nextMatch !== null && nextMatch.start === 0) {
|
212
174
|
return;
|
213
175
|
}
|
214
176
|
}
|
215
|
-
|
216
177
|
if (match === null) {
|
217
178
|
return;
|
218
179
|
}
|
219
|
-
|
220
180
|
if (match.start === 0 && lexical.$isTextNode(prevSibling) && prevSibling.isTextEntity()) {
|
221
181
|
continue;
|
222
182
|
}
|
223
|
-
|
224
183
|
let nodeToReplace;
|
225
|
-
|
226
184
|
if (match.start === 0) {
|
227
185
|
[nodeToReplace, currentNode] = currentNode.splitText(match.end);
|
228
186
|
} else {
|
229
187
|
[, nodeToReplace, currentNode] = currentNode.splitText(match.start, match.end);
|
230
188
|
}
|
231
|
-
|
232
189
|
const replacementNode = createNode(nodeToReplace);
|
233
190
|
nodeToReplace.replace(replacementNode);
|
234
|
-
|
235
191
|
if (currentNode == null) {
|
236
192
|
return;
|
237
193
|
}
|
238
194
|
}
|
239
195
|
};
|
240
|
-
|
241
196
|
const reverseNodeTransform = node => {
|
242
197
|
const text = node.getTextContent();
|
243
198
|
const match = getMatch(text);
|
244
|
-
|
245
199
|
if (match === null || match.start !== 0) {
|
246
200
|
replaceWithSimpleText(node);
|
247
201
|
return;
|
248
202
|
}
|
249
|
-
|
250
203
|
if (text.length > match.end) {
|
251
204
|
// This will split out the rest of the text as simple text
|
252
205
|
node.splitText(match.end);
|
253
206
|
return;
|
254
207
|
}
|
255
|
-
|
256
208
|
const prevSibling = node.getPreviousSibling();
|
257
|
-
|
258
209
|
if (lexical.$isTextNode(prevSibling) && prevSibling.isTextEntity()) {
|
259
210
|
replaceWithSimpleText(prevSibling);
|
260
211
|
replaceWithSimpleText(node);
|
261
212
|
}
|
262
|
-
|
263
213
|
const nextSibling = node.getNextSibling();
|
264
|
-
|
265
214
|
if (lexical.$isTextNode(nextSibling) && nextSibling.isTextEntity()) {
|
266
|
-
replaceWithSimpleText(nextSibling);
|
215
|
+
replaceWithSimpleText(nextSibling);
|
267
216
|
|
217
|
+
// This may have already been converted in the previous block
|
268
218
|
if (isTargetNode(node)) {
|
269
219
|
replaceWithSimpleText(node);
|
270
220
|
}
|
271
221
|
}
|
272
222
|
};
|
273
|
-
|
274
223
|
const removePlainTextTransform = editor.registerNodeTransform(lexical.TextNode, textNodeTransform);
|
275
224
|
const removeReverseNodeTransform = editor.registerNodeTransform(targetNode, reverseNodeTransform);
|
276
225
|
return [removePlainTextTransform, removeReverseNodeTransform];
|
package/package.json
CHANGED