@hailin-zheng/editor-core 1.0.1 → 1.0.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.
- package/lib/doc-ruler.d.ts +51 -0
- package/lib/doc-ruler.js +313 -0
- package/lib/doc-ruler.js.map +1 -0
- package/lib/framework/common-util.d.ts +63 -0
- package/lib/framework/common-util.js +178 -0
- package/lib/framework/common-util.js.map +1 -0
- package/lib/framework/document-change.d.ts +265 -0
- package/lib/framework/document-change.js +1342 -0
- package/lib/framework/document-change.js.map +1 -0
- package/lib/framework/document-combine.d.ts +24 -0
- package/lib/framework/document-combine.js +40 -0
- package/lib/framework/document-combine.js.map +1 -0
- package/lib/framework/document-comment.d.ts +46 -0
- package/lib/framework/document-comment.js +148 -0
- package/lib/framework/document-comment.js.map +1 -0
- package/lib/framework/document-context.d.ts +149 -0
- package/lib/framework/document-context.js +330 -0
- package/lib/framework/document-context.js.map +1 -0
- package/lib/framework/document-eval-func.d.ts +18 -0
- package/lib/framework/document-eval-func.js +48 -0
- package/lib/framework/document-eval-func.js.map +1 -0
- package/lib/framework/document-event.d.ts +213 -0
- package/lib/framework/document-event.js +1054 -0
- package/lib/framework/document-event.js.map +1 -0
- package/lib/framework/document-history.d.ts +26 -0
- package/lib/framework/document-history.js +65 -0
- package/lib/framework/document-history.js.map +1 -0
- package/lib/framework/document-images-loader.d.ts +16 -0
- package/lib/framework/document-images-loader.js +66 -0
- package/lib/framework/document-images-loader.js.map +1 -0
- package/lib/framework/document-input-cursor.d.ts +78 -0
- package/lib/framework/document-input-cursor.js +239 -0
- package/lib/framework/document-input-cursor.js.map +1 -0
- package/lib/framework/document-paint.d.ts +34 -0
- package/lib/framework/document-paint.js +103 -0
- package/lib/framework/document-paint.js.map +1 -0
- package/lib/framework/document-print-offscreen.d.ts +38 -0
- package/lib/framework/document-print-offscreen.js +128 -0
- package/lib/framework/document-print-offscreen.js.map +1 -0
- package/lib/framework/document-print.d.ts +60 -0
- package/lib/framework/document-print.js +203 -0
- package/lib/framework/document-print.js.map +1 -0
- package/lib/framework/document-segmenter.d.ts +2 -0
- package/lib/framework/document-segmenter.js +106 -0
- package/lib/framework/document-segmenter.js.map +1 -0
- package/lib/framework/document-selection.d.ts +89 -0
- package/lib/framework/document-selection.js +358 -0
- package/lib/framework/document-selection.js.map +1 -0
- package/lib/framework/document-template.d.ts +4 -0
- package/lib/framework/document-template.js +20 -0
- package/lib/framework/document-template.js.map +1 -0
- package/lib/framework/document-textline-mode.d.ts +7 -0
- package/lib/framework/document-textline-mode.js +30 -0
- package/lib/framework/document-textline-mode.js.map +1 -0
- package/lib/framework/element-define.d.ts +319 -0
- package/lib/framework/element-define.js +579 -0
- package/lib/framework/element-define.js.map +1 -0
- package/lib/framework/element-event-define.d.ts +99 -0
- package/lib/framework/element-event-define.js +108 -0
- package/lib/framework/element-event-define.js.map +1 -0
- package/lib/framework/element-measure.d.ts +97 -0
- package/lib/framework/element-measure.js +551 -0
- package/lib/framework/element-measure.js.map +1 -0
- package/lib/framework/element-paint.d.ts +42 -0
- package/lib/framework/element-paint.js +170 -0
- package/lib/framework/element-paint.js.map +1 -0
- package/lib/framework/element-props.d.ts +301 -0
- package/lib/framework/element-props.js +809 -0
- package/lib/framework/element-props.js.map +1 -0
- package/lib/framework/element-reader.d.ts +19 -0
- package/lib/framework/element-reader.js +151 -0
- package/lib/framework/element-reader.js.map +1 -0
- package/lib/framework/element-render-cut.d.ts +55 -0
- package/lib/framework/element-render-cut.js +449 -0
- package/lib/framework/element-render-cut.js.map +1 -0
- package/lib/framework/element-serialize.d.ts +30 -0
- package/lib/framework/element-serialize.js +113 -0
- package/lib/framework/element-serialize.js.map +1 -0
- package/lib/framework/element-util.d.ts +369 -0
- package/lib/framework/element-util.js +1463 -0
- package/lib/framework/element-util.js.map +1 -0
- package/lib/framework/impl/checkbox/checkbox-impl.d.ts +24 -0
- package/lib/framework/impl/checkbox/checkbox-impl.js +64 -0
- package/lib/framework/impl/checkbox/checkbox-impl.js.map +1 -0
- package/lib/framework/impl/comments/comment-content-impl.d.ts +40 -0
- package/lib/framework/impl/comments/comment-content-impl.js +105 -0
- package/lib/framework/impl/comments/comment-content-impl.js.map +1 -0
- package/lib/framework/impl/comments/comment-element-impl.d.ts +21 -0
- package/lib/framework/impl/comments/comment-element-impl.js +62 -0
- package/lib/framework/impl/comments/comment-element-impl.js.map +1 -0
- package/lib/framework/impl/comments/comments-container-impl.d.ts +22 -0
- package/lib/framework/impl/comments/comments-container-impl.js +62 -0
- package/lib/framework/impl/comments/comments-container-impl.js.map +1 -0
- package/lib/framework/impl/comments/comments-util.d.ts +12 -0
- package/lib/framework/impl/comments/comments-util.js +67 -0
- package/lib/framework/impl/comments/comments-util.js.map +1 -0
- package/lib/framework/impl/comments/validate-msg-impl.d.ts +21 -0
- package/lib/framework/impl/comments/validate-msg-impl.js +83 -0
- package/lib/framework/impl/comments/validate-msg-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-decorate-impl.d.ts +30 -0
- package/lib/framework/impl/data-element/data-decorate-impl.js +91 -0
- package/lib/framework/impl/data-element/data-decorate-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-barcode.d.ts +31 -0
- package/lib/framework/impl/data-element/data-element-barcode.js +115 -0
- package/lib/framework/impl/data-element/data-element-barcode.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-base-impl.d.ts +68 -0
- package/lib/framework/impl/data-element/data-element-base-impl.js +205 -0
- package/lib/framework/impl/data-element/data-element-base-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-check-impl.d.ts +35 -0
- package/lib/framework/impl/data-element/data-element-check-impl.js +133 -0
- package/lib/framework/impl/data-element/data-element-check-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-date-impl.d.ts +23 -0
- package/lib/framework/impl/data-element/data-element-date-impl.js +111 -0
- package/lib/framework/impl/data-element/data-element-date-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-group-impl.d.ts +23 -0
- package/lib/framework/impl/data-element/data-element-group-impl.js +130 -0
- package/lib/framework/impl/data-element/data-element-group-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-image-impl.d.ts +30 -0
- package/lib/framework/impl/data-element/data-element-image-impl.js +137 -0
- package/lib/framework/impl/data-element/data-element-image-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-list-impl.d.ts +22 -0
- package/lib/framework/impl/data-element/data-element-list-impl.js +131 -0
- package/lib/framework/impl/data-element/data-element-list-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-text-impl.d.ts +23 -0
- package/lib/framework/impl/data-element/data-element-text-impl.js +103 -0
- package/lib/framework/impl/data-element/data-element-text-impl.js.map +1 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.d.ts +21 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.js +43 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.js.map +1 -0
- package/lib/framework/impl/document/doc-body-impl.d.ts +27 -0
- package/lib/framework/impl/document/doc-body-impl.js +79 -0
- package/lib/framework/impl/document/doc-body-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-body-part-impl.d.ts +30 -0
- package/lib/framework/impl/document/doc-body-part-impl.js +94 -0
- package/lib/framework/impl/document/doc-body-part-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-container-impl.d.ts +16 -0
- package/lib/framework/impl/document/doc-container-impl.js +21 -0
- package/lib/framework/impl/document/doc-container-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-footer-impl.d.ts +26 -0
- package/lib/framework/impl/document/doc-footer-impl.js +77 -0
- package/lib/framework/impl/document/doc-footer-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-header-impl.d.ts +26 -0
- package/lib/framework/impl/document/doc-header-impl.js +83 -0
- package/lib/framework/impl/document/doc-header-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-impl.d.ts +61 -0
- package/lib/framework/impl/document/doc-impl.js +209 -0
- package/lib/framework/impl/document/doc-impl.js.map +1 -0
- package/lib/framework/impl/media-formula/menstrual-history.d.ts +35 -0
- package/lib/framework/impl/media-formula/menstrual-history.js +153 -0
- package/lib/framework/impl/media-formula/menstrual-history.js.map +1 -0
- package/lib/framework/impl/paragraph/p-impl.d.ts +45 -0
- package/lib/framework/impl/paragraph/p-impl.js +156 -0
- package/lib/framework/impl/paragraph/p-impl.js.map +1 -0
- package/lib/framework/impl/picture/image-impl.d.ts +31 -0
- package/lib/framework/impl/picture/image-impl.js +124 -0
- package/lib/framework/impl/picture/image-impl.js.map +1 -0
- package/lib/framework/impl/radio/radio-impl.d.ts +22 -0
- package/lib/framework/impl/radio/radio-impl.js +72 -0
- package/lib/framework/impl/radio/radio-impl.js.map +1 -0
- package/lib/framework/impl/symbol/br-symbol-impl.d.ts +22 -0
- package/lib/framework/impl/symbol/br-symbol-impl.js +54 -0
- package/lib/framework/impl/symbol/br-symbol-impl.js.map +1 -0
- package/lib/framework/impl/symbol/p-symbol-impl.d.ts +19 -0
- package/lib/framework/impl/symbol/p-symbol-impl.js +54 -0
- package/lib/framework/impl/symbol/p-symbol-impl.js.map +1 -0
- package/lib/framework/impl/table/table-cell-impl.d.ts +37 -0
- package/lib/framework/impl/table/table-cell-impl.js +145 -0
- package/lib/framework/impl/table/table-cell-impl.js.map +1 -0
- package/lib/framework/impl/table/table-impl.d.ts +55 -0
- package/lib/framework/impl/table/table-impl.js +363 -0
- package/lib/framework/impl/table/table-impl.js.map +1 -0
- package/lib/framework/impl/table/table-row-impl.d.ts +26 -0
- package/lib/framework/impl/table/table-row-impl.js +75 -0
- package/lib/framework/impl/table/table-row-impl.js.map +1 -0
- package/lib/framework/impl/table/table-split-cell-patch.d.ts +20 -0
- package/lib/framework/impl/table/table-split-cell-patch.js +89 -0
- package/lib/framework/impl/table/table-split-cell-patch.js.map +1 -0
- package/lib/framework/impl/table/table-split-cell.d.ts +90 -0
- package/lib/framework/impl/table/table-split-cell.js +464 -0
- package/lib/framework/impl/table/table-split-cell.js.map +1 -0
- package/lib/framework/impl/table/table-util.d.ts +150 -0
- package/lib/framework/impl/table/table-util.js +678 -0
- package/lib/framework/impl/table/table-util.js.map +1 -0
- package/lib/framework/impl/text/text-impl.d.ts +32 -0
- package/lib/framework/impl/text/text-impl.js +149 -0
- package/lib/framework/impl/text/text-impl.js.map +1 -0
- package/lib/framework/impl/text/track-run-impl.d.ts +27 -0
- package/lib/framework/impl/text/track-run-impl.js +112 -0
- package/lib/framework/impl/text/track-run-impl.js.map +1 -0
- package/lib/framework/notify.d.ts +13 -0
- package/lib/framework/notify.js +116 -0
- package/lib/framework/notify.js.map +1 -0
- package/lib/framework/range-util.d.ts +40 -0
- package/lib/framework/range-util.js +312 -0
- package/lib/framework/range-util.js.map +1 -0
- package/lib/framework/render-context.d.ts +91 -0
- package/lib/framework/render-context.js +384 -0
- package/lib/framework/render-context.js.map +1 -0
- package/lib/framework/render-define.d.ts +109 -0
- package/lib/framework/render-define.js +195 -0
- package/lib/framework/render-define.js.map +1 -0
- package/lib/framework/selection-overlays.d.ts +30 -0
- package/lib/framework/selection-overlays.js +124 -0
- package/lib/framework/selection-overlays.js.map +1 -0
- package/lib/texteditor.d.ts +318 -0
- package/lib/texteditor.js +913 -0
- package/lib/texteditor.js.map +1 -0
- package/lib/util/subject.d.ts +34 -0
- package/lib/util/subject.js +88 -0
- package/lib/util/subject.js.map +1 -0
- package/lib/util/table-bind.d.ts +5 -0
- package/lib/util/table-bind.js +6 -0
- package/lib/util/table-bind.js.map +1 -0
- package/package.json +1 -1
- package/tsconfig.json +1 -1
- package/webpack.config.js +0 -1
@@ -0,0 +1,195 @@
|
|
1
|
+
import { Rect, MarginProps, PaddingProps } from './element-define';
|
2
|
+
/**
|
3
|
+
* 定义组件的UI形式的渲染
|
4
|
+
*/
|
5
|
+
export class RenderObject {
|
6
|
+
element;
|
7
|
+
margin;
|
8
|
+
padding;
|
9
|
+
rect = new Rect();
|
10
|
+
parent;
|
11
|
+
/**
|
12
|
+
* 可点击性,例如:null-text 占位符元素不具备可点击能力
|
13
|
+
*/
|
14
|
+
disableClick;
|
15
|
+
constructor(element) {
|
16
|
+
this.element = element;
|
17
|
+
this.margin = new MarginProps();
|
18
|
+
this.padding = new PaddingProps();
|
19
|
+
}
|
20
|
+
pagePaintCompleted(ctx, position) { }
|
21
|
+
destroy() {
|
22
|
+
//this.parent = null;
|
23
|
+
//this.margin = null;
|
24
|
+
//this.padding = null;
|
25
|
+
//this.rect = null;
|
26
|
+
//this.element = null;
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* 获取内容区域框体
|
30
|
+
* @param render
|
31
|
+
* @returns
|
32
|
+
*/
|
33
|
+
getInnnerRect() {
|
34
|
+
const { padding } = this;
|
35
|
+
const rect = new Rect();
|
36
|
+
rect.x = padding.left;
|
37
|
+
rect.y = padding.top;
|
38
|
+
rect.maxWidth = this.rect.maxWidth - padding.left - padding.right;
|
39
|
+
if (this.rect.maxHeight) {
|
40
|
+
rect.maxHeight = this.rect.maxHeight - padding.top - padding.bottom;
|
41
|
+
}
|
42
|
+
return rect;
|
43
|
+
}
|
44
|
+
getInnerMaxWidth() {
|
45
|
+
if (!this.rect.maxWidth) {
|
46
|
+
throw new Error('this.rect.maxWidth is null');
|
47
|
+
}
|
48
|
+
const { padding, margin } = this;
|
49
|
+
return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.bottom;
|
50
|
+
}
|
51
|
+
/**
|
52
|
+
* 根据内框内容高度,更新外框框体高度
|
53
|
+
* @param render
|
54
|
+
* @param innerRect
|
55
|
+
*/
|
56
|
+
updateRenderHeight(innerRect) {
|
57
|
+
const innnerHeight = typeof innerRect === 'number' ? innerRect : innerRect.height;
|
58
|
+
const { padding, margin } = this;
|
59
|
+
//外层容器高度等于内容高度+外边距+内边距
|
60
|
+
this.rect.height = innnerHeight + padding.top + padding.bottom;
|
61
|
+
}
|
62
|
+
getIndex() {
|
63
|
+
if (this.parent) {
|
64
|
+
return this.parent.getChildIndex(this);
|
65
|
+
}
|
66
|
+
else {
|
67
|
+
return 0;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
/**
|
72
|
+
* 叶子节点渲染元素
|
73
|
+
*/
|
74
|
+
export class LeafRenderObject extends RenderObject {
|
75
|
+
constructor(element) {
|
76
|
+
super(element);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* 枝干节点渲染元素
|
81
|
+
*/
|
82
|
+
export class BranchRenderObject extends RenderObject {
|
83
|
+
constructor(element) {
|
84
|
+
super(element);
|
85
|
+
}
|
86
|
+
chilren = [];
|
87
|
+
getItems() {
|
88
|
+
return this.chilren;
|
89
|
+
}
|
90
|
+
addChild(...items) {
|
91
|
+
for (let i = 0; i < items.length; i++) {
|
92
|
+
const item = items[i];
|
93
|
+
item.parent = this;
|
94
|
+
this.chilren.push(item);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
insertChild(item, index) {
|
98
|
+
this.chilren.splice(index, 0, item);
|
99
|
+
item.parent = this;
|
100
|
+
}
|
101
|
+
removeChild(child) {
|
102
|
+
const index = this.chilren.indexOf(child);
|
103
|
+
if (index < 0) {
|
104
|
+
throw new Error('为查找到当前元素');
|
105
|
+
}
|
106
|
+
if (child.parent === this) {
|
107
|
+
//child.parent = null;
|
108
|
+
}
|
109
|
+
this.chilren.splice(index, 1);
|
110
|
+
}
|
111
|
+
removeChildByIndex(index) {
|
112
|
+
const child = this.chilren[index];
|
113
|
+
if (child) {
|
114
|
+
this.chilren.splice(index, 1);
|
115
|
+
//child.parent = null;
|
116
|
+
}
|
117
|
+
else {
|
118
|
+
throw new Error('为查找到当前元素');
|
119
|
+
}
|
120
|
+
}
|
121
|
+
clear() {
|
122
|
+
const items = [...this.chilren];
|
123
|
+
for (let i = items.length - 1; i >= 0; i--) {
|
124
|
+
this.removeChildByIndex(i);
|
125
|
+
}
|
126
|
+
}
|
127
|
+
get length() {
|
128
|
+
return this.chilren.length;
|
129
|
+
}
|
130
|
+
getChild(index) {
|
131
|
+
return this.chilren[index];
|
132
|
+
}
|
133
|
+
getChildIndex(child) {
|
134
|
+
return this.chilren.indexOf(child);
|
135
|
+
}
|
136
|
+
destroy() {
|
137
|
+
super.destroy();
|
138
|
+
const len = this.length;
|
139
|
+
for (let i = len - 1; i >= 0; i--) {
|
140
|
+
const child = this.getChild(i);
|
141
|
+
child.destroy();
|
142
|
+
//this.removeChild(child);
|
143
|
+
}
|
144
|
+
this.chilren.length = 0;
|
145
|
+
//this.chilren = null;
|
146
|
+
}
|
147
|
+
}
|
148
|
+
/**
|
149
|
+
* 块级渲染元素
|
150
|
+
*/
|
151
|
+
export class BlockContentRenderObject extends BranchRenderObject {
|
152
|
+
setRenderWidth(maxWidth) {
|
153
|
+
this.rect.maxWidth = maxWidth;
|
154
|
+
this.rect.width = maxWidth;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
export class InlineGroupRenderObject extends BranchRenderObject {
|
158
|
+
}
|
159
|
+
/**
|
160
|
+
* 包含块级渲染元素的容器元素,例如body、table-cell等
|
161
|
+
*/
|
162
|
+
export class BlockContainerRenderObject extends BranchRenderObject {
|
163
|
+
setRenderWidth(maxWidth) {
|
164
|
+
this.rect.maxWidth = maxWidth;
|
165
|
+
this.rect.width = maxWidth;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
/**
|
169
|
+
* 多级 ‘BlockLineRectRenderObject’ 包裹元素,例如 p、table
|
170
|
+
*/
|
171
|
+
export class MuiltBlockLineRenderObject extends BlockContentRenderObject {
|
172
|
+
}
|
173
|
+
/**
|
174
|
+
* 容器-子内容为多个行内块级元素,例如table-row
|
175
|
+
*/
|
176
|
+
export class InlineBlockContainer extends MuiltBlockLineRenderObject {
|
177
|
+
}
|
178
|
+
/**
|
179
|
+
* 服务于table-cell
|
180
|
+
* 可被多级拆分的元素
|
181
|
+
*/
|
182
|
+
export class InlineMuiltBlockLineRenderObject extends MuiltBlockLineRenderObject {
|
183
|
+
}
|
184
|
+
/**
|
185
|
+
* 最小不可分割单位的块级行框,例如 p-line
|
186
|
+
* 一行不可存在于两个页面中,块级行框不能分布在两个页面中
|
187
|
+
*/
|
188
|
+
export class BlockLineRectRenderObject extends BlockContentRenderObject {
|
189
|
+
}
|
190
|
+
export var RenderObjectType;
|
191
|
+
(function (RenderObjectType) {
|
192
|
+
RenderObjectType[RenderObjectType["Branch"] = 0] = "Branch";
|
193
|
+
RenderObjectType[RenderObjectType["Leaf"] = 1] = "Leaf";
|
194
|
+
})(RenderObjectType || (RenderObjectType = {}));
|
195
|
+
//# sourceMappingURL=render-define.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"render-define.js","sourceRoot":"","sources":["../../src/med_editor/framework/render-define.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { SelectionState } from "./document-selection";
|
2
|
+
import { Element, SelectionContentRange } from "./element-define";
|
3
|
+
/**
|
4
|
+
* 用于处理选区拖蓝
|
5
|
+
*/
|
6
|
+
export declare class SelectionOverlays {
|
7
|
+
private selectionState;
|
8
|
+
private selectionRange;
|
9
|
+
selectedSets: Map<Element, SelectionContentRange>;
|
10
|
+
constructor(selectionState: SelectionState);
|
11
|
+
getSelectionTreeData(): void;
|
12
|
+
private convertSelectRangeToSet;
|
13
|
+
static addToSets(range: SelectionContentRange, set: Map<Element, SelectionContentRange>): void;
|
14
|
+
/**
|
15
|
+
* 添加到批注集合
|
16
|
+
* @param range
|
17
|
+
* @param set
|
18
|
+
*/
|
19
|
+
static addToCommentSets(range: SelectionContentRange, set: Map<Element, SelectionContentRange>): void;
|
20
|
+
/**
|
21
|
+
* 修正开始选区内容
|
22
|
+
* 1.如果当前选区开始于表格内容,结束选区位于表格外,则需要开始选区内容重定位到单元格第一个元素
|
23
|
+
*/
|
24
|
+
private fixStartSelectionElement;
|
25
|
+
/**
|
26
|
+
* 修正开始选区内容
|
27
|
+
* 1.如果当前选区开始于表格内容,结束选区位于表格外,则需要开始选区内容重定位到单元格第一个元素
|
28
|
+
*/
|
29
|
+
private fixEndSelectionElement;
|
30
|
+
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
import { ElementUtil } from "./element-util";
|
2
|
+
import { RangeUtil } from "./range-util";
|
3
|
+
import { TableElement } from "./impl/table/table-impl";
|
4
|
+
import { TableCellElement } from "./impl/table/table-cell-impl";
|
5
|
+
/**
|
6
|
+
* 用于处理选区拖蓝
|
7
|
+
*/
|
8
|
+
export class SelectionOverlays {
|
9
|
+
selectionState;
|
10
|
+
selectionRange;
|
11
|
+
selectedSets = new Map();
|
12
|
+
constructor(selectionState) {
|
13
|
+
this.selectionState = selectionState;
|
14
|
+
}
|
15
|
+
getSelectionTreeData() {
|
16
|
+
let { ancestorCommonControl, startControl, startOffset, endControl, endOffset, collapsed } = this.selectionState;
|
17
|
+
this.selectedSets.clear();
|
18
|
+
if (this.selectionRange) {
|
19
|
+
this.selectionRange.selectedChildren.length = 0;
|
20
|
+
}
|
21
|
+
this.selectionRange = null;
|
22
|
+
if (!startControl || !endControl || !ancestorCommonControl) {
|
23
|
+
//this.selectionRange?.selectedChildren.length=0;
|
24
|
+
this.selectionState.selectedRange = null;
|
25
|
+
return;
|
26
|
+
}
|
27
|
+
if (collapsed) {
|
28
|
+
const commonRange = RangeUtil.getSelctionRange(startControl, startOffset, endControl, endOffset, ancestorCommonControl);
|
29
|
+
this.selectionState.selectedRange = commonRange;
|
30
|
+
this.selectedSets.clear();
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
const fixStartElement = this.fixStartSelectionElement(startControl, startOffset, ancestorCommonControl);
|
34
|
+
startControl = fixStartElement.element;
|
35
|
+
startOffset = fixStartElement.offset;
|
36
|
+
const fixEndElement = this.fixEndSelectionElement(endControl, endOffset, ancestorCommonControl);
|
37
|
+
endControl = fixEndElement.element;
|
38
|
+
endOffset = fixEndElement.offset;
|
39
|
+
const commonRange = RangeUtil.getSelctionRange(startControl, startOffset, endControl, endOffset, ancestorCommonControl);
|
40
|
+
//console.log(commonRange);
|
41
|
+
this.selectionRange = commonRange;
|
42
|
+
this.convertSelectRangeToSet();
|
43
|
+
this.selectionState.selectedRange = commonRange;
|
44
|
+
}
|
45
|
+
convertSelectRangeToSet() {
|
46
|
+
this.selectedSets.clear();
|
47
|
+
if (this.selectionRange) {
|
48
|
+
SelectionOverlays.addToSets(this.selectionRange, this.selectedSets);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
static addToSets(range, set) {
|
52
|
+
set.set(range.target, range);
|
53
|
+
for (let i = 0; i < range.selectedChildren.length; i++) {
|
54
|
+
//单元格全部选中效果,单元格整个拖蓝即可
|
55
|
+
if (range.isFullSelected && range.target.type === 'tbc') {
|
56
|
+
continue;
|
57
|
+
}
|
58
|
+
this.addToSets(range.selectedChildren[i], set);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
/**
|
62
|
+
* 添加到批注集合
|
63
|
+
* @param range
|
64
|
+
* @param set
|
65
|
+
*/
|
66
|
+
static addToCommentSets(range, set) {
|
67
|
+
set.set(range.target, range);
|
68
|
+
for (let i = 0; i < range.selectedChildren.length; i++) {
|
69
|
+
this.addToCommentSets(range.selectedChildren[i], set);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
/**
|
73
|
+
* 修正开始选区内容
|
74
|
+
* 1.如果当前选区开始于表格内容,结束选区位于表格外,则需要开始选区内容重定位到单元格第一个元素
|
75
|
+
*/
|
76
|
+
fixStartSelectionElement(element, offset, ancestorCommonControl) {
|
77
|
+
if (!(ancestorCommonControl instanceof TableElement)) {
|
78
|
+
const lookupParentCell = ElementUtil.getParentByType(element, TableCellElement);
|
79
|
+
if (lookupParentCell) {
|
80
|
+
if (!lookupParentCell.parent || !lookupParentCell.parent.parent) {
|
81
|
+
}
|
82
|
+
const lookupParentTbIndex = ElementUtil.getControlIndex(lookupParentCell.parent.parent);
|
83
|
+
const ancestorCommonControlIndex = ElementUtil.getControlIndex(ancestorCommonControl);
|
84
|
+
if (ancestorCommonControlIndex < lookupParentTbIndex) {
|
85
|
+
const rowFirstLeafElement = ElementUtil.getFirstLeafElement(lookupParentCell.parent);
|
86
|
+
if (!rowFirstLeafElement) {
|
87
|
+
throw new Error('当前元素处于表格内元素,未能定位到当前单元格首个元素');
|
88
|
+
}
|
89
|
+
return {
|
90
|
+
element: rowFirstLeafElement,
|
91
|
+
offset: 0
|
92
|
+
};
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
return { element, offset };
|
97
|
+
}
|
98
|
+
/**
|
99
|
+
* 修正开始选区内容
|
100
|
+
* 1.如果当前选区开始于表格内容,结束选区位于表格外,则需要开始选区内容重定位到单元格第一个元素
|
101
|
+
*/
|
102
|
+
fixEndSelectionElement(element, offset, ancestorCommonControl) {
|
103
|
+
if (!(ancestorCommonControl instanceof TableElement)) {
|
104
|
+
const lookupParentCell = ElementUtil.getParentByType(element, TableCellElement);
|
105
|
+
if (lookupParentCell) {
|
106
|
+
const lookupParentTbIndex = ElementUtil.getControlIndex(lookupParentCell.parent.parent);
|
107
|
+
const ancestorCommonControlIndex = ElementUtil.getControlIndex(ancestorCommonControl);
|
108
|
+
if (ancestorCommonControlIndex < lookupParentTbIndex) {
|
109
|
+
const rowLastLeafElement = ElementUtil.getLastLeafElement(lookupParentCell.parent);
|
110
|
+
if (!rowLastLeafElement) {
|
111
|
+
const rowLastLeafElement = ElementUtil.getLastLeafElement(lookupParentCell.parent);
|
112
|
+
throw new Error('当前元素处于表格内元素,未能定位到当前单元格首个元素');
|
113
|
+
}
|
114
|
+
return {
|
115
|
+
element: rowLastLeafElement,
|
116
|
+
offset: 1
|
117
|
+
};
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
return { element, offset };
|
122
|
+
}
|
123
|
+
}
|
124
|
+
//# sourceMappingURL=selection-overlays.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"selection-overlays.js","sourceRoot":"","sources":["../../src/med_editor/framework/selection-overlays.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAGN;IAFZ,cAAc,CAAgC;IACtD,YAAY,GAAwC,IAAI,GAAG,EAAE,CAAC;IAC9D,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAI,CAAC;IAEvD,oBAAoB;QAChB,IAAI,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QACjH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;SACnD;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,IAAI,CAAC,qBAAqB,EAAE;YACxD,iDAAiD;YACjD,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC;YACzC,OAAO;SACV;QACD,IAAI,SAAS,EAAE;YACX,MAAM,WAAW,GAAG,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;YACxH,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,WAAW,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO;SACV;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC;QACxG,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC;QACvC,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAChG,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;QACnC,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC;QACjC,MAAM,WAAW,GAAG,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;QACxH,2BAA2B;QAC3B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAClC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,WAAW,CAAC;IACpD,CAAC;IAEO,uBAAuB;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACvE;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAA4B,EAAE,GAAwC;QACnF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpD,qBAAqB;YACrB,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;gBACrD,SAAS;aACZ;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAClD;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAA4B,EAAE,GAAwC;QAC1F,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzD;IACL,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAAC,OAAoB,EAAE,MAAc,EAAE,qBAAoC;QACvG,IAAI,CAAC,CAAC,qBAAqB,YAAY,YAAY,CAAC,EAAE;YAClD,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAChF,IAAI,gBAAgB,EAAE;gBAClB,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE;iBAChE;gBACD,MAAM,mBAAmB,GAAG,WAAW,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxF,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;gBACtF,IAAI,0BAA0B,GAAG,mBAAmB,EAAE;oBAClD,MAAM,mBAAmB,GAAG,WAAW,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBACrF,IAAI,CAAC,mBAAmB,EAAE;wBACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;qBACjD;oBACD,OAAO;wBACH,OAAO,EAAE,mBAAmB;wBAC5B,MAAM,EAAE,CAAC;qBACZ,CAAC;iBACL;aACJ;SACJ;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,sBAAsB,CAAC,OAAoB,EAAE,MAAc,EAAE,qBAAoC;QACrG,IAAI,CAAC,CAAC,qBAAqB,YAAY,YAAY,CAAC,EAAE;YAClD,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAChF,IAAI,gBAAgB,EAAE;gBAClB,MAAM,mBAAmB,GAAG,WAAW,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxF,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;gBACtF,IAAI,0BAA0B,GAAG,mBAAmB,EAAE;oBAClD,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBACnF,IAAI,CAAC,kBAAkB,EAAE;wBACrB,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;wBACnF,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;qBACjD;oBACD,OAAO;wBACH,OAAO,EAAE,kBAAkB;wBAC3B,MAAM,EAAE,CAAC;qBACZ,CAAC;iBACL;aACJ;SACJ;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;CAEJ"}
|
@@ -0,0 +1,318 @@
|
|
1
|
+
import { ContentMenuItem } from './framework/element-event-define';
|
2
|
+
import { ElementReader } from './framework/element-reader';
|
3
|
+
import { Subject } from 'rxjs';
|
4
|
+
import { SelectionState } from './framework/document-selection';
|
5
|
+
import { BranchElement, Element, ICancelTokenFn, LeafElement, MarginProps, OrientType, Position, TextAlign, ViewOptions } from './framework/element-define';
|
6
|
+
import { DataElementInlineGroup, DataElementLeaf } from './framework/impl/data-element/data-element-base-impl';
|
7
|
+
import { ParagraphProps, TextProps } from './framework/element-props';
|
8
|
+
import { EditorContext } from './framework/document-context';
|
9
|
+
import { DocumentElement } from './framework/impl/document/doc-impl';
|
10
|
+
export declare class CanvasTextEditor {
|
11
|
+
private docScroll;
|
12
|
+
private holdSpace;
|
13
|
+
private ruleCanvas;
|
14
|
+
private editCanvasContainer;
|
15
|
+
private editCanvas;
|
16
|
+
private editInput;
|
17
|
+
private editCursor;
|
18
|
+
private cursorWrapper;
|
19
|
+
private scaleContainer;
|
20
|
+
private contentCtx;
|
21
|
+
viewOptions: ViewOptions;
|
22
|
+
docCtx: EditorContext;
|
23
|
+
private docComment;
|
24
|
+
private renderContext;
|
25
|
+
private documentPaint;
|
26
|
+
elementReader: ElementReader;
|
27
|
+
private documentEvent;
|
28
|
+
private documentSelection;
|
29
|
+
private documentInput;
|
30
|
+
private documentChange;
|
31
|
+
private selectionOverlays;
|
32
|
+
private docRule;
|
33
|
+
private docHistory;
|
34
|
+
private eventMap;
|
35
|
+
selectionChanged: Subject<SelectionState>;
|
36
|
+
beforeRenderSubject: Subject<void>;
|
37
|
+
afterRenderSubject: Subject<void>;
|
38
|
+
selectionState: SelectionState;
|
39
|
+
onContextMenuItemChanged: Subject<EditorContenxtProps>;
|
40
|
+
onShowDataElementEditPanelEvent: Subject<EditorPanelProps>;
|
41
|
+
onDblClickEvent: Subject<Event>;
|
42
|
+
onClickEvent: Subject<Event>;
|
43
|
+
onScrollViewEvent: Subject<number>;
|
44
|
+
onDocChangedEvent: Subject<void>;
|
45
|
+
constructor(docScroll: HTMLDivElement, holdSpace: HTMLDivElement, ruleCanvas: HTMLCanvasElement, editCanvasContainer: HTMLDivElement, editCanvas: HTMLCanvasElement, editInput: HTMLInputElement, editCursor: HTMLSpanElement, cursorWrapper: HTMLDivElement, scaleContainer: HTMLDivElement);
|
46
|
+
/**
|
47
|
+
* 设置标尺
|
48
|
+
*/
|
49
|
+
refreshDocRule(): void;
|
50
|
+
createDocViewer(): void;
|
51
|
+
measureMMToPixs(): number;
|
52
|
+
flushTask: (() => void) | null;
|
53
|
+
flushTaskThen: Array<(() => void)>;
|
54
|
+
private trackChangeState;
|
55
|
+
flushToSchedule(): void;
|
56
|
+
/**
|
57
|
+
* 触发文档改变事件
|
58
|
+
* @returns
|
59
|
+
*/
|
60
|
+
triggerDocChange(): void;
|
61
|
+
/**
|
62
|
+
* fn函数执行时,不触发onDocChange
|
63
|
+
* @param fn
|
64
|
+
*/
|
65
|
+
noEffectChange(fn: () => void): void;
|
66
|
+
loadDoc(data: any | DocumentElement): void;
|
67
|
+
/**
|
68
|
+
* 更新文档容器高度尺寸
|
69
|
+
*/
|
70
|
+
updateDocumentContainerSize(): void;
|
71
|
+
scrollView(evt: Event): void;
|
72
|
+
private refreshDocument;
|
73
|
+
private hitInfoChanged;
|
74
|
+
/**
|
75
|
+
* 设置光标
|
76
|
+
*/
|
77
|
+
private setCursor;
|
78
|
+
/**
|
79
|
+
* 判断是否光标可以设置接受编辑
|
80
|
+
* @returns
|
81
|
+
*/
|
82
|
+
private canSetCursor;
|
83
|
+
/**
|
84
|
+
* 修改光标
|
85
|
+
* @param newCursor
|
86
|
+
*/
|
87
|
+
private changeCursor;
|
88
|
+
/**
|
89
|
+
* 文档点击事件
|
90
|
+
*/
|
91
|
+
private docClickHandle;
|
92
|
+
/**
|
93
|
+
* 文档双击事件
|
94
|
+
* 处理全选当前段落
|
95
|
+
*/
|
96
|
+
private docDblClickHandle;
|
97
|
+
/**
|
98
|
+
* 获取当前光标所在的数据元
|
99
|
+
* @returns
|
100
|
+
*/
|
101
|
+
getCurrentDataElement(): DataElementInlineGroup | DataElementLeaf | null;
|
102
|
+
/**
|
103
|
+
* 设置当前光标所在的数据元的值
|
104
|
+
* @param val
|
105
|
+
*/
|
106
|
+
setCurrentDataElementValue(val: any): void;
|
107
|
+
/**
|
108
|
+
* 获取数据元位置
|
109
|
+
* @param element
|
110
|
+
* @returns
|
111
|
+
*/
|
112
|
+
getDataElementPosition(element: LeafElement): {
|
113
|
+
x: number;
|
114
|
+
y: number;
|
115
|
+
translateY: number;
|
116
|
+
};
|
117
|
+
/**
|
118
|
+
* 获取文档模型
|
119
|
+
* @returns
|
120
|
+
*/
|
121
|
+
getDocSchema(): any;
|
122
|
+
getDocSchemaJSON(): string;
|
123
|
+
/**
|
124
|
+
* 右键菜单
|
125
|
+
* @param evt
|
126
|
+
*/
|
127
|
+
onContextMenu(evt: MouseEvent): void;
|
128
|
+
resizeObserver: ResizeObserver | null;
|
129
|
+
listenContainerHeight(): void;
|
130
|
+
private updateDocHeight;
|
131
|
+
resetViewer(type?: 'demand' | 'force' | undefined): void;
|
132
|
+
/**
|
133
|
+
* 缩放视图
|
134
|
+
* @param scale
|
135
|
+
* @returns
|
136
|
+
*/
|
137
|
+
scaleView(scale: number): number;
|
138
|
+
getContainerHeight(): {
|
139
|
+
height: number;
|
140
|
+
width: number;
|
141
|
+
};
|
142
|
+
setCanvasProps(): void;
|
143
|
+
/**
|
144
|
+
* 在当前位置插入表格
|
145
|
+
* @param row
|
146
|
+
* @param col
|
147
|
+
*/
|
148
|
+
insertTable(rows: number, cols: number): void;
|
149
|
+
/**
|
150
|
+
* 打印所有文档
|
151
|
+
*/
|
152
|
+
printAllPages(): void;
|
153
|
+
/**
|
154
|
+
* 导出所有页到base64
|
155
|
+
*/
|
156
|
+
exportAllPagesToBase64(fileName: string): void;
|
157
|
+
exportPDF(): void;
|
158
|
+
/**
|
159
|
+
* 清除文档
|
160
|
+
*/
|
161
|
+
clearDoc(): void;
|
162
|
+
/**
|
163
|
+
* 新建文档
|
164
|
+
* @param options
|
165
|
+
*/
|
166
|
+
createNewDoc(doc?: DocumentElement | null): void;
|
167
|
+
destroy(): void;
|
168
|
+
/**
|
169
|
+
* 获取选区文本属性
|
170
|
+
* @returns
|
171
|
+
*/
|
172
|
+
getSelectionTextGroupProps(): TextProps | null;
|
173
|
+
getSelectionParaProps(): ParagraphProps | null;
|
174
|
+
/**
|
175
|
+
* 设置文本字体大小
|
176
|
+
* @param fontSize
|
177
|
+
* @returns
|
178
|
+
*/
|
179
|
+
setTextFontSize(fontSize: number): void;
|
180
|
+
/**
|
181
|
+
* 设置文本颜色
|
182
|
+
* @param color \
|
183
|
+
*/
|
184
|
+
setTextColor(color: string): void;
|
185
|
+
/**
|
186
|
+
* 设置文本字体名称
|
187
|
+
* @param font
|
188
|
+
*/
|
189
|
+
setTextFont(font: string): void;
|
190
|
+
/**
|
191
|
+
* 应用选中文本格式,用于批量设置格式,例如:格式刷
|
192
|
+
* @param newStyle
|
193
|
+
*/
|
194
|
+
applyStyle(newStyle: TextProps): void;
|
195
|
+
/**
|
196
|
+
* 开启格式刷
|
197
|
+
*/
|
198
|
+
enableFormatBrush(): ICancelTokenFn | null;
|
199
|
+
/**
|
200
|
+
* 设置文本背景颜色
|
201
|
+
* @param color
|
202
|
+
*/
|
203
|
+
setTextBackColor(color: string): void;
|
204
|
+
/**
|
205
|
+
* 切换文本加粗、下划线、删除等文本样式
|
206
|
+
* @param isEffective
|
207
|
+
* @param style
|
208
|
+
* @param matchValue
|
209
|
+
*/
|
210
|
+
switchTextStyle<P extends keyof TextProps, V extends TextProps[P]>(isEffective: boolean, style: P, matchValue: V, defaultValue?: any): void;
|
211
|
+
/**
|
212
|
+
* 修改字间距
|
213
|
+
*/
|
214
|
+
setLetterSpace(letterSpace: number): void;
|
215
|
+
/**
|
216
|
+
* 设置段落对齐
|
217
|
+
* @param align
|
218
|
+
*/
|
219
|
+
switchParaAlign(align: TextAlign): void;
|
220
|
+
combineCell(): void;
|
221
|
+
/**
|
222
|
+
* 切换当前段落项目符号状态
|
223
|
+
*/
|
224
|
+
setParagraphNumberType(): void;
|
225
|
+
/**
|
226
|
+
* 删除当前批注
|
227
|
+
* @param id
|
228
|
+
*/
|
229
|
+
removeComment(id: string): void;
|
230
|
+
/**
|
231
|
+
* 移除焦点所在的批注
|
232
|
+
*/
|
233
|
+
removeCurrentComment(): void;
|
234
|
+
/**
|
235
|
+
* 插入批注
|
236
|
+
*/
|
237
|
+
insertComment(): void;
|
238
|
+
/**
|
239
|
+
* 清除所有批注
|
240
|
+
*/
|
241
|
+
clearAllComments(): void;
|
242
|
+
cutTable(): void;
|
243
|
+
/**
|
244
|
+
* 初始化当前文档创建用户信息
|
245
|
+
* 一份文档只需要设置一次
|
246
|
+
*/
|
247
|
+
initCurrentDocUser(userId: string, userName: string, date: string): void;
|
248
|
+
/**
|
249
|
+
* 验证文档内容
|
250
|
+
* @returns
|
251
|
+
*/
|
252
|
+
validate(): boolean;
|
253
|
+
/**
|
254
|
+
* 撤销
|
255
|
+
*/
|
256
|
+
undo(): void;
|
257
|
+
/**
|
258
|
+
* 恢复
|
259
|
+
*/
|
260
|
+
redo(): void;
|
261
|
+
/**
|
262
|
+
* 是否可以撤销
|
263
|
+
*/
|
264
|
+
canUndo(): boolean;
|
265
|
+
/**
|
266
|
+
* 是否可以恢复
|
267
|
+
*/
|
268
|
+
canRedo(): boolean;
|
269
|
+
switchTrackChanges(eleCtx?: BranchElement | null): void;
|
270
|
+
get trackTipsChanged(): Subject<{
|
271
|
+
pos: Position;
|
272
|
+
tips: import("./framework/element-event-define").ITrackTips;
|
273
|
+
}>;
|
274
|
+
switchFullViewPage(): void;
|
275
|
+
getSelectedJSON(): string;
|
276
|
+
getSelectedText(): string;
|
277
|
+
/**
|
278
|
+
* 设置纸张方向
|
279
|
+
* @param orientation
|
280
|
+
*/
|
281
|
+
setPaperOrient(orientation: OrientType): void;
|
282
|
+
/**
|
283
|
+
* 设置纸张大小,单位为毫米(mm)
|
284
|
+
* @param width
|
285
|
+
* @param height
|
286
|
+
*/
|
287
|
+
setPaperSize(width: number, height: number): void;
|
288
|
+
/**
|
289
|
+
* 插入强制换页符
|
290
|
+
*/
|
291
|
+
insertPageBreakPara(): void;
|
292
|
+
/**
|
293
|
+
* 显示当前元素到视图中
|
294
|
+
* @param element
|
295
|
+
*/
|
296
|
+
bringToView(element: Element): void;
|
297
|
+
/**
|
298
|
+
* 设置当前文档页边距
|
299
|
+
*/
|
300
|
+
setDocumentMargin(pageMargin: Partial<MarginProps>): void;
|
301
|
+
/**
|
302
|
+
* 插入元素
|
303
|
+
* @param targetElement
|
304
|
+
* @param targetOffset
|
305
|
+
* @param destEleArray
|
306
|
+
* @returns
|
307
|
+
*/
|
308
|
+
insertElement(targetElement: Element, targetOffset: number, destEleArray: Array<Element>): Element | null;
|
309
|
+
}
|
310
|
+
export declare type EditorCurrentPos = {
|
311
|
+
pos: Position;
|
312
|
+
};
|
313
|
+
export declare type EditorContenxtProps = {
|
314
|
+
menus: Array<ContentMenuItem>;
|
315
|
+
} & EditorCurrentPos;
|
316
|
+
export declare type EditorPanelProps = {
|
317
|
+
type: string;
|
318
|
+
} & EditorCurrentPos;
|