@hailin-zheng/editor-core 2.2.2 → 2.2.4
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/editor.css +96 -12
- package/index-cjs.d.ts +1 -0
- package/index-cjs.js +757 -278
- package/index-cjs.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +752 -278
- package/index.js.map +1 -1
- package/med_editor/doc-editor.d.ts +37 -5
- package/med_editor/framework/document-change.d.ts +21 -2
- package/med_editor/framework/document-context.d.ts +5 -0
- package/med_editor/framework/document-input-cursor.d.ts +4 -15
- package/med_editor/framework/element-define.d.ts +7 -0
- package/med_editor/framework/element-event-define.d.ts +2 -5
- package/med_editor/framework/element-type-handler.d.ts +0 -1
- package/med_editor/framework/impl/data-element/data-container-impl.d.ts +25 -0
- package/med_editor/framework/impl/document/doc-body-impl.d.ts +0 -1
- package/med_editor/framework/impl/document/doc-impl.d.ts +1 -0
- package/med_editor/framework/impl/index.d.ts +1 -0
- package/med_editor/framework/impl/table/table-split-cell.d.ts +3 -2
- package/med_editor/framework/infrastructure/event-subject.d.ts +1 -0
- package/med_editor/framework/selection/document-selection.d.ts +1 -6
- package/med_editor/framework/suggestions/input-suggestions.d.ts +29 -0
- package/med_editor/framework/util/common-util.d.ts +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
@@ -40,9 +40,9 @@ class ElementEvent {
|
|
40
40
|
}
|
41
41
|
}
|
42
42
|
class ContentMenuItem {
|
43
|
-
icon;
|
44
43
|
caption;
|
45
|
-
|
44
|
+
checked;
|
45
|
+
click = () => { };
|
46
46
|
subItems = [];
|
47
47
|
}
|
48
48
|
/**
|
@@ -973,6 +973,12 @@ function generatePatch(doc, clear = true) {
|
|
973
973
|
if ('insert' in op.ops) {
|
974
974
|
insertOpsMap.set(ele, op);
|
975
975
|
}
|
976
|
+
//当前为新插入的元素
|
977
|
+
if ('insText' in op.ops) {
|
978
|
+
if (insertOpsMap.has(ele)) {
|
979
|
+
continue;
|
980
|
+
}
|
981
|
+
}
|
976
982
|
// if ('insert' in op.ops) {
|
977
983
|
// op.ops.insert = ele.clone(true);
|
978
984
|
// const log = getOpsLog(ele, op.ops);
|
@@ -1028,7 +1034,11 @@ class Subscription {
|
|
1028
1034
|
class EventSourceCore {
|
1029
1035
|
closed = false;
|
1030
1036
|
subs = [];
|
1037
|
+
state = 'running';
|
1031
1038
|
next(data) {
|
1039
|
+
if (this.state === 'pause') {
|
1040
|
+
return;
|
1041
|
+
}
|
1032
1042
|
const subs = [...this.subs];
|
1033
1043
|
subs.forEach((sub) => {
|
1034
1044
|
sub.invoke(data);
|
@@ -1172,6 +1182,8 @@ class Rect {
|
|
1172
1182
|
width = 0;
|
1173
1183
|
height = 0;
|
1174
1184
|
}
|
1185
|
+
// 定义文本占用高度系数
|
1186
|
+
const TEXT_HEIGHT_FACTOR = 1.4;
|
1175
1187
|
/**
|
1176
1188
|
* 修改标志
|
1177
1189
|
*/
|
@@ -1674,6 +1686,7 @@ class PageOptions {
|
|
1674
1686
|
}
|
1675
1687
|
class ViewOptions {
|
1676
1688
|
copyRightInfo;
|
1689
|
+
trialVersion = false;
|
1677
1690
|
watermark;
|
1678
1691
|
drawLineRectColor = "rgb(0,0,0)";
|
1679
1692
|
drawCharRectColor = "rgb(0,0,0)";
|
@@ -1682,6 +1695,8 @@ class ViewOptions {
|
|
1682
1695
|
editorVersion = '';
|
1683
1696
|
defaultFontSize = 14;
|
1684
1697
|
defaultColor = "#000000";
|
1698
|
+
currentFontSize = 14;
|
1699
|
+
currentFontName = '宋体';
|
1685
1700
|
selectionOverlaysColor = 'rgb(131,175,155,0.5)';
|
1686
1701
|
dataEleOverlaysColor = 'rgb(131,175,155,0.5)';
|
1687
1702
|
dataEleFocusedBgColor = 'rgb(131,175,155,0.8)';
|
@@ -1732,6 +1747,7 @@ class ViewOptions {
|
|
1732
1747
|
//显示段落回车符号
|
1733
1748
|
showEnterSymbol = false;
|
1734
1749
|
enableVisibleExpression = false;
|
1750
|
+
shapeRendering = 'auto';
|
1735
1751
|
get fullPageView() {
|
1736
1752
|
return this._fullPageView;
|
1737
1753
|
}
|
@@ -1779,6 +1795,8 @@ class ViewOptions {
|
|
1779
1795
|
_showTrackChanges = true;
|
1780
1796
|
//是否显示审阅痕迹提示
|
1781
1797
|
_showTrackChangesTip = true;
|
1798
|
+
//是否开启留痕
|
1799
|
+
enableTrackChanges = false;
|
1782
1800
|
get showTrackChanges() {
|
1783
1801
|
return this._showTrackChanges;
|
1784
1802
|
}
|
@@ -1807,6 +1825,8 @@ class ViewOptions {
|
|
1807
1825
|
onChange = new Subject();
|
1808
1826
|
//打印模式,普通模式,续打模式
|
1809
1827
|
printMode = 'normal';
|
1828
|
+
//是否开启候选词输入联想
|
1829
|
+
enableSuggestions = false;
|
1810
1830
|
constructor() {
|
1811
1831
|
}
|
1812
1832
|
}
|
@@ -2889,7 +2909,7 @@ class DataDecorateElement extends LeafElement {
|
|
2889
2909
|
createRenderObject() {
|
2890
2910
|
const render = new DataDecorateRenderObject(this);
|
2891
2911
|
//render.rect.width = this.dProps.size / 2;
|
2892
|
-
render.rect.width =
|
2912
|
+
render.rect.width = 1;
|
2893
2913
|
render.rect.height = 14;
|
2894
2914
|
return render;
|
2895
2915
|
}
|
@@ -3626,6 +3646,7 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
3626
3646
|
};
|
3627
3647
|
const pageCorner = this.exportPageCornerHTML(event);
|
3628
3648
|
const pageNum = this.exportPageNumHTML(event);
|
3649
|
+
const copyright = this.exportCopyRight(event);
|
3629
3650
|
return {
|
3630
3651
|
sel: "svg",
|
3631
3652
|
isCompleted: true,
|
@@ -3636,11 +3657,11 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
3636
3657
|
height: this.rect.height - 1,
|
3637
3658
|
viewBox: `0 0 ${this.rect.width} ${this.rect.height - 1}`,
|
3638
3659
|
overflow: "hidden",
|
3639
|
-
"shape-rendering":
|
3660
|
+
"shape-rendering": event.options.shapeRendering
|
3640
3661
|
},
|
3641
3662
|
},
|
3642
3663
|
children: [
|
3643
|
-
pageCorner, highlight, ...CommonUtil.toArray(event.getChildNodes(this)), pageNum, selection
|
3664
|
+
pageCorner, copyright, highlight, ...CommonUtil.toArray(event.getChildNodes(this)), pageNum, selection
|
3644
3665
|
]
|
3645
3666
|
};
|
3646
3667
|
}
|
@@ -3672,6 +3693,41 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
3672
3693
|
pageCorner.children?.push(ElementUtil.getStrokeSvgPath(`M ${paddingPos.x + lineWidth} ${paddingPos.y} L ${paddingPos.x} ${paddingPos.y} L ${paddingPos.x} ${paddingPos.y + lineWidth}`, "grey", drawLineWidth));
|
3673
3694
|
return pageCorner;
|
3674
3695
|
}
|
3696
|
+
exportCopyRight(event) {
|
3697
|
+
if (!event.options.trialVersion) {
|
3698
|
+
return null;
|
3699
|
+
}
|
3700
|
+
const str = "\u6f14\u793a\u7248\u672c";
|
3701
|
+
const textProps = new TextProps();
|
3702
|
+
textProps.color = "#000";
|
3703
|
+
textProps.fontName = '仿宋';
|
3704
|
+
textProps.fontSize = 80;
|
3705
|
+
textProps.fontStyle = 'italic';
|
3706
|
+
event.renderCtx.contentContext.measureText(str, textProps);
|
3707
|
+
const getTextRotationAngle = (width, height) => {
|
3708
|
+
return Math.atan(height / width) * 180 / Math.PI;
|
3709
|
+
};
|
3710
|
+
const angle = getTextRotationAngle(this.rect.width, this.rect.height);
|
3711
|
+
return {
|
3712
|
+
sel: 'text',
|
3713
|
+
text: str,
|
3714
|
+
data: {
|
3715
|
+
ns: "http://www.w3.org/2000/svg",
|
3716
|
+
attrs: {
|
3717
|
+
transform: `rotate(${360 - angle})`,
|
3718
|
+
'transform-origin': 'center',
|
3719
|
+
'dominant-baseline': 'Hanging',
|
3720
|
+
'text-anchor': 'middle',
|
3721
|
+
'font-family': textProps.fontName,
|
3722
|
+
'font-size': textProps.fontSize,
|
3723
|
+
"stroke": textProps.color,
|
3724
|
+
'fill': '#fff',
|
3725
|
+
x: this.rect.width / 2,
|
3726
|
+
y: this.rect.height / 2,
|
3727
|
+
}
|
3728
|
+
},
|
3729
|
+
};
|
3730
|
+
}
|
3675
3731
|
}
|
3676
3732
|
class DocumentFactory extends ElementFactory {
|
3677
3733
|
match(type) {
|
@@ -4182,8 +4238,6 @@ function getCurrentParaGroupRenders(r) {
|
|
4182
4238
|
}
|
4183
4239
|
|
4184
4240
|
class DocumentBodyElement extends BlockContainerElement {
|
4185
|
-
//当前区域内是否留痕
|
4186
|
-
trackChanges = false;
|
4187
4241
|
constructor() {
|
4188
4242
|
super('body');
|
4189
4243
|
//this.editMode = EditMode.Free;
|
@@ -4308,7 +4362,6 @@ class TableCellElement extends BlockContainerElement {
|
|
4308
4362
|
//this.addPropValueChangedSub(this.props);
|
4309
4363
|
}
|
4310
4364
|
beginMeasure(data) {
|
4311
|
-
//不被合并的单元格
|
4312
4365
|
if (!this.length) {
|
4313
4366
|
this.addChild(data.createParaFn());
|
4314
4367
|
}
|
@@ -4678,7 +4731,7 @@ class TextGroupRenderObject extends LeafRenderObject {
|
|
4678
4731
|
}
|
4679
4732
|
measure() {
|
4680
4733
|
this.rect.width = this.textMeasures.reduce((prev, curr) => prev + curr.actualSize, 0);
|
4681
|
-
this.rect.height = Math.ceil(this.element.props.fontSize *
|
4734
|
+
this.rect.height = Math.ceil(this.element.props.fontSize * TEXT_HEIGHT_FACTOR);
|
4682
4735
|
// this.element.fontBoundingBox.fontBoundingBoxAscent + this.element.fontBoundingBox.fontBoundingBoxDescent;
|
4683
4736
|
}
|
4684
4737
|
exportSVG(event) {
|
@@ -6600,17 +6653,20 @@ class DocumentSelection {
|
|
6600
6653
|
ss.endOffset = range.endOffset;
|
6601
6654
|
ss.endControlIndex = ElementUtil.getControlIndex(range.endControl);
|
6602
6655
|
ss.ancestorCommonControl = DocumentSelection.getAncestorCommonControl(ss.startControl, ss.endControl);
|
6603
|
-
ss.enableTrackChanges = this.getEnableTrackChanges(range.startControl);
|
6604
6656
|
ss.rangeDirty = false;
|
6605
6657
|
return true;
|
6606
6658
|
}
|
6607
|
-
|
6608
|
-
|
6609
|
-
|
6610
|
-
|
6611
|
-
|
6612
|
-
|
6613
|
-
|
6659
|
+
isSelectionChanged() {
|
6660
|
+
if (!this.snapshotSelectionState) {
|
6661
|
+
return true;
|
6662
|
+
}
|
6663
|
+
if (this.selectionState.startControl !== this.snapshotSelectionState.startControl || this.selectionState.startOffset !== this.snapshotSelectionState.startOffset) {
|
6664
|
+
return true;
|
6665
|
+
}
|
6666
|
+
if (this.selectionState.endControl !== this.snapshotSelectionState.endControl || this.selectionState.endOffset !== this.snapshotSelectionState.endOffset) {
|
6667
|
+
return true;
|
6668
|
+
}
|
6669
|
+
return false;
|
6614
6670
|
}
|
6615
6671
|
/**
|
6616
6672
|
* 转换选区内容
|
@@ -6707,8 +6763,6 @@ class SelectionState {
|
|
6707
6763
|
renderContainer;
|
6708
6764
|
//光标所在的位置,当前位置时相对文档的位置,而非DOM页面中的位置
|
6709
6765
|
cursorPos;
|
6710
|
-
//当前选区的上下文是否支持留痕修改
|
6711
|
-
enableTrackChanges = false;
|
6712
6766
|
constructor() {
|
6713
6767
|
this.clear();
|
6714
6768
|
}
|
@@ -8416,7 +8470,10 @@ class DataElementDate extends DataElementInlineGroup {
|
|
8416
8470
|
this.props.value = '';
|
8417
8471
|
return;
|
8418
8472
|
}
|
8419
|
-
|
8473
|
+
let format = 'YYYY-MM-DD';
|
8474
|
+
if (this.props.format) {
|
8475
|
+
format = this.props.format;
|
8476
|
+
}
|
8420
8477
|
const date = moment(val, format);
|
8421
8478
|
if (!date.isValid()) {
|
8422
8479
|
return;
|
@@ -8947,6 +9004,102 @@ class DataElementTextFactory extends DataElementBaseFactory {
|
|
8947
9004
|
}
|
8948
9005
|
}
|
8949
9006
|
|
9007
|
+
/**
|
9008
|
+
* 数据块容器,包裹多个段落
|
9009
|
+
*/
|
9010
|
+
class DataContainerElement extends BlockContainerElement {
|
9011
|
+
constructor() {
|
9012
|
+
super('data-container');
|
9013
|
+
this.props = new DataContainerProps();
|
9014
|
+
this.addEvent('GotCursor', (evt) => {
|
9015
|
+
this.isFocused = true;
|
9016
|
+
this.refreshView();
|
9017
|
+
});
|
9018
|
+
this.addEvent('LostCursor', (evt) => {
|
9019
|
+
this.isFocused = false;
|
9020
|
+
this.refreshView();
|
9021
|
+
});
|
9022
|
+
}
|
9023
|
+
createRenderObject() {
|
9024
|
+
return new DataContainerRenderObject(this);
|
9025
|
+
}
|
9026
|
+
beginMeasure(data) {
|
9027
|
+
if (!this.length) {
|
9028
|
+
this.addChild(data.createParaFn());
|
9029
|
+
}
|
9030
|
+
super.beginMeasure(data);
|
9031
|
+
}
|
9032
|
+
serialize() {
|
9033
|
+
const p = {
|
9034
|
+
type: this.type,
|
9035
|
+
props: {}
|
9036
|
+
};
|
9037
|
+
if (this.props.id) {
|
9038
|
+
p['id'] = this.props.id;
|
9039
|
+
}
|
9040
|
+
if (this.props.name) {
|
9041
|
+
p['name'] = this.props.name;
|
9042
|
+
}
|
9043
|
+
if (this.props.caption) {
|
9044
|
+
p['caption'] = this.props.caption;
|
9045
|
+
}
|
9046
|
+
return p;
|
9047
|
+
}
|
9048
|
+
clone(data) {
|
9049
|
+
const clone = new DataContainerElement();
|
9050
|
+
clone.props.id = this.props.id;
|
9051
|
+
clone.props.name = this.props.name;
|
9052
|
+
clone.props.caption = this.props.caption;
|
9053
|
+
cloneElementBase(this, clone);
|
9054
|
+
cloneChildren(this, clone, data);
|
9055
|
+
return clone;
|
9056
|
+
}
|
9057
|
+
}
|
9058
|
+
class DataContainerRenderObject extends MuiltBlockLineRenderObject {
|
9059
|
+
clone(cloneData = true) {
|
9060
|
+
const cloneRender = new DataContainerRenderObject(this.element);
|
9061
|
+
cloneRender.rect = ElementUtil.cloneRect(this.rect);
|
9062
|
+
if (cloneData) {
|
9063
|
+
for (let i = 0; i < this.length; i++) {
|
9064
|
+
cloneRender.addChild(this.getChild(i).clone());
|
9065
|
+
}
|
9066
|
+
}
|
9067
|
+
return cloneRender;
|
9068
|
+
}
|
9069
|
+
exportSVG(event) {
|
9070
|
+
const t = super.exportSVG(event);
|
9071
|
+
if (event.mode === 'view') {
|
9072
|
+
const border = ElementUtil.getStrokeSvgPath(ElementUtil.getRectPath(0, 0, this.rect.width, this.rect.height), '#000', 0.5);
|
9073
|
+
t.children = [border];
|
9074
|
+
}
|
9075
|
+
return t;
|
9076
|
+
}
|
9077
|
+
}
|
9078
|
+
class DataContainerFactory extends ElementFactory {
|
9079
|
+
match(type) {
|
9080
|
+
return type === 'data-container';
|
9081
|
+
}
|
9082
|
+
createElement(data) {
|
9083
|
+
const element = new DataContainerElement();
|
9084
|
+
const props = data.props;
|
9085
|
+
if (props?.id) {
|
9086
|
+
element.props.id = props.id;
|
9087
|
+
}
|
9088
|
+
if (props?.name) {
|
9089
|
+
element.props.name = props.name;
|
9090
|
+
}
|
9091
|
+
if (props?.caption) {
|
9092
|
+
element.props.caption = props.caption;
|
9093
|
+
}
|
9094
|
+
return element;
|
9095
|
+
}
|
9096
|
+
}
|
9097
|
+
class DataContainerProps {
|
9098
|
+
caption;
|
9099
|
+
id;
|
9100
|
+
name;
|
9101
|
+
}
|
9102
|
+
|
8950
9103
|
/**
|
8951
9104
|
* 当前数据元内容长度小于最小长度时,需要当前元素撑开以达到最小长度
|
8952
9105
|
*/
|
@@ -12904,6 +13057,29 @@ class PaintContent {
|
|
12904
13057
|
}
|
12905
13058
|
}
|
12906
13059
|
|
13060
|
+
/**
|
13061
|
+
* 处理文档输入联想
|
13062
|
+
*/
|
13063
|
+
class DocInputSuggestions {
|
13064
|
+
currentInputTextGroup;
|
13065
|
+
currentMatchedText = '';
|
13066
|
+
currentInputOffset = 0;
|
13067
|
+
suggestionsList = [];
|
13068
|
+
prepareSuggestions = [];
|
13069
|
+
selectedIndex = -1;
|
13070
|
+
clear() {
|
13071
|
+
this.prepareSuggestions.length = 0;
|
13072
|
+
this.currentInputTextGroup = undefined;
|
13073
|
+
this.selectedIndex = -1;
|
13074
|
+
this.currentInputOffset = 0;
|
13075
|
+
this.currentMatchedText = '';
|
13076
|
+
}
|
13077
|
+
destroy() {
|
13078
|
+
this.clear();
|
13079
|
+
this.suggestionsList.length = 0;
|
13080
|
+
}
|
13081
|
+
}
|
13082
|
+
|
12907
13083
|
/**
|
12908
13084
|
* 当前打开的文档的上下文信息,当前文档所有的属性设置都暴露在上下文中
|
12909
13085
|
*/
|
@@ -12922,6 +13098,10 @@ class EditorContext {
|
|
12922
13098
|
commentFlag = false;
|
12923
13099
|
//留痕元素存在的标志,用于判断文档空间进行布局
|
12924
13100
|
trackFlag = false;
|
13101
|
+
//suggestionsList: Array<ISuggestionData> = [];
|
13102
|
+
//currentSuggestionsList: Array<ISuggestionData> = [];
|
13103
|
+
suggestions = new DocInputSuggestions();
|
13104
|
+
onKeyDownEvent = new Subject();
|
12925
13105
|
constructor(selectionState, viewOptions) {
|
12926
13106
|
this.selectionState = selectionState;
|
12927
13107
|
this.viewOptions = viewOptions;
|
@@ -12972,6 +13152,7 @@ class EditorContext {
|
|
12972
13152
|
clear() {
|
12973
13153
|
this.selectionState.clear();
|
12974
13154
|
this.isDirty = false;
|
13155
|
+
this.suggestions.clear();
|
12975
13156
|
//this.clearEleDepMaps();
|
12976
13157
|
}
|
12977
13158
|
get defaultCtx() {
|
@@ -13014,6 +13195,7 @@ class EditorContext {
|
|
13014
13195
|
//this.ele_types_handlers.length = 0;
|
13015
13196
|
//this.imageLoader.clear();
|
13016
13197
|
this._document = null;
|
13198
|
+
this.suggestions.destroy();
|
13017
13199
|
}
|
13018
13200
|
/**
|
13019
13201
|
* 切换行打印模式
|
@@ -13034,6 +13216,7 @@ class EditorContext {
|
|
13034
13216
|
//删除旧节点
|
13035
13217
|
oldDataElement.remove();
|
13036
13218
|
}
|
13219
|
+
currentRefreshType = null;
|
13037
13220
|
get refreshType() {
|
13038
13221
|
if (!this._document) {
|
13039
13222
|
return null;
|
@@ -13491,6 +13674,10 @@ class ParagraphMeasure {
|
|
13491
13674
|
child.rect.width = tab - currTabX;
|
13492
13675
|
}
|
13493
13676
|
}
|
13677
|
+
//如果当前段落行只包含当前换行元素或者段落元素,则根据当前输入设置,自动将行高度撑开到理想高度font-size*1.4
|
13678
|
+
if (this.lineLength() === 1 && child.element && (child.element.type === 'br' || child.element.type === 'psym')) {
|
13679
|
+
child.rect.height = Math.ceil(options.defaultFontSize * TEXT_HEIGHT_FACTOR);
|
13680
|
+
}
|
13494
13681
|
this.arrange();
|
13495
13682
|
this.updateHeight(child);
|
13496
13683
|
},
|
@@ -15016,6 +15203,7 @@ class ElementReader {
|
|
15016
15203
|
this.addFactory(TabFactory);
|
15017
15204
|
this.addFactory(PermanentTeethFactory);
|
15018
15205
|
this.addFactory(SVGFactory);
|
15206
|
+
this.addFactory(DataContainerFactory);
|
15019
15207
|
// this.registerReadFunc<TrackRunProps>('ins-run', (data) => {
|
15020
15208
|
// const props = new TrackRunProps(data.type);
|
15021
15209
|
// props.userId = data.userId;
|
@@ -15174,26 +15362,37 @@ class DocumentEvent {
|
|
15174
15362
|
};
|
15175
15363
|
}
|
15176
15364
|
bindEvent() {
|
15177
|
-
this.
|
15178
|
-
this.
|
15179
|
-
|
15180
|
-
|
15181
|
-
|
15182
|
-
|
15183
|
-
|
15184
|
-
|
15185
|
-
|
15186
|
-
|
15187
|
-
|
15188
|
-
|
15189
|
-
|
15190
|
-
|
15191
|
-
|
15192
|
-
|
15193
|
-
|
15194
|
-
|
15195
|
-
|
15196
|
-
|
15365
|
+
this.docCtx.onKeyDownEvent.subscribe(evt => {
|
15366
|
+
if (!this.docCtx.selectionState.editable) {
|
15367
|
+
return;
|
15368
|
+
}
|
15369
|
+
const os = ElementUtil.getOSPlatform();
|
15370
|
+
if (evt.keyCode === 37) {
|
15371
|
+
this.moveCursorToLeft();
|
15372
|
+
}
|
15373
|
+
else if (evt.keyCode === 39) {
|
15374
|
+
this.moveCursorToRight();
|
15375
|
+
}
|
15376
|
+
else if (evt.keyCode === 38) {
|
15377
|
+
this.moveCursorToUpOrDown(true);
|
15378
|
+
}
|
15379
|
+
else if (evt.keyCode === 40) {
|
15380
|
+
this.moveCursorToUpOrDown(false);
|
15381
|
+
}
|
15382
|
+
else if (evt.keyCode === 36) {
|
15383
|
+
this.moveCursorToLineStart();
|
15384
|
+
}
|
15385
|
+
else if (evt.keyCode === 35) {
|
15386
|
+
this.moveCursorToLineEnd();
|
15387
|
+
}
|
15388
|
+
else if (evt.ctrlKey && evt.keyCode === 65 && os !== 'Mac') {
|
15389
|
+
evt.preventDefault();
|
15390
|
+
this.selectAll();
|
15391
|
+
}
|
15392
|
+
else if (evt.metaKey && evt.keyCode === 65 && os === 'Mac') {
|
15393
|
+
evt.preventDefault();
|
15394
|
+
this.selectAll();
|
15395
|
+
}
|
15197
15396
|
});
|
15198
15397
|
}
|
15199
15398
|
addSubEvent(sub) {
|
@@ -16383,15 +16582,15 @@ class DocumentInput {
|
|
16383
16582
|
//输入内容事件
|
16384
16583
|
onInputEvent = new Subject();
|
16385
16584
|
//backspace 键盘事件
|
16386
|
-
onBackspaceEvent = new Subject();
|
16585
|
+
//onBackspaceEvent: Subject<KeyboardEvent> = new Subject();
|
16387
16586
|
//delete 键盘事件
|
16388
|
-
onDeleteEvent = new Subject();
|
16587
|
+
//onDeleteEvent: Subject<KeyboardEvent> = new Subject();
|
16389
16588
|
//enter 键盘事件
|
16390
|
-
onEnterEvent = new Subject();
|
16589
|
+
//onEnterEvent: Subject<void> = new Subject();
|
16391
16590
|
//左键
|
16392
|
-
onLeftEvent = new Subject();
|
16591
|
+
//onLeftEvent: Subject<void> = new Subject();
|
16393
16592
|
//右键
|
16394
|
-
onRightEvent = new Subject();
|
16593
|
+
//onRightEvent: Subject<void> = new Subject();
|
16395
16594
|
//复制
|
16396
16595
|
onCopyEvent = new Subject();
|
16397
16596
|
//剪切
|
@@ -16399,30 +16598,31 @@ class DocumentInput {
|
|
16399
16598
|
//粘贴
|
16400
16599
|
onPasteEvent = new Subject();
|
16401
16600
|
//插入换行符
|
16402
|
-
onInsertBr = new Subject();
|
16601
|
+
//onInsertBr: Subject<void> = new Subject();
|
16403
16602
|
//ctrl+A 全选事件
|
16404
|
-
onSelectAllEvent = new Subject();
|
16603
|
+
//onSelectAllEvent: Subject<void> = new Subject();
|
16405
16604
|
//home 事件
|
16406
|
-
onHomeEvent = new Subject();
|
16605
|
+
//onHomeEvent: Subject<void> = new Subject();
|
16407
16606
|
//end 事件
|
16408
|
-
onEndEvent = new Subject();
|
16409
|
-
onUpEvent = new Subject();
|
16410
|
-
onDownEvent = new Subject();
|
16411
|
-
onTabKeyEvent = new Subject();
|
16607
|
+
//onEndEvent: Subject<void> = new Subject();
|
16608
|
+
//onUpEvent: Subject<void> = new Subject();
|
16609
|
+
//onDownEvent: Subject<void> = new Subject();
|
16610
|
+
//onTabKeyEvent: Subject<void> = new Subject();
|
16611
|
+
onKeyDownEvent = new Subject();
|
16412
16612
|
constructor(docCtx) {
|
16413
16613
|
this.docCtx = docCtx;
|
16414
16614
|
}
|
16415
16615
|
composition = false;
|
16416
16616
|
inputTargetStrPosition = -1;
|
16417
|
-
|
16617
|
+
inputTargetStrLength = 0;
|
16418
16618
|
inputEle;
|
16419
16619
|
correctInputEle(ele, str, pos) {
|
16420
16620
|
this.inputTargetStrPosition = pos;
|
16421
|
-
this.
|
16621
|
+
this.inputTargetStrLength = str ? str.length : 0;
|
16422
16622
|
this.inputEle = ele;
|
16423
16623
|
}
|
16424
16624
|
getEventListener() {
|
16425
|
-
|
16625
|
+
ElementUtil.getOSPlatform();
|
16426
16626
|
return {
|
16427
16627
|
input: (evt) => {
|
16428
16628
|
const target = evt.target;
|
@@ -16440,7 +16640,7 @@ class DocumentInput {
|
|
16440
16640
|
this.inputTargetStrPosition = startOffset;
|
16441
16641
|
this.inputEle = startControl;
|
16442
16642
|
if (startControl instanceof TextGroupElement) {
|
16443
|
-
this.
|
16643
|
+
this.inputTargetStrLength = startControl.text.length;
|
16444
16644
|
}
|
16445
16645
|
},
|
16446
16646
|
compositionupdate: (evt) => {
|
@@ -16460,60 +16660,48 @@ class DocumentInput {
|
|
16460
16660
|
this.composition = false;
|
16461
16661
|
this.inputEle = null;
|
16462
16662
|
this.inputTargetStrPosition = -1;
|
16463
|
-
this.
|
16663
|
+
this.inputTargetStrLength = 0;
|
16464
16664
|
},
|
16465
16665
|
keydown: (evt) => {
|
16666
|
+
this.onKeyDownEvent.next(evt);
|
16667
|
+
if (evt.defaultPrevented) {
|
16668
|
+
return;
|
16669
|
+
}
|
16466
16670
|
const keyEvent = new KeyboradElementEvent(this.docCtx);
|
16467
16671
|
keyEvent.sourceEvent = evt;
|
16468
16672
|
if (DocumentEvent.invokeEvent('ElementKeyDown', this.docCtx.selectionState.startControl, keyEvent, 'All')) {
|
16469
16673
|
return;
|
16470
16674
|
}
|
16471
|
-
if (!this.docCtx.selectionState.editable) {
|
16472
|
-
|
16473
|
-
}
|
16474
|
-
if (evt.keyCode === 8) {
|
16475
|
-
|
16476
|
-
}
|
16477
|
-
|
16478
|
-
|
16479
|
-
|
16480
|
-
else if (evt.keyCode ===
|
16481
|
-
|
16482
|
-
}
|
16483
|
-
|
16484
|
-
|
16485
|
-
}
|
16486
|
-
|
16487
|
-
|
16488
|
-
}
|
16489
|
-
|
16490
|
-
|
16491
|
-
|
16492
|
-
|
16493
|
-
|
16494
|
-
|
16495
|
-
|
16496
|
-
else if (evt.keyCode ===
|
16497
|
-
|
16498
|
-
|
16499
|
-
|
16500
|
-
|
16501
|
-
this.onDeleteEvent.next(evt);
|
16502
|
-
}
|
16503
|
-
else if (evt.ctrlKey && evt.keyCode === 65 && os !== 'Mac') {
|
16504
|
-
evt.preventDefault();
|
16505
|
-
this.onSelectAllEvent.next();
|
16506
|
-
}
|
16507
|
-
else if (evt.metaKey && evt.keyCode === 65 && os === 'Mac') {
|
16508
|
-
evt.preventDefault();
|
16509
|
-
this.onSelectAllEvent.next();
|
16510
|
-
}
|
16511
|
-
else if (evt.keyCode === 36) {
|
16512
|
-
this.onHomeEvent.next();
|
16513
|
-
}
|
16514
|
-
else if (evt.keyCode === 35) {
|
16515
|
-
this.onEndEvent.next();
|
16516
|
-
}
|
16675
|
+
// if (!this.docCtx.selectionState.editable) {
|
16676
|
+
// return;
|
16677
|
+
// }
|
16678
|
+
// if (evt.keyCode === 8) {
|
16679
|
+
// //this.onBackspaceEvent.next(evt);
|
16680
|
+
// } else if (evt.keyCode === 13 && !evt.shiftKey) {
|
16681
|
+
// //this.onEnterEvent.next();
|
16682
|
+
// } else if (evt.keyCode === 37) {
|
16683
|
+
// //this.onLeftEvent.next();
|
16684
|
+
// } else if (evt.keyCode === 39) {
|
16685
|
+
// //this.onRightEvent.next();
|
16686
|
+
// } else if (evt.keyCode === 9) {
|
16687
|
+
// // evt.preventDefault();
|
16688
|
+
// // this.onTabKeyEvent.next();
|
16689
|
+
// } else if (evt.keyCode === 13 && evt.shiftKey) {
|
16690
|
+
// // evt.preventDefault();
|
16691
|
+
// // this.onInsertBr.next();
|
16692
|
+
// } else if (evt.keyCode === 46) {
|
16693
|
+
// //this.onDeleteEvent.next(evt);
|
16694
|
+
// } else if (evt.ctrlKey && evt.keyCode === 65 && os !== 'Mac') {
|
16695
|
+
// // evt.preventDefault();
|
16696
|
+
// // this.onSelectAllEvent.next();
|
16697
|
+
// } else if (evt.metaKey && evt.keyCode === 65 && os === 'Mac') {
|
16698
|
+
// // evt.preventDefault();
|
16699
|
+
// // this.onSelectAllEvent.next();
|
16700
|
+
// } else if (evt.keyCode === 36) {
|
16701
|
+
// //this.onHomeEvent.next();
|
16702
|
+
// } else if (evt.keyCode === 35) {
|
16703
|
+
// //this.onEndEvent.next();
|
16704
|
+
// }
|
16517
16705
|
},
|
16518
16706
|
copy: (evt) => {
|
16519
16707
|
const event = new CopyElementEvent(this.docCtx);
|
@@ -16540,7 +16728,7 @@ class DocumentInput {
|
|
16540
16728
|
const { startControl, startOffset } = this.docCtx.selectionState;
|
16541
16729
|
this.onInputEvent.next({
|
16542
16730
|
data: data,
|
16543
|
-
|
16731
|
+
prevInputDataLength: this.inputTargetStrLength,
|
16544
16732
|
composition: this.composition,
|
16545
16733
|
compositionStartInfo: {
|
16546
16734
|
element: startControl,
|
@@ -16570,12 +16758,34 @@ class DocumentChange {
|
|
16570
16758
|
this.documentInput.onInputEvent.subscribe(data => {
|
16571
16759
|
this.newInput(data);
|
16572
16760
|
});
|
16573
|
-
this.
|
16574
|
-
this.
|
16575
|
-
|
16576
|
-
|
16577
|
-
|
16761
|
+
this.docCtx.onKeyDownEvent.subscribe(evt => {
|
16762
|
+
if (!this.docCtx.selectionState.editable) {
|
16763
|
+
return;
|
16764
|
+
}
|
16765
|
+
if (evt.keyCode === 8) {
|
16766
|
+
this.onBackspace(evt);
|
16767
|
+
}
|
16768
|
+
else if (evt.keyCode === 13 && !evt.shiftKey) {
|
16769
|
+
this.onEnter();
|
16770
|
+
}
|
16771
|
+
if (evt.keyCode === 13 && evt.shiftKey) {
|
16772
|
+
evt.preventDefault();
|
16773
|
+
this.insertSoftBr();
|
16774
|
+
}
|
16775
|
+
else if (evt.keyCode === 46) {
|
16776
|
+
this.onDeleteKeyHandler(evt);
|
16777
|
+
}
|
16778
|
+
if (evt.keyCode === 9) {
|
16779
|
+
evt.preventDefault();
|
16780
|
+
this.insertTabElement();
|
16781
|
+
}
|
16578
16782
|
});
|
16783
|
+
/* this.documentInput.onBackspaceEvent.subscribe((evt) => {
|
16784
|
+
this.onBackspace(evt)
|
16785
|
+
});*/
|
16786
|
+
// this.documentInput.onEnterEvent.subscribe(() => {
|
16787
|
+
// this.onEnter()
|
16788
|
+
// });
|
16579
16789
|
this.documentInput.onCopyEvent.subscribe((evt) => {
|
16580
16790
|
this.onCopy(evt);
|
16581
16791
|
});
|
@@ -16585,21 +16795,10 @@ class DocumentChange {
|
|
16585
16795
|
this.documentInput.onPasteEvent.subscribe((evt) => {
|
16586
16796
|
this.onPaste(evt);
|
16587
16797
|
});
|
16588
|
-
this.documentInput.onInsertBr.subscribe(() => {
|
16589
|
-
this.insertSoftBr();
|
16590
|
-
});
|
16591
|
-
this.documentInput.onDeleteEvent.subscribe((evt) => {
|
16592
|
-
this.onDeleteKeyHandler(evt);
|
16593
|
-
});
|
16594
|
-
this.documentInput.onTabKeyEvent.subscribe(() => {
|
16595
|
-
this.insertTabElement();
|
16596
|
-
});
|
16597
16798
|
}
|
16598
16799
|
newInput(data) {
|
16599
|
-
|
16600
|
-
|
16601
|
-
}
|
16602
|
-
const { startControl, startOffset, collapsed, enableTrackChanges } = this.selectionState;
|
16800
|
+
const { startControl, startOffset, collapsed } = this.selectionState;
|
16801
|
+
const enableTrackChanges = this.viewOptions.enableTrackChanges;
|
16603
16802
|
if (!collapsed) {
|
16604
16803
|
this.onInputBySelectRange(data);
|
16605
16804
|
return;
|
@@ -16618,12 +16817,7 @@ class DocumentChange {
|
|
16618
16817
|
//当前输入节点是在留痕区域中,但是当前关闭了审阅模式,需要拆分留痕区域,创建新输入节点
|
16619
16818
|
if (!enableTrackChanges && this.isInTrackBlock(startControl)) {
|
16620
16819
|
const newInput = this.splitTrackElement(startControl, startOffset);
|
16621
|
-
|
16622
|
-
comp.element = newInput;
|
16623
|
-
comp.offset = 0;
|
16624
|
-
//修正数据
|
16625
|
-
if (data.composition)
|
16626
|
-
this.documentInput.correctInputEle(newInput, newInput.text, 0);
|
16820
|
+
this.correctInputEle(newInput, newInput.text, 0, data);
|
16627
16821
|
this.inputTextGroup(newInput, data);
|
16628
16822
|
return;
|
16629
16823
|
}
|
@@ -16633,26 +16827,27 @@ class DocumentChange {
|
|
16633
16827
|
}
|
16634
16828
|
const siblingTextEle = startOffset === 1 ? ElementUtil.getNextSiblingElement(startControl) : ElementUtil.getPrevSiblingElement(startControl);
|
16635
16829
|
if (siblingTextEle instanceof TextGroupElement) {
|
16636
|
-
|
16637
|
-
|
16638
|
-
if (data.composition) {
|
16639
|
-
this.documentInput.correctInputEle(siblingTextEle, siblingTextEle.text, data.compositionStartInfo.offset);
|
16640
|
-
}
|
16830
|
+
const pos = startOffset === 0 ? siblingTextEle.text.length : 0;
|
16831
|
+
this.correctInputEle(siblingTextEle, siblingTextEle.text, pos, data);
|
16641
16832
|
this.inputTextGroup(siblingTextEle, data);
|
16642
16833
|
}
|
16643
16834
|
else {
|
16644
16835
|
const inputTextProps = this.getDefaultTextProps(startControl, startOffset);
|
16645
16836
|
const newTextGroup = ElementUtil.getNewTextGroup(inputTextProps);
|
16646
16837
|
startControl.parent.addChild(newTextGroup, startControl.getIndex() + startOffset);
|
16647
|
-
|
16648
|
-
this.documentInput.correctInputEle(newTextGroup, '', 0);
|
16649
|
-
}
|
16838
|
+
this.correctInputEle(newTextGroup, '', 0, data);
|
16650
16839
|
this.inputTextGroup(newTextGroup, data);
|
16651
16840
|
}
|
16652
16841
|
return;
|
16653
16842
|
}
|
16654
16843
|
this.inputTextGroup(startControl, data);
|
16655
16844
|
}
|
16845
|
+
correctInputEle(ele, str, pos, data) {
|
16846
|
+
this.documentInput.correctInputEle(ele, str, pos);
|
16847
|
+
data.compositionStartInfo.element = ele;
|
16848
|
+
data.compositionStartInfo.offset = pos;
|
16849
|
+
data.prevInputDataLength = str.length;
|
16850
|
+
}
|
16656
16851
|
/**
|
16657
16852
|
* 选中区域后进行输入
|
16658
16853
|
* 需要处理将选中的区域删除后,进行输入的情况
|
@@ -16710,24 +16905,20 @@ class DocumentChange {
|
|
16710
16905
|
*/
|
16711
16906
|
newInputTrackChanges(data, startControl, startOffset) {
|
16712
16907
|
this.viewOptions.editUser.id;
|
16713
|
-
|
16908
|
+
data.compositionStartInfo;
|
16714
16909
|
if (this.isInCorrectTrackRegion(startControl, TrackRunTypeEnum.Inserted)) {
|
16715
16910
|
return;
|
16716
16911
|
}
|
16717
16912
|
if (this.isInTrackBlock(startControl)) {
|
16718
16913
|
const newInput = this.createNewTrackInput(startControl, startOffset, TrackRunTypeEnum.Inserted);
|
16719
|
-
|
16720
|
-
compInfo.element = newInput;
|
16721
|
-
this.documentInput.correctInputEle(newInput, '', 0);
|
16914
|
+
this.correctInputEle(newInput, '', 0, data);
|
16722
16915
|
this.inputTextGroup(newInput, data);
|
16723
16916
|
return;
|
16724
16917
|
}
|
16725
16918
|
else {
|
16726
16919
|
const { trackElement, newTextGroup } = this.createTextTrackElement(startControl, null, TrackRunTypeEnum.Inserted);
|
16727
16920
|
this.insertElement(startControl, startOffset, [trackElement]);
|
16728
|
-
|
16729
|
-
compInfo.element = newTextGroup;
|
16730
|
-
this.documentInput.correctInputEle(newTextGroup, '', 0);
|
16921
|
+
this.correctInputEle(newTextGroup, '', 0, data);
|
16731
16922
|
this.inputTextGroup(newTextGroup, data);
|
16732
16923
|
return;
|
16733
16924
|
}
|
@@ -16770,24 +16961,23 @@ class DocumentChange {
|
|
16770
16961
|
* @returns
|
16771
16962
|
*/
|
16772
16963
|
getDefaultTextProps(startControl, offset) {
|
16773
|
-
let textProps = this.getDefaultTextPropsByOptions();
|
16774
|
-
if (startControl instanceof TextGroupElement) {
|
16775
|
-
textProps = startControl.props;
|
16776
|
-
}
|
16777
16964
|
const dataEle = ElementUtil.getDataElement(startControl);
|
16778
16965
|
if (dataEle && IsInSideDataElement(startControl, offset)) {
|
16779
16966
|
return dataEle.props.valueTextProps;
|
16780
16967
|
}
|
16781
|
-
|
16968
|
+
else {
|
16969
|
+
return this.getDefaultTextPropsByOptions();
|
16970
|
+
}
|
16782
16971
|
}
|
16783
16972
|
/**
|
16784
16973
|
* 根据选项配置返回创建文本的默认文本属性
|
16785
16974
|
* @private
|
16786
16975
|
*/
|
16787
16976
|
getDefaultTextPropsByOptions() {
|
16977
|
+
const { defaultFontSize, defaultFontName, currentFontSize, currentFontName } = this.viewOptions;
|
16788
16978
|
const props = new TextProps();
|
16789
|
-
props.
|
16790
|
-
props.
|
16979
|
+
props.fontSize = currentFontSize > 0 ? currentFontSize : defaultFontSize;
|
16980
|
+
props.fontName = currentFontName ? currentFontName : defaultFontName;
|
16791
16981
|
props.color = this.viewOptions.defaultColor;
|
16792
16982
|
return props;
|
16793
16983
|
}
|
@@ -16850,15 +17040,20 @@ class DocumentChange {
|
|
16850
17040
|
return trackElement;
|
16851
17041
|
}
|
16852
17042
|
inputTextGroup(text, data) {
|
16853
|
-
const
|
16854
|
-
const prevInputDataLength = prevInputData.length;
|
16855
|
-
if (!data.compositionStartInfo) {
|
16856
|
-
throw new Error('compositionStartInfo is null');
|
16857
|
-
}
|
17043
|
+
const prevInputDataLength = data.prevInputDataLength ?? 0;
|
16858
17044
|
const { element, offset } = data.compositionStartInfo;
|
17045
|
+
//处理当前输入字体大小和名称;当前手动更改了字体信息,需要重新创建文本元素进行输入处理
|
17046
|
+
if (text.props.fontSize !== this.viewOptions.currentFontSize || text.props.fontName !== this.viewOptions.currentFontName) {
|
17047
|
+
//创建新输入项
|
17048
|
+
const newInput = this.createNewInputText();
|
17049
|
+
//插入到文档
|
17050
|
+
this.insertElement(element, offset, [newInput]);
|
17051
|
+
this.correctInputEle(newInput, '', 0, data);
|
17052
|
+
this.inputTextGroup(newInput, data);
|
17053
|
+
return;
|
17054
|
+
}
|
16859
17055
|
let startInputOffset = offset;
|
16860
17056
|
const deleteCount = data.composition ? text.textMeasures.length - prevInputDataLength : 0;
|
16861
|
-
//startInputOffset -= prevInputDataLength;
|
16862
17057
|
if (!(element instanceof TextGroupElement)) {
|
16863
17058
|
//当前选中元素位于输入元素是起始还是结束位置,如果位于起始位置,则输入偏移量为0,否则为未变更之前的内容length
|
16864
17059
|
if (ElementUtil.getNextSiblingElement(element) === text) {
|
@@ -17061,7 +17256,7 @@ class DocumentChange {
|
|
17061
17256
|
const currPara = ElementUtil.getParentByType(control, ParagraphElement);
|
17062
17257
|
//表明是紧挨着的两个段落,要进行段落合并
|
17063
17258
|
if (ElementUtil.getPrevSiblingElement(currPara) === prevPara) {
|
17064
|
-
if (this.
|
17259
|
+
if (this.viewOptions.enableTrackChanges) {
|
17065
17260
|
this.selectionState.resetRange(prevEle, -1);
|
17066
17261
|
return;
|
17067
17262
|
}
|
@@ -17152,7 +17347,7 @@ class DocumentChange {
|
|
17152
17347
|
const currPara = ElementUtil.getParentByType(control, ParagraphElement);
|
17153
17348
|
//表明是紧挨着的两个段落,要进行段落合并
|
17154
17349
|
if (ElementUtil.getNextSiblingElement(currPara) === nextPara) {
|
17155
|
-
if (this.
|
17350
|
+
if (this.viewOptions.enableTrackChanges) {
|
17156
17351
|
this.selectionState.resetRange(nextEle, 0);
|
17157
17352
|
return;
|
17158
17353
|
}
|
@@ -17214,7 +17409,7 @@ class DocumentChange {
|
|
17214
17409
|
return dataEle.length === 2;
|
17215
17410
|
}
|
17216
17411
|
onDeleteText(text, offset, len) {
|
17217
|
-
if (this.
|
17412
|
+
if (this.viewOptions.enableTrackChanges) {
|
17218
17413
|
this.updateDeletedTrackText(text, offset, len);
|
17219
17414
|
}
|
17220
17415
|
else {
|
@@ -17222,7 +17417,7 @@ class DocumentChange {
|
|
17222
17417
|
}
|
17223
17418
|
}
|
17224
17419
|
onDeleteItem(item) {
|
17225
|
-
if (this.
|
17420
|
+
if (this.viewOptions.enableTrackChanges) {
|
17226
17421
|
//删除符号不进行留痕
|
17227
17422
|
if (item.type === 'psym') {
|
17228
17423
|
return;
|
@@ -17313,6 +17508,16 @@ class DocumentChange {
|
|
17313
17508
|
return newTextGroup;
|
17314
17509
|
}
|
17315
17510
|
}
|
17511
|
+
/**
|
17512
|
+
* 创建一个待输入的文本元素
|
17513
|
+
* @private
|
17514
|
+
*/
|
17515
|
+
createNewInputText() {
|
17516
|
+
const { startControl, startOffset } = this.selectionState;
|
17517
|
+
const textProps = this.getDefaultTextProps(startControl, startOffset);
|
17518
|
+
const newInput = ElementUtil.getNewTextGroup(textProps);
|
17519
|
+
return newInput;
|
17520
|
+
}
|
17316
17521
|
getNextTrackElement(target, trackType) {
|
17317
17522
|
let trackElement = ElementUtil.getNextSiblingTrackElement(target, trackType, this.viewOptions.editUser.id);
|
17318
17523
|
if (!trackElement) {
|
@@ -17402,9 +17607,16 @@ class DocumentChange {
|
|
17402
17607
|
* @returns
|
17403
17608
|
*/
|
17404
17609
|
insertTable(tb) {
|
17610
|
+
this.insertLayoutContainer(tb);
|
17611
|
+
}
|
17612
|
+
/**
|
17613
|
+
* 插入布局容器,比如表格、数据容器等
|
17614
|
+
* @param ele
|
17615
|
+
*/
|
17616
|
+
insertLayoutContainer(ele) {
|
17405
17617
|
const breakPara = this.splitCurrentParagraph();
|
17406
|
-
breakPara.parent.addChild(
|
17407
|
-
this.selectionState.resetRange(
|
17618
|
+
breakPara.parent.addChild(ele, breakPara.getIndex());
|
17619
|
+
this.selectionState.resetRange(ele, 0);
|
17408
17620
|
}
|
17409
17621
|
/**
|
17410
17622
|
* 分割当前段落用于插入表格或者粘贴的内容
|
@@ -17466,7 +17678,7 @@ class DocumentChange {
|
|
17466
17678
|
}
|
17467
17679
|
else if (childTarget instanceof BranchElement) {
|
17468
17680
|
//留痕模式
|
17469
|
-
if (this.
|
17681
|
+
if (this.viewOptions.enableTrackChanges) {
|
17470
17682
|
this.deleteRange(childRange);
|
17471
17683
|
}
|
17472
17684
|
else {
|
@@ -17974,7 +18186,7 @@ class DocumentChange {
|
|
17974
18186
|
data: text,
|
17975
18187
|
compositionStartInfo: {
|
17976
18188
|
element: startControl,
|
17977
|
-
offset: startOffset
|
18189
|
+
offset: startOffset,
|
17978
18190
|
}
|
17979
18191
|
});
|
17980
18192
|
}
|
@@ -17991,6 +18203,31 @@ class DocumentChange {
|
|
17991
18203
|
this.selectionState.resetRange(breakPara, 0);
|
17992
18204
|
}
|
17993
18205
|
}
|
18206
|
+
/**
|
18207
|
+
* 向当前光标追加文本
|
18208
|
+
* @param appendStr
|
18209
|
+
* @param inputOffset
|
18210
|
+
* @param replaceLength
|
18211
|
+
* @private
|
18212
|
+
*/
|
18213
|
+
appendText(appendStr, replaceText) {
|
18214
|
+
const { startControl, startOffset } = this.selectionState;
|
18215
|
+
if (startControl instanceof TextGroupElement) {
|
18216
|
+
const data = {
|
18217
|
+
data: appendStr,
|
18218
|
+
prevInputDataLength: startControl.text.length - replaceText.length,
|
18219
|
+
composition: true,
|
18220
|
+
compositionStartInfo: {
|
18221
|
+
element: startControl,
|
18222
|
+
offset: startOffset - replaceText.length
|
18223
|
+
}
|
18224
|
+
};
|
18225
|
+
this.inputTextGroup(startControl, data);
|
18226
|
+
}
|
18227
|
+
else {
|
18228
|
+
console.warn("当前光标所在的元素类型不正确,不能进行追加文本操作");
|
18229
|
+
}
|
18230
|
+
}
|
17994
18231
|
/**
|
17995
18232
|
* 设置当前段落项目符号类型
|
17996
18233
|
*/
|
@@ -18018,7 +18255,7 @@ class DocumentChange {
|
|
18018
18255
|
/**
|
18019
18256
|
* 插入批注
|
18020
18257
|
*/
|
18021
|
-
insertComment() {
|
18258
|
+
insertComment(text) {
|
18022
18259
|
const { startControl, startOffset, endControl, endOffset, collapsed } = this.selectionState;
|
18023
18260
|
if (collapsed || !startControl || !endControl) {
|
18024
18261
|
return;
|
@@ -18035,7 +18272,7 @@ class DocumentChange {
|
|
18035
18272
|
endCommMark.props.markType = 'end';
|
18036
18273
|
this.insertElement(endControl, endOffset, [endCommMark]);
|
18037
18274
|
this.insertElement(startControl, startOffset, [startCommMark]);
|
18038
|
-
startCommMark.props.text =
|
18275
|
+
startCommMark.props.text = text;
|
18039
18276
|
// const commContent = new CommContentElement();
|
18040
18277
|
// commContent.props.id = id;
|
18041
18278
|
// commContent.props.createId = this.viewOptions.editUser.id;
|
@@ -18640,13 +18877,19 @@ class ElementTrackManage {
|
|
18640
18877
|
//前后是连续的操作
|
18641
18878
|
const { format: currFormat } = currOp.ops;
|
18642
18879
|
const { format: prevFormat } = prevOp.ops;
|
18880
|
+
//const applyProps = {};
|
18643
18881
|
Object.keys(currFormat).forEach(key => {
|
18644
18882
|
const currValue = currFormat[key].newValue;
|
18645
|
-
|
18646
|
-
if (CommonUtil.isEqual(currValue, prevValue)) {
|
18883
|
+
if (prevFormat[key] && CommonUtil.isEqual(currValue, prevFormat[key])) {
|
18647
18884
|
return;
|
18648
18885
|
}
|
18649
|
-
prevFormat[key]
|
18886
|
+
if (prevFormat[key]) {
|
18887
|
+
prevFormat[key].newValue = currValue;
|
18888
|
+
}
|
18889
|
+
else {
|
18890
|
+
prevFormat[key] = { oldValue: currFormat[key].oldValue, newValue: currValue };
|
18891
|
+
}
|
18892
|
+
//applyProps[key] = currValue;
|
18650
18893
|
});
|
18651
18894
|
return true;
|
18652
18895
|
}
|
@@ -20089,7 +20332,8 @@ function calculateDistance(a, b) {
|
|
20089
20332
|
|
20090
20333
|
class DocEditor {
|
20091
20334
|
svgContainer;
|
20092
|
-
|
20335
|
+
//设置vue 不允许代理
|
20336
|
+
__v_skip = true;
|
20093
20337
|
contentCtx;
|
20094
20338
|
viewOptions;
|
20095
20339
|
docCtx;
|
@@ -20123,10 +20367,18 @@ class DocEditor {
|
|
20123
20367
|
onDestroy = new Subject();
|
20124
20368
|
beforeNodePatch = new Subject();
|
20125
20369
|
afterNodePatch = new Subject();
|
20370
|
+
//文档内容输入改变的时候,触发此事件(输入、删除文字),可以监听该事件,实现候选词、联想词等功能
|
20371
|
+
onTextChanged = new Subject();
|
20372
|
+
//联想词处理:文档处理之前
|
20373
|
+
onSuggestionsProcess = new Subject();
|
20126
20374
|
//自定义事件传递消息
|
20127
20375
|
eventBus;
|
20128
20376
|
editInput;
|
20129
20377
|
scrollContainer;
|
20378
|
+
// //输入候选建议词列表
|
20379
|
+
// private suggestions: Array<ISuggestionData> = [];
|
20380
|
+
//光标keydown事件
|
20381
|
+
onKeyDownEvent = new Subject();
|
20130
20382
|
constructor(svgContainer) {
|
20131
20383
|
this.svgContainer = svgContainer;
|
20132
20384
|
this.createCanvasContext();
|
@@ -20181,6 +20433,17 @@ class DocEditor {
|
|
20181
20433
|
});
|
20182
20434
|
this.documentEvent.trackTipsChanged.subscribe(data => {
|
20183
20435
|
});
|
20436
|
+
this.documentInput.onKeyDownEvent.subscribe((evt) => {
|
20437
|
+
this.onKeyDownEvent.next(evt);
|
20438
|
+
if (evt.defaultPrevented) {
|
20439
|
+
return;
|
20440
|
+
}
|
20441
|
+
this.processKeyDownEvent(evt);
|
20442
|
+
if (evt.defaultPrevented) {
|
20443
|
+
return;
|
20444
|
+
}
|
20445
|
+
this.docCtx.onKeyDownEvent.next(evt);
|
20446
|
+
});
|
20184
20447
|
this.docCtx.docChange = this.documentChange;
|
20185
20448
|
this.docCtx.syncRefresh = () => {
|
20186
20449
|
this.flushToSchedule();
|
@@ -20197,14 +20460,19 @@ class DocEditor {
|
|
20197
20460
|
const docPagesFunc = this.getVNode();
|
20198
20461
|
const calendarFunc = this.renderCalendar();
|
20199
20462
|
const menuFunc = this.renderContextmenu();
|
20463
|
+
const suggestionFunc = this.renderSuggestions();
|
20200
20464
|
const ruleFunc = new DocRule(this.docCtx);
|
20201
20465
|
const onSizeChange = () => {
|
20202
20466
|
this.adjustPageLayout();
|
20203
20467
|
};
|
20204
|
-
window.addEventListener('resize', onSizeChange);
|
20468
|
+
// window.addEventListener('resize', onSizeChange);
|
20205
20469
|
this.onDestroy.subscribe(() => {
|
20206
|
-
|
20470
|
+
ro.unobserve(this.svgContainer);
|
20471
|
+
});
|
20472
|
+
const ro = new ResizeObserver(entries => {
|
20473
|
+
onSizeChange();
|
20207
20474
|
});
|
20475
|
+
ro.observe(this.svgContainer);
|
20208
20476
|
return {
|
20209
20477
|
render: () => {
|
20210
20478
|
const docContentVNode = docPagesFunc.render();
|
@@ -20233,7 +20501,7 @@ class DocEditor {
|
|
20233
20501
|
'transform': `scale(${this.viewOptions.scale})`
|
20234
20502
|
}
|
20235
20503
|
},
|
20236
|
-
children: [inputVNode, listVNode.render(), calendarFunc.render(), menuFunc.render()]
|
20504
|
+
children: [inputVNode, listVNode.render(), calendarFunc.render(), menuFunc.render(), suggestionFunc.render()]
|
20237
20505
|
};
|
20238
20506
|
return {
|
20239
20507
|
sel: 'div.svg-container',
|
@@ -20244,8 +20512,14 @@ class DocEditor {
|
|
20244
20512
|
hook: {
|
20245
20513
|
insert: (vNode) => {
|
20246
20514
|
this.svgContainer = vNode.elm;
|
20515
|
+
ro.observe(this.svgContainer);
|
20247
20516
|
this.updateViewOption();
|
20248
20517
|
}
|
20518
|
+
},
|
20519
|
+
on: {
|
20520
|
+
resize: () => {
|
20521
|
+
console.log('resize');
|
20522
|
+
}
|
20249
20523
|
}
|
20250
20524
|
},
|
20251
20525
|
children: [
|
@@ -20255,7 +20529,7 @@ class DocEditor {
|
|
20255
20529
|
style: {
|
20256
20530
|
overflow: 'auto',
|
20257
20531
|
position: 'relative',
|
20258
|
-
height:
|
20532
|
+
height: "100%"
|
20259
20533
|
},
|
20260
20534
|
on: {
|
20261
20535
|
scroll: (evt) => {
|
@@ -20263,6 +20537,9 @@ class DocEditor {
|
|
20263
20537
|
this.viewOptions.pageOffset.x = target.scrollLeft;
|
20264
20538
|
this.viewOptions.pageOffset.y = target.scrollTop;
|
20265
20539
|
this.onChange();
|
20540
|
+
},
|
20541
|
+
resize: () => {
|
20542
|
+
console.log('resize');
|
20266
20543
|
}
|
20267
20544
|
},
|
20268
20545
|
hook: {
|
@@ -20381,10 +20658,9 @@ class DocEditor {
|
|
20381
20658
|
if (this.docCtx.refreshType === null) {
|
20382
20659
|
return;
|
20383
20660
|
}
|
20384
|
-
|
20385
|
-
if (
|
20661
|
+
this.docCtx.currentRefreshType = this.docCtx.refreshType;
|
20662
|
+
if (this.docCtx.currentRefreshType) {
|
20386
20663
|
this.onBeforeRefreshDocument.next();
|
20387
|
-
this.documentSelection.clearSnapshot();
|
20388
20664
|
this.docComment.readComments();
|
20389
20665
|
suppressTracking(() => {
|
20390
20666
|
this.documentPaginator.rePages();
|
@@ -20404,14 +20680,33 @@ class DocEditor {
|
|
20404
20680
|
let ssChanged = false;
|
20405
20681
|
try {
|
20406
20682
|
//防止由于选区不正确导致的错误,导致后续的当前任务无法释放
|
20407
|
-
|
20683
|
+
this.documentSelection.updateSelectionState();
|
20684
|
+
ssChanged = this.documentSelection.isSelectionChanged();
|
20408
20685
|
}
|
20409
20686
|
catch (e) {
|
20410
20687
|
console.error(e);
|
20411
20688
|
}
|
20412
20689
|
this.selectionOverlays.getSelectionTreeData();
|
20690
|
+
ssChanged && this.updateInputFont();
|
20413
20691
|
ssChanged && this.selectionChanged.next(this.documentSelection.selectionState);
|
20414
20692
|
ssChanged && this.documentEvent.invokeCursor(this.selectionState.startControl);
|
20693
|
+
this.documentSelection.clearSnapshot();
|
20694
|
+
this.documentSelection.takeSnapshot();
|
20695
|
+
}
|
20696
|
+
/**
|
20697
|
+
* 根据当前选区,更新待输入文本字体信息
|
20698
|
+
* @private
|
20699
|
+
*/
|
20700
|
+
updateInputFont() {
|
20701
|
+
const { startControl } = this.selectionState;
|
20702
|
+
if (startControl instanceof TextGroupElement) {
|
20703
|
+
this.viewOptions.currentFontSize = startControl.props.fontSize;
|
20704
|
+
this.viewOptions.currentFontName = startControl.props.fontName;
|
20705
|
+
}
|
20706
|
+
else {
|
20707
|
+
this.viewOptions.currentFontSize = this.viewOptions.defaultFontSize;
|
20708
|
+
this.viewOptions.currentFontName = this.viewOptions.defaultFontName;
|
20709
|
+
}
|
20415
20710
|
}
|
20416
20711
|
hitInfoChanged(hitInfo) {
|
20417
20712
|
this.documentSelection.setSelectionState(hitInfo);
|
@@ -20707,6 +21002,9 @@ class DocEditor {
|
|
20707
21002
|
this.documentChange.insertTable(tb);
|
20708
21003
|
return tb;
|
20709
21004
|
}
|
21005
|
+
insertLayoutContainer(ele) {
|
21006
|
+
this.documentChange.insertLayoutContainer(ele);
|
21007
|
+
}
|
20710
21008
|
/**
|
20711
21009
|
* 插入软换行符
|
20712
21010
|
*/
|
@@ -20891,8 +21189,8 @@ class DocEditor {
|
|
20891
21189
|
/**
|
20892
21190
|
* 插入批注
|
20893
21191
|
*/
|
20894
|
-
insertComment() {
|
20895
|
-
this.documentChange.insertComment();
|
21192
|
+
insertComment(text) {
|
21193
|
+
this.documentChange.insertComment(text);
|
20896
21194
|
}
|
20897
21195
|
/**
|
20898
21196
|
* 清除所有批注
|
@@ -20957,16 +21255,12 @@ class DocEditor {
|
|
20957
21255
|
canRedo() {
|
20958
21256
|
return this.historyMange.canRedo;
|
20959
21257
|
}
|
20960
|
-
|
21258
|
+
/**
|
21259
|
+
* 切换文档留痕开关
|
21260
|
+
*/
|
21261
|
+
switchTrackChanges() {
|
20961
21262
|
this.selectionState.clear();
|
20962
|
-
|
20963
|
-
const body = eleCtx.treeFind(item => item instanceof DocumentBodyElement);
|
20964
|
-
if (body) {
|
20965
|
-
body.trackChanges = !body.trackChanges;
|
20966
|
-
}
|
20967
|
-
else {
|
20968
|
-
throw new Error('未找到doc-body');
|
20969
|
-
}
|
21263
|
+
this.viewOptions.enableTrackChanges = !this.viewOptions.enableTrackChanges;
|
20970
21264
|
}
|
20971
21265
|
get trackTipsChanged() {
|
20972
21266
|
return this.documentEvent.trackTipsChanged;
|
@@ -21311,14 +21605,18 @@ class DocEditor {
|
|
21311
21605
|
if (this.viewOptions.reviewWindowWidth > 0) {
|
21312
21606
|
this.viewOptions.reviewWindowWidth = 0;
|
21313
21607
|
//刷新页面
|
21314
|
-
this.docCtx.onNextView(() => {
|
21608
|
+
this.docCtx.onNextView(() => {
|
21609
|
+
this.adjustPageLayout();
|
21610
|
+
});
|
21315
21611
|
}
|
21316
21612
|
}
|
21317
21613
|
else {
|
21318
21614
|
if (this.viewOptions.reviewWindowWidth === 0) {
|
21319
21615
|
this.viewOptions.reviewWindowWidth = 250;
|
21320
21616
|
//刷新页面
|
21321
|
-
this.docCtx.onNextView(() => {
|
21617
|
+
this.docCtx.onNextView(() => {
|
21618
|
+
this.adjustPageLayout();
|
21619
|
+
});
|
21322
21620
|
}
|
21323
21621
|
}
|
21324
21622
|
}
|
@@ -21414,11 +21712,13 @@ class DocEditor {
|
|
21414
21712
|
//ckbVNode.data.attrs['checked'] = true;
|
21415
21713
|
}
|
21416
21714
|
return {
|
21417
|
-
sel: 'div', data: {
|
21715
|
+
sel: 'div', data: {
|
21716
|
+
on: {
|
21418
21717
|
click: () => {
|
21419
21718
|
onChangeHandler(item.code);
|
21420
21719
|
}
|
21421
|
-
}
|
21720
|
+
}
|
21721
|
+
}, children: [ckbVNode, {
|
21422
21722
|
sel: 'label',
|
21423
21723
|
data: {},
|
21424
21724
|
text: item.value
|
@@ -21426,18 +21726,12 @@ class DocEditor {
|
|
21426
21726
|
};
|
21427
21727
|
});
|
21428
21728
|
return {
|
21429
|
-
sel: 'div
|
21729
|
+
sel: 'div.data-list-container',
|
21430
21730
|
data: {
|
21431
21731
|
style: {
|
21432
21732
|
position: 'absolute',
|
21433
21733
|
left: (position.x - 10) + 'px',
|
21434
21734
|
top: position.y + 5 + position.height + 'px',
|
21435
|
-
'min-width': '100px',
|
21436
|
-
'background-color': 'white',
|
21437
|
-
'z-index': '1000',
|
21438
|
-
'border-radius': '5px',
|
21439
|
-
'box-shadow': '0 0 5px 0 rgba(0,0,0,0.2)',
|
21440
|
-
'user-select': 'none',
|
21441
21735
|
},
|
21442
21736
|
hook: {
|
21443
21737
|
insert: (vnode) => {
|
@@ -21534,6 +21828,44 @@ class DocEditor {
|
|
21534
21828
|
if (!editor.menusData) {
|
21535
21829
|
return null;
|
21536
21830
|
}
|
21831
|
+
const renderMenu = (menus) => {
|
21832
|
+
if (!menus) {
|
21833
|
+
return [];
|
21834
|
+
}
|
21835
|
+
return [
|
21836
|
+
{
|
21837
|
+
sel: 'ul.editor-overlays-menus',
|
21838
|
+
data: {},
|
21839
|
+
children: menus.map((menu) => renderMenuItem(menu))
|
21840
|
+
}
|
21841
|
+
];
|
21842
|
+
};
|
21843
|
+
const renderSubItems = (menu) => {
|
21844
|
+
if (!menu.subItems)
|
21845
|
+
return [];
|
21846
|
+
return renderMenu(menu.subItems);
|
21847
|
+
};
|
21848
|
+
const renderMenuItem = (menu) => {
|
21849
|
+
return {
|
21850
|
+
sel: 'li' + (menu.subItems && menu.subItems.length ? '.sub' : ''),
|
21851
|
+
data: {
|
21852
|
+
on: {
|
21853
|
+
click: () => {
|
21854
|
+
menu.click?.();
|
21855
|
+
editor.menusData = null;
|
21856
|
+
editor.onChange();
|
21857
|
+
}
|
21858
|
+
}
|
21859
|
+
},
|
21860
|
+
children: [{
|
21861
|
+
sel: 'span',
|
21862
|
+
data: {},
|
21863
|
+
text: menu.caption
|
21864
|
+
},
|
21865
|
+
...renderSubItems(menu)
|
21866
|
+
]
|
21867
|
+
};
|
21868
|
+
};
|
21537
21869
|
return {
|
21538
21870
|
sel: 'div.editor-contextmenu',
|
21539
21871
|
data: {
|
@@ -21542,27 +21874,7 @@ class DocEditor {
|
|
21542
21874
|
top: editor.menusData.position.y + 'px',
|
21543
21875
|
}
|
21544
21876
|
},
|
21545
|
-
children:
|
21546
|
-
{
|
21547
|
-
sel: 'ul.editor-overlays-menus',
|
21548
|
-
data: {},
|
21549
|
-
children: editor.menusData.menus.map((menu) => {
|
21550
|
-
return {
|
21551
|
-
sel: 'li',
|
21552
|
-
data: {
|
21553
|
-
on: {
|
21554
|
-
click: (evt) => {
|
21555
|
-
menu.eventObj["onClick"]();
|
21556
|
-
editor.menusData = null;
|
21557
|
-
editor.onChange();
|
21558
|
-
}
|
21559
|
-
}
|
21560
|
-
},
|
21561
|
-
text: menu.caption
|
21562
|
-
};
|
21563
|
-
})
|
21564
|
-
}
|
21565
|
-
]
|
21877
|
+
children: renderMenu(editor.menusData.menus)
|
21566
21878
|
};
|
21567
21879
|
}
|
21568
21880
|
};
|
@@ -21584,7 +21896,7 @@ class DocEditor {
|
|
21584
21896
|
rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
|
21585
21897
|
}
|
21586
21898
|
version() {
|
21587
|
-
return "2.2.
|
21899
|
+
return "2.2.4";
|
21588
21900
|
}
|
21589
21901
|
switchPageHeaderEditor() {
|
21590
21902
|
this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
|
@@ -21667,6 +21979,7 @@ class DocEditor {
|
|
21667
21979
|
readDocChangeLog() {
|
21668
21980
|
//获取文档的变更日志
|
21669
21981
|
const ops = generatePatch(this.docCtx.document, false);
|
21982
|
+
//1.处理批注删除不对称的问题
|
21670
21983
|
for (let i = 0; i < ops.length; i++) {
|
21671
21984
|
const op = ops[i];
|
21672
21985
|
if ('delete' in op.ops) {
|
@@ -21693,6 +22006,192 @@ class DocEditor {
|
|
21693
22006
|
}
|
21694
22007
|
}
|
21695
22008
|
}
|
22009
|
+
//处理文字输入
|
22010
|
+
if (this.viewOptions.enableSuggestions && ops.length && ops.every(op => 'delText' in op.ops || 'insText' in op.ops || ('insert' in op.ops && op.ops.insert.type === 'text'))) {
|
22011
|
+
this.processSuggestionsHandle();
|
22012
|
+
}
|
22013
|
+
else {
|
22014
|
+
this.docCtx.suggestions.clear();
|
22015
|
+
}
|
22016
|
+
}
|
22017
|
+
/**
|
22018
|
+
* 处理候选词
|
22019
|
+
* @private
|
22020
|
+
*/
|
22021
|
+
processSuggestionsHandle() {
|
22022
|
+
this.docCtx.suggestions.clear();
|
22023
|
+
//this.suggestionSelectIndex.value = -1;
|
22024
|
+
const sub = this.selectionChanged.subscribe(() => {
|
22025
|
+
this.createAutoCompleteOptions();
|
22026
|
+
});
|
22027
|
+
sub.once = true;
|
22028
|
+
}
|
22029
|
+
createAutoCompleteOptions() {
|
22030
|
+
if (!this.viewOptions.enableSuggestions || !this.selectionState.editable) {
|
22031
|
+
return;
|
22032
|
+
}
|
22033
|
+
if (this.selectionState.collapsed && this.selectionState.startControl instanceof TextGroupElement) {
|
22034
|
+
const { startControl, startOffset } = this.selectionState;
|
22035
|
+
const text = startControl.text;
|
22036
|
+
//根据标点符号分割文本
|
22037
|
+
let findText = text.substring(0, startOffset);
|
22038
|
+
//循环当前字符串,根据startOffset向前寻找,直到找到标点符号
|
22039
|
+
for (let i = startOffset; i >= 0; i--) {
|
22040
|
+
const char = text.charAt(i);
|
22041
|
+
if (char.match(/[\s,,。?!;:、]/)) {
|
22042
|
+
findText = text.substring(i + 1, startOffset);
|
22043
|
+
break;
|
22044
|
+
}
|
22045
|
+
}
|
22046
|
+
//结尾为标点符号
|
22047
|
+
if (!findText.length) {
|
22048
|
+
return;
|
22049
|
+
}
|
22050
|
+
const filterSuggestions = this.docCtx.suggestions.suggestionsList.filter(item => item.label.includes(findText));
|
22051
|
+
const data = {
|
22052
|
+
filterSuggestions,
|
22053
|
+
inputTextGroup: startControl,
|
22054
|
+
inputOffset: startOffset,
|
22055
|
+
findText
|
22056
|
+
};
|
22057
|
+
this.onSuggestionsProcess.next(data);
|
22058
|
+
this.docCtx.suggestions.prepareSuggestions.push(...data.filterSuggestions);
|
22059
|
+
this.docCtx.suggestions.currentInputTextGroup = data.inputTextGroup;
|
22060
|
+
this.docCtx.suggestions.currentInputOffset = data.inputOffset;
|
22061
|
+
this.docCtx.suggestions.currentMatchedText = data.findText;
|
22062
|
+
//this.suggestions.push('文本输入1', '文本输入2', '文本输入3');
|
22063
|
+
}
|
22064
|
+
}
|
22065
|
+
processKeyDownEvent(evt) {
|
22066
|
+
if (evt.keyCode === 38 || evt.keyCode === 40) {
|
22067
|
+
if (this.docCtx.suggestions.prepareSuggestions.length) {
|
22068
|
+
this.onSuggestionsKeydown(evt);
|
22069
|
+
}
|
22070
|
+
}
|
22071
|
+
else if (evt.keyCode === 27) {
|
22072
|
+
if (this.docCtx.suggestions.prepareSuggestions.length) {
|
22073
|
+
evt.preventDefault();
|
22074
|
+
this.docCtx.suggestions.clear();
|
22075
|
+
this.onPatchVNodeSubject.next();
|
22076
|
+
}
|
22077
|
+
}
|
22078
|
+
else if (evt.keyCode === 13) {
|
22079
|
+
if (this.docCtx.suggestions.prepareSuggestions.length) {
|
22080
|
+
evt.preventDefault();
|
22081
|
+
const suggestions = this.docCtx.suggestions;
|
22082
|
+
const suggestion = suggestions.prepareSuggestions[suggestions.selectedIndex];
|
22083
|
+
if (suggestion) {
|
22084
|
+
this.insertSuggestion(suggestion);
|
22085
|
+
suggestions.clear();
|
22086
|
+
this.onPatchVNodeSubject.next();
|
22087
|
+
}
|
22088
|
+
else {
|
22089
|
+
suggestions.clear();
|
22090
|
+
this.onPatchVNodeSubject.next();
|
22091
|
+
}
|
22092
|
+
}
|
22093
|
+
}
|
22094
|
+
}
|
22095
|
+
/**
|
22096
|
+
* 处理候选词,键盘选择定位
|
22097
|
+
* @private
|
22098
|
+
*/
|
22099
|
+
onSuggestionsKeydown(evt) {
|
22100
|
+
evt.preventDefault();
|
22101
|
+
let index = this.docCtx.suggestions.selectedIndex;
|
22102
|
+
if (evt.keyCode === 38) {
|
22103
|
+
index--;
|
22104
|
+
}
|
22105
|
+
else {
|
22106
|
+
index++;
|
22107
|
+
}
|
22108
|
+
if (index < 0) {
|
22109
|
+
index = this.docCtx.suggestions.prepareSuggestions.length - 1;
|
22110
|
+
}
|
22111
|
+
else if (index >= this.docCtx.suggestions.prepareSuggestions.length) {
|
22112
|
+
index = 0;
|
22113
|
+
}
|
22114
|
+
this.docCtx.suggestions.selectedIndex = index;
|
22115
|
+
this.onPatchVNodeSubject.next();
|
22116
|
+
}
|
22117
|
+
/**
|
22118
|
+
* 渲染联想、候选词
|
22119
|
+
* @private
|
22120
|
+
*/
|
22121
|
+
renderSuggestions() {
|
22122
|
+
const editor = this;
|
22123
|
+
return {
|
22124
|
+
render() {
|
22125
|
+
if (!editor.docCtx.suggestions.prepareSuggestions || !editor.viewOptions.enableSuggestions) {
|
22126
|
+
editor.docCtx.suggestions.clear();
|
22127
|
+
return null;
|
22128
|
+
}
|
22129
|
+
const cursorPos = editor.selectionState.cursorPos;
|
22130
|
+
if (!cursorPos) {
|
22131
|
+
return null;
|
22132
|
+
}
|
22133
|
+
const renderSuggestion = (suggestions) => {
|
22134
|
+
if (!suggestions || !suggestions.length) {
|
22135
|
+
return [];
|
22136
|
+
}
|
22137
|
+
return [
|
22138
|
+
{
|
22139
|
+
sel: 'ul.editor-suggestions',
|
22140
|
+
data: {
|
22141
|
+
hook: {
|
22142
|
+
insert: (vNode) => {
|
22143
|
+
const elm = vNode.elm;
|
22144
|
+
elm.focus();
|
22145
|
+
}
|
22146
|
+
},
|
22147
|
+
on: {
|
22148
|
+
keydown: (evt) => {
|
22149
|
+
console.log("ul.editor-suggestions", evt);
|
22150
|
+
}
|
22151
|
+
}
|
22152
|
+
},
|
22153
|
+
children: suggestions.map((suggestion, index) => renderSuggestionItem(suggestion, index))
|
22154
|
+
}
|
22155
|
+
];
|
22156
|
+
};
|
22157
|
+
const renderSuggestionItem = (suggestion, index) => {
|
22158
|
+
return {
|
22159
|
+
sel: 'li' + (index === editor.docCtx.suggestions.selectedIndex ? '.hovered' : ''),
|
22160
|
+
data: {
|
22161
|
+
on: {
|
22162
|
+
click: () => {
|
22163
|
+
editor.insertSuggestion(suggestion);
|
22164
|
+
}
|
22165
|
+
}
|
22166
|
+
},
|
22167
|
+
children: [{
|
22168
|
+
sel: 'span',
|
22169
|
+
data: {},
|
22170
|
+
text: suggestion.label
|
22171
|
+
}]
|
22172
|
+
};
|
22173
|
+
};
|
22174
|
+
return {
|
22175
|
+
sel: 'div.editor-suggestions-container',
|
22176
|
+
data: {
|
22177
|
+
style: {
|
22178
|
+
left: cursorPos.x + 'px',
|
22179
|
+
top: cursorPos.y + cursorPos.height + 'px',
|
22180
|
+
}
|
22181
|
+
},
|
22182
|
+
children: renderSuggestion(editor.docCtx.suggestions.prepareSuggestions)
|
22183
|
+
};
|
22184
|
+
}
|
22185
|
+
};
|
22186
|
+
}
|
22187
|
+
insertSuggestion(suggestion) {
|
22188
|
+
if (suggestion.action) {
|
22189
|
+
suggestion.action(suggestion);
|
22190
|
+
}
|
22191
|
+
else {
|
22192
|
+
const text = suggestion.value ? suggestion.value : suggestion.label;
|
22193
|
+
this.documentChange.appendText(text, this.docCtx.suggestions.currentMatchedText);
|
22194
|
+
}
|
21696
22195
|
}
|
21697
22196
|
}
|
21698
22197
|
|
@@ -26845,7 +27344,7 @@ class DocumentPrintOffscreenBase {
|
|
26845
27344
|
afterPrint = new Subject();
|
26846
27345
|
constructor() {
|
26847
27346
|
this.viewOptions = new ViewOptions();
|
26848
|
-
this.viewOptions.copyRightInfo = '
|
27347
|
+
this.viewOptions.copyRightInfo = '';
|
26849
27348
|
this.viewOptions.showCharRect = true;
|
26850
27349
|
this.viewOptions.drawCharRectColor = 'green';
|
26851
27350
|
this.viewOptions.showLineRect = true;
|
@@ -27004,27 +27503,25 @@ function runTextLineRender(ele, data) {
|
|
27004
27503
|
const deleteCurrentParagraph = (evt) => {
|
27005
27504
|
const { selectionState, ctx: { viewOptions }, currentElement } = evt;
|
27006
27505
|
evt.menus.push({
|
27007
|
-
|
27008
|
-
|
27009
|
-
|
27010
|
-
|
27011
|
-
|
27012
|
-
|
27013
|
-
if (nextFocusableEle) {
|
27014
|
-
|
27015
|
-
selectionState.resetRange(nextFocusableEle, 0);
|
27016
|
-
}
|
27017
|
-
else {
|
27018
|
-
selectionState.resetRange(parentContainer, 0);
|
27019
|
-
}
|
27506
|
+
caption: '删除段落', click: () => {
|
27507
|
+
selectionState.clear();
|
27508
|
+
const psymbol = ElementUtil.getLastLeafElement(currentElement);
|
27509
|
+
const nextFocusableEle = ElementUtil.getRecursionNextSiblingElement(psymbol, false, true, viewOptions);
|
27510
|
+
const parentContainer = currentElement.parent;
|
27511
|
+
if (nextFocusableEle) {
|
27512
|
+
if (nextFocusableEle.parent === parentContainer) {
|
27513
|
+
selectionState.resetRange(nextFocusableEle, 0);
|
27020
27514
|
}
|
27021
27515
|
else {
|
27022
27516
|
selectionState.resetRange(parentContainer, 0);
|
27023
|
-
//selectionState.clear();
|
27024
27517
|
}
|
27025
|
-
currentElement.remove();
|
27026
|
-
currentElement.destroy();
|
27027
27518
|
}
|
27519
|
+
else {
|
27520
|
+
selectionState.resetRange(parentContainer, 0);
|
27521
|
+
//selectionState.clear();
|
27522
|
+
}
|
27523
|
+
currentElement.remove();
|
27524
|
+
currentElement.destroy();
|
27028
27525
|
}
|
27029
27526
|
});
|
27030
27527
|
};
|
@@ -27048,39 +27545,24 @@ const deleteCurrentParagraph = (evt) => {
|
|
27048
27545
|
// }
|
27049
27546
|
// });
|
27050
27547
|
// };
|
27051
|
-
const setDataElementProps = (evt) => {
|
27052
|
-
evt.menus.push({
|
27053
|
-
icon: 'Settings', caption: '内容控制设置', eventObj: {
|
27054
|
-
onClick: (e) => {
|
27055
|
-
console.log('点击了');
|
27056
|
-
}
|
27057
|
-
}
|
27058
|
-
});
|
27059
|
-
};
|
27060
27548
|
const onTableContextmenu = (evt) => {
|
27061
27549
|
const { selectionState, ctx: { viewOptions }, currentElement } = evt;
|
27062
27550
|
if (TableUtil.canDeleteTable(selectionState)) {
|
27063
27551
|
evt.menus.push({
|
27064
|
-
|
27065
|
-
|
27066
|
-
|
27067
|
-
|
27068
|
-
|
27069
|
-
selectionState.resetRange(prevEle, -1);
|
27070
|
-
}
|
27071
|
-
currentElement.remove();
|
27072
|
-
currentElement.destroy();
|
27552
|
+
caption: '删除表格', click: () => {
|
27553
|
+
selectionState.clear();
|
27554
|
+
const prevEle = ElementUtil.getRecursionPrevSiblingElement(currentElement, false, true, viewOptions);
|
27555
|
+
if (prevEle) {
|
27556
|
+
selectionState.resetRange(prevEle, -1);
|
27073
27557
|
}
|
27558
|
+
currentElement.remove();
|
27559
|
+
currentElement.destroy();
|
27074
27560
|
}
|
27075
27561
|
});
|
27076
27562
|
}
|
27077
27563
|
if (TableUtil.canMergeCells(selectionState)) {
|
27078
27564
|
evt.menus.push({
|
27079
|
-
|
27080
|
-
onClick: (cevt) => {
|
27081
|
-
TableUtil.mergeCells(selectionState);
|
27082
|
-
}
|
27083
|
-
}
|
27565
|
+
caption: '合并单元格', click: () => { TableUtil.mergeCells(selectionState); }
|
27084
27566
|
});
|
27085
27567
|
}
|
27086
27568
|
if (TableUtil.canSplitCell(selectionState)) {
|
@@ -27092,27 +27574,19 @@ const onTableContextmenu = (evt) => {
|
|
27092
27574
|
// }
|
27093
27575
|
// });
|
27094
27576
|
evt.menus.push({
|
27095
|
-
|
27096
|
-
onClick: (cevt) => {
|
27097
|
-
TableUtil.restoreCell(selectionState);
|
27098
|
-
}
|
27099
|
-
}
|
27577
|
+
caption: '拆分单元格', click: () => { TableUtil.restoreCell(selectionState); }
|
27100
27578
|
});
|
27101
27579
|
}
|
27102
27580
|
evt.menus.push({
|
27103
|
-
|
27104
|
-
|
27105
|
-
|
27106
|
-
currentElement.refreshView();
|
27107
|
-
}
|
27581
|
+
caption: '上方插入段落', click: () => {
|
27582
|
+
currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex());
|
27583
|
+
currentElement.refreshView();
|
27108
27584
|
}
|
27109
27585
|
});
|
27110
27586
|
evt.menus.push({
|
27111
|
-
|
27112
|
-
|
27113
|
-
|
27114
|
-
currentElement.refreshView();
|
27115
|
-
}
|
27587
|
+
caption: '下方插入段落', click: () => {
|
27588
|
+
currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex() + 1);
|
27589
|
+
currentElement.refreshView();
|
27116
27590
|
}
|
27117
27591
|
});
|
27118
27592
|
evt.menus = removeDuplicatesEvent(evt.menus);
|
@@ -27128,5 +27602,5 @@ function removeDuplicatesEvent(events) {
|
|
27128
27602
|
return arr;
|
27129
27603
|
}
|
27130
27604
|
|
27131
|
-
export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, CopyElementEvent, DOMEventSource, DOMSubscription, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocEditor, DocMode, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentInput, DocumentPaginator, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementReader, ElementSerialize, ElementUtil, EventBus, EventMap, EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, InputElementEvent, IsInSideDataElement, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag, MouseElementEvent, MousedownElementEvent, MuiltBlockLineRenderObject, OnceSubject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageBreakElement, PageBreakFactory, PageBreakRenderObject, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphNumberType, ParagraphProps, ParagraphRenderObject, PasteElementEvent, PermanentTeethElement, PermanentTeethFactory, PermanentTeethProps, PermanentTeethRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RowMinHeight, RunElementFactory, SVGElement, SVGFactory, SVGProps, SVGRenderObject, SelectionOverlays, SelectionRange, SelectionState, Subject, SubjectSubscription, Subscription, TabElement, TabFactory, TabRenderObject, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TextUnitsHolder, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, addReturn, clearChildrenRenderCache, clearTraces, cloneChildren, cloneElementBase, defaultParaHanging, deleteCurrentParagraph, docOpsMap, elementTypeEventHandler, exportDecoratorHTML, falseChar, fontMapFunc, formatEle, fromEvent, generatePatch, getCalleeName, getFocusTextSegment, inputText, insertEle, invokeTypeHandler, isDate, logUpdateEleProps, objectToString$4 as objectToString, onTableContextmenu, onceTask, parser, reactiveMap, removeEle, removeText, renderErrorTip, renderUnderWavyLine, runTextLineRender, setChildrenModifyFlag,
|
27605
|
+
export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, CopyElementEvent, DOMEventSource, DOMSubscription, DataContainerElement, DataContainerFactory, DataContainerProps, DataContainerRenderObject, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocEditor, DocInputSuggestions, DocMode, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentInput, DocumentPaginator, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementReader, ElementSerialize, ElementUtil, EventBus, EventMap, EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, InputElementEvent, IsInSideDataElement, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag, MouseElementEvent, MousedownElementEvent, MuiltBlockLineRenderObject, OnceSubject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageBreakElement, PageBreakFactory, PageBreakRenderObject, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphNumberType, ParagraphProps, ParagraphRenderObject, PasteElementEvent, PermanentTeethElement, PermanentTeethFactory, PermanentTeethProps, PermanentTeethRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RowMinHeight, RunElementFactory, SVGElement, SVGFactory, SVGProps, SVGRenderObject, SelectionOverlays, SelectionRange, SelectionState, Subject, SubjectSubscription, Subscription, TEXT_HEIGHT_FACTOR, TabElement, TabFactory, TabRenderObject, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TextUnitsHolder, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, addReturn, clearChildrenRenderCache, clearTraces, cloneChildren, cloneElementBase, defaultParaHanging, deleteCurrentParagraph, docOpsMap, elementTypeEventHandler, exportDecoratorHTML, falseChar, fontMapFunc, formatEle, fromEvent, generatePatch, getCalleeName, getFocusTextSegment, inputText, insertEle, invokeTypeHandler, isDate, logUpdateEleProps, objectToString$4 as objectToString, onTableContextmenu, onceTask, parser, reactiveMap, removeEle, removeText, renderErrorTip, renderUnderWavyLine, runTextLineRender, setChildrenModifyFlag, setNotifyChangedCallback, setTraceTrackingFlag, suppressTracking, targetMaps, textLineRenderMode, toRawType, toTypeString, trueChar, validateDataEle, validateDataEleRenderObj, validateInlineInputRenderObj, watchChanged };
|
27132
27606
|
//# sourceMappingURL=index.js.map
|