@guiexpert/table 1.1.23 → 1.1.25
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/package.json +7 -4
- package/.eslintrc.json +0 -16
- package/dist/README.md +0 -101
- package/dist/css/main.css +0 -350
- package/dist/css/table-classes.css +0 -42
- package/dist/css/table-color-classes.css +0 -98
- package/dist/css/table-color-vars.css +0 -158
- package/dist/css/table-tree.css +0 -53
- package/dist/package.json +0 -47
- package/doc.css +0 -1565
- package/patch.js +0 -16
- package/src/index.ts +0 -176
- package/src/lib/common/decorator/avoid-double-execution.decorator.ts +0 -21
- package/src/lib/table/action/action-id.type.ts +0 -36
- package/src/lib/table/action/on-action-triggered.if.ts +0 -14
- package/src/lib/table/action/osx-shortcut-actionId-mapping.ts +0 -39
- package/src/lib/table/action/shortcut-actionid-mapping.type.ts +0 -7
- package/src/lib/table/action/shortcut.service.ts +0 -162
- package/src/lib/table/action/windows-shortcut-actionId-mapping.ts +0 -35
- package/src/lib/table/checkbox/checkbox-model.if.ts +0 -16
- package/src/lib/table/checkbox/checkbox-model.ts +0 -62
- package/src/lib/table/checkbox/tree-checkbox-model.ts +0 -123
- package/src/lib/table/color/color-rgb.if.ts +0 -12
- package/src/lib/table/color/color-rgb.ts +0 -10
- package/src/lib/table/color/ge-css-color-util.ts +0 -43
- package/src/lib/table/color/three-color-gradient-arg.if.ts +0 -15
- package/src/lib/table/color/three-color-gradient-arg.ts +0 -14
- package/src/lib/table/color/two-color-gradient-arg.if.ts +0 -12
- package/src/lib/table/color/two-color-gradient-arg.ts +0 -12
- package/src/lib/table/css-vars.ts +0 -243
- package/src/lib/table/data/chunk/chunk.data-event.if.ts +0 -8
- package/src/lib/table/data/chunk/chunk.data-event.ts +0 -27
- package/src/lib/table/data/chunk/request-chunk.if.ts +0 -9
- package/src/lib/table/data/chunk/request-chunk.ts +0 -15
- package/src/lib/table/data/common/aligns.ts +0 -42
- package/src/lib/table/data/common/area-map-factory.ts +0 -20
- package/src/lib/table/data/common/area-map.ts +0 -18
- package/src/lib/table/data/common/area-map.type.ts +0 -5
- package/src/lib/table/data/common/args-adjust-columns-to-row-parent-params.ts +0 -21
- package/src/lib/table/data/common/args-render-cell-div.ts +0 -34
- package/src/lib/table/data/common/boolean-function.ts +0 -16
- package/src/lib/table/data/common/cell-range.ts +0 -66
- package/src/lib/table/data/common/checkbox-column-def.ts +0 -31
- package/src/lib/table/data/common/checked-type.ts +0 -6
- package/src/lib/table/data/common/event/ge-cell-indices.ts +0 -12
- package/src/lib/table/data/common/event/ge-key-event.ts +0 -15
- package/src/lib/table/data/common/event/ge-model-change-event.ts +0 -16
- package/src/lib/table/data/common/event/ge-mouse-event.ts +0 -41
- package/src/lib/table/data/common/event/input/table-cell-update-event.if.ts +0 -58
- package/src/lib/table/data/common/event/input/table-cell-update-event.ts +0 -27
- package/src/lib/table/data/common/filter-function.ts +0 -9
- package/src/lib/table/data/common/get-t.ts +0 -7
- package/src/lib/table/data/common/index-and-px.ts +0 -12
- package/src/lib/table/data/common/size.if.ts +0 -8
- package/src/lib/table/data/common/size.ts +0 -9
- package/src/lib/table/data/common/sizes.ts +0 -35
- package/src/lib/table/data/common/sort-item.ts +0 -14
- package/src/lib/table/data/common/sort-state.type.ts +0 -7
- package/src/lib/table/data/common/tree-arrow.type.ts +0 -8
- package/src/lib/table/data/common/tree-row-if.ts +0 -15
- package/src/lib/table/data/common/tree-row.ts +0 -22
- package/src/lib/table/data/common/value-label.if.ts +0 -6
- package/src/lib/table/data/common/value-label.ts +0 -13
- package/src/lib/table/data/div-scope.type.ts +0 -14
- package/src/lib/table/data/event/mouse-target-data.ts +0 -48
- package/src/lib/table/data/geo-data.ts +0 -16
- package/src/lib/table/data/options/auto-restore-options.if.ts +0 -21
- package/src/lib/table/data/options/auto-restore-options.ts +0 -50
- package/src/lib/table/data/options/default-row-heights.if.ts +0 -5
- package/src/lib/table/data/options/default-row-heights.ts +0 -10
- package/src/lib/table/data/options/header-group-options.if.ts +0 -9
- package/src/lib/table/data/options/header-group-options.ts +0 -23
- package/src/lib/table/data/options/icon.if.ts +0 -20
- package/src/lib/table/data/options/icon.ts +0 -10
- package/src/lib/table/data/options/sorted-options.if.ts +0 -13
- package/src/lib/table/data/options/sorted-options.ts +0 -15
- package/src/lib/table/data/options/table-options.if.ts +0 -240
- package/src/lib/table/data/options/table-options.ts +0 -68
- package/src/lib/table/data/options/tree-options.if.ts +0 -10
- package/src/lib/table/data/options/tree-options.ts +0 -32
- package/src/lib/table/data/side-ident.type.ts +0 -4
- package/src/lib/table/data/table-model-and-options.if.ts +0 -11
- package/src/lib/table/data/table-model-and-options.ts +0 -16
- package/src/lib/table/data/tablemodel/area-ident.type.ts +0 -18
- package/src/lib/table/data/tablemodel/areamodel/abstract-area-model.ts +0 -184
- package/src/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.ts +0 -63
- package/src/lib/table/data/tablemodel/areamodel/area-model-cell-groups.ts +0 -236
- package/src/lib/table/data/tablemodel/areamodel/area-model-hidden.ts +0 -126
- package/src/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.ts +0 -28
- package/src/lib/table/data/tablemodel/areamodel/area-model-object-array.ts +0 -120
- package/src/lib/table/data/tablemodel/areamodel/area-model-tree.ts +0 -224
- package/src/lib/table/data/tablemodel/areamodel/area-model.if.ts +0 -192
- package/src/lib/table/data/tablemodel/areamodel/area-model.ts +0 -117
- package/src/lib/table/data/tablemodel/areamodel/async-area-model-object-array.ts +0 -110
- package/src/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.ts +0 -64
- package/src/lib/table/data/tablemodel/areamodel/has-default-row-height-if.ts +0 -3
- package/src/lib/table/data/tablemodel/areamodel/object-array-holder.if.ts +0 -8
- package/src/lib/table/data/tablemodel/cellgroup/cell-group-ext.ts +0 -172
- package/src/lib/table/data/tablemodel/cellgroup/cell-group.if.ts +0 -12
- package/src/lib/table/data/tablemodel/cellgroup/cell-group.ts +0 -18
- package/src/lib/table/data/tablemodel/cellgroup/cellgroup-factory.ts +0 -148
- package/src/lib/table/data/tablemodel/column/column-def.if.ts +0 -141
- package/src/lib/table/data/tablemodel/column/column-def.ts +0 -108
- package/src/lib/table/data/tablemodel/padding.ts +0 -12
- package/src/lib/table/data/tablemodel/table-model.if.ts +0 -256
- package/src/lib/table/data/tablemodel/table-model.ts +0 -542
- package/src/lib/table/ele-scope.ts +0 -309
- package/src/lib/table/event-adapter.ts +0 -43
- package/src/lib/table/event-listener.if.ts +0 -32
- package/src/lib/table/factory/table-factory.ts +0 -379
- package/src/lib/table/factory/tree-factory.ts +0 -52
- package/src/lib/table/focus/event-focus-changed-listener.if.ts +0 -8
- package/src/lib/table/focus/focus-model.if.ts +0 -20
- package/src/lib/table/focus/focus-model.ts +0 -76
- package/src/lib/table/focus/focus.type.ts +0 -4
- package/src/lib/table/input-handler.ts +0 -48
- package/src/lib/table/instanceof-workaround.ts +0 -41
- package/src/lib/table/license-manager.ts +0 -47
- package/src/lib/table/mouse-handler.ts +0 -307
- package/src/lib/table/render-scope.ts +0 -1440
- package/src/lib/table/renderer/cell-group-ext-cell-renderer.ts +0 -123
- package/src/lib/table/renderer/cell-render.if.ts +0 -16
- package/src/lib/table/renderer/checkbox-boolean-property-cell-renderer.ts +0 -63
- package/src/lib/table/renderer/checkbox-cell-renderer.ts +0 -39
- package/src/lib/table/renderer/date-to-int-date-cell-renderer.ts +0 -39
- package/src/lib/table/renderer/date-to-iso-cell-renderer.ts +0 -25
- package/src/lib/table/renderer/date-to-locale-date-cell-renderer.ts +0 -24
- package/src/lib/table/renderer/date-to-tec-cell-renderer.ts +0 -28
- package/src/lib/table/renderer/edit/edit-cell-renderer.type.ts +0 -3
- package/src/lib/table/renderer/edit/edit-input-pipe-for-number.ts +0 -6
- package/src/lib/table/renderer/edit/edit-input-pipe.if.ts +0 -15
- package/src/lib/table/renderer/edit/input-cell-renderer.ts +0 -41
- package/src/lib/table/renderer/edit/select-cell-renderer.ts +0 -60
- package/src/lib/table/renderer/male-female-to-icon-cell-renderer.ts +0 -26
- package/src/lib/table/renderer/number-cell-progress-bar-cell-renderer.ts +0 -57
- package/src/lib/table/renderer/number-cell-renderer.ts +0 -38
- package/src/lib/table/renderer/positive-and-negative-number-renderer.ts +0 -45
- package/src/lib/table/renderer/progress-bar-cell-renderer.ts +0 -60
- package/src/lib/table/renderer/renderer-cleanup-fn.type.ts +0 -1
- package/src/lib/table/renderer/renderer.ts +0 -11
- package/src/lib/table/renderer/star-rating-cell-renderer.ts +0 -45
- package/src/lib/table/renderer/true-false-cell-renderer.ts +0 -28
- package/src/lib/table/selection/event-selection-changed-listener.if.ts +0 -8
- package/src/lib/table/selection/multi-rows-selection-model.ts +0 -118
- package/src/lib/table/selection/selection-model.if.ts +0 -56
- package/src/lib/table/selection/selection-model.ts +0 -182
- package/src/lib/table/selection/selection-service.ts +0 -129
- package/src/lib/table/selection/selection.type.ts +0 -6
- package/src/lib/table/service/abstract-store-state.service.ts +0 -105
- package/src/lib/table/service/convenience-dom.service.ts +0 -574
- package/src/lib/table/service/copy-service.if.ts +0 -45
- package/src/lib/table/service/copy-service.ts +0 -130
- package/src/lib/table/service/data/collapsed-expanded.data.ts +0 -11
- package/src/lib/table/service/data/html-style.type.ts +0 -1
- package/src/lib/table/service/dom-service.if.ts +0 -18
- package/src/lib/table/service/ge-filter.service.ts +0 -123
- package/src/lib/table/service/simple-dom-service.ts +0 -55
- package/src/lib/table/service/sorter.service.ts +0 -30
- package/src/lib/table/service/store-state-collapsed-expand.service.ts +0 -76
- package/src/lib/table/service/store-state-scroll-pos.service.ts +0 -40
- package/src/lib/table/service/store-state-sorting.service.ts +0 -41
- package/src/lib/table/service/tree-row.service.ts +0 -32
- package/src/lib/table/table-api.ts +0 -234
- package/src/lib/table/table-scope.ts +0 -770
- package/tsconfig.json +0 -21
- package/tsconfig.lib.json +0 -10
- package/tsconfig.spec.json +0 -25
- package/vite.config.ts +0 -56
- /package/{dist/index.cjs → index.cjs} +0 -0
- /package/{dist/index.d.ts → index.d.ts} +0 -0
- /package/{dist/index.js → index.js} +0 -0
- /package/{dist/lib → lib}/common/decorator/avoid-double-execution.decorator.d.ts +0 -0
- /package/{dist/lib → lib}/table/action/action-id.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/action/on-action-triggered.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/action/osx-shortcut-actionId-mapping.d.ts +0 -0
- /package/{dist/lib → lib}/table/action/shortcut-actionid-mapping.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/action/shortcut.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/action/windows-shortcut-actionId-mapping.d.ts +0 -0
- /package/{dist/lib → lib}/table/checkbox/checkbox-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/checkbox/checkbox-model.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/checkbox/tree-checkbox-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/color-rgb.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/color-rgb.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/ge-css-color-util.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/three-color-gradient-arg.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/three-color-gradient-arg.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/two-color-gradient-arg.d.ts +0 -0
- /package/{dist/lib → lib}/table/color/two-color-gradient-arg.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/css-vars.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/chunk/chunk.data-event.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/chunk/chunk.data-event.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/chunk/request-chunk.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/chunk/request-chunk.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/aligns.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/area-map-factory.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/area-map.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/area-map.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/args-adjust-columns-to-row-parent-params.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/args-render-cell-div.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/boolean-function.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/cell-range.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/checkbox-column-def.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/checked-type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/event/ge-cell-indices.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/event/ge-key-event.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/event/ge-model-change-event.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/event/ge-mouse-event.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/event/input/table-cell-update-event.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/event/input/table-cell-update-event.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/filter-function.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/get-t.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/index-and-px.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/size.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/size.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/sizes.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/sort-item.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/sort-state.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/tree-arrow.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/tree-row-if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/tree-row.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/value-label.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/common/value-label.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/div-scope.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/event/mouse-target-data.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/geo-data.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/auto-restore-options.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/auto-restore-options.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/default-row-heights.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/default-row-heights.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/header-group-options.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/header-group-options.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/icon.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/icon.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/sorted-options.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/sorted-options.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/table-options.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/table-options.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/tree-options.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/options/tree-options.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/side-ident.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/table-model-and-options.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/table-model-and-options.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/area-ident.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/abstract-area-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model-array-of-arrays.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model-cell-groups.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model-hidden.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model-object-array.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model-tree.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/area-model.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/async-area-model-object-array.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/col-and-rowspan-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/has-default-row-height-if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/areamodel/object-array-holder.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/cellgroup/cell-group-ext.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/cellgroup/cell-group.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/cellgroup/cell-group.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/cellgroup/cellgroup-factory.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/column/column-def.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/column/column-def.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/padding.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/table-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/data/tablemodel/table-model.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/ele-scope.d.ts +0 -0
- /package/{dist/lib → lib}/table/event-adapter.d.ts +0 -0
- /package/{dist/lib → lib}/table/event-listener.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/factory/table-factory.d.ts +0 -0
- /package/{dist/lib → lib}/table/factory/tree-factory.d.ts +0 -0
- /package/{dist/lib → lib}/table/focus/event-focus-changed-listener.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/focus/focus-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/focus/focus-model.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/focus/focus.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/input-handler.d.ts +0 -0
- /package/{dist/lib → lib}/table/instanceof-workaround.d.ts +0 -0
- /package/{dist/lib → lib}/table/license-manager.d.ts +0 -0
- /package/{dist/lib → lib}/table/mouse-handler.d.ts +0 -0
- /package/{dist/lib → lib}/table/render-scope.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/cell-group-ext-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/cell-render.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/checkbox-boolean-property-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/checkbox-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/date-to-int-date-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/date-to-iso-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/date-to-locale-date-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/date-to-tec-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/edit/edit-cell-renderer.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/edit/edit-input-pipe-for-number.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/edit/edit-input-pipe.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/edit/input-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/edit/select-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/male-female-to-icon-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/number-cell-progress-bar-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/number-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/positive-and-negative-number-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/progress-bar-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/renderer-cleanup-fn.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/star-rating-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/renderer/true-false-cell-renderer.d.ts +0 -0
- /package/{dist/lib → lib}/table/selection/event-selection-changed-listener.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/selection/multi-rows-selection-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/selection/selection-model.d.ts +0 -0
- /package/{dist/lib → lib}/table/selection/selection-model.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/selection/selection-service.d.ts +0 -0
- /package/{dist/lib → lib}/table/selection/selection.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/abstract-store-state.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/convenience-dom.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/copy-service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/copy-service.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/data/collapsed-expanded.data.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/data/html-style.type.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/dom-service.if.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/ge-filter.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/simple-dom-service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/sorter.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/store-state-collapsed-expand.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/store-state-scroll-pos.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/store-state-sorting.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/service/tree-row.service.d.ts +0 -0
- /package/{dist/lib → lib}/table/table-api.d.ts +0 -0
- /package/{dist/lib → lib}/table/table-scope.d.ts +0 -0
|
@@ -1,1440 +0,0 @@
|
|
|
1
|
-
import { EleScope } from './ele-scope';
|
|
2
|
-
import { TableModelIf } from './data/tablemodel/table-model.if';
|
|
3
|
-
import { AddColumnDivPara, ConvenienceDomService } from './service/convenience-dom.service';
|
|
4
|
-
import { TableOptionsIf } from './data/options/table-options.if';
|
|
5
|
-
import { CellRange } from './data/common/cell-range';
|
|
6
|
-
import { RendererCleanupFnType } from './renderer/renderer-cleanup-fn.type';
|
|
7
|
-
import { AreaIdent } from './data/tablemodel/area-ident.type';
|
|
8
|
-
import { SideIdent } from './data/side-ident.type';
|
|
9
|
-
import { DivScope } from './data/div-scope.type';
|
|
10
|
-
import { AreaModelIf } from './data/tablemodel/areamodel/area-model.if';
|
|
11
|
-
import { ArgsAdjustColumnsToRowParentParams } from './data/common/args-adjust-columns-to-row-parent-params';
|
|
12
|
-
import { ArgsRenderCellDiv } from './data/common/args-render-cell-div';
|
|
13
|
-
import { TreeArrowType } from './data/common/tree-arrow.type';
|
|
14
|
-
import { TreeRow } from './data/common/tree-row';
|
|
15
|
-
import { StoreStateScrollPosService } from './service/store-state-scroll-pos.service';
|
|
16
|
-
import { GeMouseEvent } from './data/common/event/ge-mouse-event';
|
|
17
|
-
import { GeoData } from './data/geo-data';
|
|
18
|
-
import { CellRendererIf } from './renderer/cell-render.if';
|
|
19
|
-
import { SelectionModelIf } from './selection/selection-model.if';
|
|
20
|
-
import { GetT } from './data/common/get-t';
|
|
21
|
-
import { FocusModelIf } from './focus/focus-model.if';
|
|
22
|
-
import { ColAndRowspanModel } from './data/tablemodel/areamodel/col-and-rowspan-model';
|
|
23
|
-
import { AreaObjectMapType } from './data/common/area-map.type';
|
|
24
|
-
import { AreaObjectMap } from './data/common/area-map';
|
|
25
|
-
import { TableCellUpdateEventIf } from './data/common/event/input/table-cell-update-event.if';
|
|
26
|
-
import { isAreaModelTree, isTreeRow } from './instanceof-workaround';
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Represents a cell in the ArgsRender.
|
|
31
|
-
* @interface
|
|
32
|
-
*/
|
|
33
|
-
interface ArgsRenderCell {
|
|
34
|
-
areaModel: AreaModelIf;
|
|
35
|
-
areaIdent: AreaIdent;
|
|
36
|
-
sideIdent: SideIdent;
|
|
37
|
-
rowIndex: number;
|
|
38
|
-
columnIndex: number;
|
|
39
|
-
left: number;
|
|
40
|
-
top: number;
|
|
41
|
-
width: number;
|
|
42
|
-
height: number;
|
|
43
|
-
parent: HTMLDivElement;
|
|
44
|
-
cellSelected: boolean;
|
|
45
|
-
lastRowOfModel: boolean;
|
|
46
|
-
gammaRange: boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Represents the arguments passed to the renderHeaderCellResizeHandle method.
|
|
51
|
-
* @interface
|
|
52
|
-
*/
|
|
53
|
-
interface ArgsRenderHeaderCellResizeHandle {
|
|
54
|
-
rowIndex: number;
|
|
55
|
-
columnIndex: number;
|
|
56
|
-
cellLeft: number;
|
|
57
|
-
cellTop: number;
|
|
58
|
-
cellWidth: number;
|
|
59
|
-
cellHeight: number;
|
|
60
|
-
parent: HTMLDivElement;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
export class RenderScope extends EleScope {
|
|
67
|
-
|
|
68
|
-
protected dragging = false;
|
|
69
|
-
protected editing = false;
|
|
70
|
-
protected storedColumnWidths: number[] = [];
|
|
71
|
-
|
|
72
|
-
protected storeScrollPosStateService?: StoreStateScrollPosService;
|
|
73
|
-
protected getSelectionModel?: GetT<SelectionModelIf>;
|
|
74
|
-
protected getFocusModel?: GetT<FocusModelIf>;
|
|
75
|
-
protected scrollLeft = 0;
|
|
76
|
-
protected scrollViewportLeft = 0;
|
|
77
|
-
protected scrollFactorY = 0;
|
|
78
|
-
protected scrollFactorX = 0;
|
|
79
|
-
|
|
80
|
-
protected readonly cleanupFunctions: {
|
|
81
|
-
header: (RendererCleanupFnType)[],
|
|
82
|
-
body: (RendererCleanupFnType)[],
|
|
83
|
-
footer: (RendererCleanupFnType)[],
|
|
84
|
-
} = {
|
|
85
|
-
header: [],
|
|
86
|
-
body: [],
|
|
87
|
-
footer: []
|
|
88
|
-
};
|
|
89
|
-
protected tree = false;
|
|
90
|
-
|
|
91
|
-
protected colAndRowspanModels: AreaObjectMapType<ColAndRowspanModel> = new AreaObjectMap<ColAndRowspanModel>();
|
|
92
|
-
protected firstVisibleRowIndex = -1;
|
|
93
|
-
|
|
94
|
-
protected draggingTargetColumnIndex = -1;
|
|
95
|
-
protected mouseEvent?: GeMouseEvent;
|
|
96
|
-
|
|
97
|
-
private debounceTimeout?: ReturnType<typeof setTimeout> | null;
|
|
98
|
-
private editorRenderer?: CellRendererIf;
|
|
99
|
-
private editorRendererColumn?: number;
|
|
100
|
-
private editorRendererRow?: number;
|
|
101
|
-
private removables: HTMLDivElement[] = [];
|
|
102
|
-
|
|
103
|
-
constructor(
|
|
104
|
-
hostElement: HTMLDivElement,
|
|
105
|
-
tableModel: TableModelIf,
|
|
106
|
-
dom: ConvenienceDomService,
|
|
107
|
-
tableOptions: TableOptionsIf
|
|
108
|
-
) {
|
|
109
|
-
super(hostElement, tableModel, dom, tableOptions);
|
|
110
|
-
|
|
111
|
-
if (this.tableModel.getSelectionModel) {
|
|
112
|
-
this.getSelectionModel = this.tableModel.getSelectionModel;
|
|
113
|
-
|
|
114
|
-
} else if (this.tableOptions?.getSelectionModel) {
|
|
115
|
-
// The 'getSelectionModel' method from 'tableOptions' has a higher priority:
|
|
116
|
-
this.getSelectionModel = this.tableOptions.getSelectionModel;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (this.tableOptions?.getFocusModel) {
|
|
120
|
-
this.getFocusModel = this.tableOptions.getFocusModel;
|
|
121
|
-
}
|
|
122
|
-
if (isAreaModelTree(tableModel.getAreaModel('body'))) {
|
|
123
|
-
this.tree = true;
|
|
124
|
-
}
|
|
125
|
-
const aereaIds: AreaIdent[] = ['header', 'body', 'footer'];
|
|
126
|
-
aereaIds.forEach(
|
|
127
|
-
areaIdent => {
|
|
128
|
-
this.colAndRowspanModels[areaIdent] = new ColAndRowspanModel(tableModel, tableModel.getAreaModel(areaIdent));
|
|
129
|
-
this.colAndRowspanModels[areaIdent]?.init();
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
isEditing() {
|
|
136
|
-
return this.editing;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Resets the editor renderer by clearing its values and state.
|
|
142
|
-
*
|
|
143
|
-
* @function resetEditorRenderer
|
|
144
|
-
* @memberof ClassName
|
|
145
|
-
*
|
|
146
|
-
* @returns {void}
|
|
147
|
-
*/
|
|
148
|
-
resetEditorRenderer() {
|
|
149
|
-
this.editorRenderer = undefined;
|
|
150
|
-
this.editorRendererRow = -1;
|
|
151
|
-
this.editorRendererColumn = -1;
|
|
152
|
-
this.editing = false;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Clears the selection in the component.
|
|
157
|
-
*
|
|
158
|
-
* @param {boolean} rerender - Indicates whether to rerender the component after clearing the selection. Default value is false.
|
|
159
|
-
*
|
|
160
|
-
* @return {void}
|
|
161
|
-
*/
|
|
162
|
-
clearSelection(rerender: boolean = false) {
|
|
163
|
-
if (this.getSelectionModel) {
|
|
164
|
-
const sm = this.getSelectionModel();
|
|
165
|
-
sm?.clear();
|
|
166
|
-
if (rerender) {
|
|
167
|
-
this.repaint();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Initializes and renders the editor for a specified row and column index.
|
|
174
|
-
*
|
|
175
|
-
* @param {number} rowIdx - The index of the row.
|
|
176
|
-
* @param {number} colIdx - The index of the column.
|
|
177
|
-
*/
|
|
178
|
-
initRenderEditor(rowIdx: number, colIdx: number) {
|
|
179
|
-
let rnFn = this.tableModel.getColumnDef(colIdx)?.getEditRenderer;
|
|
180
|
-
if (!rnFn) {
|
|
181
|
-
rnFn = this.tableOptions.getEditRenderer;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (rnFn) {
|
|
185
|
-
this.editorRenderer = rnFn(rowIdx, colIdx);
|
|
186
|
-
|
|
187
|
-
if (this.editorRenderer) {
|
|
188
|
-
this.editorRendererRow = rowIdx;
|
|
189
|
-
this.editorRendererColumn = colIdx;
|
|
190
|
-
this.editing = true;
|
|
191
|
-
this.repaint();
|
|
192
|
-
// request focus:
|
|
193
|
-
const input = document.querySelector('input.ge-table-cell-editor-input') as HTMLInputElement;
|
|
194
|
-
if (input) {
|
|
195
|
-
input.focus();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
} else {
|
|
199
|
-
this.resetEditorRenderer();
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Adjusts the content after scrolling and initiates a repaint of the component.
|
|
207
|
-
*
|
|
208
|
-
* @return {void}
|
|
209
|
-
*/
|
|
210
|
-
repaint() {
|
|
211
|
-
this.adjustAfterScrolling();
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Repaints the UI by resetting the size of the wrapper div,
|
|
217
|
-
* adjusting the containers and rows, and performing additional adjustments
|
|
218
|
-
* after scrolling.
|
|
219
|
-
*
|
|
220
|
-
* @return {void} This method does not return any value.
|
|
221
|
-
*/
|
|
222
|
-
repaintHard() {
|
|
223
|
-
this.resetSizeOfWrapperDiv();
|
|
224
|
-
this.adjustContainersAndRows();
|
|
225
|
-
this.adjustAfterScrolling();
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Adjusts the table after scrolling. This method performs various adjustments
|
|
230
|
-
* to the table's appearance and behavior after a scroll event occurs.
|
|
231
|
-
*/
|
|
232
|
-
override adjustAfterScrolling() {
|
|
233
|
-
for (const cleaning of this.removables) {
|
|
234
|
-
cleaning.remove();
|
|
235
|
-
}
|
|
236
|
-
this.hideHoverRow();
|
|
237
|
-
this.hideHoverColumn();
|
|
238
|
-
|
|
239
|
-
this.scrollTop = this.scrollViewport.scrollTop;
|
|
240
|
-
this.scrollLeft = this.scrollViewport.scrollLeft;
|
|
241
|
-
this.debounce(this.checkForScrollPosSaving.bind(this));
|
|
242
|
-
|
|
243
|
-
this.scrollFactorY = this.scrollTop / (this.scrollViewport.scrollHeight - this.scrollViewport.clientHeight);
|
|
244
|
-
this.scrollFactorX = this.scrollLeft / (this.scrollViewport.scrollWidth - this.scrollViewport.clientWidth);
|
|
245
|
-
|
|
246
|
-
if (isNaN(this.scrollFactorY)) {
|
|
247
|
-
this.scrollFactorY = 0;
|
|
248
|
-
}
|
|
249
|
-
if (isNaN(this.scrollFactorX)) {
|
|
250
|
-
this.scrollFactorX = 0;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
this.adjustBody();
|
|
254
|
-
this.adjustArea('footer');
|
|
255
|
-
this.adjustArea('header');
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
if (this.tableOptions.tableTopBorderVisible) {
|
|
259
|
-
this.removables.push(this.dom.addHorizontalBorder(
|
|
260
|
-
new GeoData(0, this.hostElement.clientWidth, 1, 0),
|
|
261
|
-
this.hostElement,
|
|
262
|
-
'ge-table-border'));
|
|
263
|
-
}
|
|
264
|
-
if (this.tableOptions.tableBottomBorderVisible) {
|
|
265
|
-
this.removables.push(this.dom.addHorizontalBorder(
|
|
266
|
-
new GeoData(0, this.hostElement.clientWidth, 1, this.hostElement.clientHeight - 1),
|
|
267
|
-
this.hostElement,
|
|
268
|
-
'ge-table-border'));
|
|
269
|
-
}
|
|
270
|
-
// The border between east and center in header/body/footer (full height):
|
|
271
|
-
if (this.tableModel.getFixedLeftColumnCount() > 0) {
|
|
272
|
-
this.removables.push(this.dom.addVerticalBorder(
|
|
273
|
-
new GeoData(this.areaBodyWest.child.clientWidth, 1, this.hostElement.clientHeight, 0),
|
|
274
|
-
this.hostElement,
|
|
275
|
-
'ge-table-body-west-vertical-border'));
|
|
276
|
-
}
|
|
277
|
-
// The border between header and body (full width):
|
|
278
|
-
if (this.tableModel.getAreaModel('header')?.getRowCount() > 0) {
|
|
279
|
-
this.removables.push(this.dom.addHorizontalBorder(
|
|
280
|
-
new GeoData(0, this.hostElement.clientWidth, 1, this.areaHeaderCenter.child.clientHeight),
|
|
281
|
-
this.hostElement,
|
|
282
|
-
'ge-table-body-west-vertical-border'));
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Checks if the scroll position should be saved and saves it.
|
|
288
|
-
*
|
|
289
|
-
* @return {void}
|
|
290
|
-
*/
|
|
291
|
-
checkForScrollPosSaving() {
|
|
292
|
-
if (this.storeScrollPosStateService
|
|
293
|
-
&& this.tableOptions?.autoRestoreOptions?.autoRestoreScrollPosition) {
|
|
294
|
-
this.storeScrollPosStateService.updateScrollOffset([this.scrollLeft, this.scrollTop]);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Updates the cells in the table with the provided values and optionally repaints all cells.
|
|
300
|
-
*
|
|
301
|
-
* @param {TableCellUpdateEventIf[]} events - The array of events containing information about the cells to update.
|
|
302
|
-
* @param {boolean} repaintAll - Optional. If true, repaints all cells after updating. Defaults to false.
|
|
303
|
-
*
|
|
304
|
-
* @returns {void}
|
|
305
|
-
*/
|
|
306
|
-
updateCells(
|
|
307
|
-
events: TableCellUpdateEventIf[],
|
|
308
|
-
repaintAll: boolean = false) {
|
|
309
|
-
|
|
310
|
-
events.forEach(evt => {
|
|
311
|
-
this.tableModel
|
|
312
|
-
.getAreaModel(evt.area)
|
|
313
|
-
.setValue(evt.rowIndex, evt.columnIndex, evt.value);
|
|
314
|
-
if (!repaintAll) {
|
|
315
|
-
this.rerenderCellContent(evt);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
);
|
|
319
|
-
if (repaintAll) {
|
|
320
|
-
this.repaint();
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* Rerenders the content of a table cell based on the given parameters.
|
|
326
|
-
*
|
|
327
|
-
* @param {TableCellUpdateEventIf} area - The area of the table.
|
|
328
|
-
* @param {number} rowIndex - The index of the row.
|
|
329
|
-
* @param {number} columnIndex - The index of the column.
|
|
330
|
-
* @param {any} value - The new value to be displayed in the cell.
|
|
331
|
-
* @param {string[]} cssClasses - An array of CSS classes to be applied to the cell.
|
|
332
|
-
*/
|
|
333
|
-
public rerenderCellContent(
|
|
334
|
-
{ area, rowIndex, columnIndex, value, cssClasses }: TableCellUpdateEventIf
|
|
335
|
-
) {
|
|
336
|
-
const areaModel = this.tableModel.getAreaModel(area);
|
|
337
|
-
const selector = 'div[data-col-index="' + columnIndex + '"][data-row-index="' + rowIndex + '"][data-area="' + area + '"]';
|
|
338
|
-
const cell = document.querySelector(selector) as HTMLDivElement;
|
|
339
|
-
|
|
340
|
-
if (cell) {
|
|
341
|
-
let fn: RendererCleanupFnType | undefined = undefined;
|
|
342
|
-
const editor = this.editorRenderer && this.editorRendererRow === rowIndex && this.editorRendererColumn === columnIndex;
|
|
343
|
-
const cellRenderer = (editor) ? this.editorRenderer : areaModel.getCellRenderer(rowIndex, columnIndex);
|
|
344
|
-
|
|
345
|
-
cell.innerText = '';
|
|
346
|
-
this.applyCssClasses(cell, cssClasses);
|
|
347
|
-
if (cellRenderer) {
|
|
348
|
-
fn = cellRenderer.render(cell, rowIndex, columnIndex, area, areaModel, value, this.dom.domService);
|
|
349
|
-
if (fn) {
|
|
350
|
-
this.cleanupFunctions[area].push(fn);
|
|
351
|
-
}
|
|
352
|
-
} else {
|
|
353
|
-
const text = `${value}`;
|
|
354
|
-
this.dom.addLabelDiv(cell, text, false, rowIndex, columnIndex, area);
|
|
355
|
-
}
|
|
356
|
-
const classes = areaModel.getCustomClassesAt(rowIndex, columnIndex);
|
|
357
|
-
if (classes.length) {
|
|
358
|
-
this.dom.addClasses(classes, cell);
|
|
359
|
-
}
|
|
360
|
-
const styles = areaModel.getCustomStyleAt(rowIndex, columnIndex);
|
|
361
|
-
if (styles) {
|
|
362
|
-
for (const css in styles) {
|
|
363
|
-
this.dom.setStyle(cell, css, styles[css]);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Stores the widths of all columns in the table.
|
|
371
|
-
*
|
|
372
|
-
* @protected
|
|
373
|
-
* @function storeColumnWidths
|
|
374
|
-
* @returns {void}
|
|
375
|
-
*/
|
|
376
|
-
protected storeColumnWidths() {
|
|
377
|
-
const columnDefs = this.tableModel.getColumnDefs();
|
|
378
|
-
if (columnDefs?.length) {
|
|
379
|
-
this.storedColumnWidths = columnDefs.map((_cd, idx) => this.tableModel.getColumnWidth(idx));
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
protected getAreaAndSideIdentByAttr(srcElement: HTMLElement): [AreaIdent | undefined, SideIdent | undefined] {
|
|
384
|
-
if (srcElement) {
|
|
385
|
-
const dataArea = this.getStringByAttr(srcElement, 'data-area');
|
|
386
|
-
const dataSide = this.getStringByAttr(srcElement, 'data-side');
|
|
387
|
-
if (dataSide && dataArea) {
|
|
388
|
-
return [dataArea, dataSide] as [AreaIdent, SideIdent];
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
return [undefined, undefined];
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
/**
|
|
395
|
-
* Retrieves the specified area from the grid layout.
|
|
396
|
-
*
|
|
397
|
-
* @param {string} areaIdent - The identifier for the area ('header', 'body', or 'footer').
|
|
398
|
-
* @param {string} sideIdent - The identifier for the side of the area ('west', 'center', or 'east').
|
|
399
|
-
* @protected
|
|
400
|
-
* @returns {HTMLElement} - The requested area element.
|
|
401
|
-
* @throws {Error} - If the area identifier or side identifier is incorrect.
|
|
402
|
-
*/
|
|
403
|
-
protected getArea(areaIdent: AreaIdent, sideIdent: SideIdent): DivScope {
|
|
404
|
-
if (areaIdent === 'header') {
|
|
405
|
-
if (sideIdent === 'west') return this.areaHeaderWest;
|
|
406
|
-
if (sideIdent === 'center') return this.areaHeaderCenter;
|
|
407
|
-
if (sideIdent === 'east') return this.areaHeaderEast;
|
|
408
|
-
} else if (areaIdent === 'body') {
|
|
409
|
-
if (sideIdent === 'west') return this.areaBodyWest;
|
|
410
|
-
if (sideIdent === 'center') return this.areaBodyCenter;
|
|
411
|
-
if (sideIdent === 'east') return this.areaBodyEast;
|
|
412
|
-
} else if (areaIdent === 'footer') {
|
|
413
|
-
if (sideIdent === 'west') return this.areaFooterWest;
|
|
414
|
-
if (sideIdent === 'center') return this.areaFooterCenter;
|
|
415
|
-
if (sideIdent === 'east') return this.areaFooterEast;
|
|
416
|
-
}
|
|
417
|
-
throw Error(`Wrong area identifier: row:${areaIdent}, col:${sideIdent}`);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
/**
|
|
421
|
-
* Adjusts the body of the table.
|
|
422
|
-
*
|
|
423
|
-
* @protected
|
|
424
|
-
* @return {void}
|
|
425
|
-
*/
|
|
426
|
-
protected adjustBody() {
|
|
427
|
-
const virtualRowDivTopF1 = this.areaBodyCenterGeo.height - this.tableModel.getContentHeightInPixel();
|
|
428
|
-
const virtualRowDivTop = this.scrollFactorY * virtualRowDivTopF1;
|
|
429
|
-
|
|
430
|
-
this.dom.setStyle(this.contentDiv, 'top', `${this.scrollTop}px`);
|
|
431
|
-
this.dom.setStyle(this.contentDiv, 'left', `${this.scrollViewport.scrollLeft}px`);
|
|
432
|
-
|
|
433
|
-
this.adjustArea('body', virtualRowDivTop);
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
/**
|
|
437
|
-
* Returns a number value extracted from the specified attribute of the source element.
|
|
438
|
-
*
|
|
439
|
-
* @param {HTMLElement} srcElement - The source element from which to extract the attribute value.
|
|
440
|
-
* @param {string} key - The attribute key to extract the value from.
|
|
441
|
-
* @returns {number} - The extracted number value, or -1 if the attribute was not found or not a valid number.
|
|
442
|
-
* @protected
|
|
443
|
-
*/
|
|
444
|
-
protected getNumberByAttr(srcElement: HTMLElement, key: string): number {
|
|
445
|
-
if (srcElement) {
|
|
446
|
-
const attr = srcElement.closest('[' + key + ']')?.getAttribute(key);
|
|
447
|
-
if (attr) return Number(attr);
|
|
448
|
-
}
|
|
449
|
-
return -1;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* Retrieves the value of the specified attribute from the nearest ancestor element that has the attribute.
|
|
455
|
-
*
|
|
456
|
-
* @param {HTMLElement} srcElement - The source element from which to start searching for the nearest ancestor element.
|
|
457
|
-
* @param {string} key - The name of the attribute to retrieve.
|
|
458
|
-
* @returns {string} The value of the specified attribute, or an empty string if the attribute is not found.
|
|
459
|
-
* @protected
|
|
460
|
-
*/
|
|
461
|
-
protected getStringByAttr(srcElement: HTMLElement, key: string): string {
|
|
462
|
-
if (srcElement) {
|
|
463
|
-
const attr = srcElement.closest('[' + key + ']')?.getAttribute(key);
|
|
464
|
-
if (attr) return attr;
|
|
465
|
-
}
|
|
466
|
-
return '';
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
/**
|
|
471
|
-
* Adjusts the layout and positioning of the specified area in the table.
|
|
472
|
-
* This method is used internally and should not be called directly.
|
|
473
|
-
*
|
|
474
|
-
* @param {AreaIdent} areaIdent - The identifier of the area to adjust (e.g. header, body, footer).
|
|
475
|
-
* @param {number} [yStart=0] - The starting y-position for the layout adjustments.
|
|
476
|
-
* @protected
|
|
477
|
-
*/
|
|
478
|
-
protected adjustArea(areaIdent: AreaIdent, yStart: number = 0) {
|
|
479
|
-
const westArea = this.getArea(areaIdent, 'west');
|
|
480
|
-
const centerArea = this.getArea(areaIdent, 'center');
|
|
481
|
-
const eastArea = this.getArea(areaIdent, 'east');
|
|
482
|
-
const divHeight = centerArea.child.clientHeight;
|
|
483
|
-
|
|
484
|
-
westArea.child.innerText = '';
|
|
485
|
-
centerArea.child.innerText = '';
|
|
486
|
-
eastArea.child.innerText = '';
|
|
487
|
-
const left = 0;
|
|
488
|
-
const width = this.areaBodyCenterGeo.width;
|
|
489
|
-
const padding = this.tableModel.getPadding();
|
|
490
|
-
const areaModel = this.tableModel.getAreaModel(areaIdent);
|
|
491
|
-
const rowCount = areaModel.getRowCount();
|
|
492
|
-
|
|
493
|
-
while (this.cleanupFunctions[areaIdent].length) {
|
|
494
|
-
const fn = this.cleanupFunctions[areaIdent].shift();
|
|
495
|
-
if (fn) {
|
|
496
|
-
fn();
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
let y = yStart;
|
|
500
|
-
|
|
501
|
-
const columnCount = this.tableModel.getColumnCount();
|
|
502
|
-
const fixedRightColumnCount = this.tableModel.getFixedRightColumnCount();
|
|
503
|
-
const fixedLeftColumnCount = this.tableModel.getFixedLeftColumnCount();
|
|
504
|
-
|
|
505
|
-
for (let index = 0; index < rowCount; index++) {
|
|
506
|
-
const top = y;
|
|
507
|
-
const lastRowOfModel = index === rowCount - 1;
|
|
508
|
-
const height = this.tableModel.getRowHeight(areaIdent, index);
|
|
509
|
-
|
|
510
|
-
if (top + height > 0) {
|
|
511
|
-
// It's not scrolled out on top:
|
|
512
|
-
// Visible!
|
|
513
|
-
this.firstVisibleRowIndex = index;
|
|
514
|
-
|
|
515
|
-
// center -------------------------------------------
|
|
516
|
-
let geo = { left, width, height, top, index };
|
|
517
|
-
let rowDiv = this.dom.addRowDiv(centerArea, geo, index, areaIdent, 'center');
|
|
518
|
-
const centerStartCol = fixedLeftColumnCount;
|
|
519
|
-
|
|
520
|
-
this.adjustColumnsToRowParent({
|
|
521
|
-
areaIdent,
|
|
522
|
-
sideIdent: 'center',
|
|
523
|
-
areaModel,
|
|
524
|
-
geo,
|
|
525
|
-
parent: rowDiv,
|
|
526
|
-
rowIndex: index,
|
|
527
|
-
columnIndexStart: centerStartCol,
|
|
528
|
-
columnIndexEnd: columnCount - fixedRightColumnCount - 1,
|
|
529
|
-
verticalFixed: false,
|
|
530
|
-
lastRowOfModel
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
// west -------------------------------------------
|
|
534
|
-
if (padding.left > 0) {
|
|
535
|
-
geo = { left, width: this.areaBodyWestGeo.width, height, top, index };
|
|
536
|
-
rowDiv = this.dom.addRowDiv(westArea, geo, index, areaIdent, 'west');
|
|
537
|
-
this.adjustColumnsToRowParent({
|
|
538
|
-
areaIdent,
|
|
539
|
-
sideIdent: 'west',
|
|
540
|
-
areaModel,
|
|
541
|
-
geo,
|
|
542
|
-
parent: rowDiv,
|
|
543
|
-
rowIndex: index,
|
|
544
|
-
columnIndexStart: 0,
|
|
545
|
-
columnIndexEnd: centerStartCol - 1,
|
|
546
|
-
verticalFixed: true,
|
|
547
|
-
lastRowOfModel
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
// east -------------------------------------------
|
|
552
|
-
if (padding.right > 0) {
|
|
553
|
-
geo = { left, width: this.areaBodyEastGeo.width, height, top, index };
|
|
554
|
-
rowDiv = this.dom.addRowDiv(eastArea, geo, index, areaIdent, 'east');
|
|
555
|
-
this.adjustColumnsToRowParent({
|
|
556
|
-
areaIdent,
|
|
557
|
-
sideIdent: 'east',
|
|
558
|
-
areaModel,
|
|
559
|
-
geo,
|
|
560
|
-
parent: rowDiv,
|
|
561
|
-
rowIndex: index,
|
|
562
|
-
columnIndexStart: columnCount - fixedRightColumnCount,
|
|
563
|
-
columnIndexEnd: columnCount - 1,
|
|
564
|
-
verticalFixed: true,
|
|
565
|
-
lastRowOfModel
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// "collapse / expand all" event handler action attribute:
|
|
570
|
-
if (areaIdent === 'header' && this.tree && index === rowCount - 1) {
|
|
571
|
-
const div =
|
|
572
|
-
this.dom.applyStyle(
|
|
573
|
-
this.dom.setAttribute(
|
|
574
|
-
this.dom.addDiv(rowDiv, new GeoData(16, 20, 20, 8)),
|
|
575
|
-
'data-ge-action', 'toggleExpandCollapseAll'
|
|
576
|
-
),
|
|
577
|
-
{ 'cursor': 'pointer' }
|
|
578
|
-
);
|
|
579
|
-
const treeOptionsArrow = this.tableOptions.treeOptions.arrowExpandCollapseAll;
|
|
580
|
-
if (treeOptionsArrow) {
|
|
581
|
-
const textElement = this.dom.domService.createText(treeOptionsArrow.content);
|
|
582
|
-
this.dom.domService.appendChild(div, textElement);
|
|
583
|
-
if (treeOptionsArrow.style) {
|
|
584
|
-
this.dom.applyStyleString(div, treeOptionsArrow.style);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
}
|
|
590
|
-
y = y + height;
|
|
591
|
-
// lastVisibleRowIndex = index;
|
|
592
|
-
if (y > divHeight) { // + 1000) {
|
|
593
|
-
break;
|
|
594
|
-
}
|
|
595
|
-
} // for
|
|
596
|
-
|
|
597
|
-
// We draw the big colspan and rowspan cells at the end.
|
|
598
|
-
// This fixes the 'half cutted big cell' problem:
|
|
599
|
-
if (this.colAndRowspanModels && this.colAndRowspanModels[areaIdent]) {
|
|
600
|
-
// draw col/rowspan cells again:
|
|
601
|
-
const ranges = this.colAndRowspanModels[areaIdent]?.getRanges() ?? [];
|
|
602
|
-
if (ranges.length) {
|
|
603
|
-
|
|
604
|
-
for (const range of ranges) {
|
|
605
|
-
let xStart = 0;
|
|
606
|
-
let child: HTMLDivElement = centerArea.child;
|
|
607
|
-
let sideIdent: SideIdent = 'center';
|
|
608
|
-
if (range.c1 < fixedLeftColumnCount) {
|
|
609
|
-
// West:
|
|
610
|
-
child = westArea.child;
|
|
611
|
-
sideIdent = 'west';
|
|
612
|
-
} else if (fixedRightColumnCount > 0 && range.c1 >= columnCount - fixedRightColumnCount) {
|
|
613
|
-
// East:
|
|
614
|
-
child = eastArea.child;
|
|
615
|
-
sideIdent = 'east';
|
|
616
|
-
} else {
|
|
617
|
-
// Center:
|
|
618
|
-
const virtualRowDivLeftF1 = this.areaBodyCenterGeo.width - this.tableModel.getContentWidthInPixel();
|
|
619
|
-
xStart = (this.scrollFactorX * virtualRowDivLeftF1) - this.areaBodyWestGeo.width;
|
|
620
|
-
sideIdent = 'center';
|
|
621
|
-
}
|
|
622
|
-
this.drawBigCell(range, xStart, yStart, areaModel, child, sideIdent);
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
/**
|
|
629
|
-
* Draws big cells (rowspan and or colspan) in body/center
|
|
630
|
-
* @param range CellRange
|
|
631
|
-
* @param xStart X position in pixel for top left corner
|
|
632
|
-
* @param yStart Y position in pixel for top left corner
|
|
633
|
-
* @param areaModel AreaModelIf
|
|
634
|
-
* @param parentDiv Parent div as HTMLDivElement
|
|
635
|
-
* @param sideIdent SideIdent (west,center,east)
|
|
636
|
-
* @protected
|
|
637
|
-
*/
|
|
638
|
-
protected drawBigCell(
|
|
639
|
-
range: CellRange,
|
|
640
|
-
xStart: number,
|
|
641
|
-
yStart: number,
|
|
642
|
-
areaModel: AreaModelIf,
|
|
643
|
-
parentDiv: HTMLDivElement,
|
|
644
|
-
sideIdent: SideIdent) {
|
|
645
|
-
|
|
646
|
-
const y1 = yStart + this.getRowHeights(0, range.r1 - 1, areaModel).reduce((a, b) => a + b, 0);
|
|
647
|
-
|
|
648
|
-
const columnCount = this.tableModel.getColumnCount();
|
|
649
|
-
const fixedRightColumnCount = this.tableModel.getFixedRightColumnCount();
|
|
650
|
-
let firstColIdx = 0;
|
|
651
|
-
if (fixedRightColumnCount > 0 && range.c1 >= columnCount - fixedRightColumnCount) {
|
|
652
|
-
// We are on the (fixed) east side, so we have to fix firstColIdx:
|
|
653
|
-
firstColIdx = columnCount - fixedRightColumnCount;
|
|
654
|
-
}
|
|
655
|
-
const x1 = xStart + this.getColumnWidths(firstColIdx, range.c1 - 1).reduce((a, b) => a + b, 0);
|
|
656
|
-
|
|
657
|
-
const h = this.getRowHeights(range.r1, range.r2, areaModel).reduce((a, b) => a + b, 0);
|
|
658
|
-
const w = this.getColumnWidths(range.c1, range.c2).reduce((a, b) => a + b, 0);
|
|
659
|
-
|
|
660
|
-
let cellSelected = false;
|
|
661
|
-
const selectionModel = this.getSelectionModel ? this.getSelectionModel() : undefined;
|
|
662
|
-
if (selectionModel) {
|
|
663
|
-
const count = selectionModel.getSelectionCount(range.r1, range.c1);
|
|
664
|
-
cellSelected = count > 0;
|
|
665
|
-
}
|
|
666
|
-
if (range.gammaRange) {
|
|
667
|
-
// TODO render hierarchy cell
|
|
668
|
-
// console.info('TODO here', range);
|
|
669
|
-
|
|
670
|
-
this.renderCell({
|
|
671
|
-
areaModel,
|
|
672
|
-
areaIdent: areaModel.areaIdent,
|
|
673
|
-
sideIdent,
|
|
674
|
-
rowIndex: range.r1,
|
|
675
|
-
columnIndex: range.c1,
|
|
676
|
-
left: x1,
|
|
677
|
-
top: y1,
|
|
678
|
-
width: w,
|
|
679
|
-
height: h,
|
|
680
|
-
parent: parentDiv,
|
|
681
|
-
cellSelected,
|
|
682
|
-
lastRowOfModel: true,
|
|
683
|
-
gammaRange: range.gammaRange
|
|
684
|
-
});
|
|
685
|
-
} else {
|
|
686
|
-
|
|
687
|
-
this.renderCell({
|
|
688
|
-
areaModel,
|
|
689
|
-
areaIdent: areaModel.areaIdent,
|
|
690
|
-
sideIdent,
|
|
691
|
-
rowIndex: range.r1,
|
|
692
|
-
columnIndex: range.c1,
|
|
693
|
-
left: x1,
|
|
694
|
-
top: y1,
|
|
695
|
-
width: w,
|
|
696
|
-
height: h,
|
|
697
|
-
parent: parentDiv,
|
|
698
|
-
cellSelected,
|
|
699
|
-
lastRowOfModel: true,
|
|
700
|
-
gammaRange: range.gammaRange
|
|
701
|
-
});
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
if (areaModel.areaIdent === 'header' && this.tableOptions.columnsResizable) {
|
|
705
|
-
this.renderHeaderCellResizeHandle({
|
|
706
|
-
rowIndex: range.r1,
|
|
707
|
-
columnIndex: range.c1,
|
|
708
|
-
cellLeft: x1,
|
|
709
|
-
cellTop: y1,
|
|
710
|
-
cellWidth: w,
|
|
711
|
-
cellHeight: h,
|
|
712
|
-
parent: parentDiv
|
|
713
|
-
});
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
/**
|
|
718
|
-
* Finds the row index of an important rowspan cell in a given area model.
|
|
719
|
-
*
|
|
720
|
-
* @param {AreaModelIf} areaModel - The area model to search in.
|
|
721
|
-
* @param {number} rowIndex - The current row index.
|
|
722
|
-
* @param {number} colIndex - The current column index.
|
|
723
|
-
* @returns {number} - The row index of the important rowspan cell, or -1 if not found.
|
|
724
|
-
* @protected
|
|
725
|
-
*/
|
|
726
|
-
protected findRowOfImportantRowspanCell(areaModel: AreaModelIf, rowIndex: number, colIndex: number): number {
|
|
727
|
-
const maxRowspan = areaModel.getMaxRowspan();
|
|
728
|
-
for (let r = rowIndex - 1; r > -1; r--) {
|
|
729
|
-
const rowspan = areaModel.getRowspanAt(r, colIndex);
|
|
730
|
-
if (rowspan > 1 && r + rowspan + 1 >= rowIndex) {
|
|
731
|
-
return r;
|
|
732
|
-
}
|
|
733
|
-
if (rowIndex - r > maxRowspan) {
|
|
734
|
-
return -1;
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
return -1;
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
/**
|
|
741
|
-
* Adjusts the columns to fit the width of the row's parent element.
|
|
742
|
-
*
|
|
743
|
-
* @param {ArgsAdjustColumnsToRowParentParams} params - The parameters for adjusting the columns.
|
|
744
|
-
* @protected
|
|
745
|
-
* @return {void}
|
|
746
|
-
*/
|
|
747
|
-
protected adjustColumnsToRowParent(
|
|
748
|
-
{
|
|
749
|
-
areaIdent,
|
|
750
|
-
sideIdent,
|
|
751
|
-
areaModel,
|
|
752
|
-
geo,
|
|
753
|
-
parent,
|
|
754
|
-
rowIndex,
|
|
755
|
-
columnIndexStart,
|
|
756
|
-
columnIndexEnd,
|
|
757
|
-
verticalFixed = false,
|
|
758
|
-
lastRowOfModel = false
|
|
759
|
-
}: ArgsAdjustColumnsToRowParentParams
|
|
760
|
-
): void {
|
|
761
|
-
|
|
762
|
-
// if (areaIdent==='header'){
|
|
763
|
-
// console.info('################## rowIndex:' + rowIndex)
|
|
764
|
-
// console.info('##################')
|
|
765
|
-
// }
|
|
766
|
-
|
|
767
|
-
this.scrollViewportLeft = this.scrollViewport.scrollLeft;
|
|
768
|
-
let virtualRowDivLeft = 0;
|
|
769
|
-
if (!verticalFixed) {
|
|
770
|
-
const virtualRowDivLeftF1 = (this.areaBodyCenterGeo.width) - this.tableModel.getContentWidthInPixel();
|
|
771
|
-
virtualRowDivLeft = this.scrollFactorX * virtualRowDivLeftF1;
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
const top = 0;
|
|
775
|
-
const renderSelection = !!(areaIdent === 'body' && sideIdent);
|
|
776
|
-
|
|
777
|
-
let x = virtualRowDivLeft;
|
|
778
|
-
for (let index = columnIndexStart; index <= columnIndexEnd; index++) {
|
|
779
|
-
const left = x;
|
|
780
|
-
const w = this.tableModel.getColumnWidth(index);
|
|
781
|
-
if (w > 0 && left + w > 0) {
|
|
782
|
-
// Visible! Render cell div:
|
|
783
|
-
|
|
784
|
-
// calc height:
|
|
785
|
-
let height = geo.height;
|
|
786
|
-
const rowspan = areaModel.getRowspanAt(rowIndex, index);
|
|
787
|
-
const colspan = areaModel.getColspanAt(rowIndex, index);
|
|
788
|
-
// if (areaIdent==='header') {
|
|
789
|
-
// console.info(rowIndex+'/'+index, rowspan+'_'+colspan)
|
|
790
|
-
// }
|
|
791
|
-
|
|
792
|
-
if (rowspan > 1) {
|
|
793
|
-
height = this.getRowHeights(rowIndex, rowIndex + rowspan - 1, areaModel).reduce((a, b) => a + b, 0);
|
|
794
|
-
}
|
|
795
|
-
|
|
796
|
-
let width = w;
|
|
797
|
-
if (colspan > 1) {
|
|
798
|
-
width = this.getColumnWidths(index, index + colspan - 1).reduce((a, b) => a + b, 0);
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
let skip = false;
|
|
802
|
-
if (this.colAndRowspanModels && this.colAndRowspanModels[areaIdent]) {
|
|
803
|
-
if (this.colAndRowspanModels[areaIdent]?.isInRange(rowIndex, index)) {
|
|
804
|
-
skip = true; // for the body area we don't want to render the small single cells
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
if (this.draggingTargetColumnIndex === index
|
|
809
|
-
&& areaIdent !== 'header') {
|
|
810
|
-
// For a running drag and drop action:
|
|
811
|
-
this.renderDragTargetDiv(parent, left, top, width, height);
|
|
812
|
-
const geo1 = { left, top, width, height };
|
|
813
|
-
this.dom.addColumnBorderDivs(this.tableOptions, parent, geo1, areaIdent, sideIdent);
|
|
814
|
-
|
|
815
|
-
} else {
|
|
816
|
-
const cellSelected = this.renderSelectedBackgroundDiv(skip, renderSelection, sideIdent, areaModel, rowIndex, index, parent, left, top, width, height);
|
|
817
|
-
|
|
818
|
-
const gammaCells = 'gammaCells' in areaModel;
|
|
819
|
-
if (gammaCells && areaModel.getValueAt(rowIndex, index)) {
|
|
820
|
-
skip = false;
|
|
821
|
-
}
|
|
822
|
-
if (!skip) {
|
|
823
|
-
this.renderCell({
|
|
824
|
-
areaModel,
|
|
825
|
-
areaIdent,
|
|
826
|
-
sideIdent,
|
|
827
|
-
rowIndex,
|
|
828
|
-
columnIndex: index,
|
|
829
|
-
left,
|
|
830
|
-
top,
|
|
831
|
-
width,
|
|
832
|
-
height,
|
|
833
|
-
parent,
|
|
834
|
-
cellSelected,
|
|
835
|
-
lastRowOfModel,
|
|
836
|
-
gammaRange: true
|
|
837
|
-
});
|
|
838
|
-
}
|
|
839
|
-
if (areaIdent === 'header' && this.tableOptions.columnsResizable) {
|
|
840
|
-
this.renderHeaderCellResizeHandle({
|
|
841
|
-
rowIndex: rowIndex,
|
|
842
|
-
columnIndex: index,
|
|
843
|
-
cellLeft: left,
|
|
844
|
-
cellTop: top,
|
|
845
|
-
cellWidth: width,
|
|
846
|
-
cellHeight: height,
|
|
847
|
-
parent: parent
|
|
848
|
-
});
|
|
849
|
-
}
|
|
850
|
-
}
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
x = x + w;
|
|
854
|
-
if (x > this.areaBodyCenterGeo.width) {
|
|
855
|
-
break;
|
|
856
|
-
}
|
|
857
|
-
}
|
|
858
|
-
// Right vertical border:
|
|
859
|
-
if (this.tableOptions.verticalBorderVisible) {
|
|
860
|
-
this.dom.addVerticalBorder(new GeoData(x - 1, 1, geo.height, 0), parent);
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
/**
|
|
866
|
-
* Retrieves the column index of the tree arrow column in the table.
|
|
867
|
-
*
|
|
868
|
-
* @protected
|
|
869
|
-
*
|
|
870
|
-
* @returns {0 | 1} The column index of the tree arrow column.
|
|
871
|
-
* Returns 0 if the checkbox is not visible,
|
|
872
|
-
* otherwise returns 1.
|
|
873
|
-
*/
|
|
874
|
-
protected getTreeArrowColumnIndex(): 0 | 1 {
|
|
875
|
-
if (this.tableOptions.showCheckboxWihoutExtraColumn) {
|
|
876
|
-
return 0;
|
|
877
|
-
}
|
|
878
|
-
if (this.tableModel.isRowCheckboxVisible()) {
|
|
879
|
-
return 1;
|
|
880
|
-
}
|
|
881
|
-
return 0;
|
|
882
|
-
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
protected addAndRenderCellDiv(
|
|
886
|
-
{
|
|
887
|
-
areaModel,
|
|
888
|
-
areaIdent,
|
|
889
|
-
sideIdent,
|
|
890
|
-
rowIndex,
|
|
891
|
-
index,
|
|
892
|
-
left,
|
|
893
|
-
width,
|
|
894
|
-
height,
|
|
895
|
-
top,
|
|
896
|
-
parent,
|
|
897
|
-
lastRowOfModel
|
|
898
|
-
}: ArgsRenderCellDiv): [HTMLDivElement, RendererCleanupFnType | undefined] {
|
|
899
|
-
|
|
900
|
-
const editor = this.editorRenderer && this.editorRendererRow === rowIndex && this.editorRendererColumn === index;
|
|
901
|
-
const cellRenderer = (editor) ? this.editorRenderer : areaModel.getCellRenderer(rowIndex, index);
|
|
902
|
-
const geo = { left, width, height, top, index };
|
|
903
|
-
const rowObject = areaModel.getRowByIndex(rowIndex);
|
|
904
|
-
let treeArrow: TreeArrowType = 'none';
|
|
905
|
-
|
|
906
|
-
const arrowIndexOk = index === this.getTreeArrowColumnIndex();
|
|
907
|
-
|
|
908
|
-
if (arrowIndexOk && isTreeRow(rowObject)) {
|
|
909
|
-
const tr = rowObject as TreeRow<any>;
|
|
910
|
-
if (tr.children?.length) {
|
|
911
|
-
if (tr.expanded) {
|
|
912
|
-
treeArrow = 'expanded';
|
|
913
|
-
} else {
|
|
914
|
-
treeArrow = 'collapsed';
|
|
915
|
-
}
|
|
916
|
-
} else {
|
|
917
|
-
treeArrow = 'hidden';
|
|
918
|
-
}
|
|
919
|
-
}
|
|
920
|
-
|
|
921
|
-
let sortState = undefined;
|
|
922
|
-
if (areaIdent === 'header') {
|
|
923
|
-
const columnDef = this.tableModel.getColumnDef(index);
|
|
924
|
-
if (!columnDef?.sortIconVisible || columnDef?.sortIconVisible()) {
|
|
925
|
-
sortState = columnDef?.sortState;
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
|
|
929
|
-
const val = areaModel.getValueAt(rowIndex, index);
|
|
930
|
-
const text = cellRenderer ? '' : `${val}`;
|
|
931
|
-
const checkedType = areaModel.isRowChecked(rowIndex);
|
|
932
|
-
const cell = this.dom.addColumnDiv(
|
|
933
|
-
{
|
|
934
|
-
parent,
|
|
935
|
-
geo,
|
|
936
|
-
rowIndex,
|
|
937
|
-
columnIndex: index,
|
|
938
|
-
areaIdent,
|
|
939
|
-
sideIdent,
|
|
940
|
-
text,
|
|
941
|
-
treeArrow,
|
|
942
|
-
tableOptions: this.tableOptions,
|
|
943
|
-
checkedType,
|
|
944
|
-
sortState
|
|
945
|
-
});
|
|
946
|
-
|
|
947
|
-
const tooltip = areaModel.getTooltipAt(rowIndex, index);
|
|
948
|
-
if (tooltip) {
|
|
949
|
-
this.dom.setAttribute(cell, 'title', tooltip);
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
const columnDef = this.tableModel.getColumnDef(index);
|
|
953
|
-
if (columnDef && columnDef.classes[areaIdent]) {
|
|
954
|
-
this.dom.addClasses(columnDef.classes[areaIdent], cell);
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
let fn: RendererCleanupFnType | undefined = undefined;
|
|
958
|
-
if (cellRenderer) {
|
|
959
|
-
fn = cellRenderer.render(cell, rowIndex, index, areaIdent, areaModel, val, this.dom.domService);
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
const classes = areaModel.getCustomClassesAt(rowIndex, index);
|
|
963
|
-
if (classes.length) {
|
|
964
|
-
this.dom.addClasses(classes, cell);
|
|
965
|
-
}
|
|
966
|
-
|
|
967
|
-
this.dom.addColumnBorderDivs(this.tableOptions, parent, geo, areaIdent, sideIdent);
|
|
968
|
-
if (lastRowOfModel) {
|
|
969
|
-
this.dom.addHorizontalBorder({ left, width, height, top: top + height }, parent);
|
|
970
|
-
}
|
|
971
|
-
if (this.getFocusModel && areaIdent === 'body') {
|
|
972
|
-
const fm = this.getFocusModel();
|
|
973
|
-
if (fm?.hasFocus(rowIndex, index)) {
|
|
974
|
-
this.dom.addFocusBorderDivs(parent, geo, {});
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
if (areaIdent === 'header') {
|
|
978
|
-
this.dom.setAttribute(cell, 'data-ge-action', 'drag-column');
|
|
979
|
-
}
|
|
980
|
-
|
|
981
|
-
const styles = areaModel.getCustomStyleAt(rowIndex, index);
|
|
982
|
-
if (styles) {
|
|
983
|
-
for (const css in styles) {
|
|
984
|
-
this.dom.setStyle(cell, css, styles[css]);
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
return [cell, fn];
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
/**
|
|
991
|
-
* Applies CSS classes to an HTML element.
|
|
992
|
-
*
|
|
993
|
-
* @param {HTMLDivElement} ele - The HTML element to which CSS classes will be applied.
|
|
994
|
-
* @param {Object.<string, boolean>} cssClasses - An object containing CSS class names as keys and boolean values indicating whether to apply or remove the class.
|
|
995
|
-
* @protected
|
|
996
|
-
*/
|
|
997
|
-
protected applyCssClasses(ele: HTMLDivElement, cssClasses: { [key: string]: boolean } = {}) {
|
|
998
|
-
if (ele) {
|
|
999
|
-
Object.entries(cssClasses)
|
|
1000
|
-
.forEach(([key, value]) => {
|
|
1001
|
-
if (value) {
|
|
1002
|
-
this.dom.addClass(key, ele);
|
|
1003
|
-
} else {
|
|
1004
|
-
this.dom.removeClass(key, ele);
|
|
1005
|
-
}
|
|
1006
|
-
});
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
|
|
1010
|
-
/**
|
|
1011
|
-
* Retrieves the column widths of a table within a specified range.
|
|
1012
|
-
*
|
|
1013
|
-
* @param {number} startIndex - The index of the first column to retrieve the width of.
|
|
1014
|
-
* @param {number} endIndex - The index of the last column to retrieve the width of.
|
|
1015
|
-
*
|
|
1016
|
-
* @return {number[]} An array containing the widths of the columns within the specified range.
|
|
1017
|
-
*/
|
|
1018
|
-
protected getColumnWidths(startIndex: number, endIndex: number): number[] {
|
|
1019
|
-
const ret: number[] = [];
|
|
1020
|
-
for (let i = startIndex; i <= endIndex; i++) {
|
|
1021
|
-
ret.push(this.tableModel.getColumnWidth(i));
|
|
1022
|
-
}
|
|
1023
|
-
return ret;
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
/**
|
|
1027
|
-
* Retrieves the heights of rows within a specified range.
|
|
1028
|
-
*
|
|
1029
|
-
* @param {number} startIndex - The index of the first row in the range.
|
|
1030
|
-
* @param {number} endIndex - The index of the last row in the range.
|
|
1031
|
-
* @param {AreaModelIf} areaModel - The area model.
|
|
1032
|
-
* @return {number[]} - An array containing the heights of the rows within the specified range.
|
|
1033
|
-
*/
|
|
1034
|
-
protected getRowHeights(startIndex: number, endIndex: number, areaModel: AreaModelIf): number[] {
|
|
1035
|
-
const ret: number[] = [];
|
|
1036
|
-
for (let i = startIndex; i <= endIndex; i++) {
|
|
1037
|
-
ret.push(areaModel.getRowHeight(i));
|
|
1038
|
-
}
|
|
1039
|
-
return ret;
|
|
1040
|
-
}
|
|
1041
|
-
|
|
1042
|
-
/**
|
|
1043
|
-
* Adjusts the position and size of the hover row based on the mouse move event.
|
|
1044
|
-
*
|
|
1045
|
-
* @param {GeMouseEvent} mouseMoveEvent - The mouse move event.
|
|
1046
|
-
*
|
|
1047
|
-
* @return {void}
|
|
1048
|
-
*/
|
|
1049
|
-
protected adjustHoverRows(mouseMoveEvent: GeMouseEvent) {
|
|
1050
|
-
if (this.tableOptions.hoverRowVisible && mouseMoveEvent.rowIndex > -1) {
|
|
1051
|
-
const width = this.hostElement.clientWidth;
|
|
1052
|
-
const rowHeight = this.tableModel.getAreaModel('body').getRowHeight(mouseMoveEvent.rowIndex);
|
|
1053
|
-
const top = mouseMoveEvent.rowTop + this.areaHeaderCenter.parent.clientHeight - this.scrollTop;
|
|
1054
|
-
this.dom.applyStyle(this.hoverRow, {
|
|
1055
|
-
'left': '0',
|
|
1056
|
-
'top': top + 'px',
|
|
1057
|
-
'width': width + 'px',
|
|
1058
|
-
'height': rowHeight + 'px',
|
|
1059
|
-
'display': 'block'
|
|
1060
|
-
});
|
|
1061
|
-
} else {
|
|
1062
|
-
this.hideHoverRow();
|
|
1063
|
-
}
|
|
1064
|
-
}
|
|
1065
|
-
|
|
1066
|
-
/**
|
|
1067
|
-
* Hides the hover row by applying 'display: none' style to it.
|
|
1068
|
-
*
|
|
1069
|
-
* @protected
|
|
1070
|
-
* @function
|
|
1071
|
-
* @name hideHoverRow
|
|
1072
|
-
* @memberof ClassName
|
|
1073
|
-
*
|
|
1074
|
-
* @returns {void}
|
|
1075
|
-
*/
|
|
1076
|
-
protected hideHoverRow() {
|
|
1077
|
-
this.dom.applyStyle(this.hoverRow, {
|
|
1078
|
-
'display': 'none'
|
|
1079
|
-
});
|
|
1080
|
-
}
|
|
1081
|
-
|
|
1082
|
-
/**
|
|
1083
|
-
* Adjusts the position and size of the hover column based on the mouse move event.
|
|
1084
|
-
*
|
|
1085
|
-
* @param {GeMouseEvent} mouseMoveEvent - The mouse move event object.
|
|
1086
|
-
*/
|
|
1087
|
-
protected adjustHoverColumns(mouseMoveEvent: GeMouseEvent) {
|
|
1088
|
-
if (this.tableOptions.hoverColumnVisible && mouseMoveEvent.rowIndex > -1) {
|
|
1089
|
-
const height = this.hostElement.clientHeight;
|
|
1090
|
-
const width = this.tableModel.getColumnWidth(mouseMoveEvent.columnIndex);
|
|
1091
|
-
const fixedWest = this.areaBodyWestGeo.width;
|
|
1092
|
-
const left = mouseMoveEvent.columnLeft + this.tableModel.getPadding().left - this.scrollLeft - fixedWest;
|
|
1093
|
-
this.dom.applyStyle(this.hoverColumn, {
|
|
1094
|
-
'left': (left) + 'px',
|
|
1095
|
-
'top': '0px',
|
|
1096
|
-
'width': width + 'px',
|
|
1097
|
-
'height': height + 'px',
|
|
1098
|
-
'display': 'block'
|
|
1099
|
-
});
|
|
1100
|
-
} else {
|
|
1101
|
-
this.hideHoverColumn();
|
|
1102
|
-
}
|
|
1103
|
-
}
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
/**
|
|
1107
|
-
* Hide hover column.
|
|
1108
|
-
*
|
|
1109
|
-
* This method hides the hover column by applying a style of 'display: none'
|
|
1110
|
-
* to the element representing the hover column.
|
|
1111
|
-
*
|
|
1112
|
-
* @protected
|
|
1113
|
-
* @memberof ClassName
|
|
1114
|
-
*/
|
|
1115
|
-
protected hideHoverColumn() {
|
|
1116
|
-
this.dom.applyStyle(this.hoverColumn, {
|
|
1117
|
-
'display': 'none'
|
|
1118
|
-
});
|
|
1119
|
-
}
|
|
1120
|
-
|
|
1121
|
-
/**
|
|
1122
|
-
* Executes a function after a specified delay, ensuring that the function is called only once within that delay period.
|
|
1123
|
-
*
|
|
1124
|
-
* @param {() => void} fn - The function to be executed.
|
|
1125
|
-
* @param {number} [delay=1000] - The delay in milliseconds before executing the function.
|
|
1126
|
-
*
|
|
1127
|
-
* @return {undefined}
|
|
1128
|
-
*/
|
|
1129
|
-
protected debounce(fn: () => void, delay: number = 1000) {
|
|
1130
|
-
if (this.debounceTimeout) {
|
|
1131
|
-
clearTimeout(this.debounceTimeout);
|
|
1132
|
-
}
|
|
1133
|
-
this.debounceTimeout = setTimeout(fn.bind(this), delay);
|
|
1134
|
-
}
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
/**
|
|
1138
|
-
* Adjusts the dragging column during a mouse move event.
|
|
1139
|
-
*
|
|
1140
|
-
* @param {GeMouseEvent} mouseMoveEvent - The mouse move event.
|
|
1141
|
-
* @param {number} sourceColumnIndex - The index of the source column.
|
|
1142
|
-
* @param {boolean} firstDraggingRendering - Indicates if it's the first rendering of the dragging column.
|
|
1143
|
-
*/
|
|
1144
|
-
protected adjustDraggingColumn(
|
|
1145
|
-
mouseMoveEvent: GeMouseEvent,
|
|
1146
|
-
sourceColumnIndex: number,
|
|
1147
|
-
firstDraggingRendering: boolean
|
|
1148
|
-
) {
|
|
1149
|
-
if (this.dragging) {
|
|
1150
|
-
const height = this.hostElement.clientHeight;
|
|
1151
|
-
// const width = this.tableModel.getColumnWidth(sourceColumnIndex);
|
|
1152
|
-
const width = this.storedColumnWidths[sourceColumnIndex];
|
|
1153
|
-
|
|
1154
|
-
if (mouseMoveEvent.originalEvent?.clientX) {
|
|
1155
|
-
const left = mouseMoveEvent.originalEvent?.clientX - width / 2;
|
|
1156
|
-
const top = 0;
|
|
1157
|
-
const geo: GeoData = { left, width, height, top, index: sourceColumnIndex };
|
|
1158
|
-
this.dom.applyStyle(this.draggingColumn, {
|
|
1159
|
-
'background': 'rgba(128,128,128,0.2)',
|
|
1160
|
-
'display': 'block',
|
|
1161
|
-
'overfllow': 'clip',
|
|
1162
|
-
});
|
|
1163
|
-
this.dom.applyStyleInPx(this.draggingColumn, geo);
|
|
1164
|
-
if (firstDraggingRendering) {
|
|
1165
|
-
// render dragging column:
|
|
1166
|
-
this.renderContentOfDraggingColumn(geo);
|
|
1167
|
-
}
|
|
1168
|
-
}
|
|
1169
|
-
} else {
|
|
1170
|
-
this.hideDraggingColumn();
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
|
|
1174
|
-
/**
|
|
1175
|
-
* Renders the content of a dragging column.
|
|
1176
|
-
*
|
|
1177
|
-
* @param {GeoData} columnGeo - The geographic data of the column.
|
|
1178
|
-
*
|
|
1179
|
-
* @returns {number} The y-coordinate of the rendered content.
|
|
1180
|
-
*/
|
|
1181
|
-
protected renderContentOfDraggingColumn(columnGeo: GeoData) {
|
|
1182
|
-
const y = this. renderContentOfDraggingColumnForArea(columnGeo, 'header', 0);
|
|
1183
|
-
this. renderContentOfDraggingColumnForArea(columnGeo, 'body', y);
|
|
1184
|
-
// we refrain from rendering the footer:
|
|
1185
|
-
// y = this. renderContentOfDraggingColumnForArea(columnGeo, 'footer', y);
|
|
1186
|
-
}
|
|
1187
|
-
|
|
1188
|
-
/**
|
|
1189
|
-
* Renders the content of the dragging column for a specific area.
|
|
1190
|
-
*
|
|
1191
|
-
* @param {GeoData} columnGeo - The geometry data of the dragging column.
|
|
1192
|
-
* @param {AreaIdent} areaIdent - The identifier of the area.
|
|
1193
|
-
* @param {number} [y=0] - The starting y-position.
|
|
1194
|
-
* @return {number} The final y-position after rendering all the content.
|
|
1195
|
-
*/
|
|
1196
|
-
protected renderContentOfDraggingColumnForArea(
|
|
1197
|
-
columnGeo: GeoData,
|
|
1198
|
-
areaIdent: AreaIdent,
|
|
1199
|
-
y: number = 0
|
|
1200
|
-
): number {
|
|
1201
|
-
|
|
1202
|
-
const sideIdent = 'center';
|
|
1203
|
-
const areaModel = this.tableModel.getAreaModel(areaIdent);
|
|
1204
|
-
const rowCount = areaModel?.getRowCount();
|
|
1205
|
-
if (rowCount) {
|
|
1206
|
-
const columnIndex = columnGeo.index ?? 0;
|
|
1207
|
-
const parent = this.draggingColumn;
|
|
1208
|
-
|
|
1209
|
-
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
|
|
1210
|
-
const top = y;
|
|
1211
|
-
const height = areaModel.getRowHeight(rowIndex);
|
|
1212
|
-
const geo = { left:0, width: columnGeo.width, height, top, index: rowIndex };
|
|
1213
|
-
const val = areaModel.getValueAt(rowIndex, columnIndex);
|
|
1214
|
-
const cellRenderer = areaModel.getCellRenderer(rowIndex, columnIndex);
|
|
1215
|
-
const text = cellRenderer ? '' : `${val}`;
|
|
1216
|
-
const para: AddColumnDivPara = {
|
|
1217
|
-
parent,
|
|
1218
|
-
geo,
|
|
1219
|
-
rowIndex,
|
|
1220
|
-
columnIndex,
|
|
1221
|
-
areaIdent,
|
|
1222
|
-
sideIdent,
|
|
1223
|
-
text
|
|
1224
|
-
};
|
|
1225
|
-
const cell = this.dom.addColumnDiv(para);
|
|
1226
|
-
|
|
1227
|
-
let fn: RendererCleanupFnType | undefined = undefined;
|
|
1228
|
-
if (cellRenderer) {
|
|
1229
|
-
fn = cellRenderer.render(cell, rowIndex, columnIndex, areaIdent, areaModel, val, this.dom.domService);
|
|
1230
|
-
if (fn) {
|
|
1231
|
-
this.cleanupFunctions[areaIdent].push(fn);
|
|
1232
|
-
}
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
|
-
const classes = areaModel.getCustomClassesAt(rowIndex, columnIndex);
|
|
1236
|
-
if (classes.length) {
|
|
1237
|
-
this.dom.addClasses(classes, cell);
|
|
1238
|
-
}
|
|
1239
|
-
const columnDef = this.tableModel.getColumnDef(columnIndex);
|
|
1240
|
-
if (columnDef && columnDef.classes[areaIdent]) {
|
|
1241
|
-
this.dom.addClasses(columnDef.classes[areaIdent], cell);
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
// unnecessary, as the horizontal borders of the table are visible due to the semi-transparent background of the column:
|
|
1245
|
-
this.dom.addColumnBorderDivs(this.tableOptions, parent, geo, areaIdent, sideIdent);
|
|
1246
|
-
|
|
1247
|
-
const styles = areaModel.getCustomStyleAt(rowIndex, columnIndex);
|
|
1248
|
-
if (styles) {
|
|
1249
|
-
for (const css in styles) {
|
|
1250
|
-
this.dom.setStyle(cell, css, styles[css]);
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
|
-
y = y + height;
|
|
1254
|
-
}
|
|
1255
|
-
}
|
|
1256
|
-
return y;
|
|
1257
|
-
}
|
|
1258
|
-
|
|
1259
|
-
/**
|
|
1260
|
-
* Hides the dragging column by applying a 'display: none' style to it.
|
|
1261
|
-
* This method is protected and can only be accessed within the class.
|
|
1262
|
-
*
|
|
1263
|
-
* @return {void}
|
|
1264
|
-
*/
|
|
1265
|
-
protected hideDraggingColumn() {
|
|
1266
|
-
this.dom.applyStyle(this.draggingColumn, {
|
|
1267
|
-
'display': 'none'
|
|
1268
|
-
});
|
|
1269
|
-
}
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
/**
|
|
1273
|
-
* Renders a draggable target div element.
|
|
1274
|
-
*
|
|
1275
|
-
* @param {HTMLDivElement} parent - The parent element where the target div will be appended to.
|
|
1276
|
-
* @param {number} left - The left position of the target div in pixels.
|
|
1277
|
-
* @param {number} top - The top position of the target div in pixels.
|
|
1278
|
-
* @param {number} width - The width of the target div in pixels.
|
|
1279
|
-
* @param {number} height - The height of the target div in pixels.
|
|
1280
|
-
* @return {HTMLDivElement} - The rendered draggable target div element.
|
|
1281
|
-
*/
|
|
1282
|
-
private renderDragTargetDiv(parent: HTMLDivElement, left: number, top: number, width: number, height: number): HTMLDivElement {
|
|
1283
|
-
const div = this.dom.applyStylePosistionAbsolute(
|
|
1284
|
-
this.dom.createDivWithClass('ge-table-drop-zone', parent)
|
|
1285
|
-
);
|
|
1286
|
-
this.dom.setStyle(div, 'left', `${left}px`);
|
|
1287
|
-
this.dom.setStyle(div, 'top', `${top}px`);
|
|
1288
|
-
this.dom.setStyle(div, 'width', `${width}px`);
|
|
1289
|
-
this.dom.setStyle(div, 'height', `${height}px`);
|
|
1290
|
-
return div;
|
|
1291
|
-
}
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
/**
|
|
1295
|
-
* Render selected background div.
|
|
1296
|
-
*
|
|
1297
|
-
* @private
|
|
1298
|
-
* @param {boolean} skip - Whether to skip rendering.
|
|
1299
|
-
* @param {boolean} renderSelection - Whether to render the selection.
|
|
1300
|
-
* @param {SideIdent} sideIdent - The side identifier.
|
|
1301
|
-
* @param {AreaModelIf} areaModel - The area model.
|
|
1302
|
-
* @param {number} rowIndex - The row index.
|
|
1303
|
-
* @param {number} index - The index.
|
|
1304
|
-
* @param {HTMLDivElement} parent - The parent div element.
|
|
1305
|
-
* @param {number} left - The left position.
|
|
1306
|
-
* @param {number} top - The top position.
|
|
1307
|
-
* @param {number} width - The width of the div.
|
|
1308
|
-
* @param {number} height - The height of the div.
|
|
1309
|
-
* @returns {boolean} - Whether the cell is selected.
|
|
1310
|
-
*/
|
|
1311
|
-
private renderSelectedBackgroundDiv(
|
|
1312
|
-
skip: boolean,
|
|
1313
|
-
renderSelection: boolean,
|
|
1314
|
-
sideIdent: SideIdent,
|
|
1315
|
-
areaModel: AreaModelIf,
|
|
1316
|
-
rowIndex: number,
|
|
1317
|
-
index: number,
|
|
1318
|
-
parent: HTMLDivElement,
|
|
1319
|
-
left: number, top: number, width: number, height: number) {
|
|
1320
|
-
let cellSelected = false;
|
|
1321
|
-
if (!skip && renderSelection && areaModel.isSelectable(rowIndex, index)) {
|
|
1322
|
-
if (this.getSelectionModel) {
|
|
1323
|
-
const selectionModel = this.getSelectionModel();
|
|
1324
|
-
if (selectionModel) {
|
|
1325
|
-
const count = selectionModel.getSelectionCount(rowIndex, index);
|
|
1326
|
-
cellSelected = count > 0;
|
|
1327
|
-
for (let i = 0; i < count; i++) {
|
|
1328
|
-
const div = this.dom.applyStylePosistionAbsolute(
|
|
1329
|
-
// ge-table-body-west-selected-range
|
|
1330
|
-
this.dom.createDivWithClass(`ge-table-${areaModel.areaIdent}-${sideIdent}-selected-range`, parent)
|
|
1331
|
-
);
|
|
1332
|
-
this.dom.setStyle(div, 'left', `${left}px`);
|
|
1333
|
-
this.dom.setStyle(div, 'top', `${top}px`);
|
|
1334
|
-
this.dom.setStyle(div, 'width', `${width}px`);
|
|
1335
|
-
this.dom.setStyle(div, 'height', `${height}px`);
|
|
1336
|
-
}
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
return cellSelected;
|
|
1341
|
-
}
|
|
1342
|
-
|
|
1343
|
-
/**
|
|
1344
|
-
* Renders a cell in the grid.
|
|
1345
|
-
*
|
|
1346
|
-
* @param {ArgsRenderCell} args - The arguments for rendering the cell.
|
|
1347
|
-
* @param {AreaModel} args.areaModel - The area model of the grid.
|
|
1348
|
-
* @param {string} args.areaIdent - The identifier of the area.
|
|
1349
|
-
* @param {string} args.sideIdent - The identifier of the side.
|
|
1350
|
-
* @param {number} args.rowIndex - The index of the row.
|
|
1351
|
-
* @param {number} args.columnIndex - The index of the column.
|
|
1352
|
-
* @param {number} args.left - The left position of the cell.
|
|
1353
|
-
* @param {number} args.top - The top position of the cell.
|
|
1354
|
-
* @param {number} args.width - The width of the cell.
|
|
1355
|
-
* @param {number} args.height - The height of the cell.
|
|
1356
|
-
* @param {HTMLElement} args.parent - The parent element of the cell.
|
|
1357
|
-
* @param {boolean} args.cellSelected - Indicates if the cell is selected.
|
|
1358
|
-
* @param {boolean} args.lastRowOfModel - Indicates if the cell is in the last row of the model.
|
|
1359
|
-
*
|
|
1360
|
-
* @returns {void}
|
|
1361
|
-
*/
|
|
1362
|
-
private renderCell(
|
|
1363
|
-
{
|
|
1364
|
-
areaModel,
|
|
1365
|
-
areaIdent,
|
|
1366
|
-
sideIdent,
|
|
1367
|
-
rowIndex,
|
|
1368
|
-
columnIndex,
|
|
1369
|
-
left,
|
|
1370
|
-
top,
|
|
1371
|
-
width,
|
|
1372
|
-
height,
|
|
1373
|
-
parent,
|
|
1374
|
-
cellSelected,
|
|
1375
|
-
lastRowOfModel
|
|
1376
|
-
}: ArgsRenderCell
|
|
1377
|
-
) {
|
|
1378
|
-
const [div, fn] = this.addAndRenderCellDiv({
|
|
1379
|
-
areaModel,
|
|
1380
|
-
areaIdent,
|
|
1381
|
-
sideIdent,
|
|
1382
|
-
rowIndex,
|
|
1383
|
-
index: columnIndex,
|
|
1384
|
-
left,
|
|
1385
|
-
width,
|
|
1386
|
-
height,
|
|
1387
|
-
top,
|
|
1388
|
-
parent,
|
|
1389
|
-
lastRowOfModel
|
|
1390
|
-
});
|
|
1391
|
-
if (cellSelected) {
|
|
1392
|
-
this.dom.addClass(`ge-table-${areaIdent}-${sideIdent}-selected-range`, div);
|
|
1393
|
-
}
|
|
1394
|
-
if (fn) {
|
|
1395
|
-
this.cleanupFunctions[areaIdent].push(fn);
|
|
1396
|
-
}
|
|
1397
|
-
}
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
/**
|
|
1401
|
-
* Render the header cell resize handle.
|
|
1402
|
-
*
|
|
1403
|
-
* @param {ArgsRenderHeaderCellResizeHandle} args - The arguments for rendering the handle.
|
|
1404
|
-
* @param {number} args.rowIndex - The index of the row.
|
|
1405
|
-
* @param {number} args.columnIndex - The index of the column.
|
|
1406
|
-
* @param {number} args.cellLeft - The left position of the cell.
|
|
1407
|
-
* @param {number} args.cellTop - The top position of the cell.
|
|
1408
|
-
* @param {number} args.cellWidth - The width of the cell.
|
|
1409
|
-
* @param {number} args.cellHeight - The height of the cell.
|
|
1410
|
-
* @param {HTMLElement} args.parent - The parent element to append the handle to.
|
|
1411
|
-
*
|
|
1412
|
-
* @return {void}
|
|
1413
|
-
*/
|
|
1414
|
-
private renderHeaderCellResizeHandle(
|
|
1415
|
-
{ rowIndex, columnIndex, cellLeft, cellTop, cellWidth, cellHeight, parent }: ArgsRenderHeaderCellResizeHandle
|
|
1416
|
-
) {
|
|
1417
|
-
|
|
1418
|
-
const domService = this.dom.domService;
|
|
1419
|
-
const handleWidth = this.tableOptions.columnResizeHandleWidthInPx ?? 2;
|
|
1420
|
-
|
|
1421
|
-
const div = domService.createElement<HTMLDivElement>('div');
|
|
1422
|
-
domService.setAttribute(div, 'data-col-index', `${columnIndex}`);
|
|
1423
|
-
domService.setAttribute(div, 'data-row-index', `${rowIndex}`);
|
|
1424
|
-
domService.setAttribute(div, 'data-area', 'header');
|
|
1425
|
-
domService.setAttribute(div, 'data-ge-action', 'resize-column');
|
|
1426
|
-
// domService.setAttribute(div, 'data-ge-action', 'column-resize');
|
|
1427
|
-
domService.addClass(div, `ge-table-column-resize-handle`);
|
|
1428
|
-
domService.setStyle(div, 'display', 'clip');
|
|
1429
|
-
domService.setStyle(div, 'position', 'absolute');
|
|
1430
|
-
domService.setStyle(div, 'cursor', 'col-resize');
|
|
1431
|
-
domService.setStyle(div, 'left', `${(cellLeft + cellWidth - handleWidth)}px`);
|
|
1432
|
-
domService.setStyle(div, 'top', `${cellTop}px`);
|
|
1433
|
-
domService.setStyle(div, 'width', `${handleWidth}px`);
|
|
1434
|
-
domService.setStyle(div, 'height', `${cellHeight}px`);
|
|
1435
|
-
domService.appendChild(parent, div);
|
|
1436
|
-
}
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
}
|
|
1440
|
-
|