@hailin-zheng/editor-core 2.1.21 → 2.1.23
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 +44 -14
- package/index-cjs.js.map +1 -1
- package/index.js +45 -15
- package/index.js.map +1 -1
- package/med_editor/framework/impl/table/table-row-impl.d.ts +1 -0
- package/med_editor/framework/render-context.d.ts +8 -0
- package/package.json +1 -1
package/index-cjs.js
CHANGED
@@ -660,7 +660,6 @@ class CommonUtil {
|
|
660
660
|
static cloneValue(val) {
|
661
661
|
return CommonUtil.cloneDeep(val);
|
662
662
|
}
|
663
|
-
// @ts-ignore
|
664
663
|
static cloneDeep(source, visited = new WeakMap()) {
|
665
664
|
if (source === null || typeof source !== 'object') {
|
666
665
|
// 如果是基本类型或 null,则直接返回
|
@@ -4679,7 +4678,9 @@ class TableRowElement extends BlockContainerElement {
|
|
4679
4678
|
}
|
4680
4679
|
}
|
4681
4680
|
createRenderObject() {
|
4682
|
-
|
4681
|
+
const rowRender = new TableRowRenderObject(this);
|
4682
|
+
rowRender.minHeight = this.props.minHeight;
|
4683
|
+
return rowRender;
|
4683
4684
|
}
|
4684
4685
|
serialize(viewOptions) {
|
4685
4686
|
return {
|
@@ -4712,10 +4713,13 @@ class TableRowRenderObject extends MuiltBlockLineRenderObject {
|
|
4712
4713
|
remeasureState = true;
|
4713
4714
|
//当前行是否存在合并单元格
|
4714
4715
|
hasMergeCells = undefined;
|
4716
|
+
//行最小高度,用于标记当前行临时的最小高度状态
|
4717
|
+
minHeight = -1;
|
4715
4718
|
clone() {
|
4716
4719
|
const cloneRender = new TableRowRenderObject(this.element);
|
4717
4720
|
cloneRender.remeasureState = this.remeasureState;
|
4718
4721
|
cloneRender.hasMergeCells = this.hasMergeCells;
|
4722
|
+
cloneRender.minHeight = this.minHeight;
|
4719
4723
|
cloneRender.rect = ElementUtil.cloneRect(this.rect);
|
4720
4724
|
for (let i = 0; i < this.length; i++) {
|
4721
4725
|
cloneRender.addChild(this.getChild(i).clone());
|
@@ -4883,6 +4887,8 @@ class TextGroupRenderObject extends LeafRenderObject {
|
|
4883
4887
|
return;
|
4884
4888
|
}
|
4885
4889
|
const props = this.element.props;
|
4890
|
+
//基线位置到top的距离
|
4891
|
+
const actualFontBoundingBoxAscent = event.renderCtx.mainContext.getActualFontBoundingBoxAscent(props.getFont());
|
4886
4892
|
let { width, height } = this.rect;
|
4887
4893
|
let vertHeight = 0; //baseLine;
|
4888
4894
|
if (props.vertAlign === 'subscript') {
|
@@ -4901,10 +4907,11 @@ class TextGroupRenderObject extends LeafRenderObject {
|
|
4901
4907
|
return curr.actualSize + prev;
|
4902
4908
|
}, this.rect.x);
|
4903
4909
|
const x = arr.join(' ');
|
4904
|
-
|
4905
|
-
|
4906
|
-
|
4907
|
-
|
4910
|
+
let y = this.rect.y + vertHeight;
|
4911
|
+
//基线处理
|
4912
|
+
y += actualFontBoundingBoxAscent ?? 0;
|
4913
|
+
//行高处理
|
4914
|
+
y += (height - props.fontSize) / 2;
|
4908
4915
|
const t = {
|
4909
4916
|
sel: 'text',
|
4910
4917
|
text: text,
|
@@ -4912,8 +4919,6 @@ class TextGroupRenderObject extends LeafRenderObject {
|
|
4912
4919
|
ns: "http://www.w3.org/2000/svg",
|
4913
4920
|
attrs: {
|
4914
4921
|
//"transform": `translate(0,${(height - props.fontSize) / 2})`,
|
4915
|
-
"translate": { x: 0, y: (height - props.fontSize) / 2 },
|
4916
|
-
'dominant-baseline': 'hanging',
|
4917
4922
|
'font-family': this.element.props.fontName,
|
4918
4923
|
'font-size': fontSize,
|
4919
4924
|
x,
|
@@ -4921,6 +4926,9 @@ class TextGroupRenderObject extends LeafRenderObject {
|
|
4921
4926
|
}
|
4922
4927
|
},
|
4923
4928
|
};
|
4929
|
+
if (actualFontBoundingBoxAscent === undefined) {
|
4930
|
+
t.data.attrs['dominant-baseline'] = 'hanging';
|
4931
|
+
}
|
4924
4932
|
if (this.element.props.fontWeight !== 'normal') {
|
4925
4933
|
t.data.attrs['font-weight'] = this.element.props.fontWeight;
|
4926
4934
|
}
|
@@ -11097,7 +11105,7 @@ class ElementUtil {
|
|
11097
11105
|
canvas.style.height = scaleHeight + 'px';
|
11098
11106
|
canvas.width = scaleWidth * dpr;
|
11099
11107
|
canvas.height = scaleHeight * dpr;
|
11100
|
-
ctx.textBaseline = 'top';
|
11108
|
+
//ctx.textBaseline = 'top';
|
11101
11109
|
ctx.scale(dpr, dpr);
|
11102
11110
|
}
|
11103
11111
|
// static setOffscreenCanvas(canvas: OffscreenCanvas, ctx: OffscreenCanvasRenderingContext2D, viewOptions: { width: number, height: number }, scale: number = 1): void {
|
@@ -11247,8 +11255,7 @@ class ElementUtil {
|
|
11247
11255
|
return innerRect.height;
|
11248
11256
|
}
|
11249
11257
|
static remeasureTableRow(rowRender, forceColIndex = -1) {
|
11250
|
-
|
11251
|
-
let maxCellHeight = rowEle.props.minHeight > 20 ? rowEle.props.minHeight : 20;
|
11258
|
+
let maxCellHeight = rowRender.minHeight > 20 ? rowRender.minHeight : 20;
|
11252
11259
|
//限制行最小高度
|
11253
11260
|
maxCellHeight = maxCellHeight < 20 ? 20 : maxCellHeight;
|
11254
11261
|
//获取行内非纵向合并单元格的最高单元格高度
|
@@ -12796,6 +12803,13 @@ class ElementUtil {
|
|
12796
12803
|
}
|
12797
12804
|
}
|
12798
12805
|
|
12806
|
+
exports.TextUnitsHolder = void 0;
|
12807
|
+
(function (TextUnitsHolder) {
|
12808
|
+
TextUnitsHolder[TextUnitsHolder["char"] = 0] = "char";
|
12809
|
+
TextUnitsHolder[TextUnitsHolder["sourceSize"] = 1] = "sourceSize";
|
12810
|
+
TextUnitsHolder[TextUnitsHolder["actualSize"] = 2] = "actualSize";
|
12811
|
+
TextUnitsHolder[TextUnitsHolder["actualBoundingBoxAscent"] = 3] = "actualBoundingBoxAscent";
|
12812
|
+
})(exports.TextUnitsHolder || (exports.TextUnitsHolder = {}));
|
12799
12813
|
class RenderContext {
|
12800
12814
|
mainContext;
|
12801
12815
|
contentContext;
|
@@ -12868,7 +12882,18 @@ class PaintContent {
|
|
12868
12882
|
this.init();
|
12869
12883
|
}
|
12870
12884
|
init() {
|
12871
|
-
this.ctx.textBaseline = 'top';
|
12885
|
+
//this.ctx.textBaseline = 'top';
|
12886
|
+
}
|
12887
|
+
cacheFontBoundingBoxAscentMap = new Map();
|
12888
|
+
getActualFontBoundingBoxAscent(font) {
|
12889
|
+
if (this.cacheFontBoundingBoxAscentMap.has(font)) {
|
12890
|
+
return this.cacheFontBoundingBoxAscentMap.get(font);
|
12891
|
+
}
|
12892
|
+
this.ctx.font = font;
|
12893
|
+
const textMetrics = this.ctx.measureText('正');
|
12894
|
+
const value = textMetrics.actualBoundingBoxAscent;
|
12895
|
+
this.cacheFontBoundingBoxAscentMap.set(font, value);
|
12896
|
+
return value;
|
12872
12897
|
}
|
12873
12898
|
setGlobalAlpha(alpha) {
|
12874
12899
|
this.ctx.globalAlpha = alpha;
|
@@ -15000,13 +15025,15 @@ class DocumentArrange {
|
|
15000
15025
|
let currRow = rows[j];
|
15001
15026
|
const cutRows = [];
|
15002
15027
|
while (currRow) {
|
15003
|
-
const minHeight = currRow.
|
15028
|
+
const minHeight = currRow.minHeight;
|
15004
15029
|
const rowContentHeight = this.getBlockLineHeight(currRow);
|
15005
15030
|
if (rowContentHeight + sumHeight > limitHeight) {
|
15006
15031
|
//行存在最小高度,且当前行内容的高度小于最小高度,且当前行跨页的情况下,不截断该行
|
15007
15032
|
if (minHeight > 0 && minHeight > rowContentHeight) {
|
15008
15033
|
break;
|
15009
15034
|
}
|
15035
|
+
//设定最小高度不生效
|
15036
|
+
currRow.minHeight = -1;
|
15010
15037
|
//限制的外框尺寸
|
15011
15038
|
const availHeight = limitHeight - sumHeight;
|
15012
15039
|
const limitRenderInnerHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);
|
@@ -15057,6 +15084,9 @@ class DocumentArrange {
|
|
15057
15084
|
// }
|
15058
15085
|
render.remeasureState = true;
|
15059
15086
|
const cloneRowRender = render.element.createRenderObject();
|
15087
|
+
if (cloneRowRender.minHeight > 0 && render.minHeight <= 0) {
|
15088
|
+
cloneRowRender.minHeight = render.minHeight;
|
15089
|
+
}
|
15060
15090
|
cloneRowRender.rect.width = render.rect.width;
|
15061
15091
|
//cloneRowRender.rect.maxWidth = render.rect.height;
|
15062
15092
|
const cellRenders = [...render.getItems()];
|
@@ -27835,7 +27865,7 @@ class DocEditor {
|
|
27835
27865
|
rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
|
27836
27866
|
}
|
27837
27867
|
version() {
|
27838
|
-
return "2.1.
|
27868
|
+
return "2.1.23";
|
27839
27869
|
}
|
27840
27870
|
switchPageHeaderEditor() {
|
27841
27871
|
this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
|