@openui5/sap.m 1.115.1 → 1.117.0
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/.reuse/dep5 +0 -5
- package/THIRDPARTY.txt +1 -7
- package/package.json +4 -4
- package/src/sap/m/.library +1 -1
- package/src/sap/m/AccButton.js +1 -1
- package/src/sap/m/ActionListItem.js +1 -1
- package/src/sap/m/ActionSelect.js +1 -1
- package/src/sap/m/ActionSheet.js +6 -2
- package/src/sap/m/ActionTile.js +1 -1
- package/src/sap/m/ActionTileContent.js +1 -1
- package/src/sap/m/AdditionalTextButton.js +1 -1
- package/src/sap/m/App.js +1 -1
- package/src/sap/m/AssociativeOverflowToolbar.js +1 -1
- package/src/sap/m/Avatar.js +46 -5
- package/src/sap/m/AvatarRenderer.js +16 -10
- package/src/sap/m/Bar.js +1 -1
- package/src/sap/m/Breadcrumbs.js +6 -5
- package/src/sap/m/BusyDialog.js +5 -3
- package/src/sap/m/BusyIndicator.js +1 -1
- package/src/sap/m/Button.js +1 -1
- package/src/sap/m/Carousel.js +24 -8
- package/src/sap/m/CarouselLayout.js +1 -1
- package/src/sap/m/CarouselRenderer.js +19 -4
- package/src/sap/m/CheckBox.js +8 -4
- package/src/sap/m/ColorPalette.js +1 -1
- package/src/sap/m/ColorPalettePopover.js +1 -1
- package/src/sap/m/Column.js +29 -170
- package/src/sap/m/ColumnHeaderPopover.js +1 -1
- package/src/sap/m/ColumnListItem.js +7 -12
- package/src/sap/m/ColumnListItemRenderer.js +16 -27
- package/src/sap/m/ColumnPopoverActionItem.js +1 -1
- package/src/sap/m/ColumnPopoverCustomItem.js +1 -1
- package/src/sap/m/ColumnPopoverItem.js +1 -1
- package/src/sap/m/ColumnPopoverSelectListItem.js +1 -1
- package/src/sap/m/ColumnPopoverSortItem.js +1 -1
- package/src/sap/m/ComboBox.js +1 -1
- package/src/sap/m/ComboBoxBase.js +1 -1
- package/src/sap/m/ComboBoxTextField.js +1 -1
- package/src/sap/m/CustomListItem.js +1 -1
- package/src/sap/m/CustomTile.js +1 -1
- package/src/sap/m/CustomTreeItem.js +1 -1
- package/src/sap/m/DatePicker.js +31 -5
- package/src/sap/m/DatePickerRenderer.js +3 -2
- package/src/sap/m/DateRangeSelection.js +77 -25
- package/src/sap/m/DateTimeField.js +15 -10
- package/src/sap/m/DateTimeInput.js +1 -1
- package/src/sap/m/DateTimePicker.js +1 -1
- package/src/sap/m/DateTimePickerRenderer.js +3 -1
- package/src/sap/m/Dialog.js +16 -10
- package/src/sap/m/DialogRenderer.js +3 -3
- package/src/sap/m/DisplayListItem.js +1 -1
- package/src/sap/m/DraftIndicator.js +1 -1
- package/src/sap/m/DynamicDate.js +1 -1
- package/src/sap/m/DynamicDateOption.js +2 -2
- package/src/sap/m/DynamicDateRange.js +42 -5
- package/src/sap/m/DynamicDateValueHelpUIType.js +1 -1
- package/src/sap/m/ExpandableText.js +1 -1
- package/src/sap/m/FacetFilter.js +1 -3
- package/src/sap/m/FacetFilterItem.js +1 -1
- package/src/sap/m/FacetFilterList.js +1 -1
- package/src/sap/m/FeedContent.js +1 -1
- package/src/sap/m/FeedInput.js +1 -1
- package/src/sap/m/FeedListItem.js +18 -1
- package/src/sap/m/FeedListItemAction.js +1 -1
- package/src/sap/m/Fiori20Adapter.js +2 -2
- package/src/sap/m/FlexBox.js +1 -1
- package/src/sap/m/FlexItemData.js +1 -1
- package/src/sap/m/FormattedText.js +44 -50
- package/src/sap/m/GenericTag.js +1 -1
- package/src/sap/m/GenericTile.js +1 -1
- package/src/sap/m/GroupHeaderListItem.js +1 -1
- package/src/sap/m/GroupHeaderListItemRenderer.js +5 -5
- package/src/sap/m/GrowingEnablement.js +34 -32
- package/src/sap/m/GrowingList.js +1 -1
- package/src/sap/m/HBox.js +1 -1
- package/src/sap/m/HeaderContainer.js +1 -1
- package/src/sap/m/HeaderContainerItemNavigator.js +1 -1
- package/src/sap/m/HyphenationSupport.js +13 -4
- package/src/sap/m/IconTabBar.js +3 -1
- package/src/sap/m/IconTabBarSelectList.js +1 -1
- package/src/sap/m/IconTabFilter.js +3 -3
- package/src/sap/m/IconTabFilterExpandButtonBadge.js +1 -1
- package/src/sap/m/IconTabHeader.js +1 -1
- package/src/sap/m/IconTabSeparator.js +1 -1
- package/src/sap/m/IllustratedMessage.js +4 -2
- package/src/sap/m/Illustration.js +1 -1
- package/src/sap/m/IllustrationPool.js +4 -3
- package/src/sap/m/Image.js +1 -1
- package/src/sap/m/ImageContent.js +1 -1
- package/src/sap/m/Input.js +21 -12
- package/src/sap/m/InputBase.js +7 -5
- package/src/sap/m/InputBaseRenderer.js +3 -3
- package/src/sap/m/InputListItem.js +1 -1
- package/src/sap/m/Label.js +1 -1
- package/src/sap/m/LabelRenderer.js +3 -3
- package/src/sap/m/LightBox.js +1 -1
- package/src/sap/m/LightBoxItem.js +1 -1
- package/src/sap/m/Link.js +36 -3
- package/src/sap/m/List.js +1 -1
- package/src/sap/m/ListBase.js +61 -28
- package/src/sap/m/ListBaseRenderer.js +12 -4
- package/src/sap/m/ListItemBase.js +17 -8
- package/src/sap/m/ListItemBaseRenderer.js +6 -6
- package/src/sap/m/MaskEnabler.js +1 -1
- package/src/sap/m/MaskInput.js +1 -1
- package/src/sap/m/MaskInputRule.js +1 -1
- package/src/sap/m/Menu.js +14 -1
- package/src/sap/m/MenuButton.js +1 -1
- package/src/sap/m/MenuItem.js +1 -1
- package/src/sap/m/MenuListItem.js +1 -1
- package/src/sap/m/MessageItem.js +1 -1
- package/src/sap/m/MessageListItem.js +1 -1
- package/src/sap/m/MessagePage.js +1 -1
- package/src/sap/m/MessagePopover.js +1 -1
- package/src/sap/m/MessagePopoverItem.js +1 -1
- package/src/sap/m/MessageStrip.js +1 -1
- package/src/sap/m/MessageToast.js +1 -12
- package/src/sap/m/MessageView.js +2 -2
- package/src/sap/m/MultiComboBox.js +3 -3
- package/src/sap/m/MultiEditField.js +1 -1
- package/src/sap/m/MultiInput.js +13 -2
- package/src/sap/m/NavContainer.js +21 -5
- package/src/sap/m/NewsContent.js +1 -1
- package/src/sap/m/NotificationList.js +1 -1
- package/src/sap/m/NotificationListBase.js +1 -1
- package/src/sap/m/NotificationListGroup.js +1 -1
- package/src/sap/m/NotificationListItem.js +1 -1
- package/src/sap/m/NumericContent.js +1 -1
- package/src/sap/m/NumericInput.js +1 -1
- package/src/sap/m/ObjectAttribute.js +1 -1
- package/src/sap/m/ObjectHeader.js +6 -1
- package/src/sap/m/ObjectIdentifier.js +1 -1
- package/src/sap/m/ObjectListItem.js +9 -2
- package/src/sap/m/ObjectMarker.js +1 -1
- package/src/sap/m/ObjectNumber.js +1 -1
- package/src/sap/m/ObjectStatus.js +63 -4
- package/src/sap/m/ObjectStatusRenderer.js +21 -9
- package/src/sap/m/OverflowToolbar.js +30 -15
- package/src/sap/m/OverflowToolbarAssociativePopover.js +5 -5
- package/src/sap/m/OverflowToolbarButton.js +1 -1
- package/src/sap/m/OverflowToolbarLayoutData.js +1 -1
- package/src/sap/m/OverflowToolbarMenuButton.js +1 -1
- package/src/sap/m/OverflowToolbarToggleButton.js +1 -1
- package/src/sap/m/P13nAnyFilterItem.js +1 -1
- package/src/sap/m/P13nColumnsItem.js +1 -1
- package/src/sap/m/P13nColumnsPanel.js +2 -8
- package/src/sap/m/P13nConditionPanel.js +1 -1
- package/src/sap/m/P13nDialog.js +2 -1
- package/src/sap/m/P13nDimMeasureItem.js +1 -1
- package/src/sap/m/P13nDimMeasurePanel.js +3 -10
- package/src/sap/m/P13nFilterItem.js +1 -1
- package/src/sap/m/P13nFilterPanel.js +28 -43
- package/src/sap/m/P13nGroupItem.js +1 -1
- package/src/sap/m/P13nGroupPanel.js +1 -1
- package/src/sap/m/P13nItem.js +1 -1
- package/src/sap/m/P13nPanel.js +1 -1
- package/src/sap/m/P13nSelectionItem.js +1 -1
- package/src/sap/m/P13nSelectionPanel.js +5 -3
- package/src/sap/m/P13nSortItem.js +1 -1
- package/src/sap/m/P13nSortPanel.js +1 -1
- package/src/sap/m/PDFViewer.js +1 -1
- package/src/sap/m/PDFViewerRenderer.js +1 -1
- package/src/sap/m/Page.js +8 -6
- package/src/sap/m/PageAccessibleLandmarkInfo.js +1 -1
- package/src/sap/m/PagingButton.js +1 -1
- package/src/sap/m/Panel.js +11 -2
- package/src/sap/m/PanelRenderer.js +9 -0
- package/src/sap/m/PlanningCalendar.js +10 -4
- package/src/sap/m/PlanningCalendarHeader.js +1 -1
- package/src/sap/m/PlanningCalendarLegend.js +1 -1
- package/src/sap/m/PlanningCalendarRow.js +1 -1
- package/src/sap/m/PlanningCalendarView.js +1 -1
- package/src/sap/m/Popover.js +13 -17
- package/src/sap/m/ProgressIndicator.js +1 -1
- package/src/sap/m/PullToRefresh.js +1 -1
- package/src/sap/m/QuickView.js +1 -1
- package/src/sap/m/QuickViewBase.js +1 -1
- package/src/sap/m/QuickViewCard.js +14 -1
- package/src/sap/m/QuickViewCardRenderer.js +0 -4
- package/src/sap/m/QuickViewGroup.js +1 -1
- package/src/sap/m/QuickViewGroupElement.js +1 -1
- package/src/sap/m/QuickViewPage.js +40 -28
- package/src/sap/m/RadioButton.js +1 -1
- package/src/sap/m/RadioButtonGroup.js +1 -1
- package/src/sap/m/RangeSlider.js +1 -1
- package/src/sap/m/RatingIndicator.js +16 -4
- package/src/sap/m/RatingIndicatorRenderer.js +9 -2
- package/src/sap/m/ResponsivePopover.js +1 -1
- package/src/sap/m/ResponsiveScale.js +1 -1
- package/src/sap/m/ScrollBar.js +1 -1
- package/src/sap/m/ScrollContainer.js +3 -3
- package/src/sap/m/SearchField.js +8 -12
- package/src/sap/m/SearchFieldRenderer.js +5 -5
- package/src/sap/m/SegmentedButton.js +4 -2
- package/src/sap/m/SegmentedButtonItem.js +1 -1
- package/src/sap/m/SegmentedButtonRenderer.js +3 -3
- package/src/sap/m/Select.js +18 -16
- package/src/sap/m/SelectDialog.js +1 -1
- package/src/sap/m/SelectDialogBase.js +28 -4
- package/src/sap/m/SelectList.js +5 -6
- package/src/sap/m/SelectionDetails.js +1 -1
- package/src/sap/m/SelectionDetailsFacade.js +2 -2
- package/src/sap/m/SelectionDetailsItem.js +1 -1
- package/src/sap/m/SelectionDetailsItemLine.js +1 -1
- package/src/sap/m/Shell.js +1 -1
- package/src/sap/m/SimpleFixFlex.js +1 -1
- package/src/sap/m/SinglePlanningCalendar.js +1 -1
- package/src/sap/m/SinglePlanningCalendarDayView.js +1 -1
- package/src/sap/m/SinglePlanningCalendarGrid.js +1 -1
- package/src/sap/m/SinglePlanningCalendarMonthGrid.js +43 -43
- package/src/sap/m/SinglePlanningCalendarMonthView.js +1 -1
- package/src/sap/m/SinglePlanningCalendarView.js +1 -1
- package/src/sap/m/SinglePlanningCalendarWeekView.js +1 -1
- package/src/sap/m/SinglePlanningCalendarWorkWeekView.js +1 -1
- package/src/sap/m/SlideTile.js +1 -1
- package/src/sap/m/Slider.js +1 -1
- package/src/sap/m/SliderTooltip.js +1 -1
- package/src/sap/m/SliderTooltipBase.js +1 -1
- package/src/sap/m/SliderTooltipContainer.js +1 -1
- package/src/sap/m/SplitApp.js +1 -1
- package/src/sap/m/SplitButton.js +1 -1
- package/src/sap/m/SplitContainer.js +8 -13
- package/src/sap/m/StandardDynamicDateOption.js +2 -2
- package/src/sap/m/StandardListItem.js +1 -1
- package/src/sap/m/StandardTile.js +1 -1
- package/src/sap/m/StandardTileRenderer.js +1 -1
- package/src/sap/m/StandardTreeItem.js +1 -1
- package/src/sap/m/StepInput.js +3 -3
- package/src/sap/m/SuggestionItem.js +4 -2
- package/src/sap/m/SuggestionsPopover.js +1 -1
- package/src/sap/m/Switch.js +1 -1
- package/src/sap/m/TabContainer.js +1 -1
- package/src/sap/m/TabContainerItem.js +1 -1
- package/src/sap/m/TabStrip.js +1 -1
- package/src/sap/m/TabStripItem.js +1 -1
- package/src/sap/m/Table.js +59 -180
- package/src/sap/m/TablePersoController.js +1 -1
- package/src/sap/m/TablePersoDialog.js +1 -1
- package/src/sap/m/TablePersoProvider.js +4 -1
- package/src/sap/m/TableRenderer.js +98 -126
- package/src/sap/m/TableSelectDialog.js +1 -1
- package/src/sap/m/Text.js +1 -1
- package/src/sap/m/TextArea.js +1 -1
- package/src/sap/m/TextRenderer.js +3 -3
- package/src/sap/m/Tile.js +1 -1
- package/src/sap/m/TileContainer.js +1 -1
- package/src/sap/m/TileContent.js +1 -1
- package/src/sap/m/TileRenderer.js +7 -4
- package/src/sap/m/TimePicker.js +41 -12
- package/src/sap/m/TimePickerClock.js +1 -1
- package/src/sap/m/TimePickerClocks.js +1 -1
- package/src/sap/m/TimePickerClocksRenderer.js +6 -13
- package/src/sap/m/TimePickerInputs.js +1 -1
- package/src/sap/m/TimePickerInputsRenderer.js +6 -10
- package/src/sap/m/TimePickerInternals.js +1 -44
- package/src/sap/m/TimePickerRenderer.js +3 -2
- package/src/sap/m/TimePickerSlider.js +1 -1
- package/src/sap/m/TimePickerSliders.js +1 -1
- package/src/sap/m/Title.js +1 -1
- package/src/sap/m/TitlePropagationSupport.js +1 -1
- package/src/sap/m/ToggleButton.js +15 -3
- package/src/sap/m/Token.js +1 -1
- package/src/sap/m/Tokenizer.js +1 -1
- package/src/sap/m/Toolbar.js +4 -2
- package/src/sap/m/ToolbarLayoutData.js +1 -1
- package/src/sap/m/ToolbarSeparator.js +1 -1
- package/src/sap/m/ToolbarSpacer.js +1 -1
- package/src/sap/m/Tree.js +1 -1
- package/src/sap/m/TreeItemBase.js +1 -1
- package/src/sap/m/UploadCollection.js +2 -2
- package/src/sap/m/UploadCollectionItem.js +1 -1
- package/src/sap/m/UploadCollectionParameter.js +1 -1
- package/src/sap/m/UploadCollectionToolbarPlaceholder.js +1 -1
- package/src/sap/m/VBox.js +1 -1
- package/src/sap/m/ValueStateHeader.js +1 -1
- package/src/sap/m/VariantManagement.js +13 -50
- package/src/sap/m/ViewSettingsCustomItem.js +1 -1
- package/src/sap/m/ViewSettingsCustomTab.js +1 -1
- package/src/sap/m/ViewSettingsDialog.js +2 -2
- package/src/sap/m/ViewSettingsFilterItem.js +1 -1
- package/src/sap/m/ViewSettingsItem.js +1 -1
- package/src/sap/m/VisibleItem.js +1 -1
- package/src/sap/m/WheelSlider.js +1 -1
- package/src/sap/m/WheelSliderContainer.js +1 -1
- package/src/sap/m/Wizard.js +1 -1
- package/src/sap/m/WizardProgressNavigator.js +1 -1
- package/src/sap/m/WizardStep.js +1 -1
- package/src/sap/m/changeHandler/AddTableColumn.js +1 -1
- package/src/sap/m/changeHandler/ChangeLinkTarget.js +1 -1
- package/src/sap/m/changeHandler/CombineButtons.js +1 -1
- package/src/sap/m/changeHandler/MoveTableColumns.js +1 -1
- package/src/sap/m/changeHandler/SelectIconTabBarFilter.js +1 -1
- package/src/sap/m/changeHandler/SplitMenuButton.js +1 -1
- package/src/sap/m/designtime/HBox.designtime.js +16 -0
- package/src/sap/m/designtime/IconTabFilter.designtime.js +0 -9
- package/src/sap/m/designtime/ObjectHeader.designtime.js +26 -0
- package/src/sap/m/designtime/Select.designtime.js +2 -1
- package/src/sap/m/designtime/VBox.designtime.js +16 -0
- package/src/sap/m/inputUtils/SuggestionsPopoverDialogMixin.js +5 -5
- package/src/sap/m/inputUtils/SuggestionsPopoverPopoverMixin.js +4 -0
- package/src/sap/m/library.js +62 -7
- package/src/sap/m/messagebundle.properties +27 -13
- package/src/sap/m/messagebundle_ar.properties +36 -20
- package/src/sap/m/messagebundle_bg.properties +102 -86
- package/src/sap/m/messagebundle_ca.properties +34 -18
- package/src/sap/m/messagebundle_cs.properties +40 -24
- package/src/sap/m/messagebundle_cy.properties +35 -19
- package/src/sap/m/messagebundle_da.properties +35 -19
- package/src/sap/m/messagebundle_de.properties +35 -19
- package/src/sap/m/messagebundle_el.properties +36 -20
- package/src/sap/m/messagebundle_en.properties +35 -19
- package/src/sap/m/messagebundle_en_GB.properties +35 -19
- package/src/sap/m/messagebundle_en_US_sappsd.properties +34 -18
- package/src/sap/m/messagebundle_en_US_saprigi.properties +34 -18
- package/src/sap/m/messagebundle_en_US_saptrc.properties +34 -18
- package/src/sap/m/messagebundle_es.properties +33 -17
- package/src/sap/m/messagebundle_es_MX.properties +33 -17
- package/src/sap/m/messagebundle_et.properties +33 -17
- package/src/sap/m/messagebundle_fi.properties +37 -21
- package/src/sap/m/messagebundle_fr.properties +38 -22
- package/src/sap/m/messagebundle_fr_CA.properties +35 -19
- package/src/sap/m/messagebundle_hi.properties +36 -20
- package/src/sap/m/messagebundle_hr.properties +36 -20
- package/src/sap/m/messagebundle_hu.properties +39 -23
- package/src/sap/m/messagebundle_id.properties +38 -22
- package/src/sap/m/messagebundle_it.properties +33 -17
- package/src/sap/m/messagebundle_iw.properties +40 -24
- package/src/sap/m/messagebundle_ja.properties +70 -54
- package/src/sap/m/messagebundle_kk.properties +35 -19
- package/src/sap/m/messagebundle_ko.properties +36 -20
- package/src/sap/m/messagebundle_lt.properties +35 -19
- package/src/sap/m/messagebundle_lv.properties +33 -17
- package/src/sap/m/messagebundle_ms.properties +35 -19
- package/src/sap/m/messagebundle_nl.properties +35 -19
- package/src/sap/m/messagebundle_no.properties +38 -22
- package/src/sap/m/messagebundle_pl.properties +35 -19
- package/src/sap/m/messagebundle_pt.properties +33 -17
- package/src/sap/m/messagebundle_pt_PT.properties +33 -17
- package/src/sap/m/messagebundle_ro.properties +45 -29
- package/src/sap/m/messagebundle_ru.properties +32 -16
- package/src/sap/m/messagebundle_sh.properties +43 -27
- package/src/sap/m/messagebundle_sk.properties +35 -19
- package/src/sap/m/messagebundle_sl.properties +96 -80
- package/src/sap/m/messagebundle_sv.properties +37 -21
- package/src/sap/m/messagebundle_th.properties +42 -26
- package/src/sap/m/messagebundle_tr.properties +36 -20
- package/src/sap/m/messagebundle_uk.properties +38 -22
- package/src/sap/m/messagebundle_vi.properties +35 -19
- package/src/sap/m/messagebundle_zh_CN.properties +40 -24
- package/src/sap/m/messagebundle_zh_TW.properties +37 -21
- package/src/sap/m/p13n/AbstractContainer.js +2 -2
- package/src/sap/m/p13n/AbstractContainerItem.js +2 -2
- package/src/sap/m/p13n/BasePanel.js +11 -5
- package/src/sap/m/p13n/Container.js +9 -6
- package/src/sap/m/p13n/Engine.js +33 -5
- package/src/sap/m/p13n/FlexUtil.js +7 -3
- package/src/sap/m/p13n/GroupController.js +1 -1
- package/src/sap/m/p13n/GroupPanel.js +6 -1
- package/src/sap/m/p13n/MetadataHelper.js +1 -1
- package/src/sap/m/p13n/PersistenceProvider.js +2 -92
- package/src/sap/m/p13n/Popup.js +25 -2
- package/src/sap/m/p13n/QueryPanel.js +18 -3
- package/src/sap/m/p13n/SelectionController.js +6 -7
- package/src/sap/m/p13n/SelectionPanel.js +16 -5
- package/src/sap/m/p13n/SortController.js +1 -1
- package/src/sap/m/p13n/SortPanel.js +8 -4
- package/src/sap/m/p13n/enum/PersistenceMode.js +9 -0
- package/src/sap/m/p13n/handler/xConfigHandler.js +13 -13
- package/src/sap/m/p13n/modification/FlexModificationHandler.js +24 -1
- package/src/sap/m/p13n/modules/DefaultProviderRegistry.js +1 -13
- package/src/sap/m/p13n/modules/StateHandlerRegistry.js +1 -1
- package/src/sap/m/p13n/modules/UIManager.js +5 -4
- package/src/sap/m/p13n/modules/xConfigAPI.js +26 -0
- package/src/sap/m/plugins/CellSelector.js +534 -799
- package/src/sap/m/plugins/ColumnResizer.js +1 -9
- package/src/sap/m/plugins/CopyProvider.js +2 -10
- package/src/sap/m/plugins/DataStateIndicator.js +8 -2
- package/src/sap/m/plugins/PasteProvider.js +1 -1
- package/src/sap/m/plugins/PluginBase.js +1 -1
- package/src/sap/m/semantic/AddAction.js +1 -1
- package/src/sap/m/semantic/CancelAction.js +1 -1
- package/src/sap/m/semantic/DeleteAction.js +1 -1
- package/src/sap/m/semantic/DetailPage.js +1 -1
- package/src/sap/m/semantic/DiscussInJamAction.js +1 -1
- package/src/sap/m/semantic/EditAction.js +1 -1
- package/src/sap/m/semantic/FavoriteAction.js +1 -1
- package/src/sap/m/semantic/FilterAction.js +1 -1
- package/src/sap/m/semantic/FilterSelect.js +1 -1
- package/src/sap/m/semantic/FlagAction.js +1 -1
- package/src/sap/m/semantic/ForwardAction.js +1 -1
- package/src/sap/m/semantic/FullscreenPage.js +1 -1
- package/src/sap/m/semantic/GroupAction.js +1 -1
- package/src/sap/m/semantic/GroupSelect.js +1 -1
- package/src/sap/m/semantic/MainAction.js +1 -1
- package/src/sap/m/semantic/MasterPage.js +1 -1
- package/src/sap/m/semantic/MessagesIndicator.js +1 -1
- package/src/sap/m/semantic/MultiSelectAction.js +1 -1
- package/src/sap/m/semantic/NegativeAction.js +1 -1
- package/src/sap/m/semantic/OpenInAction.js +1 -1
- package/src/sap/m/semantic/PositiveAction.js +1 -1
- package/src/sap/m/semantic/PrintAction.js +1 -1
- package/src/sap/m/semantic/SaveAction.js +1 -1
- package/src/sap/m/semantic/Segment.js +1 -1
- package/src/sap/m/semantic/SegmentedContainer.js +1 -1
- package/src/sap/m/semantic/SemanticButton.js +1 -1
- package/src/sap/m/semantic/SemanticConfiguration.js +3 -3
- package/src/sap/m/semantic/SemanticControl.js +1 -1
- package/src/sap/m/semantic/SemanticOverflowToolbarButton.js +1 -1
- package/src/sap/m/semantic/SemanticOverflowToolbarToggleButton.js +1 -1
- package/src/sap/m/semantic/SemanticPage.js +1 -1
- package/src/sap/m/semantic/SemanticSelect.js +1 -1
- package/src/sap/m/semantic/SemanticToggleButton.js +1 -1
- package/src/sap/m/semantic/SendEmailAction.js +1 -1
- package/src/sap/m/semantic/SendMessageAction.js +1 -1
- package/src/sap/m/semantic/ShareInJamAction.js +1 -1
- package/src/sap/m/semantic/ShareMenu.js +1 -1
- package/src/sap/m/semantic/ShareMenuPage.js +1 -1
- package/src/sap/m/semantic/SortAction.js +1 -1
- package/src/sap/m/semantic/SortSelect.js +1 -1
- package/src/sap/m/table/Util.js +6 -5
- package/src/sap/m/table/columnmenu/ActionItem.js +1 -1
- package/src/sap/m/table/columnmenu/Entry.js +1 -1
- package/src/sap/m/table/columnmenu/Item.js +1 -1
- package/src/sap/m/table/columnmenu/ItemBase.js +1 -1
- package/src/sap/m/table/columnmenu/Menu.js +1 -1
- package/src/sap/m/table/columnmenu/QuickAction.js +1 -1
- package/src/sap/m/table/columnmenu/QuickActionBase.js +1 -1
- package/src/sap/m/table/columnmenu/QuickActionItem.js +1 -1
- package/src/sap/m/table/columnmenu/QuickGroup.js +1 -1
- package/src/sap/m/table/columnmenu/QuickGroupItem.js +1 -1
- package/src/sap/m/table/columnmenu/QuickSort.js +1 -1
- package/src/sap/m/table/columnmenu/QuickSortItem.js +1 -1
- package/src/sap/m/table/columnmenu/QuickTotal.js +1 -1
- package/src/sap/m/table/columnmenu/QuickTotalItem.js +1 -1
- package/src/sap/m/themes/base/Avatar.less +78 -7
- package/src/sap/m/themes/base/Carousel.less +7 -0
- package/src/sap/m/themes/base/CellSelector.less +50 -105
- package/src/sap/m/themes/base/IconTabBar.less +1 -1
- package/src/sap/m/themes/base/Link.less +20 -24
- package/src/sap/m/themes/base/MessageStrip.less +1 -1
- package/src/sap/m/themes/base/NumericContent.less +4 -0
- package/src/sap/m/themes/base/ObjectStatus.less +1 -2
- package/src/sap/m/themes/base/Panel.less +14 -0
- package/src/sap/m/themes/base/PlanningCalendarHeader.less +2 -1
- package/src/sap/m/themes/base/RadioButton.less +3 -1
- package/src/sap/m/themes/base/SearchField.less +13 -3
- package/src/sap/m/themes/base/Select.less +32 -2
- package/src/sap/m/themes/base/Table.less +4 -8
- package/src/sap/m/themes/base/TimePickerClocks.less +4 -0
- package/src/sap/m/themes/base/UploadSet.less +13 -1
- package/src/sap/m/themes/base/UploadSetTable.less +80 -0
- package/src/sap/m/themes/base/ValueStateMessage.less +1 -0
- package/src/sap/m/themes/base/VariantManagement.less +1 -0
- package/src/sap/m/themes/base/Wizard.less +1 -1
- package/src/sap/m/themes/base/library.source.less +1 -0
- package/src/sap/m/upload/FilePreviewDialog.js +257 -0
- package/src/sap/m/upload/UploadSet.js +140 -67
- package/src/sap/m/upload/UploadSetItem.js +51 -27
- package/src/sap/m/upload/UploadSetTable.js +929 -0
- package/src/sap/m/upload/UploadSetTableItem.js +327 -0
- package/src/sap/m/upload/UploadSetTableItemRenderer.js +22 -0
- package/src/sap/m/upload/UploadSetTableRenderer.js +34 -0
- package/src/sap/m/upload/UploadSetToolbarPlaceholder.js +1 -1
- package/src/sap/m/upload/UploaderTableItem.js +276 -0
- package/ui5.yaml +1 -1
|
@@ -12,51 +12,27 @@ sap.ui.define([
|
|
|
12
12
|
], function (PluginBase, KeyCodes, Core, Element, Log) {
|
|
13
13
|
"use strict";
|
|
14
14
|
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
var DIRECTION = {
|
|
16
|
+
ROW: "row",
|
|
17
|
+
COL: "col"
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
var MOUSE_POSITION = {
|
|
21
|
-
ABOVE: 0,
|
|
22
|
-
RIGHT: 1,
|
|
23
|
-
BELOW: 2,
|
|
24
|
-
LEFT: 3,
|
|
25
|
-
IN: 4
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
var CSS_CLASS = "sapMPluginsCellSelector";
|
|
29
|
-
|
|
30
20
|
/**
|
|
31
21
|
* Constructor for a new CellSelector plugin.
|
|
32
22
|
*
|
|
33
23
|
* @param {string} [sId] id for the new control, generated automatically if no id is given
|
|
34
24
|
* @param {object} [mSettings] initial settings for the new control
|
|
35
25
|
*
|
|
36
|
-
* The CellSelector plugins enables cell selection inside the table, when added as a dependent to the control.
|
|
26
|
+
* The CellSelector plugins enables cell selection inside the table, when it is added as a dependent to the control.
|
|
37
27
|
* It allows the user to individually select a cell block.
|
|
38
28
|
*
|
|
39
|
-
* Keyboard Usage:
|
|
40
|
-
* - SPACE: Select the currently focused cell.
|
|
41
|
-
* - SHIFT + ARROW_KEYS: Expands/shrink the current cell selection block into the specified direction by one row/column.
|
|
42
|
-
* - SHIFT + SPACE: Enahnces the current cell selection block to cover the whole row.
|
|
43
|
-
* - CTRL + SPACE: Enhances the current cell selection block to cover the whole column.
|
|
44
|
-
* - SHIFT + HOME: Enhances the current cell selection block to the begin of the covered rows.
|
|
45
|
-
* - SHIFT + END: Enhances the current cell selection block to the end of the covered rows.
|
|
46
|
-
* - CTRL + SHIFT + A: Clears the selection.
|
|
47
|
-
*
|
|
48
|
-
* Mouse Usage:
|
|
49
|
-
* - Left Click: Select the clicked cell.
|
|
50
|
-
* - Mousedown + Moving: Select an area of cells.
|
|
51
|
-
* - Drag Borders: Drag the horizontal/vertical borders to enhance the cell selection in the corresponding direction.
|
|
52
|
-
* - Drag Edge: Enhance your current cell selection in any direction, when dragging a corner.
|
|
53
|
-
*
|
|
54
29
|
* @extends sap.m.plugins.PluginBase
|
|
55
30
|
* @class
|
|
56
|
-
* @version 1.
|
|
31
|
+
* @version 1.117.0
|
|
57
32
|
* @author SAP SE
|
|
58
33
|
*
|
|
59
34
|
* @private
|
|
35
|
+
* @experimental
|
|
60
36
|
* @alias sap.m.plugins.CellSelector
|
|
61
37
|
*/
|
|
62
38
|
var CellSelector = PluginBase.extend("sap.m.plugins.CellSelector", {
|
|
@@ -82,50 +58,99 @@ sap.ui.define([
|
|
|
82
58
|
}
|
|
83
59
|
});
|
|
84
60
|
|
|
61
|
+
/*
|
|
62
|
+
CellSelector Interactions
|
|
63
|
+
Keyboard Usage:
|
|
64
|
+
- SPACE: Select the currently focused cell. If pressed inside a selection block, removes selection.
|
|
65
|
+
- SHIFT + ARROW_KEYS: Adjusts an already existing selection block OR creates a new one, if used outside of selection block.
|
|
66
|
+
- SHIFT + SPACE: Transforms current selection block into row selection. Result depends on selection mode applied to table.
|
|
67
|
+
- CTRL + SPACE: Extends selection to all cells of the column (up to the range limit).
|
|
68
|
+
- CTRL + SHIFT + A: Clears selection
|
|
69
|
+
Mouse Usage:
|
|
70
|
+
- CTRL + Click: Select cell. If click is on selection block, removes selection block.
|
|
71
|
+
- Mousedown + Movement: Selects the cell where mouse was pressed down. If move goes outside, extends selection.
|
|
72
|
+
- Borders: Extend/reduce selection either horizontally or vertically.
|
|
73
|
+
- Edge: Extend/reduce selection freely.
|
|
74
|
+
*/
|
|
75
|
+
|
|
85
76
|
CellSelector.prototype.onActivate = function (oControl) {
|
|
77
|
+
this._iRtl = Core.getConfiguration().getRTL() ? -1 : 1;
|
|
86
78
|
oControl.addDelegate(this, true, this);
|
|
87
|
-
this._oSession = {};
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
79
|
+
this._oSession = { cellRefs: [] };
|
|
80
|
+
this._mTimeouts = {};
|
|
81
|
+
this._fnControlUpdate = function(oEvent) {
|
|
82
|
+
if (this._bScrolling) {
|
|
83
|
+
this._scrollSelect(this._oSession.scrollForward, this._oSession.isVertical, oEvent);
|
|
84
|
+
} else {
|
|
85
|
+
this._selectCells();
|
|
86
|
+
}
|
|
87
|
+
}.bind(this);
|
|
88
|
+
this._fnOnMouseEnter = this._onmouseenter.bind(this);
|
|
89
|
+
this._fnOnMouseOut = this._onmouseout.bind(this);
|
|
90
|
+
this._fnOnMouseMove = this._onmousemove.bind(this);
|
|
91
|
+
this._fnOnMouseUp = this.onmouseup.bind(this);
|
|
92
|
+
|
|
93
|
+
// Register Events, as adding dependent does not trigger rerendering
|
|
94
|
+
this._registerEvents();
|
|
102
95
|
};
|
|
103
96
|
|
|
104
97
|
CellSelector.prototype.onDeactivate = function (oControl) {
|
|
105
98
|
oControl.removeDelegate(this, this);
|
|
106
|
-
this._oSession
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var sScrollEvent = this.getConfig("scrollEvent");
|
|
112
|
-
sScrollEvent && oControl.detachEvent(sScrollEvent, this._handleScroll, this);
|
|
113
|
-
|
|
114
|
-
document.removeEventListener("mouseup", this._fnMouseupHandler);
|
|
115
|
-
var oContainerRef = this.getControl().getDomRef(this.getConfig("scrollContainer"));
|
|
116
|
-
if (oContainerRef) {
|
|
117
|
-
oContainerRef.removeEventListener("mouseleave", this._fnMouseleaveHandler);
|
|
99
|
+
if (this._oSession) {
|
|
100
|
+
this.removeSelection();
|
|
101
|
+
this._oSession = null;
|
|
102
|
+
this._mTimeouts = null;
|
|
118
103
|
}
|
|
104
|
+
|
|
105
|
+
this._deregisterEvents();
|
|
119
106
|
};
|
|
120
107
|
|
|
121
|
-
CellSelector.prototype.
|
|
122
|
-
this.
|
|
123
|
-
|
|
124
|
-
var oContainerRef = this.getControl().getDomRef(this.getConfig("scrollContainer"));
|
|
125
|
-
if (oContainerRef) {
|
|
126
|
-
this._fnMouseleaveHandler = this._onMouseLeave.bind(this);
|
|
127
|
-
oContainerRef.addEventListener("mouseleave", this._fnMouseleaveHandler);
|
|
108
|
+
CellSelector.prototype.destroy = function() {
|
|
109
|
+
if (this.getControl() && !this.getControl().isDestroyed()) {
|
|
110
|
+
this.removeSelection();
|
|
128
111
|
}
|
|
112
|
+
this._deregisterEvents();
|
|
113
|
+
this._oSession = null;
|
|
114
|
+
this._mTimeouts = null;
|
|
115
|
+
|
|
116
|
+
return PluginBase.prototype.destroy.call(this);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
CellSelector.prototype.onBeforeRendering = function() {
|
|
120
|
+
if (this._oResizer) {
|
|
121
|
+
// remove resizer, as due to rerendering table element may be gone
|
|
122
|
+
this._oResizer.remove();
|
|
123
|
+
this._oResizer = null;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
CellSelector.prototype.onAfterRendering = function() {
|
|
128
|
+
this._deregisterEvents();
|
|
129
|
+
this._registerEvents();
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
CellSelector.prototype._registerEvents = function() {
|
|
133
|
+
if (this.getControl()) {
|
|
134
|
+
this.getControl().attachEvent(this.getConfig("scrollEvent"), this._fnControlUpdate);
|
|
135
|
+
var oScrollArea = this.getControl().getDomRef(this.getConfig("scrollArea"));
|
|
136
|
+
if (oScrollArea) {
|
|
137
|
+
oScrollArea.addEventListener("mouseleave", this._fnOnMouseOut);
|
|
138
|
+
oScrollArea.addEventListener("mouseenter", this._fnOnMouseEnter);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
document.addEventListener("mousemove", this._fnOnMouseMove);
|
|
142
|
+
document.addEventListener("mouseup", this._fnOnMouseUp);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
CellSelector.prototype._deregisterEvents = function() {
|
|
146
|
+
if (this.getControl()) {
|
|
147
|
+
this.getControl().detachEvent(this.getConfig("scrollEvent"), this._fnControlUpdate);
|
|
148
|
+
var oScrollArea = this.getControl().getDomRef(this.getConfig("scrollArea"));
|
|
149
|
+
oScrollArea.removeEventListener("mouseleave", this._fnOnMouseOut);
|
|
150
|
+
oScrollArea.removeEventListener("mouseenter", this._fnOnMouseEnter);
|
|
151
|
+
}
|
|
152
|
+
document.removeEventListener("mousemove", this._fnOnMouseMove);
|
|
153
|
+
document.removeEventListener("mouseup", this._fnOnMouseUp);
|
|
129
154
|
};
|
|
130
155
|
|
|
131
156
|
/**
|
|
@@ -143,7 +168,7 @@ sap.ui.define([
|
|
|
143
168
|
return null;
|
|
144
169
|
}
|
|
145
170
|
|
|
146
|
-
var mSelectionRange =
|
|
171
|
+
var mSelectionRange = this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget, true);
|
|
147
172
|
if (isNaN(mSelectionRange.from.rowIndex) || isNaN(mSelectionRange.to.rowIndex)) {
|
|
148
173
|
return null;
|
|
149
174
|
}
|
|
@@ -174,319 +199,265 @@ sap.ui.define([
|
|
|
174
199
|
};
|
|
175
200
|
|
|
176
201
|
CellSelector.prototype.onsapspace = function (oEvent) {
|
|
177
|
-
|
|
178
|
-
return;
|
|
179
|
-
} else if (!this.getConfig("isSelectionEnabled", this.getControl())) {
|
|
180
|
-
Log.error("Cell selection is inactive, because preconditions are not met.");
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
var oTarget = oEvent.target;
|
|
185
|
-
var oCellInfo = this.getConfig("getCellInfo", this.getControl(), oTarget);
|
|
186
|
-
|
|
187
|
-
if (oCellInfo) {
|
|
188
|
-
this._bSelecting = true;
|
|
189
|
-
if (this._oSession.mSource) {
|
|
190
|
-
if (this._oSession.mSource.rowIndex !== oCellInfo.rowIndex || this._oSession.mSource.colIndex !== oCellInfo.colIndex) {
|
|
191
|
-
this._oSession.mSource = null;
|
|
192
|
-
this._oSession.mTarget = null;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
this._oSession.mSource = oCellInfo;
|
|
196
|
-
this._oSession.mStart = oCellInfo;
|
|
197
|
-
this._selectCells(this._oSession.mSource, oCellInfo, {info: {focus: oCellInfo}});
|
|
198
|
-
|
|
199
|
-
oEvent.preventDefault();
|
|
200
|
-
oEvent.setMarked();
|
|
201
|
-
}
|
|
202
|
+
this._startSelection(oEvent, false);
|
|
202
203
|
};
|
|
203
204
|
|
|
204
|
-
CellSelector.prototype.
|
|
205
|
-
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
this.clearSelection();
|
|
205
|
+
CellSelector.prototype.onsapupmodifiers = function(oEvent) {
|
|
206
|
+
this._onsaparrowmodifiers(oEvent, DIRECTION.ROW, -1, 0);
|
|
209
207
|
};
|
|
210
208
|
|
|
211
|
-
CellSelector.prototype.
|
|
209
|
+
CellSelector.prototype.onsapdownmodifiers = function(oEvent) {
|
|
210
|
+
this._onsaparrowmodifiers(oEvent, DIRECTION.ROW, 1, 0);
|
|
211
|
+
};
|
|
212
212
|
|
|
213
|
-
CellSelector.prototype.
|
|
214
|
-
this.
|
|
213
|
+
CellSelector.prototype.onsapleftmodifiers = function(oEvent) {
|
|
214
|
+
this._onsaparrowmodifiers(oEvent, DIRECTION.COL, 0, -1);
|
|
215
215
|
};
|
|
216
216
|
|
|
217
|
-
CellSelector.prototype.
|
|
218
|
-
this.
|
|
217
|
+
CellSelector.prototype.onsaprightmodifiers = function(oEvent) {
|
|
218
|
+
this._onsaparrowmodifiers(oEvent, DIRECTION.COL, 0, 1);
|
|
219
219
|
};
|
|
220
220
|
|
|
221
|
-
CellSelector.prototype.
|
|
222
|
-
if (
|
|
221
|
+
CellSelector.prototype._onsaparrowmodifiers = function(oEvent, sDirectionType, iRowDiff, iColDiff) {
|
|
222
|
+
if (oEvent.isMarked() || !oEvent.shiftKey) {
|
|
223
223
|
return;
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
var
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
var oSelectableCell = this._getSelectableCell(oEvent.target);
|
|
227
|
+
if (!oSelectableCell) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
229
230
|
|
|
230
|
-
var
|
|
231
|
-
|
|
231
|
+
var oInfo = this.getConfig("getCellInfo", this.getControl(), oSelectableCell);
|
|
232
|
+
if (!this._inSelection(oEvent.target) || !this._oSession.mSource || !this._oSession.mTarget) {
|
|
233
|
+
// If not in selection block, start new selection block
|
|
234
|
+
this._oSession.mSource = this._oSession.mTarget = oInfo;
|
|
235
|
+
}
|
|
232
236
|
|
|
233
|
-
var
|
|
234
|
-
|
|
235
|
-
oFocusCellInfo[sType + "Index"] += iDirectionIndex;
|
|
237
|
+
var mBounds = this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget);
|
|
238
|
+
const { from, to, focus } = this._getUpdatedBounds(iRowDiff, iColDiff * this._iRtl, oInfo);
|
|
236
239
|
|
|
237
|
-
if (
|
|
240
|
+
if (focus[sDirectionType + "Index"] < 0 || focus.colIndex >= this.getConfig("getVisibleColumns", this.getControl()).length) {
|
|
238
241
|
return;
|
|
239
242
|
}
|
|
240
243
|
|
|
241
|
-
this.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
+
this.getConfig("focusCell", this.getControl(), focus, iRowDiff > 0);
|
|
245
|
+
if (sDirectionType == DIRECTION.ROW && (oInfo.rowIndex == mBounds.from.rowIndex || oInfo.rowIndex == mBounds.to.rowIndex)
|
|
246
|
+
|| sDirectionType == DIRECTION.COL && (oInfo.colIndex == mBounds.from.colIndex || oInfo.colIndex == mBounds.to.colIndex)) {
|
|
247
|
+
this._bSelecting = true;
|
|
248
|
+
this._selectCells(from, to);
|
|
249
|
+
|
|
250
|
+
oEvent.preventDefault();
|
|
251
|
+
oEvent.setMarked();
|
|
252
|
+
oEvent.setMarked("sapUiTableSkipItemNavigation", true); // Required to prevent item navigation in GridTable for MultiToggle
|
|
253
|
+
}
|
|
244
254
|
};
|
|
245
255
|
|
|
246
|
-
|
|
256
|
+
// To be implemented. See internal documentation.
|
|
257
|
+
CellSelector.prototype.onsaphomemodifiers = function (oEvent) {};
|
|
258
|
+
|
|
259
|
+
// To be implemented. See internal documentation.
|
|
260
|
+
CellSelector.prototype.onsapendmodifiers = function (oEvent) {};
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Handles:
|
|
264
|
+
* - CTRL + SHIFT + A
|
|
265
|
+
* - CTRL + A
|
|
266
|
+
* @param {sap.ui.base.Event} oEvent event instance
|
|
267
|
+
*/
|
|
268
|
+
CellSelector.prototype.onkeydown = function (oEvent) {
|
|
247
269
|
if (!this._bSelecting || oEvent.isMarked()) {
|
|
248
270
|
return;
|
|
249
271
|
}
|
|
250
272
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if (oEvent.shiftKey) {
|
|
255
|
-
// Select rows, if single row selection, only select focused row
|
|
256
|
-
this._oSession.mSource.colIndex = -Infinity;
|
|
257
|
-
mTo.colIndex = Infinity;
|
|
258
|
-
this._selectCells(this._oSession.mSource, mTo, {info: {focus: oFocusCellInfo, boundaryChange: true}});
|
|
259
|
-
} else if (oEvent.ctrlKey || oEvent.metaKey) {
|
|
260
|
-
// Select columns
|
|
261
|
-
this._oSession.mSource.rowIndex = -Infinity;
|
|
262
|
-
mTo.rowIndex = Infinity;
|
|
263
|
-
this._selectCells(this._oSession.mSource, mTo, {info: {focus: oFocusCellInfo, boundaryChange: true}});
|
|
264
|
-
}
|
|
265
|
-
oEvent.preventDefault();
|
|
266
|
-
oEvent.setMarked();
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
CellSelector.prototype.onsaphomemodifiers = function (oEvent) {
|
|
270
|
-
if (!this._bSelecting || oEvent.isMarked() || !oEvent.shiftKey || !this._isInSelectionArea(oEvent.target)) {
|
|
271
|
-
return;
|
|
273
|
+
if (isKeyCombination(oEvent, KeyCodes.A, true, true) || isKeyCombination(oEvent, KeyCodes.A, false, false)) {
|
|
274
|
+
this.removeSelection();
|
|
272
275
|
}
|
|
273
276
|
|
|
274
|
-
|
|
275
|
-
mTo.colIndex = -Infinity;
|
|
276
|
-
this._selectCells(this._oSession.mSource, mTo, {info: {focus: mTo, boundaryChange: true}});
|
|
277
|
-
oEvent.setMarked();
|
|
277
|
+
oEvent.preventDefault();
|
|
278
278
|
};
|
|
279
279
|
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
/**
|
|
281
|
+
* Handles:
|
|
282
|
+
* - SPACE + SHIFT
|
|
283
|
+
* - SPACE + CTRL/CMD
|
|
284
|
+
* @param {sap.ui.base.Event} oEvent event instance
|
|
285
|
+
*/
|
|
286
|
+
CellSelector.prototype.onkeyup = function(oEvent) {
|
|
287
|
+
if (oEvent.isMarked()) {
|
|
282
288
|
return;
|
|
283
289
|
}
|
|
284
290
|
|
|
285
|
-
var
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
CellSelector.prototype.onkeydown = function (oEvent) {
|
|
292
|
-
if (this._bSelecting) {
|
|
293
|
-
// CTRL+SHIFT+A: Clear Selection
|
|
294
|
-
if (isKeyCombination(oEvent, KeyCodes.A, true, true)) {
|
|
295
|
-
this.clearSelection();
|
|
296
|
-
oEvent.preventDefault();
|
|
291
|
+
var mBounds = this._bSelecting ? this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget) : undefined;
|
|
292
|
+
if (isKeyCombination(oEvent, KeyCodes.SPACE, true, false)) {
|
|
293
|
+
if (this._inSelection(oEvent.target)) {
|
|
294
|
+
var oInfo = this.getConfig("getCellInfo", this.getControl(), oEvent.target);
|
|
295
|
+
this.getConfig("selectRows", this.getControl(), mBounds.from.rowIndex, mBounds.to.rowIndex, oInfo.rowIndex) && this.removeSelection();
|
|
297
296
|
oEvent.setMarked();
|
|
298
297
|
}
|
|
298
|
+
} else if (this._bSelecting && isKeyCombination(oEvent, KeyCodes.SPACE, false, true)) {
|
|
299
|
+
if (!this._inSelection(oEvent.target)) {
|
|
300
|
+
// If focus is on cell outside of selection, select focused column
|
|
301
|
+
var oInfo = this.getConfig("getCellInfo", this.getControl(), oEvent.target);
|
|
302
|
+
mBounds.from.colIndex = mBounds.to.colIndex = oInfo.colIndex;
|
|
303
|
+
}
|
|
304
|
+
mBounds.from.rowIndex = 0;
|
|
305
|
+
mBounds.to.rowIndex = Infinity;
|
|
306
|
+
this._selectCells(mBounds.from, mBounds.to);
|
|
299
307
|
}
|
|
308
|
+
|
|
309
|
+
oEvent.preventDefault();
|
|
300
310
|
};
|
|
301
311
|
|
|
302
312
|
// Mouse Navigation
|
|
303
313
|
|
|
304
|
-
CellSelector.prototype.
|
|
305
|
-
|
|
306
|
-
if (oEvent.isMarked() || !oCellRef) {
|
|
307
|
-
return;
|
|
308
|
-
} else if (!this.getConfig("isSelectionEnabled", this.getControl())) {
|
|
309
|
-
Log.error("Cell selection is inactive, because preconditions are not met.");
|
|
314
|
+
CellSelector.prototype.onmousedown = function(oEvent) {
|
|
315
|
+
if (oEvent.isMarked && oEvent.isMarked()) {
|
|
310
316
|
return;
|
|
311
317
|
}
|
|
312
318
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
this._bSelecting = true;
|
|
317
|
-
this._bMouseDown = true;
|
|
318
|
-
this._bByEdge = false;
|
|
319
|
-
if (this._oSession.mSource) {
|
|
320
|
-
if (this._oSession.mSource.rowIndex !== oCellInfo.rowIndex || this._oSession.mSource.colIndex !== oCellInfo.colIndex) {
|
|
321
|
-
this._oSession.mSource = null;
|
|
322
|
-
this._oSession.mTarget = null;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
319
|
+
if (oEvent.ctrlKey || oEvent.metaKey) {
|
|
320
|
+
this._startSelection(oEvent);
|
|
321
|
+
}
|
|
325
322
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
323
|
+
this._bMouseDown = true;
|
|
324
|
+
var oSelectableCell = this._getSelectableCell(oEvent.target);
|
|
325
|
+
if (oSelectableCell) {
|
|
326
|
+
this._mClickedCell = this.getConfig("getCellInfo", this.getControl(), oSelectableCell);
|
|
330
327
|
}
|
|
331
|
-
oEvent.setMarked();
|
|
332
328
|
};
|
|
333
329
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
330
|
+
/**
|
|
331
|
+
* Event handler for mouse movement. Handles mouse movement during cell selection. Takes on tasks like:
|
|
332
|
+
* - updating resizer positions
|
|
333
|
+
* - mouse selection via cell click and move
|
|
334
|
+
* - selection enhancement via border and edge
|
|
335
|
+
* @param {sap.ui.base.Event} oEvent event
|
|
336
|
+
*/
|
|
337
|
+
CellSelector.prototype._onmousemove = function(oEvent) {
|
|
338
|
+
// Only update the resizer, if we are selecting and the border is not pressed. During border/edge pressing, don't update it
|
|
339
|
+
if (this._bSelecting && !this._bMouseDown) {
|
|
340
|
+
var mBounds = this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget);
|
|
341
|
+
this._updateResizers(mBounds, oEvent.clientX, oEvent.clientY);
|
|
337
342
|
}
|
|
338
343
|
|
|
339
|
-
var
|
|
340
|
-
if (
|
|
341
|
-
|
|
344
|
+
var oSelectableCell = this._getSelectableCell(oEvent.target);
|
|
345
|
+
if (!oSelectableCell || !this._bMouseDown) {
|
|
346
|
+
return;
|
|
342
347
|
}
|
|
343
348
|
|
|
344
|
-
|
|
345
|
-
|
|
349
|
+
// If clicked cell (=starting cell) is equal to currently hovered cell, don't do anything
|
|
350
|
+
var oInfo = this.getConfig("getCellInfo", this.getControl(), oSelectableCell);
|
|
351
|
+
if (this._mClickedCell
|
|
352
|
+
&& oInfo.rowIndex == this._mClickedCell.rowIndex
|
|
353
|
+
&& oInfo.colIndex == this._mClickedCell.colIndex) {
|
|
346
354
|
return;
|
|
347
355
|
}
|
|
348
356
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
if (oTargetInfo.rowIndex == this._oSession.mTarget.rowIndex && oTargetInfo.colIndex == this._oSession.mTarget.colIndex) {
|
|
352
|
-
// if current mouse position is equal to current saved target position, no change is needed
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
357
|
+
// Remove text selection during mouse cell selection
|
|
358
|
+
window.getSelection().removeAllRanges();
|
|
355
359
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
} else if (this._oEdgeInfo.edgePosition === "NW") {
|
|
371
|
-
this._oSession.mStart = oBounds.to;
|
|
372
|
-
}
|
|
373
|
-
} else if (this._oBorderMoveInfo && this._oBorderMoveInfo.isActive) {
|
|
374
|
-
// Move Start position to opposite border to ensure correct enlarging/decreasing of selection area
|
|
375
|
-
var sDirection = this._oBorderMoveInfo.direction, bMoveStart = this._oBorderMoveInfo.moveStart;
|
|
376
|
-
if (sDirection === "N") {
|
|
377
|
-
this._oSession.mStart = bMoveStart ? oBounds.to : this._oSession.mStart;
|
|
378
|
-
oTargetInfo.colIndex = oBounds.from.colIndex;
|
|
379
|
-
} else if (sDirection === "E") {
|
|
380
|
-
this._oSession.mStart = bMoveStart ? oBounds.from : this._oSession.mStart;
|
|
381
|
-
oTargetInfo.rowIndex = oBounds.to.rowIndex;
|
|
382
|
-
} else if (sDirection === "S") {
|
|
383
|
-
this._oSession.mStart = bMoveStart ? oBounds.from : this._oSession.mStart;
|
|
384
|
-
oTargetInfo.colIndex = oBounds.to.colIndex;
|
|
385
|
-
} else if (sDirection === "W") {
|
|
386
|
-
this._oSession.mStart = bMoveStart ? oBounds.to : this._oSession.mStart;
|
|
387
|
-
oTargetInfo.rowIndex = oBounds.from.rowIndex;
|
|
388
|
-
}
|
|
389
|
-
this._oBorderMoveInfo.moveStart = false;
|
|
360
|
+
if (this._bBorderDown && !this._bScrolling) {
|
|
361
|
+
var oBorder = this._oSession.border;
|
|
362
|
+
var mDiff = {
|
|
363
|
+
colIndex: isNaN(oBorder.colIndex) ? 0 : oInfo.colIndex - oBorder.colIndex,
|
|
364
|
+
rowIndex: isNaN(oBorder.rowIndex) ? 0 : oInfo.rowIndex - oBorder.rowIndex
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
if (mDiff.rowIndex != 0 || mDiff.colIndex != 0) {
|
|
368
|
+
const { from, to } = this._getUpdatedBounds(mDiff.rowIndex, mDiff.colIndex, oBorder);
|
|
369
|
+
|
|
370
|
+
this._selectCells(from, to);
|
|
371
|
+
|
|
372
|
+
this._oSession.border.rowIndex += mDiff.rowIndex;
|
|
373
|
+
this._oSession.border.colIndex += mDiff.colIndex;
|
|
390
374
|
}
|
|
391
|
-
|
|
392
|
-
this.
|
|
375
|
+
} else {
|
|
376
|
+
this._startSelection(oEvent, true);
|
|
393
377
|
}
|
|
394
378
|
};
|
|
395
379
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
380
|
+
/** Event Handler for Mouse Selection (leaving table, etc.) */
|
|
381
|
+
CellSelector.prototype._onmouseout = function(oEvent) {
|
|
382
|
+
var oScrollAreaRef = this.getControl().getDomRef(this.getConfig("scrollArea"));
|
|
383
|
+
|
|
384
|
+
if (!oScrollAreaRef || !this._bMouseDown) { return; }
|
|
385
|
+
|
|
386
|
+
var oScrollAreaRect = oScrollAreaRef.getBoundingClientRect();
|
|
387
|
+
|
|
388
|
+
var bForward, bVertical;
|
|
389
|
+
this._bScrolling = false;
|
|
390
|
+
if (oEvent.clientY > oScrollAreaRect.bottom || oEvent.clientY < oScrollAreaRect.top) {
|
|
391
|
+
this._oSession.scrollForward = bForward = oEvent.clientY > oScrollAreaRect.bottom;
|
|
392
|
+
this._oSession.isVertical = bVertical = true;
|
|
393
|
+
this._bScrolling = true;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (oEvent.clientX > oScrollAreaRect.right || oEvent.clientX < oScrollAreaRect.left) {
|
|
397
|
+
this._oSession.scrollForward = bForward = oEvent.clientX > oScrollAreaRect.right;
|
|
398
|
+
this._oSession.isVertical = bVertical = false;
|
|
399
|
+
this._bScrolling = true;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (this._bScrolling) {
|
|
403
|
+
this._doScroll(bForward, bVertical, oEvent);
|
|
401
404
|
}
|
|
402
405
|
};
|
|
403
406
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
if (!
|
|
417
|
-
|
|
418
|
-
return;
|
|
419
|
-
}
|
|
420
|
-
setTimeout(function () {
|
|
421
|
-
if (!this.getControl()) {
|
|
422
|
-
// If during the asynchronous process, the control is somehow destroyed, simply resolve and return
|
|
423
|
-
resolve();
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
426
|
-
var oContainerRef = this.getControl().getDomRef(this.getConfig("container"));
|
|
427
|
-
if (oMousePosition.x === MOUSE_POSITION.LEFT) {
|
|
428
|
-
if (this._oSession.mSource.colIndex < this._oSession.mTarget.colIndex && this._oSession.mSource.colIndex > 0) {
|
|
429
|
-
this._oSession.mSource.colIndex--;
|
|
430
|
-
} else if (this._oSession.mTarget.colIndex > 0) {
|
|
431
|
-
this._oSession.mTarget.colIndex--;
|
|
432
|
-
}
|
|
433
|
-
oContainerRef.dispatchEvent(new WheelEvent("wheel", {deltaX: -1, deltaMode: window.WheelEvent.DOM_DELTA_LINE}));
|
|
434
|
-
this._selectCells(this._oSession.mSource, this._oSession.mTarget);
|
|
435
|
-
} else if (oMousePosition.x === MOUSE_POSITION.RIGHT) {
|
|
436
|
-
this._oSession.mTarget.colIndex++;
|
|
437
|
-
oContainerRef.dispatchEvent(new WheelEvent("wheel", {deltaX: 1, deltaMode: window.WheelEvent.DOM_DELTA_LINE}));
|
|
438
|
-
this._selectCells(this._oSession.mSource, this._oSession.mTarget);
|
|
439
|
-
}
|
|
440
|
-
if (oMousePosition.y === MOUSE_POSITION.ABOVE) {
|
|
441
|
-
if (this._oSession.mSource.rowIndex < this._oSession.mTarget.rowIndex && this._oSession.mSource.rowIndex > 0) {
|
|
442
|
-
this._oSession.mSource.rowIndex--;
|
|
443
|
-
} else if (this._oSession.mTarget.rowIndex > 0) {
|
|
444
|
-
this._oSession.mTarget.rowIndex--;
|
|
445
|
-
}
|
|
446
|
-
oContainerRef.dispatchEvent(new WheelEvent("wheel", {deltaY: -1, deltaMode: window.WheelEvent.DOM_DELTA_LINE}));
|
|
447
|
-
} else if (oMousePosition.y === MOUSE_POSITION.BELOW) {
|
|
448
|
-
this._oSession.mTarget.rowIndex++;
|
|
449
|
-
oContainerRef.dispatchEvent(new WheelEvent("wheel", {deltaY: 1, deltaMode: window.WheelEvent.DOM_DELTA_LINE}));
|
|
450
|
-
}
|
|
451
|
-
resolve();
|
|
452
|
-
}.bind(this), 100);
|
|
453
|
-
}.bind(this)).then(function () {
|
|
454
|
-
if (!this._bScrollSelecting) {
|
|
455
|
-
return;
|
|
407
|
+
CellSelector.prototype._onmouseenter = function(oEvent) {
|
|
408
|
+
this._bScrolling = false;
|
|
409
|
+
this._clearScroller();
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
CellSelector.prototype._doScroll = function(bForward, bVertical, oEvent) {
|
|
413
|
+
this._clearScroller();
|
|
414
|
+
if (this._bScrolling) {
|
|
415
|
+
this.getConfig("scroll", this.getControl(), bForward, bVertical);
|
|
416
|
+
this._mTimeouts.scrollTimerId = setTimeout(this._doScroll.bind(this, bForward, bVertical), 500);
|
|
417
|
+
|
|
418
|
+
// If vertical scrolling, wait for the event, then select the next cells, not possible currently with horizontal scrolling
|
|
419
|
+
if (!bVertical) {
|
|
420
|
+
this._scrollSelect(bForward, bVertical, oEvent);
|
|
456
421
|
}
|
|
457
|
-
|
|
458
|
-
}.bind(this));
|
|
422
|
+
}
|
|
459
423
|
};
|
|
460
424
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
* @param {String} sFacing direction of movement
|
|
464
|
-
* @param {boolean} bBorder is the movement by border dragging
|
|
465
|
-
* @private
|
|
466
|
-
*/
|
|
467
|
-
CellSelector.prototype._onHandleMove = function (sFacing, bBorder) {
|
|
468
|
-
if (this._oBorderMoveInfo && this._oBorderMoveInfo.isActive) {
|
|
425
|
+
CellSelector.prototype._scrollSelect = function(bForward, bVertical, oEvent) {
|
|
426
|
+
if (!this._bSelecting) {
|
|
469
427
|
return;
|
|
470
428
|
}
|
|
471
|
-
this.
|
|
472
|
-
this.
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
429
|
+
var mBounds = this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget);
|
|
430
|
+
if (this._bScrolling) {
|
|
431
|
+
var sDirectionType = bVertical ? DIRECTION.ROW : DIRECTION.COL;
|
|
432
|
+
var mDiff = { "row": 0, "col": 0 };
|
|
433
|
+
var sType = bForward ? "to" : "from";
|
|
434
|
+
|
|
435
|
+
mDiff[sDirectionType] = bForward ? 1 : -1;
|
|
436
|
+
const { from, to } = this._getUpdatedBounds(mDiff[DIRECTION.ROW], mDiff[DIRECTION.COL], mBounds[sType]);
|
|
437
|
+
this._selectCells(from, to);
|
|
477
438
|
}
|
|
478
439
|
};
|
|
479
440
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
441
|
+
CellSelector.prototype._clearScroller = function() {
|
|
442
|
+
if (this._mTimeouts.scrollTimerId) {
|
|
443
|
+
window.clearTimeout(this._mTimeouts.scrollTimerId);
|
|
444
|
+
this._mTimeouts.scrollTimerId = null;
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
CellSelector.prototype.onmouseup = function(oEvent) {
|
|
486
449
|
this._bMouseDown = false;
|
|
487
|
-
this.
|
|
488
|
-
this.
|
|
489
|
-
this.
|
|
450
|
+
this._bBorderDown = false;
|
|
451
|
+
this._mClickedCell = undefined;
|
|
452
|
+
this._bScrolling = false;
|
|
453
|
+
this._clearScroller();
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
CellSelector.prototype._onborderdown = function(oEvent) {
|
|
457
|
+
this._oSession.border = Object.assign({}, this._oCurrentBorder);
|
|
458
|
+
this._bBorderDown = true;
|
|
459
|
+
this._bMouseDown = true;
|
|
460
|
+
// TODO: when borderdown, make "border" active
|
|
490
461
|
};
|
|
491
462
|
|
|
492
463
|
/**
|
|
@@ -498,29 +469,69 @@ sap.ui.define([
|
|
|
498
469
|
return oDomRef && oDomRef.closest(this.getConfig("selectableCells"));
|
|
499
470
|
};
|
|
500
471
|
|
|
472
|
+
CellSelector.prototype._inSelection = function(oTarget) {
|
|
473
|
+
var oInfo = this.getConfig("getCellInfo", this.getControl(), oTarget);
|
|
474
|
+
if (!oInfo || !this._oSession.mSource || !this._oSession.mTarget) {
|
|
475
|
+
return false;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
var oBounds = this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget);
|
|
479
|
+
|
|
480
|
+
return !(oInfo.rowIndex < oBounds.from.rowIndex || oInfo.rowIndex > oBounds.to.rowIndex
|
|
481
|
+
|| oInfo.colIndex < oBounds.from.colIndex || oInfo.colIndex > oBounds.to.colIndex);
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
CellSelector.prototype._startSelection = function(oEvent, bMove) {
|
|
485
|
+
if (oEvent.isMarked && oEvent.isMarked()) {
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
var oTarget = this._getSelectableCell(oEvent.target);
|
|
490
|
+
if (!oTarget) {
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
if (this._inSelection(oTarget) && !bMove) {
|
|
495
|
+
this.removeSelection();
|
|
496
|
+
} else {
|
|
497
|
+
var oCellInfo = this.getConfig("getCellInfo", this.getControl(), oTarget);
|
|
498
|
+
var mStart = this._mClickedCell ? this._mClickedCell : oCellInfo;
|
|
499
|
+
|
|
500
|
+
this._bSelecting = true;
|
|
501
|
+
this._oSession.mSource = oCellInfo;
|
|
502
|
+
this._selectCells(mStart, oCellInfo);
|
|
503
|
+
this.getConfig("focusCell", this.getControl(), oCellInfo);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
oEvent.preventDefault();
|
|
507
|
+
oEvent.setMarked && oEvent.setMarked();
|
|
508
|
+
};
|
|
509
|
+
|
|
501
510
|
/**
|
|
502
|
-
*
|
|
503
|
-
* @param {HTMLElement} oTarget target element
|
|
504
|
-
* @returns {boolean} bInArea - true: in selection area, false: not in area
|
|
511
|
+
* Selects the next cells in a specific direction (ROW, COL).
|
|
505
512
|
* @private
|
|
506
513
|
*/
|
|
507
|
-
CellSelector.prototype.
|
|
508
|
-
var
|
|
509
|
-
var
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
514
|
+
CellSelector.prototype._getUpdatedBounds = function(iRowDiff, iColDiff, mOldFocus) {
|
|
515
|
+
var mBounds = this._getNormalizedBounds(this._oSession.mSource, this._oSession.mTarget);
|
|
516
|
+
var mFocus = Object.assign({}, mOldFocus);
|
|
517
|
+
|
|
518
|
+
// Determine which "side" to adjust according to current position
|
|
519
|
+
var sAdjustRowType = mFocus.rowIndex == mBounds.from.rowIndex ? "from" : "to";
|
|
520
|
+
var sAdjustColType = mFocus.colIndex == mBounds.from.colIndex ? "from" : "to";
|
|
521
|
+
|
|
522
|
+
mBounds[sAdjustRowType].rowIndex += iRowDiff;
|
|
523
|
+
mBounds[sAdjustColType].colIndex += iColDiff;
|
|
524
|
+
|
|
525
|
+
if (!this._bBorderDown) {
|
|
526
|
+
mFocus.rowIndex = Math.max(0, mFocus.rowIndex + iRowDiff);
|
|
527
|
+
mFocus.colIndex = Math.max(0, mFocus.colIndex + iColDiff);
|
|
521
528
|
}
|
|
522
529
|
|
|
523
|
-
return
|
|
530
|
+
return {
|
|
531
|
+
from: mBounds.from,
|
|
532
|
+
to: mBounds.to,
|
|
533
|
+
focus: mFocus
|
|
534
|
+
};
|
|
524
535
|
};
|
|
525
536
|
|
|
526
537
|
/**
|
|
@@ -537,87 +548,27 @@ sap.ui.define([
|
|
|
537
548
|
* @param {Object} mTo target cell coordinates
|
|
538
549
|
* @param {int} mTo.rowIndex row index
|
|
539
550
|
* @param {int} mTo.colIndex column index
|
|
540
|
-
* @param {object} oOptions cell selection options
|
|
541
|
-
* @param {object} oOptions.info options info
|
|
542
|
-
* @param {object} oOptions.info.focus focus info
|
|
543
|
-
* @param {boolean} oOptions.info.boundaryChange change of both both boundaries
|
|
544
551
|
* @private
|
|
545
552
|
*/
|
|
546
|
-
CellSelector.prototype._selectCells = function (mFrom, mTo,
|
|
553
|
+
CellSelector.prototype._selectCells = function (mFrom, mTo, mFocus) {
|
|
547
554
|
if (!this._bSelecting) {
|
|
548
555
|
return;
|
|
549
556
|
}
|
|
550
557
|
|
|
551
|
-
this.
|
|
552
|
-
this._savePreviousSelectionAreas();
|
|
553
|
-
this._eraseSelection();
|
|
554
|
-
|
|
555
|
-
if (!this._oSession.mTarget) {
|
|
556
|
-
this._oSession.mTarget = mTo;
|
|
557
|
-
}
|
|
558
|
-
if (!mFrom) {
|
|
559
|
-
this._oSession.mSource = mFrom = mTo;
|
|
560
|
-
}
|
|
561
|
-
if (!oOptions) {
|
|
562
|
-
oOptions = {};
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
var mBounds = getNormalizedBounds(mFrom, mTo);
|
|
566
|
-
|
|
567
|
-
// "Select cells" - returns the area to draw on (boundaries), border information for drawing and selected cell information
|
|
568
|
-
var oSelection = this.getConfig("selectCells", this.getControl(), mBounds, oOptions);
|
|
558
|
+
this._clearSelection();
|
|
569
559
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
// If there are no drawable bounds, do not continue.
|
|
574
|
-
return;
|
|
575
|
-
}
|
|
560
|
+
mFrom = mFrom ? mFrom : this._oSession.mSource;
|
|
561
|
+
mTo = mTo ? mTo : this._oSession.mTarget;
|
|
562
|
+
var mBounds = this._getNormalizedBounds(mFrom, mTo);
|
|
576
563
|
|
|
577
|
-
if (
|
|
564
|
+
if (mTo.rowIndex == Infinity || mFrom.rowIndex == Infinity) {
|
|
578
565
|
this.getConfig("loadContexts", this.getControl(), mBounds.from.rowIndex, this.getRangeLimit());
|
|
579
566
|
}
|
|
580
567
|
|
|
581
|
-
|
|
582
|
-
this._oSession.aCells = oSelection.cells;
|
|
583
|
-
this._drawSelection(mDrawableBounds, oBorderOptions);
|
|
568
|
+
this._drawSelection(mBounds);
|
|
584
569
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
this._oSession.mSource = mFrom;
|
|
588
|
-
this._oSession.mTarget = mTo;
|
|
589
|
-
} else {
|
|
590
|
-
// If it is something like column, row (begin/end/whole) selection, the source and target positions need to be adjusted to the normalized bounds
|
|
591
|
-
this._oSession.mSource = mBounds.from;
|
|
592
|
-
this._oSession.mTarget = mBounds.to;
|
|
593
|
-
}
|
|
594
|
-
};
|
|
595
|
-
|
|
596
|
-
CellSelector.prototype._getDrawableBounds = function (mBounds) {
|
|
597
|
-
var mDrawableBounds = {from: {}, to: {}};
|
|
598
|
-
|
|
599
|
-
var mRange = this.getConfig("getVisibleRange", this.getControl(), mBounds); // from, to
|
|
600
|
-
|
|
601
|
-
if (mBounds.to.rowIndex < mRange.from.rowIndex || mBounds.from.rowIndex > mRange.to.rowIndex) {
|
|
602
|
-
mDrawableBounds = {};
|
|
603
|
-
} else {
|
|
604
|
-
mDrawableBounds.from.rowIndex = Math.max(mBounds.from.rowIndex, mRange.from.rowIndex);
|
|
605
|
-
mDrawableBounds.from.colIndex = Math.max(mBounds.from.colIndex, mRange.from.colIndex);
|
|
606
|
-
mDrawableBounds.to.rowIndex = Math.min(mBounds.to.rowIndex, mRange.to.rowIndex);
|
|
607
|
-
mDrawableBounds.to.colIndex = Math.min(mBounds.to.colIndex, mRange.to.colIndex);
|
|
608
|
-
}
|
|
609
|
-
return mDrawableBounds;
|
|
610
|
-
};
|
|
611
|
-
|
|
612
|
-
CellSelector.prototype._getBorderOptions = function (mBounds, mDrawableBounds) {
|
|
613
|
-
var oBorderOptions = {top: true, bottom: true};
|
|
614
|
-
if (mDrawableBounds.from.rowIndex > mBounds.from.rowIndex) {
|
|
615
|
-
oBorderOptions.top = false;
|
|
616
|
-
}
|
|
617
|
-
if (mDrawableBounds.to.rowIndex < mBounds.to.rowIndex) {
|
|
618
|
-
oBorderOptions.bottom = false;
|
|
619
|
-
}
|
|
620
|
-
return oBorderOptions;
|
|
570
|
+
this._oSession.mSource = mFrom;
|
|
571
|
+
this._oSession.mTarget = mTo;
|
|
621
572
|
};
|
|
622
573
|
|
|
623
574
|
/**
|
|
@@ -627,237 +578,136 @@ sap.ui.define([
|
|
|
627
578
|
* @param {Object} mBounds.to to position
|
|
628
579
|
* @private
|
|
629
580
|
*/
|
|
630
|
-
CellSelector.prototype._drawSelection = function (mBounds
|
|
581
|
+
CellSelector.prototype._drawSelection = function (mBounds) {
|
|
631
582
|
if (!mBounds.from || !mBounds.to) {
|
|
632
583
|
return;
|
|
633
584
|
}
|
|
634
585
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
586
|
+
this._oSession.cellRefs = [];
|
|
587
|
+
for (var iRow = mBounds.from.rowIndex; iRow <= mBounds.to.rowIndex; iRow++) {
|
|
588
|
+
for (var iCol = mBounds.from.colIndex; iCol <= mBounds.to.colIndex; iCol++) {
|
|
589
|
+
var oCellRef = this.getConfig("getCellRef", this.getControl(), {rowIndex: iRow, colIndex: iCol});
|
|
590
|
+
if (oCellRef) {
|
|
591
|
+
oCellRef.classList.toggle("sapMPluginsCellSelectorTop", iRow == mBounds.from.rowIndex);
|
|
592
|
+
oCellRef.classList.toggle("sapMPluginsCellSelectorBottom", iRow == mBounds.to.rowIndex);
|
|
593
|
+
oCellRef.classList.toggle("sapMPluginsCellSelectorRight", iCol == mBounds.to.colIndex);
|
|
594
|
+
oCellRef.classList.toggle("sapMPluginsCellSelectorSelected", true);
|
|
595
|
+
oCellRef.setAttribute("aria-selected", "true");
|
|
596
|
+
this._oSession.cellRefs.push(oCellRef);
|
|
597
|
+
|
|
598
|
+
// Grid Table has only border-right, so adding border-left would change the size of the column. Instead, for the left border, take the previous cell and set border-right.
|
|
599
|
+
if (iCol == mBounds.from.colIndex) {
|
|
600
|
+
const oPrevCellRef = this.getConfig("getCellRef", this.getControl(), {rowIndex: iRow, colIndex: iCol - 1});
|
|
601
|
+
let sClass = "sapMPluginsCellSelectorLeft";
|
|
602
|
+
if (oPrevCellRef) {
|
|
603
|
+
oCellRef = oPrevCellRef;
|
|
604
|
+
sClass = "sapMPluginsCellSelectorRight";
|
|
605
|
+
this._oSession.cellRefs.push(oCellRef);
|
|
606
|
+
}
|
|
607
|
+
oCellRef.classList.toggle(sClass, iCol == mBounds.from.colIndex);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
647
610
|
}
|
|
611
|
+
}
|
|
612
|
+
};
|
|
648
613
|
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
oTableRect = oTableDomRef.getBoundingClientRect();
|
|
614
|
+
CellSelector.prototype._updateResizers = function(mBounds, iPositionX, iPositionY) {
|
|
615
|
+
var oResizer = this._getResizer();
|
|
652
616
|
|
|
653
|
-
|
|
654
|
-
|
|
617
|
+
var oFromRef = this.getConfig("getCellRef", this.getControl(), mBounds.from, false),
|
|
618
|
+
oToRef = this.getConfig("getCellRef", this.getControl(), mBounds.to, false);
|
|
619
|
+
var mOutOfBounds = { 0: false, 1: false }; // 0: top, 1: bottom
|
|
655
620
|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
621
|
+
if (!oFromRef) {
|
|
622
|
+
mOutOfBounds[0] = true;
|
|
623
|
+
oFromRef = this.getConfig("getCellRef", this.getControl(), mBounds.from, true);
|
|
624
|
+
}
|
|
660
625
|
|
|
661
|
-
|
|
662
|
-
|
|
626
|
+
if (!oToRef) {
|
|
627
|
+
mOutOfBounds[1] = true;
|
|
628
|
+
oToRef = this.getConfig("getCellRef", this.getControl(), mBounds.to, true);
|
|
629
|
+
}
|
|
663
630
|
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
631
|
+
var oFromRect = oFromRef.getBoundingClientRect(),
|
|
632
|
+
oToRect = oToRef.getBoundingClientRect(),
|
|
633
|
+
oTableRect = this.getControl().getDomRef().getBoundingClientRect();
|
|
667
634
|
|
|
668
|
-
|
|
669
|
-
|
|
635
|
+
var mStyleMap = {
|
|
636
|
+
x: { 0: oFromRect.left, 1: oToRect.left + oToRect.width },
|
|
637
|
+
y: { 0: oFromRect.top - oTableRect.top, 1: oToRect.top + oToRect.height - oTableRect.top }
|
|
638
|
+
};
|
|
639
|
+
var mDiffMap = {
|
|
640
|
+
x: { 0: iPositionX - oFromRect.left, 1: iPositionX - oToRect.right },
|
|
641
|
+
y: { 0: iPositionY - oFromRect.top, 1: iPositionY - oToRect.bottom }
|
|
642
|
+
};
|
|
670
643
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
this._drawEdgeHandle(oStyle, oArea.container, "SW");
|
|
678
|
-
this._drawEdgeHandle(oStyle, oArea.container, "NW");
|
|
679
|
-
|
|
680
|
-
// Draw Border Lines
|
|
681
|
-
if (!this._oSession.oBorderLine[oArea.container]) {
|
|
682
|
-
this._oSession.oBorderLine[oArea.container] = {};
|
|
683
|
-
}
|
|
684
|
-
this._drawBorderLine(oStyle, oArea.container, "N");
|
|
685
|
-
this._drawBorderLine(oStyle, oArea.container, "E");
|
|
686
|
-
this._drawBorderLine(oStyle, oArea.container, "S");
|
|
687
|
-
this._drawBorderLine(oStyle, oArea.container, "W");
|
|
688
|
-
}.bind(this));
|
|
689
|
-
};
|
|
644
|
+
// 2 Bit Flags:
|
|
645
|
+
// Y Direction | X Direction
|
|
646
|
+
// 0 | 0
|
|
647
|
+
var mFlags = 0;
|
|
648
|
+
mFlags |= Math.abs(mDiffMap.x[0]) < Math.abs(mDiffMap.x[1]) ? 0 : 1;
|
|
649
|
+
mFlags |= Math.abs(mDiffMap.y[0]) < Math.abs(mDiffMap.y[1]) ? 0 : 2;
|
|
690
650
|
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
* @param {float} oTargetStyle.left left position
|
|
695
|
-
* @param {float} oTargetStyle.top top position
|
|
696
|
-
* @param {float} oTargetStyle.width width
|
|
697
|
-
* @param {float} oTargetStyle.height height
|
|
698
|
-
* @param {string} sContainer name of the container
|
|
699
|
-
* @private
|
|
700
|
-
*/
|
|
701
|
-
CellSelector.prototype._drawSelectionArea = function (oTargetStyle, sContainer) {
|
|
702
|
-
if (!this._oSession.oCanvas[sContainer]) {
|
|
703
|
-
this._oSession.oCanvas[sContainer] = document.createElement("div");
|
|
704
|
-
this._oSession.oCanvas[sContainer].className = CSS_CLASS + "Canvas";
|
|
705
|
-
}
|
|
706
|
-
if (!this._oSession.oCanvas[sContainer].isConnected) {
|
|
707
|
-
this.getControl().getDomRef(sContainer).append(this._oSession.oCanvas[sContainer]);
|
|
651
|
+
var iDiffX = Math.abs(mDiffMap.x[mFlags & 1]), iDiffY = Math.abs(mDiffMap.y[(mFlags >> 1) & 1]);
|
|
652
|
+
if (iDiffX > 10 && iDiffY > 10 || iDiffX > 10 && mOutOfBounds[(mFlags >> 1) & 1]) {
|
|
653
|
+
return;
|
|
708
654
|
}
|
|
709
655
|
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
oStyle.height = oTargetStyle.height + "px";
|
|
715
|
-
oStyle.display = "block";
|
|
716
|
-
|
|
717
|
-
oStyle.borderTop = oTargetStyle.noBorderTop ? "0px" : "";
|
|
718
|
-
oStyle.borderBottom = oTargetStyle.noBorderBottom ? "0px" : "";
|
|
719
|
-
oStyle.borderRight = oTargetStyle.noBorderRight ? "0px" : "";
|
|
720
|
-
oStyle.borderLeft = oTargetStyle.noBorderLeft ? "0px" : "";
|
|
721
|
-
};
|
|
656
|
+
oResizer.style.left = iDiffX <= 10 ? mStyleMap.x[mFlags & 1] + "px" : mStyleMap.x[0] + "px";
|
|
657
|
+
oResizer.style.top = iDiffY <= 10 ? mStyleMap.y[(mFlags >> 1) & 1] + "px" : mStyleMap.y[0] + "px";
|
|
658
|
+
oResizer.style.width = iDiffX <= 10 ? "" : oToRect.right - oFromRect.left + "px";
|
|
659
|
+
oResizer.style.height = iDiffX <= 10 ? oToRect.bottom - oFromRect.top + "px" : "";
|
|
722
660
|
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
*/
|
|
730
|
-
CellSelector.prototype._drawEdgeHandle = function (oTargetStyle, sContainer, sFacing) {
|
|
731
|
-
if (!this._oSession.oEdge[sContainer][sFacing]) {
|
|
732
|
-
this._oSession.oEdge[sContainer][sFacing] = {};
|
|
661
|
+
const bXinRange = iDiffX <= 10, bYinRange = iDiffY <= 10;
|
|
662
|
+
oResizer.classList.toggle("sapMPluginsVerticalBorder", bXinRange);
|
|
663
|
+
oResizer.classList.toggle("sapMPluginsHorizontalBorder", bYinRange);
|
|
664
|
+
oResizer.classList.toggle("sapMPluginsEdge", bXinRange && bYinRange);
|
|
665
|
+
oResizer.classList.toggle("sapMPluginsNESW", bXinRange && bYinRange && (mFlags == 2 || mFlags == 1));
|
|
666
|
+
oResizer.classList.toggle("sapMPluginsNWSE", bXinRange && bYinRange && (mFlags == 3 || mFlags == 0));
|
|
733
667
|
|
|
734
|
-
|
|
735
|
-
|
|
668
|
+
this._oCurrentBorder = {};
|
|
669
|
+
if (bXinRange) {
|
|
670
|
+
this._oCurrentBorder.colIndex = mFlags & 1 ? mBounds.to.colIndex : mBounds.from.colIndex;
|
|
671
|
+
this._oCurrentBorder.type = DIRECTION.COL;
|
|
736
672
|
}
|
|
737
|
-
if (!this._oSession.oEdge[sContainer][sFacing].wrapper.isConnected) {
|
|
738
|
-
this._oSession.oCanvas[sContainer].append(this._oSession.oEdge[sContainer][sFacing].wrapper);
|
|
739
|
-
this._oSession.oEdge[sContainer][sFacing].wrapper.addEventListener("mousedown", this._onHandleMove.bind(this, sFacing, false));
|
|
740
|
-
}
|
|
741
|
-
this._oSession.oEdge[sContainer][sFacing].wrapper.classList.add("sapMPluginsEdge" + sFacing);
|
|
742
|
-
};
|
|
743
673
|
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
* @param {String} sContainer container name
|
|
748
|
-
* @param {String} sFacing direction of border
|
|
749
|
-
* @private
|
|
750
|
-
*/
|
|
751
|
-
CellSelector.prototype._drawBorderLine = function (oTargetStyle, sContainer, sFacing) {
|
|
752
|
-
if (!this._oSession.oBorderLine[sContainer][sFacing]) {
|
|
753
|
-
this._oSession.oBorderLine[sContainer][sFacing] = document.createElement("div");
|
|
754
|
-
this._oSession.oBorderLine[sContainer][sFacing].className = CSS_CLASS + "BorderLine";
|
|
674
|
+
if (bYinRange) {
|
|
675
|
+
this._oCurrentBorder.rowIndex = (mFlags >> 1) & 1 ? mBounds.to.rowIndex : mBounds.from.rowIndex;
|
|
676
|
+
this._oCurrentBorder.type = DIRECTION.ROW;
|
|
755
677
|
}
|
|
756
|
-
if (!this._oSession.oBorderLine[sContainer][sFacing].isConnected) {
|
|
757
|
-
this._oSession.oCanvas[sContainer].append(this._oSession.oBorderLine[sContainer][sFacing]);
|
|
758
|
-
this._oSession.oBorderLine[sContainer][sFacing].addEventListener("mousedown", this._onHandleMove.bind(this, sFacing, true));
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
var oStyle = this._oSession.oBorderLine[sContainer][sFacing].style;
|
|
762
|
-
this._oSession.oBorderLine[sContainer][sFacing].classList.add("sapMPluginsBorder" + sFacing);
|
|
763
|
-
if (sFacing === "N" || sFacing === "S") {
|
|
764
|
-
oStyle.width = oTargetStyle.width + "px";
|
|
765
|
-
} else {
|
|
766
|
-
oStyle.height = oTargetStyle.height + "px";
|
|
767
|
-
}
|
|
768
|
-
oStyle.display = "block";
|
|
769
678
|
};
|
|
770
679
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
this._eraseSelection();
|
|
777
|
-
this._oSession.mSource = null;
|
|
778
|
-
this._oSession.mTarget = null;
|
|
779
|
-
};
|
|
680
|
+
CellSelector.prototype._getResizer = function() {
|
|
681
|
+
if (!this._oResizer) {
|
|
682
|
+
this._oResizer = document.createElement("div");
|
|
683
|
+
this._oResizer.setAttribute("id", "cs-rsz");
|
|
684
|
+
this._oResizer.classList.add("sapMPluginsCellSelectorRsz");
|
|
780
685
|
|
|
781
|
-
|
|
782
|
-
* Erases the selection
|
|
783
|
-
* @private
|
|
784
|
-
*/
|
|
785
|
-
CellSelector.prototype._eraseSelection = function () {
|
|
786
|
-
Object.values(this._oSession.oCanvas).forEach(function (oArea) {
|
|
787
|
-
oArea.style = "";
|
|
788
|
-
});
|
|
789
|
-
Object.values(this._oSession.oBorderLine).forEach(function (oArea) {
|
|
790
|
-
Object.values(oArea).forEach(function (oBorder) {
|
|
791
|
-
oBorder.style = "";
|
|
792
|
-
});
|
|
793
|
-
});
|
|
794
|
-
Object.values(this._oSession.oEdge).forEach(function (oArea) {
|
|
795
|
-
Object.values(oArea).forEach(function (oEdge) {
|
|
796
|
-
Object.values(oEdge).forEach(function (oEdgePart) {
|
|
797
|
-
oEdgePart.style = "";
|
|
798
|
-
});
|
|
799
|
-
});
|
|
800
|
-
});
|
|
801
|
-
};
|
|
686
|
+
this._oResizer.addEventListener("mousedown", this._onborderdown.bind(this));
|
|
802
687
|
|
|
803
|
-
|
|
804
|
-
* A special scroll handler, which handles selection accordingly when the table is scrolling vertically.
|
|
805
|
-
* @param {sap.ui.base.Event} oEvent scroll event
|
|
806
|
-
* @private
|
|
807
|
-
*/
|
|
808
|
-
CellSelector.prototype._handleScroll = function (oEvent) {
|
|
809
|
-
// Rerender selection
|
|
810
|
-
if (!this._bSelecting) {
|
|
811
|
-
return;
|
|
688
|
+
this.getControl().getDomRef().appendChild(this._oResizer);
|
|
812
689
|
}
|
|
813
|
-
|
|
690
|
+
return this._oResizer;
|
|
814
691
|
};
|
|
815
692
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
if (!this._oSession.previousSelection) {
|
|
825
|
-
this._oSession.previousSelection = {};
|
|
826
|
-
}
|
|
827
|
-
this._oSession.previousSelection[sContainer] = {
|
|
828
|
-
top: parseFloat(oArea.style.top),
|
|
829
|
-
left: parseFloat(oArea.style.left),
|
|
830
|
-
width: parseFloat(oArea.style.width),
|
|
831
|
-
height: parseFloat(oArea.style.height)
|
|
832
|
-
};
|
|
833
|
-
}
|
|
834
|
-
}.bind(this));
|
|
693
|
+
CellSelector.prototype._clearSelection = function() {
|
|
694
|
+
this._oSession.cellRefs.forEach(function(oCellRef) {
|
|
695
|
+
oCellRef.classList.remove("sapMPluginsCellSelectorSelected", "sapMPluginsCellSelectorTop", "sapMPluginsCellSelectorBottom", "sapMPluginsCellSelectorLeft", "sapMPluginsCellSelectorRight");
|
|
696
|
+
oCellRef.removeAttribute("aria-selected");
|
|
697
|
+
});
|
|
698
|
+
var oResizer = this._getResizer();
|
|
699
|
+
oResizer.style.left = "-10000px";
|
|
700
|
+
oResizer.style.top = "-10000px";
|
|
835
701
|
};
|
|
836
702
|
|
|
837
703
|
/**
|
|
838
|
-
*
|
|
839
|
-
* @param {String} sContainer container name
|
|
840
|
-
* @param {number} iX x position of mouse
|
|
841
|
-
* @param {y} iY y position of mouse
|
|
842
|
-
* @returns {object} object containing position information for x, y
|
|
704
|
+
* Remove the current selection block.
|
|
843
705
|
*/
|
|
844
|
-
CellSelector.prototype.
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
if (iY > oContainerRect.bottom) {
|
|
850
|
-
oPosition.y = MOUSE_POSITION.BELOW;
|
|
851
|
-
} else if (iY < oContainerRect.top) {
|
|
852
|
-
oPosition.y = MOUSE_POSITION.ABOVE;
|
|
853
|
-
}
|
|
854
|
-
if (iX > oContainerRect.right) {
|
|
855
|
-
oPosition.x = MOUSE_POSITION.RIGHT;
|
|
856
|
-
} else if (iX < oContainerRect.left) {
|
|
857
|
-
oPosition.x = MOUSE_POSITION.LEFT;
|
|
858
|
-
}
|
|
859
|
-
}
|
|
860
|
-
return oPosition;
|
|
706
|
+
CellSelector.prototype.removeSelection = function () {
|
|
707
|
+
this._clearSelection();
|
|
708
|
+
|
|
709
|
+
this._bSelecting = false;
|
|
710
|
+
this._oSession = { cellRefs: [] };
|
|
861
711
|
};
|
|
862
712
|
|
|
863
713
|
/**
|
|
@@ -872,12 +722,23 @@ sap.ui.define([
|
|
|
872
722
|
* @param {int} mTo.colIndex column index
|
|
873
723
|
* @returns object containing coordinates for from and to
|
|
874
724
|
*/
|
|
875
|
-
function
|
|
725
|
+
CellSelector.prototype._getNormalizedBounds = function(mFrom, mTo, bKeepBounds) {
|
|
726
|
+
const iMaxColumns = this.getConfig("getVisibleColumns", this.getControl()).length;
|
|
727
|
+
const iMaxRows = this.getRangeLimit() == 0 ? this.getConfig("getRowCount", this.getControl()) : this.getRangeLimit();
|
|
728
|
+
|
|
729
|
+
let toRowIndex = Math.max(mFrom.rowIndex, mTo.rowIndex);
|
|
730
|
+
let toColIndex = Math.max(mFrom.colIndex, mTo.colIndex);
|
|
731
|
+
|
|
732
|
+
if (!bKeepBounds) {
|
|
733
|
+
toRowIndex = Math.min(iMaxRows - 1, toRowIndex);
|
|
734
|
+
toColIndex = Math.min(iMaxColumns, toColIndex);
|
|
735
|
+
}
|
|
736
|
+
|
|
876
737
|
return {
|
|
877
|
-
from: {rowIndex: Math.min(mFrom.rowIndex, mTo.rowIndex), colIndex: Math.min(mFrom.colIndex, mTo.colIndex)},
|
|
878
|
-
to: {rowIndex:
|
|
738
|
+
from: {rowIndex: Math.max(0, Math.min(mFrom.rowIndex, mTo.rowIndex)), colIndex: Math.max(0, Math.min(mFrom.colIndex, mTo.colIndex))},
|
|
739
|
+
to: {rowIndex: toRowIndex, colIndex: toColIndex}
|
|
879
740
|
};
|
|
880
|
-
}
|
|
741
|
+
};
|
|
881
742
|
|
|
882
743
|
/**
|
|
883
744
|
* Check if the given key combination applies to the event.
|
|
@@ -893,33 +754,9 @@ sap.ui.define([
|
|
|
893
754
|
|
|
894
755
|
PluginBase.setConfigs({
|
|
895
756
|
"sap.ui.table.Table": {
|
|
896
|
-
container: "tableCCnt",
|
|
897
|
-
scrollContainer: "sapUiTableCtrlScr",
|
|
898
757
|
selectableCells: ".sapUiTableDataCell",
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
var sEvent = "rowSelectionChange";
|
|
902
|
-
var oSelectionPlugin = oControl;
|
|
903
|
-
oControl.getPlugins().forEach(function (oPlugin) {
|
|
904
|
-
if (oPlugin.isA("sap.ui.table.plugins.SelectionPlugin")) {
|
|
905
|
-
sEvent = "selectionChange";
|
|
906
|
-
oSelectionPlugin = oPlugin;
|
|
907
|
-
}
|
|
908
|
-
});
|
|
909
|
-
oSelectionPlugin.attachEvent(sEvent, oPlugin.clearSelection, oPlugin);
|
|
910
|
-
},
|
|
911
|
-
onDeactivate: function (oControl, oPlugin) {
|
|
912
|
-
var sEvent = "rowSelectionChange";
|
|
913
|
-
var oSelectionPlugin = oControl;
|
|
914
|
-
oControl.getPlugins().forEach(function (oPlugin) {
|
|
915
|
-
if (oPlugin.isA("sap.ui.table.plugins.SelectionPlugin")) {
|
|
916
|
-
sEvent = "selectionChange";
|
|
917
|
-
oSelectionPlugin = oPlugin;
|
|
918
|
-
return;
|
|
919
|
-
}
|
|
920
|
-
});
|
|
921
|
-
oSelectionPlugin.detachEvent(sEvent, oPlugin.clearSelection, oPlugin);
|
|
922
|
-
},
|
|
758
|
+
scrollArea: "sapUiTableCtrlScr",
|
|
759
|
+
scrollEvent: "_rowsUpdated",
|
|
923
760
|
/**
|
|
924
761
|
* Get visible columns of the table.
|
|
925
762
|
* @param {sap.ui.table.Table} oTable table instance
|
|
@@ -930,13 +767,8 @@ sap.ui.define([
|
|
|
930
767
|
return oColumn.getDomRef();
|
|
931
768
|
});
|
|
932
769
|
},
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
* @param {sap.ui.core.Control} oControl control instance
|
|
936
|
-
* @returns {boolean} is selection enabled or not
|
|
937
|
-
*/
|
|
938
|
-
isSelectionEnabled: function (oControl) {
|
|
939
|
-
return !(oControl.getSelectionBehavior() !== "RowSelector" || oControl.getSelectionMode() == "None");
|
|
770
|
+
getRowCount: function(oTable) {
|
|
771
|
+
return oTable._getTotalRowCount();
|
|
940
772
|
},
|
|
941
773
|
/**
|
|
942
774
|
* Retrieve the cell reference for a given position
|
|
@@ -946,14 +778,33 @@ sap.ui.define([
|
|
|
946
778
|
* @param {int} mPosition.colIndex column index
|
|
947
779
|
* @returns {HTMLElement} cell's DOM element
|
|
948
780
|
*/
|
|
949
|
-
getCellRef: function (oTable, mPosition) {
|
|
950
|
-
var
|
|
781
|
+
getCellRef: function (oTable, mPosition, bRange) {
|
|
782
|
+
var aRows = oTable.getRows();
|
|
783
|
+
var oRow = aRows.find(function(oRow) {
|
|
784
|
+
return oRow.getIndex() == mPosition.rowIndex;
|
|
785
|
+
});
|
|
951
786
|
if (oRow) {
|
|
952
787
|
var oColumn = this.getVisibleColumns(oTable)[mPosition.colIndex];
|
|
953
788
|
var oCell = oColumn && oRow.getCells()[mPosition.colIndex];
|
|
954
789
|
if (oCell) {
|
|
955
790
|
return oCell.$().closest(this.selectableCells)[0];
|
|
956
791
|
}
|
|
792
|
+
} else if (bRange) {
|
|
793
|
+
if (aRows[0].getIndex() > mPosition.rowIndex) {
|
|
794
|
+
oRow = aRows[0];
|
|
795
|
+
var oColumn = this.getVisibleColumns(oTable)[mPosition.colIndex];
|
|
796
|
+
var oCell = oColumn && oRow.getCells()[mPosition.colIndex];
|
|
797
|
+
if (oCell) {
|
|
798
|
+
return oCell.$().closest(this.selectableCells)[0];
|
|
799
|
+
}
|
|
800
|
+
} else if (aRows[aRows.length - 1].getIndex() < mPosition.rowIndex) {
|
|
801
|
+
oRow = aRows[aRows.length - 1];
|
|
802
|
+
var oColumn = this.getVisibleColumns(oTable)[mPosition.colIndex];
|
|
803
|
+
var oCell = oColumn && oRow.getCells()[mPosition.colIndex];
|
|
804
|
+
if (oCell) {
|
|
805
|
+
return oCell.$().closest(this.selectableCells)[0];
|
|
806
|
+
}
|
|
807
|
+
}
|
|
957
808
|
}
|
|
958
809
|
},
|
|
959
810
|
/**
|
|
@@ -964,113 +815,10 @@ sap.ui.define([
|
|
|
964
815
|
*/
|
|
965
816
|
getCellInfo: function (oTable, oTarget) {
|
|
966
817
|
return {
|
|
967
|
-
rowIndex:
|
|
968
|
-
colIndex: this.
|
|
969
|
-
};
|
|
970
|
-
},
|
|
971
|
-
/**
|
|
972
|
-
* Retrieve the visible row range for the given table.
|
|
973
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
974
|
-
* @returns {Object} object containing from - to table range
|
|
975
|
-
*/
|
|
976
|
-
getVisibleRange: function (oTable) {
|
|
977
|
-
var aRows = oTable.getRows();
|
|
978
|
-
return {
|
|
979
|
-
from: {rowIndex: aRows[0].getIndex(), colIndex: 0},
|
|
980
|
-
to: {rowIndex: aRows[aRows.length - 1].getIndex(), colIndex: this.getVisibleColumns(oTable).length - 1}
|
|
818
|
+
rowIndex: Element.closestTo(oTarget, true).getIndex(),
|
|
819
|
+
colIndex: this.getVisibleColumns(oTable).indexOf(Core.byId(oTarget.getAttribute("data-sap-ui-colid")))
|
|
981
820
|
};
|
|
982
821
|
},
|
|
983
|
-
/**
|
|
984
|
-
* Returns the controls' available selection areas for the given bounds.
|
|
985
|
-
*
|
|
986
|
-
* Note: The order of the areas is from left to right. Area at index 0 is the leftmost area, etc.
|
|
987
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
988
|
-
* @param {Object} mFrom from position
|
|
989
|
-
* @param {Object} mTo to position
|
|
990
|
-
* @returns {Object[]} array of objects (container, from, to) containing information for each area. It contains the name of the container
|
|
991
|
-
* and the area that will be selected in said container.
|
|
992
|
-
*/
|
|
993
|
-
getSelectionAreas: function (oTable, mFrom, mTo) {
|
|
994
|
-
// push selection areas from left to right
|
|
995
|
-
var aAreas = [], iFixedColumnCount = oTable.getFixedColumnCount();
|
|
996
|
-
if (iFixedColumnCount > 0 && (mFrom.colIndex < iFixedColumnCount || mFrom.colIndex === -Infinity)) {
|
|
997
|
-
var iToCol = mTo.colIndex === Infinity ? iFixedColumnCount - 1 : Math.min(mTo.colIndex, iFixedColumnCount - 1);
|
|
998
|
-
var mFixedFrom = {rowIndex: mFrom.rowIndex, colIndex: mFrom.colIndex},
|
|
999
|
-
mFixedTo = {rowIndex: mTo.rowIndex, colIndex: iToCol};
|
|
1000
|
-
aAreas.push({container: "sapUiTableCtrlScrFixed", from: mFixedFrom, to: mFixedTo});
|
|
1001
|
-
}
|
|
1002
|
-
if (mTo.colIndex >= iFixedColumnCount || mTo.colIndex === Infinity) {
|
|
1003
|
-
aAreas.push({container: "tableCtrlCnt", from: mFrom, to: mTo, hasOffset: true});
|
|
1004
|
-
}
|
|
1005
|
-
return aAreas;
|
|
1006
|
-
},
|
|
1007
|
-
/**
|
|
1008
|
-
* Retrieves selected cells and returns their position and the boundaries of the selection area fitted to the table and its border options.
|
|
1009
|
-
*
|
|
1010
|
-
* Note: As the selection area may vary based on control-specific settings (e.g. SingleSelection), the information is returned as well.
|
|
1011
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
1012
|
-
* @param {Object} mSelectionBounds selection options
|
|
1013
|
-
* @param {Object} oOptions selection options
|
|
1014
|
-
* @returns {Object} oSelection object containg <code>bounds</code> (selection bounds) and <code>cells</code> (selected cell positions)
|
|
1015
|
-
* @returns {Object} oSelection.bounds
|
|
1016
|
-
* @returns {int[]} oSelection.cells
|
|
1017
|
-
*/
|
|
1018
|
-
selectCells: function (oTable, mSelectionBounds, oOptions) {
|
|
1019
|
-
var mBounds = {}, oBorderOptions = {top: true, bottom: true};
|
|
1020
|
-
var iBindingLength = oTable.getBinding("rows").getLength();
|
|
1021
|
-
mBounds.from = Object.assign({}, mSelectionBounds.from);
|
|
1022
|
-
mBounds.to = Object.assign({}, mSelectionBounds.to);
|
|
1023
|
-
|
|
1024
|
-
mBounds.from.rowIndex = Math.max(mBounds.from.rowIndex, 0);
|
|
1025
|
-
mBounds.from.colIndex = Math.max(mBounds.from.colIndex, 0);
|
|
1026
|
-
|
|
1027
|
-
mBounds.to.rowIndex = Math.min(mBounds.to.rowIndex, iBindingLength);
|
|
1028
|
-
mBounds.to.colIndex = Math.min(mBounds.to.colIndex, this.getVisibleColumns(oTable).length - 1);
|
|
1029
|
-
|
|
1030
|
-
var aCells = [];
|
|
1031
|
-
|
|
1032
|
-
// Replace MIN/MAX with according number for focus object
|
|
1033
|
-
if (oOptions && oOptions.info) {
|
|
1034
|
-
oOptions.info.focus.rowIndex = Math.min(Math.max(oOptions.info.focus.rowIndex, 0), iBindingLength);
|
|
1035
|
-
oOptions.info.focus.colIndex = Math.min(Math.max(oOptions.info.focus.colIndex, 0), this.getVisibleColumns(oTable).length - 1);
|
|
1036
|
-
this._focusCell(oTable, oOptions.info.focus, oOptions.info.direction);
|
|
1037
|
-
}
|
|
1038
|
-
|
|
1039
|
-
// If table is in Single Selection Mode, only select the row with focus in it
|
|
1040
|
-
if (mBounds.from.colIndex === 0 && mBounds.to.colIndex === (this.getVisibleColumns(oTable).length - 1) && oTable.getSelectionMode() == "Single") {
|
|
1041
|
-
mBounds.from.rowIndex = mSelectionBounds.from.rowIndex = oOptions.info.focus.rowIndex;
|
|
1042
|
-
mBounds.to.rowIndex = mSelectionBounds.to.rowIndex = oOptions.info.focus.rowIndex;
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
for (var iRow = mBounds.from.rowIndex; iRow <= mBounds.to.rowIndex; iRow++) {
|
|
1046
|
-
var oRow = this._getRowByIndex(oTable, iRow);
|
|
1047
|
-
if (oRow) {
|
|
1048
|
-
for (var iCol = mBounds.from.colIndex; iCol <= mBounds.to.colIndex; iCol++) {
|
|
1049
|
-
aCells.push([iRow, iCol]);
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
|
|
1054
|
-
return {borderOptions: oBorderOptions, cells: aCells};
|
|
1055
|
-
},
|
|
1056
|
-
/**
|
|
1057
|
-
* Retrieves the row index for the given cell's DOM reference.
|
|
1058
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
1059
|
-
* @param {HTMLElement} oCellDomRef DOM reference of cell
|
|
1060
|
-
* @returns {int} row index
|
|
1061
|
-
*/
|
|
1062
|
-
rowIndex: function (oTable, oCellDomRef) {
|
|
1063
|
-
return Element.closestTo(oCellDomRef, true).getIndex();
|
|
1064
|
-
},
|
|
1065
|
-
/**
|
|
1066
|
-
* Retrieves the column index for the given cell's DOM reference.
|
|
1067
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
1068
|
-
* @param {HTMLElement} oCellDomRef DOM reference of cell
|
|
1069
|
-
* @returns {int} column index
|
|
1070
|
-
*/
|
|
1071
|
-
colIndex: function (oTable, oCellDomRef) {
|
|
1072
|
-
return this.getVisibleColumns(oTable).indexOf(Core.byId(oCellDomRef.getAttribute("data-sap-ui-colid")));
|
|
1073
|
-
},
|
|
1074
822
|
/**
|
|
1075
823
|
* Loads contexts according to the provided parameters without changing the binding's state.
|
|
1076
824
|
*
|
|
@@ -1106,74 +854,61 @@ sap.ui.define([
|
|
|
1106
854
|
}
|
|
1107
855
|
return aContexts;
|
|
1108
856
|
},
|
|
1109
|
-
columnByIndex: function(oTable, iColIndex) {
|
|
1110
|
-
var oColumn = this.getVisibleColumns(oTable)[iColIndex];
|
|
1111
|
-
if (!oColumn.getVisible()) {
|
|
1112
|
-
return;
|
|
1113
|
-
}
|
|
1114
|
-
return oColumn;
|
|
1115
|
-
},
|
|
1116
|
-
isNavigatableCell: function (oTable, mPosition) {
|
|
1117
|
-
if ((mPosition.rowIndex < 0 || mPosition.rowIndex >= oTable.getBinding("rows").getLength()
|
|
1118
|
-
|| mPosition.colIndex < 0 || mPosition.colIndex >= this.getVisibleColumns(oTable).length)
|
|
1119
|
-
&& !(mPosition.rowIndex == -Infinity || mPosition.rowIndex == Infinity
|
|
1120
|
-
|| mPosition.colIndex == -Infinity || mPosition.colIndex == Infinity)) {
|
|
1121
|
-
return false;
|
|
1122
|
-
}
|
|
1123
|
-
return true;
|
|
1124
|
-
},
|
|
1125
857
|
/**
|
|
1126
|
-
*
|
|
1127
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
1128
|
-
* @param {int}
|
|
1129
|
-
* @param {int}
|
|
858
|
+
* Select rows beginning at iFrom to iTo.
|
|
859
|
+
* @param {sap.ui.table.Table} oTable The table instance
|
|
860
|
+
* @param {int} iFrom starting row index
|
|
861
|
+
* @param {int} iTo ending row index
|
|
862
|
+
* @param {int} mFocus focused row index
|
|
1130
863
|
*/
|
|
1131
|
-
|
|
1132
|
-
var
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
864
|
+
selectRows: function(oTable, iFrom, iTo, iFocus) {
|
|
865
|
+
var oSelectionOwner = PluginBase.getPlugin(oTable, "sap.ui.table.plugins.SelectionPlugin") || oTable;
|
|
866
|
+
var sSelectionMode = oTable.getSelectionMode();
|
|
867
|
+
|
|
868
|
+
if (sSelectionMode == "None") {
|
|
869
|
+
return false;
|
|
870
|
+
} else if (sSelectionMode == "Single") {
|
|
871
|
+
iFrom = iTo = iFocus;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
if (oSelectionOwner.addSelectionInterval) {
|
|
875
|
+
oSelectionOwner.addSelectionInterval(iFrom, iTo);
|
|
876
|
+
return true;
|
|
1141
877
|
}
|
|
1142
|
-
},
|
|
1143
|
-
/**
|
|
1144
|
-
* Focus the specified cell and scroll if necessary.
|
|
1145
|
-
* @param {sap.ui.table.Table} oTable table instance
|
|
1146
|
-
* @param {Object} mPosition position object
|
|
1147
|
-
* @param {int} mPosition.rowIndex row index
|
|
1148
|
-
* @param {int} mPosition.colIndex column index
|
|
1149
|
-
* @param {int} iDirection scroll direction
|
|
1150
|
-
*/
|
|
1151
|
-
_focusCell: function (oTable, mPosition, iDirection) {
|
|
1152
|
-
var oCellRef = this.getCellRef(oTable, mPosition);
|
|
1153
878
|
|
|
879
|
+
// TODO: Handle V4 correctly. Currrently only selects visible rows
|
|
880
|
+
var aRows = oTable.getRows().filter(function(oRow) {
|
|
881
|
+
return oRow.getIndex() >= iFrom && oRow.getIndex() <= iTo;
|
|
882
|
+
});
|
|
883
|
+
aRows.forEach(function(oRow) {
|
|
884
|
+
oSelectionOwner.setSelected(oRow, true);
|
|
885
|
+
});
|
|
886
|
+
return true;
|
|
887
|
+
},
|
|
888
|
+
focusCell: function(oTable, mFocus, bForward) {
|
|
889
|
+
var oCellRef = this.getCellRef(oTable, mFocus);
|
|
1154
890
|
if (!oCellRef) {
|
|
1155
|
-
this.
|
|
1156
|
-
|
|
1157
|
-
if (!oCellRef) {
|
|
1158
|
-
oTable.setFirstVisibleRow(mPosition.rowIndex);
|
|
1159
|
-
oCellRef = this.getCellRef(oTable, mPosition);
|
|
1160
|
-
}
|
|
891
|
+
this.scroll(oTable, bForward, true);
|
|
892
|
+
return;
|
|
1161
893
|
}
|
|
1162
|
-
oCellRef
|
|
894
|
+
oCellRef.focus();
|
|
1163
895
|
},
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
var aItems = oTable.getRows();
|
|
1172
|
-
for (var i = 0; i < aItems.length; i++) {
|
|
1173
|
-
if (aItems[i].getIndex() == iRowIndex) {
|
|
1174
|
-
return aItems[i];
|
|
896
|
+
scroll: function(oTable, bForward, bVertical) {
|
|
897
|
+
if (bVertical) {
|
|
898
|
+
var iFirstVisibleRowIndex = oTable.getFirstVisibleRow();
|
|
899
|
+
var iIndex = bForward ? iFirstVisibleRowIndex + 1 : iFirstVisibleRowIndex - 1;
|
|
900
|
+
if (iIndex >= 0 && iIndex != iFirstVisibleRowIndex) {
|
|
901
|
+
oTable.setFirstVisibleRow(iIndex);
|
|
902
|
+
return Promise.resolve();
|
|
1175
903
|
}
|
|
904
|
+
} else {
|
|
905
|
+
var oScrollBar = oTable._getScrollExtension().getHorizontalScrollbar();
|
|
906
|
+
var iScrollDiff = Math.pow(-1, +!bForward) * 10;
|
|
907
|
+
|
|
908
|
+
oScrollBar.scrollLeft = Math.max(0, oScrollBar.scrollLeft + iScrollDiff);
|
|
909
|
+
return Promise.resolve();
|
|
1176
910
|
}
|
|
911
|
+
return false;
|
|
1177
912
|
}
|
|
1178
913
|
}
|
|
1179
914
|
}, CellSelector);
|