@hailin-zheng/editor-core 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor.css +2 -1
- package/index-cjs.js +159 -50
- package/index-cjs.js.map +1 -1
- package/index.js +158 -51
- package/index.js.map +1 -1
- package/med_editor/framework/document-context.d.ts +1 -1
- package/med_editor/framework/element-props.d.ts +0 -1
- package/med_editor/framework/impl/data-element/data-element-base-impl.d.ts +13 -0
- package/package.json +1 -1
package/editor.css
CHANGED
@@ -219,6 +219,7 @@
|
|
219
219
|
background: #fff;
|
220
220
|
cursor: default;
|
221
221
|
user-select: none;
|
222
|
+
font-size: 12px;
|
222
223
|
}
|
223
224
|
|
224
225
|
.editor-calendar-header {
|
@@ -522,7 +523,7 @@
|
|
522
523
|
}
|
523
524
|
.editor-input-cursor{
|
524
525
|
position: absolute;
|
525
|
-
width:
|
526
|
+
width: 1.6px;
|
526
527
|
padding: 0;
|
527
528
|
border: none;
|
528
529
|
outline: none;
|
package/index-cjs.js
CHANGED
@@ -833,28 +833,21 @@ function getDocCtx(ele) {
|
|
833
833
|
if (!doc) {
|
834
834
|
return null;
|
835
835
|
}
|
836
|
-
|
837
|
-
if (!options || !options.enableTrackHistory) {
|
838
|
-
return null;
|
839
|
-
}
|
840
|
-
return {
|
841
|
-
doc,
|
842
|
-
options: doc['viewOptions']
|
843
|
-
};
|
836
|
+
return doc;
|
844
837
|
}
|
845
838
|
function insertEle(ele) {
|
846
839
|
if (ele.type === 'psym') {
|
847
840
|
return;
|
848
841
|
}
|
849
|
-
const
|
850
|
-
if (!
|
842
|
+
const docCtx = getDocCtx(ele);
|
843
|
+
if (!docCtx) {
|
851
844
|
return;
|
852
845
|
}
|
853
846
|
// const serializeObj = getEleSerializeFunc(ele, options);
|
854
847
|
// if (!serializeObj) {
|
855
848
|
// return;
|
856
849
|
// }
|
857
|
-
appendToOps(
|
850
|
+
appendToOps(docCtx, ele, {
|
858
851
|
//如果当前插入的为单元格,由于新插入的单元格,内部的内容没有补足,导致后续计算索引会出现问题
|
859
852
|
//之前为ele.clone(true);
|
860
853
|
insert: ele
|
@@ -864,11 +857,11 @@ function removeEle(ele) {
|
|
864
857
|
if (ele.type === 'psym') {
|
865
858
|
return;
|
866
859
|
}
|
867
|
-
const
|
868
|
-
if (!
|
860
|
+
const docCtx = getDocCtx(ele);
|
861
|
+
if (!docCtx) {
|
869
862
|
return;
|
870
863
|
}
|
871
|
-
appendToOps(
|
864
|
+
appendToOps(docCtx, ele, {
|
872
865
|
delete: ele.clone(true),
|
873
866
|
});
|
874
867
|
}
|
@@ -891,15 +884,15 @@ function getOpsLog(ele, ops) {
|
|
891
884
|
};
|
892
885
|
}
|
893
886
|
function inputText(ele, startIndex, input) {
|
894
|
-
const
|
895
|
-
if (!
|
887
|
+
const docCtx = getDocCtx(ele);
|
888
|
+
if (!docCtx) {
|
896
889
|
return;
|
897
890
|
}
|
898
891
|
if (!input) {
|
899
892
|
return;
|
900
893
|
}
|
901
894
|
//处理修复:如果当前的文字刚插入,这时候输入的文字内容已经被序列化到操作日志中了,就不需要生成操作日志
|
902
|
-
let array = docOpsMap.get(
|
895
|
+
let array = docOpsMap.get(docCtx);
|
903
896
|
if (array) {
|
904
897
|
const lastLog = array[array.length - 1];
|
905
898
|
if (lastLog && 'insert' in lastLog.ops) {
|
@@ -908,7 +901,7 @@ function inputText(ele, startIndex, input) {
|
|
908
901
|
}
|
909
902
|
}
|
910
903
|
}
|
911
|
-
appendToOps(
|
904
|
+
appendToOps(docCtx, ele, {
|
912
905
|
insText: {
|
913
906
|
index: startIndex,
|
914
907
|
length: input.length
|
@@ -917,14 +910,14 @@ function inputText(ele, startIndex, input) {
|
|
917
910
|
});
|
918
911
|
}
|
919
912
|
function removeText(ele, index, length, content) {
|
920
|
-
const
|
921
|
-
if (!
|
913
|
+
const docCtx = getDocCtx(ele);
|
914
|
+
if (!docCtx) {
|
922
915
|
return;
|
923
916
|
}
|
924
917
|
if (!length) {
|
925
918
|
return;
|
926
919
|
}
|
927
|
-
appendToOps(
|
920
|
+
appendToOps(docCtx, ele, {
|
928
921
|
delText: {
|
929
922
|
index,
|
930
923
|
length
|
@@ -939,15 +932,15 @@ function removeText(ele, index, length, content) {
|
|
939
932
|
* @returns
|
940
933
|
*/
|
941
934
|
function formatEle(ele, props) {
|
942
|
-
const
|
943
|
-
if (!
|
935
|
+
const docCtx = getDocCtx(ele);
|
936
|
+
if (!docCtx) {
|
944
937
|
return;
|
945
938
|
}
|
946
939
|
const updateKeys = Object.keys(props);
|
947
940
|
if (!updateKeys.length) {
|
948
941
|
return;
|
949
942
|
}
|
950
|
-
appendToOps(
|
943
|
+
appendToOps(docCtx, ele, {
|
951
944
|
format: getExactDiffProps(ele.props, props)
|
952
945
|
});
|
953
946
|
}
|
@@ -959,11 +952,11 @@ function formatEle(ele, props) {
|
|
959
952
|
* @param newValue
|
960
953
|
*/
|
961
954
|
function logUpdateEleProps(ele, p, oldValue, newValue) {
|
962
|
-
const
|
963
|
-
if (!
|
955
|
+
const docCtx = getDocCtx(ele);
|
956
|
+
if (!docCtx) {
|
964
957
|
return;
|
965
958
|
}
|
966
|
-
appendToOps(
|
959
|
+
appendToOps(docCtx, ele, {
|
967
960
|
format: {
|
968
961
|
[p]: {
|
969
962
|
oldValue,
|
@@ -2409,7 +2402,6 @@ class DataEleBaseProps extends INotifyPropertyChanged {
|
|
2409
2402
|
printable;
|
2410
2403
|
secretBrowse;
|
2411
2404
|
editable = true;
|
2412
|
-
deleteable;
|
2413
2405
|
minLength;
|
2414
2406
|
underline;
|
2415
2407
|
expression;
|
@@ -2425,7 +2417,6 @@ class DataEleBaseProps extends INotifyPropertyChanged {
|
|
2425
2417
|
target.fieldName = source.fieldName;
|
2426
2418
|
target.required = source.required;
|
2427
2419
|
target.editable = source.editable;
|
2428
|
-
target.deleteable = source.deleteable;
|
2429
2420
|
target.secretBrowse = source.secretBrowse;
|
2430
2421
|
target.printable = source.printable;
|
2431
2422
|
target.minLength = source.minLength;
|
@@ -2455,9 +2446,6 @@ class DataEleBaseProps extends INotifyPropertyChanged {
|
|
2455
2446
|
if (!this.editable) {
|
2456
2447
|
props['editable'] = this.editable;
|
2457
2448
|
}
|
2458
|
-
if (this.deleteable) {
|
2459
|
-
props["deleteable"] = this.deleteable;
|
2460
|
-
}
|
2461
2449
|
if (this.minLength) {
|
2462
2450
|
props["minLength"] = this.minLength;
|
2463
2451
|
}
|
@@ -3681,7 +3669,8 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
3681
3669
|
width: this.rect.width,
|
3682
3670
|
height: this.rect.height - 1,
|
3683
3671
|
viewBox: `0 0 ${this.rect.width} ${this.rect.height - 1}`,
|
3684
|
-
overflow: "hidden"
|
3672
|
+
overflow: "hidden",
|
3673
|
+
"shape-rendering": "optimizeSpeed"
|
3685
3674
|
},
|
3686
3675
|
},
|
3687
3676
|
children: [
|
@@ -3973,6 +3962,7 @@ class DataElementRenderObject extends InlineGroupRenderObject {
|
|
3973
3962
|
}
|
3974
3963
|
});
|
3975
3964
|
}
|
3965
|
+
renderErrorTip(event, this);
|
3976
3966
|
return node;
|
3977
3967
|
}
|
3978
3968
|
}
|
@@ -4028,6 +4018,11 @@ class DataElementBaseFactory extends ElementFactory {
|
|
4028
4018
|
}
|
4029
4019
|
}
|
4030
4020
|
}
|
4021
|
+
/**
|
4022
|
+
* 渲染数据元背景修饰
|
4023
|
+
* @param event
|
4024
|
+
* @param r
|
4025
|
+
*/
|
4031
4026
|
function exportDecoratorHTML(event, r) {
|
4032
4027
|
const canPaint = r.element.isMouseenter || r.element.isFocused;
|
4033
4028
|
if (!canPaint) {
|
@@ -4072,10 +4067,12 @@ function exportDecoratorHTML(event, r) {
|
|
4072
4067
|
const sharpPoints1 = CommonUtil.resharpPoints(rightPoints);
|
4073
4068
|
const sharpPoints = CommonUtil.resharpPoints([...leftPoints.reverse()]);
|
4074
4069
|
const path = [...sharpPoints, ...sharpPoints1, sharpPoints[0]].map((item, index) => ((index === 0) ? 'M' : "L") + item.x + " " + item.y).join(" ");
|
4075
|
-
event.highlights.push(ElementUtil.createSvgPath({
|
4070
|
+
event.highlights.push(ElementUtil.createSvgPath({
|
4071
|
+
d: path,
|
4076
4072
|
stroke: color,
|
4077
4073
|
fill: 'none',
|
4078
|
-
'stroke-width': 1
|
4074
|
+
'stroke-width': 1
|
4075
|
+
}));
|
4079
4076
|
return;
|
4080
4077
|
}
|
4081
4078
|
}
|
@@ -4090,6 +4087,110 @@ function exportDecoratorHTML(event, r) {
|
|
4090
4087
|
}
|
4091
4088
|
}
|
4092
4089
|
}
|
4090
|
+
/**
|
4091
|
+
* 渲染数据源验证错误提示框
|
4092
|
+
*/
|
4093
|
+
function renderErrorTip(event, r) {
|
4094
|
+
if (!event.options.enableDataEleInputValidate || event.mode === 'print') {
|
4095
|
+
return;
|
4096
|
+
}
|
4097
|
+
const ele = r.element;
|
4098
|
+
//元素调用内部验证
|
4099
|
+
ele.onChangedValidate();
|
4100
|
+
if (!ele.errorTip) {
|
4101
|
+
return;
|
4102
|
+
}
|
4103
|
+
//渲染底部波浪线
|
4104
|
+
renderUnderWavyLine(event, r, 'red');
|
4105
|
+
if (ele.paintRenders.indexOf(r) !== 0) {
|
4106
|
+
return;
|
4107
|
+
}
|
4108
|
+
const { x, y } = event.globalPos;
|
4109
|
+
const docRender = ElementUtil.getParentRender(r, DocumentRenderObject);
|
4110
|
+
const content = ele.errorTip;
|
4111
|
+
let left = ele.isFocused ? -10 : 5;
|
4112
|
+
//显示在文档的右测
|
4113
|
+
left += docRender.rect.x + docRender.rect.width + 20;
|
4114
|
+
let sel = 'div.tg-container';
|
4115
|
+
if (ele.isFocused) {
|
4116
|
+
sel += '.tg-container--selected';
|
4117
|
+
}
|
4118
|
+
const node = {
|
4119
|
+
sel,
|
4120
|
+
key: ele.props.id,
|
4121
|
+
data: {
|
4122
|
+
style: {
|
4123
|
+
left: `${left}px`,
|
4124
|
+
top: `${y}px`
|
4125
|
+
},
|
4126
|
+
dataset: {
|
4127
|
+
key: ele.key
|
4128
|
+
}
|
4129
|
+
},
|
4130
|
+
children: [{
|
4131
|
+
sel: 'div.header',
|
4132
|
+
data: {},
|
4133
|
+
children: [{
|
4134
|
+
sel: 'span.header-user',
|
4135
|
+
data: {},
|
4136
|
+
text: ele.props.caption,
|
4137
|
+
}]
|
4138
|
+
}, {
|
4139
|
+
sel: 'div.content',
|
4140
|
+
data: {},
|
4141
|
+
text: content
|
4142
|
+
}]
|
4143
|
+
};
|
4144
|
+
event.addChangeTips(node);
|
4145
|
+
const triangleTipX = x + r.rect.width / 2;
|
4146
|
+
const tipLineAWidth = docRender.rect.x + docRender.rect.width - triangleTipX;
|
4147
|
+
const tipLineA = {
|
4148
|
+
sel: 'div.doc-triangle-line',
|
4149
|
+
data: {
|
4150
|
+
style: {
|
4151
|
+
left: `${triangleTipX}px`,
|
4152
|
+
top: `${y + r.rect.height}px`,
|
4153
|
+
width: tipLineAWidth + 'px'
|
4154
|
+
}
|
4155
|
+
}
|
4156
|
+
};
|
4157
|
+
const tipLineB = {
|
4158
|
+
sel: 'div.doc-triangle-line',
|
4159
|
+
data: {
|
4160
|
+
style: {
|
4161
|
+
left: `${triangleTipX + tipLineAWidth}px`,
|
4162
|
+
top: `${y + r.rect.height}px`,
|
4163
|
+
width: 20 + 'px'
|
4164
|
+
},
|
4165
|
+
dataset: {
|
4166
|
+
key: ele.key
|
4167
|
+
}
|
4168
|
+
}
|
4169
|
+
};
|
4170
|
+
const triangleTip = {
|
4171
|
+
sel: `div.doc-triangle`,
|
4172
|
+
data: {
|
4173
|
+
style: {
|
4174
|
+
left: `${triangleTipX}px`,
|
4175
|
+
top: `${y + r.rect.height * 2 / 3}px`
|
4176
|
+
}
|
4177
|
+
}
|
4178
|
+
};
|
4179
|
+
event.addChangeTips(triangleTip);
|
4180
|
+
event.addChangeTips(tipLineA);
|
4181
|
+
event.addChangeTips(tipLineB);
|
4182
|
+
}
|
4183
|
+
/**
|
4184
|
+
* 渲染底部波浪线
|
4185
|
+
*/
|
4186
|
+
function renderUnderWavyLine(event, r, color) {
|
4187
|
+
const { x, y } = event.relativePagePos;
|
4188
|
+
let d = `M ${x} ${y + r.rect.height - 2} q 1.5,2, `;
|
4189
|
+
const width = r.rect.width;
|
4190
|
+
d += Array(Math.ceil(width / 3)).fill("3,0").join(' t ');
|
4191
|
+
const path = ElementUtil.createSvgPath({ d, fill: 'none', stroke: color });
|
4192
|
+
event.highlights.push(path);
|
4193
|
+
}
|
4093
4194
|
/**
|
4094
4195
|
* 获取渲染元素相对稳当的位置
|
4095
4196
|
* @param render
|
@@ -6860,6 +6961,9 @@ class CommentElement extends LeafElement {
|
|
6860
6961
|
}
|
6861
6962
|
class CommentRenderObject extends LeafRenderObject {
|
6862
6963
|
exportSVG(event) {
|
6964
|
+
if (event.mode === 'print') {
|
6965
|
+
return;
|
6966
|
+
}
|
6863
6967
|
const renderPos = { ...event.relativePagePos };
|
6864
6968
|
const paraLinePos = ElementUtil.getParaLinePos(this, { x: renderPos.x, y: renderPos.y });
|
6865
6969
|
const color = '#ff4d4f';
|
@@ -8366,9 +8470,6 @@ class DataElementDate extends DataElementInlineGroup {
|
|
8366
8470
|
this.onChangedValidate();
|
8367
8471
|
}
|
8368
8472
|
isValid(val, format) {
|
8369
|
-
if (!format) {
|
8370
|
-
format = this.props.format ?? 'YYYY-MM-DD';
|
8371
|
-
}
|
8372
8473
|
const date = moment__default["default"](val, format);
|
8373
8474
|
return date.isValid();
|
8374
8475
|
}
|
@@ -8383,8 +8484,7 @@ class DataElementDate extends DataElementInlineGroup {
|
|
8383
8484
|
if (res) {
|
8384
8485
|
return res;
|
8385
8486
|
}
|
8386
|
-
const
|
8387
|
-
const date = moment__default["default"](this.getValue(), format, true);
|
8487
|
+
const date = moment__default["default"](this.getValue(), true);
|
8388
8488
|
if (!date.isValid()) {
|
8389
8489
|
return '日期格式不正确';
|
8390
8490
|
}
|
@@ -10754,7 +10854,6 @@ class ElementUtil {
|
|
10754
10854
|
dest.printable = props.printable ?? true;
|
10755
10855
|
dest.required = props.required;
|
10756
10856
|
dest.secretBrowse = props.secretBrowse;
|
10757
|
-
dest.deleteable = props.deleteable;
|
10758
10857
|
dest.underline = props.underline;
|
10759
10858
|
dest.expression = props.expression;
|
10760
10859
|
dest.hidden = props.hidden;
|
@@ -12902,7 +13001,8 @@ class EditorContext {
|
|
12902
13001
|
docChange;
|
12903
13002
|
clearPrevDocCb;
|
12904
13003
|
//绘制结束之后回调函数
|
12905
|
-
nextViewFn;
|
13004
|
+
//nextViewFn!: (() => void) | null;
|
13005
|
+
nextViewFns = [];
|
12906
13006
|
constructor(selectionState, viewOptions) {
|
12907
13007
|
this.selectionState = selectionState;
|
12908
13008
|
this.viewOptions = viewOptions;
|
@@ -12913,7 +13013,12 @@ class EditorContext {
|
|
12913
13013
|
});
|
12914
13014
|
}
|
12915
13015
|
onNextView(cb) {
|
12916
|
-
|
13016
|
+
if (!cb) {
|
13017
|
+
this.nextViewFns.length = 0;
|
13018
|
+
return;
|
13019
|
+
}
|
13020
|
+
//this.nextViewFn = cb;
|
13021
|
+
this.nextViewFns.push(cb);
|
12917
13022
|
}
|
12918
13023
|
get document() {
|
12919
13024
|
return this._document;
|
@@ -18478,6 +18583,7 @@ class ElementTrackManage {
|
|
18478
18583
|
*/
|
18479
18584
|
generateTrack() {
|
18480
18585
|
if (!this.docCtx.viewOptions.enableTrackHistory) {
|
18586
|
+
clearTraces(this.docCtx.document);
|
18481
18587
|
return;
|
18482
18588
|
}
|
18483
18589
|
const ops = generatePatch(this.docCtx.document);
|
@@ -20267,10 +20373,11 @@ class DocEditor {
|
|
20267
20373
|
this.readDocChangeLog();
|
20268
20374
|
this.refreshDocument();
|
20269
20375
|
this.flushTask = null;
|
20270
|
-
|
20271
|
-
|
20376
|
+
//回调
|
20377
|
+
let cbs = [...this.docCtx.nextViewFns];
|
20378
|
+
if (cbs.length) {
|
20272
20379
|
this.docCtx.onNextView(null);
|
20273
|
-
cb();
|
20380
|
+
cbs.forEach(cb => cb());
|
20274
20381
|
return;
|
20275
20382
|
}
|
20276
20383
|
this.historyMange.generateTrack();
|
@@ -20431,7 +20538,7 @@ class DocEditor {
|
|
20431
20538
|
this.editInput.style.left = position.x + 'px';
|
20432
20539
|
this.editInput.style.top = position.y + 'px';
|
20433
20540
|
this.editInput.style.height = position.height + 'px';
|
20434
|
-
this.editInput.style.width = "
|
20541
|
+
this.editInput.style.width = "1.6px";
|
20435
20542
|
this.editInput.readOnly = false;
|
20436
20543
|
this.setCursorVisibility(true);
|
20437
20544
|
//判断光标位置是否被可见,如果不可见,需要将其设置到可见区域
|
@@ -21252,14 +21359,14 @@ class DocEditor {
|
|
21252
21359
|
if (this.viewOptions.reviewWindowWidth > 0) {
|
21253
21360
|
this.viewOptions.reviewWindowWidth = 0;
|
21254
21361
|
//刷新页面
|
21255
|
-
this.adjustPageLayout();
|
21362
|
+
this.docCtx.onNextView(() => { this.adjustPageLayout(); });
|
21256
21363
|
}
|
21257
21364
|
}
|
21258
21365
|
else {
|
21259
21366
|
if (this.viewOptions.reviewWindowWidth === 0) {
|
21260
21367
|
this.viewOptions.reviewWindowWidth = 250;
|
21261
21368
|
//刷新页面
|
21262
|
-
this.adjustPageLayout();
|
21369
|
+
this.docCtx.onNextView(() => { this.adjustPageLayout(); });
|
21263
21370
|
}
|
21264
21371
|
}
|
21265
21372
|
}
|
@@ -21534,7 +21641,7 @@ class DocEditor {
|
|
21534
21641
|
rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
|
21535
21642
|
}
|
21536
21643
|
version() {
|
21537
|
-
return "2.2.
|
21644
|
+
return "2.2.1";
|
21538
21645
|
}
|
21539
21646
|
switchPageHeaderEditor() {
|
21540
21647
|
this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
|
@@ -27272,6 +27379,8 @@ exports.parser = parser;
|
|
27272
27379
|
exports.reactiveMap = reactiveMap;
|
27273
27380
|
exports.removeEle = removeEle;
|
27274
27381
|
exports.removeText = removeText;
|
27382
|
+
exports.renderErrorTip = renderErrorTip;
|
27383
|
+
exports.renderUnderWavyLine = renderUnderWavyLine;
|
27275
27384
|
exports.runTextLineRender = runTextLineRender;
|
27276
27385
|
exports.setChildrenModifyFlag = setChildrenModifyFlag;
|
27277
27386
|
exports.setDataElementProps = setDataElementProps;
|