@hailin-zheng/editor-core 2.1.16 → 2.1.18

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 CHANGED
@@ -4703,10 +4703,16 @@ class TableRowElement extends BlockContainerElement {
4703
4703
  }
4704
4704
  }
4705
4705
  class TableRowRenderObject extends MuiltBlockLineRenderObject {
4706
+ //被截断的行是否需要重新计算高度
4707
+ remeasureState = true;
4708
+ //当前行是否存在合并单元格
4709
+ hasMergeCells = false;
4706
4710
  render(e) {
4707
4711
  }
4708
4712
  clone() {
4709
4713
  const cloneRender = new TableRowRenderObject(this.element);
4714
+ cloneRender.remeasureState = this.remeasureState;
4715
+ cloneRender.hasMergeCells = this.hasMergeCells;
4710
4716
  cloneRender.rect = ElementUtil.cloneRect(this.rect);
4711
4717
  for (let i = 0; i < this.length; i++) {
4712
4718
  cloneRender.addChild(this.getChild(i).clone());
@@ -8298,8 +8304,9 @@ class DataElementBarcode extends DataElementLeaf {
8298
8304
  }
8299
8305
  createRenderObject() {
8300
8306
  const render = new DataElementBarcodeRenderObject(this);
8301
- render.rect.width = this.props.width + 2;
8302
- render.rect.height = this.props.height + 2;
8307
+ const { width, height } = render.measureSize();
8308
+ render.rect.width = width + 2;
8309
+ render.rect.height = height + 2;
8303
8310
  return render;
8304
8311
  }
8305
8312
  serialize(options) {
@@ -8370,11 +8377,27 @@ class DataElementBarcodeRenderObject extends ResizeLeafRenderObject {
8370
8377
  else {
8371
8378
  const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
8372
8379
  JsBarcode__default["default"](svg, this.element.props.text);
8380
+ const width = Number.parseInt(svg.getAttribute('width').replace('px', ''));
8381
+ const height = Number.parseInt(svg.getAttribute('height').replace('px', ''));
8382
+ svg.setAttribute('width', this.element.props.width + 'px');
8383
+ svg.setAttribute('height', height * (this.element.props.width / width) + 'px');
8373
8384
  const vNode = snabbdom.toVNode(svg);
8374
8385
  t.children = [vNode];
8375
8386
  }
8376
8387
  return t;
8377
8388
  }
8389
+ measureSize() {
8390
+ if (this.element.props.type === 'qrcode') {
8391
+ return { width: this.element.props.width, height: this.element.props.height };
8392
+ }
8393
+ else {
8394
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
8395
+ JsBarcode__default["default"](svg, this.element.props.text);
8396
+ const width = Number.parseInt(svg.getAttribute('width').replace('px', ''));
8397
+ const height = Number.parseInt(svg.getAttribute('height').replace('px', ''));
8398
+ return { width: this.element.props.width, height: height * (this.element.props.width / width) };
8399
+ }
8400
+ }
8378
8401
  toSvgString(qr, border, lightColor, darkColor) {
8379
8402
  let parts = [];
8380
8403
  for (let y = 0; y < qr.size; y++) {
@@ -11201,7 +11224,12 @@ class ElementUtil {
11201
11224
  if (render instanceof TableRenderObject) {
11202
11225
  //this.setTableAlign(render);
11203
11226
  this.remeasureTableMerge(render);
11204
- render.getItems().forEach(item => this.remeasure(item, false), null);
11227
+ render.getItems().forEach(item => {
11228
+ if (item.remeasureState) {
11229
+ this.remeasure(item, false);
11230
+ item.remeasureState = false;
11231
+ }
11232
+ }, null);
11205
11233
  }
11206
11234
  const innerRect = render.getInnerRect();
11207
11235
  innerRect.height = 0;
@@ -11217,7 +11245,7 @@ class ElementUtil {
11217
11245
  render.updateRenderHeight(innerRect);
11218
11246
  return innerRect.height;
11219
11247
  }
11220
- static remeasureTableRow(rowRender, foreceColIndex = -1) {
11248
+ static remeasureTableRow(rowRender, forceColIndex = -1) {
11221
11249
  const rowEle = rowRender.element;
11222
11250
  let maxCellHeight = rowEle.props.minHeight > 20 ? rowEle.props.minHeight : 20;
11223
11251
  //限制行最小高度
@@ -11226,7 +11254,7 @@ class ElementUtil {
11226
11254
  for (let i = 0; i < rowRender.length; i++) {
11227
11255
  const cellRender = rowRender.getChild(i);
11228
11256
  const { vMerge } = cellRender.element.props;
11229
- if (cellRender.rect.height > maxCellHeight && (vMerge !== 'restart' || i === foreceColIndex)) {
11257
+ if (cellRender.rect.height > maxCellHeight && (vMerge !== 'restart' || i === forceColIndex)) {
11230
11258
  maxCellHeight = cellRender.rect.height;
11231
11259
  }
11232
11260
  }
@@ -11235,7 +11263,7 @@ class ElementUtil {
11235
11263
  const cellRender = rowRender.getChild(i);
11236
11264
  const cellElement = cellRender.element;
11237
11265
  const { vMerge } = cellElement.props;
11238
- if ((vMerge !== 'restart' || i === foreceColIndex) || cellRender.rect.height < maxCellHeight) {
11266
+ if ((vMerge !== 'restart' || i === forceColIndex) || cellRender.rect.height < maxCellHeight) {
11239
11267
  cellRender.rect.height = maxCellHeight;
11240
11268
  }
11241
11269
  //处理单元格内容纵向居中
@@ -11330,11 +11358,16 @@ class ElementUtil {
11330
11358
  let needReCalc = false;
11331
11359
  for (let i = 0; i < tbRender.length; i++) {
11332
11360
  const row = tbRender.getChild(i);
11361
+ if (row.hasMergeCells === false) {
11362
+ continue;
11363
+ }
11364
+ row.hasMergeCells = false;
11333
11365
  for (let j = 0; j < row.length; j++) {
11334
11366
  const cellRender = row.getChild(j);
11335
11367
  const ele = cellRender.element;
11336
11368
  const { vMerge } = ele.props;
11337
11369
  if (vMerge === 'restart') {
11370
+ row.hasMergeCells = true;
11338
11371
  const eleIndex = ele.getIndex();
11339
11372
  const continueRows = this.getContinueVMergeRenderRows(tbRender, i, eleIndex);
11340
11373
  if (!continueRows.length) {
@@ -14949,29 +14982,23 @@ class DocumentArrange {
14949
14982
  while (currRow) {
14950
14983
  const rowContentHeight = this.getBlockLineHeight(currRow);
14951
14984
  if (rowContentHeight + sumHeight > limitHeight) {
14952
- if (currRow instanceof MuiltBlockLineRenderObject) {
14953
- //限制的外框尺寸
14954
- const availHeight = limitHeight - sumHeight;
14955
- //限制的内框尺寸
14956
- const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);
14957
- const cutRow = this.cutRowRenderItem(currRow, limitRenderInnterHeight);
14958
- if (cutRow) {
14959
- cloneTbRender.addChild(cutRow);
14960
- sumHeight += cutRow.rect.height;
14961
- if (currRow.getItems().some(item => item.length !== 0)) {
14962
- cutRows.push(currRow);
14963
- }
14964
- else {
14965
- tbRender.removeChild(currRow);
14966
- }
14967
- if (currRow === joinRow) {
14968
- break;
14969
- }
14970
- currRow = rows[++j];
14985
+ //限制的外框尺寸
14986
+ const availHeight = limitHeight - sumHeight;
14987
+ const limitRenderInnerHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);
14988
+ const cutRow = this.cutRowRenderItem(currRow, limitRenderInnerHeight);
14989
+ if (cutRow) {
14990
+ cloneTbRender.addChild(cutRow);
14991
+ sumHeight += cutRow.rect.height;
14992
+ if (currRow.getItems().some(item => item.length !== 0)) {
14993
+ cutRows.push(currRow);
14971
14994
  }
14972
14995
  else {
14996
+ tbRender.removeChild(currRow);
14997
+ }
14998
+ if (currRow === joinRow) {
14973
14999
  break;
14974
15000
  }
15001
+ currRow = rows[++j];
14975
15002
  }
14976
15003
  else {
14977
15004
  break;
@@ -15003,6 +15030,7 @@ class DocumentArrange {
15003
15030
  // if (render.element.props.minHeight > 0 && render.rect.height < limitHeight) {
15004
15031
  // return null;
15005
15032
  // }
15033
+ render.remeasureState = true;
15006
15034
  const cloneRowRender = render.element.createRenderObject();
15007
15035
  cloneRowRender.rect.width = render.rect.width;
15008
15036
  //cloneRowRender.rect.maxWidth = render.rect.height;
@@ -15899,7 +15927,10 @@ class ElementRenderCut {
15899
15927
  documentRender.addChild(cloneFooterRender);
15900
15928
  //审阅模式,添加审阅窗口
15901
15929
  if (this.options.showReviewWindow && commentsRender) {
15902
- const commentsContainer = commentsRender.element.createRenderObject({ options: this.options, renderCtx: this.renderContext });
15930
+ const commentsContainer = commentsRender.element.createRenderObject({
15931
+ options: this.options,
15932
+ renderCtx: this.renderContext
15933
+ });
15903
15934
  commentsContainer.padding.top = bodyMarginTop;
15904
15935
  commentsContainer.rect.height = documentRender.rect.height;
15905
15936
  documentRender.addChild(commentsContainer);
@@ -15910,13 +15941,19 @@ class ElementRenderCut {
15910
15941
  return docPages;
15911
15942
  }
15912
15943
  getDocInnerRect(documentRender) {
15913
- const render = documentRender.element.createRenderObject({ options: this.options, renderCtx: this.renderContext });
15944
+ const render = documentRender.element.createRenderObject({
15945
+ options: this.options,
15946
+ renderCtx: this.renderContext
15947
+ });
15914
15948
  render.padding = documentRender.padding;
15915
15949
  return render.getInnerRect();
15916
15950
  }
15917
15951
  getFullViewDocRender(documentRender, documentElement) {
15918
15952
  const commentsRender = documentRender.getChild(3);
15919
- const commentsContainer = commentsRender.element.createRenderObject({ options: this.options, renderCtx: this.renderContext });
15953
+ const commentsContainer = commentsRender.element.createRenderObject({
15954
+ options: this.options,
15955
+ renderCtx: this.renderContext
15956
+ });
15920
15957
  documentRender.rect.height -= commentsContainer.rect.height;
15921
15958
  const bodyRender = documentRender.getChild(1);
15922
15959
  if (this.options.showReviewWindow) {
@@ -15930,7 +15967,10 @@ class ElementRenderCut {
15930
15967
  return [documentRender];
15931
15968
  }
15932
15969
  createEmptyBodyRender(bodyRender, limitRect) {
15933
- const pageBodyRender = bodyRender.element.createRenderObject({ options: this.options, renderCtx: this.renderContext });
15970
+ const pageBodyRender = bodyRender.element.createRenderObject({
15971
+ options: this.options,
15972
+ renderCtx: this.renderContext
15973
+ });
15934
15974
  pageBodyRender.rect.width = limitRect.width;
15935
15975
  const bodyInnerLimitRect = pageBodyRender.getInnerRect();
15936
15976
  if (this.options.fullPageView) {
@@ -15954,7 +15994,10 @@ class ElementRenderCut {
15954
15994
  if (render instanceof TableRenderObject) {
15955
15995
  return this.cutTable(render, limitHeight);
15956
15996
  }
15957
- const cloneRender = render.element.createRenderObject({ options: this.options, renderCtx: this.renderContext });
15997
+ const cloneRender = render.element.createRenderObject({
15998
+ options: this.options,
15999
+ renderCtx: this.renderContext
16000
+ });
15958
16001
  cloneRender.setRenderWidth(render.rect.width);
15959
16002
  if (render instanceof MuiltBlockLineRenderObject) {
15960
16003
  let sumHeight = 0;
@@ -16089,16 +16132,16 @@ class ElementRenderCut {
16089
16132
  }
16090
16133
  const cloneRowRender = render.element.createRenderObject();
16091
16134
  cloneRowRender.rect.width = render.rect.width;
16135
+ render.remeasureState = true;
16092
16136
  //cloneRowRender.rect.maxWidth = render.rect.height;
16093
16137
  const cellRenders = [...render.getItems()];
16094
16138
  const cutCellRenders = [];
16095
16139
  for (let i = 0; i < cellRenders.length; i++) {
16096
16140
  const cellRender = cellRenders[i];
16141
+ this.markMergeRowRenderDirty(cellRender);
16097
16142
  if (cellRender.rect.height > limitHeight) {
16098
- //限制的外框尺寸
16099
- const availHeight = limitHeight;
16100
16143
  //限制的内框尺寸
16101
- const limitCellHeight = ElementUtil.innerRectMaxHeight(cellRender, availHeight);
16144
+ const limitCellHeight = ElementUtil.innerRectMaxHeight(cellRender, limitHeight);
16102
16145
  const cutCellRender = this.cutRenderItem(cellRender, limitCellHeight);
16103
16146
  if (cutCellRender) {
16104
16147
  cutCellRenders.push(cutCellRender);
@@ -16122,7 +16165,10 @@ class ElementRenderCut {
16122
16165
  for (let i = 0; i < cutCellRenders.length; i++) {
16123
16166
  let cellRender = cutCellRenders[i];
16124
16167
  if (!cellRender) {
16125
- cellRender = cellRenders[i].element.createRenderObject({ options: this.options, renderCtx: this.renderContext });
16168
+ cellRender = cellRenders[i].element.createRenderObject({
16169
+ options: this.options,
16170
+ renderCtx: this.renderContext
16171
+ });
16126
16172
  cellRender.rect = ElementUtil.cloneRect(cellRenders[i].rect);
16127
16173
  ElementUtil.remeasure(cellRender);
16128
16174
  }
@@ -16132,6 +16178,33 @@ class ElementRenderCut {
16132
16178
  return cloneRowRender;
16133
16179
  }
16134
16180
  }
16181
+ /**
16182
+ * 标记合并单元格所在行需要重新计算
16183
+ * @param cellRender
16184
+ * @private
16185
+ */
16186
+ markMergeRowRenderDirty(cellRender) {
16187
+ const cellEle = cellRender.element;
16188
+ if (cellEle.props.vMerge !== 'restart') {
16189
+ return;
16190
+ }
16191
+ const rowRender = cellRender.parent;
16192
+ rowRender.element;
16193
+ const tb = rowRender.parent;
16194
+ const cellYPos = cellRender.rect.y;
16195
+ for (let i = rowRender.getIndex() + 1; i < tb.length; i++) {
16196
+ const nextRowRender = tb.getChild(i);
16197
+ if (nextRowRender.rect.y <= cellYPos) {
16198
+ nextRowRender.remeasureState = true;
16199
+ nextRowRender.getItems().forEach(item => {
16200
+ this.markMergeRowRenderDirty(item);
16201
+ });
16202
+ }
16203
+ else {
16204
+ break;
16205
+ }
16206
+ }
16207
+ }
16135
16208
  /**
16136
16209
  * 修复->已经截断的合并单元格要向下移动到合适的位置
16137
16210
  * @param tbRender
@@ -27953,6 +28026,7 @@ class DocEditor {
27953
28026
  insertTable(rows, cols) {
27954
28027
  const tb = TableUtil.createTable(rows, cols, this.selectionState);
27955
28028
  this.documentChange.insertTable(tb);
28029
+ return tb;
27956
28030
  }
27957
28031
  /**
27958
28032
  * 插入软换行符
@@ -28817,7 +28891,7 @@ class DocEditor {
28817
28891
  rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
28818
28892
  }
28819
28893
  version() {
28820
- return "2.1.16";
28894
+ return "2.1.18";
28821
28895
  }
28822
28896
  switchPageHeaderEditor() {
28823
28897
  this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);