@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.js
CHANGED
@@ -4674,10 +4674,16 @@ class TableRowElement extends BlockContainerElement {
|
|
4674
4674
|
}
|
4675
4675
|
}
|
4676
4676
|
class TableRowRenderObject extends MuiltBlockLineRenderObject {
|
4677
|
+
//被截断的行是否需要重新计算高度
|
4678
|
+
remeasureState = true;
|
4679
|
+
//当前行是否存在合并单元格
|
4680
|
+
hasMergeCells = false;
|
4677
4681
|
render(e) {
|
4678
4682
|
}
|
4679
4683
|
clone() {
|
4680
4684
|
const cloneRender = new TableRowRenderObject(this.element);
|
4685
|
+
cloneRender.remeasureState = this.remeasureState;
|
4686
|
+
cloneRender.hasMergeCells = this.hasMergeCells;
|
4681
4687
|
cloneRender.rect = ElementUtil.cloneRect(this.rect);
|
4682
4688
|
for (let i = 0; i < this.length; i++) {
|
4683
4689
|
cloneRender.addChild(this.getChild(i).clone());
|
@@ -8269,8 +8275,9 @@ class DataElementBarcode extends DataElementLeaf {
|
|
8269
8275
|
}
|
8270
8276
|
createRenderObject() {
|
8271
8277
|
const render = new DataElementBarcodeRenderObject(this);
|
8272
|
-
|
8273
|
-
render.rect.
|
8278
|
+
const { width, height } = render.measureSize();
|
8279
|
+
render.rect.width = width + 2;
|
8280
|
+
render.rect.height = height + 2;
|
8274
8281
|
return render;
|
8275
8282
|
}
|
8276
8283
|
serialize(options) {
|
@@ -8341,11 +8348,27 @@ class DataElementBarcodeRenderObject extends ResizeLeafRenderObject {
|
|
8341
8348
|
else {
|
8342
8349
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
8343
8350
|
JsBarcode(svg, this.element.props.text);
|
8351
|
+
const width = Number.parseInt(svg.getAttribute('width').replace('px', ''));
|
8352
|
+
const height = Number.parseInt(svg.getAttribute('height').replace('px', ''));
|
8353
|
+
svg.setAttribute('width', this.element.props.width + 'px');
|
8354
|
+
svg.setAttribute('height', height * (this.element.props.width / width) + 'px');
|
8344
8355
|
const vNode = toVNode(svg);
|
8345
8356
|
t.children = [vNode];
|
8346
8357
|
}
|
8347
8358
|
return t;
|
8348
8359
|
}
|
8360
|
+
measureSize() {
|
8361
|
+
if (this.element.props.type === 'qrcode') {
|
8362
|
+
return { width: this.element.props.width, height: this.element.props.height };
|
8363
|
+
}
|
8364
|
+
else {
|
8365
|
+
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
8366
|
+
JsBarcode(svg, this.element.props.text);
|
8367
|
+
const width = Number.parseInt(svg.getAttribute('width').replace('px', ''));
|
8368
|
+
const height = Number.parseInt(svg.getAttribute('height').replace('px', ''));
|
8369
|
+
return { width: this.element.props.width, height: height * (this.element.props.width / width) };
|
8370
|
+
}
|
8371
|
+
}
|
8349
8372
|
toSvgString(qr, border, lightColor, darkColor) {
|
8350
8373
|
let parts = [];
|
8351
8374
|
for (let y = 0; y < qr.size; y++) {
|
@@ -11172,7 +11195,12 @@ class ElementUtil {
|
|
11172
11195
|
if (render instanceof TableRenderObject) {
|
11173
11196
|
//this.setTableAlign(render);
|
11174
11197
|
this.remeasureTableMerge(render);
|
11175
|
-
render.getItems().forEach(item =>
|
11198
|
+
render.getItems().forEach(item => {
|
11199
|
+
if (item.remeasureState) {
|
11200
|
+
this.remeasure(item, false);
|
11201
|
+
item.remeasureState = false;
|
11202
|
+
}
|
11203
|
+
}, null);
|
11176
11204
|
}
|
11177
11205
|
const innerRect = render.getInnerRect();
|
11178
11206
|
innerRect.height = 0;
|
@@ -11188,7 +11216,7 @@ class ElementUtil {
|
|
11188
11216
|
render.updateRenderHeight(innerRect);
|
11189
11217
|
return innerRect.height;
|
11190
11218
|
}
|
11191
|
-
static remeasureTableRow(rowRender,
|
11219
|
+
static remeasureTableRow(rowRender, forceColIndex = -1) {
|
11192
11220
|
const rowEle = rowRender.element;
|
11193
11221
|
let maxCellHeight = rowEle.props.minHeight > 20 ? rowEle.props.minHeight : 20;
|
11194
11222
|
//限制行最小高度
|
@@ -11197,7 +11225,7 @@ class ElementUtil {
|
|
11197
11225
|
for (let i = 0; i < rowRender.length; i++) {
|
11198
11226
|
const cellRender = rowRender.getChild(i);
|
11199
11227
|
const { vMerge } = cellRender.element.props;
|
11200
|
-
if (cellRender.rect.height > maxCellHeight && (vMerge !== 'restart' || i ===
|
11228
|
+
if (cellRender.rect.height > maxCellHeight && (vMerge !== 'restart' || i === forceColIndex)) {
|
11201
11229
|
maxCellHeight = cellRender.rect.height;
|
11202
11230
|
}
|
11203
11231
|
}
|
@@ -11206,7 +11234,7 @@ class ElementUtil {
|
|
11206
11234
|
const cellRender = rowRender.getChild(i);
|
11207
11235
|
const cellElement = cellRender.element;
|
11208
11236
|
const { vMerge } = cellElement.props;
|
11209
|
-
if ((vMerge !== 'restart' || i ===
|
11237
|
+
if ((vMerge !== 'restart' || i === forceColIndex) || cellRender.rect.height < maxCellHeight) {
|
11210
11238
|
cellRender.rect.height = maxCellHeight;
|
11211
11239
|
}
|
11212
11240
|
//处理单元格内容纵向居中
|
@@ -11301,11 +11329,16 @@ class ElementUtil {
|
|
11301
11329
|
let needReCalc = false;
|
11302
11330
|
for (let i = 0; i < tbRender.length; i++) {
|
11303
11331
|
const row = tbRender.getChild(i);
|
11332
|
+
if (row.hasMergeCells === false) {
|
11333
|
+
continue;
|
11334
|
+
}
|
11335
|
+
row.hasMergeCells = false;
|
11304
11336
|
for (let j = 0; j < row.length; j++) {
|
11305
11337
|
const cellRender = row.getChild(j);
|
11306
11338
|
const ele = cellRender.element;
|
11307
11339
|
const { vMerge } = ele.props;
|
11308
11340
|
if (vMerge === 'restart') {
|
11341
|
+
row.hasMergeCells = true;
|
11309
11342
|
const eleIndex = ele.getIndex();
|
11310
11343
|
const continueRows = this.getContinueVMergeRenderRows(tbRender, i, eleIndex);
|
11311
11344
|
if (!continueRows.length) {
|
@@ -14920,29 +14953,23 @@ class DocumentArrange {
|
|
14920
14953
|
while (currRow) {
|
14921
14954
|
const rowContentHeight = this.getBlockLineHeight(currRow);
|
14922
14955
|
if (rowContentHeight + sumHeight > limitHeight) {
|
14923
|
-
|
14924
|
-
|
14925
|
-
|
14926
|
-
|
14927
|
-
|
14928
|
-
|
14929
|
-
|
14930
|
-
|
14931
|
-
|
14932
|
-
if (currRow.getItems().some(item => item.length !== 0)) {
|
14933
|
-
cutRows.push(currRow);
|
14934
|
-
}
|
14935
|
-
else {
|
14936
|
-
tbRender.removeChild(currRow);
|
14937
|
-
}
|
14938
|
-
if (currRow === joinRow) {
|
14939
|
-
break;
|
14940
|
-
}
|
14941
|
-
currRow = rows[++j];
|
14956
|
+
//限制的外框尺寸
|
14957
|
+
const availHeight = limitHeight - sumHeight;
|
14958
|
+
const limitRenderInnerHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);
|
14959
|
+
const cutRow = this.cutRowRenderItem(currRow, limitRenderInnerHeight);
|
14960
|
+
if (cutRow) {
|
14961
|
+
cloneTbRender.addChild(cutRow);
|
14962
|
+
sumHeight += cutRow.rect.height;
|
14963
|
+
if (currRow.getItems().some(item => item.length !== 0)) {
|
14964
|
+
cutRows.push(currRow);
|
14942
14965
|
}
|
14943
14966
|
else {
|
14967
|
+
tbRender.removeChild(currRow);
|
14968
|
+
}
|
14969
|
+
if (currRow === joinRow) {
|
14944
14970
|
break;
|
14945
14971
|
}
|
14972
|
+
currRow = rows[++j];
|
14946
14973
|
}
|
14947
14974
|
else {
|
14948
14975
|
break;
|
@@ -14974,6 +15001,7 @@ class DocumentArrange {
|
|
14974
15001
|
// if (render.element.props.minHeight > 0 && render.rect.height < limitHeight) {
|
14975
15002
|
// return null;
|
14976
15003
|
// }
|
15004
|
+
render.remeasureState = true;
|
14977
15005
|
const cloneRowRender = render.element.createRenderObject();
|
14978
15006
|
cloneRowRender.rect.width = render.rect.width;
|
14979
15007
|
//cloneRowRender.rect.maxWidth = render.rect.height;
|
@@ -15870,7 +15898,10 @@ class ElementRenderCut {
|
|
15870
15898
|
documentRender.addChild(cloneFooterRender);
|
15871
15899
|
//审阅模式,添加审阅窗口
|
15872
15900
|
if (this.options.showReviewWindow && commentsRender) {
|
15873
|
-
const commentsContainer = commentsRender.element.createRenderObject({
|
15901
|
+
const commentsContainer = commentsRender.element.createRenderObject({
|
15902
|
+
options: this.options,
|
15903
|
+
renderCtx: this.renderContext
|
15904
|
+
});
|
15874
15905
|
commentsContainer.padding.top = bodyMarginTop;
|
15875
15906
|
commentsContainer.rect.height = documentRender.rect.height;
|
15876
15907
|
documentRender.addChild(commentsContainer);
|
@@ -15881,13 +15912,19 @@ class ElementRenderCut {
|
|
15881
15912
|
return docPages;
|
15882
15913
|
}
|
15883
15914
|
getDocInnerRect(documentRender) {
|
15884
|
-
const render = documentRender.element.createRenderObject({
|
15915
|
+
const render = documentRender.element.createRenderObject({
|
15916
|
+
options: this.options,
|
15917
|
+
renderCtx: this.renderContext
|
15918
|
+
});
|
15885
15919
|
render.padding = documentRender.padding;
|
15886
15920
|
return render.getInnerRect();
|
15887
15921
|
}
|
15888
15922
|
getFullViewDocRender(documentRender, documentElement) {
|
15889
15923
|
const commentsRender = documentRender.getChild(3);
|
15890
|
-
const commentsContainer = commentsRender.element.createRenderObject({
|
15924
|
+
const commentsContainer = commentsRender.element.createRenderObject({
|
15925
|
+
options: this.options,
|
15926
|
+
renderCtx: this.renderContext
|
15927
|
+
});
|
15891
15928
|
documentRender.rect.height -= commentsContainer.rect.height;
|
15892
15929
|
const bodyRender = documentRender.getChild(1);
|
15893
15930
|
if (this.options.showReviewWindow) {
|
@@ -15901,7 +15938,10 @@ class ElementRenderCut {
|
|
15901
15938
|
return [documentRender];
|
15902
15939
|
}
|
15903
15940
|
createEmptyBodyRender(bodyRender, limitRect) {
|
15904
|
-
const pageBodyRender = bodyRender.element.createRenderObject({
|
15941
|
+
const pageBodyRender = bodyRender.element.createRenderObject({
|
15942
|
+
options: this.options,
|
15943
|
+
renderCtx: this.renderContext
|
15944
|
+
});
|
15905
15945
|
pageBodyRender.rect.width = limitRect.width;
|
15906
15946
|
const bodyInnerLimitRect = pageBodyRender.getInnerRect();
|
15907
15947
|
if (this.options.fullPageView) {
|
@@ -15925,7 +15965,10 @@ class ElementRenderCut {
|
|
15925
15965
|
if (render instanceof TableRenderObject) {
|
15926
15966
|
return this.cutTable(render, limitHeight);
|
15927
15967
|
}
|
15928
|
-
const cloneRender = render.element.createRenderObject({
|
15968
|
+
const cloneRender = render.element.createRenderObject({
|
15969
|
+
options: this.options,
|
15970
|
+
renderCtx: this.renderContext
|
15971
|
+
});
|
15929
15972
|
cloneRender.setRenderWidth(render.rect.width);
|
15930
15973
|
if (render instanceof MuiltBlockLineRenderObject) {
|
15931
15974
|
let sumHeight = 0;
|
@@ -16060,16 +16103,16 @@ class ElementRenderCut {
|
|
16060
16103
|
}
|
16061
16104
|
const cloneRowRender = render.element.createRenderObject();
|
16062
16105
|
cloneRowRender.rect.width = render.rect.width;
|
16106
|
+
render.remeasureState = true;
|
16063
16107
|
//cloneRowRender.rect.maxWidth = render.rect.height;
|
16064
16108
|
const cellRenders = [...render.getItems()];
|
16065
16109
|
const cutCellRenders = [];
|
16066
16110
|
for (let i = 0; i < cellRenders.length; i++) {
|
16067
16111
|
const cellRender = cellRenders[i];
|
16112
|
+
this.markMergeRowRenderDirty(cellRender);
|
16068
16113
|
if (cellRender.rect.height > limitHeight) {
|
16069
|
-
//限制的外框尺寸
|
16070
|
-
const availHeight = limitHeight;
|
16071
16114
|
//限制的内框尺寸
|
16072
|
-
const limitCellHeight = ElementUtil.innerRectMaxHeight(cellRender,
|
16115
|
+
const limitCellHeight = ElementUtil.innerRectMaxHeight(cellRender, limitHeight);
|
16073
16116
|
const cutCellRender = this.cutRenderItem(cellRender, limitCellHeight);
|
16074
16117
|
if (cutCellRender) {
|
16075
16118
|
cutCellRenders.push(cutCellRender);
|
@@ -16093,7 +16136,10 @@ class ElementRenderCut {
|
|
16093
16136
|
for (let i = 0; i < cutCellRenders.length; i++) {
|
16094
16137
|
let cellRender = cutCellRenders[i];
|
16095
16138
|
if (!cellRender) {
|
16096
|
-
cellRender = cellRenders[i].element.createRenderObject({
|
16139
|
+
cellRender = cellRenders[i].element.createRenderObject({
|
16140
|
+
options: this.options,
|
16141
|
+
renderCtx: this.renderContext
|
16142
|
+
});
|
16097
16143
|
cellRender.rect = ElementUtil.cloneRect(cellRenders[i].rect);
|
16098
16144
|
ElementUtil.remeasure(cellRender);
|
16099
16145
|
}
|
@@ -16103,6 +16149,33 @@ class ElementRenderCut {
|
|
16103
16149
|
return cloneRowRender;
|
16104
16150
|
}
|
16105
16151
|
}
|
16152
|
+
/**
|
16153
|
+
* 标记合并单元格所在行需要重新计算
|
16154
|
+
* @param cellRender
|
16155
|
+
* @private
|
16156
|
+
*/
|
16157
|
+
markMergeRowRenderDirty(cellRender) {
|
16158
|
+
const cellEle = cellRender.element;
|
16159
|
+
if (cellEle.props.vMerge !== 'restart') {
|
16160
|
+
return;
|
16161
|
+
}
|
16162
|
+
const rowRender = cellRender.parent;
|
16163
|
+
rowRender.element;
|
16164
|
+
const tb = rowRender.parent;
|
16165
|
+
const cellYPos = cellRender.rect.y;
|
16166
|
+
for (let i = rowRender.getIndex() + 1; i < tb.length; i++) {
|
16167
|
+
const nextRowRender = tb.getChild(i);
|
16168
|
+
if (nextRowRender.rect.y <= cellYPos) {
|
16169
|
+
nextRowRender.remeasureState = true;
|
16170
|
+
nextRowRender.getItems().forEach(item => {
|
16171
|
+
this.markMergeRowRenderDirty(item);
|
16172
|
+
});
|
16173
|
+
}
|
16174
|
+
else {
|
16175
|
+
break;
|
16176
|
+
}
|
16177
|
+
}
|
16178
|
+
}
|
16106
16179
|
/**
|
16107
16180
|
* 修复->已经截断的合并单元格要向下移动到合适的位置
|
16108
16181
|
* @param tbRender
|
@@ -27924,6 +27997,7 @@ class DocEditor {
|
|
27924
27997
|
insertTable(rows, cols) {
|
27925
27998
|
const tb = TableUtil.createTable(rows, cols, this.selectionState);
|
27926
27999
|
this.documentChange.insertTable(tb);
|
28000
|
+
return tb;
|
27927
28001
|
}
|
27928
28002
|
/**
|
27929
28003
|
* 插入软换行符
|
@@ -28788,7 +28862,7 @@ class DocEditor {
|
|
28788
28862
|
rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
|
28789
28863
|
}
|
28790
28864
|
version() {
|
28791
|
-
return "2.1.
|
28865
|
+
return "2.1.18";
|
28792
28866
|
}
|
28793
28867
|
switchPageHeaderEditor() {
|
28794
28868
|
this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
|