@openui5/sap.ui.core 1.93.3 → 1.96.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +13 -2
- package/.reuse/dep5 +6 -11
- package/THIRDPARTY.txt +10 -16
- package/package.json +1 -1
- package/src/jquery.sap.global.js +5 -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 +3 -3
- package/src/jquery.sap.stubs.js +2 -1
- package/src/jquery.sap.trace.js +2 -1
- package/src/sap/base/i18n/ResourceBundle.js +6 -2
- package/src/sap/base/strings/whitespaceReplacer.js +52 -0
- 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 +8 -7
- package/src/sap/ui/base/DataType.js +14 -8
- 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 +12 -7
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- 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/Component.js +300 -140
- package/src/sap/ui/core/ComponentContainer.js +24 -8
- 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 +67 -31
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +103 -25
- 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 +7 -8
- package/src/sap/ui/core/IconPool.js +26 -1097
- package/src/sap/ui/core/IconRenderer.js +6 -6
- 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 +1 -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 +4 -61
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Patcher.js +27 -3
- package/src/sap/ui/core/Placeholder.js +28 -15
- package/src/sap/ui/core/RenderManager.js +36 -6
- 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/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +1 -1
- package/src/sap/ui/core/UIComponent.js +42 -16
- 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 +2 -2
- package/src/sap/ui/core/XMLCompositeMetadata.js +2 -2
- package/src/sap/ui/core/XMLTemplateProcessor.js +116 -41
- package/src/sap/ui/core/_IconRegistry.js +1148 -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 +1 -1
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +2 -2
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/format/NumberFormat.js +16 -1
- 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 -15
- 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 +38 -19
- 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 +2 -2
- package/src/sap/ui/core/mvc/JSONView.js +2 -2
- package/src/sap/ui/core/mvc/JSView.js +2 -2
- package/src/sap/ui/core/mvc/TemplateView.js +2 -2
- package/src/sap/ui/core/mvc/View.js +58 -85
- package/src/sap/ui/core/mvc/XMLView.js +2 -2
- package/src/sap/ui/core/mvc/XMLViewRenderer.js +17 -20
- 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 +10 -2
- package/src/sap/ui/core/routing/Router.js +8 -1
- package/src/sap/ui/core/routing/Target.js +13 -0
- package/src/sap/ui/core/routing/Targets.js +13 -2
- package/src/sap/ui/core/routing/async/Route.js +1 -1
- package/src/sap/ui/core/routing/async/Target.js +353 -259
- 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 +3 -41
- 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 +59 -68
- 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/themes/base/Icon.less +9 -0
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
- package/src/sap/ui/core/theming/Parameters.js +6 -4
- 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 +10 -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 +5 -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 +136 -63
- package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +170 -153
- package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +424 -293
- 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 +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- 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/Highlighter.js +8 -2
- package/src/sap/ui/debug/PropertyList.css +55 -0
- package/src/sap/ui/debug/PropertyList.js +111 -182
- package/src/sap/ui/model/Binding.js +174 -118
- package/src/sap/ui/model/ClientContextBinding.js +1 -1
- package/src/sap/ui/model/ClientListBinding.js +1 -3
- package/src/sap/ui/model/ClientModel.js +4 -4
- package/src/sap/ui/model/ClientPropertyBinding.js +4 -2
- package/src/sap/ui/model/ClientTreeBinding.js +15 -9
- package/src/sap/ui/model/ClientTreeBindingAdapter.js +28 -23
- package/src/sap/ui/model/CompositeBinding.js +98 -77
- package/src/sap/ui/model/CompositeDataState.js +2 -2
- package/src/sap/ui/model/CompositeType.js +2 -2
- package/src/sap/ui/model/Context.js +4 -2
- package/src/sap/ui/model/ContextBinding.js +6 -14
- package/src/sap/ui/model/DataState.js +2 -2
- package/src/sap/ui/model/Filter.js +255 -53
- package/src/sap/ui/model/FilterOperator.js +1 -1
- package/src/sap/ui/model/FilterProcessor.js +27 -17
- package/src/sap/ui/model/FilterType.js +1 -1
- package/src/sap/ui/model/ListBinding.js +180 -117
- package/src/sap/ui/model/MetaModel.js +4 -9
- package/src/sap/ui/model/Model.js +345 -294
- package/src/sap/ui/model/PropertyBinding.js +92 -58
- package/src/sap/ui/model/SelectionModel.js +2 -2
- package/src/sap/ui/model/SimpleType.js +2 -2
- package/src/sap/ui/model/Sorter.js +1 -1
- package/src/sap/ui/model/SorterProcessor.js +1 -1
- package/src/sap/ui/model/StaticBinding.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +2 -2
- package/src/sap/ui/model/TreeBinding.js +1 -1
- package/src/sap/ui/model/TreeBindingAdapter.js +251 -100
- package/src/sap/ui/model/TreeBindingCompatibilityAdapter.js +16 -9
- package/src/sap/ui/model/TreeBindingUtils.js +1 -0
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +8 -4
- package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +1 -1
- package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +1 -1
- package/src/sap/ui/model/analytics/odata4analytics.js +34 -25
- package/src/sap/ui/model/base/ManagedObjectModel.js +4 -0
- package/src/sap/ui/model/json/JSONListBinding.js +8 -5
- package/src/sap/ui/model/json/JSONModel.js +24 -15
- package/src/sap/ui/model/json/JSONPropertyBinding.js +4 -3
- package/src/sap/ui/model/json/JSONTreeBinding.js +1 -1
- package/src/sap/ui/model/message/MessageListBinding.js +6 -3
- package/src/sap/ui/model/message/MessageModel.js +23 -15
- package/src/sap/ui/model/message/MessagePropertyBinding.js +2 -2
- package/src/sap/ui/model/odata/AnnotationHelper.js +1 -1
- package/src/sap/ui/model/odata/AnnotationParser.js +1 -1
- package/src/sap/ui/model/odata/CountMode.js +1 -1
- package/src/sap/ui/model/odata/Filter.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +2 -2
- package/src/sap/ui/model/odata/ODataContextBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +2 -2
- package/src/sap/ui/model/odata/ODataMetaModel.js +5 -3
- package/src/sap/ui/model/odata/ODataMetadata.js +2 -2
- package/src/sap/ui/model/odata/ODataModel.js +8 -7
- package/src/sap/ui/model/odata/ODataPropertyBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBinding.js +65 -33
- package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +2 -2
- package/src/sap/ui/model/odata/ODataUtils.js +13 -11
- package/src/sap/ui/model/odata/OperationMode.js +1 -1
- package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +1 -1
- 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 +1 -1
- 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 +1 -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 +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +81 -9
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +3 -3
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +39 -49
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +236 -73
- package/src/sap/ui/model/odata/v2/ODataModel.js +314 -164
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +110 -97
- package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +129 -0
- package/src/sap/ui/model/odata/v4/Context.js +6 -3
- package/src/sap/ui/model/odata/v4/ODataBinding.js +5 -6
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +117 -40
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +95 -15
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +44 -31
- package/src/sap/ui/model/odata/v4/ODataModel.js +86 -78
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +47 -28
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -7
- package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +10 -3
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +8 -1
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +24 -16
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +32 -30
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +52 -17
- package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +2 -2
- package/src/sap/ui/model/resource/ResourceModel.js +6 -2
- package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +2 -2
- package/src/sap/ui/model/type/Currency.js +2 -2
- package/src/sap/ui/model/type/Date.js +9 -3
- package/src/sap/ui/model/type/DateInterval.js +4 -2
- package/src/sap/ui/model/type/DateTime.js +2 -2
- package/src/sap/ui/model/type/DateTimeInterval.js +2 -2
- package/src/sap/ui/model/type/FileSize.js +4 -2
- package/src/sap/ui/model/type/Float.js +4 -2
- package/src/sap/ui/model/type/Integer.js +4 -2
- package/src/sap/ui/model/type/String.js +2 -2
- package/src/sap/ui/model/type/Time.js +2 -2
- package/src/sap/ui/model/type/TimeInterval.js +2 -2
- package/src/sap/ui/model/type/Unit.js +14 -7
- package/src/sap/ui/model/xml/XMLListBinding.js +15 -9
- package/src/sap/ui/model/xml/XMLModel.js +70 -41
- package/src/sap/ui/model/xml/XMLPropertyBinding.js +4 -4
- package/src/sap/ui/model/xml/XMLTreeBinding.js +5 -4
- package/src/sap/ui/performance/trace/Interaction.js +30 -15
- package/src/sap/ui/performance/trace/initTraces.js +1 -1
- package/src/sap/ui/qunit/QUnitUtils.js +3 -2
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +9 -11
- package/src/sap/ui/test/TestUtils.js +11 -4
- 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 +0 -4
- package/src/sap/ui/test/matchers/I18NText.js +29 -11
- package/src/sap/ui/test/opaQunit.js +5 -0
- package/src/sap/ui/thirdparty/crossroads.js +6 -4
- 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/thirdparty/jquery.js +9 -1
- package/src/sap/ui/thirdparty/qunit-2.js +1 -1
- package/src/sap/ui/thirdparty/qunit.js +1 -1
- package/src/sap/ui/util/Mobile.js +2 -20
- 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/ui5.yaml +5 -2
- package/src/sap/ui/core/support/plugins/MessageTest.js +0 -96
- package/src/sap/ui/thirdparty/hyphenopoly/hyphenopoly.bundle.js +0 -860
|
@@ -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.96.2
|
|
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
|
|
|
@@ -1660,7 +1663,7 @@ sap.ui.define([
|
|
|
1660
1663
|
|
|
1661
1664
|
// First fetch the complete metapath to ensure that everything is in mScope
|
|
1662
1665
|
// This also ensures that the metadata is valid
|
|
1663
|
-
return this.fetchObject(
|
|
1666
|
+
return this.fetchObject(_Helper.getMetaPath(sResolvedPath)).then(function () {
|
|
1664
1667
|
// Then fetch mScope
|
|
1665
1668
|
return that.fetchEntityContainer();
|
|
1666
1669
|
}).then(function (mScope) {
|
|
@@ -2078,7 +2081,8 @@ sap.ui.define([
|
|
|
2078
2081
|
&& aSegments0[i + 1] === "$Parameter") {
|
|
2079
2082
|
// Filter via the binding parameter
|
|
2080
2083
|
aOverloadMetadata = that.getObject(
|
|
2081
|
-
|
|
2084
|
+
_Helper.getMetaPath(aSegments0.slice(0, i + 1).join("/")
|
|
2085
|
+
+ "/@$ui5.overload")
|
|
2082
2086
|
);
|
|
2083
2087
|
// Note: This must be a bound operation with a binding parameter; otherwise it
|
|
2084
2088
|
// would be in the first segment and the loop would not touch it due to
|
|
@@ -2097,7 +2101,7 @@ sap.ui.define([
|
|
|
2097
2101
|
return j < iBasePathLength || sSegment[0] === "#" || sSegment[0] === "@"
|
|
2098
2102
|
|| rNumber.test(sSegment) || sSegment === "$Parameter"
|
|
2099
2103
|
? {} // simply an object w/o $Partner and $isCollection
|
|
2100
|
-
: that.getObject(
|
|
2104
|
+
: that.getObject(_Helper.getMetaPath(aSegments.slice(0, j + 1).join("/"))) || {};
|
|
2101
2105
|
});
|
|
2102
2106
|
mPaths[sPath] = true;
|
|
2103
2107
|
if (!(bNoReduceBeforeCollection
|
|
@@ -2226,7 +2230,7 @@ sap.ui.define([
|
|
|
2226
2230
|
* @since 1.37.0
|
|
2227
2231
|
*/
|
|
2228
2232
|
ODataMetaModel.prototype.getMetaContext = function (sPath) {
|
|
2229
|
-
return new BaseContext(this,
|
|
2233
|
+
return new BaseContext(this, _Helper.getMetaPath(sPath));
|
|
2230
2234
|
};
|
|
2231
2235
|
|
|
2232
2236
|
/**
|
|
@@ -3082,7 +3086,8 @@ sap.ui.define([
|
|
|
3082
3086
|
* instead, see {@link sap.ui.model.odata.v4.ODataModel#bindList}.
|
|
3083
3087
|
*
|
|
3084
3088
|
* For fixed values, only one mapping is expected and the qualifier is ignored. The mapping
|
|
3085
|
-
* is available with key ""
|
|
3089
|
+
* is available with key "" and has an additional property "$qualifier" which is the original
|
|
3090
|
+
* qualifier (useful in case of "ValueListRelevantQualifiers" annotation).
|
|
3086
3091
|
*
|
|
3087
3092
|
* The promise is rejected with an error if there is no value list information available
|
|
3088
3093
|
* for the given property path. Use {@link #getValueListType} to determine if value list
|
|
@@ -3110,7 +3115,7 @@ sap.ui.define([
|
|
|
3110
3115
|
*/
|
|
3111
3116
|
ODataMetaModel.prototype.requestValueListInfo = function (sPropertyPath, bAutoExpandSelect,
|
|
3112
3117
|
oContext) {
|
|
3113
|
-
var sPropertyMetaPath =
|
|
3118
|
+
var sPropertyMetaPath = _Helper.getMetaPath(sPropertyPath),
|
|
3114
3119
|
sParentMetaPath = sPropertyMetaPath.slice(0, sPropertyMetaPath.lastIndexOf("/"))
|
|
3115
3120
|
.replace("/$Parameter", ""),
|
|
3116
3121
|
sQualifiedName = sParentMetaPath.slice(sParentMetaPath.lastIndexOf("/") + 1),
|
|
@@ -3210,7 +3215,7 @@ sap.ui.define([
|
|
|
3210
3215
|
});
|
|
3211
3216
|
});
|
|
3212
3217
|
})).then(function () {
|
|
3213
|
-
var
|
|
3218
|
+
var aRelevantQualifiers = mAnnotationByTerm[sValueListRelevantQualifiers];
|
|
3214
3219
|
|
|
3215
3220
|
// add all mappings in the data service (or local annotation files)
|
|
3216
3221
|
Object.keys(mAnnotationByTerm).filter(function (sTerm) {
|
|
@@ -3219,28 +3224,36 @@ sap.ui.define([
|
|
|
3219
3224
|
addMapping(mAnnotationByTerm[sTerm], getValueListQualifier(sTerm), that.sUrl,
|
|
3220
3225
|
that.oModel);
|
|
3221
3226
|
});
|
|
3222
|
-
aQualifiers = Object.keys(oValueListInfo);
|
|
3223
3227
|
|
|
3224
3228
|
// Each reference must have contributed at least one qualifier. So if oValueListInfo
|
|
3225
3229
|
// is empty, there cannot have been a reference.
|
|
3226
|
-
if (
|
|
3230
|
+
if (isEmptyObject(oValueListInfo)) {
|
|
3227
3231
|
throw new Error("No annotation '" + sValueListReferences.slice(1) + "' for " +
|
|
3228
3232
|
sPropertyPath);
|
|
3229
3233
|
}
|
|
3234
|
+
|
|
3235
|
+
return aRelevantQualifiers && oContext && oContext.getBinding
|
|
3236
|
+
? that.filterValueListRelevantQualifiers(oValueListInfo, aRelevantQualifiers,
|
|
3237
|
+
sPropertyMetaPath + sValueListRelevantQualifiers, oContext)
|
|
3238
|
+
: oValueListInfo;
|
|
3239
|
+
}).then(function (mValueListByRelevantQualifier) {
|
|
3240
|
+
var aQualifiers, mValueListMapping;
|
|
3241
|
+
|
|
3230
3242
|
if (bFixedValues) {
|
|
3231
|
-
|
|
3232
|
-
|
|
3243
|
+
aQualifiers = Object.keys(mValueListByRelevantQualifier);
|
|
3244
|
+
// With fixed values, only one mapping should exist. Return it for qualifier "".
|
|
3245
|
+
if (aQualifiers.length !== 1) {
|
|
3233
3246
|
throw new Error("Annotation '" + sValueListWithFixedValues.slice(1)
|
|
3234
|
-
+ "' but
|
|
3247
|
+
+ "' but not exactly one '" + sValueList.slice(1)
|
|
3235
3248
|
+ "' for property " + sPropertyPath);
|
|
3236
3249
|
}
|
|
3237
|
-
|
|
3250
|
+
mValueListMapping = mValueListByRelevantQualifier[aQualifiers[0]];
|
|
3251
|
+
mValueListMapping.$qualifier = aQualifiers[0];
|
|
3252
|
+
|
|
3253
|
+
return {"" : mValueListMapping};
|
|
3238
3254
|
}
|
|
3239
|
-
|
|
3240
|
-
return
|
|
3241
|
-
? that.filterValueListRelevantQualifiers(oValueListInfo, aQualifiers,
|
|
3242
|
-
sPropertyMetaPath + sValueListRelevantQualifiers, oContext)
|
|
3243
|
-
: oValueListInfo;
|
|
3255
|
+
|
|
3256
|
+
return mValueListByRelevantQualifier;
|
|
3244
3257
|
});
|
|
3245
3258
|
});
|
|
3246
3259
|
};
|
|
@@ -3440,4 +3453,4 @@ sap.ui.define([
|
|
|
3440
3453
|
};
|
|
3441
3454
|
|
|
3442
3455
|
return ODataMetaModel;
|
|
3443
|
-
});
|
|
3456
|
+
});
|
|
@@ -175,6 +175,8 @@ sap.ui.define([
|
|
|
175
175
|
* @author SAP SE
|
|
176
176
|
* @class Model implementation for OData V4.
|
|
177
177
|
*
|
|
178
|
+
* This model is not prepared to be inherited from.
|
|
179
|
+
*
|
|
178
180
|
* Every resource path (relative to the service root URL, no query options) according to
|
|
179
181
|
* "4 Resource Path" in specification "OData Version 4.0 Part 2: URL Conventions" is
|
|
180
182
|
* a valid data binding path within this model if a leading slash is added; for example
|
|
@@ -208,7 +210,7 @@ sap.ui.define([
|
|
|
208
210
|
* @extends sap.ui.model.Model
|
|
209
211
|
* @public
|
|
210
212
|
* @since 1.37.0
|
|
211
|
-
* @version 1.
|
|
213
|
+
* @version 1.96.2
|
|
212
214
|
*/
|
|
213
215
|
var ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
|
|
214
216
|
/** @lends sap.ui.model.odata.v4.ODataModel.prototype */
|
|
@@ -221,6 +223,7 @@ sap.ui.define([
|
|
|
221
223
|
sParameter,
|
|
222
224
|
sServiceUrl,
|
|
223
225
|
oUri,
|
|
226
|
+
mUriParameters,
|
|
224
227
|
that = this;
|
|
225
228
|
|
|
226
229
|
// do not pass any parameters to Model
|
|
@@ -255,7 +258,13 @@ sap.ui.define([
|
|
|
255
258
|
}
|
|
256
259
|
this.sOperationMode = mParameters.operationMode;
|
|
257
260
|
// Note: strict checking for model's URI parameters, but "sap-*" is allowed
|
|
258
|
-
|
|
261
|
+
mUriParameters = this.buildQueryOptions(oUri.query(true), false, true);
|
|
262
|
+
// BEWARE: these are shared across all bindings!
|
|
263
|
+
this.mUriParameters = mUriParameters;
|
|
264
|
+
if (sap.ui.getCore().getConfiguration().getStatistics()) {
|
|
265
|
+
// Note: this way, "sap-statistics" is not sent within $batch
|
|
266
|
+
mUriParameters = Object.assign({"sap-statistics" : true}, mUriParameters);
|
|
267
|
+
}
|
|
259
268
|
this.sServiceUrl = oUri.query("").toString();
|
|
260
269
|
this.sGroupId = mParameters.groupId;
|
|
261
270
|
if (this.sGroupId === undefined) {
|
|
@@ -297,7 +306,7 @@ sap.ui.define([
|
|
|
297
306
|
// BEWARE: do not share mHeaders between _MetadataRequestor and _Requestor!
|
|
298
307
|
this.oMetaModel = new ODataMetaModel(
|
|
299
308
|
_MetadataRequestor.create(this.mMetadataHeaders, sODataVersion,
|
|
300
|
-
Object.assign({},
|
|
309
|
+
Object.assign({}, mUriParameters, mParameters.metadataUrlParams)),
|
|
301
310
|
this.sServiceUrl + "$metadata", mParameters.annotationURI, this,
|
|
302
311
|
mParameters.supportReferences);
|
|
303
312
|
this.oInterface = {
|
|
@@ -314,11 +323,11 @@ sap.ui.define([
|
|
|
314
323
|
that._submitBatch.bind(that, sGroupId, true));
|
|
315
324
|
}
|
|
316
325
|
},
|
|
317
|
-
|
|
318
|
-
|
|
326
|
+
reportStateMessages : this.reportStateMessages.bind(this),
|
|
327
|
+
reportTransitionMessages : this.reportTransitionMessages.bind(this)
|
|
319
328
|
};
|
|
320
329
|
this.oRequestor = _Requestor.create(this.sServiceUrl, this.oInterface,
|
|
321
|
-
this.mHeaders,
|
|
330
|
+
this.mHeaders, mUriParameters, sODataVersion);
|
|
322
331
|
this.changeHttpHeaders(mParameters.httpHeaders);
|
|
323
332
|
if (mParameters.earlyRequests) {
|
|
324
333
|
this.oMetaModel.fetchEntityContainer(true);
|
|
@@ -531,8 +540,8 @@ sap.ui.define([
|
|
|
531
540
|
* @param {boolean} [mParameters.$$inheritExpandSelect]
|
|
532
541
|
* For operation bindings only: Whether $expand and $select from the parent binding are used
|
|
533
542
|
* in the request sent on {@link #execute}. If set to <code>true</code>, the binding must not
|
|
534
|
-
* set the $expand
|
|
535
|
-
*
|
|
543
|
+
* set the $expand itself, the operation must be bound, and the return value and the binding
|
|
544
|
+
* parameter must belong to the same entity set.
|
|
536
545
|
* @param {boolean} [mParameters.$$ownRequest]
|
|
537
546
|
* Whether the binding always uses an own service request to read its data; only the value
|
|
538
547
|
* <code>true</code> is allowed.
|
|
@@ -552,7 +561,7 @@ sap.ui.define([
|
|
|
552
561
|
* @throws {Error}
|
|
553
562
|
* If disallowed binding parameters are provided, for example if the binding parameter
|
|
554
563
|
* $$inheritExpandSelect is set to <code>true</code> and the binding is no operation binding
|
|
555
|
-
* or the binding has
|
|
564
|
+
* or the binding has the parameter $expand.
|
|
556
565
|
*
|
|
557
566
|
* @public
|
|
558
567
|
* @see sap.ui.model.Model#bindContext
|
|
@@ -599,7 +608,7 @@ sap.ui.define([
|
|
|
599
608
|
* resolve to an absolute OData path for an entity set.
|
|
600
609
|
*
|
|
601
610
|
* @param {string} sPath
|
|
602
|
-
* The binding path in the model; must not
|
|
611
|
+
* The binding path in the model; must not end with a slash
|
|
603
612
|
* @param {sap.ui.model.Context} [oContext]
|
|
604
613
|
* The context which is required as base for a relative path
|
|
605
614
|
* @param {sap.ui.model.Sorter|sap.ui.model.Sorter[]} [vSorters]
|
|
@@ -717,8 +726,7 @@ sap.ui.define([
|
|
|
717
726
|
* transformed into a metadata context (see
|
|
718
727
|
* {@link sap.ui.model.odata.v4.ODataMetaModel#getMetaContext}). The part following the
|
|
719
728
|
* separator is then interpreted relative to this metadata context, even if it starts with
|
|
720
|
-
* a '/';
|
|
721
|
-
* {@link sap.ui.model.odata.v4.ODataMetaModel#requestObject} for the effect it has.
|
|
729
|
+
* a '/'; see {@link sap.ui.model.odata.v4.ODataMetaModel#requestObject} for more details.
|
|
722
730
|
*
|
|
723
731
|
* If the target type specified in the corresponding control property's binding info is "any"
|
|
724
732
|
* and the binding is relative or points to metadata, the binding may have an object value;
|
|
@@ -726,15 +734,20 @@ sap.ui.define([
|
|
|
726
734
|
* be {@link sap.ui.model.BindingMode.OneTime}.
|
|
727
735
|
*
|
|
728
736
|
* @param {string} sPath
|
|
729
|
-
* The binding path in the model; must not
|
|
730
|
-
* binding points to metadata.
|
|
737
|
+
* The binding path in the model; must not end with a slash
|
|
731
738
|
* @param {sap.ui.model.Context} [oContext]
|
|
732
739
|
* The context which is required as base for a relative path
|
|
733
740
|
* @param {object} [mParameters]
|
|
734
741
|
* Map of binding parameters which can be OData query options as specified in
|
|
735
|
-
* "OData Version 4.0 Part 2: URL Conventions" or the binding-specific
|
|
736
|
-
*
|
|
737
|
-
*
|
|
742
|
+
* "OData Version 4.0 Part 2: URL Conventions" or the binding-specific parameters as specified
|
|
743
|
+
* below. The following OData query options are allowed:
|
|
744
|
+
* <ul>
|
|
745
|
+
* <li> All "5.2 Custom Query Options" except for those with a name starting with "sap-"
|
|
746
|
+
* (unless starting with "sap-valid-")
|
|
747
|
+
* <li> The $apply, $filter, and $search "5.1 System Query Options" if the path ends with a
|
|
748
|
+
* "$count" segment.
|
|
749
|
+
* </ul>
|
|
750
|
+
* All other query options lead to an error.
|
|
738
751
|
* Query options specified for the binding overwrite model query options.
|
|
739
752
|
* Note: The binding only creates its own data service request if it is absolute or if it is
|
|
740
753
|
* relative to a context created via {@link #createBindingContext}. The binding parameters are
|
|
@@ -1183,6 +1196,7 @@ sap.ui.define([
|
|
|
1183
1196
|
}
|
|
1184
1197
|
|
|
1185
1198
|
if (bIsBound) {
|
|
1199
|
+
sResourcePath = sResourcePath && sResourcePath.split("?")[0]; // remove query string
|
|
1186
1200
|
aTargets = [resolveTarget(oRawMessage.target)];
|
|
1187
1201
|
if (oRawMessage.additionalTargets) {
|
|
1188
1202
|
oRawMessage.additionalTargets.forEach(function (sTarget) {
|
|
@@ -1199,7 +1213,7 @@ sap.ui.define([
|
|
|
1199
1213
|
code : oRawMessage.code,
|
|
1200
1214
|
descriptionUrl : sMessageLongtextUrl || undefined,
|
|
1201
1215
|
message : oRawMessage.message,
|
|
1202
|
-
persistent : bIsBound
|
|
1216
|
+
persistent : !bIsBound || oRawMessage.transition,
|
|
1203
1217
|
processor : this,
|
|
1204
1218
|
// Note: "" instead of undefined makes filtering easier (agreement with FE!)
|
|
1205
1219
|
target : bIsBound ? aTargets : "",
|
|
@@ -1658,53 +1672,6 @@ sap.ui.define([
|
|
|
1658
1672
|
});
|
|
1659
1673
|
};
|
|
1660
1674
|
|
|
1661
|
-
/**
|
|
1662
|
-
* Reports the given bound OData messages by firing a <code>messageChange</code> event with
|
|
1663
|
-
* the new messages.
|
|
1664
|
-
*
|
|
1665
|
-
* @param {string} sResourcePath
|
|
1666
|
-
* The resource path of the cache that saw the messages; used to resolve the targets and
|
|
1667
|
-
* the longtext URL
|
|
1668
|
-
* @param {object} mPathToODataMessages
|
|
1669
|
-
* Maps a cache-relative path with key predicates or indices to an array of messages suitable
|
|
1670
|
-
* for {@link #createUI5Message}
|
|
1671
|
-
* @param {string[]} [aCachePaths]
|
|
1672
|
-
* An array of cache-relative paths of the entities for which non-persistent messages have to
|
|
1673
|
-
* be removed; if the array is not given, all entities are affected
|
|
1674
|
-
*
|
|
1675
|
-
* @private
|
|
1676
|
-
*/
|
|
1677
|
-
ODataModel.prototype.reportBoundMessages = function (sResourcePath, mPathToODataMessages,
|
|
1678
|
-
aCachePaths) {
|
|
1679
|
-
var sDataBindingPath = "/" + sResourcePath,
|
|
1680
|
-
aNewMessages = [],
|
|
1681
|
-
aOldMessages = [],
|
|
1682
|
-
that = this;
|
|
1683
|
-
|
|
1684
|
-
Object.keys(mPathToODataMessages).forEach(function (sCachePath) {
|
|
1685
|
-
mPathToODataMessages[sCachePath].forEach(function (oRawMessage) {
|
|
1686
|
-
aNewMessages.push(that.createUI5Message(oRawMessage, sResourcePath, sCachePath));
|
|
1687
|
-
});
|
|
1688
|
-
});
|
|
1689
|
-
(aCachePaths || [""]).forEach(function (sCachePath) {
|
|
1690
|
-
var sPath = _Helper.buildPath(sDataBindingPath, sCachePath);
|
|
1691
|
-
|
|
1692
|
-
Object.keys(that.mMessages).forEach(function (sMessageTarget) {
|
|
1693
|
-
if (sMessageTarget === sPath
|
|
1694
|
-
|| sMessageTarget.startsWith(sPath + "/")
|
|
1695
|
-
|| sMessageTarget.startsWith(sPath + "(")) {
|
|
1696
|
-
aOldMessages = aOldMessages.concat(
|
|
1697
|
-
that.mMessages[sMessageTarget].filter(function (oMessage) {
|
|
1698
|
-
return !oMessage.persistent;
|
|
1699
|
-
}));
|
|
1700
|
-
}
|
|
1701
|
-
});
|
|
1702
|
-
});
|
|
1703
|
-
if (aNewMessages.length || aOldMessages.length) {
|
|
1704
|
-
this.fireMessageChange({newMessages : aNewMessages, oldMessages : aOldMessages});
|
|
1705
|
-
}
|
|
1706
|
-
};
|
|
1707
|
-
|
|
1708
1675
|
/**
|
|
1709
1676
|
* Reports a technical error by firing a <code>messageChange</code> event with a new message and
|
|
1710
1677
|
* logging the error to the console. Takes care that the error is only reported once via the
|
|
@@ -1737,8 +1704,7 @@ sap.ui.define([
|
|
|
1737
1704
|
* @private
|
|
1738
1705
|
*/
|
|
1739
1706
|
ODataModel.prototype.reportError = function (sLogMessage, sReportingClassName, oError) {
|
|
1740
|
-
var sDetails
|
|
1741
|
-
oRawMessages;
|
|
1707
|
+
var sDetails;
|
|
1742
1708
|
|
|
1743
1709
|
if (oError.canceled === "noDebugLog") {
|
|
1744
1710
|
return;
|
|
@@ -1759,20 +1725,61 @@ sap.ui.define([
|
|
|
1759
1725
|
}
|
|
1760
1726
|
oError.$reported = true;
|
|
1761
1727
|
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1728
|
+
this.reportTransitionMessages(_Helper.extractMessages(oError), oError.resourcePath);
|
|
1729
|
+
};
|
|
1730
|
+
|
|
1731
|
+
/**
|
|
1732
|
+
* Reports the given OData state messages by firing a <code>messageChange</code> event with
|
|
1733
|
+
* the new messages.
|
|
1734
|
+
*
|
|
1735
|
+
* Note that this method may also report transition messages that have been transported via the
|
|
1736
|
+
* messages property of an entity.
|
|
1737
|
+
*
|
|
1738
|
+
* @param {string} sResourcePath
|
|
1739
|
+
* The resource path of the cache that saw the messages; used to resolve the targets and
|
|
1740
|
+
* the longtext URL
|
|
1741
|
+
* @param {object} mPathToODataMessages
|
|
1742
|
+
* Maps a cache-relative path with key predicates or indices to an array of messages suitable
|
|
1743
|
+
* for {@link #createUI5Message}
|
|
1744
|
+
* @param {string[]} [aCachePaths]
|
|
1745
|
+
* An array of cache-relative paths of the entities for which non-persistent messages have to
|
|
1746
|
+
* be removed; if the array is not given, all entities are affected
|
|
1747
|
+
*
|
|
1748
|
+
* @private
|
|
1749
|
+
*/
|
|
1750
|
+
ODataModel.prototype.reportStateMessages = function (sResourcePath, mPathToODataMessages,
|
|
1751
|
+
aCachePaths) {
|
|
1752
|
+
var sDataBindingPath = "/" + sResourcePath,
|
|
1753
|
+
aNewMessages = [],
|
|
1754
|
+
aOldMessages = [],
|
|
1755
|
+
that = this;
|
|
1756
|
+
|
|
1757
|
+
Object.keys(mPathToODataMessages).forEach(function (sCachePath) {
|
|
1758
|
+
mPathToODataMessages[sCachePath].forEach(function (oRawMessage) {
|
|
1759
|
+
aNewMessages.push(that.createUI5Message(oRawMessage, sResourcePath, sCachePath));
|
|
1760
|
+
});
|
|
1761
|
+
});
|
|
1762
|
+
(aCachePaths || [""]).forEach(function (sCachePath) {
|
|
1763
|
+
var sPath = _Helper.buildPath(sDataBindingPath, sCachePath);
|
|
1764
|
+
|
|
1765
|
+
Object.keys(that.mMessages).forEach(function (sMessageTarget) {
|
|
1766
|
+
if (sMessageTarget === sPath
|
|
1767
|
+
|| sMessageTarget.startsWith(sPath + "/")
|
|
1768
|
+
|| sMessageTarget.startsWith(sPath + "(")) {
|
|
1769
|
+
aOldMessages = aOldMessages.concat(
|
|
1770
|
+
that.mMessages[sMessageTarget].filter(function (oMessage) {
|
|
1771
|
+
return !oMessage.persistent;
|
|
1772
|
+
}));
|
|
1773
|
+
}
|
|
1774
|
+
});
|
|
1775
|
+
});
|
|
1776
|
+
if (aNewMessages.length || aOldMessages.length) {
|
|
1777
|
+
this.fireMessageChange({newMessages : aNewMessages, oldMessages : aOldMessages});
|
|
1769
1778
|
}
|
|
1770
|
-
// The longtextUrls are already absolute, so sResourcePath is not needed here
|
|
1771
|
-
this.reportUnboundMessages(oRawMessages.unbound);
|
|
1772
1779
|
};
|
|
1773
1780
|
|
|
1774
1781
|
/**
|
|
1775
|
-
* Reports the given
|
|
1782
|
+
* Reports the given OData transition messages by firing a <code>messageChange</code> event with
|
|
1776
1783
|
* the new messages.
|
|
1777
1784
|
*
|
|
1778
1785
|
* @param {object[]} aMessages
|
|
@@ -1782,12 +1789,13 @@ sap.ui.define([
|
|
|
1782
1789
|
*
|
|
1783
1790
|
* @private
|
|
1784
1791
|
*/
|
|
1785
|
-
ODataModel.prototype.
|
|
1792
|
+
ODataModel.prototype.reportTransitionMessages = function (aMessages, sResourcePath) {
|
|
1786
1793
|
var that = this;
|
|
1787
1794
|
|
|
1788
1795
|
if (aMessages && aMessages.length) {
|
|
1789
1796
|
this.fireMessageChange({
|
|
1790
1797
|
newMessages : aMessages.map(function (oMessage) {
|
|
1798
|
+
oMessage.transition = true;
|
|
1791
1799
|
return that.createUI5Message(oMessage, sResourcePath);
|
|
1792
1800
|
})
|
|
1793
1801
|
});
|
|
@@ -93,6 +93,15 @@ sap.ui.define([
|
|
|
93
93
|
* @private
|
|
94
94
|
*/
|
|
95
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Binding specific code for suspend.
|
|
98
|
+
*
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
ODataParentBinding.prototype.doSuspend = function () {
|
|
102
|
+
// nothing to do here
|
|
103
|
+
};
|
|
104
|
+
|
|
96
105
|
/**
|
|
97
106
|
* Fire event 'patchCompleted' to attached listeners, if the last PATCH request is completed.
|
|
98
107
|
*
|
|
@@ -425,7 +434,7 @@ sap.ui.define([
|
|
|
425
434
|
return this.oCachePromise.then(function (oCache) {
|
|
426
435
|
if (oCache && that.bRelative) {
|
|
427
436
|
return that.fetchResourcePath(that.oContext).then(function (sResourcePath) {
|
|
428
|
-
if (oCache
|
|
437
|
+
if (oCache.getResourcePath() === sResourcePath) {
|
|
429
438
|
return updateDependents();
|
|
430
439
|
}
|
|
431
440
|
return that.refreshInternal(""); // entity of context changed
|
|
@@ -472,10 +481,10 @@ sap.ui.define([
|
|
|
472
481
|
return oCache.create(oUpdateGroupLock, vCreatePath, sPathInCache,
|
|
473
482
|
sTransientPredicate, oInitialData, fnErrorCallback, fnSubmitCallback
|
|
474
483
|
).then(function (oCreatedEntity) {
|
|
475
|
-
if (
|
|
484
|
+
if (that.mCacheByResourcePath) {
|
|
476
485
|
// Ensure that cache containing non-transient created entity is recreated
|
|
477
486
|
// when the parent binding changes to another row and back again.
|
|
478
|
-
delete that.mCacheByResourcePath[oCache
|
|
487
|
+
delete that.mCacheByResourcePath[oCache.getResourcePath()];
|
|
479
488
|
}
|
|
480
489
|
return oCreatedEntity;
|
|
481
490
|
});
|
|
@@ -644,17 +653,16 @@ sap.ui.define([
|
|
|
644
653
|
// getBaseForPathReduction must be called early, because the (virtual) parent context may be
|
|
645
654
|
// lost again when the path is needed
|
|
646
655
|
var sBaseForPathReduction = this.getBaseForPathReduction(),
|
|
647
|
-
sBaseMetaPath,
|
|
656
|
+
sBaseMetaPath = _Helper.getMetaPath(oContext.getPath()),
|
|
648
657
|
bCacheImmutable,
|
|
649
658
|
oCanUseCachePromise,
|
|
650
|
-
|
|
659
|
+
// whether this binding is an operation or depends on one
|
|
660
|
+
bDependsOnOperation = oContext.getPath().includes("(...)"),
|
|
651
661
|
iIndex = oContext.getIndex(),
|
|
652
662
|
bIsAdvertisement = sChildPath[0] === "#",
|
|
653
663
|
oMetaModel = this.oModel.getMetaModel(),
|
|
654
664
|
aPromises,
|
|
655
665
|
sResolvedChildPath = this.oModel.resolve(sChildPath, oContext),
|
|
656
|
-
// whether this binding is an operation or depends on one
|
|
657
|
-
bDependsOnOperation = oContext.getPath().includes("(...)"),
|
|
658
666
|
that = this;
|
|
659
667
|
|
|
660
668
|
/*
|
|
@@ -668,12 +676,27 @@ sap.ui.define([
|
|
|
668
676
|
if (bIsAdvertisement) {
|
|
669
677
|
// Ensure entity type metadata is loaded even for advertisement so that sync access
|
|
670
678
|
// to key properties is possible
|
|
671
|
-
return oMetaModel.fetchObject(
|
|
672
|
-
sFullMetaPath.lastIndexOf("/") + 1));
|
|
679
|
+
return oMetaModel.fetchObject(sBaseMetaPath + "/");
|
|
673
680
|
}
|
|
674
681
|
|
|
675
682
|
return _Helper.fetchPropertyAndType(that.oModel.oInterface.fetchMetadata,
|
|
676
|
-
|
|
683
|
+
getStrippedMetaPath(sResolvedChildPath));
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/*
|
|
687
|
+
* Returns the meta path corresponding to the given path, with its annotation part stripped
|
|
688
|
+
* off.
|
|
689
|
+
*
|
|
690
|
+
* @param {string} sPath - A path
|
|
691
|
+
* @returns {string} The meta path with its annotation part stripped off
|
|
692
|
+
*/
|
|
693
|
+
function getStrippedMetaPath(sPath) {
|
|
694
|
+
var iIndex;
|
|
695
|
+
|
|
696
|
+
sPath = _Helper.getMetaPath(sPath);
|
|
697
|
+
iIndex = sPath.indexOf("@"); // Note: sPath[0] !== "@"
|
|
698
|
+
|
|
699
|
+
return iIndex > 0 ? sPath.slice(0, iIndex) : sPath;
|
|
677
700
|
}
|
|
678
701
|
|
|
679
702
|
if (bDependsOnOperation && !sResolvedChildPath.includes("/$Parameter/")
|
|
@@ -692,8 +715,6 @@ sap.ui.define([
|
|
|
692
715
|
|| oContext.isKeepAlive() // kept-alive contexts have no index when not in aContexts
|
|
693
716
|
|| this.oCache === null
|
|
694
717
|
|| this.oCache && this.oCache.hasSentRequest();
|
|
695
|
-
sBaseMetaPath = oMetaModel.getMetaPath(oContext.getPath());
|
|
696
|
-
sFullMetaPath = oMetaModel.getMetaPath(sResolvedChildPath);
|
|
697
718
|
aPromises = [
|
|
698
719
|
this.doFetchQueryOptions(this.oContext),
|
|
699
720
|
// After access to complete meta path of property, the metadata of all prefix paths
|
|
@@ -703,11 +724,11 @@ sap.ui.define([
|
|
|
703
724
|
vChildQueryOptions
|
|
704
725
|
];
|
|
705
726
|
oCanUseCachePromise = SyncPromise.all(aPromises).then(function (aResult) {
|
|
706
|
-
var
|
|
707
|
-
mChildQueryOptions = aResult[2],
|
|
727
|
+
var mChildQueryOptions = aResult[2],
|
|
708
728
|
mWrappedChildQueryOptions,
|
|
709
729
|
mLocalQueryOptions = aResult[0],
|
|
710
730
|
oProperty = aResult[1],
|
|
731
|
+
sReducedChildMetaPath,
|
|
711
732
|
sReducedPath;
|
|
712
733
|
|
|
713
734
|
if (Array.isArray(oProperty)) { // Arrays are only used for functions and actions
|
|
@@ -716,15 +737,10 @@ sap.ui.define([
|
|
|
716
737
|
}
|
|
717
738
|
|
|
718
739
|
sReducedPath = oMetaModel.getReducedPath(sResolvedChildPath, sBaseForPathReduction);
|
|
719
|
-
|
|
720
|
-
if (sChildPath === "$count" || sChildPath.endsWith("/$count")
|
|
721
|
-
|| sChildPath[0] === "@") {
|
|
722
|
-
return sReducedPath;
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
sChildMetaPath = _Helper.getRelativePath(_Helper.getMetaPath(sReducedPath),
|
|
740
|
+
sReducedChildMetaPath = _Helper.getRelativePath(getStrippedMetaPath(sReducedPath),
|
|
726
741
|
sBaseMetaPath);
|
|
727
|
-
|
|
742
|
+
|
|
743
|
+
if (sReducedChildMetaPath === undefined) {
|
|
728
744
|
// the child's data does not fit into this bindings's cache, try the parent
|
|
729
745
|
that.bHasPathReductionToParent = true;
|
|
730
746
|
return that.oContext.getBinding().fetchIfChildCanUseCache(that.oContext,
|
|
@@ -732,7 +748,8 @@ sap.ui.define([
|
|
|
732
748
|
vChildQueryOptions);
|
|
733
749
|
}
|
|
734
750
|
|
|
735
|
-
if (bDependsOnOperation
|
|
751
|
+
if (bDependsOnOperation || sReducedChildMetaPath === "$count"
|
|
752
|
+
|| sReducedChildMetaPath.endsWith("/$count")) {
|
|
736
753
|
return sReducedPath;
|
|
737
754
|
}
|
|
738
755
|
|
|
@@ -742,17 +759,18 @@ sap.ui.define([
|
|
|
742
759
|
that.bAggregatedQueryOptionsInitial = false;
|
|
743
760
|
}
|
|
744
761
|
if (bIsAdvertisement) {
|
|
745
|
-
mWrappedChildQueryOptions = {"$select" : [
|
|
762
|
+
mWrappedChildQueryOptions = {"$select" : [sReducedChildMetaPath.slice(1)]};
|
|
746
763
|
return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
|
|
747
764
|
bCacheImmutable)
|
|
748
765
|
? sReducedPath
|
|
749
766
|
: undefined;
|
|
750
767
|
}
|
|
751
|
-
if (
|
|
768
|
+
if (sReducedChildMetaPath === ""
|
|
752
769
|
|| oProperty
|
|
753
770
|
&& (oProperty.$kind === "Property" || oProperty.$kind === "NavigationProperty")) {
|
|
754
771
|
mWrappedChildQueryOptions = _Helper.wrapChildQueryOptions(sBaseMetaPath,
|
|
755
|
-
|
|
772
|
+
sReducedChildMetaPath, mChildQueryOptions,
|
|
773
|
+
that.oModel.oInterface.fetchMetadata);
|
|
756
774
|
if (mWrappedChildQueryOptions) {
|
|
757
775
|
return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
|
|
758
776
|
bCacheImmutable)
|
|
@@ -761,14 +779,14 @@ sap.ui.define([
|
|
|
761
779
|
}
|
|
762
780
|
return undefined;
|
|
763
781
|
}
|
|
764
|
-
if (
|
|
782
|
+
if (sReducedChildMetaPath === "value") { // symbolic name for operation result
|
|
765
783
|
return that.aggregateQueryOptions(mChildQueryOptions, sBaseMetaPath,
|
|
766
784
|
bCacheImmutable)
|
|
767
785
|
? sReducedPath
|
|
768
786
|
: undefined;
|
|
769
787
|
}
|
|
770
788
|
Log.error("Failed to enhance query options for auto-$expand/$select as the path '"
|
|
771
|
-
+
|
|
789
|
+
+ sResolvedChildPath + "' does not point to a property",
|
|
772
790
|
JSON.stringify(oProperty), sClassName);
|
|
773
791
|
return undefined;
|
|
774
792
|
}).then(function (sReducedPath) {
|
|
@@ -1348,6 +1366,7 @@ sap.ui.define([
|
|
|
1348
1366
|
});
|
|
1349
1367
|
this.oResumePromise.$resolve = fnResolve;
|
|
1350
1368
|
this.removeReadGroupLock();
|
|
1369
|
+
this.doSuspend();
|
|
1351
1370
|
};
|
|
1352
1371
|
|
|
1353
1372
|
/**
|