@kaitify/core 0.0.1-beta.1 → 0.0.1-beta.3

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 (72) hide show
  1. package/README.md +1 -1
  2. package/lib/kaitify-core.es.js +1 -1
  3. package/lib/kaitify-core.umd.js +1 -1
  4. package/package.json +51 -51
  5. package/examples/App.vue +0 -342
  6. package/examples/content.js +0 -1
  7. package/examples/main.ts +0 -4
  8. package/examples/test.html +0 -23
  9. package/src/css/style.less +0 -56
  10. package/src/css/var.less +0 -45
  11. package/src/extensions/Extension.ts +0 -200
  12. package/src/extensions/align/index.ts +0 -115
  13. package/src/extensions/attachment/icon.svg +0 -1
  14. package/src/extensions/attachment/index.ts +0 -293
  15. package/src/extensions/attachment/style.less +0 -25
  16. package/src/extensions/back-color/index.ts +0 -56
  17. package/src/extensions/blockquote/index.ts +0 -144
  18. package/src/extensions/blockquote/style.less +0 -16
  19. package/src/extensions/bold/index.ts +0 -77
  20. package/src/extensions/code/index.ts +0 -295
  21. package/src/extensions/code/style.less +0 -14
  22. package/src/extensions/code-block/hljs.less +0 -183
  23. package/src/extensions/code-block/hljs.ts +0 -95
  24. package/src/extensions/code-block/index.ts +0 -308
  25. package/src/extensions/code-block/style.less +0 -20
  26. package/src/extensions/color/index.ts +0 -56
  27. package/src/extensions/font-family/index.ts +0 -80
  28. package/src/extensions/font-size/index.ts +0 -56
  29. package/src/extensions/heading/index.ts +0 -164
  30. package/src/extensions/heading/style.less +0 -42
  31. package/src/extensions/history/index.ts +0 -96
  32. package/src/extensions/horizontal/index.ts +0 -45
  33. package/src/extensions/horizontal/style.less +0 -13
  34. package/src/extensions/image/index.ts +0 -242
  35. package/src/extensions/image/style.less +0 -8
  36. package/src/extensions/indent/index.ts +0 -98
  37. package/src/extensions/index.ts +0 -29
  38. package/src/extensions/italic/index.ts +0 -77
  39. package/src/extensions/line-height/index.ts +0 -113
  40. package/src/extensions/link/index.ts +0 -184
  41. package/src/extensions/link/style.less +0 -19
  42. package/src/extensions/list/index.ts +0 -410
  43. package/src/extensions/list/style.less +0 -19
  44. package/src/extensions/math/index.ts +0 -233
  45. package/src/extensions/math/style.less +0 -21
  46. package/src/extensions/strikethrough/index.ts +0 -78
  47. package/src/extensions/subscript/index.ts +0 -77
  48. package/src/extensions/superscript/index.ts +0 -77
  49. package/src/extensions/table/index.ts +0 -1148
  50. package/src/extensions/table/style.less +0 -71
  51. package/src/extensions/task/index.ts +0 -243
  52. package/src/extensions/task/style.less +0 -59
  53. package/src/extensions/text/index.ts +0 -359
  54. package/src/extensions/underline/index.ts +0 -78
  55. package/src/extensions/video/index.ts +0 -273
  56. package/src/extensions/video/style.less +0 -8
  57. package/src/index.ts +0 -9
  58. package/src/model/Editor.ts +0 -1963
  59. package/src/model/History.ts +0 -115
  60. package/src/model/KNode.ts +0 -677
  61. package/src/model/Selection.ts +0 -39
  62. package/src/model/config/dom-observe.ts +0 -184
  63. package/src/model/config/event-handler.ts +0 -237
  64. package/src/model/config/format-patch.ts +0 -215
  65. package/src/model/config/format-rules.ts +0 -218
  66. package/src/model/config/function.ts +0 -1018
  67. package/src/model/index.ts +0 -6
  68. package/src/tools/index.ts +0 -156
  69. package/src/view/index.ts +0 -46
  70. package/src/view/js-render/dom-patch.ts +0 -324
  71. package/src/view/js-render/index.ts +0 -210
  72. package/vite-env.d.ts +0 -2
@@ -1,113 +0,0 @@
1
- import { KNode, KNodeStylesType } from '@/model'
2
- import { getSelectionBlockNodes } from '@/model/config/function'
3
- import { deleteProperty } from '@/tools'
4
- import { Extension } from '../Extension'
5
-
6
- declare module '../../model' {
7
- interface EditorCommandsType {
8
- isLineHeight?: (value: string | number) => boolean
9
- setLineHeight?: (value: string | number) => Promise<void>
10
- unsetLineHeight?: (value: string | number) => Promise<void>
11
- }
12
- }
13
-
14
- /**
15
- * 删除指定块节点及以上块节点的行高样式
16
- */
17
- const clearLineHeight = (blockNode: KNode, value: string | number) => {
18
- const matchNode = blockNode.getMatchNode({ styles: { lineHeight: value } })
19
- if (matchNode) {
20
- matchNode.styles = deleteProperty(matchNode.styles!, 'lineHeight')
21
- clearLineHeight(matchNode, value)
22
- }
23
- }
24
-
25
- export const LineHeightExtension = () =>
26
- Extension.create({
27
- name: 'lineHeight',
28
- pasteKeepStyles(node) {
29
- const styles: KNodeStylesType = {}
30
- if (node.isBlock() && node.hasStyles()) {
31
- if (node.styles!.hasOwnProperty('lineHeight')) styles.lineHeight = node.styles!.lineHeight
32
- }
33
- return styles
34
- },
35
- addCommands() {
36
- /**
37
- * 光标所在的块节点是否都是符合的行高
38
- */
39
- const isLineHeight = (value: string | number) => {
40
- if (!this.selection.focused()) {
41
- return false
42
- }
43
- //起点和终点在一起
44
- if (this.selection.collapsed()) {
45
- const block = this.selection.start!.node.getBlock()
46
- return !!block.getMatchNode({ styles: { lineHeight: value } })
47
- }
48
- //起点和终点不在一起
49
- const blockNodes = getSelectionBlockNodes.apply(this)
50
- return blockNodes.every(item => {
51
- return !!item.getMatchNode({ styles: { lineHeight: value } })
52
- })
53
- }
54
-
55
- /**
56
- * 设置行高
57
- */
58
- const setLineHeight = async (value: string | number) => {
59
- if (isLineHeight(value)) {
60
- return
61
- }
62
- //起点和终点在一起
63
- if (this.selection.collapsed()) {
64
- const blockNode = this.selection.start!.node.getBlock()
65
- const styles: KNodeStylesType = blockNode.hasStyles() ? blockNode.styles! : {}
66
- blockNode.styles = {
67
- ...styles,
68
- lineHeight: value
69
- }
70
- }
71
- //起点和终点不在一起
72
- else {
73
- const blockNodes = getSelectionBlockNodes.apply(this)
74
- blockNodes.forEach(item => {
75
- const styles: KNodeStylesType = item.hasStyles() ? item.styles! : {}
76
- item.styles = {
77
- ...styles,
78
- lineHeight: value
79
- }
80
- })
81
- }
82
- await this.updateView()
83
- }
84
-
85
- /**
86
- * 取消行高
87
- */
88
- const unsetLineHeight = async (value: string | number) => {
89
- if (!isLineHeight(value)) {
90
- return
91
- }
92
- //起点和终点在一起
93
- if (this.selection.collapsed()) {
94
- const blockNode = this.selection.start!.node.getBlock()
95
- clearLineHeight(blockNode, value)
96
- }
97
- //起点和终点不在一起
98
- else {
99
- const blockNodes = getSelectionBlockNodes.apply(this)
100
- blockNodes.forEach(item => {
101
- clearLineHeight(item, value)
102
- })
103
- }
104
- await this.updateView()
105
- }
106
-
107
- return {
108
- isLineHeight,
109
- setLineHeight,
110
- unsetLineHeight
111
- }
112
- }
113
- })
@@ -1,184 +0,0 @@
1
- import { KNode, KNodeMarksType } from '@/model'
2
- import { splitNodeToNodes } from '@/model/config/function'
3
- import { Extension } from '../Extension'
4
- import './style.less'
5
- import { deleteProperty } from '@/tools'
6
-
7
- /**
8
- * 插入链接方法入参类型
9
- */
10
- export type SetLinkOptionType = {
11
- href: string
12
- text?: string
13
- newOpen?: boolean
14
- }
15
-
16
- /**
17
- * 更新链接方法入参类型
18
- */
19
- export type UpdateLinkOptionType = {
20
- href?: string
21
- newOpen?: boolean
22
- }
23
-
24
- declare module '../../model' {
25
- interface EditorCommandsType {
26
- getLink?: () => KNode | null
27
- hasLink?: () => boolean
28
- setLink?: (options: SetLinkOptionType) => Promise<void>
29
- updateLink?: (options: UpdateLinkOptionType) => Promise<void>
30
- unsetLink?: () => Promise<void>
31
- }
32
- }
33
-
34
- export const LinkExtension = () =>
35
- Extension.create({
36
- name: 'link',
37
- extraKeepTags: ['a'],
38
- domParseNodeCallback(node) {
39
- if (node.isMatch({ tag: 'a' })) {
40
- node.type = 'inline'
41
- }
42
- return node
43
- },
44
- pasteKeepMarks(node) {
45
- const marks: KNodeMarksType = {}
46
- if (node.isMatch({ tag: 'a' }) && node.hasMarks()) {
47
- if (node.marks!.hasOwnProperty('href')) marks['href'] = node.marks!['href']
48
- if (node.marks!.hasOwnProperty('target')) marks['target'] = node.marks!['target']
49
- }
50
- return marks
51
- },
52
- formatRules: [
53
- ({ editor, node }) => {
54
- //链接只能是行内节点且只能有文本节点和闭合节点
55
- if (node.isMatch({ tag: 'a' }) && node.hasChildren()) {
56
- node.type = 'inline'
57
- node.children!.forEach(item => {
58
- splitNodeToNodes.apply(editor, [item])
59
- })
60
- }
61
- }
62
- ],
63
- addCommands() {
64
- /**
65
- * 获取光标所在的链接,如果光标不在一个链接内,返回null
66
- */
67
- const getLink = () => {
68
- return this.getMatchNodeBySelection({ tag: 'a' })
69
- }
70
-
71
- /**
72
- * 判断光标范围内是否有链接
73
- */
74
- const hasLink = () => {
75
- return this.isSelectionNodesSomeMatch({
76
- tag: 'a'
77
- })
78
- }
79
-
80
- /**
81
- * 设置连接
82
- */
83
- const setLink = async (options: SetLinkOptionType) => {
84
- if (!this.selection.focused() || hasLink()) {
85
- return
86
- }
87
- if (!options.href) {
88
- return
89
- }
90
- //起点和终点在一起
91
- if (this.selection.collapsed()) {
92
- if (!options.text) {
93
- return
94
- }
95
- const marks: KNodeMarksType = {
96
- href: options.href
97
- }
98
- if (options.newOpen) {
99
- marks.target = '_blank'
100
- }
101
- const linkNode = KNode.create({
102
- type: 'inline',
103
- tag: 'a',
104
- marks,
105
- children: [
106
- {
107
- type: 'text',
108
- textContent: options.text
109
- }
110
- ]
111
- })
112
- this.insertNode(linkNode)
113
- }
114
- //起点和终点不在一起
115
- else {
116
- const marks: KNodeMarksType = {
117
- href: options.href
118
- }
119
- if (options.newOpen) {
120
- marks.target = '_blank'
121
- }
122
- const linkNode = KNode.create({
123
- type: 'inline',
124
- tag: 'a',
125
- marks,
126
- children: []
127
- })
128
- this.getFocusSplitNodesBySelection('all').forEach((item, index) => {
129
- const newNode = item.clone(true)
130
- this.addNode(newNode, linkNode, index)
131
- })
132
- this.insertNode(linkNode)
133
- }
134
- await this.updateView()
135
- }
136
-
137
- /**
138
- * 更新链接
139
- */
140
- const updateLink = async (options: UpdateLinkOptionType) => {
141
- if (!this.selection.focused()) {
142
- return
143
- }
144
- if (!options.href && typeof options.newOpen != 'boolean') {
145
- return
146
- }
147
- const linkNode = getLink()
148
- if (!linkNode) {
149
- return
150
- }
151
- if (options.href) {
152
- linkNode.marks!.href = options.href
153
- }
154
- if (typeof options.newOpen == 'boolean') {
155
- if (options.newOpen) {
156
- linkNode.marks!.target = '_blank'
157
- } else {
158
- linkNode.marks = deleteProperty(linkNode.marks!, 'target')
159
- }
160
- }
161
- await this.updateView()
162
- }
163
-
164
- /**
165
- * 取消链接
166
- */
167
- const unsetLink = async () => {
168
- if (!this.selection.focused()) {
169
- return
170
- }
171
- const linkNode = getLink()
172
- if (!linkNode) {
173
- return
174
- }
175
- linkNode.children!.forEach(item => {
176
- this.addNodeBefore(item, linkNode)
177
- })
178
- linkNode.children = []
179
- await this.updateView()
180
- }
181
-
182
- return { getLink, hasLink, setLink, updateLink, unsetLink }
183
- }
184
- })
@@ -1,19 +0,0 @@
1
- .Kaitify {
2
- a {
3
- color: #06c27c;
4
- text-decoration: none;
5
-
6
- &:hover {
7
- text-decoration: underline;
8
- }
9
- }
10
-
11
- //非编辑状态下
12
- &:not([contenteditable='true']) {
13
- a {
14
- &:hover {
15
- cursor: pointer;
16
- }
17
- }
18
- }
19
- }