@guiexpert/table 0.0.1 → 1.0.1
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/.eslintrc.json +42 -0
- package/LICENSE +35 -0
- package/README.md +102 -0
- package/jest.config.ts +18 -0
- package/ng-package.json +7 -0
- package/package.json +9 -20
- package/project.json +47 -0
- package/src/index.ts +156 -0
- package/src/lib/table/action/action-id.type.ts +24 -0
- package/{lib/table/action/on-action-triggered.if.d.ts → src/lib/table/action/on-action-triggered.if.ts} +4 -1
- package/src/lib/table/action/osx-shortcut-actionId-mapping.ts +29 -0
- package/src/lib/table/action/shortcut-actionid-mapping.type.ts +3 -0
- package/src/lib/table/action/shortcut.service.ts +134 -0
- package/src/lib/table/action/windows-shortcut-actionId-mapping.ts +27 -0
- package/src/lib/table/checkbox/checkbox-model.if.ts +16 -0
- package/src/lib/table/checkbox/checkbox-model.ts +62 -0
- package/src/lib/table/checkbox/tree-checkbox-model.ts +123 -0
- package/src/lib/table/color/color-rgb.if.ts +7 -0
- package/src/lib/table/color/color-rgb.ts +10 -0
- package/src/lib/table/color/ge-css-color-util.ts +43 -0
- package/src/lib/table/color/three-color-gradient-arg.if.ts +10 -0
- package/src/lib/table/color/three-color-gradient-arg.ts +14 -0
- package/src/lib/table/color/two-color-gradient-arg.if.ts +8 -0
- package/src/lib/table/color/two-color-gradient-arg.ts +12 -0
- package/src/lib/table/css-vars.ts +243 -0
- package/src/lib/table/data/common/aligns.ts +19 -0
- package/src/lib/table/data/common/area-map-factory.ts +14 -0
- package/src/lib/table/data/common/area-map.ts +11 -0
- package/src/lib/table/data/common/area-map.type.ts +5 -0
- package/{lib/table/data/common/args-adjust-columns-to-row-parent-params.d.ts → src/lib/table/data/common/args-adjust-columns-to-row-parent-params.ts} +11 -10
- package/src/lib/table/data/common/args-render-cell-div.ts +18 -0
- package/src/lib/table/data/common/boolean-function.ts +4 -0
- package/src/lib/table/data/common/cell-range.ts +57 -0
- package/src/lib/table/data/common/checkbox-column-def.ts +25 -0
- package/src/lib/table/data/common/checked-type.ts +1 -0
- package/src/lib/table/data/common/event/ge-cell-indices.ts +9 -0
- package/src/lib/table/data/common/event/ge-key-event.ts +10 -0
- package/src/lib/table/data/common/event/ge-model-change-event.ts +13 -0
- package/src/lib/table/data/common/event/ge-mouse-event.ts +38 -0
- package/src/lib/table/data/common/event/input/table-cell-update-event.if.ts +10 -0
- package/src/lib/table/data/common/event/input/table-cell-update-event.ts +14 -0
- package/src/lib/table/data/common/filter-function.ts +1 -0
- package/src/lib/table/data/common/get-t.ts +1 -0
- package/src/lib/table/data/common/index-and-px.ts +9 -0
- package/src/lib/table/data/common/size.if.ts +4 -0
- package/src/lib/table/data/common/size.ts +9 -0
- package/src/lib/table/data/common/sizes.ts +35 -0
- package/src/lib/table/data/common/sort-item.ts +11 -0
- package/src/lib/table/data/common/sort-state.type.ts +1 -0
- package/src/lib/table/data/common/tree-arrow.type.ts +1 -0
- package/src/lib/table/data/common/tree-row-if.ts +11 -0
- package/src/lib/table/data/common/tree-row.ts +16 -0
- package/src/lib/table/data/common/value-label.if.ts +6 -0
- package/src/lib/table/data/common/value-label.ts +13 -0
- package/src/lib/table/data/div-scope.type.ts +5 -0
- package/src/lib/table/data/event/mouse-target-data.ts +45 -0
- package/src/lib/table/data/geo-data.ts +13 -0
- package/src/lib/table/data/options/auto-restore-options.if.ts +21 -0
- package/src/lib/table/data/options/auto-restore-options.ts +50 -0
- package/src/lib/table/data/options/default-row-heights.if.ts +5 -0
- package/src/lib/table/data/options/default-row-heights.ts +10 -0
- package/src/lib/table/data/options/icon.if.ts +7 -0
- package/src/lib/table/data/options/icon.ts +10 -0
- package/{lib/table/data/options/sorted-options.if.d.ts → src/lib/table/data/options/sorted-options.if.ts} +6 -3
- package/src/lib/table/data/options/sorted-options.ts +15 -0
- package/src/lib/table/data/options/table-options.if.ts +54 -0
- package/src/lib/table/data/options/table-options.ts +66 -0
- package/src/lib/table/data/options/tree-options.if.ts +10 -0
- package/src/lib/table/data/options/tree-options.ts +32 -0
- package/src/lib/table/data/side-ident.type.ts +1 -0
- package/src/lib/table/data/table-model-and-options.if.ts +8 -0
- package/src/lib/table/data/table-model-and-options.ts +13 -0
- package/src/lib/table/data/tablemodel/area-ident.type.ts +18 -0
- package/src/lib/table/data/tablemodel/areamodel/abstract-area-model.ts +183 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.ts +59 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-cell-groups.ts +210 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-hidden.ts +120 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.ts +23 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-object-array.ts +105 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-tree.ts +215 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model.if.ts +186 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model.ts +110 -0
- package/src/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.ts +61 -0
- package/src/lib/table/data/tablemodel/areamodel/has-default-row-height-if.ts +3 -0
- package/src/lib/table/data/tablemodel/cellgroup/cell-group-ext.ts +167 -0
- package/src/lib/table/data/tablemodel/cellgroup/cell-group.if.ts +12 -0
- package/src/lib/table/data/tablemodel/cellgroup/cell-group.ts +18 -0
- package/src/lib/table/data/tablemodel/cellgroup/cellgroup-factory.ts +148 -0
- package/src/lib/table/data/tablemodel/column/column-def.if.ts +28 -0
- package/src/lib/table/data/tablemodel/column/column-def.ts +104 -0
- package/src/lib/table/data/tablemodel/padding.ts +9 -0
- package/src/lib/table/data/tablemodel/table-model.if.ts +90 -0
- package/src/lib/table/data/tablemodel/table-model.ts +352 -0
- package/src/lib/table/ele-scope.ts +283 -0
- package/src/lib/table/event-adapter.ts +28 -0
- package/src/lib/table/event-listener.if.ts +19 -0
- package/src/lib/table/factory/table-factory.ts +378 -0
- package/src/lib/table/factory/tree-factory.ts +51 -0
- package/src/lib/table/focus/focus-model.if.ts +14 -0
- package/src/lib/table/focus/focus-model.ts +48 -0
- package/src/lib/table/focus/focus.type.ts +4 -0
- package/src/lib/table/input-handler.ts +34 -0
- package/src/lib/table/mouse-handler.ts +237 -0
- package/src/lib/table/render-scope.ts +936 -0
- package/src/lib/table/renderer/cell-group-ext-cell-renderer.ts +27 -0
- package/{lib/table/renderer/cell-render.if.d.ts → src/lib/table/renderer/cell-render.if.ts} +10 -1
- package/src/lib/table/renderer/checkbox-boolean-property-cell-renderer.ts +58 -0
- package/src/lib/table/renderer/checkbox-cell-renderer.ts +39 -0
- package/src/lib/table/renderer/date-to-int-date-cell-renderer.ts +34 -0
- package/src/lib/table/renderer/date-to-iso-cell-renderer.ts +25 -0
- package/src/lib/table/renderer/date-to-locale-date-cell-renderer.ts +24 -0
- package/src/lib/table/renderer/date-to-tec-cell-renderer.ts +28 -0
- package/src/lib/table/renderer/edit/edit-cell-renderer.type.ts +3 -0
- package/src/lib/table/renderer/edit/edit-input-pipe-for-number.ts +6 -0
- package/src/lib/table/renderer/edit/edit-input-pipe.if.ts +7 -0
- package/src/lib/table/renderer/edit/input-cell-renderer.ts +41 -0
- package/src/lib/table/renderer/edit/select-cell-renderer.ts +60 -0
- package/src/lib/table/renderer/male-female-to-icon-cell-renderer.ts +26 -0
- package/src/lib/table/renderer/number-cell-renderer.ts +38 -0
- package/src/lib/table/renderer/renderer-cleanup-fn.type.ts +1 -0
- package/src/lib/table/renderer/renderer.ts +11 -0
- package/src/lib/table/renderer/true-false-cell-renderer.ts +28 -0
- package/src/lib/table/selection/selection-model.if.ts +20 -0
- package/src/lib/table/selection/selection-model.ts +109 -0
- package/src/lib/table/selection/selection-service.ts +120 -0
- package/src/lib/table/selection/selection.type.ts +5 -0
- package/src/lib/table/service/abstract-store-state.service.ts +105 -0
- package/src/lib/table/service/convenience-dom.service.ts +548 -0
- package/src/lib/table/service/data/collapsed-expanded.data.ts +11 -0
- package/src/lib/table/service/data/html-style.type.ts +1 -0
- package/src/lib/table/service/dom-service.if.ts +16 -0
- package/src/lib/table/service/ge-filter.service.ts +123 -0
- package/src/lib/table/service/simple-dom-service.ts +46 -0
- package/src/lib/table/service/sorter.service.ts +30 -0
- package/src/lib/table/service/store-state-collapsed-expand.service.ts +76 -0
- package/src/lib/table/service/store-state-scroll-pos.service.ts +40 -0
- package/src/lib/table/service/store-state-sorting.service.ts +41 -0
- package/src/lib/table/service/tree-row.service.ts +31 -0
- package/src/lib/table/table-api.ts +61 -0
- package/src/lib/table/table-scope.ts +433 -0
- package/src/test-setup.ts +1 -0
- package/tsconfig.json +22 -0
- package/tsconfig.lib.json +19 -0
- package/tsconfig.lib.prod.json +7 -0
- package/tsconfig.spec.json +20 -0
- package/esm2020/guiexpert-table.mjs +0 -5
- package/esm2020/index.mjs +0 -102
- package/esm2020/lib/table/action/action-id.type.mjs +0 -20
- package/esm2020/lib/table/action/on-action-triggered.if.mjs +0 -2
- package/esm2020/lib/table/action/osx-shortcut-actionId-mapping.mjs +0 -17
- package/esm2020/lib/table/action/shortcut-actionid-mapping.type.mjs +0 -2
- package/esm2020/lib/table/action/shortcut.service.mjs +0 -105
- package/esm2020/lib/table/action/windows-shortcut-actionId-mapping.mjs +0 -15
- package/esm2020/lib/table/checkbox/checkbox-model.if.mjs +0 -2
- package/esm2020/lib/table/checkbox/checkbox-model.mjs +0 -52
- package/esm2020/lib/table/checkbox/tree-checkbox-model.mjs +0 -106
- package/esm2020/lib/table/data/common/aligns.mjs +0 -19
- package/esm2020/lib/table/data/common/area-map-factory.mjs +0 -7
- package/esm2020/lib/table/data/common/area-map.mjs +0 -8
- package/esm2020/lib/table/data/common/area-map.type.mjs +0 -2
- package/esm2020/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +0 -2
- package/esm2020/lib/table/data/common/args-render-cell-div.mjs +0 -2
- package/esm2020/lib/table/data/common/boolean-function.mjs +0 -3
- package/esm2020/lib/table/data/common/cell-range.mjs +0 -27
- package/esm2020/lib/table/data/common/checkbox-column.mjs +0 -15
- package/esm2020/lib/table/data/common/checked-type.mjs +0 -2
- package/esm2020/lib/table/data/common/event/ge-cell-indices.mjs +0 -7
- package/esm2020/lib/table/data/common/event/ge-key-event.mjs +0 -7
- package/esm2020/lib/table/data/common/event/ge-model-change-event.mjs +0 -10
- package/esm2020/lib/table/data/common/event/ge-mouse-event.mjs +0 -19
- package/esm2020/lib/table/data/common/filter-function.mjs +0 -2
- package/esm2020/lib/table/data/common/get-t.mjs +0 -2
- package/esm2020/lib/table/data/common/index-and-px.mjs +0 -7
- package/esm2020/lib/table/data/common/size.if.mjs +0 -2
- package/esm2020/lib/table/data/common/size.mjs +0 -7
- package/esm2020/lib/table/data/common/sizes.mjs +0 -33
- package/esm2020/lib/table/data/common/sort-item.mjs +0 -7
- package/esm2020/lib/table/data/common/sort-state.type.mjs +0 -2
- package/esm2020/lib/table/data/common/tree-arrow.type.mjs +0 -2
- package/esm2020/lib/table/data/common/tree-row-if.mjs +0 -2
- package/esm2020/lib/table/data/common/tree-row.mjs +0 -12
- package/esm2020/lib/table/data/common/value-label.if.mjs +0 -2
- package/esm2020/lib/table/data/common/value-label.mjs +0 -7
- package/esm2020/lib/table/data/div-scope.type.mjs +0 -2
- package/esm2020/lib/table/data/geo-data.mjs +0 -10
- package/esm2020/lib/table/data/options/auto-restore-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/auto-restore-options.mjs +0 -42
- package/esm2020/lib/table/data/options/default-row-heights.if.mjs +0 -2
- package/esm2020/lib/table/data/options/default-row-heights.mjs +0 -8
- package/esm2020/lib/table/data/options/icon.if.mjs +0 -2
- package/esm2020/lib/table/data/options/icon.mjs +0 -8
- package/esm2020/lib/table/data/options/sorted-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/sorted-options.mjs +0 -9
- package/esm2020/lib/table/data/options/table-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/table-options.mjs +0 -38
- package/esm2020/lib/table/data/options/tree-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/tree-options.mjs +0 -10
- package/esm2020/lib/table/data/side-ident.type.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/area-ident.type.mjs +0 -10
- package/esm2020/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +0 -108
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-array-array.mjs +0 -34
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +0 -76
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +0 -11
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +0 -79
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +0 -166
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model.if.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +0 -48
- package/esm2020/lib/table/data/tablemodel/column/column-def.if.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/column/column-def.mjs +0 -32
- package/esm2020/lib/table/data/tablemodel/padding.mjs +0 -9
- package/esm2020/lib/table/data/tablemodel/table-model.if.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/table-model.mjs +0 -262
- package/esm2020/lib/table/ele-scope.mjs +0 -173
- package/esm2020/lib/table/event-listener.if.mjs +0 -2
- package/esm2020/lib/table/focus/focus-model.if.mjs +0 -2
- package/esm2020/lib/table/focus/focus-model.mjs +0 -22
- package/esm2020/lib/table/focus/focus.type.mjs +0 -2
- package/esm2020/lib/table/input-handler.mjs +0 -24
- package/esm2020/lib/table/mouse-handler.mjs +0 -197
- package/esm2020/lib/table/render-scope.mjs +0 -575
- package/esm2020/lib/table/renderer/cell-render.if.mjs +0 -2
- package/esm2020/lib/table/renderer/checkbox-cell-renderer.mjs +0 -22
- package/esm2020/lib/table/renderer/date-to-int-date-cell-renderer.mjs +0 -21
- package/esm2020/lib/table/renderer/date-to-iso-cell-renderer.mjs +0 -9
- package/esm2020/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +0 -9
- package/esm2020/lib/table/renderer/edit/edit-cell-renderer.type.mjs +0 -2
- package/esm2020/lib/table/renderer/edit/input-cell-renderer.mjs +0 -23
- package/esm2020/lib/table/renderer/edit/select-cell-renderer.mjs +0 -35
- package/esm2020/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +0 -12
- package/esm2020/lib/table/renderer/number-cell-renderer.mjs +0 -19
- package/esm2020/lib/table/renderer/renderer-cleanup-fn.type.mjs +0 -2
- package/esm2020/lib/table/renderer/renderer.mjs +0 -7
- package/esm2020/lib/table/selection/selection-model.if.mjs +0 -2
- package/esm2020/lib/table/selection/selection-model.mjs +0 -97
- package/esm2020/lib/table/selection/selection-service.mjs +0 -97
- package/esm2020/lib/table/selection/selection.type.mjs +0 -2
- package/esm2020/lib/table/service/abstract-store-state.service.mjs +0 -49
- package/esm2020/lib/table/service/convenience-dom.service.mjs +0 -386
- package/esm2020/lib/table/service/data/collapsed-expanded.data.mjs +0 -9
- package/esm2020/lib/table/service/data/html-style.type.mjs +0 -2
- package/esm2020/lib/table/service/dom-service.if.mjs +0 -2
- package/esm2020/lib/table/service/ge-filter.service.mjs +0 -98
- package/esm2020/lib/table/service/sorter.service.mjs +0 -27
- package/esm2020/lib/table/service/store-state-collapsed-expand.service.mjs +0 -57
- package/esm2020/lib/table/service/store-state-scroll-pos.service.mjs +0 -29
- package/esm2020/lib/table/service/store-state-sorting.service.mjs +0 -29
- package/esm2020/lib/table/service/tree-row.service.mjs +0 -23
- package/esm2020/lib/table/table-api.mjs +0 -38
- package/esm2020/lib/table/table-model-factory.mjs +0 -125
- package/esm2020/lib/table/table-scope.mjs +0 -307
- package/index.d.ts +0 -103
- package/lib/table/action/action-id.type.d.ts +0 -2
- package/lib/table/action/osx-shortcut-actionId-mapping.d.ts +0 -6
- package/lib/table/action/shortcut-actionid-mapping.type.d.ts +0 -4
- package/lib/table/action/shortcut.service.d.ts +0 -17
- package/lib/table/action/windows-shortcut-actionId-mapping.d.ts +0 -6
- package/lib/table/checkbox/checkbox-model.d.ts +0 -12
- package/lib/table/checkbox/checkbox-model.if.d.ts +0 -9
- package/lib/table/checkbox/tree-checkbox-model.d.ts +0 -17
- package/lib/table/data/common/aligns.d.ts +0 -24
- package/lib/table/data/common/area-map-factory.d.ts +0 -5
- package/lib/table/data/common/area-map.d.ts +0 -7
- package/lib/table/data/common/area-map.type.d.ts +0 -5
- package/lib/table/data/common/args-render-cell-div.d.ts +0 -13
- package/lib/table/data/common/boolean-function.d.ts +0 -3
- package/lib/table/data/common/cell-range.d.ts +0 -17
- package/lib/table/data/common/checkbox-column.d.ts +0 -13
- package/lib/table/data/common/checked-type.d.ts +0 -1
- package/lib/table/data/common/event/ge-cell-indices.d.ts +0 -5
- package/lib/table/data/common/event/ge-key-event.d.ts +0 -5
- package/lib/table/data/common/event/ge-model-change-event.d.ts +0 -6
- package/lib/table/data/common/event/ge-mouse-event.d.ts +0 -17
- package/lib/table/data/common/filter-function.d.ts +0 -1
- package/lib/table/data/common/get-t.d.ts +0 -1
- package/lib/table/data/common/index-and-px.d.ts +0 -5
- package/lib/table/data/common/size.d.ts +0 -6
- package/lib/table/data/common/size.if.d.ts +0 -4
- package/lib/table/data/common/sizes.d.ts +0 -32
- package/lib/table/data/common/sort-item.d.ts +0 -6
- package/lib/table/data/common/sort-state.type.d.ts +0 -1
- package/lib/table/data/common/tree-arrow.type.d.ts +0 -1
- package/lib/table/data/common/tree-row-if.d.ts +0 -10
- package/lib/table/data/common/tree-row.d.ts +0 -11
- package/lib/table/data/common/value-label.d.ts +0 -6
- package/lib/table/data/common/value-label.if.d.ts +0 -4
- package/lib/table/data/div-scope.type.d.ts +0 -7
- package/lib/table/data/geo-data.d.ts +0 -8
- package/lib/table/data/options/auto-restore-options.d.ts +0 -11
- package/lib/table/data/options/auto-restore-options.if.d.ts +0 -13
- package/lib/table/data/options/default-row-heights.d.ts +0 -7
- package/lib/table/data/options/default-row-heights.if.d.ts +0 -5
- package/lib/table/data/options/icon.d.ts +0 -7
- package/lib/table/data/options/icon.if.d.ts +0 -5
- package/lib/table/data/options/sorted-options.d.ts +0 -8
- package/lib/table/data/options/table-options.d.ts +0 -36
- package/lib/table/data/options/table-options.if.d.ts +0 -37
- package/lib/table/data/options/tree-options.d.ts +0 -9
- package/lib/table/data/options/tree-options.if.d.ts +0 -7
- package/lib/table/data/side-ident.type.d.ts +0 -1
- package/lib/table/data/tablemodel/area-ident.type.d.ts +0 -2
- package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +0 -43
- package/lib/table/data/tablemodel/areamodel/area-model-array-array.d.ts +0 -18
- package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +0 -32
- package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +0 -10
- package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +0 -27
- package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +0 -39
- package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +0 -33
- package/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.d.ts +0 -12
- package/lib/table/data/tablemodel/column/column-def.d.ts +0 -46
- package/lib/table/data/tablemodel/column/column-def.if.d.ts +0 -22
- package/lib/table/data/tablemodel/padding.d.ts +0 -7
- package/lib/table/data/tablemodel/table-model.d.ts +0 -60
- package/lib/table/data/tablemodel/table-model.if.d.ts +0 -34
- package/lib/table/ele-scope.d.ts +0 -37
- package/lib/table/event-listener.if.d.ts +0 -11
- package/lib/table/focus/focus-model.d.ts +0 -12
- package/lib/table/focus/focus-model.if.d.ts +0 -6
- package/lib/table/focus/focus.type.d.ts +0 -1
- package/lib/table/input-handler.d.ts +0 -6
- package/lib/table/mouse-handler.d.ts +0 -27
- package/lib/table/render-scope.d.ts +0 -77
- package/lib/table/renderer/checkbox-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +0 -9
- package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/edit/edit-cell-renderer.type.d.ts +0 -2
- package/lib/table/renderer/edit/input-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/edit/select-cell-renderer.d.ts +0 -12
- package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/number-cell-renderer.d.ts +0 -11
- package/lib/table/renderer/renderer-cleanup-fn.type.d.ts +0 -1
- package/lib/table/renderer/renderer.d.ts +0 -5
- package/lib/table/selection/selection-model.d.ts +0 -21
- package/lib/table/selection/selection-model.if.d.ts +0 -11
- package/lib/table/selection/selection-service.d.ts +0 -17
- package/lib/table/selection/selection.type.d.ts +0 -2
- package/lib/table/service/abstract-store-state.service.d.ts +0 -10
- package/lib/table/service/convenience-dom.service.d.ts +0 -44
- package/lib/table/service/data/collapsed-expanded.data.d.ts +0 -7
- package/lib/table/service/data/html-style.type.d.ts +0 -3
- package/lib/table/service/dom-service.if.d.ts +0 -9
- package/lib/table/service/ge-filter.service.d.ts +0 -5
- package/lib/table/service/sorter.service.d.ts +0 -3
- package/lib/table/service/store-state-collapsed-expand.service.d.ts +0 -15
- package/lib/table/service/store-state-scroll-pos.service.d.ts +0 -10
- package/lib/table/service/store-state-sorting.service.d.ts +0 -11
- package/lib/table/service/tree-row.service.d.ts +0 -5
- package/lib/table/table-api.d.ts +0 -16
- package/lib/table/table-model-factory.d.ts +0 -61
- package/lib/table/table-scope.d.ts +0 -55
|
@@ -0,0 +1,936 @@
|
|
|
1
|
+
import { EleScope } from "./ele-scope";
|
|
2
|
+
import { TableModelIf } from "./data/tablemodel/table-model.if";
|
|
3
|
+
import { 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 { AreaModelTree } from "./data/tablemodel/areamodel/area-model-tree";
|
|
18
|
+
import { GeoData } from "./data/geo-data";
|
|
19
|
+
import { CellRendererIf } from "./renderer/cell-render.if";
|
|
20
|
+
import { SelectionModelIf } from "./selection/selection-model.if";
|
|
21
|
+
import { GetT } from "./data/common/get-t";
|
|
22
|
+
import { FocusModelIf } from "./focus/focus-model.if";
|
|
23
|
+
import { ColAndRowspanModel } from "./data/tablemodel/areamodel/col-and-rowspan-model";
|
|
24
|
+
import { AreaObjectMapType } from "./data/common/area-map.type";
|
|
25
|
+
import { AreaObjectMap } from "./data/common/area-map";
|
|
26
|
+
import { TableCellUpdateEventIf } from "./data/common/event/input/table-cell-update-event.if";
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
interface ArgsRenderCell {
|
|
30
|
+
areaModel: AreaModelIf;
|
|
31
|
+
areaIdent: AreaIdent;
|
|
32
|
+
sideIdent: SideIdent;
|
|
33
|
+
rowIndex: number;
|
|
34
|
+
columnIndex: number;
|
|
35
|
+
left: number;
|
|
36
|
+
top: number;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
parent: HTMLDivElement;
|
|
40
|
+
cellSelected: boolean;
|
|
41
|
+
lastRowOfModel: boolean;
|
|
42
|
+
gammaRange: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface ArgsRenderHeaderCellResizeHandle {
|
|
46
|
+
rowIndex: number;
|
|
47
|
+
columnIndex: number;
|
|
48
|
+
cellLeft: number;
|
|
49
|
+
cellTop: number;
|
|
50
|
+
cellWidth: number;
|
|
51
|
+
cellHeight: number;
|
|
52
|
+
parent: HTMLDivElement;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export class RenderScope extends EleScope {
|
|
56
|
+
|
|
57
|
+
protected storeScrollPosStateService?: StoreStateScrollPosService;
|
|
58
|
+
protected getSelectionModel?: GetT<SelectionModelIf>;
|
|
59
|
+
protected getFocusModel?: GetT<FocusModelIf>; // TODO use it!
|
|
60
|
+
protected scrollLeft = 0;
|
|
61
|
+
protected scrollViewportLeft = 0;
|
|
62
|
+
protected scrollFactorY = 0;
|
|
63
|
+
protected scrollFactorX = 0;
|
|
64
|
+
|
|
65
|
+
protected readonly cleanupFunctions: {
|
|
66
|
+
header: (RendererCleanupFnType)[],
|
|
67
|
+
body: (RendererCleanupFnType)[],
|
|
68
|
+
footer: (RendererCleanupFnType)[],
|
|
69
|
+
} = {
|
|
70
|
+
header: [],
|
|
71
|
+
body: [],
|
|
72
|
+
footer: []
|
|
73
|
+
};
|
|
74
|
+
protected tree = false;
|
|
75
|
+
// TODO delete? protected rangeEles: HTMLDivElement[] = [];
|
|
76
|
+
protected colAndRowspanModels: AreaObjectMapType<ColAndRowspanModel> = new AreaObjectMap<ColAndRowspanModel>();
|
|
77
|
+
protected firstVisibleRowIndex = -1;
|
|
78
|
+
|
|
79
|
+
protected draggingTargetColumnIndex = -1;
|
|
80
|
+
protected mouseEvent?: GeMouseEvent;
|
|
81
|
+
private debounceTimeout?: ReturnType<typeof setTimeout> | null;
|
|
82
|
+
private editorRenderer?: CellRendererIf;
|
|
83
|
+
private editorRendererColumn?: number;
|
|
84
|
+
private editorRendererRow?: number;
|
|
85
|
+
private removables: HTMLDivElement[] = [];
|
|
86
|
+
|
|
87
|
+
constructor(
|
|
88
|
+
hostElement: HTMLDivElement,
|
|
89
|
+
tableModel: TableModelIf,
|
|
90
|
+
dom: ConvenienceDomService,
|
|
91
|
+
tableOptions: TableOptionsIf
|
|
92
|
+
) {
|
|
93
|
+
super(hostElement, tableModel, dom, tableOptions);
|
|
94
|
+
|
|
95
|
+
if (this.tableModel.getSelectionModel) {
|
|
96
|
+
this.getSelectionModel = this.tableModel.getSelectionModel;
|
|
97
|
+
|
|
98
|
+
} else if (this.tableOptions?.getSelectionModel) {
|
|
99
|
+
this.getSelectionModel = this.tableOptions.getSelectionModel;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (this.tableOptions?.getFocusModel) {
|
|
103
|
+
this.getFocusModel = this.tableOptions.getFocusModel;
|
|
104
|
+
}
|
|
105
|
+
if (tableModel.getAreaModel("body") instanceof AreaModelTree) {
|
|
106
|
+
this.tree = true;
|
|
107
|
+
}
|
|
108
|
+
const aereaIds: AreaIdent[] = ["header", "body", "footer"];
|
|
109
|
+
aereaIds.forEach(
|
|
110
|
+
areaIdent => {
|
|
111
|
+
this.colAndRowspanModels[areaIdent] = new ColAndRowspanModel(tableModel, tableModel.getAreaModel(areaIdent));
|
|
112
|
+
this.colAndRowspanModels[areaIdent]?.init();
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
protected editing = false;
|
|
118
|
+
isEditing(){
|
|
119
|
+
return this.editing;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
resetEditorRenderer() {
|
|
123
|
+
this.editorRenderer = undefined;
|
|
124
|
+
this.editorRendererRow = -1;
|
|
125
|
+
this.editorRendererColumn = -1;
|
|
126
|
+
this.editing = false;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
clearSelection() {
|
|
130
|
+
if (this.getSelectionModel) {
|
|
131
|
+
const sm = this.getSelectionModel();
|
|
132
|
+
sm?.clear();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
initRenderEditor(rowIdx: number, colIdx: number) {
|
|
137
|
+
let rnFn = this.tableModel.getColumnDef(colIdx)?.getEditRenderer;
|
|
138
|
+
if (!rnFn) {
|
|
139
|
+
rnFn = this.tableOptions.getEditRenderer;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (rnFn) {
|
|
143
|
+
this.editorRenderer = rnFn(rowIdx, colIdx);
|
|
144
|
+
|
|
145
|
+
if (this.editorRenderer) {
|
|
146
|
+
this.editorRendererRow = rowIdx;
|
|
147
|
+
this.editorRendererColumn = colIdx;
|
|
148
|
+
this.editing = true;
|
|
149
|
+
this.repaint();
|
|
150
|
+
// request focus:
|
|
151
|
+
const input = document.querySelector("input.ge-table-cell-editor-input") as HTMLInputElement;
|
|
152
|
+
if (input) {
|
|
153
|
+
input.focus();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
} else {
|
|
157
|
+
this.resetEditorRenderer();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
repaint() {
|
|
163
|
+
this.adjustAfterScrolling();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
override adjustAfterScrolling() {
|
|
167
|
+
for (const cleaning of this.removables) {
|
|
168
|
+
cleaning.remove();
|
|
169
|
+
}
|
|
170
|
+
this.hideHoverRow();
|
|
171
|
+
this.hideHoverColumn();
|
|
172
|
+
|
|
173
|
+
this.scrollTop = this.scrollViewport.scrollTop;
|
|
174
|
+
this.scrollLeft = this.scrollViewport.scrollLeft;
|
|
175
|
+
this.debounce(this.checkForScrollPosSaving.bind(this));
|
|
176
|
+
|
|
177
|
+
this.scrollFactorY = this.scrollTop / (this.scrollViewport.scrollHeight - this.scrollViewport.clientHeight);
|
|
178
|
+
this.scrollFactorX = this.scrollLeft / (this.scrollViewport.scrollWidth - this.scrollViewport.clientWidth);
|
|
179
|
+
|
|
180
|
+
if (isNaN(this.scrollFactorY)) {
|
|
181
|
+
this.scrollFactorY = 0;
|
|
182
|
+
}
|
|
183
|
+
if (isNaN(this.scrollFactorX)) {
|
|
184
|
+
this.scrollFactorX = 0;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
this.adjustBody();
|
|
188
|
+
this.adjustArea("footer");
|
|
189
|
+
this.adjustArea("header");
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
if (this.tableOptions.tableTopBorderVisible) {
|
|
193
|
+
this.removables.push(this.dom.addHorizontalBorder(
|
|
194
|
+
new GeoData(0, this.hostElement.clientWidth, 1, 0),
|
|
195
|
+
this.hostElement,
|
|
196
|
+
"ge-table-border"));
|
|
197
|
+
}
|
|
198
|
+
if (this.tableOptions.tableBottomBorderVisible) {
|
|
199
|
+
this.removables.push(this.dom.addHorizontalBorder(
|
|
200
|
+
new GeoData(0, this.hostElement.clientWidth, 1, this.hostElement.clientHeight - 1),
|
|
201
|
+
this.hostElement,
|
|
202
|
+
"ge-table-border"));
|
|
203
|
+
}
|
|
204
|
+
// The border between east and center in header/body/footer (full height):
|
|
205
|
+
if (this.tableModel.getFixedLeftColumnCount() > 0) {
|
|
206
|
+
this.removables.push(this.dom.addVerticalBorder(
|
|
207
|
+
new GeoData(this.areaBodyWest.child.clientWidth, 1, this.hostElement.clientHeight, 0),
|
|
208
|
+
this.hostElement,
|
|
209
|
+
"ge-table-body-west-vertical-border"));
|
|
210
|
+
}
|
|
211
|
+
// The border between header and body (full width):
|
|
212
|
+
if (this.tableModel.getAreaModel("header")?.getRowCount() > 0) {
|
|
213
|
+
this.removables.push(this.dom.addHorizontalBorder(
|
|
214
|
+
new GeoData(0, this.hostElement.clientWidth, 1, this.areaHeaderCenter.child.clientHeight),
|
|
215
|
+
this.hostElement,
|
|
216
|
+
"ge-table-body-west-vertical-border"));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
checkForScrollPosSaving() {
|
|
221
|
+
if (this.storeScrollPosStateService
|
|
222
|
+
&& this.tableOptions?.autoRestoreOptions?.autoRestoreScrollPosition) {
|
|
223
|
+
this.storeScrollPosStateService.updateScrollOffset([this.scrollLeft, this.scrollTop]);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
updateCells(events: TableCellUpdateEventIf[]) {
|
|
228
|
+
events.forEach(evt => this.tableModel
|
|
229
|
+
.getAreaModel(evt.area)
|
|
230
|
+
.setValue(evt.rowIndex, evt.columnIndex, evt.value)
|
|
231
|
+
);
|
|
232
|
+
this.repaint();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
protected getAreaAndSideIdentByAttr(srcElement: HTMLElement): [AreaIdent | undefined, SideIdent | undefined] {
|
|
236
|
+
if (srcElement) {
|
|
237
|
+
const dataArea = this.getStringByAttr(srcElement, "data-area");
|
|
238
|
+
const dataSide = this.getStringByAttr(srcElement, "data-side");
|
|
239
|
+
if (dataSide && dataArea) {
|
|
240
|
+
return [dataArea, dataSide] as [AreaIdent, SideIdent];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return [undefined, undefined];
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
protected getArea(rowIdent: AreaIdent, sideIdent: SideIdent): DivScope {
|
|
247
|
+
if (rowIdent === "header") {
|
|
248
|
+
if (sideIdent === "west") return this.areaHeaderWest;
|
|
249
|
+
if (sideIdent === "center") return this.areaHeaderCenter;
|
|
250
|
+
if (sideIdent === "east") return this.areaHeaderEast;
|
|
251
|
+
} else if (rowIdent === "body") {
|
|
252
|
+
if (sideIdent === "west") return this.areaBodyWest;
|
|
253
|
+
if (sideIdent === "center") return this.areaBodyCenter;
|
|
254
|
+
if (sideIdent === "east") return this.areaBodyEast;
|
|
255
|
+
} else if (rowIdent === "footer") {
|
|
256
|
+
if (sideIdent === "west") return this.areaFooterWest;
|
|
257
|
+
if (sideIdent === "center") return this.areaFooterCenter;
|
|
258
|
+
if (sideIdent === "east") return this.areaFooterEast;
|
|
259
|
+
}
|
|
260
|
+
throw Error(`Wrong area identifier: row:${rowIdent}, col:${sideIdent}`);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
protected adjustBody() {
|
|
264
|
+
const virtualRowDivTopF1 = this.areaBodyCenterGeo.height - this.tableModel.getContentHeightInPixel();
|
|
265
|
+
const virtualRowDivTop = this.scrollFactorY * virtualRowDivTopF1;
|
|
266
|
+
|
|
267
|
+
this.dom.setStyle(this.contentDiv, "top", `${this.scrollTop}px`);
|
|
268
|
+
this.dom.setStyle(this.contentDiv, "left", `${this.scrollViewport.scrollLeft}px`);
|
|
269
|
+
|
|
270
|
+
this.adjustArea("body", virtualRowDivTop);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
protected getNumberByAttr(srcElement: HTMLElement, key: string): number {
|
|
274
|
+
if (srcElement) {
|
|
275
|
+
const attr = srcElement.closest("[" + key + "]")?.getAttribute(key);
|
|
276
|
+
if (attr) return Number(attr);
|
|
277
|
+
}
|
|
278
|
+
return -1;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
protected getStringByAttr(srcElement: HTMLElement, key: string): string {
|
|
282
|
+
if (srcElement) {
|
|
283
|
+
const attr = srcElement.closest("[" + key + "]")?.getAttribute(key);
|
|
284
|
+
if (attr) return attr;
|
|
285
|
+
}
|
|
286
|
+
return "";
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
protected adjustArea(areaIdent: AreaIdent, yStart: number = 0) {
|
|
290
|
+
const westArea = this.getArea(areaIdent, "west");
|
|
291
|
+
const centerArea = this.getArea(areaIdent, "center");
|
|
292
|
+
const eastArea = this.getArea(areaIdent, "east");
|
|
293
|
+
const divHeight = centerArea.child.clientHeight;
|
|
294
|
+
|
|
295
|
+
westArea.child.innerText = "";
|
|
296
|
+
centerArea.child.innerText = "";
|
|
297
|
+
eastArea.child.innerText = "";
|
|
298
|
+
const left = 0;
|
|
299
|
+
const width = this.areaBodyCenterGeo.width;
|
|
300
|
+
const padding = this.tableModel.getPadding();
|
|
301
|
+
const areaModel = this.tableModel.getAreaModel(areaIdent);
|
|
302
|
+
const rowCount = areaModel.getRowCount();
|
|
303
|
+
|
|
304
|
+
while (this.cleanupFunctions[areaIdent].length) {
|
|
305
|
+
const fn = this.cleanupFunctions[areaIdent].shift();
|
|
306
|
+
if (fn) {
|
|
307
|
+
fn();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
let y = yStart;
|
|
311
|
+
|
|
312
|
+
const columnCount = this.tableModel.getColumnCount();
|
|
313
|
+
const fixedRightColumnCount = this.tableModel.getFixedRightColumnCount();
|
|
314
|
+
const fixedLeftColumnCount = this.tableModel.getFixedLeftColumnCount();
|
|
315
|
+
|
|
316
|
+
for (let index = 0; index < rowCount; index++) {
|
|
317
|
+
const top = y;
|
|
318
|
+
const lastRowOfModel = index === rowCount - 1;
|
|
319
|
+
const height = this.tableModel.getRowHeight(areaIdent, index);
|
|
320
|
+
|
|
321
|
+
if (top + height > 0) {
|
|
322
|
+
// It's not scrolled out on top:
|
|
323
|
+
// Visible!
|
|
324
|
+
this.firstVisibleRowIndex = index;
|
|
325
|
+
|
|
326
|
+
// center -------------------------------------------
|
|
327
|
+
let geo = { left, width, height, top, index };
|
|
328
|
+
let rowDiv = this.dom.addRowDiv(centerArea, geo, index, areaIdent, "center");
|
|
329
|
+
const centerStartCol = fixedLeftColumnCount;
|
|
330
|
+
|
|
331
|
+
this.adjustColumnsToRowParent({
|
|
332
|
+
areaIdent,
|
|
333
|
+
sideIdent: "center",
|
|
334
|
+
areaModel,
|
|
335
|
+
geo,
|
|
336
|
+
parent: rowDiv,
|
|
337
|
+
rowIndex: index,
|
|
338
|
+
columnIndexStart: centerStartCol,
|
|
339
|
+
columnIndexEnd: columnCount - fixedRightColumnCount - 1,
|
|
340
|
+
verticalFixed: false,
|
|
341
|
+
lastRowOfModel
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// west -------------------------------------------
|
|
345
|
+
if (padding.left > 0) {
|
|
346
|
+
geo = { left, width: this.areaBodyWestGeo.width, height, top, index };
|
|
347
|
+
rowDiv = this.dom.addRowDiv(westArea, geo, index, areaIdent, "west");
|
|
348
|
+
this.adjustColumnsToRowParent({
|
|
349
|
+
areaIdent,
|
|
350
|
+
sideIdent: "west",
|
|
351
|
+
areaModel,
|
|
352
|
+
geo,
|
|
353
|
+
parent: rowDiv,
|
|
354
|
+
rowIndex: index,
|
|
355
|
+
columnIndexStart: 0,
|
|
356
|
+
columnIndexEnd: centerStartCol - 1,
|
|
357
|
+
verticalFixed: true,
|
|
358
|
+
lastRowOfModel
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// east -------------------------------------------
|
|
363
|
+
if (padding.right > 0) {
|
|
364
|
+
geo = { left, width: this.areaBodyEastGeo.width, height, top, index };
|
|
365
|
+
rowDiv = this.dom.addRowDiv(eastArea, geo, index, areaIdent, "east");
|
|
366
|
+
this.adjustColumnsToRowParent({
|
|
367
|
+
areaIdent,
|
|
368
|
+
sideIdent: "east",
|
|
369
|
+
areaModel,
|
|
370
|
+
geo,
|
|
371
|
+
parent: rowDiv,
|
|
372
|
+
rowIndex: index,
|
|
373
|
+
columnIndexStart: columnCount - fixedRightColumnCount,
|
|
374
|
+
columnIndexEnd: columnCount - 1,
|
|
375
|
+
verticalFixed: true,
|
|
376
|
+
lastRowOfModel
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// "collapse / expand all" event handler action attribute:
|
|
381
|
+
if (areaIdent === "header" && this.tree && index === rowCount - 1) {
|
|
382
|
+
const div =
|
|
383
|
+
this.dom.applyStyle(
|
|
384
|
+
this.dom.setAttribute(
|
|
385
|
+
this.dom.addDiv(rowDiv, new GeoData(16, 20, 20, 8)),
|
|
386
|
+
"data-ge-action", "toggleExpandCollapseAll"
|
|
387
|
+
),
|
|
388
|
+
{ "cursor": "pointer" }
|
|
389
|
+
);
|
|
390
|
+
const treeOptionsArrow = this.tableOptions.treeOptions.arrowExpandCollapseAll;
|
|
391
|
+
if (treeOptionsArrow) {
|
|
392
|
+
const textElement = this.dom.domService.createText(treeOptionsArrow.content);
|
|
393
|
+
this.dom.domService.appendChild(div, textElement);
|
|
394
|
+
if (treeOptionsArrow.style) {
|
|
395
|
+
this.dom.applyStyleString(div, treeOptionsArrow.style);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
}
|
|
401
|
+
y = y + height;
|
|
402
|
+
// lastVisibleRowIndex = index;
|
|
403
|
+
if (y > divHeight) { // + 1000) {
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
406
|
+
} // for
|
|
407
|
+
|
|
408
|
+
// We draw the big colspan and rowspan cells at the end.
|
|
409
|
+
// This fixes the 'half cutted big cell' problem:
|
|
410
|
+
if (this.colAndRowspanModels && this.colAndRowspanModels[areaIdent]) {
|
|
411
|
+
// draw col/rowspan cells again:
|
|
412
|
+
const ranges = this.colAndRowspanModels[areaIdent]?.getRanges() ?? [];
|
|
413
|
+
if (ranges.length) {
|
|
414
|
+
|
|
415
|
+
for (const range of ranges) {
|
|
416
|
+
let xStart = 0;
|
|
417
|
+
let child: HTMLDivElement = centerArea.child;
|
|
418
|
+
let sideIdent: SideIdent = "center";
|
|
419
|
+
if (range.c1 < fixedLeftColumnCount) {
|
|
420
|
+
// West:
|
|
421
|
+
child = westArea.child;
|
|
422
|
+
sideIdent = "west";
|
|
423
|
+
} else if (fixedRightColumnCount > 0 && range.c1 >= columnCount - fixedRightColumnCount) {
|
|
424
|
+
// East:
|
|
425
|
+
child = eastArea.child;
|
|
426
|
+
sideIdent = "east";
|
|
427
|
+
} else {
|
|
428
|
+
// Center:
|
|
429
|
+
const virtualRowDivLeftF1 = this.areaBodyCenterGeo.width - this.tableModel.getContentWidthInPixel();
|
|
430
|
+
xStart = (this.scrollFactorX * virtualRowDivLeftF1) - this.areaBodyWestGeo.width;
|
|
431
|
+
sideIdent = "center";
|
|
432
|
+
}
|
|
433
|
+
this.drawBigCell(range, xStart, yStart, areaModel, child, sideIdent);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Draws big cells (rowspan and or colspan) in body/center
|
|
441
|
+
* @param range CellRange
|
|
442
|
+
* @param xStart X position in pixel for top left corner
|
|
443
|
+
* @param yStart Y position in pixel for top left corner
|
|
444
|
+
* @param areaModel AreaModelIf
|
|
445
|
+
* @param parentDiv Parent div as HTMLDivElement
|
|
446
|
+
* @param sideIdent SideIdent (west,center,east)
|
|
447
|
+
* @protected
|
|
448
|
+
*/
|
|
449
|
+
protected drawBigCell(
|
|
450
|
+
range: CellRange,
|
|
451
|
+
xStart: number,
|
|
452
|
+
yStart: number,
|
|
453
|
+
areaModel: AreaModelIf,
|
|
454
|
+
parentDiv: HTMLDivElement,
|
|
455
|
+
sideIdent: SideIdent) {
|
|
456
|
+
|
|
457
|
+
const y1 = yStart + this.getRowHeights(0, range.r1 - 1, areaModel).reduce((a, b) => a + b, 0);
|
|
458
|
+
|
|
459
|
+
const columnCount = this.tableModel.getColumnCount();
|
|
460
|
+
const fixedRightColumnCount = this.tableModel.getFixedRightColumnCount();
|
|
461
|
+
let firstColIdx = 0;
|
|
462
|
+
if (fixedRightColumnCount > 0 && range.c1 >= columnCount - fixedRightColumnCount) {
|
|
463
|
+
// We are on the (fixed) east side, so we have to fix firstColIdx:
|
|
464
|
+
firstColIdx = columnCount - fixedRightColumnCount;
|
|
465
|
+
}
|
|
466
|
+
const x1 = xStart + this.getColumnWidths(firstColIdx, range.c1 - 1).reduce((a, b) => a + b, 0);
|
|
467
|
+
|
|
468
|
+
const h = this.getRowHeights(range.r1, range.r2, areaModel).reduce((a, b) => a + b, 0);
|
|
469
|
+
const w = this.getColumnWidths(range.c1, range.c2).reduce((a, b) => a + b, 0);
|
|
470
|
+
|
|
471
|
+
let cellSelected = false;
|
|
472
|
+
const selectionModel = this.getSelectionModel ? this.getSelectionModel() : undefined;
|
|
473
|
+
if (selectionModel) {
|
|
474
|
+
const count = selectionModel.getSelectionCount(range.r1, range.c1);
|
|
475
|
+
cellSelected = count > 0;
|
|
476
|
+
}
|
|
477
|
+
if (range.gammaRange) {
|
|
478
|
+
// TODO render hierarchy cell
|
|
479
|
+
console.info('TODO here', range);
|
|
480
|
+
|
|
481
|
+
this.renderCell({
|
|
482
|
+
areaModel,
|
|
483
|
+
areaIdent: areaModel.areaIdent,
|
|
484
|
+
sideIdent,
|
|
485
|
+
rowIndex: range.r1,
|
|
486
|
+
columnIndex: range.c1,
|
|
487
|
+
left: x1,
|
|
488
|
+
top: y1,
|
|
489
|
+
width: w,
|
|
490
|
+
height: h,
|
|
491
|
+
parent: parentDiv,
|
|
492
|
+
cellSelected,
|
|
493
|
+
lastRowOfModel: true,
|
|
494
|
+
gammaRange:range.gammaRange
|
|
495
|
+
});
|
|
496
|
+
} else {
|
|
497
|
+
this.renderCell({
|
|
498
|
+
areaModel,
|
|
499
|
+
areaIdent: areaModel.areaIdent,
|
|
500
|
+
sideIdent,
|
|
501
|
+
rowIndex: range.r1,
|
|
502
|
+
columnIndex: range.c1,
|
|
503
|
+
left: x1,
|
|
504
|
+
top: y1,
|
|
505
|
+
width: w,
|
|
506
|
+
height: h,
|
|
507
|
+
parent: parentDiv,
|
|
508
|
+
cellSelected,
|
|
509
|
+
lastRowOfModel: true,
|
|
510
|
+
gammaRange:range.gammaRange
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
if (areaModel.areaIdent === "header" && this.tableOptions.columnsResizable) {
|
|
515
|
+
this.renderHeaderCellResizeHandle({
|
|
516
|
+
rowIndex: range.r1,
|
|
517
|
+
columnIndex: range.c1,
|
|
518
|
+
cellLeft: x1,
|
|
519
|
+
cellTop: y1,
|
|
520
|
+
cellWidth: w,
|
|
521
|
+
cellHeight: h,
|
|
522
|
+
parent: parentDiv
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
protected findRowOfImportantRowspanCell(areaModel: AreaModelIf, rowIndex: number, colIndex: number): number {
|
|
529
|
+
const maxRowspan = areaModel.getMaxRowspan();
|
|
530
|
+
for (let r = rowIndex - 1; r > -1; r--) {
|
|
531
|
+
const rowspan = areaModel.getRowspanAt(r, colIndex);
|
|
532
|
+
if (rowspan > 1 && r + rowspan + 1 >= rowIndex) {
|
|
533
|
+
return r;
|
|
534
|
+
}
|
|
535
|
+
if (rowIndex - r > maxRowspan) {
|
|
536
|
+
return -1;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return -1;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
protected adjustColumnsToRowParent(
|
|
544
|
+
{
|
|
545
|
+
areaIdent,
|
|
546
|
+
sideIdent,
|
|
547
|
+
areaModel,
|
|
548
|
+
geo,
|
|
549
|
+
parent,
|
|
550
|
+
rowIndex,
|
|
551
|
+
columnIndexStart,
|
|
552
|
+
columnIndexEnd,
|
|
553
|
+
verticalFixed = false,
|
|
554
|
+
lastRowOfModel = false
|
|
555
|
+
}: ArgsAdjustColumnsToRowParentParams
|
|
556
|
+
): void {
|
|
557
|
+
|
|
558
|
+
this.scrollViewportLeft = this.scrollViewport.scrollLeft;
|
|
559
|
+
let virtualRowDivLeft = 0;
|
|
560
|
+
if (!verticalFixed) {
|
|
561
|
+
const virtualRowDivLeftF1 = (this.areaBodyCenterGeo.width) - this.tableModel.getContentWidthInPixel();
|
|
562
|
+
virtualRowDivLeft = this.scrollFactorX * virtualRowDivLeftF1;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
const top = 0;
|
|
566
|
+
const renderSelection = !!(areaIdent === "body" && sideIdent);
|
|
567
|
+
|
|
568
|
+
let x = virtualRowDivLeft;
|
|
569
|
+
for (let index = columnIndexStart; index <= columnIndexEnd; index++) {
|
|
570
|
+
const left = x;
|
|
571
|
+
const w = this.tableModel.getColumnWidth(index);
|
|
572
|
+
if (w > 0 && left + w > 0) {
|
|
573
|
+
// Visible! Render cell div:
|
|
574
|
+
|
|
575
|
+
// calc height:
|
|
576
|
+
let height = geo.height;
|
|
577
|
+
const rowspan = areaModel.getRowspanAt(rowIndex, index);
|
|
578
|
+
const colspan = areaModel.getColspanAt(rowIndex, index);
|
|
579
|
+
// if (areaIdent==='header') {
|
|
580
|
+
// console.info(rowIndex+'/'+index, rowspan+'_'+colspan)
|
|
581
|
+
// }
|
|
582
|
+
|
|
583
|
+
if (rowspan > 1) {
|
|
584
|
+
height = this.getRowHeights(rowIndex, rowIndex + rowspan - 1, areaModel).reduce((a, b) => a + b, 0);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
let width = w;
|
|
588
|
+
if (colspan > 1) {
|
|
589
|
+
width = this.getColumnWidths(index, index + colspan - 1).reduce((a, b) => a + b, 0);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
let skip = false;
|
|
593
|
+
if (this.colAndRowspanModels && this.colAndRowspanModels[areaIdent]) {
|
|
594
|
+
if (this.colAndRowspanModels[areaIdent]?.isInRange(rowIndex, index)) {
|
|
595
|
+
skip = true; // for the body area we don't want to to render the small single cells
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
if (this.draggingTargetColumnIndex === index
|
|
600
|
+
&& areaIdent !== "header") {
|
|
601
|
+
// For a running drag and drop action:
|
|
602
|
+
this.renderDragTargetDiv(parent, left, top, width, height);
|
|
603
|
+
const geo1 = { left, top, width, height };
|
|
604
|
+
this.dom.addColumnBorderDivs(this.tableOptions, parent, geo1, areaIdent, sideIdent);
|
|
605
|
+
|
|
606
|
+
} else {
|
|
607
|
+
const cellSelected = this.renderSelectedBackgroundDiv(skip, renderSelection, sideIdent, areaModel, rowIndex, index, parent, left, top, width, height);
|
|
608
|
+
|
|
609
|
+
if (!skip) {
|
|
610
|
+
this.renderCell({
|
|
611
|
+
areaModel,
|
|
612
|
+
areaIdent,
|
|
613
|
+
sideIdent,
|
|
614
|
+
rowIndex,
|
|
615
|
+
columnIndex: index,
|
|
616
|
+
left,
|
|
617
|
+
top,
|
|
618
|
+
width,
|
|
619
|
+
height,
|
|
620
|
+
parent,
|
|
621
|
+
cellSelected,
|
|
622
|
+
lastRowOfModel,
|
|
623
|
+
gammaRange:true
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
if (areaIdent === "header" && this.tableOptions.columnsResizable) {
|
|
627
|
+
this.renderHeaderCellResizeHandle({
|
|
628
|
+
rowIndex: rowIndex,
|
|
629
|
+
columnIndex: index,
|
|
630
|
+
cellLeft: left,
|
|
631
|
+
cellTop: top,
|
|
632
|
+
cellWidth: width,
|
|
633
|
+
cellHeight: height,
|
|
634
|
+
parent: parent
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
x = x + w;
|
|
641
|
+
if (x > this.areaBodyCenterGeo.width) {
|
|
642
|
+
break;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
// Right vertical border:
|
|
646
|
+
if (this.tableOptions.verticalBorderVisible) {
|
|
647
|
+
this.dom.addVerticalBorder(new GeoData(x - 1, 1, geo.height, 0), parent);
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
protected getTreeArrowColumnIndex(): 0 | 1 {
|
|
652
|
+
if (this.tableOptions.showCheckboxWihoutExtraColumn) {
|
|
653
|
+
return 0;
|
|
654
|
+
}
|
|
655
|
+
if (this.tableModel.isRowCheckboxVisible()) {
|
|
656
|
+
return 1;
|
|
657
|
+
}
|
|
658
|
+
return 0;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
protected addAndRenderCellDiv(
|
|
662
|
+
{
|
|
663
|
+
areaModel,
|
|
664
|
+
areaIdent,
|
|
665
|
+
sideIdent,
|
|
666
|
+
rowIndex,
|
|
667
|
+
index,
|
|
668
|
+
left,
|
|
669
|
+
width,
|
|
670
|
+
height,
|
|
671
|
+
top,
|
|
672
|
+
parent,
|
|
673
|
+
lastRowOfModel
|
|
674
|
+
}: ArgsRenderCellDiv): [HTMLDivElement, RendererCleanupFnType | undefined] {
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
const editor = this.editorRenderer && this.editorRendererRow === rowIndex && this.editorRendererColumn === index;
|
|
678
|
+
const cellRenderer = (editor) ? this.editorRenderer : areaModel.getCellRenderer(rowIndex, index);
|
|
679
|
+
const geo = { left, width, height, top, index };
|
|
680
|
+
const rowObject = areaModel.getRowByIndex(rowIndex);
|
|
681
|
+
let treeArrow: TreeArrowType = "none";
|
|
682
|
+
|
|
683
|
+
const arrowIndexOk = index === this.getTreeArrowColumnIndex();
|
|
684
|
+
|
|
685
|
+
if (arrowIndexOk && rowObject instanceof TreeRow) {
|
|
686
|
+
const tr = rowObject as TreeRow<any>;
|
|
687
|
+
if (tr.children?.length) {
|
|
688
|
+
if (tr.expanded) {
|
|
689
|
+
treeArrow = "expanded";
|
|
690
|
+
} else {
|
|
691
|
+
treeArrow = "collapsed";
|
|
692
|
+
}
|
|
693
|
+
} else {
|
|
694
|
+
treeArrow = "hidden";
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
let sortState = undefined;
|
|
699
|
+
if (areaIdent === "header") {
|
|
700
|
+
const columnDef = this.tableModel.getColumnDef(index);
|
|
701
|
+
if (!columnDef?.sortIconVisible || columnDef?.sortIconVisible()) {
|
|
702
|
+
sortState = columnDef?.sortState;
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
const val = areaModel.getValueAt(rowIndex, index);
|
|
707
|
+
const text = cellRenderer ? "" : `${val}`;
|
|
708
|
+
const checkedType = areaModel.isRowChecked(rowIndex);
|
|
709
|
+
const cell = this.dom.addColumnDiv(
|
|
710
|
+
parent, geo, rowIndex, index, areaIdent, sideIdent,
|
|
711
|
+
text, treeArrow, this.tableOptions, checkedType, sortState);
|
|
712
|
+
|
|
713
|
+
const tooltip = areaModel.getTooltipAt(rowIndex, index);
|
|
714
|
+
if (tooltip) {
|
|
715
|
+
this.dom.setAttribute(cell, "title", tooltip);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
const columnDef = this.tableModel.getColumnDef(index);
|
|
719
|
+
if (columnDef && columnDef.classes[areaIdent]) {
|
|
720
|
+
this.dom.addClasses(columnDef.classes[areaIdent], cell);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
let fn: RendererCleanupFnType | undefined = undefined;
|
|
724
|
+
if (cellRenderer) {
|
|
725
|
+
fn = cellRenderer.render(cell, rowIndex, index, areaIdent, areaModel, val, this.dom.domService);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
const classes = areaModel.getCustomClassesAt(rowIndex, index);
|
|
729
|
+
if (classes.length) {
|
|
730
|
+
this.dom.addClasses(classes, cell);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
this.dom.addColumnBorderDivs(this.tableOptions, parent, geo, areaIdent, sideIdent);
|
|
734
|
+
if (lastRowOfModel) {
|
|
735
|
+
this.dom.addHorizontalBorder({ left, width, height, top: top + height }, parent);
|
|
736
|
+
}
|
|
737
|
+
if (this.getFocusModel && areaIdent === "body") {
|
|
738
|
+
const fm = this.getFocusModel();
|
|
739
|
+
if (fm?.hasFocus(rowIndex, index)) {
|
|
740
|
+
this.dom.addFocusBorderDivs(parent, geo, {});
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
if (areaIdent === "header") {
|
|
744
|
+
this.dom.setAttribute(cell, "data-ge-action", "drag-column");
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
const styles = areaModel.getCustomStyleAt(rowIndex, index);
|
|
748
|
+
if (styles) {
|
|
749
|
+
for (const css in styles) {
|
|
750
|
+
this.dom.setStyle(cell, css, styles[css]);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
return [cell, fn];
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
protected getColumnWidths(startIndex: number, endIndex: number): number[] {
|
|
757
|
+
const ret: number[] = [];
|
|
758
|
+
for (let i = startIndex; i <= endIndex; i++) {
|
|
759
|
+
ret.push(this.tableModel.getColumnWidth(i));
|
|
760
|
+
}
|
|
761
|
+
return ret;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
protected getRowHeights(startIndex: number, endIndex: number, areaModel: AreaModelIf): number[] {
|
|
765
|
+
const ret: number[] = [];
|
|
766
|
+
for (let i = startIndex; i <= endIndex; i++) {
|
|
767
|
+
ret.push(areaModel.getRowHeight(i));
|
|
768
|
+
}
|
|
769
|
+
return ret;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
protected adjustHoverRows(mouseMoveEvent: GeMouseEvent) {
|
|
773
|
+
if (this.tableOptions.hoverRowVisible && mouseMoveEvent.rowIndex > -1) {
|
|
774
|
+
const width = this.hostElement.clientWidth;
|
|
775
|
+
const rowHeight = this.tableModel.getAreaModel("body").getRowHeight(mouseMoveEvent.rowIndex);
|
|
776
|
+
const top = mouseMoveEvent.rowTop + this.areaHeaderCenter.parent.clientHeight - this.scrollTop;
|
|
777
|
+
this.dom.applyStyle(this.hoverRow, {
|
|
778
|
+
"left": "0",
|
|
779
|
+
"top": top + "px",
|
|
780
|
+
"width": width + "px",
|
|
781
|
+
"height": rowHeight + "px",
|
|
782
|
+
"display": "block"
|
|
783
|
+
});
|
|
784
|
+
} else {
|
|
785
|
+
this.hideHoverRow();
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
protected hideHoverRow() {
|
|
790
|
+
this.dom.applyStyle(this.hoverRow, {
|
|
791
|
+
"display": "none"
|
|
792
|
+
});
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
protected adjustHoverColumns(mouseMoveEvent: GeMouseEvent) {
|
|
796
|
+
if (this.tableOptions.hoverColumnVisible && mouseMoveEvent.rowIndex > -1) {
|
|
797
|
+
const height = this.hostElement.clientHeight;
|
|
798
|
+
const width = this.tableModel.getColumnWidth(mouseMoveEvent.columnIndex);
|
|
799
|
+
const fixedWest = this.areaBodyWestGeo.width;
|
|
800
|
+
const left = mouseMoveEvent.columnLeft + this.tableModel.getPadding().left - this.scrollLeft - fixedWest;
|
|
801
|
+
this.dom.applyStyle(this.hoverColumn, {
|
|
802
|
+
"left": (left) + "px",
|
|
803
|
+
"top": "0px",
|
|
804
|
+
"width": width + "px",
|
|
805
|
+
"height": height + "px",
|
|
806
|
+
"display": "block"
|
|
807
|
+
});
|
|
808
|
+
} else {
|
|
809
|
+
this.hideHoverColumn();
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
protected hideHoverColumn() {
|
|
814
|
+
this.dom.applyStyle(this.hoverColumn, {
|
|
815
|
+
"display": "none"
|
|
816
|
+
});
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
protected debounce(fn: Function, delay: number = 1000) {
|
|
820
|
+
if (this.debounceTimeout) {
|
|
821
|
+
clearTimeout(this.debounceTimeout);
|
|
822
|
+
}
|
|
823
|
+
this.debounceTimeout = setTimeout(fn.bind(this), delay);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
private renderDragTargetDiv(parent: HTMLDivElement, left: number, top: number, width: number, height: number): HTMLDivElement {
|
|
827
|
+
const div = this.dom.applyStylePosistionAbsolute(
|
|
828
|
+
this.dom.createDivWithClass("ge-table-drop-zone", parent)
|
|
829
|
+
);
|
|
830
|
+
this.dom.setStyle(div, "left", `${left}px`);
|
|
831
|
+
this.dom.setStyle(div, "top", `${top}px`);
|
|
832
|
+
this.dom.setStyle(div, "width", `${width}px`);
|
|
833
|
+
this.dom.setStyle(div, "height", `${height}px`);
|
|
834
|
+
return div;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
|
|
838
|
+
private renderSelectedBackgroundDiv(
|
|
839
|
+
skip: boolean,
|
|
840
|
+
renderSelection: boolean,
|
|
841
|
+
sideIdent: SideIdent,
|
|
842
|
+
areaModel: AreaModelIf,
|
|
843
|
+
rowIndex: number,
|
|
844
|
+
index: number,
|
|
845
|
+
parent: HTMLDivElement,
|
|
846
|
+
left: number, top: number, width: number, height: number) {
|
|
847
|
+
let cellSelected = false;
|
|
848
|
+
if (!skip && renderSelection && areaModel.isSelectable(rowIndex, index)) {
|
|
849
|
+
if (this.getSelectionModel) {
|
|
850
|
+
const selectionModel = this.getSelectionModel();
|
|
851
|
+
if (selectionModel) {
|
|
852
|
+
const count = selectionModel.getSelectionCount(rowIndex, index);
|
|
853
|
+
cellSelected = count > 0;
|
|
854
|
+
for (let i = 0; i < count; i++) {
|
|
855
|
+
const div = this.dom.applyStylePosistionAbsolute(
|
|
856
|
+
// ge-table-body-west-selected-range
|
|
857
|
+
this.dom.createDivWithClass(`ge-table-${areaModel.areaIdent}-${sideIdent}-selected-range`, parent)
|
|
858
|
+
);
|
|
859
|
+
this.dom.setStyle(div, "left", `${left}px`);
|
|
860
|
+
this.dom.setStyle(div, "top", `${top}px`);
|
|
861
|
+
this.dom.setStyle(div, "width", `${width}px`);
|
|
862
|
+
this.dom.setStyle(div, "height", `${height}px`);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
return cellSelected;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
private renderCell(
|
|
871
|
+
{
|
|
872
|
+
areaModel,
|
|
873
|
+
areaIdent,
|
|
874
|
+
sideIdent,
|
|
875
|
+
rowIndex,
|
|
876
|
+
columnIndex,
|
|
877
|
+
left,
|
|
878
|
+
top,
|
|
879
|
+
width,
|
|
880
|
+
height,
|
|
881
|
+
parent,
|
|
882
|
+
cellSelected,
|
|
883
|
+
lastRowOfModel,
|
|
884
|
+
gammaRange
|
|
885
|
+
}: ArgsRenderCell
|
|
886
|
+
) {
|
|
887
|
+
const [div, fn] = this.addAndRenderCellDiv({
|
|
888
|
+
areaModel,
|
|
889
|
+
areaIdent,
|
|
890
|
+
sideIdent,
|
|
891
|
+
rowIndex,
|
|
892
|
+
index: columnIndex,
|
|
893
|
+
left,
|
|
894
|
+
width,
|
|
895
|
+
height,
|
|
896
|
+
top,
|
|
897
|
+
parent,
|
|
898
|
+
lastRowOfModel,
|
|
899
|
+
gammaRange: gammaRange
|
|
900
|
+
});
|
|
901
|
+
if (cellSelected) {
|
|
902
|
+
this.dom.addClass(`ge-table-${areaIdent}-${sideIdent}-selected-range`, div);
|
|
903
|
+
}
|
|
904
|
+
if (fn) {
|
|
905
|
+
this.cleanupFunctions[areaIdent].push(fn);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
private renderHeaderCellResizeHandle(
|
|
911
|
+
{ rowIndex, columnIndex, cellLeft, cellTop, cellWidth, cellHeight, parent }: ArgsRenderHeaderCellResizeHandle
|
|
912
|
+
) {
|
|
913
|
+
|
|
914
|
+
const domService = this.dom.domService;
|
|
915
|
+
const handleWidth = this.tableOptions.columnResizeHandleWidthInPx ?? 2;
|
|
916
|
+
|
|
917
|
+
const div = domService.createElement<HTMLDivElement>("div");
|
|
918
|
+
domService.setAttribute(div, "data-col-index", `${columnIndex}`);
|
|
919
|
+
domService.setAttribute(div, "data-row-index", `${rowIndex}`);
|
|
920
|
+
domService.setAttribute(div, "data-area", "header");
|
|
921
|
+
domService.setAttribute(div, "data-ge-action", "resize-column");
|
|
922
|
+
// domService.setAttribute(div, 'data-ge-action', 'column-resize');
|
|
923
|
+
domService.addClass(div, `ge-table-column-resize-handle`);
|
|
924
|
+
domService.setStyle(div, "display", "clip");
|
|
925
|
+
domService.setStyle(div, "position", "absolute");
|
|
926
|
+
domService.setStyle(div, "cursor", "col-resize");
|
|
927
|
+
domService.setStyle(div, "left", `${(cellLeft + cellWidth - handleWidth)}px`);
|
|
928
|
+
domService.setStyle(div, "top", `${cellTop}px`);
|
|
929
|
+
domService.setStyle(div, "width", `${handleWidth}px`);
|
|
930
|
+
domService.setStyle(div, "height", `${cellHeight}px`);
|
|
931
|
+
domService.appendChild(parent, div);
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
|
|
935
|
+
}
|
|
936
|
+
|