@hailin-zheng/editor-core 2.2.2 → 2.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|