dragon-editor 2.1.2 → 3.0.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 (58) hide show
  1. package/README.md +82 -96
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +10 -12
  4. package/dist/runtime/components/DragonEditor.vue +457 -0
  5. package/dist/runtime/components/DragonEditorViewer.vue +228 -0
  6. package/dist/runtime/plugin.d.ts +2 -0
  7. package/dist/runtime/plugin.mjs +10 -0
  8. package/dist/runtime/scss/editor.css +261 -0
  9. package/dist/runtime/scss/viewer.css +198 -0
  10. package/dist/runtime/store.d.ts +7 -0
  11. package/dist/runtime/store.mjs +27 -0
  12. package/dist/runtime/type.d.ts +24 -0
  13. package/dist/runtime/utils/block.d.ts +9 -0
  14. package/dist/runtime/utils/block.mjs +70 -0
  15. package/dist/runtime/utils/convertor.d.ts +2 -0
  16. package/dist/runtime/utils/convertor.mjs +86 -0
  17. package/dist/runtime/utils/cursor.d.ts +6 -0
  18. package/dist/runtime/utils/cursor.mjs +132 -0
  19. package/dist/runtime/utils/element.d.ts +3 -0
  20. package/dist/runtime/utils/element.mjs +39 -0
  21. package/dist/runtime/utils/keyboardEvent.d.ts +10 -0
  22. package/dist/runtime/utils/keyboardEvent.mjs +781 -0
  23. package/dist/runtime/utils/style.d.ts +1 -0
  24. package/dist/runtime/utils/style.mjs +330 -0
  25. package/dist/runtime/utils/ui.d.ts +1 -0
  26. package/dist/runtime/utils/ui.mjs +35 -0
  27. package/package.json +10 -4
  28. package/README_en.md +0 -30
  29. package/dist/runtime/core/components/SvgIcon.d.ts +0 -10
  30. package/dist/runtime/core/components/SvgIcon.mjs +0 -98
  31. package/dist/runtime/core/components/editor/ImageBlock.vue +0 -175
  32. package/dist/runtime/core/components/editor/OlBlock.vue +0 -162
  33. package/dist/runtime/core/components/editor/TextBlock.vue +0 -172
  34. package/dist/runtime/core/components/editor/UlBlock.vue +0 -162
  35. package/dist/runtime/core/style/common.css +0 -496
  36. package/dist/runtime/core/style/viewer.css +0 -205
  37. package/dist/runtime/core/utils/converter.d.ts +0 -2
  38. package/dist/runtime/core/utils/converter.mjs +0 -90
  39. package/dist/runtime/core/utils/cursor.d.ts +0 -4
  40. package/dist/runtime/core/utils/cursor.mjs +0 -84
  41. package/dist/runtime/core/utils/element.d.ts +0 -3
  42. package/dist/runtime/core/utils/element.mjs +0 -40
  43. package/dist/runtime/core/utils/global.d.ts +0 -3
  44. package/dist/runtime/core/utils/global.mjs +0 -81
  45. package/dist/runtime/core/utils/index.d.ts +0 -7
  46. package/dist/runtime/core/utils/index.mjs +0 -7
  47. package/dist/runtime/core/utils/keyboard.d.ts +0 -6
  48. package/dist/runtime/core/utils/keyboard.mjs +0 -565
  49. package/dist/runtime/core/utils/style.d.ts +0 -6
  50. package/dist/runtime/core/utils/style.mjs +0 -374
  51. package/dist/runtime/core/utils/ui.d.ts +0 -4
  52. package/dist/runtime/core/utils/ui.mjs +0 -13
  53. package/dist/runtime/shared/components/DragonEditor.vue +0 -695
  54. package/dist/runtime/shared/components/DragonEditorComment.vue +0 -172
  55. package/dist/runtime/shared/components/DragonEditorNew.d.ts +0 -16
  56. package/dist/runtime/shared/components/DragonEditorNew.mjs +0 -62
  57. package/dist/runtime/shared/components/DragonEditorViewer.d.ts +0 -14
  58. package/dist/runtime/shared/components/DragonEditorViewer.mjs +0 -15
@@ -0,0 +1,261 @@
1
+ @charset "UTF-8";
2
+ .dragon-editor,
3
+ .dragon-editor-viewer {
4
+ /**
5
+ * Reset style start
6
+ */
7
+ }
8
+ .dragon-editor h1,
9
+ .dragon-editor h2,
10
+ .dragon-editor h3,
11
+ .dragon-editor h4,
12
+ .dragon-editor h5,
13
+ .dragon-editor h6,
14
+ .dragon-editor p,
15
+ .dragon-editor blockquote,
16
+ .dragon-editor pre,
17
+ .dragon-editor dl,
18
+ .dragon-editor dd,
19
+ .dragon-editor ol,
20
+ .dragon-editor ul,
21
+ .dragon-editor fieldset,
22
+ .dragon-editor legend,
23
+ .dragon-editor figure,
24
+ .dragon-editor menu,
25
+ .dragon-editor-viewer h1,
26
+ .dragon-editor-viewer h2,
27
+ .dragon-editor-viewer h3,
28
+ .dragon-editor-viewer h4,
29
+ .dragon-editor-viewer h5,
30
+ .dragon-editor-viewer h6,
31
+ .dragon-editor-viewer p,
32
+ .dragon-editor-viewer blockquote,
33
+ .dragon-editor-viewer pre,
34
+ .dragon-editor-viewer dl,
35
+ .dragon-editor-viewer dd,
36
+ .dragon-editor-viewer ol,
37
+ .dragon-editor-viewer ul,
38
+ .dragon-editor-viewer fieldset,
39
+ .dragon-editor-viewer legend,
40
+ .dragon-editor-viewer figure,
41
+ .dragon-editor-viewer menu {
42
+ margin: 0;
43
+ padding: 0;
44
+ border: 0;
45
+ }
46
+ .dragon-editor table,
47
+ .dragon-editor th,
48
+ .dragon-editor td,
49
+ .dragon-editor-viewer table,
50
+ .dragon-editor-viewer th,
51
+ .dragon-editor-viewer td {
52
+ border-spacing: 0;
53
+ border-collapse: collapse;
54
+ }
55
+ .dragon-editor ol,
56
+ .dragon-editor ul,
57
+ .dragon-editor li,
58
+ .dragon-editor-viewer ol,
59
+ .dragon-editor-viewer ul,
60
+ .dragon-editor-viewer li {
61
+ list-style: none;
62
+ }
63
+ .dragon-editor h1,
64
+ .dragon-editor h2,
65
+ .dragon-editor h3,
66
+ .dragon-editor h4,
67
+ .dragon-editor h5,
68
+ .dragon-editor h6,
69
+ .dragon-editor-viewer h1,
70
+ .dragon-editor-viewer h2,
71
+ .dragon-editor-viewer h3,
72
+ .dragon-editor-viewer h4,
73
+ .dragon-editor-viewer h5,
74
+ .dragon-editor-viewer h6 {
75
+ font-size: 1em;
76
+ font-weight: normal;
77
+ }
78
+ .dragon-editor input,
79
+ .dragon-editor textarea,
80
+ .dragon-editor select,
81
+ .dragon-editor button,
82
+ .dragon-editor-viewer input,
83
+ .dragon-editor-viewer textarea,
84
+ .dragon-editor-viewer select,
85
+ .dragon-editor-viewer button {
86
+ margin: 0;
87
+ padding: 0;
88
+ border-radius: 0;
89
+ outline: 0;
90
+ vertical-align: middle;
91
+ }
92
+ .dragon-editor a,
93
+ .dragon-editor button,
94
+ .dragon-editor input[type=submit],
95
+ .dragon-editor input[type=button],
96
+ .dragon-editor input[type=reset],
97
+ .dragon-editor-viewer a,
98
+ .dragon-editor-viewer button,
99
+ .dragon-editor-viewer input[type=submit],
100
+ .dragon-editor-viewer input[type=button],
101
+ .dragon-editor-viewer input[type=reset] {
102
+ border: 0;
103
+ background: transparent;
104
+ cursor: pointer;
105
+ }
106
+ .dragon-editor img,
107
+ .dragon-editor-viewer img {
108
+ border: 0;
109
+ vertical-align: top;
110
+ }
111
+ .dragon-editor .de-block[data-depth="1"],
112
+ .dragon-editor-viewer .de-block[data-depth="1"] {
113
+ padding-left: 30px;
114
+ }
115
+ .dragon-editor .de-block[data-depth="2"],
116
+ .dragon-editor-viewer .de-block[data-depth="2"] {
117
+ padding-left: 60px;
118
+ }
119
+ .dragon-editor .de-block[data-depth="3"],
120
+ .dragon-editor-viewer .de-block[data-depth="3"] {
121
+ padding-left: 90px;
122
+ }
123
+ .dragon-editor .de-block[data-depth="4"],
124
+ .dragon-editor-viewer .de-block[data-depth="4"] {
125
+ padding-left: 120px;
126
+ }
127
+ .dragon-editor .de-block[data-depth="5"],
128
+ .dragon-editor-viewer .de-block[data-depth="5"] {
129
+ padding-left: 150px;
130
+ }
131
+
132
+ /**
133
+ * 노드 스타일
134
+ */
135
+ .dragon-editor {
136
+ position: relative;
137
+ border: 1px solid #ccc;
138
+ }
139
+ .dragon-editor.--hasMenu {
140
+ padding-top: 38px;
141
+ }
142
+ .dragon-editor .de-body {
143
+ display: grid;
144
+ gap: 4px;
145
+ padding: 20px;
146
+ line-height: 1.6;
147
+ }
148
+ .dragon-editor .de-control-bar {
149
+ position: absolute;
150
+ top: 0;
151
+ left: 0;
152
+ right: 0;
153
+ height: 38px;
154
+ border-bottom: 1px solid #ccc;
155
+ }
156
+ .dragon-editor .de-control-bar .de-menu {
157
+ min-width: 38px;
158
+ height: 38px;
159
+ padding: 0 8px;
160
+ border-right: 1px solid #ccc;
161
+ box-sizing: border-box;
162
+ }
163
+ .dragon-editor .de-control-bar .de-menu.--lastchild {
164
+ border-right: 0;
165
+ }
166
+ .dragon-editor .de-control-bar .de-block-menu-area {
167
+ display: none;
168
+ position: absolute;
169
+ top: 39px;
170
+ left: 0;
171
+ width: 120px;
172
+ background: #fff;
173
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.25);
174
+ z-index: 1000;
175
+ }
176
+ .dragon-editor .de-control-bar .de-block-menu-area.--active {
177
+ display: block;
178
+ }
179
+ .dragon-editor .de-control-bar .de-block-menu-area .de-list {
180
+ display: flex;
181
+ flex-direction: column;
182
+ gap: 5px;
183
+ padding: 5px;
184
+ }
185
+ .dragon-editor .de-control-bar .de-block-menu-area .de-add-block {
186
+ line-height: 1.6;
187
+ }
188
+ .dragon-editor .de-text-block {
189
+ min-height: 1.6em;
190
+ outline: 0;
191
+ }
192
+ .dragon-editor .de-text-block:empty:hover::before, .dragon-editor .de-text-block:empty:focus::before {
193
+ display: inline;
194
+ content: "Type a paragraph";
195
+ color: #ccc;
196
+ cursor: text;
197
+ }
198
+ .dragon-editor .de-heading-block {
199
+ min-height: 1.6em;
200
+ outline: 0;
201
+ }
202
+ .dragon-editor .de-heading-block[data-level="1"] {
203
+ font-size: 2em;
204
+ }
205
+ .dragon-editor .de-heading-block[data-level="2"] {
206
+ font-size: 1.5em;
207
+ }
208
+ .dragon-editor .de-heading-block[data-level="3"] {
209
+ font-size: 1.17em;
210
+ }
211
+ .dragon-editor .de-heading-block:empty:hover::before, .dragon-editor .de-heading-block:empty:focus::before {
212
+ display: inline;
213
+ content: "Type a Heading";
214
+ color: #ccc;
215
+ cursor: text;
216
+ }
217
+ .dragon-editor .de-list-block {
218
+ display: flex;
219
+ flex-direction: column;
220
+ row-gap: 4px;
221
+ padding-left: 24px;
222
+ list-style: disc;
223
+ }
224
+ .dragon-editor .de-list-block .de-item {
225
+ min-height: 1.6em;
226
+ outline: 0;
227
+ list-style: inherit;
228
+ }
229
+ .dragon-editor .de-list-block .de-item:empty:hover::before, .dragon-editor .de-list-block .de-item:empty:focus::before {
230
+ display: inline;
231
+ content: "Type a list item";
232
+ color: #ccc;
233
+ cursor: text;
234
+ }
235
+ .dragon-editor ol.de-list-block {
236
+ list-style: decimal;
237
+ }
238
+ .dragon-editor .de-bold {
239
+ font-weight: 700;
240
+ }
241
+ .dragon-editor .de-italic {
242
+ font-style: italic;
243
+ }
244
+ .dragon-editor .de-underline {
245
+ text-decoration: underline;
246
+ }
247
+ .dragon-editor .de-underline.de-strikethrough {
248
+ text-decoration: underline line-through;
249
+ }
250
+ .dragon-editor .de-strikethrough {
251
+ text-decoration: line-through;
252
+ }
253
+ .dragon-editor .de-strikethrough.de-underline {
254
+ text-decoration: line-through underline;
255
+ }
256
+ .dragon-editor .de-code {
257
+ padding: 2px 4px;
258
+ background: #f1f1f1;
259
+ color: #ff0000;
260
+ border-radius: 5px;
261
+ }
@@ -0,0 +1,198 @@
1
+ @charset "UTF-8";
2
+ .dragon-editor,
3
+ .dragon-editor-viewer {
4
+ /**
5
+ * Reset style start
6
+ */
7
+ }
8
+ .dragon-editor h1,
9
+ .dragon-editor h2,
10
+ .dragon-editor h3,
11
+ .dragon-editor h4,
12
+ .dragon-editor h5,
13
+ .dragon-editor h6,
14
+ .dragon-editor p,
15
+ .dragon-editor blockquote,
16
+ .dragon-editor pre,
17
+ .dragon-editor dl,
18
+ .dragon-editor dd,
19
+ .dragon-editor ol,
20
+ .dragon-editor ul,
21
+ .dragon-editor fieldset,
22
+ .dragon-editor legend,
23
+ .dragon-editor figure,
24
+ .dragon-editor menu,
25
+ .dragon-editor-viewer h1,
26
+ .dragon-editor-viewer h2,
27
+ .dragon-editor-viewer h3,
28
+ .dragon-editor-viewer h4,
29
+ .dragon-editor-viewer h5,
30
+ .dragon-editor-viewer h6,
31
+ .dragon-editor-viewer p,
32
+ .dragon-editor-viewer blockquote,
33
+ .dragon-editor-viewer pre,
34
+ .dragon-editor-viewer dl,
35
+ .dragon-editor-viewer dd,
36
+ .dragon-editor-viewer ol,
37
+ .dragon-editor-viewer ul,
38
+ .dragon-editor-viewer fieldset,
39
+ .dragon-editor-viewer legend,
40
+ .dragon-editor-viewer figure,
41
+ .dragon-editor-viewer menu {
42
+ margin: 0;
43
+ padding: 0;
44
+ border: 0;
45
+ }
46
+ .dragon-editor table,
47
+ .dragon-editor th,
48
+ .dragon-editor td,
49
+ .dragon-editor-viewer table,
50
+ .dragon-editor-viewer th,
51
+ .dragon-editor-viewer td {
52
+ border-spacing: 0;
53
+ border-collapse: collapse;
54
+ }
55
+ .dragon-editor ol,
56
+ .dragon-editor ul,
57
+ .dragon-editor li,
58
+ .dragon-editor-viewer ol,
59
+ .dragon-editor-viewer ul,
60
+ .dragon-editor-viewer li {
61
+ list-style: none;
62
+ }
63
+ .dragon-editor h1,
64
+ .dragon-editor h2,
65
+ .dragon-editor h3,
66
+ .dragon-editor h4,
67
+ .dragon-editor h5,
68
+ .dragon-editor h6,
69
+ .dragon-editor-viewer h1,
70
+ .dragon-editor-viewer h2,
71
+ .dragon-editor-viewer h3,
72
+ .dragon-editor-viewer h4,
73
+ .dragon-editor-viewer h5,
74
+ .dragon-editor-viewer h6 {
75
+ font-size: 1em;
76
+ font-weight: normal;
77
+ }
78
+ .dragon-editor input,
79
+ .dragon-editor textarea,
80
+ .dragon-editor select,
81
+ .dragon-editor button,
82
+ .dragon-editor-viewer input,
83
+ .dragon-editor-viewer textarea,
84
+ .dragon-editor-viewer select,
85
+ .dragon-editor-viewer button {
86
+ margin: 0;
87
+ padding: 0;
88
+ border-radius: 0;
89
+ outline: 0;
90
+ vertical-align: middle;
91
+ }
92
+ .dragon-editor a,
93
+ .dragon-editor button,
94
+ .dragon-editor input[type=submit],
95
+ .dragon-editor input[type=button],
96
+ .dragon-editor input[type=reset],
97
+ .dragon-editor-viewer a,
98
+ .dragon-editor-viewer button,
99
+ .dragon-editor-viewer input[type=submit],
100
+ .dragon-editor-viewer input[type=button],
101
+ .dragon-editor-viewer input[type=reset] {
102
+ border: 0;
103
+ background: transparent;
104
+ cursor: pointer;
105
+ }
106
+ .dragon-editor img,
107
+ .dragon-editor-viewer img {
108
+ border: 0;
109
+ vertical-align: top;
110
+ }
111
+ .dragon-editor .de-block[data-depth="1"],
112
+ .dragon-editor-viewer .de-block[data-depth="1"] {
113
+ padding-left: 30px;
114
+ }
115
+ .dragon-editor .de-block[data-depth="2"],
116
+ .dragon-editor-viewer .de-block[data-depth="2"] {
117
+ padding-left: 60px;
118
+ }
119
+ .dragon-editor .de-block[data-depth="3"],
120
+ .dragon-editor-viewer .de-block[data-depth="3"] {
121
+ padding-left: 90px;
122
+ }
123
+ .dragon-editor .de-block[data-depth="4"],
124
+ .dragon-editor-viewer .de-block[data-depth="4"] {
125
+ padding-left: 120px;
126
+ }
127
+ .dragon-editor .de-block[data-depth="5"],
128
+ .dragon-editor-viewer .de-block[data-depth="5"] {
129
+ padding-left: 150px;
130
+ }
131
+
132
+ /**
133
+ * 노드 스타일
134
+ */
135
+ .dragon-editor-viewer {
136
+ display: grid;
137
+ gap: 4px;
138
+ width: 100%;
139
+ height: 100%;
140
+ padding: 20px;
141
+ line-height: 1.6;
142
+ }
143
+ .dragon-editor-viewer .de-text-block {
144
+ min-height: 1.6em;
145
+ outline: 0;
146
+ }
147
+ .dragon-editor-viewer .de-heading-block {
148
+ min-height: 1.6em;
149
+ outline: 0;
150
+ }
151
+ .dragon-editor-viewer .de-heading-block[data-level="1"] {
152
+ font-size: 2em;
153
+ }
154
+ .dragon-editor-viewer .de-heading-block[data-level="2"] {
155
+ font-size: 1.5em;
156
+ }
157
+ .dragon-editor-viewer .de-heading-block[data-level="3"] {
158
+ font-size: 1.17em;
159
+ }
160
+ .dragon-editor-viewer .de-list-block {
161
+ display: flex;
162
+ flex-direction: column;
163
+ row-gap: 4px;
164
+ padding-left: 24px;
165
+ list-style: disc;
166
+ }
167
+ .dragon-editor-viewer .de-list-block .de-item {
168
+ min-height: 1.6em;
169
+ outline: 0;
170
+ list-style: inherit;
171
+ }
172
+ .dragon-editor-viewer ol.de-list-block {
173
+ list-style: decimal;
174
+ }
175
+ .dragon-editor-viewer .de-bold {
176
+ font-weight: 700;
177
+ }
178
+ .dragon-editor-viewer .de-italic {
179
+ font-style: italic;
180
+ }
181
+ .dragon-editor-viewer .de-underline {
182
+ text-decoration: underline;
183
+ }
184
+ .dragon-editor-viewer .de-underline.de-strikethrough {
185
+ text-decoration: underline line-through;
186
+ }
187
+ .dragon-editor-viewer .de-strikethrough {
188
+ text-decoration: line-through;
189
+ }
190
+ .dragon-editor-viewer .de-strikethrough.de-underline {
191
+ text-decoration: line-through underline;
192
+ }
193
+ .dragon-editor-viewer .de-code {
194
+ padding: 2px 4px;
195
+ background: #f1f1f1;
196
+ color: #ff0000;
197
+ border-radius: 5px;
198
+ }
@@ -0,0 +1,7 @@
1
+ import "./type.d.ts";
2
+ export declare const useEditorStore: import("pinia").StoreDefinition<"editorStore", EditorStore, {}, {
3
+ setWrapElement(value: HTMLDivElement): void;
4
+ setContentElement(value: HTMLDivElement): void;
5
+ setParentWrapElement(value: HTMLElement | Window): void;
6
+ setCursorData(data: DEditorCursor): void;
7
+ }>;
@@ -0,0 +1,27 @@
1
+ import { defineStore } from "pinia";
2
+ import "./type.d.ts";
3
+ export const useEditorStore = defineStore("editorStore", {
4
+ state: () => ({
5
+ cursorData: null,
6
+ message: {
7
+ linkTextNoStyle: "Link text can't set any style."
8
+ },
9
+ $editor: null,
10
+ $content: null,
11
+ $parentWrap: null
12
+ }),
13
+ actions: {
14
+ setWrapElement(value) {
15
+ this.$editor = value;
16
+ },
17
+ setContentElement(value) {
18
+ this.$content = value;
19
+ },
20
+ setParentWrapElement(value) {
21
+ this.$parentWrap = value;
22
+ },
23
+ setCursorData(data) {
24
+ this.cursorData = data;
25
+ }
26
+ }
27
+ });
@@ -0,0 +1,24 @@
1
+ interface EditorStore {
2
+ cursorData: DEditorCursor | null;
3
+ message: { [key: string]: string };
4
+ $editor: HTMLDivElement | null;
5
+ $content: HTMLDivElement | null;
6
+ $parentWrap: HTMLElement | Window | null;
7
+ }
8
+
9
+ interface DEditorCursor {
10
+ type: "Range" | "Caret" | "None";
11
+ startNode: Node;
12
+ startOffset: number;
13
+ endNode: Node;
14
+ endOffset: number;
15
+ }
16
+
17
+ interface DEArrangeCursorData {
18
+ startNode: Node;
19
+ startNodeIdx: number;
20
+ startOffset: number;
21
+ endNode: Node;
22
+ endNodeIdx: number;
23
+ endOffset: number;
24
+ }
@@ -0,0 +1,9 @@
1
+ export declare function _getBlockType(element: HTMLElement): {
2
+ $element: Element;
3
+ type: string;
4
+ };
5
+ export declare function _createTextBlock(content?: string): HTMLParagraphElement;
6
+ export declare function _createHeadingBlock(type: string, content?: string): HTMLElement;
7
+ export declare function _createListBlock(type: string, content?: string[], pattern?: string): HTMLElement;
8
+ export declare function _createListItemBlock(content?: string): HTMLLIElement;
9
+ export declare function generateId(): string;
@@ -0,0 +1,70 @@
1
+ export function _getBlockType(element) {
2
+ const $block = element.closest(".de-block");
3
+ let typeName;
4
+ switch (true) {
5
+ case $block.classList.contains("de-text-block"):
6
+ typeName = "text";
7
+ break;
8
+ case $block.classList.contains("de-heading-block"):
9
+ typeName = "heading";
10
+ break;
11
+ case $block.classList.contains("de-list-block"):
12
+ typeName = "list";
13
+ break;
14
+ default:
15
+ typeName = "other";
16
+ }
17
+ return {
18
+ $element: $block,
19
+ type: typeName
20
+ };
21
+ }
22
+ export function _createTextBlock(content = "") {
23
+ const $paragraph = document.createElement("p");
24
+ $paragraph.classList.add("de-block", "de-text-block");
25
+ $paragraph.setAttribute("contenteditable", "true");
26
+ if (content !== "") {
27
+ $paragraph.innerHTML = content;
28
+ }
29
+ return $paragraph;
30
+ }
31
+ export function _createHeadingBlock(type, content = "") {
32
+ const level = parseInt(type.replace("heading", ""));
33
+ const $headingBlock = document.createElement(`h${level}`);
34
+ $headingBlock.classList.add("de-block", "de-heading-block");
35
+ $headingBlock.id = generateId();
36
+ $headingBlock.dataset["level"] = String(level);
37
+ $headingBlock.setAttribute("contenteditable", "true");
38
+ if (content !== "") {
39
+ $headingBlock.innerHTML = content;
40
+ }
41
+ return $headingBlock;
42
+ }
43
+ export function _createListBlock(type, content = [""], pattern) {
44
+ const $block = document.createElement(type);
45
+ $block.classList.add("de-block", "de-list-block");
46
+ if (type === "ol") {
47
+ $block.type = pattern ?? "1";
48
+ }
49
+ content.forEach((text) => {
50
+ $block.appendChild(_createListItemBlock(text));
51
+ });
52
+ return $block;
53
+ }
54
+ export function _createListItemBlock(content = "") {
55
+ const $li = document.createElement("li");
56
+ $li.classList.add("de-item");
57
+ $li.setAttribute("contenteditable", "true");
58
+ if (content !== "") {
59
+ $li.innerHTML = content;
60
+ }
61
+ return $li;
62
+ }
63
+ export function generateId() {
64
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
65
+ let str = "";
66
+ for (let i = 0; i < 6; i++) {
67
+ str += chars.charAt(Math.floor(Math.random() * chars.length));
68
+ }
69
+ return str;
70
+ }
@@ -0,0 +1,2 @@
1
+ export declare function _getContentData($content: HTMLDivElement): any[];
2
+ export declare function _setContentData(data: any[], store: any): void;
@@ -0,0 +1,86 @@
1
+ import { _createTextBlock, _createHeadingBlock, _createListBlock } from "./block.mjs";
2
+ export function _getContentData($content) {
3
+ const childList = $content.children;
4
+ const data = [];
5
+ [...childList].forEach(($child) => {
6
+ const tagName = $child.tagName;
7
+ switch (tagName) {
8
+ case "P":
9
+ data.push(converteParagraphToData($child));
10
+ break;
11
+ case "H1":
12
+ data.push(converteHeadingToData($child, 1));
13
+ break;
14
+ case "H2":
15
+ data.push(converteHeadingToData($child, 2));
16
+ break;
17
+ case "H3":
18
+ data.push(converteHeadingToData($child, 3));
19
+ break;
20
+ case "UL":
21
+ data.push(converteUListToData($child));
22
+ break;
23
+ case "OL":
24
+ data.push(converteOListToData($child));
25
+ break;
26
+ case "PRE":
27
+ break;
28
+ case "DIV":
29
+ break;
30
+ }
31
+ });
32
+ return data;
33
+ }
34
+ export function _setContentData(data, store) {
35
+ const childList = [];
36
+ data.forEach((item) => {
37
+ switch (item.type) {
38
+ case "text":
39
+ childList.push(_createTextBlock(item.textContent));
40
+ break;
41
+ case "heading":
42
+ childList.push(_createHeadingBlock(`heading${item.level}`, item.textContent));
43
+ break;
44
+ case "ul":
45
+ childList.push(_createListBlock("ul", item.child));
46
+ break;
47
+ case "ol":
48
+ childList.push(_createListBlock("ol", item.child, item.pattern));
49
+ break;
50
+ case "":
51
+ break;
52
+ }
53
+ });
54
+ store.$content.replaceChildren(...childList);
55
+ }
56
+ function converteParagraphToData($child) {
57
+ return {
58
+ type: "text",
59
+ textContent: $child.innerHTML
60
+ };
61
+ }
62
+ function converteHeadingToData($child, level) {
63
+ return {
64
+ type: "heading",
65
+ level,
66
+ id: $child.id,
67
+ textContent: $child.innerHTML
68
+ };
69
+ }
70
+ function converteUListToData($child) {
71
+ return {
72
+ type: "ul",
73
+ child: [...$child.children].map(($li) => {
74
+ return $li.innerHTML;
75
+ })
76
+ };
77
+ }
78
+ function converteOListToData($child) {
79
+ return {
80
+ type: "ol",
81
+ pattern: $child.type,
82
+ child: [...$child.children].map(($li) => {
83
+ return $li.innerHTML;
84
+ })
85
+ };
86
+ }
@@ -0,0 +1,6 @@
1
+ import "../type.d.ts";
2
+ export declare function _setCursorData(store: any): void;
3
+ export declare function _setCursor($target: Node, startIdx: number): void;
4
+ export declare function _setRangeCursor($startTarget: Element, $endTarget: Element, startIdx: number, endIdx: number): void;
5
+ export declare function _clenupCursor(store: any): void;
6
+ export declare function _soltingCursorDataOnElement(cursorData: DEditorCursor, $element: HTMLElement): DEArrangeCursorData;