@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.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 = 7;
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
- if (control instanceof TextGroupElement) {
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.selectionState.resetRange(nextEle, 0);
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
- if (!startControl || !editable) {
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
- //console.time('patch');
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
- //console.timeEnd('patch');
27699
+ console.timeEnd('patch');
27624
27700
  };
27625
27701
  render();
27626
27702
  this.onShouldRender.subscribe(() => {