@hailin-zheng/editor-core 2.2.17 → 2.2.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
@@ -1749,18 +1749,26 @@ class ViewOptions {
1749
1749
  dataEleEmptyBgColor = '';
1750
1750
  //数据元鼠标悬浮颜色
1751
1751
  dataEleMouseEnterBgColor = '#d9d9d9';
1752
+ dataEleMouseEnterDecoratorMode = 'background';
1752
1753
  //数据元只读背景颜色
1753
1754
  dataEleReadOnlyBgColor = '#d9d9d9';
1754
1755
  //数据元焦点背景颜色
1755
1756
  dataEleFocusedBgColor = '#d9d9d9';
1757
+ dataEleFocusedDecoratorMode = 'background';
1756
1758
  //数据元正常背景颜色
1757
1759
  dataEleNormalBgColor = '#fafafa';
1760
+ //数据元外部框线颜色
1761
+ dataEleOutlineColor = '#0050b3';
1762
+ //数据组外部框线颜色
1763
+ dataGroupOutlineColor = '#0050b3';
1758
1764
  //数据元错误背景颜色
1759
1765
  dataEleErrorBgColor = '#ff4d4f';
1760
1766
  //数据组修饰符号颜色
1761
1767
  dataGroupDecoratorNormalColor = '#0050b3';
1762
1768
  dataGroupDecoratorMouseEnterColor = '#0050b3';
1769
+ dataGroupMouseEnterDecoratorMode = 'outline';
1763
1770
  dataGroupDecoratorFocusedColor = '#0050b3';
1771
+ dataGroupFocusedDecoratorMode = 'outline';
1764
1772
  //数据组正常背景颜色
1765
1773
  dataGroupNormalBgColor = '#fafafa';
1766
1774
  //数据元没有输入值时背景颜色
@@ -1781,8 +1789,6 @@ class ViewOptions {
1781
1789
  trackDelColor = '#000';
1782
1790
  showLineRect;
1783
1791
  showCharRect;
1784
- //数据元交互修饰模式
1785
- dataEleDecoratorMode = 'outline';
1786
1792
  showTabChar;
1787
1793
  showSpaceChar;
1788
1794
  showLineBreak;
@@ -3759,7 +3765,7 @@ class DocumentRenderObject extends BlockContainerRenderObject {
3759
3765
  },
3760
3766
  },
3761
3767
  children: [
3762
- pageCorner, highlight, ...CommonUtil.toArray(event.getChildNodes(this)), pageNum, selection, copyright
3768
+ pageCorner, highlight, selection, ...CommonUtil.toArray(event.getChildNodes(this)), pageNum, copyright
3763
3769
  ]
3764
3770
  };
3765
3771
  }
@@ -4086,7 +4092,11 @@ class DataElementInlineGroup extends InlineGroupInputElement {
4086
4092
  }
4087
4093
  });
4088
4094
  }
4089
- this.parserExpress = { compliedCode, func: new Function(`with(this){ ${compliedCode} }`), depItems: depEleMap };
4095
+ this.parserExpress = {
4096
+ compliedCode,
4097
+ func: new Function(`with(this){ ${compliedCode} }`),
4098
+ depItems: depEleMap
4099
+ };
4090
4100
  }
4091
4101
  catch (e) {
4092
4102
  console.error('解析表达式出错,parseEleExpression', this.props.expression);
@@ -4203,6 +4213,7 @@ function exportDataEleDecoratorSVG$1(event, r) {
4203
4213
  return;
4204
4214
  }
4205
4215
  const options = event.options;
4216
+ let mode = 'background';
4206
4217
  let color = options.dataEleNormalBgColor;
4207
4218
  //空数据元填充颜色
4208
4219
  if (r.element.length === 2 && options.dataEleEmptyBgColor) {
@@ -4210,17 +4221,69 @@ function exportDataEleDecoratorSVG$1(event, r) {
4210
4221
  }
4211
4222
  if (r.element.isMouseenter && options.dataEleMouseEnterBgColor) {
4212
4223
  color = options.dataEleMouseEnterBgColor;
4224
+ mode = options.dataEleMouseEnterDecoratorMode;
4213
4225
  }
4214
4226
  if (r.element.isFocused && options.dataEleFocusedBgColor) {
4215
4227
  color = options.dataEleFocusedBgColor;
4228
+ mode = options.dataEleFocusedDecoratorMode;
4216
4229
  }
4217
4230
  if (!color) {
4218
4231
  return;
4219
4232
  }
4220
4233
  //绘制背景
4221
- const bgX = event.relativePagePos.x;
4222
- const bgY = event.relativePagePos.y;
4223
- event.highlights.push(ElementUtil.getFillSvgRect(bgX, bgY, r.rect.width, r.rect.height, color));
4234
+ if (['all', 'background'].includes(mode)) {
4235
+ const bgX = event.relativePagePos.x;
4236
+ const bgY = event.relativePagePos.y;
4237
+ event.highlights.push(ElementUtil.getFillSvgRect(bgX, bgY, r.rect.width, r.rect.height, color));
4238
+ }
4239
+ if (['all', 'outline'].includes(mode)) {
4240
+ color = event.options.dataEleOutlineColor;
4241
+ const verOffset = 0;
4242
+ const renderPosMap = getCurrentParaGroupRenders(r).map(item => ({ pos: getRenderPosToDoc(item), render: item }));
4243
+ if (renderPosMap.length > 1) {
4244
+ const secondGroupRenderPos = renderPosMap[1].pos;
4245
+ if (secondGroupRenderPos.x + renderPosMap[1].render.rect.width > event.relativePagePos.x) {
4246
+ const leftPoints = [];
4247
+ const rightPoints = [];
4248
+ for (let i = 0; i < renderPosMap.length; i++) {
4249
+ const groupRender = renderPosMap[i].render;
4250
+ const groupRenderPos = renderPosMap[i].pos;
4251
+ leftPoints.push({ x: groupRenderPos.x, y: groupRenderPos.y - verOffset });
4252
+ rightPoints.push({
4253
+ x: groupRenderPos.x + groupRender.rect.width,
4254
+ y: groupRenderPos.y - verOffset
4255
+ });
4256
+ leftPoints.push({
4257
+ x: groupRenderPos.x,
4258
+ y: groupRenderPos.y + groupRender.rect.height + verOffset * 2
4259
+ });
4260
+ rightPoints.push({
4261
+ x: groupRenderPos.x + groupRender.rect.width,
4262
+ y: groupRenderPos.y + groupRender.rect.height + verOffset * 2
4263
+ });
4264
+ }
4265
+ const sharpPoints1 = CommonUtil.resharpPoints(rightPoints);
4266
+ const sharpPoints = CommonUtil.resharpPoints([...leftPoints.reverse()]);
4267
+ const path = [...sharpPoints, ...sharpPoints1, sharpPoints[0]].map((item, index) => ((index === 0) ? 'M' : "L") + item.x + " " + item.y).join(" ");
4268
+ event.highlights.push(ElementUtil.createSvgPath({
4269
+ d: path,
4270
+ stroke: color,
4271
+ fill: 'none',
4272
+ 'stroke-width': 1
4273
+ }));
4274
+ return;
4275
+ }
4276
+ }
4277
+ for (let i = 0; i < renderPosMap.length; i++) {
4278
+ const currRen = renderPosMap[i];
4279
+ event.highlights.push(ElementUtil.createSvgPath({
4280
+ d: `M${currRen.pos.x} ${currRen.pos.y} L${currRen.pos.x + currRen.render.rect.width} ${currRen.pos.y} L${currRen.pos.x + currRen.render.rect.width} ${currRen.pos.y + currRen.render.rect.height} L${currRen.pos.x} ${currRen.pos.y + currRen.render.rect.height} Z`,
4281
+ stroke: color,
4282
+ fill: 'none',
4283
+ 'stroke-width': 1
4284
+ }));
4285
+ }
4286
+ }
4224
4287
  // const canPaint = r.element.isMouseenter || r.element.isFocused;
4225
4288
  // if (!canPaint) {
4226
4289
  // return;
@@ -4235,51 +4298,6 @@ function exportDataEleDecoratorSVG$1(event, r) {
4235
4298
  // event.highlights.push(ElementUtil.getFillSvgRect(bgX, bgY, r.rect.width, r.rect.height, color));
4236
4299
  // return;
4237
4300
  // } else if (mode === 'outline') {
4238
- // const verOffset = 0;
4239
- // const renderPosMap = getCurrentParaGroupRenders(r).map(item => ({ pos: getRenderPosToDoc(item), render: item }));
4240
- // if (renderPosMap.length > 1) {
4241
- // const secondGroupRenderPos = renderPosMap[1].pos;
4242
- // if (secondGroupRenderPos.x + renderPosMap[1].render.rect.width > event.relativePagePos.x) {
4243
- // const leftPoints: Array<Position> = [];
4244
- // const rightPoints: Array<Position> = [];
4245
- // for (let i = 0; i < renderPosMap.length; i++) {
4246
- // const groupRender = renderPosMap[i].render;
4247
- // const groupRenderPos = renderPosMap[i].pos;
4248
- // leftPoints.push({ x: groupRenderPos.x, y: groupRenderPos.y - verOffset });
4249
- // rightPoints.push({
4250
- // x: groupRenderPos.x + groupRender.rect.width,
4251
- // y: groupRenderPos.y - verOffset
4252
- // });
4253
- // leftPoints.push({
4254
- // x: groupRenderPos.x,
4255
- // y: groupRenderPos.y + groupRender.rect.height + verOffset * 2
4256
- // });
4257
- // rightPoints.push({
4258
- // x: groupRenderPos.x + groupRender.rect.width,
4259
- // y: groupRenderPos.y + groupRender.rect.height + verOffset * 2
4260
- // });
4261
- // }
4262
- // const sharpPoints1 = CommonUtil.resharpPoints(rightPoints);
4263
- // const sharpPoints = CommonUtil.resharpPoints([...leftPoints.reverse()]);
4264
- // const path = [...sharpPoints, ...sharpPoints1, sharpPoints[0]].map((item, index) => ((index === 0) ? 'M' : "L") + item.x + " " + item.y).join(" ")
4265
- // event.highlights.push(ElementUtil.createSvgPath({
4266
- // d: path,
4267
- // stroke: color,
4268
- // fill: 'none',
4269
- // 'stroke-width': 1
4270
- // }));
4271
- // return;
4272
- // }
4273
- // }
4274
- // for (let i = 0; i < renderPosMap.length; i++) {
4275
- // const currRen = renderPosMap[i];
4276
- // event.highlights.push(ElementUtil.createSvgPath({
4277
- // d: `M${currRen.pos.x} ${currRen.pos.y} L${currRen.pos.x + currRen.render.rect.width} ${currRen.pos.y} L${currRen.pos.x + currRen.render.rect.width} ${currRen.pos.y + currRen.render.rect.height} L${currRen.pos.x} ${currRen.pos.y + currRen.render.rect.height} Z`,
4278
- // stroke: '#0050b3',
4279
- // fill: 'none',
4280
- // 'stroke-width': 1
4281
- // }));
4282
- // }
4283
4301
  // }
4284
4302
  }
4285
4303
  /**
@@ -4386,6 +4404,30 @@ function renderUnderWavyLine(event, r, color) {
4386
4404
  const path = ElementUtil.createSvgPath({ d, fill: 'none', stroke: color });
4387
4405
  event.highlights.push(path);
4388
4406
  }
4407
+ /**
4408
+ * 获取渲染元素相对稳当的位置
4409
+ * @param render
4410
+ * @param refPos
4411
+ */
4412
+ function getRenderPosToDoc(render, refPos = null) {
4413
+ refPos = refPos ?? { x: 0, y: 0 };
4414
+ if (render instanceof DocumentRenderObject) {
4415
+ return refPos;
4416
+ }
4417
+ const currPos = { x: render.rect.x + refPos.x, y: render.rect.y + refPos.y };
4418
+ return getRenderPosToDoc(render.parent, currPos);
4419
+ }
4420
+ function getCurrentParaGroupRenders(r) {
4421
+ const renders = [];
4422
+ const currParaRender = ElementUtil.getParentRender(r, ParagraphRenderObject);
4423
+ for (let i = 0; i < r.element.paintRenders.length; i++) {
4424
+ const paraRender = ElementUtil.getParentRender(r.element.paintRenders[i], ParagraphRenderObject);
4425
+ if (paraRender === currParaRender) {
4426
+ renders.push(r.element.paintRenders[i]);
4427
+ }
4428
+ }
4429
+ return renders;
4430
+ }
4389
4431
  function renderUnderline(event, render) {
4390
4432
  const { x, y } = event.relativePagePos;
4391
4433
  event.highlights.push({
@@ -8928,23 +8970,76 @@ function exportDataEleDecoratorSVG(event, r) {
8928
8970
  }
8929
8971
  const options = event.options;
8930
8972
  let color = options.dataGroupNormalBgColor;
8973
+ let mode = 'background';
8931
8974
  //空数据元填充颜色
8932
8975
  if (r.element.length === 2 && options.dataGroupEmptyBgColor) {
8933
8976
  color = options.dataGroupEmptyBgColor;
8934
8977
  }
8935
8978
  if (r.element.isMouseenter && options.dataGroupMouseEnterBgColor) {
8936
8979
  color = options.dataGroupMouseEnterBgColor;
8980
+ mode = options.dataGroupMouseEnterDecoratorMode;
8937
8981
  }
8938
8982
  if (r.element.isFocused && options.dataGroupFocusedBgColor) {
8939
8983
  color = options.dataGroupFocusedBgColor;
8984
+ mode = options.dataGroupFocusedDecoratorMode;
8940
8985
  }
8941
8986
  if (!color) {
8942
8987
  return;
8943
8988
  }
8944
8989
  //绘制背景
8945
- const bgX = event.relativePagePos.x;
8946
- const bgY = event.relativePagePos.y;
8947
- event.highlights.push(ElementUtil.getFillSvgRect(bgX, bgY, r.rect.width, r.rect.height, color));
8990
+ if (['all', 'background'].includes(mode)) {
8991
+ const bgX = event.relativePagePos.x;
8992
+ const bgY = event.relativePagePos.y;
8993
+ event.highlights.push(ElementUtil.getFillSvgRect(bgX, bgY, r.rect.width, r.rect.height, color));
8994
+ }
8995
+ if (['all', 'outline'].includes(mode)) {
8996
+ color = event.options.dataGroupOutlineColor;
8997
+ const verOffset = 0;
8998
+ const renderPosMap = getCurrentParaGroupRenders(r).map(item => ({ pos: getRenderPosToDoc(item), render: item }));
8999
+ if (renderPosMap.length > 1) {
9000
+ const secondGroupRenderPos = renderPosMap[1].pos;
9001
+ if (secondGroupRenderPos.x + renderPosMap[1].render.rect.width > event.relativePagePos.x) {
9002
+ const leftPoints = [];
9003
+ const rightPoints = [];
9004
+ for (let i = 0; i < renderPosMap.length; i++) {
9005
+ const groupRender = renderPosMap[i].render;
9006
+ const groupRenderPos = renderPosMap[i].pos;
9007
+ leftPoints.push({ x: groupRenderPos.x, y: groupRenderPos.y - verOffset });
9008
+ rightPoints.push({
9009
+ x: groupRenderPos.x + groupRender.rect.width,
9010
+ y: groupRenderPos.y - verOffset
9011
+ });
9012
+ leftPoints.push({
9013
+ x: groupRenderPos.x,
9014
+ y: groupRenderPos.y + groupRender.rect.height + verOffset * 2
9015
+ });
9016
+ rightPoints.push({
9017
+ x: groupRenderPos.x + groupRender.rect.width,
9018
+ y: groupRenderPos.y + groupRender.rect.height + verOffset * 2
9019
+ });
9020
+ }
9021
+ const sharpPoints1 = CommonUtil.resharpPoints(rightPoints);
9022
+ const sharpPoints = CommonUtil.resharpPoints([...leftPoints.reverse()]);
9023
+ const path = [...sharpPoints, ...sharpPoints1, sharpPoints[0]].map((item, index) => ((index === 0) ? 'M' : "L") + item.x + " " + item.y).join(" ");
9024
+ event.highlights.push(ElementUtil.createSvgPath({
9025
+ d: path,
9026
+ stroke: color,
9027
+ fill: 'none',
9028
+ 'stroke-width': 1
9029
+ }));
9030
+ return;
9031
+ }
9032
+ }
9033
+ for (let i = 0; i < renderPosMap.length; i++) {
9034
+ const currRen = renderPosMap[i];
9035
+ event.highlights.push(ElementUtil.createSvgPath({
9036
+ d: `M${currRen.pos.x} ${currRen.pos.y} L${currRen.pos.x + currRen.render.rect.width} ${currRen.pos.y} L${currRen.pos.x + currRen.render.rect.width} ${currRen.pos.y + currRen.render.rect.height} L${currRen.pos.x} ${currRen.pos.y + currRen.render.rect.height} Z`,
9037
+ stroke: color,
9038
+ fill: 'none',
9039
+ 'stroke-width': 1
9040
+ }));
9041
+ }
9042
+ }
8948
9043
  }
8949
9044
 
8950
9045
  class DataElementImage extends DataElementLeaf {
@@ -14257,6 +14352,11 @@ class ParagraphMeasure {
14257
14352
  parent: parentLine,
14258
14353
  isCloseToBody: parentLine.isCloseToBody,
14259
14354
  applyNewLine() {
14355
+ //申请新行前,需要将当前内联元素的宽度扩充到可用最大宽度
14356
+ const space = parentLine.limitWidth - parentLine.lineWidth();
14357
+ if (space > 0) {
14358
+ render.rect.width += space;
14359
+ }
14260
14360
  parentLine.applyNewLine();
14261
14361
  render = ele.createRenderObject({ options, renderCtx, execute });
14262
14362
  parentLine.add(render);
@@ -19752,7 +19852,6 @@ class DocumentSvg {
19752
19852
  fill: item.color ?? this.viewOptions.selectionColor,
19753
19853
  'paint-order': 'stroke fill markers',
19754
19854
  d: `M${item.x} ${item.y} L${item.x + item.width} ${item.y} L${item.x + item.width} ${item.y + item.height} L${item.x} ${item.y + item.height} Z`,
19755
- 'fill-opacity': '0.5'
19756
19855
  }
19757
19856
  }
19758
19857
  }));
@@ -22374,7 +22473,7 @@ class DocEditor {
22374
22473
  rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
22375
22474
  }
22376
22475
  version() {
22377
- return "2.2.17";
22476
+ return "2.2.18";
22378
22477
  }
22379
22478
  switchPageHeaderEditor() {
22380
22479
  this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
@@ -28366,7 +28465,9 @@ exports.formatEle = formatEle;
28366
28465
  exports.fromEvent = fromEvent;
28367
28466
  exports.generatePatch = generatePatch;
28368
28467
  exports.getCalleeName = getCalleeName;
28468
+ exports.getCurrentParaGroupRenders = getCurrentParaGroupRenders;
28369
28469
  exports.getFocusTextSegment = getFocusTextSegment;
28470
+ exports.getRenderPosToDoc = getRenderPosToDoc;
28370
28471
  exports.inputText = inputText;
28371
28472
  exports.insertEle = insertEle;
28372
28473
  exports.invokeTypeHandler = invokeTypeHandler;