@openui5/sap.ui.core 1.98.0 → 1.101.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.json +33 -1
- package/THIRDPARTY.txt +6 -6
- package/package.json +1 -1
- package/src/jquery.sap.global.js +6 -3
- package/src/jquery.sap.mobile.js +29 -11
- 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/sap/base/Log.js +1 -1
- package/src/sap/base/strings/whitespaceReplacer.js +1 -1
- package/src/sap/base/util/LoaderExtensions.js +1 -10
- package/src/sap/base/util/UriParameters.js +2 -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 +3 -3
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/VersionInfo.js +13 -10
- package/src/sap/ui/base/BindingParser.js +34 -7
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +2 -2
- package/src/sap/ui/base/ExpressionParser.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +32 -22
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/ManagedObjectObserver.js +2 -0
- package/src/sap/ui/base/ManagedObjectRegistry.js +10 -5
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/core/.library +2 -2
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/Component.js +24 -20
- package/src/sap/ui/core/ComponentContainer.js +1 -1
- package/src/sap/ui/core/ComponentMetadata.js +2 -2
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +80 -11
- package/src/sap/ui/core/Control.js +2 -1
- package/src/sap/ui/core/Core.js +29 -12
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/Element.js +4 -7
- package/src/sap/ui/core/ElementMetadata.js +1 -1
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/ExtensionPoint.js +6 -1
- package/src/sap/ui/core/FocusHandler.js +1 -1
- package/src/sap/ui/core/Fragment.js +1 -1
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/HTMLRenderer.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +17 -3
- package/src/sap/ui/core/IconRenderer.js +1 -1
- 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 +9 -2
- 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/LocalBusyIndicatorRenderer.js +2 -2
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +73 -6
- package/src/sap/ui/core/Manifest.js +5 -3
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Patcher.js +6 -4
- package/src/sap/ui/core/Popup.js +11 -8
- package/src/sap/ui/core/RenderManager.js +1 -1
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/ScrollBarRenderer.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- 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 +1 -1
- 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 +27 -26
- package/src/sap/ui/core/_IconRegistry.js +13 -3
- package/src/sap/ui/core/cache/CacheManager.js +1 -1
- package/src/sap/ui/core/cache/LRUPersistentCache.js +2 -1
- package/src/sap/ui/core/cldr/en_AU.json +1 -1
- package/src/sap/ui/core/date/Buddhist.js +3 -3
- package/src/sap/ui/core/date/Japanese.js +4 -4
- package/src/sap/ui/core/date/UniversalDate.js +10 -0
- package/src/sap/ui/core/date/UniversalDateUtils.js +49 -49
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +9 -6
- package/src/sap/ui/core/dnd/DragAndDrop.js +27 -22
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -2
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +3 -3
- package/src/sap/ui/core/format/DateFormat.js +670 -199
- package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +47 -0
- package/src/sap/ui/core/format/ListFormat.js +2 -2
- package/src/sap/ui/core/format/NumberFormat.js +502 -216
- package/src/sap/ui/core/format/TimezoneUtil.js +248 -0
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +220 -189
- 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 +1 -1
- 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.properties +2 -0
- package/src/sap/ui/core/messagebundle_ar.properties +1 -0
- package/src/sap/ui/core/messagebundle_bg.properties +6 -5
- package/src/sap/ui/core/messagebundle_ca.properties +1 -0
- package/src/sap/ui/core/messagebundle_cs.properties +1 -0
- package/src/sap/ui/core/messagebundle_cy.properties +1 -0
- package/src/sap/ui/core/messagebundle_da.properties +1 -0
- package/src/sap/ui/core/messagebundle_de.properties +2 -1
- package/src/sap/ui/core/messagebundle_el.properties +1 -0
- package/src/sap/ui/core/messagebundle_en.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_GB.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
- package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +1 -0
- package/src/sap/ui/core/messagebundle_es.properties +1 -0
- package/src/sap/ui/core/messagebundle_es_MX.properties +1 -0
- package/src/sap/ui/core/messagebundle_et.properties +1 -0
- package/src/sap/ui/core/messagebundle_fi.properties +1 -0
- package/src/sap/ui/core/messagebundle_fr.properties +1 -0
- package/src/sap/ui/core/messagebundle_fr_CA.properties +1 -0
- package/src/sap/ui/core/messagebundle_hi.properties +1 -0
- package/src/sap/ui/core/messagebundle_hr.properties +1 -0
- package/src/sap/ui/core/messagebundle_hu.properties +1 -0
- package/src/sap/ui/core/messagebundle_id.properties +3 -2
- package/src/sap/ui/core/messagebundle_it.properties +1 -0
- package/src/sap/ui/core/messagebundle_iw.properties +1 -0
- package/src/sap/ui/core/messagebundle_ja.properties +1 -0
- package/src/sap/ui/core/messagebundle_kk.properties +1 -0
- package/src/sap/ui/core/messagebundle_ko.properties +2 -1
- package/src/sap/ui/core/messagebundle_lt.properties +1 -0
- package/src/sap/ui/core/messagebundle_lv.properties +2 -1
- package/src/sap/ui/core/messagebundle_ms.properties +1 -0
- package/src/sap/ui/core/messagebundle_nl.properties +1 -0
- package/src/sap/ui/core/messagebundle_no.properties +1 -0
- package/src/sap/ui/core/messagebundle_pl.properties +1 -0
- package/src/sap/ui/core/messagebundle_pt.properties +1 -0
- package/src/sap/ui/core/messagebundle_pt_PT.properties +1 -0
- package/src/sap/ui/core/messagebundle_ro.properties +1 -0
- package/src/sap/ui/core/messagebundle_ru.properties +1 -0
- package/src/sap/ui/core/messagebundle_sh.properties +1 -0
- package/src/sap/ui/core/messagebundle_sk.properties +1 -0
- package/src/sap/ui/core/messagebundle_sl.properties +1 -0
- package/src/sap/ui/core/messagebundle_sv.properties +1 -0
- package/src/sap/ui/core/messagebundle_th.properties +1 -0
- package/src/sap/ui/core/messagebundle_tr.properties +1 -0
- package/src/sap/ui/core/messagebundle_uk.properties +1 -0
- package/src/sap/ui/core/messagebundle_vi.properties +1 -0
- package/src/sap/ui/core/messagebundle_zh_CN.properties +1 -0
- package/src/sap/ui/core/messagebundle_zh_TW.properties +1 -0
- package/src/sap/ui/core/mvc/Controller.js +1 -1
- package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/View.js +1 -1
- package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/XMLView.js +16 -4
- package/src/sap/ui/core/mvc/XMLViewRenderer.js +5 -2
- 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/Router.js +1 -1
- package/src/sap/ui/core/rules/App.support.js +6 -1
- package/src/sap/ui/core/rules/Misc.support.js +8 -3
- 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/Plugin.js +29 -1
- package/src/sap/ui/core/support/Support.js +3 -3
- package/src/sap/ui/core/support/controls/InteractionSlider.js +395 -407
- package/src/sap/ui/core/support/plugins/Breakpoint.js +5 -5
- package/src/sap/ui/core/support/plugins/ControlTree.js +434 -347
- package/src/sap/ui/core/support/plugins/Debugging.js +153 -129
- package/src/sap/ui/core/support/plugins/Interaction.js +71 -85
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +10 -13
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +5 -3
- package/src/sap/ui/core/support/plugins/Trace.js +7 -7
- package/src/sap/ui/core/support/plugins/ViewInfo.js +84 -22
- package/src/sap/ui/core/support/support.css +23 -23
- package/src/sap/ui/core/support/support.html +4 -6
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +1 -1
- package/src/sap/ui/core/themes/base/CommandShortcutHints.less +1 -1
- package/src/sap/ui/core/themes/base/DragAndDrop.less +3 -3
- package/src/sap/ui/core/themes/base/base.less +1524 -54
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
- package/src/sap/ui/core/themes/base/global.less +169 -13
- package/src/sap/ui/core/themes/base/shared.less +1 -0
- package/src/sap/ui/core/themes/sap_hcb/global.less +164 -7
- package/src/sap/ui/core/theming/Parameters.js +1 -1
- 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 +1 -1
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- 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 +20 -17
- package/src/sap/ui/core/util/PasteHelper.js +5 -5
- package/src/sap/ui/core/util/XMLPreprocessor.js +17 -4
- package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -1
- 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 +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/LogViewer.js +2 -2
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/dom/includeStylesheet.js +8 -3
- package/src/sap/ui/events/jquery/EventExtension.js +1 -1
- package/src/sap/ui/model/Binding.js +4 -3
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/ClientTreeBinding.js +1 -1
- package/src/sap/ui/model/CompositeBinding.js +4 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +13 -1
- package/src/sap/ui/model/ContextBinding.js +1 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/MetaModel.js +1 -2
- package/src/sap/ui/model/Model.js +10 -7
- package/src/sap/ui/model/SelectionModel.js +1 -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/_Helper.js +24 -0
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +30 -15
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +2 -1
- package/src/sap/ui/model/base/ManagedObjectModel.js +9 -7
- package/src/sap/ui/model/json/JSONListBinding.js +1 -1
- package/src/sap/ui/model/json/JSONModel.js +15 -8
- package/src/sap/ui/model/json/JSONPropertyBinding.js +1 -1
- package/src/sap/ui/model/message/MessageListBinding.js +1 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/message/MessagePropertyBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +3 -3
- package/src/sap/ui/model/odata/ODataModel.js +2 -2
- package/src/sap/ui/model/odata/ODataPropertyBinding.js +3 -1
- package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +5 -4
- package/src/sap/ui/model/odata/ODataUtils.js +7 -9
- 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/DateTimeWithTimezone.js +349 -0
- 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 +69 -5
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +8 -4
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +215 -78
- package/src/sap/ui/model/odata/v2/ODataModel.js +283 -80
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +6 -4
- package/src/sap/ui/model/odata/v4/AnnotationHelper.js +16 -17
- package/src/sap/ui/model/odata/v4/Context.js +117 -76
- package/src/sap/ui/model/odata/v4/ODataBinding.js +62 -37
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +157 -169
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +451 -262
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +91 -63
- package/src/sap/ui/model/odata/v4/ODataModel.js +478 -250
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +74 -83
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +65 -61
- package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +61 -6
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +15 -0
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +336 -86
- package/src/sap/ui/model/odata/v4/lib/_ConcatHelper.js +5 -13
- package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +16 -0
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +13 -6
- package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +2 -2
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +233 -26
- package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
- 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/XMLListBinding.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/model/xml/XMLPropertyBinding.js +1 -1
- package/src/sap/ui/performance/trace/FESR.js +1 -1
- package/src/sap/ui/performance/trace/FESRHelper.js +72 -0
- package/src/sap/ui/performance/trace/Interaction.js +6 -2
- package/src/sap/ui/performance/trace/Passport.js +3 -3
- package/src/sap/ui/qunit/qunit-2-css.js +4 -4
- package/src/sap/ui/qunit/qunit-css.js +4 -4
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/BranchTracking.js +1 -0
- package/src/sap/ui/test/Opa5.js +10 -6
- package/src/sap/ui/test/OpaBuilder.js +7 -7
- package/src/sap/ui/test/TestUtils.js +11 -0
- package/src/sap/ui/test/_UsageReport.js +1 -1
- package/src/sap/ui/test/generic/GenericTestCollection.js +176 -0
- package/src/sap/ui/test/generic/TestBase.js +151 -0
- package/src/sap/ui/test/generic/Utils.js +284 -0
- package/src/sap/ui/test/gherkin/opa5TestHarness.js +14 -5
- package/src/sap/ui/test/opaQunit.js +11 -10
- package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +9 -8
- package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
- package/src/sap/ui/test/starter/_setupAndStart.js +4 -0
- package/src/sap/ui/thirdparty/IPv6.js +1 -1
- package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
- package/src/sap/ui/thirdparty/URI.js +7 -3
- package/src/sap/ui/thirdparty/URITemplate.js +1 -1
- package/src/sap/ui/thirdparty/jqueryui/jquery-ui-datepicker.js +143 -3
- package/src/sap/ui/thirdparty/jqueryui/jquery-ui-position.js +8 -1
- package/src/sap/ui/thirdparty/jszip.js +17 -7
- package/src/sap/ui/thirdparty/mobify-carousel.js +1 -1
- package/src/sap/ui/util/Mobile.js +17 -0
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/ui5loader.js +9 -5
|
@@ -176,33 +176,33 @@ sap.ui.define([
|
|
|
176
176
|
|
|
177
177
|
/**
|
|
178
178
|
* Decides whether the given query options can be fulfilled by this binding and merges them into
|
|
179
|
-
* this binding's
|
|
179
|
+
* this binding's <code>mAggregatedQueryOptions</code> if necessary.
|
|
180
180
|
*
|
|
181
181
|
* The query options cannot be fulfilled if there are conflicts. A conflict is an option other
|
|
182
|
-
* than
|
|
183
|
-
* to be merged. This is checked recursively.
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
* Note: * is an item in
|
|
190
|
-
* array of items and one must not ignore the other items if * is
|
|
191
|
-
* "5.1.2 System Query Option $expand" and "5.1.3 System Query Option $select" in
|
|
192
|
-
* "OData Version 4.0 Part 2: URL Conventions".
|
|
193
|
-
*
|
|
194
|
-
* @param {object} mQueryOptions The query options to be merged
|
|
195
|
-
* @param {string} sBaseMetaPath This binding's meta path
|
|
196
|
-
* @param {boolean} bCacheImmutable Whether the cache of this binding is immutable
|
|
182
|
+
* than <code>$expand</code>, <code>$select</code> and <code>$count</code> which has different
|
|
183
|
+
* values in the aggregate and the options to be merged. This is checked recursively.
|
|
184
|
+
*
|
|
185
|
+
* If the cache is already immutable the query options are aggregated into
|
|
186
|
+
* <code>mLateQueryOptions</code>. Then they also cannot be fulfilled if they contain a
|
|
187
|
+
* <code>$expand</code> using a collection-valued navigation property.
|
|
188
|
+
*
|
|
189
|
+
* Note: * is an item in <code>$select</code> and <code>$expand</code> just as others, that is
|
|
190
|
+
* it must be part of the array of items and one must not ignore the other items if * is
|
|
191
|
+
* provided. See "5.1.2 System Query Option $expand" and "5.1.3 System Query Option $select" in
|
|
192
|
+
* specification "OData Version 4.0 Part 2: URL Conventions".
|
|
193
|
+
*
|
|
194
|
+
* @param {object} mQueryOptions - The query options to be merged
|
|
195
|
+
* @param {string} sBaseMetaPath - This binding's meta path
|
|
196
|
+
* @param {boolean} bCacheImmutable - Whether the cache of this binding is immutable
|
|
197
|
+
* @param {boolean} bIsProperty - Whether the child is a property binding
|
|
197
198
|
* @returns {boolean} Whether the query options can be fulfilled by this binding
|
|
198
199
|
*
|
|
199
200
|
* @private
|
|
200
201
|
*/
|
|
201
202
|
ODataParentBinding.prototype.aggregateQueryOptions = function (mQueryOptions, sBaseMetaPath,
|
|
202
|
-
bCacheImmutable) {
|
|
203
|
+
bCacheImmutable, bIsProperty) {
|
|
203
204
|
var mAggregatedQueryOptionsClone = _Helper.merge({},
|
|
204
205
|
bCacheImmutable && this.mLateQueryOptions || this.mAggregatedQueryOptions),
|
|
205
|
-
bChanged = false,
|
|
206
206
|
that = this;
|
|
207
207
|
|
|
208
208
|
/*
|
|
@@ -234,7 +234,6 @@ sap.ui.define([
|
|
|
234
234
|
.fetchObject(sExpandMetaPath).getResult().$isCollection) {
|
|
235
235
|
return false;
|
|
236
236
|
}
|
|
237
|
-
bChanged = true;
|
|
238
237
|
}
|
|
239
238
|
return merge(mAggregatedQueryOptions.$expand[sExpandPath],
|
|
240
239
|
mQueryOptions0.$expand[sExpandPath], sExpandMetaPath, true, bAddExpand);
|
|
@@ -248,7 +247,6 @@ sap.ui.define([
|
|
|
248
247
|
*/
|
|
249
248
|
function mergeSelectPath(sSelectPath) {
|
|
250
249
|
if (mAggregatedQueryOptions.$select.indexOf(sSelectPath) < 0) {
|
|
251
|
-
bChanged = true;
|
|
252
250
|
mAggregatedQueryOptions.$select.push(sSelectPath);
|
|
253
251
|
}
|
|
254
252
|
return true;
|
|
@@ -256,8 +254,9 @@ sap.ui.define([
|
|
|
256
254
|
|
|
257
255
|
// Top-level all query options in the aggregate are OK, even if not repeated in the
|
|
258
256
|
// child. In a $expand the child must also have them (and the second loop checks that
|
|
259
|
-
// they're equal).
|
|
260
|
-
return (
|
|
257
|
+
// they're equal). Property bindings are an exception to this rule.
|
|
258
|
+
return (bIsProperty || !bInsideExpand
|
|
259
|
+
|| Object.keys(mAggregatedQueryOptions).every(function (sName) {
|
|
261
260
|
return sName in mQueryOptions0 || sName === "$count" || sName === "$expand"
|
|
262
261
|
|| sName === "$select";
|
|
263
262
|
}))
|
|
@@ -288,7 +287,7 @@ sap.ui.define([
|
|
|
288
287
|
if (merge(mAggregatedQueryOptionsClone, mQueryOptions, sBaseMetaPath)) {
|
|
289
288
|
if (!bCacheImmutable) {
|
|
290
289
|
this.mAggregatedQueryOptions = mAggregatedQueryOptionsClone;
|
|
291
|
-
} else
|
|
290
|
+
} else {
|
|
292
291
|
this.mLateQueryOptions = mAggregatedQueryOptionsClone;
|
|
293
292
|
}
|
|
294
293
|
return true;
|
|
@@ -321,6 +320,8 @@ sap.ui.define([
|
|
|
321
320
|
* pending changes are ignored if all parameters are unchanged. Since 1.97.0, pending changes
|
|
322
321
|
* are ignored if they relate to a
|
|
323
322
|
* {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
|
|
323
|
+
* Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
|
|
324
|
+
* of a {@link #getRootBinding root binding} do not count as pending changes.
|
|
324
325
|
*
|
|
325
326
|
* @public
|
|
326
327
|
* @since 1.45.0
|
|
@@ -460,6 +461,9 @@ sap.ui.define([
|
|
|
460
461
|
* A (temporary) key predicate for the transient entity: "($uid=...)"
|
|
461
462
|
* @param {object} [oInitialData={}]
|
|
462
463
|
* The initial data for the created entity
|
|
464
|
+
* @param {boolean} bAtEndOfCreated
|
|
465
|
+
* Whether the newly created entity should be inserted after previously created entities, not
|
|
466
|
+
* before them
|
|
463
467
|
* @param {function} fnErrorCallback
|
|
464
468
|
* A function which is called with an error object each time a POST request for the create
|
|
465
469
|
* fails
|
|
@@ -472,7 +476,8 @@ sap.ui.define([
|
|
|
472
476
|
* @private
|
|
473
477
|
*/
|
|
474
478
|
ODataParentBinding.prototype.createInCache = function (oUpdateGroupLock, vCreatePath,
|
|
475
|
-
sCollectionPath, sTransientPredicate, oInitialData, fnErrorCallback,
|
|
479
|
+
sCollectionPath, sTransientPredicate, oInitialData, bAtEndOfCreated, fnErrorCallback,
|
|
480
|
+
fnSubmitCallback) {
|
|
476
481
|
var that = this;
|
|
477
482
|
|
|
478
483
|
return this.oCachePromise.then(function (oCache) {
|
|
@@ -481,7 +486,8 @@ sap.ui.define([
|
|
|
481
486
|
if (oCache) {
|
|
482
487
|
sPathInCache = _Helper.getRelativePath(sCollectionPath, that.getResolvedPath());
|
|
483
488
|
return oCache.create(oUpdateGroupLock, vCreatePath, sPathInCache,
|
|
484
|
-
sTransientPredicate, oInitialData, fnErrorCallback,
|
|
489
|
+
sTransientPredicate, oInitialData, bAtEndOfCreated, fnErrorCallback,
|
|
490
|
+
fnSubmitCallback
|
|
485
491
|
).then(function (oCreatedEntity) {
|
|
486
492
|
if (that.mCacheByResourcePath) {
|
|
487
493
|
// Ensure that cache containing non-transient created entity is recreated
|
|
@@ -492,8 +498,8 @@ sap.ui.define([
|
|
|
492
498
|
});
|
|
493
499
|
}
|
|
494
500
|
return that.oContext.getBinding().createInCache(oUpdateGroupLock, vCreatePath,
|
|
495
|
-
sCollectionPath, sTransientPredicate, oInitialData,
|
|
496
|
-
fnSubmitCallback);
|
|
501
|
+
sCollectionPath, sTransientPredicate, oInitialData, bAtEndOfCreated,
|
|
502
|
+
fnErrorCallback, fnSubmitCallback);
|
|
497
503
|
});
|
|
498
504
|
};
|
|
499
505
|
|
|
@@ -609,7 +615,7 @@ sap.ui.define([
|
|
|
609
615
|
* @since 1.61
|
|
610
616
|
*/
|
|
611
617
|
ODataParentBinding.prototype.destroy = function () {
|
|
612
|
-
//
|
|
618
|
+
// this.mAggregatedQueryOptions = undefined;
|
|
613
619
|
this.aChildCanUseCachePromises = [];
|
|
614
620
|
this.removeReadGroupLock();
|
|
615
621
|
this.oResumePromise = undefined;
|
|
@@ -638,6 +644,8 @@ sap.ui.define([
|
|
|
638
644
|
* The child binding's binding path relative to <code>oContext</code>
|
|
639
645
|
* @param {object|sap.ui.base.SyncPromise} vChildQueryOptions
|
|
640
646
|
* The child binding's (aggregated) query options or a promise resolving with them
|
|
647
|
+
* @param {boolean} bIsProperty
|
|
648
|
+
* Whether the child is a property binding
|
|
641
649
|
* @returns {sap.ui.base.SyncPromise}
|
|
642
650
|
* A promise resolved with the reduced path for the child binding if the child binding can use
|
|
643
651
|
* this binding's or an ancestor binding's cache; resolved with <code>undefined</code>
|
|
@@ -647,7 +655,7 @@ sap.ui.define([
|
|
|
647
655
|
* @see sap.ui.model.odata.v4.ODataMetaModel#getReducedPath
|
|
648
656
|
*/
|
|
649
657
|
ODataParentBinding.prototype.fetchIfChildCanUseCache = function (oContext, sChildPath,
|
|
650
|
-
vChildQueryOptions) {
|
|
658
|
+
vChildQueryOptions, bIsProperty) {
|
|
651
659
|
// getBaseForPathReduction must be called early, because the (virtual) parent context may be
|
|
652
660
|
// lost again when the path is needed
|
|
653
661
|
var sBaseForPathReduction = this.getBaseForPathReduction(),
|
|
@@ -759,7 +767,7 @@ sap.ui.define([
|
|
|
759
767
|
if (bIsAdvertisement) {
|
|
760
768
|
mWrappedChildQueryOptions = {$select : [sReducedChildMetaPath.slice(1)]};
|
|
761
769
|
return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
|
|
762
|
-
bCacheImmutable)
|
|
770
|
+
bCacheImmutable, bIsProperty)
|
|
763
771
|
? sReducedPath
|
|
764
772
|
: undefined;
|
|
765
773
|
}
|
|
@@ -771,7 +779,7 @@ sap.ui.define([
|
|
|
771
779
|
that.oModel.oInterface.fetchMetadata);
|
|
772
780
|
if (mWrappedChildQueryOptions) {
|
|
773
781
|
return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
|
|
774
|
-
bCacheImmutable)
|
|
782
|
+
bCacheImmutable, bIsProperty)
|
|
775
783
|
? sReducedPath
|
|
776
784
|
: undefined;
|
|
777
785
|
}
|
|
@@ -779,7 +787,7 @@ sap.ui.define([
|
|
|
779
787
|
}
|
|
780
788
|
if (sReducedChildMetaPath === "value") { // symbolic name for operation result
|
|
781
789
|
return that.aggregateQueryOptions(mChildQueryOptions, sBaseMetaPath,
|
|
782
|
-
bCacheImmutable)
|
|
790
|
+
bCacheImmutable, bIsProperty)
|
|
783
791
|
? sReducedPath
|
|
784
792
|
: undefined;
|
|
785
793
|
}
|
|
@@ -808,7 +816,8 @@ sap.ui.define([
|
|
|
808
816
|
|
|
809
817
|
// Note: in operation bindings mAggregatedQueryOptions misses the options from
|
|
810
818
|
// $$inheritExpandSelect
|
|
811
|
-
|
|
819
|
+
// If the cache is immutable, only mLateQueryOptions may have changed
|
|
820
|
+
if (!bCacheImmutable && oCache && !oCache.hasSentRequest() && !that.oOperation) {
|
|
812
821
|
if (that.bSharedRequest) {
|
|
813
822
|
oCache.setActive(false);
|
|
814
823
|
oCache = that.createAndSetCache(that.mAggregatedQueryOptions,
|
|
@@ -856,9 +865,13 @@ sap.ui.define([
|
|
|
856
865
|
sMetaPath = _Helper.getMetaPath(oModel.resolve(this.sPath, oContext));
|
|
857
866
|
mConvertedQueryOptions = Object.assign({}, mQueryOptions, {$select : []});
|
|
858
867
|
return SyncPromise.all(mQueryOptions.$select.map(function (sSelectPath) {
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
868
|
+
var sMetaSelectPath = sMetaPath + "/" + sSelectPath;
|
|
869
|
+
|
|
870
|
+
if (sMetaSelectPath.endsWith(".*")) { // fetch metadata for namespace itself
|
|
871
|
+
sMetaSelectPath = sMetaSelectPath.slice(0, -1);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
return _Helper.fetchPropertyAndType(fnFetchMetadata, sMetaSelectPath).then(function () {
|
|
862
875
|
var mWrappedQueryOptions = _Helper.wrapChildQueryOptions(
|
|
863
876
|
sMetaPath, sSelectPath, {}, fnFetchMetadata);
|
|
864
877
|
|
|
@@ -989,17 +1002,24 @@ sap.ui.define([
|
|
|
989
1002
|
* @override
|
|
990
1003
|
* @see sap.ui.model.odata.v4.ODataBinding#hasPendingChangesInDependents
|
|
991
1004
|
*/
|
|
992
|
-
ODataParentBinding.prototype.hasPendingChangesInDependents = function (
|
|
1005
|
+
ODataParentBinding.prototype.hasPendingChangesInDependents = function (bIgnoreKeptAlive0) {
|
|
993
1006
|
return this.getDependentBindings().some(function (oDependent) {
|
|
994
1007
|
var oCache = oDependent.oCache,
|
|
995
|
-
bHasPendingChanges
|
|
1008
|
+
bHasPendingChanges,
|
|
1009
|
+
bIgnoreKeptAlive = bIgnoreKeptAlive0; // new copy for this dependent only
|
|
996
1010
|
|
|
997
|
-
if (bIgnoreKeptAlive
|
|
998
|
-
|
|
1011
|
+
if (bIgnoreKeptAlive) {
|
|
1012
|
+
if (oDependent.oContext.isKeepAlive()) {
|
|
1013
|
+
return false; // changes can be safely ignored here
|
|
1014
|
+
}
|
|
1015
|
+
if (oDependent.oContext.getIndex() !== undefined) {
|
|
1016
|
+
bIgnoreKeptAlive = false; // context of ODLB which is not kept alive: unsafe!
|
|
1017
|
+
}
|
|
999
1018
|
}
|
|
1000
1019
|
if (oCache !== undefined) {
|
|
1001
1020
|
// Pending changes for this cache are only possible when there is a cache already
|
|
1002
|
-
if (oCache && oCache.hasPendingChangesForPath(""
|
|
1021
|
+
if (oCache && oCache.hasPendingChangesForPath("", false, bIgnoreKeptAlive
|
|
1022
|
+
&& oDependent.mParameters && oDependent.mParameters.$$ownRequest)) {
|
|
1003
1023
|
return true;
|
|
1004
1024
|
}
|
|
1005
1025
|
} else if (oDependent.hasPendingChangesForPath("")) {
|
|
@@ -1018,7 +1038,7 @@ sap.ui.define([
|
|
|
1018
1038
|
}
|
|
1019
1039
|
}
|
|
1020
1040
|
// Ask dependents, they might have no cache, but pending changes in mCacheByResourcePath
|
|
1021
|
-
return oDependent.hasPendingChangesInDependents();
|
|
1041
|
+
return oDependent.hasPendingChangesInDependents(bIgnoreKeptAlive);
|
|
1022
1042
|
})
|
|
1023
1043
|
|| this.oModel.withUnresolvedBindings("hasPendingChangesInCaches",
|
|
1024
1044
|
this.getResolvedPath().slice(1));
|
|
@@ -1047,36 +1067,6 @@ sap.ui.define([
|
|
|
1047
1067
|
return false;
|
|
1048
1068
|
};
|
|
1049
1069
|
|
|
1050
|
-
/**
|
|
1051
|
-
* Refreshes all dependent bindings with the given parameters and waits for them to have
|
|
1052
|
-
* finished.
|
|
1053
|
-
*
|
|
1054
|
-
* @param {string} sResourcePathPrefix
|
|
1055
|
-
* The resource path prefix which is used to delete the dependent caches and corresponding
|
|
1056
|
-
* messages; may be "" but not <code>undefined</code>
|
|
1057
|
-
* @param {string} [sGroupId]
|
|
1058
|
-
* The group ID to be used for refresh
|
|
1059
|
-
* @param {boolean} [bCheckUpdate]
|
|
1060
|
-
* If <code>true</code>, a property binding is expected to check for updates
|
|
1061
|
-
* @param {boolean} [bKeepCacheOnError]
|
|
1062
|
-
* If <code>true</code>, the binding data remains unchanged if the refresh fails
|
|
1063
|
-
* @returns {sap.ui.base.SyncPromise}
|
|
1064
|
-
* A promise resolving when all dependent bindings are refreshed; it is rejected
|
|
1065
|
-
* when the refresh fails; the promise is resolved immediately on a suspended binding
|
|
1066
|
-
* @throws {Error}
|
|
1067
|
-
* If the binding's root binding is suspended and a group ID different from the binding's
|
|
1068
|
-
* group ID is given
|
|
1069
|
-
*
|
|
1070
|
-
* @private
|
|
1071
|
-
*/
|
|
1072
|
-
ODataParentBinding.prototype.refreshDependentBindings = function (sResourcePathPrefix, sGroupId,
|
|
1073
|
-
bCheckUpdate, bKeepCacheOnError) {
|
|
1074
|
-
return SyncPromise.all(this.getDependentBindings().map(function (oDependentBinding) {
|
|
1075
|
-
return oDependentBinding.refreshInternal(sResourcePathPrefix, sGroupId, bCheckUpdate,
|
|
1076
|
-
bKeepCacheOnError);
|
|
1077
|
-
}));
|
|
1078
|
-
};
|
|
1079
|
-
|
|
1080
1070
|
/**
|
|
1081
1071
|
* Recursively refreshes all dependent list bindings that have no own cache.
|
|
1082
1072
|
*
|
|
@@ -1256,10 +1246,10 @@ sap.ui.define([
|
|
|
1256
1246
|
* @throws {Error}
|
|
1257
1247
|
* If this binding
|
|
1258
1248
|
* <ul>
|
|
1259
|
-
* <li>is relative to a {@link sap.ui.model.odata.v4.Context}
|
|
1260
|
-
* <li>is an operation binding
|
|
1261
|
-
* <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>false</code
|
|
1262
|
-
* <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding
|
|
1249
|
+
* <li>is relative to a {@link sap.ui.model.odata.v4.Context},
|
|
1250
|
+
* <li>is an operation binding,
|
|
1251
|
+
* <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>false</code>,
|
|
1252
|
+
* <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.
|
|
1263
1253
|
* </ul>
|
|
1264
1254
|
*
|
|
1265
1255
|
* @public
|
|
@@ -1314,16 +1304,17 @@ sap.ui.define([
|
|
|
1314
1304
|
* data service requests. Call {@link #resume} to resume the binding. Before 1.53.0, this method
|
|
1315
1305
|
* was not supported and threw an error. Since 1.97.0, pending changes are ignored if they
|
|
1316
1306
|
* relate to a {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this
|
|
1317
|
-
* binding.
|
|
1307
|
+
* binding. Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
|
|
1308
|
+
* of a {@link #getRootBinding root binding} do not count as pending changes.
|
|
1318
1309
|
*
|
|
1319
1310
|
* @throws {Error}
|
|
1320
1311
|
* If this binding
|
|
1321
|
-
*
|
|
1322
|
-
* <li>is relative to a {@link sap.ui.model.odata.v4.Context}
|
|
1323
|
-
* <li>is an operation binding
|
|
1324
|
-
* <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>true</code
|
|
1325
|
-
* <li>has pending changes that cannot be ignored
|
|
1326
|
-
* <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding
|
|
1312
|
+
* <ul>
|
|
1313
|
+
* <li>is relative to a {@link sap.ui.model.odata.v4.Context},
|
|
1314
|
+
* <li>is an operation binding,
|
|
1315
|
+
* <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>true</code>,
|
|
1316
|
+
* <li>has pending changes that cannot be ignored,
|
|
1317
|
+
* <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.
|
|
1327
1318
|
* </ul>
|
|
1328
1319
|
*
|
|
1329
1320
|
* @public
|
|
@@ -29,7 +29,38 @@ sap.ui.define([
|
|
|
29
29
|
dataRequested : true,
|
|
30
30
|
DataStateChange : true
|
|
31
31
|
},
|
|
32
|
-
sVirtualPath = "/" + Context.VIRTUAL
|
|
32
|
+
sVirtualPath = "/" + Context.VIRTUAL, // a snippet indicating a virtual path
|
|
33
|
+
/**
|
|
34
|
+
* @alias sap.ui.model.odata.v4.ODataPropertyBinding
|
|
35
|
+
* @author SAP SE
|
|
36
|
+
* @class Property binding for an OData V4 model.
|
|
37
|
+
* An event handler can only be attached to this binding for the following events:
|
|
38
|
+
* 'AggregatedDataStateChange', 'change', 'dataReceived', 'dataRequested' and
|
|
39
|
+
* 'DataStateChange'. For unsupported events, an error is thrown.
|
|
40
|
+
* @extends sap.ui.model.PropertyBinding
|
|
41
|
+
* @hideconstructor
|
|
42
|
+
* @mixes sap.ui.model.odata.v4.ODataBinding
|
|
43
|
+
* @public
|
|
44
|
+
* @since 1.37.0
|
|
45
|
+
* @version 1.101.0
|
|
46
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
47
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
48
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
|
|
49
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#hasPendingChanges as #hasPendingChanges
|
|
50
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#isInitial as #isInitial
|
|
51
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#refresh as #refresh
|
|
52
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#requestRefresh as #requestRefresh
|
|
53
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#resetChanges as #resetChanges
|
|
54
|
+
* @borrows sap.ui.model.odata.v4.ODataBinding#toString as #toString
|
|
55
|
+
*/
|
|
56
|
+
ODataPropertyBinding
|
|
57
|
+
= PropertyBinding.extend("sap.ui.model.odata.v4.ODataPropertyBinding", {
|
|
58
|
+
constructor : constructor
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
//*********************************************************************************************
|
|
62
|
+
// ODataPropertyBinding
|
|
63
|
+
//*********************************************************************************************
|
|
33
64
|
|
|
34
65
|
/**
|
|
35
66
|
* Do <strong>NOT</strong> call this private constructor, but rather use
|
|
@@ -45,65 +76,37 @@ sap.ui.define([
|
|
|
45
76
|
* Map of binding parameters
|
|
46
77
|
* @throws {Error}
|
|
47
78
|
* If disallowed binding parameters are provided
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
=
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
throw new Error("Invalid path: " + sPath);
|
|
80
|
-
}
|
|
81
|
-
if (mParameters) {
|
|
82
|
-
this.checkBindingParameters(mParameters,
|
|
83
|
-
["$$groupId", "$$ignoreMessages", "$$noPatch"]);
|
|
84
|
-
this.sGroupId = mParameters.$$groupId;
|
|
85
|
-
this.bNoPatch = mParameters.$$noPatch;
|
|
86
|
-
this.setIgnoreMessages(mParameters.$$ignoreMessages);
|
|
87
|
-
} else {
|
|
88
|
-
this.sGroupId = undefined;
|
|
89
|
-
this.bNoPatch = false;
|
|
90
|
-
}
|
|
91
|
-
this.oCheckUpdateCallToken = undefined;
|
|
92
|
-
this.oContext = oContext;
|
|
93
|
-
this.bHasDeclaredType = undefined; // whether the binding info declares a type
|
|
94
|
-
this.bInitial = true;
|
|
95
|
-
// Note: system query options supported at property binding only for ".../$count"
|
|
96
|
-
this.mQueryOptions = this.oModel.buildQueryOptions(_Helper.clone(mParameters),
|
|
97
|
-
/*bSystemQueryOptionsAllowed*/sPath.endsWith("$count"));
|
|
98
|
-
this.vValue = undefined;
|
|
99
|
-
// BEWARE: #doFetchQueryOptions uses #isRoot which relies on this.oContext!
|
|
100
|
-
this.fetchCache(oContext);
|
|
101
|
-
oModel.bindingCreated(this);
|
|
102
|
-
},
|
|
103
|
-
metadata : {
|
|
104
|
-
publicMethods : []
|
|
105
|
-
}
|
|
106
|
-
});
|
|
79
|
+
*/
|
|
80
|
+
function constructor(oModel, sPath, oContext, mParameters) {
|
|
81
|
+
PropertyBinding.call(this, oModel, sPath);
|
|
82
|
+
// initialize mixin members
|
|
83
|
+
asODataBinding.call(this);
|
|
84
|
+
|
|
85
|
+
if (sPath.endsWith("/")) {
|
|
86
|
+
throw new Error("Invalid path: " + sPath);
|
|
87
|
+
}
|
|
88
|
+
if (mParameters) {
|
|
89
|
+
this.checkBindingParameters(mParameters,
|
|
90
|
+
["$$groupId", "$$ignoreMessages", "$$noPatch"]);
|
|
91
|
+
this.sGroupId = mParameters.$$groupId;
|
|
92
|
+
this.bNoPatch = mParameters.$$noPatch;
|
|
93
|
+
this.setIgnoreMessages(mParameters.$$ignoreMessages);
|
|
94
|
+
} else {
|
|
95
|
+
this.sGroupId = undefined;
|
|
96
|
+
this.bNoPatch = false;
|
|
97
|
+
}
|
|
98
|
+
this.oCheckUpdateCallToken = undefined;
|
|
99
|
+
this.oContext = oContext;
|
|
100
|
+
this.bHasDeclaredType = undefined; // whether the binding info declares a type
|
|
101
|
+
this.bInitial = true;
|
|
102
|
+
// Note: system query options supported at property binding only for ".../$count"
|
|
103
|
+
this.mQueryOptions = this.oModel.buildQueryOptions(_Helper.clone(mParameters),
|
|
104
|
+
/*bSystemQueryOptionsAllowed*/sPath.endsWith("$count"));
|
|
105
|
+
this.vValue = undefined;
|
|
106
|
+
// BEWARE: #doFetchQueryOptions uses #isRoot which relies on this.oContext!
|
|
107
|
+
this.fetchCache(oContext);
|
|
108
|
+
oModel.bindingCreated(this);
|
|
109
|
+
}
|
|
107
110
|
|
|
108
111
|
asODataBinding(ODataPropertyBinding.prototype);
|
|
109
112
|
|
|
@@ -266,7 +269,8 @@ sap.ui.define([
|
|
|
266
269
|
&& !bIsMeta) {
|
|
267
270
|
vType = oMetaModel.fetchUI5Type(sResolvedPath);
|
|
268
271
|
}
|
|
269
|
-
if (
|
|
272
|
+
if (vValue === undefined) {
|
|
273
|
+
// if called via #onChange, we need to fetch implicit values
|
|
270
274
|
vValue = this.oCachePromise.then(function (oCache) {
|
|
271
275
|
var sDataPath, sMetaPath;
|
|
272
276
|
|
|
@@ -108,6 +108,8 @@ sap.ui.define([
|
|
|
108
108
|
* <li> <code>type</code>: the EDM data type (like "Edm.String") if it could be
|
|
109
109
|
* determined
|
|
110
110
|
* <li> <code>constraints</code>: {object} type constraints if result is "binding"
|
|
111
|
+
* <li> <code>formatOptions</code>: {object} format options if result is "binding"
|
|
112
|
+
* <li> <code>parameters</code>: {object} binding parameters if result is "binding"
|
|
111
113
|
* </ul>
|
|
112
114
|
*
|
|
113
115
|
* @private
|
|
@@ -405,7 +407,8 @@ sap.ui.define([
|
|
|
405
407
|
return Expression.path(oPathValue);
|
|
406
408
|
}
|
|
407
409
|
|
|
408
|
-
[
|
|
410
|
+
[
|
|
411
|
+
"$And", "$Apply", "$Date", "$DateTimeOffset", "$Decimal", "$Float", "$Eq",
|
|
409
412
|
"$Ge", "$Gt", "$Guid", "$If", "$Int", "$Le", "$Lt", "$Name", "$Ne", "$Not",
|
|
410
413
|
"$Null", "$Or", "$Path", "$PropertyPath", "$TimeOfDay", "$LabeledElement"
|
|
411
414
|
].forEach(function (sProperty) {
|
|
@@ -539,6 +542,52 @@ sap.ui.define([
|
|
|
539
542
|
});
|
|
540
543
|
},
|
|
541
544
|
|
|
545
|
+
/**
|
|
546
|
+
* Fetch the result object for a date/time with timezone.
|
|
547
|
+
* If <code>oPathValue.path</code> references a property which has a
|
|
548
|
+
* <code>com.sap.vocabularies.Common.v1.Timezone</code> annotation, a composite result
|
|
549
|
+
* object for a <code>sap.ui.model.odata.type.DateTimeWithTimezone</code> type with the
|
|
550
|
+
* date/time and the timezone as parts is returned.
|
|
551
|
+
*
|
|
552
|
+
* @param {object} oPathValue
|
|
553
|
+
* model, path (and value) information pointing to the path (see Expression object)
|
|
554
|
+
* @param {string} sValue
|
|
555
|
+
* use this value instead of <code>oPathValue.value</code>!
|
|
556
|
+
* @param {object} mConstraints
|
|
557
|
+
* the type constraints for the property referenced by <code>oPathValue.path</code>
|
|
558
|
+
* @returns {sap.ui.base.SyncPromise|undefined}
|
|
559
|
+
* a sync promise which resolves with a result object for the date/time with timezone, or
|
|
560
|
+
* is rejected with an error; <code>undefined</code> if there is no timezone annotation
|
|
561
|
+
* for the property referenced by <code>oPathValue.path</code>
|
|
562
|
+
*/
|
|
563
|
+
fetchDateTimeWithTimezone : function (oPathValue, sValue, mConstraints) {
|
|
564
|
+
var oModel = oPathValue.model,
|
|
565
|
+
sPath = oPathValue.path + "@com.sap.vocabularies.Common.v1.Timezone/$Path",
|
|
566
|
+
sTargetPath = oModel.getObject(sPath);
|
|
567
|
+
|
|
568
|
+
function formatPart(mConstraints0, sType, sPath0) {
|
|
569
|
+
return Basics.resultToString(
|
|
570
|
+
Expression.pathResult(oPathValue, sType, sPath0, mConstraints0),
|
|
571
|
+
false, true);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
if (!sTargetPath) {
|
|
575
|
+
return undefined;
|
|
576
|
+
}
|
|
577
|
+
return oModel.fetchObject(sPath + "/$").then(function (oTarget) {
|
|
578
|
+
return {
|
|
579
|
+
result : "composite",
|
|
580
|
+
type : "sap.ui.model.odata.type.DateTimeWithTimezone",
|
|
581
|
+
value : "{mode:'TwoWay',parts:["
|
|
582
|
+
+ formatPart(mConstraints, "Edm.DateTimeOffset", sValue)
|
|
583
|
+
+ ","
|
|
584
|
+
+ formatPart(oModel.getConstraints(oTarget, sPath), oTarget.$Type,
|
|
585
|
+
sTargetPath)
|
|
586
|
+
+ "],type:'sap.ui.model.odata.type.DateTimeWithTimezone'}"
|
|
587
|
+
};
|
|
588
|
+
});
|
|
589
|
+
},
|
|
590
|
+
|
|
542
591
|
/**
|
|
543
592
|
* Handling of "14.5.3.1.2 Function odata.fillUriTemplate".
|
|
544
593
|
*
|
|
@@ -771,6 +820,11 @@ sap.ui.define([
|
|
|
771
820
|
* <code>Org.OData.Measures.V1.Unit</code> annotation, a composite result object for a
|
|
772
821
|
* <code>sap.ui.model.odata.type.Unit</code> type with the measures, the unit and the unit
|
|
773
822
|
* customizing as parts is returned.
|
|
823
|
+
* If <code>oPathValue.path</code> references a property with type
|
|
824
|
+
* <code>Edm.DateTimeOffset</code> and a
|
|
825
|
+
* <code>com.sap.vocabularies.Common.v1.Timezone</code> annotation, a composite result
|
|
826
|
+
* object for a <code>sap.ui.model.odata.type.DateTimeWithTimezone</code> type with the
|
|
827
|
+
* date/time and the timezone as parts is returned.
|
|
774
828
|
*
|
|
775
829
|
* @param {object} oPathValue
|
|
776
830
|
* model, path and value information pointing to the path (see Expression object)
|
|
@@ -795,16 +849,17 @@ sap.ui.define([
|
|
|
795
849
|
}
|
|
796
850
|
|
|
797
851
|
return oPromise.then(function (oProperty) {
|
|
798
|
-
var
|
|
799
|
-
|
|
852
|
+
var oAnnotationBasedPromise,
|
|
853
|
+
mConstraints,
|
|
800
854
|
sType = oProperty && oProperty.$Type;
|
|
801
855
|
|
|
802
856
|
if (oProperty && oPathValue.complexBinding) {
|
|
803
857
|
mConstraints = oModel.getConstraints(oProperty, oPathValue.path);
|
|
804
|
-
|
|
805
|
-
|
|
858
|
+
oAnnotationBasedPromise = sType === "Edm.DateTimeOffset"
|
|
859
|
+
? Expression.fetchDateTimeWithTimezone(oPathValue, sValue, mConstraints)
|
|
860
|
+
: Expression.fetchCurrencyOrUnit(oPathValue, sValue, sType, mConstraints);
|
|
806
861
|
}
|
|
807
|
-
return
|
|
862
|
+
return oAnnotationBasedPromise
|
|
808
863
|
|| Expression.pathResult(oPathValue, sType, sValue, mConstraints);
|
|
809
864
|
});
|
|
810
865
|
},
|
|
@@ -437,6 +437,21 @@ sap.ui.define([
|
|
|
437
437
|
return this.drillDown(this.aElements, sPath, oGroupLock);
|
|
438
438
|
};
|
|
439
439
|
|
|
440
|
+
/**
|
|
441
|
+
* Nothing to do here, we have no created elements.
|
|
442
|
+
*
|
|
443
|
+
* @param {string} [_sPath]
|
|
444
|
+
* Relative path to drill-down into
|
|
445
|
+
* @returns {object[]}
|
|
446
|
+
* An empty array
|
|
447
|
+
*
|
|
448
|
+
* @public
|
|
449
|
+
*/
|
|
450
|
+
// @override sap.ui.model.odata.v4.lib._Cache#getCreatedElements
|
|
451
|
+
_AggregationCache.prototype.getCreatedElements = function (_sPath) {
|
|
452
|
+
return [];
|
|
453
|
+
};
|
|
454
|
+
|
|
440
455
|
/**
|
|
441
456
|
* @override
|
|
442
457
|
* @see sap.ui.model.odata.v4.lib._Cache#getDownloadQueryOptions
|