@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 +109 -35
- package/index-cjs.js.map +1 -1
- package/index.js +109 -35
- package/index.js.map +1 -1
- package/med_editor/doc-editor.d.ts +1 -1
- package/med_editor/framework/element-render-cut.d.ts +7 -5
- package/med_editor/framework/element-util.d.ts +1 -1
- package/med_editor/framework/impl/data-element/data-element-barcode.d.ts +4 -0
- package/med_editor/framework/impl/table/table-row-impl.d.ts +2 -0
- package/med_editor/framework/render-define.d.ts +1 -1
- package/package.json +1 -1
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
|
-
|
8302
|
-
render.rect.
|
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 =>
|
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,
|
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 ===
|
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 ===
|
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
|
-
|
14953
|
-
|
14954
|
-
|
14955
|
-
|
14956
|
-
|
14957
|
-
|
14958
|
-
|
14959
|
-
|
14960
|
-
|
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({
|
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({
|
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({
|
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({
|
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({
|
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,
|
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({
|
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.
|
28894
|
+
return "2.1.18";
|
28821
28895
|
}
|
28822
28896
|
switchPageHeaderEditor() {
|
28823
28897
|
this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
|