@hailin-zheng/editor-core 1.0.18 → 1.0.20
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 +1 -0
- package/lib/doc-ruler.d.ts.map +1 -0
- package/lib/framework/common-util.d.ts +1 -0
- package/lib/framework/common-util.d.ts.map +1 -0
- package/lib/framework/document-change.d.ts +1 -0
- package/lib/framework/document-change.d.ts.map +1 -0
- package/lib/framework/document-combine.d.ts +1 -0
- package/lib/framework/document-combine.d.ts.map +1 -0
- package/lib/framework/document-comment.d.ts +1 -0
- package/lib/framework/document-comment.d.ts.map +1 -0
- package/lib/framework/document-context.d.ts +1 -0
- package/lib/framework/document-context.d.ts.map +1 -0
- package/lib/framework/document-eval-func.d.ts +1 -0
- package/lib/framework/document-eval-func.d.ts.map +1 -0
- package/lib/framework/document-event.d.ts +1 -0
- package/lib/framework/document-event.d.ts.map +1 -0
- package/lib/framework/document-history.d.ts +1 -0
- package/lib/framework/document-history.d.ts.map +1 -0
- package/lib/framework/document-images-loader.d.ts +1 -0
- package/lib/framework/document-images-loader.d.ts.map +1 -0
- package/lib/framework/document-input-cursor.d.ts +1 -0
- package/lib/framework/document-input-cursor.d.ts.map +1 -0
- package/lib/framework/document-paint.d.ts +1 -0
- package/lib/framework/document-paint.d.ts.map +1 -0
- package/lib/framework/document-print-offscreen.d.ts +1 -0
- package/lib/framework/document-print-offscreen.d.ts.map +1 -0
- package/lib/framework/document-print.d.ts +1 -0
- package/lib/framework/document-print.d.ts.map +1 -0
- package/lib/framework/document-segmenter.d.ts +1 -0
- package/lib/framework/document-segmenter.d.ts.map +1 -0
- package/lib/framework/document-selection.d.ts +1 -0
- package/lib/framework/document-selection.d.ts.map +1 -0
- package/lib/framework/document-template.d.ts +1 -0
- package/lib/framework/document-template.d.ts.map +1 -0
- package/lib/framework/document-textline-mode.d.ts +1 -0
- package/lib/framework/document-textline-mode.d.ts.map +1 -0
- package/lib/framework/element-define.d.ts +1 -0
- package/lib/framework/element-define.d.ts.map +1 -0
- package/lib/framework/element-event-define.d.ts +1 -0
- package/lib/framework/element-event-define.d.ts.map +1 -0
- package/lib/framework/element-measure.d.ts +1 -0
- package/lib/framework/element-measure.d.ts.map +1 -0
- package/lib/framework/element-paint.d.ts +1 -0
- package/lib/framework/element-paint.d.ts.map +1 -0
- package/lib/framework/element-props.d.ts +2 -1
- package/lib/framework/element-props.d.ts.map +1 -0
- package/lib/framework/element-reader.d.ts +1 -0
- package/lib/framework/element-reader.d.ts.map +1 -0
- package/lib/framework/element-render-cut.d.ts +1 -0
- package/lib/framework/element-render-cut.d.ts.map +1 -0
- package/lib/framework/element-serialize.d.ts +1 -0
- package/lib/framework/element-serialize.d.ts.map +1 -0
- package/lib/framework/element-util.d.ts +1 -0
- package/lib/framework/element-util.d.ts.map +1 -0
- package/lib/framework/impl/checkbox/checkbox-impl.d.ts +1 -0
- package/lib/framework/impl/checkbox/checkbox-impl.d.ts.map +1 -0
- package/lib/framework/impl/comments/comment-content-impl.d.ts +1 -0
- package/lib/framework/impl/comments/comment-content-impl.d.ts.map +1 -0
- package/lib/framework/impl/comments/comment-element-impl.d.ts +1 -0
- package/lib/framework/impl/comments/comment-element-impl.d.ts.map +1 -0
- package/lib/framework/impl/comments/comments-container-impl.d.ts +1 -0
- package/lib/framework/impl/comments/comments-container-impl.d.ts.map +1 -0
- package/lib/framework/impl/comments/comments-util.d.ts +1 -0
- package/lib/framework/impl/comments/comments-util.d.ts.map +1 -0
- package/lib/framework/impl/comments/validate-msg-impl.d.ts +1 -0
- package/lib/framework/impl/comments/validate-msg-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-decorate-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-decorate-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-barcode.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-barcode.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-base-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-base-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-check-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-check-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-date-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-date-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-group-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-group-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-image-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-image-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-list-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-list-impl.d.ts.map +1 -0
- package/lib/framework/impl/data-element/data-element-text-impl.d.ts +1 -0
- package/lib/framework/impl/data-element/data-element-text-impl.d.ts.map +1 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.d.ts +1 -0
- package/lib/framework/impl/decorate/fill-null-space-imple.d.ts.map +1 -0
- package/lib/framework/impl/document/doc-body-impl.d.ts +1 -0
- package/lib/framework/impl/document/doc-body-impl.d.ts.map +1 -0
- package/lib/framework/impl/document/doc-body-part-impl.d.ts +1 -0
- package/lib/framework/impl/document/doc-body-part-impl.d.ts.map +1 -0
- package/lib/framework/impl/document/doc-container-impl.d.ts +1 -0
- package/lib/framework/impl/document/doc-container-impl.d.ts.map +1 -0
- package/lib/framework/impl/document/doc-footer-impl.d.ts +1 -0
- package/lib/framework/impl/document/doc-footer-impl.d.ts.map +1 -0
- package/lib/framework/impl/document/doc-header-impl.d.ts +1 -0
- package/lib/framework/impl/document/doc-header-impl.d.ts.map +1 -0
- package/lib/framework/impl/document/doc-impl.d.ts +1 -0
- package/lib/framework/impl/document/doc-impl.d.ts.map +1 -0
- package/lib/framework/impl/index.d.ts +37 -0
- package/lib/framework/impl/index.d.ts.map +1 -0
- package/lib/framework/impl/media-formula/menstrual-history.d.ts +1 -0
- package/lib/framework/impl/media-formula/menstrual-history.d.ts.map +1 -0
- package/lib/framework/impl/paragraph/p-impl.d.ts +1 -0
- package/lib/framework/impl/paragraph/p-impl.d.ts.map +1 -0
- package/lib/framework/impl/picture/image-impl.d.ts +1 -0
- package/lib/framework/impl/picture/image-impl.d.ts.map +1 -0
- package/lib/framework/impl/radio/radio-impl.d.ts +1 -0
- package/lib/framework/impl/radio/radio-impl.d.ts.map +1 -0
- package/lib/framework/impl/symbol/br-symbol-impl.d.ts +1 -0
- package/lib/framework/impl/symbol/br-symbol-impl.d.ts.map +1 -0
- package/lib/framework/impl/symbol/p-symbol-impl.d.ts +1 -0
- package/lib/framework/impl/symbol/p-symbol-impl.d.ts.map +1 -0
- package/lib/framework/impl/table/table-cell-impl.d.ts +1 -0
- package/lib/framework/impl/table/table-cell-impl.d.ts.map +1 -0
- package/lib/framework/impl/table/table-impl.d.ts +1 -0
- package/lib/framework/impl/table/table-impl.d.ts.map +1 -0
- package/lib/framework/impl/table/table-row-impl.d.ts +1 -0
- package/lib/framework/impl/table/table-row-impl.d.ts.map +1 -0
- package/lib/framework/impl/table/table-split-cell-patch.d.ts +1 -0
- package/lib/framework/impl/table/table-split-cell-patch.d.ts.map +1 -0
- package/lib/framework/impl/table/table-split-cell.d.ts +1 -0
- package/lib/framework/impl/table/table-split-cell.d.ts.map +1 -0
- package/lib/framework/impl/table/table-util.d.ts +1 -0
- package/lib/framework/impl/table/table-util.d.ts.map +1 -0
- package/lib/framework/impl/text/text-impl.d.ts +1 -0
- package/lib/framework/impl/text/text-impl.d.ts.map +1 -0
- package/lib/framework/impl/text/track-run-impl.d.ts +1 -0
- package/lib/framework/impl/text/track-run-impl.d.ts.map +1 -0
- package/lib/framework/notify.d.ts +1 -0
- package/lib/framework/notify.d.ts.map +1 -0
- package/lib/framework/range-util.d.ts +1 -0
- package/lib/framework/range-util.d.ts.map +1 -0
- package/lib/framework/render-context.d.ts +1 -0
- package/lib/framework/render-context.d.ts.map +1 -0
- package/lib/framework/render-define.d.ts +1 -0
- package/lib/framework/render-define.d.ts.map +1 -0
- package/lib/framework/selection-overlays.d.ts +1 -0
- package/lib/framework/selection-overlays.d.ts.map +1 -0
- package/lib/index.d.ts +35 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +15671 -0
- package/lib/texteditor.d.ts +3 -2
- package/lib/texteditor.d.ts.map +1 -0
- package/lib/util/subject.d.ts +1 -0
- package/lib/util/subject.d.ts.map +1 -0
- package/lib/util/table-bind.d.ts +1 -0
- package/lib/util/table-bind.d.ts.map +1 -0
- package/package.json +32 -23
- package/README.md +0 -1613
- package/lib/doc-ruler.js +0 -313
- package/lib/doc-ruler.js.map +0 -1
- package/lib/framework/common-util.js +0 -178
- package/lib/framework/common-util.js.map +0 -1
- package/lib/framework/document-change.js +0 -1342
- package/lib/framework/document-change.js.map +0 -1
- package/lib/framework/document-combine.js +0 -40
- package/lib/framework/document-combine.js.map +0 -1
- package/lib/framework/document-comment.js +0 -148
- package/lib/framework/document-comment.js.map +0 -1
- package/lib/framework/document-context.js +0 -330
- package/lib/framework/document-context.js.map +0 -1
- package/lib/framework/document-eval-func.js +0 -48
- package/lib/framework/document-eval-func.js.map +0 -1
- package/lib/framework/document-event.js +0 -1054
- package/lib/framework/document-event.js.map +0 -1
- package/lib/framework/document-history.js +0 -65
- package/lib/framework/document-history.js.map +0 -1
- package/lib/framework/document-images-loader.js +0 -66
- package/lib/framework/document-images-loader.js.map +0 -1
- package/lib/framework/document-input-cursor.js +0 -239
- package/lib/framework/document-input-cursor.js.map +0 -1
- package/lib/framework/document-paint.js +0 -103
- package/lib/framework/document-paint.js.map +0 -1
- package/lib/framework/document-print-offscreen.js +0 -128
- package/lib/framework/document-print-offscreen.js.map +0 -1
- package/lib/framework/document-print.js +0 -203
- package/lib/framework/document-print.js.map +0 -1
- package/lib/framework/document-segmenter.js +0 -106
- package/lib/framework/document-segmenter.js.map +0 -1
- package/lib/framework/document-selection.js +0 -358
- package/lib/framework/document-selection.js.map +0 -1
- package/lib/framework/document-template.js +0 -20
- package/lib/framework/document-template.js.map +0 -1
- package/lib/framework/document-textline-mode.js +0 -30
- package/lib/framework/document-textline-mode.js.map +0 -1
- package/lib/framework/element-define.js +0 -579
- package/lib/framework/element-define.js.map +0 -1
- package/lib/framework/element-event-define.js +0 -108
- package/lib/framework/element-event-define.js.map +0 -1
- package/lib/framework/element-measure.js +0 -551
- package/lib/framework/element-measure.js.map +0 -1
- package/lib/framework/element-paint.js +0 -170
- package/lib/framework/element-paint.js.map +0 -1
- package/lib/framework/element-props.js +0 -809
- package/lib/framework/element-props.js.map +0 -1
- package/lib/framework/element-reader.js +0 -151
- package/lib/framework/element-reader.js.map +0 -1
- package/lib/framework/element-render-cut.js +0 -449
- package/lib/framework/element-render-cut.js.map +0 -1
- package/lib/framework/element-serialize.js +0 -113
- package/lib/framework/element-serialize.js.map +0 -1
- package/lib/framework/element-util.js +0 -1463
- package/lib/framework/element-util.js.map +0 -1
- package/lib/framework/impl/checkbox/checkbox-impl.js +0 -64
- package/lib/framework/impl/checkbox/checkbox-impl.js.map +0 -1
- package/lib/framework/impl/comments/comment-content-impl.js +0 -105
- package/lib/framework/impl/comments/comment-content-impl.js.map +0 -1
- package/lib/framework/impl/comments/comment-element-impl.js +0 -62
- package/lib/framework/impl/comments/comment-element-impl.js.map +0 -1
- package/lib/framework/impl/comments/comments-container-impl.js +0 -62
- package/lib/framework/impl/comments/comments-container-impl.js.map +0 -1
- package/lib/framework/impl/comments/comments-util.js +0 -67
- package/lib/framework/impl/comments/comments-util.js.map +0 -1
- package/lib/framework/impl/comments/validate-msg-impl.js +0 -83
- package/lib/framework/impl/comments/validate-msg-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-decorate-impl.js +0 -91
- package/lib/framework/impl/data-element/data-decorate-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-barcode.js +0 -115
- package/lib/framework/impl/data-element/data-element-barcode.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-base-impl.js +0 -205
- package/lib/framework/impl/data-element/data-element-base-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-check-impl.js +0 -133
- package/lib/framework/impl/data-element/data-element-check-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-date-impl.js +0 -111
- package/lib/framework/impl/data-element/data-element-date-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-group-impl.js +0 -130
- package/lib/framework/impl/data-element/data-element-group-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-image-impl.js +0 -137
- package/lib/framework/impl/data-element/data-element-image-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-list-impl.js +0 -131
- package/lib/framework/impl/data-element/data-element-list-impl.js.map +0 -1
- package/lib/framework/impl/data-element/data-element-text-impl.js +0 -103
- package/lib/framework/impl/data-element/data-element-text-impl.js.map +0 -1
- package/lib/framework/impl/decorate/fill-null-space-imple.js +0 -43
- package/lib/framework/impl/decorate/fill-null-space-imple.js.map +0 -1
- package/lib/framework/impl/document/doc-body-impl.js +0 -79
- package/lib/framework/impl/document/doc-body-impl.js.map +0 -1
- package/lib/framework/impl/document/doc-body-part-impl.js +0 -94
- package/lib/framework/impl/document/doc-body-part-impl.js.map +0 -1
- package/lib/framework/impl/document/doc-container-impl.js +0 -21
- package/lib/framework/impl/document/doc-container-impl.js.map +0 -1
- package/lib/framework/impl/document/doc-footer-impl.js +0 -77
- package/lib/framework/impl/document/doc-footer-impl.js.map +0 -1
- package/lib/framework/impl/document/doc-header-impl.js +0 -83
- package/lib/framework/impl/document/doc-header-impl.js.map +0 -1
- package/lib/framework/impl/document/doc-impl.js +0 -209
- package/lib/framework/impl/document/doc-impl.js.map +0 -1
- package/lib/framework/impl/media-formula/menstrual-history.js +0 -153
- package/lib/framework/impl/media-formula/menstrual-history.js.map +0 -1
- package/lib/framework/impl/paragraph/p-impl.js +0 -156
- package/lib/framework/impl/paragraph/p-impl.js.map +0 -1
- package/lib/framework/impl/picture/image-impl.js +0 -124
- package/lib/framework/impl/picture/image-impl.js.map +0 -1
- package/lib/framework/impl/radio/radio-impl.js +0 -72
- package/lib/framework/impl/radio/radio-impl.js.map +0 -1
- package/lib/framework/impl/symbol/br-symbol-impl.js +0 -54
- package/lib/framework/impl/symbol/br-symbol-impl.js.map +0 -1
- package/lib/framework/impl/symbol/p-symbol-impl.js +0 -54
- package/lib/framework/impl/symbol/p-symbol-impl.js.map +0 -1
- package/lib/framework/impl/table/table-cell-impl.js +0 -145
- package/lib/framework/impl/table/table-cell-impl.js.map +0 -1
- package/lib/framework/impl/table/table-impl.js +0 -363
- package/lib/framework/impl/table/table-impl.js.map +0 -1
- package/lib/framework/impl/table/table-row-impl.js +0 -75
- package/lib/framework/impl/table/table-row-impl.js.map +0 -1
- package/lib/framework/impl/table/table-split-cell-patch.js +0 -89
- package/lib/framework/impl/table/table-split-cell-patch.js.map +0 -1
- package/lib/framework/impl/table/table-split-cell.js +0 -464
- package/lib/framework/impl/table/table-split-cell.js.map +0 -1
- package/lib/framework/impl/table/table-util.js +0 -678
- package/lib/framework/impl/table/table-util.js.map +0 -1
- package/lib/framework/impl/text/text-impl.js +0 -149
- package/lib/framework/impl/text/text-impl.js.map +0 -1
- package/lib/framework/impl/text/track-run-impl.js +0 -112
- package/lib/framework/impl/text/track-run-impl.js.map +0 -1
- package/lib/framework/notify.js +0 -116
- package/lib/framework/notify.js.map +0 -1
- package/lib/framework/range-util.js +0 -312
- package/lib/framework/range-util.js.map +0 -1
- package/lib/framework/render-context.js +0 -384
- package/lib/framework/render-context.js.map +0 -1
- package/lib/framework/render-define.js +0 -195
- package/lib/framework/render-define.js.map +0 -1
- package/lib/framework/selection-overlays.js +0 -124
- package/lib/framework/selection-overlays.js.map +0 -1
- package/lib/texteditor.js +0 -913
- package/lib/texteditor.js.map +0 -1
- package/lib/util/subject.js +0 -88
- package/lib/util/subject.js.map +0 -1
- package/lib/util/table-bind.js +0 -6
- package/lib/util/table-bind.js.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"table-util.js","sourceRoot":"lib/","sources":["framework/impl/table/table-util.ts"],"names":[],"mappings":"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","sourcesContent":["import { SelectionState } from \"../../document-selection\";\nimport { ElementUtil } from \"../../element-util\";\nimport { Element } from \"../../element-define\";\nimport { ParagraphElement } from \"../paragraph/p-impl\";\nimport { TableCellElement } from \"./table-cell-impl\";\nimport { TableElement } from \"./table-impl\";\nimport { TableRowElement } from \"./table-row-impl\";\n\n\nexport class TableUtil {\n\n static canDeleteTable(ss: SelectionState): boolean {\n const { startControl } = ss;\n if (!startControl) {\n return false;\n }\n const tb = ElementUtil.getParentByType(startControl, TableElement);\n return !!tb;\n }\n /**\n * 校验当前选区是否可以执行合并单元格操作\n * @param ss \n * @returns \n */\n static canMergeCells(ss: SelectionState): boolean {\n const { ancestorCommonControl, startControl, endControl, collapsed, selectedRange } = ss;\n if (collapsed) {\n return false;\n }\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n const tbRegion = this.getTableRectSelectedRegion(tbElement, startCell, endCell);\n if (selectedRange && selectedRange.target === tbElement) {\n const selectedCells: Array<TableCellElement> = [];\n selectedRange.selectedChildren.every(item => item.selectedChildren.every(cell => selectedCells.push(cell.target as TableCellElement)));\n for (let i = tbRegion.startRow; i <= tbRegion.endRow; i++) {\n const currRow = tbElement.getChild<TableRowElement>(i);\n for (let j = tbRegion.startCol; j <= tbRegion.endCol; j++) {\n const currCell = currRow.getChild<TableCellElement>(j);\n if (currCell.isNotBeMergedCell() && selectedCells.indexOf(currCell) < 0) {\n return false;\n }\n }\n }\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * 获取横向合并当前单元格合并结束索引位置\n * @param tb \n * @param rowIndex \n * @param colIndex \n */\n static getHMergeEndIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n const currRow = tb.getChild(rowIndex) as TableRowElement;\n let index = colIndex;\n for (let i = colIndex + 1; i < tb.getColsCount(); i++) {\n const cell = currRow.getChild(i) as TableCellElement;\n if (cell.props.hMerge === 'continue') {\n index = i;\n } else {\n break;\n }\n }\n return index;\n }\n\n /**\n * 获取横向合并当前单元格合并开始索引位置\n * @param tb \n * @param rowIndex \n * @param colIndex \n */\n static getHMergeStartIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n const row = tb.getChild(rowIndex) as TableRowElement;\n for (let i = colIndex - 1; i >= 0; i--) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge === 'restart') {\n return i;\n }\n }\n throw new Error('未找到主合并单元格');\n }\n\n /**\n * 获取纵向合并当前单元格合并结束索引位置\n * @param tb \n * @param rowIndex \n * @param colIndex i\n */\n static getVMergeEndIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n let index = rowIndex;\n for (let i = rowIndex + 1; i < tb.length; i++) {\n const currRow = tb.getChild(i) as TableRowElement;\n const cell = currRow.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === 'continue') {\n index = i;\n } else {\n break;\n }\n }\n return index;\n }\n\n /**\n * 获取纵向合并当前单元格合并开始索引位置\n * @param tb \n * @param rowIndex \n * @param colIndex i\n */\n static getVMergeStartIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n for (let i = rowIndex - 1; i >= 0; i--) {\n const currRow = tb.getChild(i) as TableRowElement;\n const cell = currRow.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === 'restart') {\n return i;\n }\n }\n throw new Error('未找到主合并单元格');\n }\n\n /**\n * 合并单元格\n * @param ss \n * @returns \n */\n static mergeCells(ss: SelectionState): void {\n const { ancestorCommonControl, startControl, endControl, collapsed } = ss;\n if (collapsed) {\n return;\n }\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n //this.combineCellContent(tbElement, startCell, endCell);\n this.combineCells(tbElement, startCell, endCell);\n }\n this.checkRowBeMerged(ss);\n ss.clear();\n }\n }\n\n /**\n * 在合并单元格后需要校验\n * 1.如果某个行的所有单元格都不是normal,则需要删除当前行\n * 2.如果某个列的所有的单元格都不是normal,则需要删除当前列\n */\n private static checkRowBeMerged(ss: SelectionState): void {\n const tb = ElementUtil.getParentByType(ss.startControl, TableElement);\n if (!tb) { return }\n const colsCount = tb.getColsCount();\n const fullMergeRows: Array<TableRowElement> = [];\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowElement;\n let count = 0;\n for (let j = 0; j < colsCount; j++) {\n const cell = row.getChild(j) as TableCellElement;\n if (!cell.isNotBeMergedCell()) {\n count++;\n }\n }\n //当前行所有的单元格都被合并,需要删除\n if (count === colsCount) {\n fullMergeRows.push(row)\n }\n }\n fullMergeRows.forEach(row => this.removeRow(row));\n }\n\n /**\n * 移除行\n * @param row \n */\n private static removeRow(row: TableRowElement): void {\n const rowIndex = row.getIndex();\n const tb = row.parent as TableElement;\n for (let i = 0; i < row.length; i++) {\n const cell = row.getChild<TableCellElement>(i);\n if (cell.props.vMerge === 'restart') {\n const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);\n if (vMergeEndIndex > rowIndex) {\n const nextRow = tb.getChild<TableRowElement>(rowIndex + 1);\n nextRow.getChild<TableCellElement>(i).props.vMerge = vMergeEndIndex - rowIndex > 2 ? 'restart' : null;\n }\n } else if (cell.props.vMerge === 'continue') {\n // const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);\n // if (vMergeEndIndex > rowIndex) {\n // const nextRow = tb.getChild<TableRowElement>(rowIndex + 1);\n // nextRow.getChild<TableCellElement>(i).cellProps.vMerge = 'continue';\n // }\n const vMergeStartIndex = this.getVMergeStartIndex(tb, rowIndex, i);\n const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);\n //当前单元格处于合并行的最后一行,并且合并的行数为2行\n if (vMergeEndIndex === rowIndex && vMergeEndIndex - vMergeStartIndex === 1) {\n const aboveCell = tb.getChild<TableRowElement>(vMergeStartIndex).getChild<TableCellElement>(i)\n aboveCell.props.vMerge = null;\n }\n }\n }\n tb.removeChild(row);\n }\n\n /**\n * 移除列\n * @param tb \n * @param colIndex \n */\n private static removeCol(tb: TableElement, colIndex: number): void {\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild<TableRowElement>(i);\n const cell = row.getChild<TableCellElement>(colIndex);\n if (cell.props.hMerge === 'restart') {\n const hMergeEndIndex = this.getHMergeEndIndex(tb, i, colIndex);\n if (hMergeEndIndex > colIndex) {\n const nextCell = row.getChild<TableCellElement>(colIndex + 1);\n nextCell.props.hMerge = hMergeEndIndex - colIndex > 2 ? 'restart' : null;\n }\n } else if (cell.props.hMerge === 'continue') {\n const hMergeStartIndex = this.getHMergeStartIndex(tb, i, colIndex);\n const hMergeEndIndex = this.getHMergeEndIndex(tb, i, colIndex);\n //当前单元格处于合并行的最后一行,并且合并的行数为2行\n if (hMergeEndIndex === colIndex && hMergeEndIndex - hMergeStartIndex === 1) {\n const masterVMergeCell = tb.getChild<TableRowElement>(hMergeStartIndex).getChild<TableCellElement>(i)\n masterVMergeCell.props.hMerge = null;\n }\n\n }\n row.removeChild(cell);\n }\n tb.removeCol(colIndex);\n }\n\n /**\n * 移除光标所在的当前行\n * @param ss \n */\n static removeCurrRow(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const currRow = startCell.parent as TableRowElement;\n const tb = currRow.parent as TableElement;\n this.removeRow(currRow);\n tb.pubOnChange('self');\n tb.refreshView();\n }\n\n /**\n * 移除光标所在的当前列\n * @param ss \n */\n static removeCurrCol(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n if (ss.collapsed) {\n const currRow = startCell.parent as TableRowElement;\n const tb = currRow.parent as TableElement;\n this.removeCol(tb, startCell.getIndex());\n ss.clear();\n return;\n }\n const { ancestorCommonControl, startControl, endControl } = ss;\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n const startColIndex = startCell.getIndex();\n let endColIndex = endCell.getIndex();\n while (startColIndex <= endColIndex) {\n this.removeCol(tbElement, endColIndex);\n endColIndex--;\n }\n }\n tbElement.pubOnChange('self');\n }\n ss.clear();\n }\n\n /**\n * 合并单元格\n */\n static combineCells(tbElement: TableElement, startCell: TableCellElement, endCell: TableCellElement): void {\n const tbRegion = this.getTableRectSelectedRegion(tbElement, startCell, endCell);\n const cellContents: Array<Element> = [];\n for (let i = tbRegion.startRow; i <= tbRegion.endRow; i++) {\n const currRow = tbElement.getChild<TableRowElement>(i);\n for (let j = tbRegion.startCol; j <= tbRegion.endCol; j++) {\n const currCell = currRow.getChild<TableCellElement>(j);\n currCell.props.vMerge = null;\n currCell.props.hMerge = 'continue';\n if (j === tbRegion.startCol) {\n currCell.props.vMerge = i === tbRegion.startRow ? 'restart' : 'continue';\n currCell.props.hMerge = 'restart';\n }\n if (currCell !== startCell) {\n cellContents.push(...ElementUtil.getChildrenElements(currCell));\n currCell.clearItems();\n }\n }\n }\n //如果合并的单元格都是空段落,则不合并内容\n if (!cellContents.every((item) => (item instanceof ParagraphElement && item.length === 1))) {\n for (let i = 0; i < cellContents.length; i++) {\n startCell.addChild(cellContents[i]);\n }\n }\n }\n\n\n static canSplitCell(ss: SelectionState): boolean {\n const { ancestorCommonControl, startControl, endControl, collapsed } = ss;\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n if (startCell === endCell) {\n return startCell.props.hMerge === 'restart' || startCell.props.vMerge === 'restart';\n }\n }\n } else {\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n if (!startCell) {\n throw new Error('startCell is null');\n }\n const { hMerge, vMerge } = startCell?.props;\n return hMerge === 'restart' || vMerge === 'restart' || !hMerge || !vMerge;\n }\n\n return false;\n }\n\n /**\n * 将合并的单元格合并还原\n * @param ss \n */\n static restoreCell(ss: SelectionState): void {\n const { ancestorCommonControl, startControl, endControl, collapsed } = ss;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n if (startCell) {\n this.restoreCellMerge(startCell);\n ss.resetRange(startCell, 0);\n startCell.refreshView();\n }\n }\n\n private static restoreCellMerge(cell: TableCellElement): void {\n const { vMerge, hMerge } = cell.props;\n const row = cell.parent as TableRowElement;\n const tb = row.parent as TableElement;\n const rowIndex = row.getIndex();\n const colIndex = cell.getIndex();\n if (vMerge === 'restart') {\n for (let i = rowIndex + 1; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowElement;\n const cell = row.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === \"continue\") {\n cell.props.vMerge = null;\n if (cell.props.hMerge === \"restart\") {\n this.restoreCellMerge(cell);\n }\n }\n }\n }\n if (hMerge === 'restart') {\n for (let i = colIndex + 1; i < row.length; i++) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge === \"continue\") {\n cell.props.hMerge = null;\n if (cell.props.vMerge === \"restart\") {\n this.restoreCellMerge(cell);\n }\n }\n }\n }\n cell.props.hMerge = null;\n cell.props.vMerge = null;\n }\n\n\n private static getVMergeRows(tb: TableElement, masterRowIndex: number, masterColIndex: number): Array<TableRowElement> {\n const items: Array<TableRowElement> = [];\n for (let i = masterRowIndex + 1; i < tb.length; i++) {\n const row = <TableRowElement>tb.getChild(i);\n const cell = row.getChild(masterColIndex) as TableCellElement;\n if (cell.props.vMerge === 'continue') {\n items.push(row);\n } else {\n return items;\n }\n }\n return items;\n }\n\n\n static insertCol(ss: SelectionState, insertColIndex: number): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const tb = startRow.parent as TableElement;\n const currColIndex = startCell.getIndex();\n const colsCount = tb.getColsCount();\n insertColIndex = insertColIndex < 0 ? 0 : insertColIndex;\n insertColIndex = insertColIndex > colsCount ? colsCount : insertColIndex;\n //插入列需要将之前列分割\n const insertColWidth = insertColIndex === colsCount ? tb.getCellWidth(colsCount - 1) : tb.getCellWidth(insertColIndex);\n const newColWidth = Math.floor(insertColWidth / 2);\n if (newColWidth < 20) {\n console.warn('插入列的最小宽度不能小于20,当前为:' + newColWidth)\n return;\n }\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild<TableRowElement>(i)\n const newCell = new TableCellElement();\n if (insertColIndex === 0 || insertColIndex === colsCount) {\n row.addChild(newCell, insertColIndex);\n continue;\n }\n const focusCell = row.getChild<TableCellElement>(insertColIndex);\n if (focusCell) {\n if (focusCell.props.hMerge === 'continue') {\n //获取合并行的最后的行索引\n const hMergeEndColIndex = this.getHMergeEndIndex(tb, i, currColIndex);\n if (hMergeEndColIndex > insertColIndex || (hMergeEndColIndex === insertColIndex && currColIndex < insertColIndex)) {\n newCell.props.hMerge = 'continue';\n }\n } else if (focusCell.props.hMerge === 'restart' && currColIndex > insertColIndex) {\n newCell.props.hMerge = 'continue';\n }\n }\n row.addChild(newCell, insertColIndex);\n }\n\n tb.setCellWidth(insertColIndex === colsCount ? insertColIndex - 1 : insertColIndex, insertColWidth - newColWidth);\n tb.insertCol(insertColIndex, newColWidth);\n tb.pubOnChange('self');\n tb.refreshView();\n }\n\n static insertRow(ss: SelectionState, insertRowIndex: number): TableRowElement {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const tb = startRow.parent as TableElement;\n const currRowIndex = startRow.getIndex();\n insertRowIndex = insertRowIndex < 0 ? 0 : insertRowIndex;\n insertRowIndex = insertRowIndex > tb.length ? tb.length : insertRowIndex;\n const newRow = TableRowElement.createRow(tb.getColsCount());\n //新行插在第一行或者最后一行\n if (insertRowIndex === 0 || insertRowIndex === tb.length) {\n tb.addChild(newRow, insertRowIndex);\n tb.refreshView();\n return newRow;\n }\n const destRow = tb.getChild(insertRowIndex) as TableRowElement;\n for (let i = 0; i < destRow.length; i++) {\n const destCell = destRow.getChild(i) as TableCellElement;\n const newCell = newRow.getChild(i) as TableCellElement;\n //如果当前单元格是普通单元格或者合并列的最后一个单元格,则不做处理\n if (destCell.props.vMerge === 'continue') {\n //获取合并列的最后的行索引\n const vMergeEndRowIndex = this.getVMergeEndIndex(tb, insertRowIndex, i);\n if (vMergeEndRowIndex > insertRowIndex || (vMergeEndRowIndex === insertRowIndex && currRowIndex < insertRowIndex)) {\n newCell.props.vMerge = 'continue';\n //newCell.cellProps.hMerge = destCell.cellProps.hMerge;\n }\n } else if (destCell.props.vMerge === 'restart' && currRowIndex > insertRowIndex) {\n //在上方新增行,目标行单元格属于合并的起点\n newCell.props.vMerge = 'continue';\n //newCell.cellProps.hMerge = destCell.cellProps.hMerge;\n }\n\n }\n tb.addChild(newRow, insertRowIndex);\n tb.refreshView();\n return newRow;\n }\n\n /**\n * 在下方插入行\n */\n static insertRowBelow(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const currRowIndex = startRow.getIndex();\n this.insertRow(ss, currRowIndex + 1);\n }\n\n /**\n * 在上方插入行\n */\n static insertRowAbove(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const currRowIndex = startRow.getIndex();\n this.insertRow(ss, currRowIndex);\n }\n\n /**\n * 在右侧插入列\n */\n static insertColToRight(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const currColIndex = startCell.getIndex();\n this.insertCol(ss, currColIndex + 1);\n }\n\n /**\n * 在左侧插入列\n */\n static insertColToLeft(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const currColIndex = startCell.getIndex();\n this.insertCol(ss, currColIndex);\n }\n\n /**\n * 跳转到下一个单元格中\n * @param ss \n */\n static moveNextCell(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const rowIndex = startCell.parent.getIndex();\n const nextCell = this.getNextCell(ss);\n if (nextCell) {\n ss.resetRange(nextCell, 0);\n nextCell.refreshView();\n return;\n }\n //新增行,并定位\n const newRow = this.insertRow(ss, rowIndex + 1);\n ss.resetRange(newRow, 0);\n newRow.refreshView();\n }\n\n\n /**\n * 获取下一个可定位的单元格\n * @param ss \n * @returns \n */\n static getNextCell(ss: SelectionState): TableCellElement | undefined {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const rowIndex = startCell.parent.getIndex();\n const colIndex = startCell.getIndex();\n const tb = startCell.parent.parent as TableElement;\n for (let i = rowIndex; i < tb.length; i++) {\n let j = i === rowIndex ? colIndex + 1 : 0;\n const currRow = tb.getChild(i) as TableRowElement;\n for (; j < tb.getColsCount(); j++) {\n const currCell = currRow.getChild(j) as TableCellElement;\n if (currCell.isNotBeMergedCell()) {\n return currCell;\n }\n }\n }\n //throw new Error('getNextCell is null')\n }\n\n /**\n * 当前光标是否在最后一个单元格中\n */\n static isLastVisiableCell(ss: SelectionState): boolean {\n return !this.getNextCell(ss);\n }\n\n\n /**\n * 移除当前table\n */\n static removeTable(ss: SelectionState): void {\n const tb = ElementUtil.getParentByType(ss.startControl, TableElement);\n if (!tb) {\n console.warn('当前位置不存在表格');\n return;\n }\n tb.parent.refreshView();\n tb.remove();\n }\n\n /**\n * 设置表格单元格对角线\n * @param ss \n * @param diagonal \n * @returns \n */\n static setTableCellDiagonal(ss: SelectionState, diagonal: 'main' | 'sub'): void {\n const tc = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!tc) {\n console.warn('当前位置不存在表格');\n return\n }\n if (!tc.props.diagonal || tc.props.diagonal !== diagonal) {\n tc.props.diagonal = diagonal;\n } else if (tc.props.diagonal === diagonal) {\n tc.props.diagonal = null;\n }\n tc.refreshView();\n }\n\n /**\n * 将当前表格截断成两个相邻的表格\n * @param tb \n * @param rowIndex \n */\n static cutTable(tb: TableElement, rowIndex: number): void {\n if (rowIndex === 0 || rowIndex === tb.length - 1) {\n return;\n }\n const newTb = tb.clone(false) as TableElement;\n const len = tb.length - 1;\n while (len > rowIndex) {\n const child = tb.getChild(len);\n newTb.addChild(child.clone(true), 0);\n tb.removeChild(child);\n }\n if (newTb.length > 0) {\n tb.parent.addChild(newTb, tb.getIndex() + 1);\n }\n }\n\n /**\n * 获取表格选区区域最大的矩形区域\n * @param tb \n * @param startCell \n * @param endCell \n * @returns \n */\n static getTableRectSelectedRegion(tb: TableElement, startCell: TableCellElement, endCell: TableCellElement): ITableSelectedRegion {\n let startRow = startCell.parent.getIndex();\n let startCol = startCell.getIndex();\n let endRow = endCell.parent.getIndex();\n let endCol = endCell.getIndex();\n if (startRow > endRow) {\n [endRow, startRow] = [startRow, endRow];\n }\n if (startCol > endCol) {\n [endCol, startCol] = [startCol, endCol];\n }\n for (let i = startRow; i <= endRow; i++) {\n const row = tb.getChild(i) as TableRowElement;\n for (let j = startCol; j <= endCol; j++) {\n const cell = row.getChild(j) as TableCellElement;\n const { hMerge, vMerge } = cell.props;\n if (hMerge === 'continue') {\n const startColIndex = TableUtil.getHMergeStartIndex(tb, i, j);\n const endColIndex = TableUtil.getHMergeEndIndex(tb, i, j);\n startCol = Math.min(startCol, startColIndex);\n endCol = Math.max(endCol, endColIndex);\n }\n if (vMerge === 'continue') {\n const startRowIndex = TableUtil.getVMergeStartIndex(tb, i, j);\n const endRowIndex = TableUtil.getVMergeEndIndex(tb, i, j);\n startRow = Math.min(startRow, startRowIndex);\n endRow = Math.max(endRow, endRowIndex);\n }\n if (vMerge === 'restart') {\n const rowIndex = TableUtil.getVMergeEndIndex(tb, i, j);\n if (rowIndex > endRow) {\n endRow = rowIndex;\n }\n }\n if (hMerge === 'restart') {\n const colIndex = TableUtil.getHMergeEndIndex(tb, i, j);\n if (colIndex > endCol) {\n endCol = colIndex;\n }\n }\n }\n }\n return { startRow, endRow, startCol, endCol }\n }\n}\n\n\nexport interface ITableSelectedRegion {\n startRow: number;\n endRow: number;\n startCol: number;\n endCol: number;\n}"]}
|
@@ -1,149 +0,0 @@
|
|
1
|
-
import { SelectionRange } from "../../document-selection";
|
2
|
-
import { TextProps } from "../../element-props";
|
3
|
-
import { ElementUtil } from "../../element-util";
|
4
|
-
import { LeafRenderObject } from "../../render-define";
|
5
|
-
import { LeafElement, ElementFactory, ModifyFlag } from "../../element-define";
|
6
|
-
import { watchChanged } from "../../notify";
|
7
|
-
export class TextGroupElement extends LeafElement {
|
8
|
-
//props: TextProps;
|
9
|
-
textMeasures = [];
|
10
|
-
isMeasure = false;
|
11
|
-
constructor() {
|
12
|
-
super('text');
|
13
|
-
this.props = new TextProps();
|
14
|
-
watchChanged(this.props, () => {
|
15
|
-
this.isMeasure = false;
|
16
|
-
this.props.clearCache();
|
17
|
-
});
|
18
|
-
//this.addPropValueChangedSub(this.props);
|
19
|
-
//this.addsubscribe(this, this.props.onPropertyChangedSubject.subscribe(() => { this.clearTextCache() }));
|
20
|
-
this.addEvent('ElementContextMenu', (evt) => {
|
21
|
-
const ss = evt.selectionState;
|
22
|
-
evt.menus.push({
|
23
|
-
icon: "EditStyle", caption: "选中样式组合", eventObj: {
|
24
|
-
onClick: (cevt) => {
|
25
|
-
const range = new SelectionRange();
|
26
|
-
range.setStart(this, 0);
|
27
|
-
range.setEnd(this, -1);
|
28
|
-
ss.addRange(range);
|
29
|
-
}
|
30
|
-
}
|
31
|
-
});
|
32
|
-
});
|
33
|
-
}
|
34
|
-
set text(val) {
|
35
|
-
this.splice(0, this.textMeasures.length, val);
|
36
|
-
}
|
37
|
-
splice(index, deleteCount, addText = null) {
|
38
|
-
this.isMeasure = false;
|
39
|
-
addText = addText ?? '';
|
40
|
-
const addTextUnits = addText.split('').map(char => ({ sourceSize: 0, actualSize: 0, char }));
|
41
|
-
if (this.textMeasures.length === 0) {
|
42
|
-
this.textMeasures = addTextUnits;
|
43
|
-
}
|
44
|
-
else {
|
45
|
-
this.textMeasures.splice(index, deleteCount, ...addTextUnits);
|
46
|
-
}
|
47
|
-
this.pubOnChange('self');
|
48
|
-
}
|
49
|
-
get text() {
|
50
|
-
return this.textMeasures.map(item => item.char).join('');
|
51
|
-
}
|
52
|
-
createRenderObject(options, renderCtx) {
|
53
|
-
if (!this.isMeasure || this.modifyFlag !== ModifyFlag.None) {
|
54
|
-
renderCtx.contentContext.measureTextUnits(this.textMeasures, this.props);
|
55
|
-
this.isMeasure = true;
|
56
|
-
}
|
57
|
-
const render = new TextGroupRenderObject(this);
|
58
|
-
render.disableClick = this.disableClick;
|
59
|
-
render.textMeasures = [...this.textMeasures];
|
60
|
-
render.measure();
|
61
|
-
return render;
|
62
|
-
}
|
63
|
-
serialize(viewOptions) {
|
64
|
-
//修饰元素不序列化
|
65
|
-
if (this.isDecorate) {
|
66
|
-
return null;
|
67
|
-
}
|
68
|
-
return {
|
69
|
-
type: 'text',
|
70
|
-
props: {
|
71
|
-
...this.props.getSerializeProps(viewOptions)
|
72
|
-
},
|
73
|
-
content: this.text,
|
74
|
-
complete: true
|
75
|
-
};
|
76
|
-
}
|
77
|
-
clone(data) {
|
78
|
-
const clone = new TextGroupElement();
|
79
|
-
this.props.clone(clone.props);
|
80
|
-
clone.text = this.text;
|
81
|
-
return clone;
|
82
|
-
}
|
83
|
-
destroy() {
|
84
|
-
super.destroy();
|
85
|
-
}
|
86
|
-
spliceText(startOffset, endOffset, xCopy) {
|
87
|
-
endOffset = endOffset === -1 ? this.textMeasures.length : endOffset;
|
88
|
-
if (endOffset === startOffset) {
|
89
|
-
return null;
|
90
|
-
}
|
91
|
-
const clone = new TextGroupElement();
|
92
|
-
this.props.clone(clone.props);
|
93
|
-
if (xCopy) {
|
94
|
-
clone.textMeasures = this.textMeasures.splice(startOffset, endOffset - startOffset);
|
95
|
-
}
|
96
|
-
else {
|
97
|
-
clone.textMeasures = this.textMeasures.filter((item, index) => index >= startOffset && index < endOffset);
|
98
|
-
}
|
99
|
-
clone.textMeasures = clone.textMeasures.map(item => ({ sourceSize: 0, actualSize: 0, char: item.char }));
|
100
|
-
return clone;
|
101
|
-
}
|
102
|
-
clearTextCache() {
|
103
|
-
this.isMeasure = false;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
export class TextGroupRenderObject extends LeafRenderObject {
|
107
|
-
textMeasures;
|
108
|
-
render(ctx, position) {
|
109
|
-
//null-text不打印
|
110
|
-
if (ctx.drawMode === 'print' && this.element.isDecorate) {
|
111
|
-
return;
|
112
|
-
}
|
113
|
-
if (this.element.props.border) {
|
114
|
-
ctx.contentContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height);
|
115
|
-
}
|
116
|
-
ctx.contentContext.drawTextUnits(this, position.x, position.y);
|
117
|
-
// if (this.element.isMouseenter) {
|
118
|
-
// ctx.overlaysContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, CommonUtil.randomColor());
|
119
|
-
// }
|
120
|
-
}
|
121
|
-
constructor(element) {
|
122
|
-
super(element);
|
123
|
-
}
|
124
|
-
clone() {
|
125
|
-
const cloneRender = new TextGroupRenderObject(this.element);
|
126
|
-
cloneRender.disableClick = this.disableClick;
|
127
|
-
cloneRender.rect = ElementUtil.cloneRect(this.rect);
|
128
|
-
cloneRender.textMeasures = [...this.textMeasures];
|
129
|
-
return cloneRender;
|
130
|
-
}
|
131
|
-
measure() {
|
132
|
-
this.rect.width = this.textMeasures.reduce((prev, curr) => prev + curr.actualSize, 0);
|
133
|
-
this.rect.height = this.element.props.fontSize;
|
134
|
-
}
|
135
|
-
}
|
136
|
-
export class TextGroupFactory extends ElementFactory {
|
137
|
-
match(type) {
|
138
|
-
return type === 'text';
|
139
|
-
}
|
140
|
-
createElement(data, renderCtx) {
|
141
|
-
const props = data.props;
|
142
|
-
const text = data.content;
|
143
|
-
const textGroup = new TextGroupElement();
|
144
|
-
textGroup.text = text;
|
145
|
-
ElementUtil.readTextProps(textGroup.props, props, this.options);
|
146
|
-
return textGroup;
|
147
|
-
}
|
148
|
-
}
|
149
|
-
//# sourceMappingURL=text-impl.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"text-impl.js","sourceRoot":"lib/","sources":["framework/impl/text/text-impl.ts"],"names":[],"mappings":"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","sourcesContent":["import { SelectionRange } from \"../../document-selection\";\nimport { ContextMenuElementEvent } from \"../../element-event-define\";\nimport { TextProps } from \"../../element-props\";\nimport { ElementUtil } from \"../../element-util\";\nimport { LeafRenderObject, RenderObject } from \"../../render-define\";\nimport { LeafElement, ElementFactory, Element, SerializeProps, ViewOptions, ModifyFlag } from \"../../element-define\";\nimport { watchChanged } from \"../../notify\";\nimport { RenderContenxtType, TextUnits } from \"../../render-context\";\n\nexport class TextGroupElement extends LeafElement<TextProps> {\n //props: TextProps;\n textMeasures: Array<TextUnits> = [];\n isMeasure: boolean = false;\n constructor() {\n super('text');\n this.props = new TextProps();\n watchChanged(this.props, () => {\n this.isMeasure = false;\n this.props.clearCache();\n });\n //this.addPropValueChangedSub(this.props);\n //this.addsubscribe(this, this.props.onPropertyChangedSubject.subscribe(() => { this.clearTextCache() }));\n this.addEvent<ContextMenuElementEvent>('ElementContextMenu', (evt) => {\n const ss = evt.selectionState;\n evt.menus.push({\n icon: \"EditStyle\", caption: \"选中样式组合\", eventObj: {\n onClick: (cevt) => {\n const range = new SelectionRange();\n range.setStart(this, 0);\n range.setEnd(this, -1);\n ss.addRange(range);\n }\n }\n })\n });\n }\n set text(val: string) {\n this.splice(0, this.textMeasures.length, val);\n }\n\n splice(index: number, deleteCount: number, addText: string | null = null): void {\n this.isMeasure = false;\n addText = addText ?? '';\n const addTextUnits = addText.split('').map(char => ({ sourceSize: 0, actualSize: 0, char }));\n if (this.textMeasures.length === 0) {\n this.textMeasures = addTextUnits;\n } else {\n this.textMeasures.splice(index, deleteCount, ...addTextUnits);\n }\n this.pubOnChange('self');\n }\n\n get text() {\n return this.textMeasures.map(item => item.char).join('');\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContenxtType): RenderObject {\n if (!this.isMeasure || this.modifyFlag !== ModifyFlag.None) {\n renderCtx.contentContext.measureTextUnits(this.textMeasures, this.props);\n this.isMeasure = true;\n }\n const render = new TextGroupRenderObject(this);\n render.disableClick = this.disableClick;\n render.textMeasures = [...this.textMeasures];\n render.measure();\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps & any {\n //修饰元素不序列化\n if (this.isDecorate) {\n return null;\n }\n return {\n type: 'text',\n props: {\n ...this.props.getSerializeProps(viewOptions)\n },\n content: this.text,\n complete: true\n }\n }\n\n clone(data: boolean): TextGroupElement {\n const clone = new TextGroupElement();\n this.props.clone(clone.props);\n clone.text = this.text;\n return clone;\n }\n\n destroy(): void {\n super.destroy();\n }\n\n spliceText(startOffset: number, endOffset: number, xCopy: boolean): TextGroupElement | null {\n endOffset = endOffset === -1 ? this.textMeasures.length : endOffset;\n if (endOffset === startOffset) {\n return null;\n }\n const clone = new TextGroupElement();\n this.props.clone(clone.props);\n if (xCopy) {\n clone.textMeasures = this.textMeasures.splice(startOffset, endOffset - startOffset);\n } else {\n clone.textMeasures = this.textMeasures.filter((item, index) => index >= startOffset && index < endOffset);\n }\n clone.textMeasures = clone.textMeasures.map(item => ({ sourceSize: 0, actualSize: 0, char: item.char }));\n return clone;\n }\n\n clearTextCache(): void {\n this.isMeasure = false;\n }\n}\n\n\nexport class TextGroupRenderObject extends LeafRenderObject<TextGroupElement> {\n textMeasures!: Array<TextUnits>;\n render(ctx: RenderContenxtType, position: { x: number; y: number; }): void {\n //null-text不打印\n if (ctx.drawMode === 'print' && this.element.isDecorate) {\n return;\n }\n if (this.element.props.border) {\n ctx.contentContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height);\n }\n ctx.contentContext.drawTextUnits(this, position.x, position.y);\n // if (this.element.isMouseenter) {\n // ctx.overlaysContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, CommonUtil.randomColor());\n // }\n\n }\n constructor(element: TextGroupElement) {\n super(element);\n }\n clone(): RenderObject {\n const cloneRender = new TextGroupRenderObject(this.element);\n cloneRender.disableClick = this.disableClick;\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n cloneRender.textMeasures = [...this.textMeasures];\n return cloneRender;\n }\n\n measure(): void {\n this.rect.width = this.textMeasures.reduce((prev, curr) => prev + curr.actualSize, 0);\n this.rect.height = this.element.props.fontSize;\n }\n}\n\nexport class TextGroupFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === 'text';\n }\n createElement(data: any, renderCtx: RenderContenxtType): Element {\n const props = data.props as TextProps;\n const text = data.content as string;\n const textGroup = new TextGroupElement();\n textGroup.text = text;\n ElementUtil.readTextProps(textGroup.props, props, this.options);\n return textGroup;\n }\n\n}\n"]}
|
@@ -1,112 +0,0 @@
|
|
1
|
-
import { InlineGroupElement, ElementFactory } from "../../element-define";
|
2
|
-
import { InlineGroupRenderObject } from "../../render-define";
|
3
|
-
import { TrackRunProps } from "../../element-props";
|
4
|
-
import { ElementUtil } from "../../element-util";
|
5
|
-
import { ElementSerialize } from "../../element-serialize";
|
6
|
-
import { nanoid } from "nanoid";
|
7
|
-
export var TrackRunTypeEnum;
|
8
|
-
(function (TrackRunTypeEnum) {
|
9
|
-
TrackRunTypeEnum["Inserted"] = "ins-run";
|
10
|
-
TrackRunTypeEnum["Deleted"] = "del-run";
|
11
|
-
})(TrackRunTypeEnum || (TrackRunTypeEnum = {}));
|
12
|
-
export class TrackRunElement extends InlineGroupElement {
|
13
|
-
constructor(trackType) {
|
14
|
-
super(trackType);
|
15
|
-
this.props = new TrackRunProps(trackType);
|
16
|
-
this.addEvent('GetTrackTips', (evt) => {
|
17
|
-
evt.trackTips = {
|
18
|
-
trackRunType: this.type,
|
19
|
-
name: this.props.userName,
|
20
|
-
date: this.props.date,
|
21
|
-
content: ElementSerialize.serializeString(this, { all: true })
|
22
|
-
};
|
23
|
-
console.log(evt.trackTips.content);
|
24
|
-
evt.isCancel = true;
|
25
|
-
});
|
26
|
-
}
|
27
|
-
clone(data) {
|
28
|
-
const clone = new TrackRunElement(this.type);
|
29
|
-
this.props.clone(clone.props);
|
30
|
-
if (data) {
|
31
|
-
const length = this.length;
|
32
|
-
for (let i = 0; i < length; i++) {
|
33
|
-
clone.addChild(this.getChild(i).clone(true));
|
34
|
-
}
|
35
|
-
}
|
36
|
-
return clone;
|
37
|
-
}
|
38
|
-
createRenderObject(options, renderCtx) {
|
39
|
-
if (!options.showTrackChanges && this.type === TrackRunTypeEnum.Deleted) {
|
40
|
-
return null;
|
41
|
-
}
|
42
|
-
return new TrackRunRenderObject(this);
|
43
|
-
}
|
44
|
-
serialize(viewOptions) {
|
45
|
-
return {
|
46
|
-
type: this.type,
|
47
|
-
props: this.props.getSerializeProps()
|
48
|
-
};
|
49
|
-
}
|
50
|
-
split(index) {
|
51
|
-
if (index === 0 || index === this.length) {
|
52
|
-
return null;
|
53
|
-
}
|
54
|
-
const clone = new TrackRunElement(this.type);
|
55
|
-
this.props.clone(clone.props);
|
56
|
-
const items = [];
|
57
|
-
for (let i = index; i < this.length; i++) {
|
58
|
-
const child = this.getChild(i);
|
59
|
-
items.push(child);
|
60
|
-
}
|
61
|
-
items.forEach(item => {
|
62
|
-
item.remove();
|
63
|
-
clone.addChild(item);
|
64
|
-
});
|
65
|
-
return clone;
|
66
|
-
}
|
67
|
-
}
|
68
|
-
export class TrackRunRenderObject extends InlineGroupRenderObject {
|
69
|
-
constructor(ele) {
|
70
|
-
super(ele);
|
71
|
-
}
|
72
|
-
beginRender(ctx, position) {
|
73
|
-
const color = this.element.type === 'ins-run' ? 'green' : 'red';
|
74
|
-
//ctx.overlaysContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, color);
|
75
|
-
}
|
76
|
-
clone() {
|
77
|
-
const cloneRender = new TrackRunRenderObject(this.element);
|
78
|
-
cloneRender.rect = ElementUtil.cloneRect(this.rect);
|
79
|
-
for (let i = 0; i < this.length; i++) {
|
80
|
-
cloneRender.addChild(this.getChild(i).clone());
|
81
|
-
}
|
82
|
-
return cloneRender;
|
83
|
-
}
|
84
|
-
endRender(ctx, position) {
|
85
|
-
const { x, y } = position;
|
86
|
-
const color = this.element.type === 'ins-run' ? 'green' : 'red';
|
87
|
-
for (let i = 0; i < this.length; i++) {
|
88
|
-
const childRender = this.getChild(i);
|
89
|
-
const { rect } = childRender;
|
90
|
-
if (childRender.element && childRender.element.type === 'del-run') {
|
91
|
-
continue;
|
92
|
-
}
|
93
|
-
let lineY = y + rect.y + rect.height;
|
94
|
-
lineY = this.element.type === 'ins-run' ? lineY : lineY - rect.height / 2;
|
95
|
-
ctx.contentContext.drawLine(x + rect.x, lineY, rect.width, color, 1);
|
96
|
-
}
|
97
|
-
}
|
98
|
-
}
|
99
|
-
export class RunElementFactory extends ElementFactory {
|
100
|
-
createElement(data, renderCtx) {
|
101
|
-
const ele = new TrackRunElement(data.type);
|
102
|
-
ele.props.userId = data.props?.userId ?? '';
|
103
|
-
ele.props.userName = data.props?.userName ?? '';
|
104
|
-
ele.props.date = data.props?.date ?? '';
|
105
|
-
ele.props.id = data.props?.id ?? nanoid(5);
|
106
|
-
return ele;
|
107
|
-
}
|
108
|
-
match(type) {
|
109
|
-
return type === TrackRunTypeEnum.Inserted || type === TrackRunTypeEnum.Deleted;
|
110
|
-
}
|
111
|
-
}
|
112
|
-
//# sourceMappingURL=track-run-impl.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"track-run-impl.js","sourceRoot":"lib/","sources":["framework/impl/text/track-run-impl.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n InlineGroupElement,\n Position,\n SerializeProps,\n ViewOptions,\n Element,\n ElementFactory, readElementProps\n} from \"../../element-define\";\nimport { RenderContenxtType } from \"../../render-context\";\nimport { InlineGroupRenderObject, RenderObject } from \"../../render-define\";\nimport { TrackRunProps } from \"../../element-props\";\nimport { ElementUtil } from \"../../element-util\";\nimport { ElementSerialize } from \"../../element-serialize\";\nimport { GetTrackTipsEvent } from \"../../element-event-define\";\nimport { nanoid } from \"nanoid\";\nexport enum TrackRunTypeEnum {\n Inserted = 'ins-run',\n Deleted = 'del-run',\n}\ntype NullableType<T> = T | null;\nexport class TrackRunElement extends InlineGroupElement<TrackRunProps> {\n constructor(trackType: TrackRunTypeEnum) {\n super(trackType);\n this.props = new TrackRunProps(trackType);\n this.addEvent<GetTrackTipsEvent>('GetTrackTips', (evt) => {\n evt.trackTips = {\n trackRunType: this.type as TrackRunTypeEnum,\n name: this.props.userName,\n date: this.props.date,\n content: ElementSerialize.serializeString(this, { all: true })\n };\n console.log(evt.trackTips.content);\n\n evt.isCancel = true;\n });\n }\n\n clone(data: boolean): Element {\n const clone = new TrackRunElement(this.type as TrackRunTypeEnum);\n this.props.clone(clone.props);\n if (data) {\n const length = this.length;\n for (let i = 0; i < length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContenxtType): NullableType<RenderObject> {\n if (!options.showTrackChanges && this.type === TrackRunTypeEnum.Deleted) {\n return null;\n }\n return new TrackRunRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n return {\n type: this.type,\n props: this.props.getSerializeProps()\n };\n }\n\n split(index: number): TrackRunElement | null {\n if (index === 0 || index === this.length) {\n return null;\n }\n const clone = new TrackRunElement(this.type as TrackRunTypeEnum);\n this.props.clone(clone.props);\n const items: Array<Element> = [];\n for (let i = index; i < this.length; i++) {\n const child = this.getChild(i);\n items.push(child);\n }\n items.forEach(item => {\n item.remove();\n clone.addChild(item);\n });\n return clone;\n }\n}\n\nexport class TrackRunRenderObject extends InlineGroupRenderObject<TrackRunElement> {\n constructor(ele: TrackRunElement) {\n super(ele);\n }\n\n beginRender(ctx: RenderContenxtType, position: Position): void {\n const color = this.element.type === 'ins-run' ? 'green' : 'red';\n //ctx.overlaysContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, color);\n }\n\n clone(): RenderObject {\n const cloneRender = new TrackRunRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n\n endRender(ctx: RenderContenxtType, position: Position): void {\n const { x, y } = position;\n const color = this.element.type === 'ins-run' ? 'green' : 'red';\n for (let i = 0; i < this.length; i++) {\n const childRender = this.getChild(i);\n const { rect } = childRender;\n if (childRender.element && childRender.element.type === 'del-run') {\n continue;\n }\n let lineY = y + rect.y + rect.height;\n lineY = this.element.type === 'ins-run' ? lineY : lineY - rect.height / 2;\n ctx.contentContext.drawLine(x + rect.x, lineY, rect.width, color, 1);\n }\n }\n}\n\nexport class RunElementFactory extends ElementFactory<TrackRunProps>{\n\n createElement(data: readElementProps<TrackRunProps>, renderCtx: RenderContenxtType): TrackRunElement {\n const ele = new TrackRunElement(data.type as TrackRunTypeEnum);\n ele.props.userId = data.props?.userId ?? '';\n ele.props.userName = data.props?.userName ?? '';\n ele.props.date = data.props?.date ?? '';\n ele.props.id = data.props?.id ?? nanoid(5);\n return ele;\n }\n\n match(type: string): boolean {\n return type === TrackRunTypeEnum.Inserted || type === TrackRunTypeEnum.Deleted;\n }\n\n\n}\n\n"]}
|
package/lib/framework/notify.js
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
const EDITOR_REACTIVE = '__editor_reactive';
|
2
|
-
const ITERATOR_KEY = Symbol('iterator-key');
|
3
|
-
export const reactiveMap = new WeakMap();
|
4
|
-
export const targetMaps = new WeakMap();
|
5
|
-
const activeFns = [];
|
6
|
-
function track(target, p) {
|
7
|
-
const activeFn = activeFns[activeFns.length - 1];
|
8
|
-
if (!activeFn) {
|
9
|
-
return;
|
10
|
-
}
|
11
|
-
let targetMap = targetMaps.get(target);
|
12
|
-
if (!targetMap) {
|
13
|
-
targetMaps.set(target, (targetMap = new Map()));
|
14
|
-
}
|
15
|
-
let effectFns = targetMap.get(p);
|
16
|
-
if (!effectFns) {
|
17
|
-
targetMap.set(p, (effectFns = new Set()));
|
18
|
-
}
|
19
|
-
effectFns.add(activeFn);
|
20
|
-
}
|
21
|
-
function trigger(target, p, oldValue, newValue) {
|
22
|
-
//不需要触发
|
23
|
-
if (p.toString().startsWith('__')) {
|
24
|
-
return;
|
25
|
-
}
|
26
|
-
const targetMap = targetMaps.get(target);
|
27
|
-
if (!targetMap) {
|
28
|
-
return;
|
29
|
-
}
|
30
|
-
const effectFns = targetMap.get(p);
|
31
|
-
const iteratorFns = targetMap.get(ITERATOR_KEY);
|
32
|
-
const fns = new Set();
|
33
|
-
effectFns && effectFns.forEach(item => fns.add(item));
|
34
|
-
iteratorFns && iteratorFns.forEach(item => fns.add(item));
|
35
|
-
const activeFn = activeFns[activeFns.length - 1];
|
36
|
-
//防止死循环,过滤正在运行的副作用
|
37
|
-
if (activeFn) {
|
38
|
-
fns.delete(activeFn);
|
39
|
-
}
|
40
|
-
fns.forEach(fn => {
|
41
|
-
fn(target, p, oldValue, newValue);
|
42
|
-
});
|
43
|
-
}
|
44
|
-
export function watchChanged(source, cb) {
|
45
|
-
if (source[EDITOR_REACTIVE]) {
|
46
|
-
addToTrack(source['raw'], source, cb);
|
47
|
-
return source;
|
48
|
-
}
|
49
|
-
if (isDate(source)) {
|
50
|
-
return source;
|
51
|
-
}
|
52
|
-
const existProxy = reactiveMap.get(source);
|
53
|
-
if (existProxy) {
|
54
|
-
return existProxy;
|
55
|
-
}
|
56
|
-
const proxy = new Proxy(source, {
|
57
|
-
get(target, p, receiver) {
|
58
|
-
if (p === 'raw') {
|
59
|
-
return target;
|
60
|
-
}
|
61
|
-
if (p === EDITOR_REACTIVE) {
|
62
|
-
return true;
|
63
|
-
}
|
64
|
-
const res = Reflect.get(target, p, receiver);
|
65
|
-
if (typeof res === 'object' && res) {
|
66
|
-
return watchChanged(res, cb);
|
67
|
-
}
|
68
|
-
return res;
|
69
|
-
},
|
70
|
-
set(target, p, newValue, receiver) {
|
71
|
-
//console.log('设置' + p.toString())
|
72
|
-
const oldValue = target[p];
|
73
|
-
const res = Reflect.set(target, p, newValue, receiver);
|
74
|
-
if (receiver.raw === target) {
|
75
|
-
if (oldValue !== newValue && (oldValue === oldValue || newValue === newValue)) {
|
76
|
-
trigger(target, p, oldValue, newValue);
|
77
|
-
}
|
78
|
-
}
|
79
|
-
return res;
|
80
|
-
},
|
81
|
-
deleteProperty(target, p) {
|
82
|
-
const res = Reflect.deleteProperty(target, p);
|
83
|
-
trigger(target, p, null, null);
|
84
|
-
return res;
|
85
|
-
},
|
86
|
-
defineProperty(target, p, attributes) {
|
87
|
-
const res = Reflect.defineProperty(target, p, attributes);
|
88
|
-
trigger(target, p, null, null);
|
89
|
-
return res;
|
90
|
-
}
|
91
|
-
});
|
92
|
-
addToTrack(source, proxy, cb);
|
93
|
-
return proxy;
|
94
|
-
}
|
95
|
-
function addToTrack(source, proxy, cb) {
|
96
|
-
activeFns.push(cb);
|
97
|
-
track(source, ITERATOR_KEY);
|
98
|
-
activeFns.pop();
|
99
|
-
reactiveMap.set(source, proxy);
|
100
|
-
}
|
101
|
-
export function setNotifyChangedCallback(target, p, cb) {
|
102
|
-
let trackTarget = target;
|
103
|
-
if (target[EDITOR_REACTIVE]) {
|
104
|
-
trackTarget = target['raw'];
|
105
|
-
}
|
106
|
-
activeFns.push(cb);
|
107
|
-
track(trackTarget, p);
|
108
|
-
activeFns.pop();
|
109
|
-
}
|
110
|
-
export const isDate = (val) => val instanceof Date;
|
111
|
-
export const objectToString = Object.prototype.toString;
|
112
|
-
export const toTypeString = (value) => objectToString.call(value);
|
113
|
-
export const toRawType = (value) => {
|
114
|
-
return toTypeString(value).slice(8, -1);
|
115
|
-
};
|
116
|
-
//# sourceMappingURL=notify.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"notify.js","sourceRoot":"lib/","sources":["framework/notify.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,EAAkB,CAAC;AACzD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,EAA8C,CAAC;AAOpF,MAAM,SAAS,GAA0B,EAAE,CAAC;AAC5C,SAAS,KAAK,CAAC,MAAc,EAAE,CAAW;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE;QACX,OAAO;KACV;IACD,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,CAAC,SAAS,EAAE;QACZ,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;KAClD;IACD,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE;QACZ,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;KAC5C;IACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,CAAW,EAAE,QAAa,EAAE,QAAa;IACtE,OAAO;IACP,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC/B,OAAO;KACV;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE;QACZ,OAAO;KACV;IACD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,kBAAkB;IAClB,IAAI,QAAQ,EAAE;QACV,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;KACvB;IACD,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACb,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,YAAY,CAAmB,MAAS,EAAE,EAAkB;IACxE,IAAU,MAAO,CAAC,eAAe,CAAC,EAAE;QAChC,UAAU,CAAO,MAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;KACjB;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;QAChB,OAAO,MAAM,CAAC;KACjB;IACD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,UAAU,EAAE;QACZ,OAAO,UAAe,CAAC;KAC1B;IACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;QAC5B,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ;YACnB,IAAI,CAAC,KAAK,KAAK,EAAE;gBACb,OAAO,MAAM,CAAC;aACjB;YACD,IAAI,CAAC,KAAK,eAAe,EAAE;gBACvB,OAAO,IAAI,CAAC;aACf;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE;gBAChC,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAChC;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ;YAC7B,kCAAkC;YAClC,MAAM,QAAQ,GAAS,MAAO,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAU,QAAS,CAAC,GAAG,KAAK,MAAM,EAAE;gBAChC,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC,EAAE;oBAC3E,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBAC1C;aACJ;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QACD,cAAc,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;QACD,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU;YAChC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;YACzD,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;KACJ,CAAC,CAAA;IACF,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,EAAkB;IACjE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5B,SAAS,CAAC,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAGD,MAAM,UAAU,wBAAwB,CAAC,MAAc,EAAE,CAAW,EAAE,EAAkB;IACpF,IAAI,WAAW,GAAQ,MAAM,CAAC;IAC9B,IAAU,MAAO,CAAC,eAAe,CAAC,EAAE;QAChC,WAAW,GAAS,MAAO,CAAC,KAAK,CAAC,CAAC;KACtC;IACD,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtB,SAAS,CAAC,GAAG,EAAE,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAY,EAAe,EAAE,CAAC,GAAG,YAAY,IAAI,CAAA;AAExE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CACnD,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAE9B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC,CAAA","sourcesContent":["const EDITOR_REACTIVE = '__editor_reactive';\nconst ITERATOR_KEY = Symbol('iterator-key')\nexport const reactiveMap = new WeakMap<object, object>();\nexport const targetMaps = new WeakMap<object, Map<propType, Set<notifyCallback>>>();\ntype propType = string | number | symbol;\ninterface notifyCallback {\n (target: object, p: propType, oldValue: any, newValue: any): string | undefined | void;\n}\n\n\nconst activeFns: Array<notifyCallback> = [];\nfunction track(target: object, p: propType) {\n const activeFn = activeFns[activeFns.length - 1];\n if (!activeFn) {\n return;\n }\n let targetMap = targetMaps.get(target)\n if (!targetMap) {\n targetMaps.set(target, (targetMap = new Map()))\n }\n let effectFns = targetMap.get(p);\n if (!effectFns) {\n targetMap.set(p, (effectFns = new Set()))\n }\n effectFns.add(activeFn)\n}\n\nfunction trigger(target: object, p: propType, oldValue: any, newValue: any): void {\n //不需要触发\n if (p.toString().startsWith('__')) {\n return;\n }\n const targetMap = targetMaps.get(target);\n if (!targetMap) {\n return;\n }\n const effectFns = targetMap.get(p);\n const iteratorFns = targetMap.get(ITERATOR_KEY);\n const fns = new Set<notifyCallback>();\n effectFns && effectFns.forEach(item => fns.add(item));\n iteratorFns && iteratorFns.forEach(item => fns.add(item));\n const activeFn = activeFns[activeFns.length - 1];\n //防止死循环,过滤正在运行的副作用\n if (activeFn) {\n fns.delete(activeFn)\n }\n fns.forEach(fn => {\n fn(target, p, oldValue, newValue)\n });\n}\n\nexport function watchChanged<T extends object>(source: T, cb: notifyCallback): T {\n if ((<any>source)[EDITOR_REACTIVE]) {\n addToTrack((<any>source)['raw'], source, cb);\n return source;\n }\n if (isDate(source)) {\n return source;\n }\n const existProxy = reactiveMap.get(source);\n if (existProxy) {\n return existProxy as T;\n }\n const proxy = new Proxy(source, {\n get(target, p, receiver) {\n if (p === 'raw') {\n return target;\n }\n if (p === EDITOR_REACTIVE) {\n return true;\n }\n const res = Reflect.get(target, p, receiver)\n if (typeof res === 'object' && res) {\n return watchChanged(res, cb);\n }\n return res;\n },\n set(target, p, newValue, receiver) {\n //console.log('设置' + p.toString())\n const oldValue = (<any>target)[p];\n const res = Reflect.set(target, p, newValue, receiver);\n if ((<any>receiver).raw === target) {\n if (oldValue !== newValue && (oldValue === oldValue || newValue === newValue)) {\n trigger(target, p, oldValue, newValue);\n }\n }\n return res;\n },\n deleteProperty(target, p) {\n const res = Reflect.deleteProperty(target, p);\n trigger(target, p, null, null);\n return res;\n },\n defineProperty(target, p, attributes) {\n const res = Reflect.defineProperty(target, p, attributes)\n trigger(target, p, null, null);\n return res;\n }\n })\n addToTrack(source, proxy, cb);\n return proxy;\n}\n\nfunction addToTrack(source: object, proxy: object, cb: notifyCallback): void {\n activeFns.push(cb);\n track(source, ITERATOR_KEY);\n activeFns.pop();\n reactiveMap.set(source, proxy);\n}\n\n\nexport function setNotifyChangedCallback(target: object, p: propType, cb: notifyCallback): void {\n let trackTarget: any = target;\n if ((<any>target)[EDITOR_REACTIVE]) {\n trackTarget = (<any>target)['raw'];\n }\n activeFns.push(cb)\n track(trackTarget, p);\n activeFns.pop()\n}\n\nexport const isDate = (val: unknown): val is Date => val instanceof Date\n\nexport const objectToString = Object.prototype.toString\nexport const toTypeString = (value: unknown): string =>\n objectToString.call(value)\n\nexport const toRawType = (value: unknown): string => {\n return toTypeString(value).slice(8, -1)\n}\n"]}
|