@kaitify/core 0.0.1-beta.1
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/LICENSE +21 -0
- package/README.md +3 -0
- package/examples/App.vue +342 -0
- package/examples/content.js +1 -0
- package/examples/main.ts +4 -0
- package/examples/test.html +23 -0
- package/lib/extensions/Extension.d.ts +172 -0
- package/lib/extensions/align/index.d.ts +10 -0
- package/lib/extensions/attachment/index.d.ts +29 -0
- package/lib/extensions/back-color/index.d.ts +9 -0
- package/lib/extensions/blockquote/index.d.ts +12 -0
- package/lib/extensions/bold/index.d.ts +9 -0
- package/lib/extensions/code/index.d.ts +12 -0
- package/lib/extensions/code-block/hljs.d.ts +12 -0
- package/lib/extensions/code-block/index.d.ts +15 -0
- package/lib/extensions/color/index.d.ts +9 -0
- package/lib/extensions/font-family/index.d.ts +9 -0
- package/lib/extensions/font-size/index.d.ts +9 -0
- package/lib/extensions/heading/index.d.ts +13 -0
- package/lib/extensions/history/index.d.ts +10 -0
- package/lib/extensions/horizontal/index.d.ts +7 -0
- package/lib/extensions/image/index.d.ts +26 -0
- package/lib/extensions/indent/index.d.ts +8 -0
- package/lib/extensions/index.d.ts +29 -0
- package/lib/extensions/italic/index.d.ts +9 -0
- package/lib/extensions/line-height/index.d.ts +9 -0
- package/lib/extensions/link/index.d.ts +27 -0
- package/lib/extensions/list/index.d.ts +18 -0
- package/lib/extensions/math/index.d.ts +11 -0
- package/lib/extensions/strikethrough/index.d.ts +9 -0
- package/lib/extensions/subscript/index.d.ts +9 -0
- package/lib/extensions/superscript/index.d.ts +9 -0
- package/lib/extensions/table/index.d.ts +21 -0
- package/lib/extensions/task/index.d.ts +12 -0
- package/lib/extensions/text/index.d.ts +14 -0
- package/lib/extensions/underline/index.d.ts +9 -0
- package/lib/extensions/video/index.d.ts +27 -0
- package/lib/index.d.ts +3 -0
- package/lib/kaitify-core.es.js +38337 -0
- package/lib/kaitify-core.umd.js +2 -0
- package/lib/model/Editor.d.ts +504 -0
- package/lib/model/History.d.ts +42 -0
- package/lib/model/KNode.d.ts +258 -0
- package/lib/model/Selection.d.ts +29 -0
- package/lib/model/config/dom-observe.d.ts +10 -0
- package/lib/model/config/event-handler.d.ts +33 -0
- package/lib/model/config/format-patch.d.ts +25 -0
- package/lib/model/config/format-rules.d.ts +37 -0
- package/lib/model/config/function.d.ts +84 -0
- package/lib/model/index.d.ts +6 -0
- package/lib/tools/index.d.ts +49 -0
- package/lib/view/index.d.ts +21 -0
- package/lib/view/js-render/dom-patch.d.ts +65 -0
- package/lib/view/js-render/index.d.ts +5 -0
- package/package.json +52 -0
- package/src/css/style.less +56 -0
- package/src/css/var.less +45 -0
- package/src/extensions/Extension.ts +200 -0
- package/src/extensions/align/index.ts +115 -0
- package/src/extensions/attachment/icon.svg +1 -0
- package/src/extensions/attachment/index.ts +293 -0
- package/src/extensions/attachment/style.less +25 -0
- package/src/extensions/back-color/index.ts +56 -0
- package/src/extensions/blockquote/index.ts +144 -0
- package/src/extensions/blockquote/style.less +16 -0
- package/src/extensions/bold/index.ts +77 -0
- package/src/extensions/code/index.ts +295 -0
- package/src/extensions/code/style.less +14 -0
- package/src/extensions/code-block/hljs.less +183 -0
- package/src/extensions/code-block/hljs.ts +95 -0
- package/src/extensions/code-block/index.ts +308 -0
- package/src/extensions/code-block/style.less +20 -0
- package/src/extensions/color/index.ts +56 -0
- package/src/extensions/font-family/index.ts +80 -0
- package/src/extensions/font-size/index.ts +56 -0
- package/src/extensions/heading/index.ts +164 -0
- package/src/extensions/heading/style.less +42 -0
- package/src/extensions/history/index.ts +96 -0
- package/src/extensions/horizontal/index.ts +45 -0
- package/src/extensions/horizontal/style.less +13 -0
- package/src/extensions/image/index.ts +242 -0
- package/src/extensions/image/style.less +8 -0
- package/src/extensions/indent/index.ts +98 -0
- package/src/extensions/index.ts +29 -0
- package/src/extensions/italic/index.ts +77 -0
- package/src/extensions/line-height/index.ts +113 -0
- package/src/extensions/link/index.ts +184 -0
- package/src/extensions/link/style.less +19 -0
- package/src/extensions/list/index.ts +410 -0
- package/src/extensions/list/style.less +19 -0
- package/src/extensions/math/index.ts +233 -0
- package/src/extensions/math/style.less +21 -0
- package/src/extensions/strikethrough/index.ts +78 -0
- package/src/extensions/subscript/index.ts +77 -0
- package/src/extensions/superscript/index.ts +77 -0
- package/src/extensions/table/index.ts +1148 -0
- package/src/extensions/table/style.less +71 -0
- package/src/extensions/task/index.ts +243 -0
- package/src/extensions/task/style.less +59 -0
- package/src/extensions/text/index.ts +359 -0
- package/src/extensions/underline/index.ts +78 -0
- package/src/extensions/video/index.ts +273 -0
- package/src/extensions/video/style.less +8 -0
- package/src/index.ts +9 -0
- package/src/model/Editor.ts +1963 -0
- package/src/model/History.ts +115 -0
- package/src/model/KNode.ts +677 -0
- package/src/model/Selection.ts +39 -0
- package/src/model/config/dom-observe.ts +184 -0
- package/src/model/config/event-handler.ts +237 -0
- package/src/model/config/format-patch.ts +215 -0
- package/src/model/config/format-rules.ts +218 -0
- package/src/model/config/function.ts +1018 -0
- package/src/model/index.ts +6 -0
- package/src/tools/index.ts +156 -0
- package/src/view/index.ts +46 -0
- package/src/view/js-render/dom-patch.ts +324 -0
- package/src/view/js-render/index.ts +210 -0
- package/vite-env.d.ts +2 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { KNode } from './KNode'
|
|
2
|
+
import { Selection } from './Selection'
|
|
3
|
+
/**
|
|
4
|
+
* 历史记录的record类型
|
|
5
|
+
*/
|
|
6
|
+
export type HistoryRecordType = {
|
|
7
|
+
nodes: KNode[]
|
|
8
|
+
selection: Selection
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 历史记录
|
|
12
|
+
*/
|
|
13
|
+
export class History {
|
|
14
|
+
/**
|
|
15
|
+
* 存放历史记录的堆栈
|
|
16
|
+
*/
|
|
17
|
+
records: HistoryRecordType[] = []
|
|
18
|
+
/**
|
|
19
|
+
* 存放撤销记录的堆栈
|
|
20
|
+
*/
|
|
21
|
+
redoRecords: HistoryRecordType[] = []
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 复制selection
|
|
25
|
+
*/
|
|
26
|
+
cloneSelection(newNodes: KNode[], selection: Selection) {
|
|
27
|
+
const newSelection = new Selection()
|
|
28
|
+
//如果存在选区
|
|
29
|
+
if (selection.focused()) {
|
|
30
|
+
//查找新的节点数组中start对应的节点
|
|
31
|
+
const startNode = KNode.searchByKey(selection.start!.node.key, newNodes)
|
|
32
|
+
//查找新的节点数组中end对应的节点
|
|
33
|
+
const endNode = KNode.searchByKey(selection.end!.node.key, newNodes)
|
|
34
|
+
//如果都存在
|
|
35
|
+
if (startNode && endNode) {
|
|
36
|
+
newSelection.start = {
|
|
37
|
+
node: startNode,
|
|
38
|
+
offset: selection.start!.offset
|
|
39
|
+
}
|
|
40
|
+
newSelection.end = {
|
|
41
|
+
node: endNode,
|
|
42
|
+
offset: selection.end!.offset
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return newSelection
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 保存新的记录
|
|
51
|
+
*/
|
|
52
|
+
setState(nodes: KNode[], selection: Selection) {
|
|
53
|
+
const newNodes = nodes.map(item => item.fullClone())
|
|
54
|
+
const newSelection = this.cloneSelection(newNodes, selection)
|
|
55
|
+
this.records.push({
|
|
56
|
+
nodes: newNodes,
|
|
57
|
+
selection: newSelection
|
|
58
|
+
})
|
|
59
|
+
//每次保存新状态时清空撤销记录的堆栈
|
|
60
|
+
this.redoRecords = []
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 撤销操作:返回上一个历史记录
|
|
65
|
+
*/
|
|
66
|
+
setUndo(): HistoryRecordType | null {
|
|
67
|
+
//存在的历史记录大于1则表示可以进行撤销操作
|
|
68
|
+
if (this.records.length > 1) {
|
|
69
|
+
//取出最近的历史记录
|
|
70
|
+
const record = this.records.pop()!
|
|
71
|
+
//将这个历史记录加入到撤销记录数组中
|
|
72
|
+
this.redoRecords.push(record)
|
|
73
|
+
//再次获取历史记录数组中的最近的一个
|
|
74
|
+
const lastRecord = this.records[this.records.length - 1]
|
|
75
|
+
const newNodes = lastRecord.nodes.map(item => item.fullClone())
|
|
76
|
+
const newSelection = this.cloneSelection(newNodes, lastRecord.selection)
|
|
77
|
+
return {
|
|
78
|
+
nodes: newNodes,
|
|
79
|
+
selection: newSelection
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//没有历史记录则返回null
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 重做操作:返回下一个历史记录
|
|
88
|
+
*/
|
|
89
|
+
setRedo(): HistoryRecordType | null {
|
|
90
|
+
//如果存在撤销记录
|
|
91
|
+
if (this.redoRecords.length > 0) {
|
|
92
|
+
//取出最近的一个撤销记录
|
|
93
|
+
const record = this.redoRecords.pop()!
|
|
94
|
+
//将撤销记录加入历史记录中
|
|
95
|
+
this.records.push(record)
|
|
96
|
+
//返回取出的这个撤销记录,即最近的一个历史记录
|
|
97
|
+
const newNodes = record.nodes.map(item => item.fullClone())
|
|
98
|
+
const newSelection = this.cloneSelection(newNodes, record.selection)
|
|
99
|
+
return {
|
|
100
|
+
nodes: newNodes,
|
|
101
|
+
selection: newSelection
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 更新当前记录的编辑器的光标
|
|
109
|
+
*/
|
|
110
|
+
updateSelection(selection: Selection) {
|
|
111
|
+
const record = this.records[this.records.length - 1]
|
|
112
|
+
const newSelection = this.cloneSelection(record.nodes, selection)
|
|
113
|
+
this.records[this.records.length - 1].selection = newSelection
|
|
114
|
+
}
|
|
115
|
+
}
|