@hailin-zheng/editor-core 2.0.15 → 2.0.16
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/index-cjs.js +115 -39
- package/index-cjs.js.map +1 -1
- package/index.js +115 -39
- package/index.js.map +1 -1
- package/med_editor/framework/document-event.d.ts +8 -0
- package/med_editor/framework/element-util.d.ts +6 -0
- package/med_editor/framework/impl/table/table-util.d.ts +10 -0
- package/package.json +1 -1
package/index.js
CHANGED
@@ -2741,6 +2741,7 @@ class DataDecorateElement extends LeafElement {
|
|
2741
2741
|
}
|
2742
2742
|
}
|
2743
2743
|
});
|
2744
|
+
this.disableClick = !isPrefix;
|
2744
2745
|
this.isDecorate = true;
|
2745
2746
|
}
|
2746
2747
|
createRenderObject() {
|
@@ -3358,7 +3359,6 @@ class DocumentRenderObject extends BlockContainerRenderObject {
|
|
3358
3359
|
'font-family': '仿宋',
|
3359
3360
|
'font-size': '14',
|
3360
3361
|
"fill": this.element.props.color,
|
3361
|
-
'font-style': 'italic',
|
3362
3362
|
x: 0,
|
3363
3363
|
y: 0,
|
3364
3364
|
}
|
@@ -4249,7 +4249,7 @@ class PSymbolElement extends LeafElement {
|
|
4249
4249
|
createRenderObject() {
|
4250
4250
|
const symbol = new PSymbolRenderObject(this);
|
4251
4251
|
symbol.rect.height = this.defaultHeight;
|
4252
|
-
symbol.rect.width =
|
4252
|
+
symbol.rect.width = 1;
|
4253
4253
|
return symbol;
|
4254
4254
|
}
|
4255
4255
|
serialize() {
|
@@ -4798,6 +4798,10 @@ class TextGroupRenderObject extends LeafRenderObject {
|
|
4798
4798
|
const path = `M${event.relativePagePos.x} ${event.relativePagePos.y} L${event.relativePagePos.x + this.rect.width} ${event.relativePagePos.y}`;
|
4799
4799
|
event.highlights.push(ElementUtil.getStrokeSvgPath(path, '#000', 1));
|
4800
4800
|
}
|
4801
|
+
//处理null-text
|
4802
|
+
if (this.element.isDecorate && this.element.disableClick && !this.element.parent) {
|
4803
|
+
t.data.attrs['opacity'] = '0.58';
|
4804
|
+
}
|
4801
4805
|
return t;
|
4802
4806
|
}
|
4803
4807
|
}
|
@@ -5069,10 +5073,7 @@ class SelectionRange {
|
|
5069
5073
|
}
|
5070
5074
|
setInfo(control, offset) {
|
5071
5075
|
if (control instanceof LeafElement) {
|
5072
|
-
|
5073
|
-
offset = offset === -1 ? control.text.length : offset;
|
5074
|
-
}
|
5075
|
-
offset = offset === -1 ? 1 : offset;
|
5076
|
+
offset = ElementUtil.fixedOffset(control, offset);
|
5076
5077
|
return { control, offset };
|
5077
5078
|
}
|
5078
5079
|
else if (control instanceof BranchElement) {
|
@@ -6271,6 +6272,40 @@ class TableUtil {
|
|
6271
6272
|
});
|
6272
6273
|
}
|
6273
6274
|
}
|
6275
|
+
static getTableData(tb) {
|
6276
|
+
//根据实际要提取的行索引进行调整
|
6277
|
+
const rowData = [];
|
6278
|
+
for (let i = 0; i < tb.length; i++) {
|
6279
|
+
const row = tb.getChild(i);
|
6280
|
+
const cellData = [];
|
6281
|
+
for (let j = 0; j < row.length; j++) {
|
6282
|
+
const cell = row.getChild(j);
|
6283
|
+
cellData.push(this.getCellData(cell));
|
6284
|
+
}
|
6285
|
+
rowData.push(cellData);
|
6286
|
+
}
|
6287
|
+
return rowData;
|
6288
|
+
}
|
6289
|
+
/**
|
6290
|
+
* 获取单元格内的数据元的值
|
6291
|
+
* @param target
|
6292
|
+
*/
|
6293
|
+
static getCellData(target) {
|
6294
|
+
if (validateDataEle(target)) {
|
6295
|
+
const dataEle = target;
|
6296
|
+
return { id: dataEle.props.id, value: dataEle.getValue() };
|
6297
|
+
}
|
6298
|
+
if (target instanceof BranchElement) {
|
6299
|
+
for (let i = 0; i < target.length; i++) {
|
6300
|
+
const child = target.getChild(i);
|
6301
|
+
const val = this.getCellData(child);
|
6302
|
+
if (val !== null) {
|
6303
|
+
return val;
|
6304
|
+
}
|
6305
|
+
}
|
6306
|
+
}
|
6307
|
+
return null;
|
6308
|
+
}
|
6274
6309
|
}
|
6275
6310
|
|
6276
6311
|
class TableElement extends BlockContainerElement {
|
@@ -8651,6 +8686,46 @@ class ElementUtil {
|
|
8651
8686
|
]
|
8652
8687
|
};
|
8653
8688
|
}
|
8689
|
+
/**
|
8690
|
+
* 判断是否光标可以设置接受编辑
|
8691
|
+
* @returns
|
8692
|
+
*/
|
8693
|
+
static canSetCursor(startControl, startOffset, editable, viewOptions) {
|
8694
|
+
if (!startControl || !editable) {
|
8695
|
+
return false;
|
8696
|
+
}
|
8697
|
+
if (viewOptions.docMode === DocMode.Design) {
|
8698
|
+
return true;
|
8699
|
+
}
|
8700
|
+
//浏览模式
|
8701
|
+
if (viewOptions.docMode === DocMode.View) {
|
8702
|
+
return false;
|
8703
|
+
}
|
8704
|
+
//表单模式下,如果不在数据元素中,则不显示光标
|
8705
|
+
if (viewOptions.docMode === DocMode.FormEdit) {
|
8706
|
+
if (!IsInSideDataElement(startControl, startOffset)) {
|
8707
|
+
return false;
|
8708
|
+
}
|
8709
|
+
}
|
8710
|
+
if (!ElementUtil.verifyHitable(startControl)) {
|
8711
|
+
return false;
|
8712
|
+
}
|
8713
|
+
//表单模式下,数据元不可编辑
|
8714
|
+
if (viewOptions.docMode === DocMode.FormEdit && IsInSideDataElement(startControl, startOffset)) {
|
8715
|
+
const dataEle = ElementUtil.getDataElement(startControl);
|
8716
|
+
if (dataEle && !dataEle.props.editable) {
|
8717
|
+
return false;
|
8718
|
+
}
|
8719
|
+
}
|
8720
|
+
return true;
|
8721
|
+
}
|
8722
|
+
static fixedOffset(control, offset) {
|
8723
|
+
if (control instanceof TextGroupElement) {
|
8724
|
+
offset = offset === -1 ? control.text.length : offset;
|
8725
|
+
}
|
8726
|
+
offset = offset === -1 ? 1 : offset;
|
8727
|
+
return offset;
|
8728
|
+
}
|
8654
8729
|
}
|
8655
8730
|
|
8656
8731
|
class RenderContext {
|
@@ -10824,7 +10899,7 @@ class DataElementCheckRenderObject extends LeafRenderObject {
|
|
10824
10899
|
data: {
|
10825
10900
|
ns: "http://www.w3.org/2000/svg",
|
10826
10901
|
attrs: {
|
10827
|
-
cx: width / 2,
|
10902
|
+
cx: 2 + width / 2,
|
10828
10903
|
cy: height / 2,
|
10829
10904
|
r: width / 3,
|
10830
10905
|
stroke: 'black',
|
@@ -10839,7 +10914,7 @@ class DataElementCheckRenderObject extends LeafRenderObject {
|
|
10839
10914
|
data: {
|
10840
10915
|
ns: "http://www.w3.org/2000/svg",
|
10841
10916
|
attrs: {
|
10842
|
-
cx: width / 2,
|
10917
|
+
cx: 2 + width / 2,
|
10843
10918
|
cy: height / 2,
|
10844
10919
|
r: width / 5,
|
10845
10920
|
stroke: 'black',
|
@@ -17536,7 +17611,6 @@ class DocumentEvent {
|
|
17536
17611
|
if (resizeColWidth < minColWidth || cellWidth < minColWidth) {
|
17537
17612
|
return;
|
17538
17613
|
}
|
17539
|
-
console.log(resizeColWidth, cellWidth);
|
17540
17614
|
table.setCellWidth(resizeColIndex, resizeColWidth);
|
17541
17615
|
table.setCellWidth(cellIndex, cellWidth);
|
17542
17616
|
this.edgeRenderInfo.mousedownPos = this.currentPos;
|
@@ -17710,6 +17784,15 @@ class DocumentEvent {
|
|
17710
17784
|
*/
|
17711
17785
|
moveCursorToLeft() {
|
17712
17786
|
const { startControl, startOffset } = this.selectionState;
|
17787
|
+
this.moveCursorToLeftHandle(startControl, startOffset);
|
17788
|
+
}
|
17789
|
+
/**
|
17790
|
+
* 向左移动光标处理函数
|
17791
|
+
* @param startControl
|
17792
|
+
* @param startOffset
|
17793
|
+
* @private
|
17794
|
+
*/
|
17795
|
+
moveCursorToLeftHandle(startControl, startOffset) {
|
17713
17796
|
if (startOffset === 0) {
|
17714
17797
|
const oldRegion = ElementUtil.getElementRegion(startControl);
|
17715
17798
|
const prevEle = ElementUtil.getRecursionPrevSiblingElement(startControl, false, true, this.viewOptions);
|
@@ -17718,6 +17801,10 @@ class DocumentEvent {
|
|
17718
17801
|
if (newRegion !== oldRegion) {
|
17719
17802
|
return;
|
17720
17803
|
}
|
17804
|
+
if (this.viewOptions.docMode === DocMode.FormEdit && !ElementUtil.canSetCursor(prevEle, ElementUtil.fixedOffset(prevEle, -1), true, this.viewOptions)) {
|
17805
|
+
this.moveCursorToLeftHandle(prevEle, 0);
|
17806
|
+
return;
|
17807
|
+
}
|
17721
17808
|
this.selectionState.resetRange(prevEle, -1);
|
17722
17809
|
return;
|
17723
17810
|
}
|
@@ -17727,6 +17814,10 @@ class DocumentEvent {
|
|
17727
17814
|
this.selectionState.resetRange(startControl, startOffset - 1);
|
17728
17815
|
}
|
17729
17816
|
else {
|
17817
|
+
if (this.viewOptions.docMode === DocMode.FormEdit && !ElementUtil.canSetCursor(startControl, ElementUtil.fixedOffset(startControl, 0), true, this.viewOptions)) {
|
17818
|
+
this.moveCursorToLeftHandle(startControl, 0);
|
17819
|
+
return;
|
17820
|
+
}
|
17730
17821
|
this.selectionState.resetRange(startControl, 0);
|
17731
17822
|
}
|
17732
17823
|
}
|
@@ -17736,6 +17827,9 @@ class DocumentEvent {
|
|
17736
17827
|
*/
|
17737
17828
|
moveCursorToRight() {
|
17738
17829
|
const { startControl, startOffset } = this.selectionState;
|
17830
|
+
this.moveCursorToRightHandle(startControl, startOffset);
|
17831
|
+
}
|
17832
|
+
moveCursorToRightHandle(startControl, startOffset) {
|
17739
17833
|
if (this.isLeafEleEndOffset(startControl, startOffset)) {
|
17740
17834
|
const oldRegion = ElementUtil.getElementRegion(startControl);
|
17741
17835
|
const nextEle = ElementUtil.getRecursionNextSiblingElement(startControl, false, true, this.viewOptions);
|
@@ -17744,7 +17838,11 @@ class DocumentEvent {
|
|
17744
17838
|
if (oldRegion !== newRegion) {
|
17745
17839
|
return;
|
17746
17840
|
}
|
17747
|
-
this.
|
17841
|
+
if (this.viewOptions.docMode === DocMode.FormEdit && !ElementUtil.canSetCursor(nextEle, ElementUtil.fixedOffset(nextEle, -1), true, this.viewOptions)) {
|
17842
|
+
this.moveCursorToRightHandle(nextEle, ElementUtil.fixedOffset(nextEle, -1));
|
17843
|
+
return;
|
17844
|
+
}
|
17845
|
+
this.selectionState.resetRange(nextEle, 1);
|
17748
17846
|
return;
|
17749
17847
|
}
|
17750
17848
|
}
|
@@ -17753,6 +17851,10 @@ class DocumentEvent {
|
|
17753
17851
|
this.selectionState.resetRange(startControl, startOffset + 1);
|
17754
17852
|
}
|
17755
17853
|
else {
|
17854
|
+
if (this.viewOptions.docMode === DocMode.FormEdit && !ElementUtil.canSetCursor(startControl, 0, true, this.viewOptions)) {
|
17855
|
+
this.moveCursorToRightHandle(startControl, ElementUtil.fixedOffset(startControl, -1));
|
17856
|
+
return;
|
17857
|
+
}
|
17756
17858
|
this.selectionState.resetRange(startControl, 1);
|
17757
17859
|
}
|
17758
17860
|
}
|
@@ -26938,33 +27040,7 @@ class DocEditor {
|
|
26938
27040
|
*/
|
26939
27041
|
canSetCursor() {
|
26940
27042
|
const { startControl, startOffset, editable } = this.selectionState;
|
26941
|
-
|
26942
|
-
return false;
|
26943
|
-
}
|
26944
|
-
if (this.viewOptions.docMode === DocMode.Design) {
|
26945
|
-
return true;
|
26946
|
-
}
|
26947
|
-
//浏览模式
|
26948
|
-
if (this.viewOptions.docMode === DocMode.View) {
|
26949
|
-
return false;
|
26950
|
-
}
|
26951
|
-
//表单模式下,如果不在数据元素中,则不显示光标
|
26952
|
-
if (this.viewOptions.docMode === DocMode.FormEdit) {
|
26953
|
-
if (!IsInSideDataElement(startControl, startOffset)) {
|
26954
|
-
return false;
|
26955
|
-
}
|
26956
|
-
}
|
26957
|
-
if (!ElementUtil.verifyHitable(startControl)) {
|
26958
|
-
return false;
|
26959
|
-
}
|
26960
|
-
//表单模式下,数据元不可编辑
|
26961
|
-
if (this.viewOptions.docMode === DocMode.FormEdit && IsInSideDataElement(startControl, startOffset)) {
|
26962
|
-
const dataEle = ElementUtil.getDataElement(startControl);
|
26963
|
-
if (dataEle && !dataEle.props.editable) {
|
26964
|
-
return false;
|
26965
|
-
}
|
26966
|
-
}
|
26967
|
-
return true;
|
27043
|
+
return ElementUtil.canSetCursor(startControl, startOffset, editable, this.viewOptions);
|
26968
27044
|
}
|
26969
27045
|
/**
|
26970
27046
|
* 修改光标
|
@@ -27608,7 +27684,7 @@ class DocEditor {
|
|
27608
27684
|
const vNodeFunc = this.renderRoot();
|
27609
27685
|
setActiveEditorContext(null);
|
27610
27686
|
const render = () => {
|
27611
|
-
|
27687
|
+
console.time('patch');
|
27612
27688
|
setActiveEditorContext(this);
|
27613
27689
|
const vNode = vNodeFunc.render();
|
27614
27690
|
setActiveEditorContext(null);
|
@@ -27620,7 +27696,7 @@ class DocEditor {
|
|
27620
27696
|
this.vNodeDocContent = this.nodePatch(this.svgContainer, vNode);
|
27621
27697
|
}
|
27622
27698
|
this.afterNodePatch.next();
|
27623
|
-
|
27699
|
+
console.timeEnd('patch');
|
27624
27700
|
};
|
27625
27701
|
render();
|
27626
27702
|
this.onShouldRender.subscribe(() => {
|