@hailin-zheng/editor-core 1.0.10 → 1.0.14
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/lib/doc-ruler.d.ts +51 -0
- package/lib/doc-ruler.js +313 -0
- package/lib/doc-ruler.js.map +1 -0
- package/lib/framework/common-util.d.ts +63 -0
- package/lib/framework/common-util.js +178 -0
- package/lib/framework/common-util.js.map +1 -0
- package/lib/framework/document-change.d.ts +265 -0
- package/lib/framework/document-change.js +1342 -0
- package/lib/framework/document-change.js.map +1 -0
- package/lib/framework/document-combine.d.ts +24 -0
- package/lib/framework/document-combine.js +40 -0
- package/lib/framework/document-combine.js.map +1 -0
- package/lib/framework/document-comment.d.ts +46 -0
- package/lib/framework/document-comment.js +148 -0
- package/lib/framework/document-comment.js.map +1 -0
- package/lib/framework/document-context.d.ts +149 -0
- package/lib/framework/document-context.js +330 -0
- package/lib/framework/document-context.js.map +1 -0
- package/lib/framework/document-eval-func.d.ts +18 -0
- package/lib/framework/document-eval-func.js +48 -0
- package/lib/framework/document-eval-func.js.map +1 -0
- package/lib/framework/document-event.d.ts +213 -0
- package/lib/framework/document-event.js +1054 -0
- package/lib/framework/document-event.js.map +1 -0
- package/lib/framework/document-history.d.ts +26 -0
- package/lib/framework/document-history.js +65 -0
- package/lib/framework/document-history.js.map +1 -0
- package/lib/framework/document-images-loader.d.ts +16 -0
- package/lib/framework/document-images-loader.js +66 -0
- package/lib/framework/document-images-loader.js.map +1 -0
- package/lib/framework/document-input-cursor.d.ts +78 -0
- package/lib/framework/document-input-cursor.js +239 -0
- package/lib/framework/document-input-cursor.js.map +1 -0
- package/lib/framework/document-paint.d.ts +34 -0
- package/lib/framework/document-paint.js +103 -0
- package/lib/framework/document-paint.js.map +1 -0
- package/lib/framework/document-print-offscreen.d.ts +38 -0
- package/lib/framework/document-print-offscreen.js +128 -0
- package/lib/framework/document-print-offscreen.js.map +1 -0
- package/lib/framework/document-print.d.ts +60 -0
- package/lib/framework/document-print.js +203 -0
- package/lib/framework/document-print.js.map +1 -0
- package/lib/framework/document-segmenter.d.ts +2 -0
- package/lib/framework/document-segmenter.js +106 -0
- package/lib/framework/document-segmenter.js.map +1 -0
- package/lib/framework/document-selection.d.ts +89 -0
- package/lib/framework/document-selection.js +358 -0
- package/lib/framework/document-selection.js.map +1 -0
- package/lib/framework/document-template.d.ts +4 -0
- package/lib/framework/document-template.js +20 -0
- package/lib/framework/document-template.js.map +1 -0
- package/lib/framework/document-textline-mode.d.ts +7 -0
- package/lib/framework/document-textline-mode.js +30 -0
- package/lib/framework/document-textline-mode.js.map +1 -0
- package/lib/framework/element-define.d.ts +319 -0
- package/lib/framework/element-define.js +579 -0
- package/lib/framework/element-define.js.map +1 -0
- package/lib/framework/element-event-define.d.ts +98 -0
- package/lib/framework/element-event-define.js +108 -0
- package/lib/framework/element-event-define.js.map +1 -0
- package/lib/framework/element-measure.d.ts +97 -0
- package/lib/framework/element-measure.js +551 -0
- package/lib/framework/element-measure.js.map +1 -0
- package/lib/framework/element-paint.d.ts +42 -0
- package/lib/framework/element-paint.js +170 -0
- package/lib/framework/element-paint.js.map +1 -0
- package/lib/framework/element-props.d.ts +301 -0
- package/lib/framework/element-props.js +809 -0
- package/lib/framework/element-props.js.map +1 -0
- package/lib/framework/element-reader.d.ts +19 -0
- package/lib/framework/element-reader.js +151 -0
- package/lib/framework/element-reader.js.map +1 -0
- package/lib/framework/element-render-cut.d.ts +55 -0
- package/lib/framework/element-render-cut.js +449 -0
- package/lib/framework/element-render-cut.js.map +1 -0
- package/lib/framework/element-serialize.d.ts +30 -0
- package/lib/framework/element-serialize.js +113 -0
- package/lib/framework/element-serialize.js.map +1 -0
- package/lib/framework/element-util.d.ts +369 -0
- package/lib/framework/element-util.js +1463 -0
- package/lib/framework/element-util.js.map +1 -0
- package/lib/framework/impl/checkbox/checkbox-impl.d.ts +24 -0
- package/lib/framework/impl/checkbox/checkbox-impl.js +64 -0
- package/lib/framework/impl/checkbox/checkbox-impl.js.map +1 -0
- package/lib/framework/impl/comments/comment-content-impl.d.ts +40 -0
- package/lib/framework/impl/comments/comment-content-impl.js +105 -0
- package/lib/framework/impl/comments/comment-content-impl.js.map +1 -0
- package/lib/framework/impl/comments/comment-element-impl.d.ts +21 -0
- package/lib/framework/impl/comments/comment-element-impl.js +62 -0
- package/lib/framework/impl/comments/comment-element-impl.js.map +1 -0
- package/lib/framework/impl/comments/comments-container-impl.d.ts +22 -0
- package/lib/framework/impl/comments/comments-container-impl.js +62 -0
- package/lib/framework/impl/comments/comments-container-impl.js.map +1 -0
- package/lib/framework/impl/comments/comments-util.d.ts +12 -0
- package/lib/framework/impl/comments/comments-util.js +67 -0
- package/lib/framework/impl/comments/comments-util.js.map +1 -0
- package/lib/framework/impl/comments/validate-msg-impl.d.ts +21 -0
- package/lib/framework/impl/comments/validate-msg-impl.js +83 -0
- package/lib/framework/impl/comments/validate-msg-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-decorate-impl.d.ts +30 -0
- package/lib/framework/impl/data-element/data-decorate-impl.js +91 -0
- package/lib/framework/impl/data-element/data-decorate-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-barcode.d.ts +31 -0
- package/lib/framework/impl/data-element/data-element-barcode.js +115 -0
- package/lib/framework/impl/data-element/data-element-barcode.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-base-impl.d.ts +68 -0
- package/lib/framework/impl/data-element/data-element-base-impl.js +205 -0
- package/lib/framework/impl/data-element/data-element-base-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-check-impl.d.ts +35 -0
- package/lib/framework/impl/data-element/data-element-check-impl.js +133 -0
- package/lib/framework/impl/data-element/data-element-check-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-date-impl.d.ts +23 -0
- package/lib/framework/impl/data-element/data-element-date-impl.js +111 -0
- package/lib/framework/impl/data-element/data-element-date-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-group-impl.d.ts +23 -0
- package/lib/framework/impl/data-element/data-element-group-impl.js +130 -0
- package/lib/framework/impl/data-element/data-element-group-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-image-impl.d.ts +30 -0
- package/lib/framework/impl/data-element/data-element-image-impl.js +137 -0
- package/lib/framework/impl/data-element/data-element-image-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-list-impl.d.ts +22 -0
- package/lib/framework/impl/data-element/data-element-list-impl.js +131 -0
- package/lib/framework/impl/data-element/data-element-list-impl.js.map +1 -0
- package/lib/framework/impl/data-element/data-element-text-impl.d.ts +23 -0
- package/lib/framework/impl/data-element/data-element-text-impl.js +103 -0
- package/lib/framework/impl/data-element/data-element-text-impl.js.map +1 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.d.ts +21 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.js +43 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.js.map +1 -0
- package/lib/framework/impl/document/doc-body-impl.d.ts +27 -0
- package/lib/framework/impl/document/doc-body-impl.js +79 -0
- package/lib/framework/impl/document/doc-body-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-body-part-impl.d.ts +30 -0
- package/lib/framework/impl/document/doc-body-part-impl.js +94 -0
- package/lib/framework/impl/document/doc-body-part-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-container-impl.d.ts +16 -0
- package/lib/framework/impl/document/doc-container-impl.js +21 -0
- package/lib/framework/impl/document/doc-container-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-footer-impl.d.ts +26 -0
- package/lib/framework/impl/document/doc-footer-impl.js +77 -0
- package/lib/framework/impl/document/doc-footer-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-header-impl.d.ts +26 -0
- package/lib/framework/impl/document/doc-header-impl.js +83 -0
- package/lib/framework/impl/document/doc-header-impl.js.map +1 -0
- package/lib/framework/impl/document/doc-impl.d.ts +61 -0
- package/lib/framework/impl/document/doc-impl.js +209 -0
- package/lib/framework/impl/document/doc-impl.js.map +1 -0
- package/lib/framework/impl/media-formula/menstrual-history.d.ts +35 -0
- package/lib/framework/impl/media-formula/menstrual-history.js +153 -0
- package/lib/framework/impl/media-formula/menstrual-history.js.map +1 -0
- package/lib/framework/impl/paragraph/p-impl.d.ts +45 -0
- package/lib/framework/impl/paragraph/p-impl.js +156 -0
- package/lib/framework/impl/paragraph/p-impl.js.map +1 -0
- package/lib/framework/impl/picture/image-impl.d.ts +31 -0
- package/lib/framework/impl/picture/image-impl.js +124 -0
- package/lib/framework/impl/picture/image-impl.js.map +1 -0
- package/lib/framework/impl/radio/radio-impl.d.ts +22 -0
- package/lib/framework/impl/radio/radio-impl.js +72 -0
- package/lib/framework/impl/radio/radio-impl.js.map +1 -0
- package/lib/framework/impl/symbol/br-symbol-impl.d.ts +22 -0
- package/lib/framework/impl/symbol/br-symbol-impl.js +54 -0
- package/lib/framework/impl/symbol/br-symbol-impl.js.map +1 -0
- package/lib/framework/impl/symbol/p-symbol-impl.d.ts +19 -0
- package/lib/framework/impl/symbol/p-symbol-impl.js +54 -0
- package/lib/framework/impl/symbol/p-symbol-impl.js.map +1 -0
- package/lib/framework/impl/table/table-cell-impl.d.ts +37 -0
- package/lib/framework/impl/table/table-cell-impl.js +145 -0
- package/lib/framework/impl/table/table-cell-impl.js.map +1 -0
- package/lib/framework/impl/table/table-impl.d.ts +55 -0
- package/lib/framework/impl/table/table-impl.js +363 -0
- package/lib/framework/impl/table/table-impl.js.map +1 -0
- package/lib/framework/impl/table/table-row-impl.d.ts +26 -0
- package/lib/framework/impl/table/table-row-impl.js +75 -0
- package/lib/framework/impl/table/table-row-impl.js.map +1 -0
- package/lib/framework/impl/table/table-split-cell-patch.d.ts +20 -0
- package/lib/framework/impl/table/table-split-cell-patch.js +89 -0
- package/lib/framework/impl/table/table-split-cell-patch.js.map +1 -0
- package/lib/framework/impl/table/table-split-cell.d.ts +90 -0
- package/lib/framework/impl/table/table-split-cell.js +464 -0
- package/lib/framework/impl/table/table-split-cell.js.map +1 -0
- package/lib/framework/impl/table/table-util.d.ts +150 -0
- package/lib/framework/impl/table/table-util.js +678 -0
- package/lib/framework/impl/table/table-util.js.map +1 -0
- package/lib/framework/impl/text/text-impl.d.ts +32 -0
- package/lib/framework/impl/text/text-impl.js +149 -0
- package/lib/framework/impl/text/text-impl.js.map +1 -0
- package/lib/framework/impl/text/track-run-impl.d.ts +27 -0
- package/lib/framework/impl/text/track-run-impl.js +112 -0
- package/lib/framework/impl/text/track-run-impl.js.map +1 -0
- package/lib/framework/notify.d.ts +13 -0
- package/lib/framework/notify.js +116 -0
- package/lib/framework/notify.js.map +1 -0
- package/lib/framework/range-util.d.ts +40 -0
- package/lib/framework/range-util.js +312 -0
- package/lib/framework/range-util.js.map +1 -0
- package/lib/framework/render-context.d.ts +91 -0
- package/lib/framework/render-context.js +384 -0
- package/lib/framework/render-context.js.map +1 -0
- package/lib/framework/render-define.d.ts +109 -0
- package/lib/framework/render-define.js +195 -0
- package/lib/framework/render-define.js.map +1 -0
- package/lib/framework/selection-overlays.d.ts +30 -0
- package/lib/framework/selection-overlays.js +124 -0
- package/lib/framework/selection-overlays.js.map +1 -0
- package/lib/texteditor.d.ts +318 -0
- package/lib/texteditor.js +913 -0
- package/lib/texteditor.js.map +1 -0
- package/lib/util/subject.d.ts +34 -0
- package/lib/util/subject.js +88 -0
- package/lib/util/subject.js.map +1 -0
- package/{src/med_editor/util/table-bind.ts → lib/util/table-bind.d.ts} +2 -3
- package/lib/util/table-bind.js +6 -0
- package/lib/util/table-bind.js.map +1 -0
- package/package.json +2 -2
- package/src/med_editor/doc-ruler.ts +0 -340
- package/src/med_editor/framework/common-util.ts +0 -200
- package/src/med_editor/framework/document-change.ts +0 -1391
- package/src/med_editor/framework/document-combine.ts +0 -44
- package/src/med_editor/framework/document-comment.ts +0 -163
- package/src/med_editor/framework/document-context.ts +0 -410
- package/src/med_editor/framework/document-eval-func.ts +0 -53
- package/src/med_editor/framework/document-event.ts +0 -1082
- package/src/med_editor/framework/document-history.ts +0 -76
- package/src/med_editor/framework/document-images-loader.ts +0 -74
- package/src/med_editor/framework/document-input-cursor.ts +0 -244
- package/src/med_editor/framework/document-paint.ts +0 -110
- package/src/med_editor/framework/document-print-offscreen.ts +0 -134
- package/src/med_editor/framework/document-print.ts +0 -219
- package/src/med_editor/framework/document-segmenter.ts +0 -211
- package/src/med_editor/framework/document-selection.ts +0 -389
- package/src/med_editor/framework/document-template.ts +0 -20
- package/src/med_editor/framework/document-textline-mode.ts +0 -34
- package/src/med_editor/framework/element-define.ts +0 -674
- package/src/med_editor/framework/element-event-define.ts +0 -141
- package/src/med_editor/framework/element-measure.ts +0 -573
- package/src/med_editor/framework/element-paint.ts +0 -176
- package/src/med_editor/framework/element-props.ts +0 -938
- package/src/med_editor/framework/element-reader.ts +0 -159
- package/src/med_editor/framework/element-render-cut.ts +0 -456
- package/src/med_editor/framework/element-serialize.ts +0 -126
- package/src/med_editor/framework/element-util.ts +0 -1564
- package/src/med_editor/framework/impl/checkbox/checkbox-impl.ts +0 -71
- package/src/med_editor/framework/impl/comments/comment-content-impl.ts +0 -119
- package/src/med_editor/framework/impl/comments/comment-element-impl.ts +0 -65
- package/src/med_editor/framework/impl/comments/comments-container-impl.ts +0 -68
- package/src/med_editor/framework/impl/comments/comments-util.ts +0 -84
- package/src/med_editor/framework/impl/comments/validate-msg-impl.ts +0 -94
- package/src/med_editor/framework/impl/data-element/data-decorate-impl.ts +0 -95
- package/src/med_editor/framework/impl/data-element/data-element-barcode.ts +0 -127
- package/src/med_editor/framework/impl/data-element/data-element-base-impl.ts +0 -234
- package/src/med_editor/framework/impl/data-element/data-element-check-impl.ts +0 -146
- package/src/med_editor/framework/impl/data-element/data-element-date-impl.ts +0 -128
- package/src/med_editor/framework/impl/data-element/data-element-group-impl.ts +0 -150
- package/src/med_editor/framework/impl/data-element/data-element-image-impl.ts +0 -147
- package/src/med_editor/framework/impl/data-element/data-element-list-impl.ts +0 -142
- package/src/med_editor/framework/impl/data-element/data-element-text-impl.ts +0 -117
- package/src/med_editor/framework/impl/decorate/fill-null-space-imple.ts +0 -48
- package/src/med_editor/framework/impl/document/doc-body-impl.ts +0 -95
- package/src/med_editor/framework/impl/document/doc-body-part-impl.ts +0 -104
- package/src/med_editor/framework/impl/document/doc-container-impl.ts +0 -24
- package/src/med_editor/framework/impl/document/doc-footer-impl.ts +0 -88
- package/src/med_editor/framework/impl/document/doc-header-impl.ts +0 -100
- package/src/med_editor/framework/impl/document/doc-impl.ts +0 -226
- package/src/med_editor/framework/impl/media-formula/menstrual-history.ts +0 -175
- package/src/med_editor/framework/impl/paragraph/p-impl.ts +0 -190
- package/src/med_editor/framework/impl/picture/image-impl.ts +0 -136
- package/src/med_editor/framework/impl/radio/radio-impl.ts +0 -79
- package/src/med_editor/framework/impl/symbol/br-symbol-impl.ts +0 -60
- package/src/med_editor/framework/impl/symbol/p-symbol-impl.ts +0 -57
- package/src/med_editor/framework/impl/table/table-cell-impl.ts +0 -156
- package/src/med_editor/framework/impl/table/table-impl.ts +0 -401
- package/src/med_editor/framework/impl/table/table-row-impl.ts +0 -83
- package/src/med_editor/framework/impl/table/table-split-cell-patch.ts +0 -98
- package/src/med_editor/framework/impl/table/table-split-cell.ts +0 -475
- package/src/med_editor/framework/impl/table/table-util.ts +0 -716
- package/src/med_editor/framework/impl/text/text-impl.ts +0 -163
- package/src/med_editor/framework/impl/text/track-run-impl.ts +0 -135
- package/src/med_editor/framework/notify.ts +0 -130
- package/src/med_editor/framework/range-util.ts +0 -321
- package/src/med_editor/framework/render-context.ts +0 -431
- package/src/med_editor/framework/render-define.ts +0 -224
- package/src/med_editor/framework/selection-overlays.ts +0 -133
- package/src/med_editor/texteditor.ts +0 -1010
- package/src/med_editor/util/subject.ts +0 -118
- package/src/med_editor//345/205/245/351/231/242/350/256/260/345/275/225.json +0 -3573
- package/src/med_editor//345/205/245/351/231/242/350/256/260/345/275/225/346/265/213/350/257/225.json +0 -3573
- package/src/med_editor//345/205/245/351/231/242/350/256/260/345/275/225/346/265/213/350/257/225bug.json +0 -315
- package/src/med_editor//345/205/245/351/231/242/350/256/260/345/275/225/346/265/213/350/257/225/346/211/271/346/263/250.json +0 -122
- package/src/med_editor//345/205/245/351/231/242/350/256/260/345/275/225/346/265/213/350/257/225/346/226/207/346/241/243/351/252/214/350/257/201.json +0 -3599
- package/src/med_editor//345/205/245/351/231/242/350/256/260/345/275/225/346/265/213/350/257/225/351/225/277/346/226/207/346/234/254.json +0 -24586
- package/src/med_editor//345/220/210/345/271/266/347/227/205/347/250/213/345/275/225.json +0 -2874
- package/src/med_editor//346/211/213/346/234/257/350/256/260/345/275/225.json +0 -341
- package/src/med_editor//346/231/256/351/200/232doc/347/261/273/346/226/207/346/241/243.json +0 -2201
- package/src/med_editor//346/243/200/351/252/214/347/224/263/350/257/267/345/215/225.json +0 -1069
- package/src/med_editor//347/227/205/347/250/213/345/275/225//345/206/205/351/225/234/344/270/213/346/262/273/347/226/227/350/256/260/345/275/225.json +0 -125
- package/src/med_editor//347/227/205/347/250/213/345/275/225//345/220/210/345/271/266/347/227/205/347/250/213/345/275/225/346/250/241/346/235/277.json +0 -86
- package/src/med_editor//347/227/205/347/250/213/345/275/225//346/227/245/345/270/270/347/227/205/347/250/213/350/256/260/345/275/225.json +0 -115
- package/src/med_editor//347/227/205/347/250/213/345/275/225//346/237/245/346/210/277/350/256/260/345/275/2251.json +0 -108
- package/src/med_editor//347/227/205/347/250/213/345/275/225//351/246/226/346/254/241/344/270/212/347/272/247/345/214/273/345/270/210/346/237/245/346/210/277/350/256/260/345/275/225.json +0 -272
- package/src/med_editor//351/225/277/346/234/237/345/214/273/345/230/261/345/215/225.json +0 -1070
@@ -0,0 +1,678 @@
|
|
1
|
+
import { ElementUtil } from "../../element-util";
|
2
|
+
import { ParagraphElement } from "../paragraph/p-impl";
|
3
|
+
import { TableCellElement } from "./table-cell-impl";
|
4
|
+
import { TableElement } from "./table-impl";
|
5
|
+
import { TableRowElement } from "./table-row-impl";
|
6
|
+
export class TableUtil {
|
7
|
+
static canDeleteTable(ss) {
|
8
|
+
const { startControl } = ss;
|
9
|
+
if (!startControl) {
|
10
|
+
return false;
|
11
|
+
}
|
12
|
+
const tb = ElementUtil.getParentByType(startControl, TableElement);
|
13
|
+
return !!tb;
|
14
|
+
}
|
15
|
+
/**
|
16
|
+
* 校验当前选区是否可以执行合并单元格操作
|
17
|
+
* @param ss
|
18
|
+
* @returns
|
19
|
+
*/
|
20
|
+
static canMergeCells(ss) {
|
21
|
+
const { ancestorCommonControl, startControl, endControl, collapsed, selectedRange } = ss;
|
22
|
+
if (collapsed) {
|
23
|
+
return false;
|
24
|
+
}
|
25
|
+
if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {
|
26
|
+
const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent;
|
27
|
+
const startCell = ElementUtil.getParentByType(startControl, TableCellElement);
|
28
|
+
const endCell = ElementUtil.getParentByType(endControl, TableCellElement);
|
29
|
+
if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {
|
30
|
+
const tbRegion = this.getTableRectSelectedRegion(tbElement, startCell, endCell);
|
31
|
+
if (selectedRange && selectedRange.target === tbElement) {
|
32
|
+
const selectedCells = [];
|
33
|
+
selectedRange.selectedChildren.every(item => item.selectedChildren.every(cell => selectedCells.push(cell.target)));
|
34
|
+
for (let i = tbRegion.startRow; i <= tbRegion.endRow; i++) {
|
35
|
+
const currRow = tbElement.getChild(i);
|
36
|
+
for (let j = tbRegion.startCol; j <= tbRegion.endCol; j++) {
|
37
|
+
const currCell = currRow.getChild(j);
|
38
|
+
if (currCell.isNotBeMergedCell() && selectedCells.indexOf(currCell) < 0) {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
return true;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
return false;
|
48
|
+
}
|
49
|
+
/**
|
50
|
+
* 获取横向合并当前单元格合并结束索引位置
|
51
|
+
* @param tb
|
52
|
+
* @param rowIndex
|
53
|
+
* @param colIndex
|
54
|
+
*/
|
55
|
+
static getHMergeEndIndex(tb, rowIndex, colIndex) {
|
56
|
+
const currRow = tb.getChild(rowIndex);
|
57
|
+
let index = colIndex;
|
58
|
+
for (let i = colIndex + 1; i < tb.getColsCount(); i++) {
|
59
|
+
const cell = currRow.getChild(i);
|
60
|
+
if (cell.props.hMerge === 'continue') {
|
61
|
+
index = i;
|
62
|
+
}
|
63
|
+
else {
|
64
|
+
break;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
return index;
|
68
|
+
}
|
69
|
+
/**
|
70
|
+
* 获取横向合并当前单元格合并开始索引位置
|
71
|
+
* @param tb
|
72
|
+
* @param rowIndex
|
73
|
+
* @param colIndex
|
74
|
+
*/
|
75
|
+
static getHMergeStartIndex(tb, rowIndex, colIndex) {
|
76
|
+
const row = tb.getChild(rowIndex);
|
77
|
+
for (let i = colIndex - 1; i >= 0; i--) {
|
78
|
+
const cell = row.getChild(i);
|
79
|
+
if (cell.props.hMerge === 'restart') {
|
80
|
+
return i;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
throw new Error('未找到主合并单元格');
|
84
|
+
}
|
85
|
+
/**
|
86
|
+
* 获取纵向合并当前单元格合并结束索引位置
|
87
|
+
* @param tb
|
88
|
+
* @param rowIndex
|
89
|
+
* @param colIndex i
|
90
|
+
*/
|
91
|
+
static getVMergeEndIndex(tb, rowIndex, colIndex) {
|
92
|
+
let index = rowIndex;
|
93
|
+
for (let i = rowIndex + 1; i < tb.length; i++) {
|
94
|
+
const currRow = tb.getChild(i);
|
95
|
+
const cell = currRow.getChild(colIndex);
|
96
|
+
if (cell.props.vMerge === 'continue') {
|
97
|
+
index = i;
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
break;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
return index;
|
104
|
+
}
|
105
|
+
/**
|
106
|
+
* 获取纵向合并当前单元格合并开始索引位置
|
107
|
+
* @param tb
|
108
|
+
* @param rowIndex
|
109
|
+
* @param colIndex i
|
110
|
+
*/
|
111
|
+
static getVMergeStartIndex(tb, rowIndex, colIndex) {
|
112
|
+
for (let i = rowIndex - 1; i >= 0; i--) {
|
113
|
+
const currRow = tb.getChild(i);
|
114
|
+
const cell = currRow.getChild(colIndex);
|
115
|
+
if (cell.props.vMerge === 'restart') {
|
116
|
+
return i;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
throw new Error('未找到主合并单元格');
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* 合并单元格
|
123
|
+
* @param ss
|
124
|
+
* @returns
|
125
|
+
*/
|
126
|
+
static mergeCells(ss) {
|
127
|
+
const { ancestorCommonControl, startControl, endControl, collapsed } = ss;
|
128
|
+
if (collapsed) {
|
129
|
+
return;
|
130
|
+
}
|
131
|
+
if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {
|
132
|
+
const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent;
|
133
|
+
const startCell = ElementUtil.getParentByType(startControl, TableCellElement);
|
134
|
+
const endCell = ElementUtil.getParentByType(endControl, TableCellElement);
|
135
|
+
if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {
|
136
|
+
//this.combineCellContent(tbElement, startCell, endCell);
|
137
|
+
this.combineCells(tbElement, startCell, endCell);
|
138
|
+
}
|
139
|
+
this.checkRowBeMerged(ss);
|
140
|
+
ss.clear();
|
141
|
+
}
|
142
|
+
}
|
143
|
+
/**
|
144
|
+
* 在合并单元格后需要校验
|
145
|
+
* 1.如果某个行的所有单元格都不是normal,则需要删除当前行
|
146
|
+
* 2.如果某个列的所有的单元格都不是normal,则需要删除当前列
|
147
|
+
*/
|
148
|
+
static checkRowBeMerged(ss) {
|
149
|
+
const tb = ElementUtil.getParentByType(ss.startControl, TableElement);
|
150
|
+
if (!tb) {
|
151
|
+
return;
|
152
|
+
}
|
153
|
+
const colsCount = tb.getColsCount();
|
154
|
+
const fullMergeRows = [];
|
155
|
+
for (let i = 0; i < tb.length; i++) {
|
156
|
+
const row = tb.getChild(i);
|
157
|
+
let count = 0;
|
158
|
+
for (let j = 0; j < colsCount; j++) {
|
159
|
+
const cell = row.getChild(j);
|
160
|
+
if (!cell.isNotBeMergedCell()) {
|
161
|
+
count++;
|
162
|
+
}
|
163
|
+
}
|
164
|
+
//当前行所有的单元格都被合并,需要删除
|
165
|
+
if (count === colsCount) {
|
166
|
+
fullMergeRows.push(row);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
fullMergeRows.forEach(row => this.removeRow(row));
|
170
|
+
}
|
171
|
+
/**
|
172
|
+
* 移除行
|
173
|
+
* @param row
|
174
|
+
*/
|
175
|
+
static removeRow(row) {
|
176
|
+
const rowIndex = row.getIndex();
|
177
|
+
const tb = row.parent;
|
178
|
+
for (let i = 0; i < row.length; i++) {
|
179
|
+
const cell = row.getChild(i);
|
180
|
+
if (cell.props.vMerge === 'restart') {
|
181
|
+
const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);
|
182
|
+
if (vMergeEndIndex > rowIndex) {
|
183
|
+
const nextRow = tb.getChild(rowIndex + 1);
|
184
|
+
nextRow.getChild(i).props.vMerge = vMergeEndIndex - rowIndex > 2 ? 'restart' : null;
|
185
|
+
}
|
186
|
+
}
|
187
|
+
else if (cell.props.vMerge === 'continue') {
|
188
|
+
// const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);
|
189
|
+
// if (vMergeEndIndex > rowIndex) {
|
190
|
+
// const nextRow = tb.getChild<TableRowElement>(rowIndex + 1);
|
191
|
+
// nextRow.getChild<TableCellElement>(i).cellProps.vMerge = 'continue';
|
192
|
+
// }
|
193
|
+
const vMergeStartIndex = this.getVMergeStartIndex(tb, rowIndex, i);
|
194
|
+
const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);
|
195
|
+
//当前单元格处于合并行的最后一行,并且合并的行数为2行
|
196
|
+
if (vMergeEndIndex === rowIndex && vMergeEndIndex - vMergeStartIndex === 1) {
|
197
|
+
const aboveCell = tb.getChild(vMergeStartIndex).getChild(i);
|
198
|
+
aboveCell.props.vMerge = null;
|
199
|
+
}
|
200
|
+
}
|
201
|
+
}
|
202
|
+
tb.removeChild(row);
|
203
|
+
}
|
204
|
+
/**
|
205
|
+
* 移除列
|
206
|
+
* @param tb
|
207
|
+
* @param colIndex
|
208
|
+
*/
|
209
|
+
static removeCol(tb, colIndex) {
|
210
|
+
for (let i = 0; i < tb.length; i++) {
|
211
|
+
const row = tb.getChild(i);
|
212
|
+
const cell = row.getChild(colIndex);
|
213
|
+
if (cell.props.hMerge === 'restart') {
|
214
|
+
const hMergeEndIndex = this.getHMergeEndIndex(tb, i, colIndex);
|
215
|
+
if (hMergeEndIndex > colIndex) {
|
216
|
+
const nextCell = row.getChild(colIndex + 1);
|
217
|
+
nextCell.props.hMerge = hMergeEndIndex - colIndex > 2 ? 'restart' : null;
|
218
|
+
}
|
219
|
+
}
|
220
|
+
else if (cell.props.hMerge === 'continue') {
|
221
|
+
const hMergeStartIndex = this.getHMergeStartIndex(tb, i, colIndex);
|
222
|
+
const hMergeEndIndex = this.getHMergeEndIndex(tb, i, colIndex);
|
223
|
+
//当前单元格处于合并行的最后一行,并且合并的行数为2行
|
224
|
+
if (hMergeEndIndex === colIndex && hMergeEndIndex - hMergeStartIndex === 1) {
|
225
|
+
const masterVMergeCell = tb.getChild(hMergeStartIndex).getChild(i);
|
226
|
+
masterVMergeCell.props.hMerge = null;
|
227
|
+
}
|
228
|
+
}
|
229
|
+
row.removeChild(cell);
|
230
|
+
}
|
231
|
+
tb.removeCol(colIndex);
|
232
|
+
}
|
233
|
+
/**
|
234
|
+
* 移除光标所在的当前行
|
235
|
+
* @param ss
|
236
|
+
*/
|
237
|
+
static removeCurrRow(ss) {
|
238
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
239
|
+
if (!startCell?.parent) {
|
240
|
+
throw new Error('parent is null');
|
241
|
+
}
|
242
|
+
const currRow = startCell.parent;
|
243
|
+
const tb = currRow.parent;
|
244
|
+
this.removeRow(currRow);
|
245
|
+
tb.pubOnChange('self');
|
246
|
+
tb.refreshView();
|
247
|
+
}
|
248
|
+
/**
|
249
|
+
* 移除光标所在的当前列
|
250
|
+
* @param ss
|
251
|
+
*/
|
252
|
+
static removeCurrCol(ss) {
|
253
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
254
|
+
if (!startCell?.parent) {
|
255
|
+
throw new Error('parent is null');
|
256
|
+
}
|
257
|
+
if (ss.collapsed) {
|
258
|
+
const currRow = startCell.parent;
|
259
|
+
const tb = currRow.parent;
|
260
|
+
this.removeCol(tb, startCell.getIndex());
|
261
|
+
ss.clear();
|
262
|
+
return;
|
263
|
+
}
|
264
|
+
const { ancestorCommonControl, startControl, endControl } = ss;
|
265
|
+
if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {
|
266
|
+
const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent;
|
267
|
+
const startCell = ElementUtil.getParentByType(startControl, TableCellElement);
|
268
|
+
const endCell = ElementUtil.getParentByType(endControl, TableCellElement);
|
269
|
+
if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {
|
270
|
+
const startColIndex = startCell.getIndex();
|
271
|
+
let endColIndex = endCell.getIndex();
|
272
|
+
while (startColIndex <= endColIndex) {
|
273
|
+
this.removeCol(tbElement, endColIndex);
|
274
|
+
endColIndex--;
|
275
|
+
}
|
276
|
+
}
|
277
|
+
tbElement.pubOnChange('self');
|
278
|
+
}
|
279
|
+
ss.clear();
|
280
|
+
}
|
281
|
+
/**
|
282
|
+
* 合并单元格
|
283
|
+
*/
|
284
|
+
static combineCells(tbElement, startCell, endCell) {
|
285
|
+
const tbRegion = this.getTableRectSelectedRegion(tbElement, startCell, endCell);
|
286
|
+
const cellContents = [];
|
287
|
+
for (let i = tbRegion.startRow; i <= tbRegion.endRow; i++) {
|
288
|
+
const currRow = tbElement.getChild(i);
|
289
|
+
for (let j = tbRegion.startCol; j <= tbRegion.endCol; j++) {
|
290
|
+
const currCell = currRow.getChild(j);
|
291
|
+
currCell.props.vMerge = null;
|
292
|
+
currCell.props.hMerge = 'continue';
|
293
|
+
if (j === tbRegion.startCol) {
|
294
|
+
currCell.props.vMerge = i === tbRegion.startRow ? 'restart' : 'continue';
|
295
|
+
currCell.props.hMerge = 'restart';
|
296
|
+
}
|
297
|
+
if (currCell !== startCell) {
|
298
|
+
cellContents.push(...ElementUtil.getChildrenElements(currCell));
|
299
|
+
currCell.clearItems();
|
300
|
+
}
|
301
|
+
}
|
302
|
+
}
|
303
|
+
//如果合并的单元格都是空段落,则不合并内容
|
304
|
+
if (!cellContents.every((item) => (item instanceof ParagraphElement && item.length === 1))) {
|
305
|
+
for (let i = 0; i < cellContents.length; i++) {
|
306
|
+
startCell.addChild(cellContents[i]);
|
307
|
+
}
|
308
|
+
}
|
309
|
+
}
|
310
|
+
static canSplitCell(ss) {
|
311
|
+
const { ancestorCommonControl, startControl, endControl, collapsed } = ss;
|
312
|
+
if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {
|
313
|
+
const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent;
|
314
|
+
const startCell = ElementUtil.getParentByType(startControl, TableCellElement);
|
315
|
+
const endCell = ElementUtil.getParentByType(endControl, TableCellElement);
|
316
|
+
if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {
|
317
|
+
if (startCell === endCell) {
|
318
|
+
return startCell.props.hMerge === 'restart' || startCell.props.vMerge === 'restart';
|
319
|
+
}
|
320
|
+
}
|
321
|
+
}
|
322
|
+
else {
|
323
|
+
const startCell = ElementUtil.getParentByType(startControl, TableCellElement);
|
324
|
+
if (!startCell) {
|
325
|
+
throw new Error('startCell is null');
|
326
|
+
}
|
327
|
+
const { hMerge, vMerge } = startCell?.props;
|
328
|
+
return hMerge === 'restart' || vMerge === 'restart' || !hMerge || !vMerge;
|
329
|
+
}
|
330
|
+
return false;
|
331
|
+
}
|
332
|
+
/**
|
333
|
+
* 将合并的单元格合并还原
|
334
|
+
* @param ss
|
335
|
+
*/
|
336
|
+
static restoreCell(ss) {
|
337
|
+
const { ancestorCommonControl, startControl, endControl, collapsed } = ss;
|
338
|
+
const startCell = ElementUtil.getParentByType(startControl, TableCellElement);
|
339
|
+
if (startCell) {
|
340
|
+
this.restoreCellMerge(startCell);
|
341
|
+
ss.resetRange(startCell, 0);
|
342
|
+
startCell.refreshView();
|
343
|
+
}
|
344
|
+
}
|
345
|
+
static restoreCellMerge(cell) {
|
346
|
+
const { vMerge, hMerge } = cell.props;
|
347
|
+
const row = cell.parent;
|
348
|
+
const tb = row.parent;
|
349
|
+
const rowIndex = row.getIndex();
|
350
|
+
const colIndex = cell.getIndex();
|
351
|
+
if (vMerge === 'restart') {
|
352
|
+
for (let i = rowIndex + 1; i < tb.length; i++) {
|
353
|
+
const row = tb.getChild(i);
|
354
|
+
const cell = row.getChild(colIndex);
|
355
|
+
if (cell.props.vMerge === "continue") {
|
356
|
+
cell.props.vMerge = null;
|
357
|
+
if (cell.props.hMerge === "restart") {
|
358
|
+
this.restoreCellMerge(cell);
|
359
|
+
}
|
360
|
+
}
|
361
|
+
}
|
362
|
+
}
|
363
|
+
if (hMerge === 'restart') {
|
364
|
+
for (let i = colIndex + 1; i < row.length; i++) {
|
365
|
+
const cell = row.getChild(i);
|
366
|
+
if (cell.props.hMerge === "continue") {
|
367
|
+
cell.props.hMerge = null;
|
368
|
+
if (cell.props.vMerge === "restart") {
|
369
|
+
this.restoreCellMerge(cell);
|
370
|
+
}
|
371
|
+
}
|
372
|
+
}
|
373
|
+
}
|
374
|
+
cell.props.hMerge = null;
|
375
|
+
cell.props.vMerge = null;
|
376
|
+
}
|
377
|
+
static getVMergeRows(tb, masterRowIndex, masterColIndex) {
|
378
|
+
const items = [];
|
379
|
+
for (let i = masterRowIndex + 1; i < tb.length; i++) {
|
380
|
+
const row = tb.getChild(i);
|
381
|
+
const cell = row.getChild(masterColIndex);
|
382
|
+
if (cell.props.vMerge === 'continue') {
|
383
|
+
items.push(row);
|
384
|
+
}
|
385
|
+
else {
|
386
|
+
return items;
|
387
|
+
}
|
388
|
+
}
|
389
|
+
return items;
|
390
|
+
}
|
391
|
+
static insertCol(ss, insertColIndex) {
|
392
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
393
|
+
if (!startCell?.parent) {
|
394
|
+
throw new Error('parent is null');
|
395
|
+
}
|
396
|
+
const startRow = startCell.parent;
|
397
|
+
const tb = startRow.parent;
|
398
|
+
const currColIndex = startCell.getIndex();
|
399
|
+
const colsCount = tb.getColsCount();
|
400
|
+
insertColIndex = insertColIndex < 0 ? 0 : insertColIndex;
|
401
|
+
insertColIndex = insertColIndex > colsCount ? colsCount : insertColIndex;
|
402
|
+
//插入列需要将之前列分割
|
403
|
+
const insertColWidth = insertColIndex === colsCount ? tb.getCellWidth(colsCount - 1) : tb.getCellWidth(insertColIndex);
|
404
|
+
const newColWidth = Math.floor(insertColWidth / 2);
|
405
|
+
if (newColWidth < 20) {
|
406
|
+
console.warn('插入列的最小宽度不能小于20,当前为:' + newColWidth);
|
407
|
+
return;
|
408
|
+
}
|
409
|
+
for (let i = 0; i < tb.length; i++) {
|
410
|
+
const row = tb.getChild(i);
|
411
|
+
const newCell = new TableCellElement();
|
412
|
+
if (insertColIndex === 0 || insertColIndex === colsCount) {
|
413
|
+
row.addChild(newCell, insertColIndex);
|
414
|
+
continue;
|
415
|
+
}
|
416
|
+
const focusCell = row.getChild(insertColIndex);
|
417
|
+
if (focusCell) {
|
418
|
+
if (focusCell.props.hMerge === 'continue') {
|
419
|
+
//获取合并行的最后的行索引
|
420
|
+
const hMergeEndColIndex = this.getHMergeEndIndex(tb, i, currColIndex);
|
421
|
+
if (hMergeEndColIndex > insertColIndex || (hMergeEndColIndex === insertColIndex && currColIndex < insertColIndex)) {
|
422
|
+
newCell.props.hMerge = 'continue';
|
423
|
+
}
|
424
|
+
}
|
425
|
+
else if (focusCell.props.hMerge === 'restart' && currColIndex > insertColIndex) {
|
426
|
+
newCell.props.hMerge = 'continue';
|
427
|
+
}
|
428
|
+
}
|
429
|
+
row.addChild(newCell, insertColIndex);
|
430
|
+
}
|
431
|
+
tb.setCellWidth(insertColIndex === colsCount ? insertColIndex - 1 : insertColIndex, insertColWidth - newColWidth);
|
432
|
+
tb.insertCol(insertColIndex, newColWidth);
|
433
|
+
tb.pubOnChange('self');
|
434
|
+
tb.refreshView();
|
435
|
+
}
|
436
|
+
static insertRow(ss, insertRowIndex) {
|
437
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
438
|
+
if (!startCell?.parent) {
|
439
|
+
throw new Error('parent is null');
|
440
|
+
}
|
441
|
+
const startRow = startCell.parent;
|
442
|
+
const tb = startRow.parent;
|
443
|
+
const currRowIndex = startRow.getIndex();
|
444
|
+
insertRowIndex = insertRowIndex < 0 ? 0 : insertRowIndex;
|
445
|
+
insertRowIndex = insertRowIndex > tb.length ? tb.length : insertRowIndex;
|
446
|
+
const newRow = TableRowElement.createRow(tb.getColsCount());
|
447
|
+
//新行插在第一行或者最后一行
|
448
|
+
if (insertRowIndex === 0 || insertRowIndex === tb.length) {
|
449
|
+
tb.addChild(newRow, insertRowIndex);
|
450
|
+
tb.refreshView();
|
451
|
+
return newRow;
|
452
|
+
}
|
453
|
+
const destRow = tb.getChild(insertRowIndex);
|
454
|
+
for (let i = 0; i < destRow.length; i++) {
|
455
|
+
const destCell = destRow.getChild(i);
|
456
|
+
const newCell = newRow.getChild(i);
|
457
|
+
//如果当前单元格是普通单元格或者合并列的最后一个单元格,则不做处理
|
458
|
+
if (destCell.props.vMerge === 'continue') {
|
459
|
+
//获取合并列的最后的行索引
|
460
|
+
const vMergeEndRowIndex = this.getVMergeEndIndex(tb, insertRowIndex, i);
|
461
|
+
if (vMergeEndRowIndex > insertRowIndex || (vMergeEndRowIndex === insertRowIndex && currRowIndex < insertRowIndex)) {
|
462
|
+
newCell.props.vMerge = 'continue';
|
463
|
+
//newCell.cellProps.hMerge = destCell.cellProps.hMerge;
|
464
|
+
}
|
465
|
+
}
|
466
|
+
else if (destCell.props.vMerge === 'restart' && currRowIndex > insertRowIndex) {
|
467
|
+
//在上方新增行,目标行单元格属于合并的起点
|
468
|
+
newCell.props.vMerge = 'continue';
|
469
|
+
//newCell.cellProps.hMerge = destCell.cellProps.hMerge;
|
470
|
+
}
|
471
|
+
}
|
472
|
+
tb.addChild(newRow, insertRowIndex);
|
473
|
+
tb.refreshView();
|
474
|
+
return newRow;
|
475
|
+
}
|
476
|
+
/**
|
477
|
+
* 在下方插入行
|
478
|
+
*/
|
479
|
+
static insertRowBelow(ss) {
|
480
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
481
|
+
if (!startCell?.parent) {
|
482
|
+
throw new Error('parent is null');
|
483
|
+
}
|
484
|
+
const startRow = startCell.parent;
|
485
|
+
const currRowIndex = startRow.getIndex();
|
486
|
+
this.insertRow(ss, currRowIndex + 1);
|
487
|
+
}
|
488
|
+
/**
|
489
|
+
* 在上方插入行
|
490
|
+
*/
|
491
|
+
static insertRowAbove(ss) {
|
492
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
493
|
+
if (!startCell?.parent) {
|
494
|
+
throw new Error('parent is null');
|
495
|
+
}
|
496
|
+
const startRow = startCell.parent;
|
497
|
+
const currRowIndex = startRow.getIndex();
|
498
|
+
this.insertRow(ss, currRowIndex);
|
499
|
+
}
|
500
|
+
/**
|
501
|
+
* 在右侧插入列
|
502
|
+
*/
|
503
|
+
static insertColToRight(ss) {
|
504
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
505
|
+
if (!startCell?.parent) {
|
506
|
+
throw new Error('parent is null');
|
507
|
+
}
|
508
|
+
const currColIndex = startCell.getIndex();
|
509
|
+
this.insertCol(ss, currColIndex + 1);
|
510
|
+
}
|
511
|
+
/**
|
512
|
+
* 在左侧插入列
|
513
|
+
*/
|
514
|
+
static insertColToLeft(ss) {
|
515
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
516
|
+
if (!startCell?.parent) {
|
517
|
+
throw new Error('parent is null');
|
518
|
+
}
|
519
|
+
const currColIndex = startCell.getIndex();
|
520
|
+
this.insertCol(ss, currColIndex);
|
521
|
+
}
|
522
|
+
/**
|
523
|
+
* 跳转到下一个单元格中
|
524
|
+
* @param ss
|
525
|
+
*/
|
526
|
+
static moveNextCell(ss) {
|
527
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
528
|
+
if (!startCell?.parent) {
|
529
|
+
throw new Error('parent is null');
|
530
|
+
}
|
531
|
+
const rowIndex = startCell.parent.getIndex();
|
532
|
+
const nextCell = this.getNextCell(ss);
|
533
|
+
if (nextCell) {
|
534
|
+
ss.resetRange(nextCell, 0);
|
535
|
+
nextCell.refreshView();
|
536
|
+
return;
|
537
|
+
}
|
538
|
+
//新增行,并定位
|
539
|
+
const newRow = this.insertRow(ss, rowIndex + 1);
|
540
|
+
ss.resetRange(newRow, 0);
|
541
|
+
newRow.refreshView();
|
542
|
+
}
|
543
|
+
/**
|
544
|
+
* 获取下一个可定位的单元格
|
545
|
+
* @param ss
|
546
|
+
* @returns
|
547
|
+
*/
|
548
|
+
static getNextCell(ss) {
|
549
|
+
const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
550
|
+
if (!startCell?.parent) {
|
551
|
+
throw new Error('parent is null');
|
552
|
+
}
|
553
|
+
const rowIndex = startCell.parent.getIndex();
|
554
|
+
const colIndex = startCell.getIndex();
|
555
|
+
const tb = startCell.parent.parent;
|
556
|
+
for (let i = rowIndex; i < tb.length; i++) {
|
557
|
+
let j = i === rowIndex ? colIndex + 1 : 0;
|
558
|
+
const currRow = tb.getChild(i);
|
559
|
+
for (; j < tb.getColsCount(); j++) {
|
560
|
+
const currCell = currRow.getChild(j);
|
561
|
+
if (currCell.isNotBeMergedCell()) {
|
562
|
+
return currCell;
|
563
|
+
}
|
564
|
+
}
|
565
|
+
}
|
566
|
+
//throw new Error('getNextCell is null')
|
567
|
+
}
|
568
|
+
/**
|
569
|
+
* 当前光标是否在最后一个单元格中
|
570
|
+
*/
|
571
|
+
static isLastVisiableCell(ss) {
|
572
|
+
return !this.getNextCell(ss);
|
573
|
+
}
|
574
|
+
/**
|
575
|
+
* 移除当前table
|
576
|
+
*/
|
577
|
+
static removeTable(ss) {
|
578
|
+
const tb = ElementUtil.getParentByType(ss.startControl, TableElement);
|
579
|
+
if (!tb) {
|
580
|
+
console.warn('当前位置不存在表格');
|
581
|
+
return;
|
582
|
+
}
|
583
|
+
tb.parent.refreshView();
|
584
|
+
tb.remove();
|
585
|
+
}
|
586
|
+
/**
|
587
|
+
* 设置表格单元格对角线
|
588
|
+
* @param ss
|
589
|
+
* @param diagonal
|
590
|
+
* @returns
|
591
|
+
*/
|
592
|
+
static setTableCellDiagonal(ss, diagonal) {
|
593
|
+
const tc = ElementUtil.getParentByType(ss.startControl, TableCellElement);
|
594
|
+
if (!tc) {
|
595
|
+
console.warn('当前位置不存在表格');
|
596
|
+
return;
|
597
|
+
}
|
598
|
+
if (!tc.props.diagonal || tc.props.diagonal !== diagonal) {
|
599
|
+
tc.props.diagonal = diagonal;
|
600
|
+
}
|
601
|
+
else if (tc.props.diagonal === diagonal) {
|
602
|
+
tc.props.diagonal = null;
|
603
|
+
}
|
604
|
+
tc.refreshView();
|
605
|
+
}
|
606
|
+
/**
|
607
|
+
* 将当前表格截断成两个相邻的表格
|
608
|
+
* @param tb
|
609
|
+
* @param rowIndex
|
610
|
+
*/
|
611
|
+
static cutTable(tb, rowIndex) {
|
612
|
+
if (rowIndex === 0 || rowIndex === tb.length - 1) {
|
613
|
+
return;
|
614
|
+
}
|
615
|
+
const newTb = tb.clone(false);
|
616
|
+
const len = tb.length - 1;
|
617
|
+
while (len > rowIndex) {
|
618
|
+
const child = tb.getChild(len);
|
619
|
+
newTb.addChild(child.clone(true), 0);
|
620
|
+
tb.removeChild(child);
|
621
|
+
}
|
622
|
+
if (newTb.length > 0) {
|
623
|
+
tb.parent.addChild(newTb, tb.getIndex() + 1);
|
624
|
+
}
|
625
|
+
}
|
626
|
+
/**
|
627
|
+
* 获取表格选区区域最大的矩形区域
|
628
|
+
* @param tb
|
629
|
+
* @param startCell
|
630
|
+
* @param endCell
|
631
|
+
* @returns
|
632
|
+
*/
|
633
|
+
static getTableRectSelectedRegion(tb, startCell, endCell) {
|
634
|
+
let startRow = startCell.parent.getIndex();
|
635
|
+
let startCol = startCell.getIndex();
|
636
|
+
let endRow = endCell.parent.getIndex();
|
637
|
+
let endCol = endCell.getIndex();
|
638
|
+
if (startRow > endRow) {
|
639
|
+
[endRow, startRow] = [startRow, endRow];
|
640
|
+
}
|
641
|
+
if (startCol > endCol) {
|
642
|
+
[endCol, startCol] = [startCol, endCol];
|
643
|
+
}
|
644
|
+
for (let i = startRow; i <= endRow; i++) {
|
645
|
+
const row = tb.getChild(i);
|
646
|
+
for (let j = startCol; j <= endCol; j++) {
|
647
|
+
const cell = row.getChild(j);
|
648
|
+
const { hMerge, vMerge } = cell.props;
|
649
|
+
if (hMerge === 'continue') {
|
650
|
+
const startColIndex = TableUtil.getHMergeStartIndex(tb, i, j);
|
651
|
+
const endColIndex = TableUtil.getHMergeEndIndex(tb, i, j);
|
652
|
+
startCol = Math.min(startCol, startColIndex);
|
653
|
+
endCol = Math.max(endCol, endColIndex);
|
654
|
+
}
|
655
|
+
if (vMerge === 'continue') {
|
656
|
+
const startRowIndex = TableUtil.getVMergeStartIndex(tb, i, j);
|
657
|
+
const endRowIndex = TableUtil.getVMergeEndIndex(tb, i, j);
|
658
|
+
startRow = Math.min(startRow, startRowIndex);
|
659
|
+
endRow = Math.max(endRow, endRowIndex);
|
660
|
+
}
|
661
|
+
if (vMerge === 'restart') {
|
662
|
+
const rowIndex = TableUtil.getVMergeEndIndex(tb, i, j);
|
663
|
+
if (rowIndex > endRow) {
|
664
|
+
endRow = rowIndex;
|
665
|
+
}
|
666
|
+
}
|
667
|
+
if (hMerge === 'restart') {
|
668
|
+
const colIndex = TableUtil.getHMergeEndIndex(tb, i, j);
|
669
|
+
if (colIndex > endCol) {
|
670
|
+
endCol = colIndex;
|
671
|
+
}
|
672
|
+
}
|
673
|
+
}
|
674
|
+
}
|
675
|
+
return { startRow, endRow, startCol, endCol };
|
676
|
+
}
|
677
|
+
}
|
678
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiJsaWIvIiwic291cmNlcyI6WyJmcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUduRCxNQUFNLE9BQU8sU0FBUztJQUVsQixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQWtCO1FBQ3BDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFrQjtRQUNuQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3pGLElBQUksU0FBUyxFQUFFO1lBQ1gsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLHFCQUFxQixZQUFZLFlBQVksSUFBSSxxQkFBcUIsWUFBWSxlQUFlLEVBQUU7WUFDbkcsTUFBTSxTQUFTLEdBQUcscUJBQXFCLFlBQVksWUFBWSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMs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
|