dragon-editor 2.0.0-beta.1.4 → 2.0.0-beta.2
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/README.md +72 -135
- package/README_en.md +14 -62
- package/dist/module.json +1 -1
- package/dist/module.mjs +8 -0
- package/dist/runtime/core/components/SvgIcon.vue +30 -21
- package/dist/runtime/core/components/editor/ImageBlock.vue +174 -0
- package/dist/runtime/core/components/editor/TextBlock.vue +76 -31
- package/dist/runtime/core/components/icon/Accept.vue +5 -0
- package/dist/runtime/core/components/icon/ArrowDown.vue +3 -0
- package/dist/runtime/core/components/icon/ArrowUp.vue +3 -0
- package/dist/runtime/core/components/icon/Cancel.vue +5 -0
- package/dist/runtime/core/components/icon/Delete.vue +3 -0
- package/dist/runtime/core/style/common.css +260 -31
- package/dist/runtime/core/style/viewer.css +191 -0
- package/dist/runtime/core/utils/cursor.d.ts +1 -1
- package/dist/runtime/core/utils/cursor.mjs +16 -4
- package/dist/runtime/core/utils/element.mjs +8 -4
- package/dist/runtime/core/utils/index.d.ts +2 -3
- package/dist/runtime/core/utils/index.mjs +47 -6
- package/dist/runtime/core/utils/keyboard.d.ts +1 -1
- package/dist/runtime/core/utils/keyboard.mjs +264 -40
- package/dist/runtime/core/utils/style.d.ts +6 -2
- package/dist/runtime/core/utils/style.mjs +125 -30
- package/dist/runtime/shared/components/DragonEditor.vue +356 -157
- package/dist/runtime/shared/components/DragonEditorComment.vue +33 -11
- package/dist/runtime/shared/components/DragonEditorViewer.vue +28 -2
- package/package.json +1 -1
- package/dist/runtime/core/style/main.d.ts +0 -1
- package/dist/runtime/core/style/main.mjs +0 -24
|
@@ -23,7 +23,7 @@ function getNextNode($target, node) {
|
|
|
23
23
|
});
|
|
24
24
|
return childNode[idx + 1];
|
|
25
25
|
}
|
|
26
|
-
function warpStyleNode(node, startOffset, endOffset, className) {
|
|
26
|
+
function warpStyleNode({ node, startOffset, endOffset, className, url, tagName }) {
|
|
27
27
|
const text = node.textContent;
|
|
28
28
|
const textLength = text.length;
|
|
29
29
|
let startIdx = startOffset;
|
|
@@ -32,14 +32,23 @@ function warpStyleNode(node, startOffset, endOffset, className) {
|
|
|
32
32
|
startIdx = endOffset;
|
|
33
33
|
endIdx = startOffset;
|
|
34
34
|
}
|
|
35
|
-
return `${text.substring(0, startIdx)}
|
|
35
|
+
return `${text.substring(0, startIdx)}<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${className}">${text.substring(startIdx, endIdx)}</${tagName}>${text.substring(endIdx, textLength)}`;
|
|
36
36
|
}
|
|
37
|
-
function defaultDecorationMake(originData, $target, className) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
function defaultDecorationMake({ originData, $target, className, tagName = "span", url, parentCursorData }) {
|
|
38
|
+
let cursorData = getCursor();
|
|
39
|
+
if (cursorData.startNode === null) {
|
|
40
|
+
cursorData = parentCursorData;
|
|
41
|
+
}
|
|
42
|
+
let startNode = cursorData.startNode;
|
|
43
|
+
let endNode = cursorData.endNode;
|
|
41
44
|
if (startNode !== null) {
|
|
42
|
-
|
|
45
|
+
let editableElement = findEditableElement(startNode);
|
|
46
|
+
if (editableElement === null) {
|
|
47
|
+
cursorData = parentCursorData;
|
|
48
|
+
startNode = cursorData.startNode;
|
|
49
|
+
endNode = cursorData.endNode;
|
|
50
|
+
editableElement = findEditableElement(startNode);
|
|
51
|
+
}
|
|
43
52
|
if (cursorData.type === "Range") {
|
|
44
53
|
if (startNode === endNode) {
|
|
45
54
|
const parentNode = startNode.parentNode;
|
|
@@ -51,7 +60,14 @@ function defaultDecorationMake(originData, $target, className) {
|
|
|
51
60
|
}
|
|
52
61
|
if (parentNode === editableElement) {
|
|
53
62
|
const childNumber = findChildNumber(editableElement, startNode);
|
|
54
|
-
const wrpStructure = warpStyleNode(
|
|
63
|
+
const wrpStructure = warpStyleNode({
|
|
64
|
+
node: parentNode.childNodes[childNumber],
|
|
65
|
+
startOffset,
|
|
66
|
+
endOffset,
|
|
67
|
+
className,
|
|
68
|
+
tagName,
|
|
69
|
+
url
|
|
70
|
+
});
|
|
55
71
|
let htmlStructure = "";
|
|
56
72
|
parentNode.childNodes.forEach((child, count) => {
|
|
57
73
|
if (count === childNumber) {
|
|
@@ -74,6 +90,7 @@ function defaultDecorationMake(originData, $target, className) {
|
|
|
74
90
|
setCursor($cursorTarget, cursorLength);
|
|
75
91
|
}, 100);
|
|
76
92
|
} else {
|
|
93
|
+
const originTag = getTagName(parentNode);
|
|
77
94
|
const childNumber = findChildNumber(editableElement, parentNode);
|
|
78
95
|
const classList = [...parentNode.classList];
|
|
79
96
|
const text = parentNode.textContent;
|
|
@@ -88,9 +105,9 @@ function defaultDecorationMake(originData, $target, className) {
|
|
|
88
105
|
if (hasClassIdx > -1) {
|
|
89
106
|
const middleClassList = [...parentNode.classList];
|
|
90
107
|
middleClassList.splice(hasClassIdx, 1);
|
|
91
|
-
htmlStructure =
|
|
108
|
+
htmlStructure = `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${classList.join(" ")}">${text.substring(0, startOffset2)}</${originTag.name}><${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${middleClassList.join(" ")}">${text.substring(startOffset2, endOffset2)}</${tagName}><${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${classList.join(" ")}">${text.substring(endOffset2, text.length)}</${originTag.name}>`;
|
|
92
109
|
} else {
|
|
93
|
-
htmlStructure =
|
|
110
|
+
htmlStructure = `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${classList.join(" ")}">${text.substring(0, startOffset2)}</${originTag.name}><${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${classList.join(" ")} ${className}">${text.substring(startOffset2, endOffset2)}</${tagName}><${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${classList.join(" ")}">${text.substring(endOffset2, text.length)}</${originTag.name}>`;
|
|
94
111
|
}
|
|
95
112
|
parentNode.insertAdjacentHTML("afterend", htmlStructure);
|
|
96
113
|
parentNode.remove();
|
|
@@ -142,7 +159,7 @@ function defaultDecorationMake(originData, $target, className) {
|
|
|
142
159
|
const text = child.textContent;
|
|
143
160
|
if (count > startIdx && count < endIdx) {
|
|
144
161
|
if (type === "Text") {
|
|
145
|
-
htmlStructure +=
|
|
162
|
+
htmlStructure += `<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${className}">${child.textContent}</${tagName}>`;
|
|
146
163
|
} else {
|
|
147
164
|
if (hasClassName) {
|
|
148
165
|
if (child.classList.length === 1) {
|
|
@@ -158,41 +175,43 @@ function defaultDecorationMake(originData, $target, className) {
|
|
|
158
175
|
}
|
|
159
176
|
} else if (count === startIdx) {
|
|
160
177
|
if (type === "Text") {
|
|
161
|
-
htmlStructure += `${text.substring(0, startOffset)}
|
|
178
|
+
htmlStructure += `${text.substring(0, startOffset)}<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${className}">${text.substring(startOffset, text.length)}</${tagName}>`;
|
|
162
179
|
} else {
|
|
163
180
|
const childClassList = [...child.classList];
|
|
181
|
+
const originTag = getTagName(child);
|
|
164
182
|
if (hasClassName) {
|
|
165
183
|
if (childClassList.length === 1) {
|
|
166
|
-
htmlStructure +=
|
|
184
|
+
htmlStructure += `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${className}">${text.substring(0, startOffset)}</${originTag.name}>${text.substring(startOffset, text.length)}`;
|
|
167
185
|
} else {
|
|
168
186
|
const classIdx = childClassList.indexOf(className);
|
|
169
|
-
htmlStructure +=
|
|
187
|
+
htmlStructure += `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${childClassList.join(" ")}">${text.substring(0, startOffset)}</${originTag.name}>`;
|
|
170
188
|
childClassList.splice(classIdx, 1);
|
|
171
|
-
htmlStructure +=
|
|
189
|
+
htmlStructure += `<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${childClassList.join(" ")}">${text.substring(startOffset, text.length)}</${tagName}>`;
|
|
172
190
|
}
|
|
173
191
|
} else {
|
|
174
|
-
htmlStructure +=
|
|
175
|
-
htmlStructure +=
|
|
192
|
+
htmlStructure += `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${childClassList.join(" ")}">${text.substring(0, startOffset)}</${originTag.name}>`;
|
|
193
|
+
htmlStructure += `<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${childClassList.join(" ")} ${className}">${text.substring(startOffset, text.length)}</${tagName}>`;
|
|
176
194
|
}
|
|
177
195
|
}
|
|
178
196
|
} else if (count === endIdx) {
|
|
179
197
|
if (type === "Text") {
|
|
180
|
-
htmlStructure +=
|
|
198
|
+
htmlStructure += `<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${className}">${text.substring(0, endOffset)}</${tagName}>${text.substring(endOffset, text.length)}`;
|
|
181
199
|
} else {
|
|
182
200
|
const childClassList = [...child.classList];
|
|
201
|
+
const originTag = getTagName(child);
|
|
183
202
|
if (hasClassName) {
|
|
184
203
|
if (childClassList.length === 1) {
|
|
185
|
-
htmlStructure += `${text.substring(0, endOffset)}
|
|
204
|
+
htmlStructure += `${text.substring(0, endOffset)}<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${className}">${text.substring(endOffset, text.length)}</${originTag.name}>`;
|
|
186
205
|
} else {
|
|
187
206
|
const classIdx = childClassList.indexOf(className);
|
|
188
207
|
const newClassList = [...child.classList];
|
|
189
208
|
newClassList.splice(classIdx, 1);
|
|
190
|
-
htmlStructure +=
|
|
191
|
-
htmlStructure +=
|
|
209
|
+
htmlStructure += `<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${newClassList.join(" ")}">${text.substring(0, endOffset)}</${tagName}>`;
|
|
210
|
+
htmlStructure += `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${childClassList.join(" ")}">${text.substring(endOffset, text.length)}</${originTag.name}>`;
|
|
192
211
|
}
|
|
193
212
|
} else {
|
|
194
|
-
htmlStructure +=
|
|
195
|
-
htmlStructure +=
|
|
213
|
+
htmlStructure += `<${tagName} ${url ? `href="${url}" rel="nofollow"` : ""} class="${childClassList.join(" ")} ${className}">${text.substring(0, endOffset)}</${tagName}>`;
|
|
214
|
+
htmlStructure += `<${originTag.name} ${originTag.href ? `href="${originTag.href}" rel="nofollow"` : ""} class="${childClassList.join(" ")}">${text.substring(endOffset, text.length)}</${originTag.name}>`;
|
|
196
215
|
}
|
|
197
216
|
}
|
|
198
217
|
} else {
|
|
@@ -233,9 +252,15 @@ function defaultDecorationMake(originData, $target, className) {
|
|
|
233
252
|
}
|
|
234
253
|
return originData;
|
|
235
254
|
}
|
|
236
|
-
export function styleSettings(
|
|
255
|
+
export function styleSettings({
|
|
256
|
+
kind,
|
|
257
|
+
blockData,
|
|
258
|
+
$target,
|
|
259
|
+
url,
|
|
260
|
+
cursorData
|
|
261
|
+
}) {
|
|
237
262
|
let rawData = blockData;
|
|
238
|
-
switch (
|
|
263
|
+
switch (kind) {
|
|
239
264
|
case "alignLeft":
|
|
240
265
|
rawData.classList = arrangementAlignClass(rawData.classList, "d-align-left");
|
|
241
266
|
break;
|
|
@@ -246,19 +271,89 @@ export function styleSettings(type, blockData, $target) {
|
|
|
246
271
|
rawData.classList = arrangementAlignClass(rawData.classList, "d-align-right");
|
|
247
272
|
break;
|
|
248
273
|
case "decorationBold":
|
|
249
|
-
rawData = defaultDecorationMake(
|
|
274
|
+
rawData = defaultDecorationMake(
|
|
275
|
+
{
|
|
276
|
+
originData: rawData,
|
|
277
|
+
$target,
|
|
278
|
+
className: "d-deco-bold",
|
|
279
|
+
parentCursorData: cursorData
|
|
280
|
+
}
|
|
281
|
+
);
|
|
250
282
|
break;
|
|
251
283
|
case "decorationItalic":
|
|
252
|
-
rawData = defaultDecorationMake(
|
|
284
|
+
rawData = defaultDecorationMake(
|
|
285
|
+
{
|
|
286
|
+
originData: rawData,
|
|
287
|
+
$target,
|
|
288
|
+
className: "d-deco-italic",
|
|
289
|
+
parentCursorData: cursorData
|
|
290
|
+
}
|
|
291
|
+
);
|
|
253
292
|
break;
|
|
254
293
|
case "decorationUnderline":
|
|
255
|
-
rawData = defaultDecorationMake(
|
|
294
|
+
rawData = defaultDecorationMake(
|
|
295
|
+
{
|
|
296
|
+
originData: rawData,
|
|
297
|
+
$target,
|
|
298
|
+
className: "d-deco-underline",
|
|
299
|
+
parentCursorData: cursorData
|
|
300
|
+
}
|
|
301
|
+
);
|
|
256
302
|
break;
|
|
257
303
|
case "decorationStrikethrough":
|
|
258
|
-
rawData = defaultDecorationMake(
|
|
304
|
+
rawData = defaultDecorationMake(
|
|
305
|
+
{
|
|
306
|
+
originData: rawData,
|
|
307
|
+
$target,
|
|
308
|
+
className: "d-deco-through",
|
|
309
|
+
parentCursorData: cursorData
|
|
310
|
+
}
|
|
311
|
+
);
|
|
312
|
+
break;
|
|
313
|
+
case "decorationCode":
|
|
314
|
+
rawData = defaultDecorationMake({
|
|
315
|
+
originData: rawData,
|
|
316
|
+
$target,
|
|
317
|
+
className: "d-deco-code",
|
|
318
|
+
tagName: "code",
|
|
319
|
+
parentCursorData: cursorData
|
|
320
|
+
});
|
|
321
|
+
break;
|
|
322
|
+
case "decorationLink":
|
|
323
|
+
rawData = defaultDecorationMake({
|
|
324
|
+
originData: rawData,
|
|
325
|
+
$target,
|
|
326
|
+
className: "d-deco-link",
|
|
327
|
+
tagName: "a",
|
|
328
|
+
url,
|
|
329
|
+
parentCursorData: cursorData
|
|
330
|
+
});
|
|
259
331
|
break;
|
|
260
332
|
default:
|
|
261
|
-
rawData = defaultDecorationMake(
|
|
333
|
+
rawData = defaultDecorationMake(
|
|
334
|
+
{
|
|
335
|
+
originData: rawData,
|
|
336
|
+
$target,
|
|
337
|
+
className: kind,
|
|
338
|
+
parentCursorData: cursorData
|
|
339
|
+
}
|
|
340
|
+
);
|
|
262
341
|
}
|
|
263
342
|
return rawData;
|
|
264
343
|
}
|
|
344
|
+
export function getTagName(node) {
|
|
345
|
+
const value = {
|
|
346
|
+
name: "span",
|
|
347
|
+
href: null
|
|
348
|
+
};
|
|
349
|
+
switch (node.tagName) {
|
|
350
|
+
case "CODE":
|
|
351
|
+
value.name = "code";
|
|
352
|
+
break;
|
|
353
|
+
case "A":
|
|
354
|
+
value.name = "a";
|
|
355
|
+
value.href = node.getAttribute("href");
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
return value;
|
|
359
|
+
}
|