@openui5/sap.ui.core 1.92.0 → 1.95.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/{.eslintrc → .eslintrc.json} +1 -2
- package/.reuse/dep5 +1 -6
- package/THIRDPARTY.txt +4 -10
- package/package.json +1 -1
- package/src/jquery.sap.global.js +9 -2
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +7 -4
- package/src/jquery.sap.stubs.js +2 -1
- package/src/jquery.sap.trace.js +2 -1
- package/src/sap/base/i18n/ResourceBundle.js +8 -4
- package/src/sap/base/strings/whitespaceReplacer.js +52 -0
- package/src/sap/base/util/Properties.js +4 -1
- package/src/sap/base/util/isEmptyObject.js +1 -2
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/ui/Device.js +37 -42
- package/src/sap/ui/Global.js +6 -6
- package/src/sap/ui/VersionInfo.js +1 -0
- package/src/sap/ui/base/DataType.js +14 -7
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/ExpressionParser.js +9 -6
- package/src/sap/ui/base/Interface.js +3 -49
- package/src/sap/ui/base/ManagedObject.js +131 -24
- package/src/sap/ui/base/ManagedObjectMetadata.js +13 -4
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +49 -4
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/base/syncXHRFix.js +2 -1
- package/src/sap/ui/core/.library +5 -5
- package/src/sap/ui/core/AppCacheBuster.js +4 -4
- package/src/sap/ui/core/BusyIndicator.js +1 -11
- package/src/sap/ui/core/BusyIndicatorUtils.js +4 -1
- package/src/sap/ui/core/Component.js +441 -179
- package/src/sap/ui/core/ComponentContainer.js +16 -6
- package/src/sap/ui/core/ComponentMetadata.js +14 -3
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +64 -32
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +57 -40
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/CustomizingConfiguration.js +35 -260
- package/src/sap/ui/core/DeclarativeSupport.js +3 -2
- package/src/sap/ui/core/Element.js +1 -1
- package/src/sap/ui/core/ElementMetadata.js +4 -2
- package/src/sap/ui/core/EnabledPropagator.js +91 -73
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/ExtensionPoint.js +7 -14
- package/src/sap/ui/core/Fragment.js +30 -32
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +5 -5
- package/src/sap/ui/core/IconPool.js +15 -1097
- package/src/sap/ui/core/IconRenderer.js +2 -2
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +9 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +1 -1
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +26 -4
- package/src/sap/ui/core/LocaleData.js +1 -1
- package/src/sap/ui/core/Manifest.js +124 -126
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Patcher.js +53 -80
- package/src/sap/ui/core/Placeholder.js +25 -11
- package/src/sap/ui/core/Popup.js +29 -5
- package/src/sap/ui/core/RenderManager.js +41 -24
- package/src/sap/ui/core/Renderer.js +13 -3
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +2 -2
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/ShortcutHintsMixin.js +14 -7
- package/src/sap/ui/core/ThemeCheck.js +13 -61
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +5 -2
- package/src/sap/ui/core/UIComponent.js +81 -40
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +5 -5
- package/src/sap/ui/core/_IconRegistry.js +1215 -0
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +6 -3
- package/src/sap/ui/core/dnd/DragDropBase.js +2 -9
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +41 -1
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/format/DateFormat.js +2 -0
- package/src/sap/ui/core/format/NumberFormat.js +2 -0
- package/src/sap/ui/core/hyphenation/Hyphenation.js +73 -221
- package/src/sap/ui/core/hyphenation/HyphenationTestingWords.js +11 -10
- package/src/sap/ui/core/library.js +3 -3
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +13 -13
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +1 -1
- package/src/sap/ui/core/messagebundle_de.properties +1 -1
- package/src/sap/ui/core/messagebundle_fr.properties +1 -1
- package/src/sap/ui/core/messagebundle_it.properties +1 -1
- package/src/sap/ui/core/messagebundle_pl.properties +1 -1
- package/src/sap/ui/core/messagebundle_th.properties +2 -2
- package/src/sap/ui/core/mvc/Controller.js +166 -9
- package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +30 -32
- package/src/sap/ui/core/mvc/ControllerMetadata.js +18 -18
- package/src/sap/ui/core/mvc/HTMLView.js +4 -2
- package/src/sap/ui/core/mvc/JSONView.js +8 -6
- package/src/sap/ui/core/mvc/JSView.js +5 -3
- package/src/sap/ui/core/mvc/TemplateView.js +2 -2
- package/src/sap/ui/core/mvc/View.js +73 -89
- package/src/sap/ui/core/mvc/ViewType.js +2 -0
- package/src/sap/ui/core/mvc/XMLView.js +14 -10
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/routing/History.js +36 -18
- package/src/sap/ui/core/routing/Route.js +10 -1
- package/src/sap/ui/core/routing/Router.js +8 -5
- package/src/sap/ui/core/routing/Target.js +13 -0
- package/src/sap/ui/core/routing/TargetCache.js +1 -1
- package/src/sap/ui/core/routing/Targets.js +39 -2
- package/src/sap/ui/core/routing/async/Route.js +7 -4
- package/src/sap/ui/core/routing/async/Target.js +383 -262
- package/src/sap/ui/core/routing/sync/Target.js +15 -0
- package/src/sap/ui/core/rules/App.support.js +35 -1
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/BootSupportTool.js +11 -0
- package/src/sap/ui/core/support/InteractionTree.css +4 -0
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +1 -1
- package/src/sap/ui/core/support/ViewInfo.css +599 -0
- package/src/sap/ui/core/support/controls/InteractionTree.js +352 -222
- package/src/sap/ui/core/support/controls/ObjectViewer.js +8 -50
- package/src/sap/ui/core/support/controls/TimelineOverview.js +49 -24
- package/src/sap/ui/core/support/controls/TreeViewer.js +12 -58
- package/src/sap/ui/core/support/plugins/ControlTree.js +23 -26
- package/src/sap/ui/core/support/plugins/Debugging.js +9 -11
- package/src/sap/ui/core/support/plugins/Interaction.js +2 -2
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +147 -75
- package/src/sap/ui/core/support/plugins/Selector.js +19 -24
- package/src/sap/ui/core/support/plugins/TechInfo.js +5 -5
- package/src/sap/ui/core/support/plugins/Trace.js +95 -32
- package/src/sap/ui/core/support/plugins/ViewInfo.js +9 -73
- package/src/sap/ui/core/support/support.css +109 -14
- package/src/sap/ui/core/support/support.html +6 -2
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.fragment.xml +1 -0
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +149 -72
- package/src/sap/ui/core/support/trace/E2eTraceLib.js +3 -3
- package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +5 -0
- package/src/sap/ui/core/themes/base/base.less +27 -25
- package/src/sap/ui/core/themes/base/shared.less +1 -0
- package/src/sap/ui/core/theming/Parameters.js +225 -61
- package/src/sap/ui/core/theming/ThemeHelper.js +94 -0
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +11 -28
- package/src/sap/ui/core/tmpl/TemplateControl.js +4 -4
- package/src/sap/ui/core/tmpl/_parsePath.js +35 -0
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/DraftEnabledMockServer.js +9 -4
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +24 -5
- package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +3 -2
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/XMLPreprocessor.js +11 -12
- package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +154 -63
- package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +171 -152
- package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +419 -291
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +2 -2
- package/src/sap/ui/core/util/serializer/delegate/XML.js +2 -2
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +10 -4
- package/src/sap/ui/debug/DebugEnv.js +3 -4
- package/src/sap/ui/debug/PropertyList.css +55 -0
- package/src/sap/ui/debug/PropertyList.js +111 -182
- package/src/sap/ui/events/jquery/EventSimulation.js +7 -6
- package/src/sap/ui/events/jquery/EventTriggerHook.js +1 -1
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/ClientPropertyBinding.js +3 -1
- package/src/sap/ui/model/ClientTreeBinding.js +14 -8
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/Context.js +31 -11
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/ListBinding.js +19 -0
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +3 -3
- package/src/sap/ui/model/SelectionModel.js +5 -1
- package/src/sap/ui/model/SimpleType.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +14 -9
- package/src/sap/ui/model/analytics/odata4analytics.js +31 -23
- package/src/sap/ui/model/base/ManagedObjectModel.js +13 -1
- package/src/sap/ui/model/json/JSONModel.js +4 -2
- package/src/sap/ui/model/message/MessageModel.js +4 -2
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataListBinding.js +1 -0
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +5 -2
- package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
- package/src/sap/ui/model/odata/ODataModel.js +7 -6
- package/src/sap/ui/model/odata/ODataUtils.js +31 -10
- package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +30 -27
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +7 -2
- package/src/sap/ui/model/odata/type/Date.js +1 -1
- package/src/sap/ui/model/odata/type/DateTime.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/Decimal.js +1 -1
- package/src/sap/ui/model/odata/type/Double.js +1 -1
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +1 -1
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +1 -1
- package/src/sap/ui/model/odata/type/ODataType.js +1 -1
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +1 -1
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +3 -1
- package/src/sap/ui/model/odata/type/Time.js +1 -1
- package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
- package/src/sap/ui/model/odata/type/Unit.js +7 -2
- package/src/sap/ui/model/odata/type/UnitMixin.js +20 -7
- package/src/sap/ui/model/odata/v2/Context.js +187 -0
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -2
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +55 -51
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +42 -106
- package/src/sap/ui/model/odata/v2/ODataModel.js +251 -159
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +163 -136
- package/src/sap/ui/model/odata/v4/Context.js +6 -3
- package/src/sap/ui/model/odata/v4/ODataBinding.js +3 -3
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +97 -25
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +112 -24
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +15 -12
- package/src/sap/ui/model/odata/v4/ODataModel.js +85 -77
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +25 -15
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +21 -12
- package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +10 -3
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +13 -4
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +5 -1
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +28 -17
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +47 -30
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +55 -19
- package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +2 -2
- package/src/sap/ui/model/resource/ResourceModel.js +5 -2
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +1 -1
- package/src/sap/ui/model/type/DateInterval.js +1 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +4 -2
- package/src/sap/ui/performance/Measurement.js +1 -1
- package/src/sap/ui/performance/trace/FESR.js +2 -1
- package/src/sap/ui/performance/trace/Interaction.js +42 -25
- package/src/sap/ui/performance/trace/initTraces.js +1 -1
- package/src/sap/ui/qunit/QUnitUtils.js +1 -1
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/security/FrameOptions.js +2 -1
- package/src/sap/ui/test/Opa5.js +1 -1
- package/src/sap/ui/test/OpaBuilder.js +1 -0
- package/src/sap/ui/test/TestUtils.js +28 -34
- package/src/sap/ui/test/actions/Drag.js +6 -2
- package/src/sap/ui/test/actions/Drop.js +6 -2
- package/src/sap/ui/test/actions/EnterText.js +6 -0
- package/src/sap/ui/test/actions/Press.js +6 -0
- package/src/sap/ui/test/actions/Scroll.js +6 -0
- package/src/sap/ui/test/autowaiter/_resourceWaiter.js +4 -4
- package/src/sap/ui/test/launchers/componentLauncher.js +1 -4
- package/src/sap/ui/test/matchers/I18NText.js +29 -11
- package/src/sap/ui/test/opaQunit.js +11 -9
- package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +4 -4
- package/src/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
- package/src/sap/ui/thirdparty/crossroads.js +16 -6
- package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly.js +1196 -0
- package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly_Loader.js +797 -0
- package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.asm.js +108 -127
- package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.wasm +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/bg.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/ca.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/da.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/de.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/el-monoton.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/en-us.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/es.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/et.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/fi.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/fr.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/hi.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/hr.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/hu.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/it.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/lt.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/nb-no.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/nl.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/pt.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/ru.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/sl.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/sv.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/th.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/tr.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/uk.hpb +0 -0
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/sap/ui/util/isCrossOriginURL.js +16 -6
- package/src/sap-ui-core-nojQuery.js +1 -1
- package/src/sap-ui-core.js +1 -1
- package/src/sap-ui-debug.js +3 -17
- package/src/ui5loader.js +5 -2
- package/src/sap/ui/core/support/plugins/MessageTest.js +0 -96
- package/src/sap/ui/thirdparty/hyphenopoly/hyphenopoly.bundle.js +0 -860
|
@@ -68,8 +68,8 @@ sap.ui.define([
|
|
|
68
68
|
* @author SAP SE
|
|
69
69
|
* @class Context binding for an OData V4 model.
|
|
70
70
|
* An event handler can only be attached to this binding for the following events:
|
|
71
|
-
* 'AggregatedDataStateChange', 'change', 'dataReceived', 'dataRequested',
|
|
72
|
-
* '
|
|
71
|
+
* 'AggregatedDataStateChange', 'change', 'dataReceived', 'dataRequested', 'DataStateChange',
|
|
72
|
+
* 'patchCompleted', and 'patchSent'. For other events, an error is thrown.
|
|
73
73
|
*
|
|
74
74
|
* A context binding can also be used as an <i>operation binding</i> to support bound actions,
|
|
75
75
|
* action imports, bound functions and function imports. If you want to control the execution
|
|
@@ -106,7 +106,7 @@ sap.ui.define([
|
|
|
106
106
|
* @mixes sap.ui.model.odata.v4.ODataParentBinding
|
|
107
107
|
* @public
|
|
108
108
|
* @since 1.37.0
|
|
109
|
-
* @version 1.
|
|
109
|
+
* @version 1.95.0
|
|
110
110
|
*
|
|
111
111
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
112
112
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
@@ -114,7 +114,9 @@ sap.ui.define([
|
|
|
114
114
|
* @borrows sap.ui.model.odata.v4.ODataBinding#hasPendingChanges as #hasPendingChanges
|
|
115
115
|
* @borrows sap.ui.model.odata.v4.ODataBinding#isInitial as #isInitial
|
|
116
116
|
* @borrows sap.ui.model.odata.v4.ODataBinding#refresh as #refresh
|
|
117
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#requestRefresh as #requestRefresh
|
|
117
118
|
* @borrows sap.ui.model.odata.v4.ODataBinding#resetChanges as #resetChanges
|
|
119
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#toString as #toString
|
|
118
120
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#attachPatchCompleted as
|
|
119
121
|
* #attachPatchCompleted
|
|
120
122
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#attachPatchSent as #attachPatchSent
|
|
@@ -122,13 +124,13 @@ sap.ui.define([
|
|
|
122
124
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#detachPatchCompleted as
|
|
123
125
|
* #detachPatchCompleted
|
|
124
126
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#detachPatchSent as #detachPatchSent
|
|
125
|
-
* @borrows sap.ui.model.odata.v4.ODataParentBinding#initialize as #initialize
|
|
126
127
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#resume as #resume
|
|
127
128
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#suspend as #suspend
|
|
128
129
|
*/
|
|
129
130
|
var ODataContextBinding = ContextBinding.extend("sap.ui.model.odata.v4.ODataContextBinding", {
|
|
130
131
|
constructor : function (oModel, sPath, oContext, mParameters) {
|
|
131
|
-
var iPos = sPath.indexOf("(...)")
|
|
132
|
+
var iPos = sPath.indexOf("(...)"),
|
|
133
|
+
that = this;
|
|
132
134
|
|
|
133
135
|
ContextBinding.call(this, oModel, sPath);
|
|
134
136
|
// initialize mixin members
|
|
@@ -178,6 +180,13 @@ sap.ui.define([
|
|
|
178
180
|
}
|
|
179
181
|
this.setContext(oContext);
|
|
180
182
|
oModel.bindingCreated(this);
|
|
183
|
+
|
|
184
|
+
Promise.resolve().then(function () {
|
|
185
|
+
// bInitial must be true initially, but false later. Then suspend on a just
|
|
186
|
+
// created binding causes a change event on resume; otherwise further changes
|
|
187
|
+
// on the suspended binding are required (see doSuspend)
|
|
188
|
+
that.bInitial = false;
|
|
189
|
+
});
|
|
181
190
|
},
|
|
182
191
|
metadata : {
|
|
183
192
|
publicMethods : []
|
|
@@ -574,11 +583,15 @@ sap.ui.define([
|
|
|
574
583
|
* @returns {SyncPromise}
|
|
575
584
|
* The request promise
|
|
576
585
|
* @throws {Error}
|
|
577
|
-
* If
|
|
578
|
-
*
|
|
579
|
-
*
|
|
580
|
-
*
|
|
581
|
-
*
|
|
586
|
+
* If
|
|
587
|
+
* <ul>
|
|
588
|
+
* <li> the given metadata is neither an "Action" nor a "Function",
|
|
589
|
+
* <li> a collection-valued parameter for an operation other than a V4 action is encountered,
|
|
590
|
+
* <li> <code>bIgnoreETag</code> is used for an operation other than a bound action,
|
|
591
|
+
* <li> <code>fnOnStrictHandlingFailed</code> is given but the given metadata is not an
|
|
592
|
+
* "Action",
|
|
593
|
+
* <li> <code>fnOnStrictHandlingFailed</code> is given and it does not return a promise.
|
|
594
|
+
* </ul>
|
|
582
595
|
*
|
|
583
596
|
* @private
|
|
584
597
|
*/
|
|
@@ -621,18 +634,18 @@ sap.ui.define([
|
|
|
621
634
|
* @throws {Error} If <code>fnOnStrictHandlingFailed</code> does not return a promise
|
|
622
635
|
*/
|
|
623
636
|
function onStrictHandling(oError) {
|
|
624
|
-
var
|
|
637
|
+
var oResult;
|
|
625
638
|
|
|
626
639
|
_Helper.adjustTargetsInError(oError, oOperationMetadata,
|
|
627
640
|
that.oParameterContext.getPath(),
|
|
628
641
|
that.bRelative ? that.oContext.getPath() : undefined);
|
|
629
642
|
oError.error.$ignoreTopLevel = true;
|
|
630
|
-
oRawMessages = _Helper.extractMessages(oError);
|
|
631
643
|
|
|
632
644
|
oResult = fnOnStrictHandlingFailed(
|
|
633
|
-
|
|
645
|
+
_Helper.extractMessages(oError).map(function (oRawMessage) {
|
|
634
646
|
return that.oModel.createUI5Message(oRawMessage);
|
|
635
|
-
|
|
647
|
+
})
|
|
648
|
+
);
|
|
636
649
|
|
|
637
650
|
if (!(oResult instanceof Promise)) {
|
|
638
651
|
throw new Error("Not a promise: " + oResult);
|
|
@@ -760,6 +773,17 @@ sap.ui.define([
|
|
|
760
773
|
}
|
|
761
774
|
};
|
|
762
775
|
|
|
776
|
+
/**
|
|
777
|
+
* @override
|
|
778
|
+
* @see sap.ui.model.odata.v4.ODataParentBinding#doSuspend
|
|
779
|
+
*/
|
|
780
|
+
ODataContextBinding.prototype.doSuspend = function () {
|
|
781
|
+
if (this.bInitial) {
|
|
782
|
+
// if the binding is still initial, it must fire an event in resume
|
|
783
|
+
this.sResumeChangeReason = ChangeReason.Change;
|
|
784
|
+
}
|
|
785
|
+
};
|
|
786
|
+
|
|
763
787
|
/**
|
|
764
788
|
* Calls the OData operation that corresponds to this operation binding.
|
|
765
789
|
*
|
|
@@ -779,7 +803,7 @@ sap.ui.define([
|
|
|
779
803
|
* IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}.
|
|
780
804
|
* @param {boolean} [bIgnoreETag]
|
|
781
805
|
* Whether the entity's ETag should be actively ignored (If-Match:*); supported for bound
|
|
782
|
-
* actions only, since 1.90.0
|
|
806
|
+
* actions only, since 1.90.0. Ignored if there is no ETag (since 1.93.0).
|
|
783
807
|
* @param {function} [fnOnStrictHandlingFailed]
|
|
784
808
|
* If this callback is given for an action, the preference "handling=strict" is applied. If
|
|
785
809
|
* the service responds with the HTTP status code 412 and a
|
|
@@ -799,8 +823,8 @@ sap.ui.define([
|
|
|
799
823
|
* rejected if <code>fnOnStrictHandlingFailed</code> is supplied and
|
|
800
824
|
* <ul>
|
|
801
825
|
* <li> is used for an operation other than an action,
|
|
802
|
-
* <li>
|
|
803
|
-
*
|
|
826
|
+
* <li> another request that applies the preference "handling=strict" exists in a different
|
|
827
|
+
* change set of the same $batch request,
|
|
804
828
|
* <li> returns a <code>Promise</code> that resolves with <code>false</code>. In this case
|
|
805
829
|
* <code>oError.canceled === true</code>.
|
|
806
830
|
* </ul>
|
|
@@ -820,7 +844,9 @@ sap.ui.define([
|
|
|
820
844
|
* {@link sap.ui.model.Binding#isResolved}) or relative to a transient context (see
|
|
821
845
|
* {@link sap.ui.model.odata.v4.Context#isTransient}), or if deferred operation bindings are
|
|
822
846
|
* nested, or if the OData resource path for a deferred operation binding's context cannot be
|
|
823
|
-
* determined
|
|
847
|
+
* determined, or if <code>fnOnStrictHandlingFailed</code> is called and does not return a
|
|
848
|
+
* <code>Promise</code>.
|
|
849
|
+
|
|
824
850
|
*
|
|
825
851
|
* @public
|
|
826
852
|
* @since 1.37.0
|
|
@@ -888,6 +914,7 @@ sap.ui.define([
|
|
|
888
914
|
return oCachePromise.then(function (oCache) {
|
|
889
915
|
var bDataRequested = false,
|
|
890
916
|
oGroupLock,
|
|
917
|
+
sResolvedPath = that.getResolvedPath(),
|
|
891
918
|
sRelativePath = oCache || that.oOperation
|
|
892
919
|
? that.getRelativePath(sPath)
|
|
893
920
|
: undefined,
|
|
@@ -938,7 +965,7 @@ sap.ui.define([
|
|
|
938
965
|
}, function (oError) {
|
|
939
966
|
oGroupLock.unlock(true);
|
|
940
967
|
if (bDataRequested) {
|
|
941
|
-
that.oModel.reportError("Failed to read path " +
|
|
968
|
+
that.oModel.reportError("Failed to read path " + sResolvedPath, sClassName,
|
|
942
969
|
oError);
|
|
943
970
|
that.fireDataReceived(oError.canceled ? {data : {}} : {error : oError});
|
|
944
971
|
}
|
|
@@ -1095,12 +1122,11 @@ sap.ui.define([
|
|
|
1095
1122
|
*/
|
|
1096
1123
|
// @override sap.ui.model.Binding#initialize
|
|
1097
1124
|
ODataContextBinding.prototype.initialize = function () {
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
}
|
|
1125
|
+
this.bInitial = false;
|
|
1126
|
+
// Here no other code but the event for the ManagedObject is expected. The binding should be
|
|
1127
|
+
// useable for controller code without calling initialize.
|
|
1128
|
+
if (this.isResolved() && !this.getRootBinding().isSuspended()) {
|
|
1129
|
+
this._fireChange({reason : ChangeReason.Change});
|
|
1104
1130
|
}
|
|
1105
1131
|
};
|
|
1106
1132
|
|
|
@@ -1131,6 +1157,52 @@ sap.ui.define([
|
|
|
1131
1157
|
&& !oMetadata.$EntitySetPath.includes("/"); // case 3
|
|
1132
1158
|
};
|
|
1133
1159
|
|
|
1160
|
+
/**
|
|
1161
|
+
* Moves the bound entity into the given list binding. This binding loses its data. The method
|
|
1162
|
+
* may only be called when this binding has finished loading. You can verify this by calling
|
|
1163
|
+
* <code>oBinding.getBoundContext().requestObject()</code>. If that promise resolves, the
|
|
1164
|
+
* binding has finished loading.
|
|
1165
|
+
*
|
|
1166
|
+
* @param {sap.ui.model.odata.v4.ODataListBinding} oListBinding
|
|
1167
|
+
* The list binding to take the entity
|
|
1168
|
+
* @throws {Error}
|
|
1169
|
+
* If
|
|
1170
|
+
* <ul>
|
|
1171
|
+
* <li> this binding is not a root binding,
|
|
1172
|
+
* <li> this binding has not finished loading yet,
|
|
1173
|
+
* <li> not all key properties of the bound entity have been selected (so that it is
|
|
1174
|
+
* impossible to determine its key predicate),
|
|
1175
|
+
* <li> the bound entity is not an entity of the list binding's collection,
|
|
1176
|
+
* <li> this binding is an operation binding,
|
|
1177
|
+
* <li> this binding has pending changes (see {@link #hasPendingChanges}),
|
|
1178
|
+
* <li> this binding has a <code>$expand</code> to a collection or a dependent list binding
|
|
1179
|
+
* without <code>$$ownRequest</code>,
|
|
1180
|
+
* <li> the list binding is not suspended,
|
|
1181
|
+
* <li> the list binding is relative and does not use the <code>$$ownRequest</code>
|
|
1182
|
+
* parameter (see {@link sap.ui.model.odata.v4.ODataModel#bindList}).
|
|
1183
|
+
* <li> the list binding uses data aggregation
|
|
1184
|
+
* (@see sap.ui.model.odata.v4.ODataListBinding#setAggregation)
|
|
1185
|
+
* </ul>
|
|
1186
|
+
*
|
|
1187
|
+
* @experimental
|
|
1188
|
+
* @public
|
|
1189
|
+
* @since 1.95.0
|
|
1190
|
+
*/
|
|
1191
|
+
ODataContextBinding.prototype.moveEntityTo = function (oListBinding) {
|
|
1192
|
+
if (!this.isRoot()) {
|
|
1193
|
+
throw new Error(this + ": must be a root binding");
|
|
1194
|
+
}
|
|
1195
|
+
if (this.oOperation) {
|
|
1196
|
+
throw new Error(this + ": must not be an operation binding");
|
|
1197
|
+
}
|
|
1198
|
+
if (this.hasPendingChanges()) {
|
|
1199
|
+
throw new Error(this + ": has pending changes");
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
oListBinding.moveEntityHere(this.oElementContext);
|
|
1203
|
+
this.oElementContext = null;
|
|
1204
|
+
};
|
|
1205
|
+
|
|
1134
1206
|
/**
|
|
1135
1207
|
* @override
|
|
1136
1208
|
* @see sap.ui.model.odata.v4.ODataBinding#refreshInternal
|
|
@@ -68,21 +68,24 @@ sap.ui.define([
|
|
|
68
68
|
* @author SAP SE
|
|
69
69
|
* @class List binding for an OData V4 model.
|
|
70
70
|
* An event handler can only be attached to this binding for the following events:
|
|
71
|
-
* 'AggregatedDataStateChange', 'change', '
|
|
72
|
-
*
|
|
71
|
+
* 'AggregatedDataStateChange', 'change', 'createCompleted', 'createSent', 'dataReceived',
|
|
72
|
+
* 'dataRequested', 'DataStateChange', 'patchCompleted', 'patchSent', and 'refresh'. For
|
|
73
|
+
* other events, an error is thrown.
|
|
73
74
|
* @extends sap.ui.model.ListBinding
|
|
74
75
|
* @hideconstructor
|
|
75
76
|
* @mixes sap.ui.model.odata.v4.ODataParentBinding
|
|
76
77
|
* @public
|
|
77
78
|
* @since 1.37.0
|
|
78
|
-
* @version 1.
|
|
79
|
+
* @version 1.95.0
|
|
79
80
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
80
81
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
81
82
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
|
|
82
83
|
* @borrows sap.ui.model.odata.v4.ODataBinding#hasPendingChanges as #hasPendingChanges
|
|
83
84
|
* @borrows sap.ui.model.odata.v4.ODataBinding#isInitial as #isInitial
|
|
84
85
|
* @borrows sap.ui.model.odata.v4.ODataBinding#refresh as #refresh
|
|
86
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#requestRefresh as #requestRefresh
|
|
85
87
|
* @borrows sap.ui.model.odata.v4.ODataBinding#resetChanges as #resetChanges
|
|
88
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#toString as #toString
|
|
86
89
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#attachPatchCompleted as
|
|
87
90
|
* #attachPatchCompleted
|
|
88
91
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#attachPatchSent as #attachPatchSent
|
|
@@ -90,7 +93,6 @@ sap.ui.define([
|
|
|
90
93
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#detachPatchCompleted as
|
|
91
94
|
* #detachPatchCompleted
|
|
92
95
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#detachPatchSent as #detachPatchSent
|
|
93
|
-
* @borrows sap.ui.model.odata.v4.ODataParentBinding#initialize as #initialize
|
|
94
96
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#resume as #resume
|
|
95
97
|
* @borrows sap.ui.model.odata.v4.ODataParentBinding#suspend as #suspend
|
|
96
98
|
*/
|
|
@@ -836,6 +838,7 @@ sap.ui.define([
|
|
|
836
838
|
oModel = this.oModel,
|
|
837
839
|
sPath = this.getResolvedPath(),
|
|
838
840
|
sPredicate,
|
|
841
|
+
aPreviousPaths,
|
|
839
842
|
bStartBeyondRange = iStart > this.aContexts.length,
|
|
840
843
|
i, that = this;
|
|
841
844
|
|
|
@@ -886,8 +889,9 @@ sap.ui.define([
|
|
|
886
889
|
}
|
|
887
890
|
}
|
|
888
891
|
// destroy previous contexts which are not reused or kept-alive
|
|
889
|
-
|
|
890
|
-
|
|
892
|
+
aPreviousPaths = Object.keys(this.mPreviousContextsByPath);
|
|
893
|
+
if (aPreviousPaths.length) {
|
|
894
|
+
oModel.addPrerenderingTask(this.destroyPreviousContexts.bind(this, aPreviousPaths));
|
|
891
895
|
}
|
|
892
896
|
if (iCount !== undefined) { // server count is available or "non-empty short read"
|
|
893
897
|
this.bLengthFinal = true;
|
|
@@ -930,7 +934,7 @@ sap.ui.define([
|
|
|
930
934
|
this.aContexts.forEach(function (oContext) {
|
|
931
935
|
oContext.destroy();
|
|
932
936
|
});
|
|
933
|
-
this.destroyPreviousContexts(
|
|
937
|
+
this.destroyPreviousContexts();
|
|
934
938
|
if (this.oHeaderContext) {
|
|
935
939
|
this.oHeaderContext.destroy();
|
|
936
940
|
}
|
|
@@ -988,24 +992,26 @@ sap.ui.define([
|
|
|
988
992
|
/**
|
|
989
993
|
* Removes and destroys contexts from mPreviousContextsByPath.
|
|
990
994
|
*
|
|
991
|
-
* @param {
|
|
992
|
-
* If
|
|
993
|
-
*
|
|
995
|
+
* @param {string[]} [aPathsToDelete]
|
|
996
|
+
* If given, only contexts with paths in this list except kept-alive ones are removed and
|
|
997
|
+
* destroyed; otherwise all contexts in the list are removed and destroyed
|
|
994
998
|
*
|
|
995
999
|
* @private
|
|
996
1000
|
*/
|
|
997
|
-
ODataListBinding.prototype.destroyPreviousContexts = function (
|
|
1001
|
+
ODataListBinding.prototype.destroyPreviousContexts = function (aPathsToDelete) {
|
|
998
1002
|
var mPreviousContextsByPath = this.mPreviousContextsByPath;
|
|
999
1003
|
|
|
1000
1004
|
if (mPreviousContextsByPath) { // binding may have been destroyed already
|
|
1001
|
-
Object.keys(mPreviousContextsByPath).forEach(function (sPath) {
|
|
1005
|
+
(aPathsToDelete || Object.keys(mPreviousContextsByPath)).forEach(function (sPath) {
|
|
1002
1006
|
var oContext = mPreviousContextsByPath[sPath];
|
|
1003
1007
|
|
|
1004
|
-
if (
|
|
1005
|
-
oContext.
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1008
|
+
if (oContext) {
|
|
1009
|
+
if (aPathsToDelete && oContext.isKeepAlive()) {
|
|
1010
|
+
oContext.iIndex = undefined;
|
|
1011
|
+
} else {
|
|
1012
|
+
oContext.destroy();
|
|
1013
|
+
delete mPreviousContextsByPath[sPath];
|
|
1014
|
+
}
|
|
1009
1015
|
}
|
|
1010
1016
|
});
|
|
1011
1017
|
}
|
|
@@ -1784,8 +1790,8 @@ sap.ui.define([
|
|
|
1784
1790
|
* If known, the value represents the sum of the element count of the collection on the server
|
|
1785
1791
|
* and the number of transient entities created on the client. Otherwise, it is
|
|
1786
1792
|
* <code>undefined</code>. The value is a number of type <code>Edm.Int64</code>. Since 1.91.0,
|
|
1787
|
-
* in case of data aggregation, the count is the leaf count on the server; it
|
|
1788
|
-
* if the <code>$count</code> system query option is given.
|
|
1793
|
+
* in case of data aggregation with group levels, the count is the leaf count on the server; it
|
|
1794
|
+
* is only determined if the <code>$count</code> system query option is given.
|
|
1789
1795
|
*
|
|
1790
1796
|
* The count is known to the binding in the following situations:
|
|
1791
1797
|
* <ul>
|
|
@@ -2235,6 +2241,63 @@ sap.ui.define([
|
|
|
2235
2241
|
return this.bLengthFinal;
|
|
2236
2242
|
};
|
|
2237
2243
|
|
|
2244
|
+
/**
|
|
2245
|
+
* Makes the given context a row context of this binding. Adds the entity data to the cache.
|
|
2246
|
+
* Makes the context kept-alive.
|
|
2247
|
+
*
|
|
2248
|
+
* @param {sap.ui.model.odata.v4.Context} oEntityContext
|
|
2249
|
+
* A context pointing to an entity
|
|
2250
|
+
* @throws {Error}
|
|
2251
|
+
* If the binding is not suspended, setKeepAlive is not possible, the resource paths do not
|
|
2252
|
+
* match, the entity's key predicate is unknown, the context binding's $expand contains
|
|
2253
|
+
* collections, or the context binding is still reading
|
|
2254
|
+
*
|
|
2255
|
+
* @private
|
|
2256
|
+
*/
|
|
2257
|
+
ODataListBinding.prototype.moveEntityHere = function (oEntityContext) {
|
|
2258
|
+
var oEntity,
|
|
2259
|
+
oEntityFetchValuePromise,
|
|
2260
|
+
sEntityPath = oEntityContext.getPath(),
|
|
2261
|
+
mEntityQueryOptions = oEntityContext.getBinding().getInheritableQueryOptions(),
|
|
2262
|
+
sRelativePath = _Helper.getRelativePath(sEntityPath, this.oHeaderContext.getPath());
|
|
2263
|
+
|
|
2264
|
+
if (!sRelativePath || sRelativePath.includes("/")) {
|
|
2265
|
+
throw new Error(this + ": " + sEntityPath + " is not an entity of the collection");
|
|
2266
|
+
}
|
|
2267
|
+
if (!this.getRootBinding().isSuspended()) {
|
|
2268
|
+
throw new Error(this + ": must be suspended");
|
|
2269
|
+
}
|
|
2270
|
+
this.checkKeepAlive(oEntityContext);
|
|
2271
|
+
|
|
2272
|
+
// take the value from the context binding's cache
|
|
2273
|
+
oEntityFetchValuePromise = oEntityContext.fetchValue(null, null, /*bCached*/true);
|
|
2274
|
+
if (oEntityFetchValuePromise.isPending()) {
|
|
2275
|
+
throw new Error("Cannot move the entity; the context binding has not finished loading: "
|
|
2276
|
+
+ oEntityContext.getBinding());
|
|
2277
|
+
}
|
|
2278
|
+
oEntity = oEntityFetchValuePromise.getResult();
|
|
2279
|
+
|
|
2280
|
+
if (!_Helper.getPrivateAnnotation(oEntity, "predicate")) {
|
|
2281
|
+
throw new Error("No key predicate known at " + sEntityPath);
|
|
2282
|
+
}
|
|
2283
|
+
|
|
2284
|
+
// add the context binding's query options as late query options
|
|
2285
|
+
if (!this.aggregateQueryOptions(mEntityQueryOptions, "", /*bImmutable*/true)) {
|
|
2286
|
+
throw new Error(oEntityContext + ": could not move the entity. Probably a list binding"
|
|
2287
|
+
+ " w/o $$ownRequest depends on it");
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
this.getRootBinding().resume();
|
|
2291
|
+
oEntityContext.oBinding = this;
|
|
2292
|
+
this.mPreviousContextsByPath[sEntityPath] = oEntityContext;
|
|
2293
|
+
this.oCachePromise.then(function (oCache) {
|
|
2294
|
+
oCache.addKeptElement(oEntity);
|
|
2295
|
+
// setKeepAlive looks into the cache, so this had to wait
|
|
2296
|
+
oEntityContext.setKeepAlive(true);
|
|
2297
|
+
oEntityContext.checkUpdate(); // create listeners in this binding's cache
|
|
2298
|
+
});
|
|
2299
|
+
};
|
|
2300
|
+
|
|
2238
2301
|
/**
|
|
2239
2302
|
* @override
|
|
2240
2303
|
* @see sap.ui.model.odata.v4.ODataBinding#refreshInternal
|
|
@@ -2251,6 +2314,9 @@ sap.ui.define([
|
|
|
2251
2314
|
// calls refreshInternal on all given bindings and returns an array of promises
|
|
2252
2315
|
function refreshAll(aBindings) {
|
|
2253
2316
|
return aBindings.map(function (oBinding) {
|
|
2317
|
+
if (oBinding.bIsBeingDestroyed) {
|
|
2318
|
+
return;
|
|
2319
|
+
}
|
|
2254
2320
|
// Call refreshInternal with bCheckUpdate = false because property bindings
|
|
2255
2321
|
// should not check for updates yet, otherwise they will cause a "Failed to
|
|
2256
2322
|
// drill down..." when the row is no longer part of the collection. They get
|
|
@@ -2808,7 +2874,7 @@ sap.ui.define([
|
|
|
2808
2874
|
* <ul>
|
|
2809
2875
|
* <li> <code>grandTotal</code>: An optional boolean that tells whether a grand total for
|
|
2810
2876
|
* this aggregatable property is needed (since 1.59.0); filtering by any aggregatable
|
|
2811
|
-
* property is not supported in this case (since 1.89.0)
|
|
2877
|
+
* property is not supported in this case (since 1.89.0) as is "$search" (since 1.93.0)
|
|
2812
2878
|
* <li> <code>subtotals</code>: An optional boolean that tells whether subtotals for this
|
|
2813
2879
|
* aggregatable property are needed
|
|
2814
2880
|
* <li> <code>with</code>: An optional string that provides the name of the method (for
|
|
@@ -2839,7 +2905,17 @@ sap.ui.define([
|
|
|
2839
2905
|
* @param {string[]} [oAggregation.groupLevels]
|
|
2840
2906
|
* A list of groupable property names used to determine group levels. They may, but don't need
|
|
2841
2907
|
* to, be repeated in <code>oAggregation.group</code>. Group levels cannot be combined with
|
|
2842
|
-
* filtering for aggregated properties.
|
|
2908
|
+
* filtering for aggregated properties or (since 1.93.0) with "$search".
|
|
2909
|
+
* @param {string} [oAggregation.search]
|
|
2910
|
+
* Like the <a
|
|
2911
|
+
* href="https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html">
|
|
2912
|
+
* "5.1.7 System Query Option $search"</a>, but applied before data aggregation
|
|
2913
|
+
* (since 1.93.0). Note that certain content will break the syntax of the system query option
|
|
2914
|
+
* <code>$apply</code> and result in an invalid request. If the OData service supports the
|
|
2915
|
+
* proposal <a href="https://issues.oasis-open.org/browse/ODATA-1452">ODATA-1452</a>, then
|
|
2916
|
+
* <code>ODataUtils.formatLiteral(sSearch, "Edm.String");</code> should be used to encapsulate
|
|
2917
|
+
* the whole search string beforehand (see {@link
|
|
2918
|
+
* sap.ui.model.odata.v4.ODataUtils.formatLiteral}).
|
|
2843
2919
|
* @param {boolean} [oAggregation.subtotalsAtBottomOnly]
|
|
2844
2920
|
* Tells whether subtotals for aggregatable properties are displayed at the bottom only, as a
|
|
2845
2921
|
* separate row after all children, when a group level node is expanded (since 1.86.0);
|
|
@@ -2940,6 +3016,14 @@ sap.ui.define([
|
|
|
2940
3016
|
&& !this.mParameters.$$aggregation) {
|
|
2941
3017
|
this.sChangeReason = "AddVirtualContext"; // JIRA: CPOUI5ODATAV4-848
|
|
2942
3018
|
}
|
|
3019
|
+
if (oContext.getBinding
|
|
3020
|
+
&& oContext.getBinding().getRootBinding().isSuspended()) {
|
|
3021
|
+
// when becoming suspended, remain silent until resume
|
|
3022
|
+
this.oContext = oContext;
|
|
3023
|
+
this.setResumeChangeReason(ChangeReason.Context);
|
|
3024
|
+
|
|
3025
|
+
return;
|
|
3026
|
+
}
|
|
2943
3027
|
}
|
|
2944
3028
|
// call Binding#setContext because of data state etc.; fires "change"
|
|
2945
3029
|
Binding.prototype.setContext.call(this, oContext,
|
|
@@ -3010,7 +3094,9 @@ sap.ui.define([
|
|
|
3010
3094
|
* aggregation information. Its value is
|
|
3011
3095
|
* "groupby((<dimension_1,...,dimension_N,unit_or_text_1,...,unit_or_text_K>),
|
|
3012
3096
|
* aggregate(<measure> with <method> as <alias>, ...))" where the "aggregate" part is
|
|
3013
|
-
* only present if measures are given and both "with" and "as" are optional.
|
|
3097
|
+
* only present if measures are given and both "with" and "as" are optional. Since 1.93.0, a
|
|
3098
|
+
* previous "search before data aggregation" is considered (see the
|
|
3099
|
+
* <code>oAggregation.search</code> parameter of {@link #setAggregation}).
|
|
3014
3100
|
*
|
|
3015
3101
|
* @param {object[]} aAggregation
|
|
3016
3102
|
* An array with objects holding the information needed for data aggregation; see also
|
|
@@ -3064,7 +3150,8 @@ sap.ui.define([
|
|
|
3064
3150
|
ODataListBinding.prototype.updateAnalyticalInfo = function (aAggregation) {
|
|
3065
3151
|
var oAggregation = {
|
|
3066
3152
|
aggregate : {},
|
|
3067
|
-
group : {}
|
|
3153
|
+
group : {},
|
|
3154
|
+
search : this.mParameters.$$aggregation && this.mParameters.$$aggregation.search
|
|
3068
3155
|
},
|
|
3069
3156
|
bHasMinMax = false,
|
|
3070
3157
|
that = this;
|
|
@@ -3098,6 +3185,7 @@ sap.ui.define([
|
|
|
3098
3185
|
oAggregation.group[oColumn.name] = oDetails;
|
|
3099
3186
|
}
|
|
3100
3187
|
});
|
|
3188
|
+
|
|
3101
3189
|
this.bHasAnalyticalInfo = true;
|
|
3102
3190
|
this.setAggregation(oAggregation);
|
|
3103
3191
|
if (bHasMinMax) {
|
|
@@ -3157,4 +3245,4 @@ sap.ui.define([
|
|
|
3157
3245
|
};
|
|
3158
3246
|
|
|
3159
3247
|
return ODataListBinding;
|
|
3160
|
-
});
|
|
3248
|
+
});
|
|
@@ -652,11 +652,13 @@ sap.ui.define([
|
|
|
652
652
|
*
|
|
653
653
|
* This model is read-only.
|
|
654
654
|
*
|
|
655
|
+
* This model is not prepared to be inherited from.
|
|
656
|
+
*
|
|
655
657
|
* @extends sap.ui.model.MetaModel
|
|
656
658
|
* @hideconstructor
|
|
657
659
|
* @public
|
|
658
660
|
* @since 1.37.0
|
|
659
|
-
* @version 1.
|
|
661
|
+
* @version 1.95.0
|
|
660
662
|
*/
|
|
661
663
|
var ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
|
|
662
664
|
/*
|
|
@@ -1289,7 +1291,7 @@ sap.ui.define([
|
|
|
1289
1291
|
* Whether to continue after this step
|
|
1290
1292
|
*/
|
|
1291
1293
|
function step(sSegment, i, aSegments) {
|
|
1292
|
-
var iIndexOfAt, bSplitSegment;
|
|
1294
|
+
var iIndexOfAt, bResultIsObject, bSplitSegment;
|
|
1293
1295
|
|
|
1294
1296
|
if (sSegment === "$Annotations") {
|
|
1295
1297
|
return log(WARNING, "Invalid segment: $Annotations");
|
|
@@ -1328,8 +1330,9 @@ sap.ui.define([
|
|
|
1328
1330
|
|
|
1329
1331
|
if (typeof vResult === "string"
|
|
1330
1332
|
&& !(bSplitSegment && (sSegment === "@sapui.name" || sSegment[1] === "@"))
|
|
1333
|
+
&& !(bODataMode && oSchemaChild && oSchemaChild.$kind === "EnumType")
|
|
1331
1334
|
// indirection: treat string content as a meta model path unless followed by
|
|
1332
|
-
// a computed annotation
|
|
1335
|
+
// a computed annotation or if it is an (Edm.Int64) enum member value
|
|
1333
1336
|
&& !steps(vResult, aSegments.slice(0, i))) {
|
|
1334
1337
|
return false;
|
|
1335
1338
|
}
|
|
@@ -1341,23 +1344,24 @@ sap.ui.define([
|
|
|
1341
1344
|
// technical property, switch to pure "JSON" drill-down
|
|
1342
1345
|
bODataMode = false;
|
|
1343
1346
|
} else {
|
|
1347
|
+
bResultIsObject = typeof vResult === "object";
|
|
1344
1348
|
if (bSplitSegment) {
|
|
1345
1349
|
// no special preparations needed, but handle overloads below!
|
|
1346
1350
|
} else if (sSegment[0] !== "@" && sSegment.includes(".", 1)) {
|
|
1347
1351
|
// "17.3 QualifiedName": scope lookup
|
|
1348
1352
|
return scopeLookup(sSegment);
|
|
1349
|
-
} else if (
|
|
1353
|
+
} else if (bResultIsObject && "$Type" in vResult) {
|
|
1350
1354
|
// implicit $Type insertion, e.g. at (navigation) property
|
|
1351
1355
|
if (!scopeLookup(vResult.$Type, "$Type")) {
|
|
1352
1356
|
return false;
|
|
1353
1357
|
}
|
|
1354
|
-
} else if (
|
|
1358
|
+
} else if (bResultIsObject && "$Action" in vResult) {
|
|
1355
1359
|
// implicit $Action insertion at action import
|
|
1356
1360
|
if (!scopeLookup(vResult.$Action, "$Action")) {
|
|
1357
1361
|
return false;
|
|
1358
1362
|
}
|
|
1359
1363
|
vBindingParameterType = UNBOUND;
|
|
1360
|
-
} else if (
|
|
1364
|
+
} else if (bResultIsObject && "$Function" in vResult) {
|
|
1361
1365
|
// implicit $Function insertion at function import
|
|
1362
1366
|
if (!scopeLookup(vResult.$Function, "$Function")) {
|
|
1363
1367
|
return false;
|
|
@@ -1462,19 +1466,18 @@ sap.ui.define([
|
|
|
1462
1466
|
aSegments[i].slice(0, iIndexOfAt)).join("/"));
|
|
1463
1467
|
}
|
|
1464
1468
|
}
|
|
1465
|
-
if (!vResult || typeof vResult !== "object") {
|
|
1466
|
-
// Note: even an OData path cannot continue here (e.g. by type cast)
|
|
1467
|
-
vResult = undefined;
|
|
1468
|
-
return !bInsideAnnotation && log(DEBUG, "Invalid segment: ", sSegment);
|
|
1469
|
-
}
|
|
1470
1469
|
if (bODataMode && sSegment[0] === "@") { // annotation(s) via external targeting
|
|
1471
1470
|
// Note: inline annotations are reached via above fast path for pure "JSON"
|
|
1472
1471
|
// drill-down
|
|
1473
|
-
vBindingParameterType = vResult.$Type || vBindingParameterType;
|
|
1472
|
+
vBindingParameterType = vResult && vResult.$Type || vBindingParameterType;
|
|
1474
1473
|
vResult = mScope.$Annotations[sTarget] || {};
|
|
1475
1474
|
bODataMode = false; // switch to pure "JSON" drill-down
|
|
1476
1475
|
} else if (sSegment === "$" && i + 1 < aSegments.length) {
|
|
1477
1476
|
return log(WARNING, "Unsupported path after $");
|
|
1477
|
+
} else if (!vResult || typeof vResult !== "object") {
|
|
1478
|
+
// Note: even an OData path cannot continue here (e.g. by type cast)
|
|
1479
|
+
vResult = undefined;
|
|
1480
|
+
return !bInsideAnnotation && log(DEBUG, "Invalid segment: ", sSegment);
|
|
1478
1481
|
}
|
|
1479
1482
|
}
|
|
1480
1483
|
|