@openui5/sap.ui.core 1.115.1 → 1.117.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dtsgenrc +18 -0
- package/.eslintrc.json +1 -11
- package/.reuse/dep5 +0 -5
- package/THIRDPARTY.txt +1 -7
- package/package.json +1 -1
- package/src/jquery.sap.global.js +1 -1
- 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.sjax.js +2 -2
- package/src/jquery.sap.storage.js +3 -3
- package/src/sap/base/Event.js +106 -0
- package/src/sap/base/Eventing.js +319 -0
- package/src/sap/base/config/MemoryConfigurationProvider.js +10 -1
- package/src/sap/base/config.js +3 -2
- package/src/sap/base/i18n/Formatting.js +989 -0
- package/src/sap/base/i18n/LanguageTag.js +189 -0
- package/src/sap/base/i18n/Localization.js +710 -0
- package/src/sap/base/i18n/ResourceBundle.js +5 -20
- package/src/sap/base/i18n/date/CalendarType.js +54 -0
- package/src/sap/base/i18n/date/CalendarWeekNumbering.js +105 -0
- package/src/sap/base/i18n/date/TimezoneUtils.js +287 -0
- package/src/sap/base/util/JSTokenizer.js +1 -1
- package/src/sap/base/util/fetch.js +4 -4
- package/src/sap/base/util/mixedFetch.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/base/util/syncFetch.js +2 -2
- package/src/sap/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/base/Event.js +6 -4
- package/src/sap/ui/base/EventProvider.js +4 -12
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +9 -15
- package/src/sap/ui/base/ManagedObjectMetadata.js +33 -12
- 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/base/SyncPromise.js +10 -5
- package/src/sap/ui/core/.library +3 -3
- package/src/sap/ui/core/AccessKeysEnablement.js +10 -5
- package/src/sap/ui/core/AnimationMode.js +49 -0
- package/src/sap/ui/core/BusyIndicator.js +33 -42
- package/src/sap/ui/core/CalendarType.js +11 -37
- package/src/sap/ui/core/Component.js +4 -5
- 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/ConfigTest.js +17 -0
- package/src/sap/ui/core/Configuration.js +409 -1282
- package/src/sap/ui/core/Control.js +7 -12
- package/src/sap/ui/core/ControlBehavior.js +157 -0
- package/src/sap/ui/core/Core.js +126 -132
- 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 +14 -3
- package/src/sap/ui/core/ElementMetadata.js +2 -4
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.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/History.js +1 -1
- package/src/sap/ui/core/Icon.js +1 -1
- package/src/sap/ui/core/IconPool.js +1 -2
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +5 -7
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +12 -12
- 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/Lib.js +126 -38
- 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 +154 -430
- package/src/sap/ui/core/LocaleData.js +50 -14
- package/src/sap/ui/core/Manifest.js +5 -5
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Popup.js +37 -50
- package/src/sap/ui/core/RenderManager.js +1 -1
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/Rendering.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/SeparatorItem.js +1 -1
- package/src/sap/ui/core/Shortcut.js +11 -9
- package/src/sap/ui/core/StaticArea.js +31 -17
- package/src/sap/ui/core/Theming.js +458 -0
- 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 +28 -5
- package/src/sap/ui/core/_IconRegistry.js +89 -12
- package/src/sap/ui/core/boot/_bootConfig.js +137 -0
- package/src/sap/ui/core/boot/_runBoot.js +16 -0
- package/src/sap/ui/core/boot/initDOM.js +96 -0
- package/src/sap/ui/core/boot/loadCalendar.js +50 -0
- package/src/sap/ui/core/boot/loadManifest.js +55 -0
- package/src/sap/ui/core/boot/loadModules.js +80 -0
- package/src/sap/ui/core/boot/manifest.json +11 -0
- package/src/sap/ui/core/boot/onInit.js +44 -0
- package/src/sap/ui/core/boot.js +107 -0
- package/src/sap/ui/core/date/CalendarWeekNumbering.js +12 -83
- package/src/sap/ui/core/date/UI5Date.js +10 -4
- package/src/sap/ui/core/delegate/ItemNavigation.js +8 -10
- package/src/sap/ui/core/delegate/ScrollEnablement.js +5 -5
- 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 +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/format/DateFormat.js +33 -27
- package/src/sap/ui/core/format/TimezoneUtil.js +15 -273
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +32 -6
- 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/MessageMixin.js +6 -5
- 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_ar.properties +57 -55
- package/src/sap/ui/core/messagebundle_bg.properties +57 -55
- package/src/sap/ui/core/messagebundle_ca.properties +30 -28
- package/src/sap/ui/core/messagebundle_cs.properties +44 -42
- package/src/sap/ui/core/messagebundle_cy.properties +59 -57
- package/src/sap/ui/core/messagebundle_da.properties +57 -55
- package/src/sap/ui/core/messagebundle_de.properties +59 -57
- package/src/sap/ui/core/messagebundle_el.properties +48 -46
- package/src/sap/ui/core/messagebundle_en.properties +59 -57
- package/src/sap/ui/core/messagebundle_en_GB.properties +59 -57
- package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +2 -0
- package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +3 -0
- package/src/sap/ui/core/messagebundle_es.properties +48 -46
- package/src/sap/ui/core/messagebundle_es_MX.properties +58 -56
- package/src/sap/ui/core/messagebundle_et.properties +55 -53
- package/src/sap/ui/core/messagebundle_fi.properties +51 -49
- package/src/sap/ui/core/messagebundle_fr.properties +36 -34
- package/src/sap/ui/core/messagebundle_fr_CA.properties +21 -19
- package/src/sap/ui/core/messagebundle_hi.properties +42 -40
- package/src/sap/ui/core/messagebundle_hr.properties +57 -55
- package/src/sap/ui/core/messagebundle_hu.properties +58 -56
- package/src/sap/ui/core/messagebundle_id.properties +59 -57
- package/src/sap/ui/core/messagebundle_it.properties +75 -73
- package/src/sap/ui/core/messagebundle_iw.properties +59 -57
- package/src/sap/ui/core/messagebundle_ja.properties +50 -48
- package/src/sap/ui/core/messagebundle_kk.properties +44 -42
- package/src/sap/ui/core/messagebundle_ko.properties +20 -18
- package/src/sap/ui/core/messagebundle_lt.properties +59 -57
- package/src/sap/ui/core/messagebundle_lv.properties +59 -57
- package/src/sap/ui/core/messagebundle_ms.properties +60 -58
- package/src/sap/ui/core/messagebundle_nl.properties +58 -56
- package/src/sap/ui/core/messagebundle_no.properties +56 -54
- package/src/sap/ui/core/messagebundle_pl.properties +56 -54
- package/src/sap/ui/core/messagebundle_pt.properties +58 -56
- package/src/sap/ui/core/messagebundle_pt_PT.properties +58 -56
- package/src/sap/ui/core/messagebundle_ro.properties +59 -57
- package/src/sap/ui/core/messagebundle_ru.properties +57 -55
- package/src/sap/ui/core/messagebundle_sh.properties +59 -57
- package/src/sap/ui/core/messagebundle_sk.properties +57 -55
- package/src/sap/ui/core/messagebundle_sl.properties +58 -56
- package/src/sap/ui/core/messagebundle_sv.properties +54 -52
- package/src/sap/ui/core/messagebundle_th.properties +18 -16
- package/src/sap/ui/core/messagebundle_tr.properties +58 -56
- package/src/sap/ui/core/messagebundle_uk.properties +59 -57
- package/src/sap/ui/core/messagebundle_vi.properties +59 -57
- package/src/sap/ui/core/messagebundle_zh_CN.properties +58 -56
- package/src/sap/ui/core/messagebundle_zh_TW.properties +58 -56
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/View.js +1 -1
- package/src/sap/ui/core/mvc/XMLView.js +14 -2
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +14 -16
- 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/HashChanger.js +1 -0
- package/src/sap/ui/core/routing/Route.js +1 -0
- package/src/sap/ui/core/routing/Router.js +3 -1
- package/src/sap/ui/core/rules/Config.support.js +2 -2
- package/src/sap/ui/core/rules/Misc.support.js +1 -1
- package/src/sap/ui/core/rules/Model.support.js +3 -1
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +7 -4
- package/src/sap/ui/core/support/controls/TimelineOverview.js +1 -1
- package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
- package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
- package/src/sap/ui/core/themes/base/Icon.less +2 -2
- package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +4 -4
- package/src/sap/ui/core/themes/base/base.less +41 -20
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
- package/src/sap/ui/core/theming/Parameters.js +6 -10
- package/src/sap/ui/core/theming/ThemeManager.js +312 -450
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +5 -10
- 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 +4 -5
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +3 -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/PropertyList.js +1 -1
- package/src/sap/ui/events/PseudoEvents.js +17 -9
- package/src/sap/ui/model/Binding.js +19 -15
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/CompositeBinding.js +57 -19
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/ListBinding.js +42 -1
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +5 -4
- package/src/sap/ui/model/PropertyBinding.js +10 -0
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +4 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +166 -79
- package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +4 -3
- package/src/sap/ui/model/analytics/BatchResponseCollector.js +2 -2
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +14 -27
- package/src/sap/ui/model/analytics/odata4analytics.js +6 -12
- package/src/sap/ui/model/base/ManagedObjectModel.js +3 -2
- package/src/sap/ui/model/json/JSONModel.js +6 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +191 -5
- package/src/sap/ui/model/odata/ODataMetadata.js +38 -4
- package/src/sap/ui/model/odata/ODataModel.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 +8 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeWithTimezone.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 +3 -3
- 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 +3 -2
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +14 -3
- package/src/sap/ui/model/odata/v2/ODataModel.js +46 -32
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/AnnotationHelper.js +4 -4
- package/src/sap/ui/model/odata/v4/Context.js +39 -32
- package/src/sap/ui/model/odata/v4/ODataBinding.js +85 -52
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +23 -19
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +139 -50
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +30 -36
- package/src/sap/ui/model/odata/v4/ODataModel.js +49 -44
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +72 -37
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +34 -29
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +95 -9
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +25 -27
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +95 -209
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +168 -1
- package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +14 -5
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +34 -19
- package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +4 -4
- 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/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +1 -1
- package/src/sap/ui/model/type/DateInterval.js +1 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/Opa5.js +1 -1
- package/src/sap/ui/test/TestUtils.js +1 -1
- package/src/sap/ui/test/autowaiter/_autoWaiter.js +1 -1
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +1 -3
- package/src/sap/ui/test/gherkin/simpleGherkinParser.js +10 -5
- package/src/sap/ui/test/matchers/LabelFor.js +1 -0
- package/src/sap/ui/test/matchers/_Visitor.js +6 -1
- package/src/sap/ui/test/starter/_setupAndStart.js +2 -5
- package/src/sap/ui/thirdparty/caja-html-sanitizer.js +111 -96
- package/src/sap/ui/thirdparty/qunit-2.js +9 -3
- package/src/sap/ui/util/ActivityDetection.js +7 -1
- package/src/sap/ui/util/Mobile.js +21 -14
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/sap-ui-boot.js +23 -6
- package/src/ui5-boot.js +50 -0
- package/src/ui5loader-autoconfig.js +150 -75
- package/src/ui5loader.js +458 -514
- package/test/sap/ui/core/Device.js +1 -1
- package/test/sap/ui/core/FormatHelper.js +3 -2
- package/test/sap/ui/core/demokit/docuindex.json +6 -0
- package/test/sap/ui/core/demokit/sample/OpaAction/applicationUnderTest/view/Main.view.xml +1 -0
- package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/OpaBusyIndicator.js +1 -1
- package/test/sap/ui/core/demokit/sample/OpaMatchers/OpaMatchers.js +2 -2
- package/test/sap/ui/core/demokit/sample/ViewTemplate/types/MIT.ODataTypes.html +9 -14
- package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Opa.qunit.js +7 -0
- package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Template.controller.js +2 -2
- package/test/sap/ui/core/demokit/sample/common/pages/Any.js +1 -1
- package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +24 -5
- package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.view.xml +24 -6
- package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.view.xml +20 -5
- package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/filter.js +2 -2
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Component.js +27 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ListReport.controller.js +43 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ListReport.view.xml +47 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Main.controller.js +27 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Main.view.xml +7 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/NotFound.view.xml +8 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.controller.js +123 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.view.xml +92 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.html +27 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +70 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/README.html +55 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/SandboxModel.js +56 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/POST-SalesOrderList.json +66 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000000')-SO_2_SOITEM.json +57 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000000').json +20 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000001').json +9 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000007')-SO_2_BP.json +12 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList.json +62 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_CurrencyCode.json +85 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_CurrencyCode.xml +185 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_ProductID.json +93 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_ProductID.xml +262 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/metadata.xml +1779 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/manifest.json +134 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/pages/Main.js +119 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +4 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/GridTable.view.xml +12 -3
- package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/pages/Main.js +0 -41
- package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +26 -8
- package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +4 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/manifest.json +1 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/manifest.json +1 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +5 -17
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/pages/Main.js +18 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/Create.js +10 -6
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/manifest.json +18 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Main.view.xml +3 -3
- package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/pages/Main.js +4 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/arrangements/Startup.js +1 -1
- package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/controller/App.controller.js +3 -8
- package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/controller/App.controller.js +3 -8
- package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/arrangements/Startup.js +1 -1
- package/test/sap/ui/core/qunit/CompositeBinding.qunit.js +25 -7
- package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +86 -2
- package/test/sap/ui/core/qunit/DataState.qunit.js +2 -7
- package/test/sap/ui/core/qunit/HTML.qunit.js +31 -31
- package/test/sap/ui/core/qunit/IconPool.qunit.js +53 -4
- package/test/sap/ui/core/qunit/Lib.qunit.js +55 -2
- package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +22 -15
- package/test/sap/ui/core/qunit/ManagedObject.qunit.js +5 -3
- package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +43 -5
- package/test/sap/ui/core/qunit/Object.qunit.js +4 -1
- package/test/sap/ui/core/qunit/ThemeManager.qunit.js +2 -2
- package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +9 -3
- package/test/sap/ui/core/qunit/Theming.beforeBootstrap.qunit.js +13 -0
- package/test/sap/ui/core/qunit/Theming.qunit.js +247 -0
- package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +510 -185
- package/test/sap/ui/core/qunit/analytics/AnalyticalTreeBindingAdapter.qunit.js +2 -7
- package/test/sap/ui/core/qunit/analytics/ODataModelAdapter.qunit.js +81 -16
- package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +20 -29
- package/test/sap/ui/core/qunit/app/MessageListBinding.qunit.js +2 -7
- package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +18 -1
- package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.html +24 -0
- package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.js +277 -0
- package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +282 -0
- package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +5 -6
- package/test/sap/ui/core/qunit/base/security/sanitizeHTML.qunit.js +17 -0
- package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload.qunit.js +1 -2
- package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.beforeBootstrap.qunit.js +13 -12
- package/test/sap/ui/core/qunit/bootstrap/Configuration.main.qunit.js +11 -0
- package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.html +4 -3
- package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +451 -281
- package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +19 -30
- package/test/sap/ui/core/qunit/component/Models.qunit.js +12 -30
- package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +8 -26
- package/test/sap/ui/core/qunit/component/testdata/async/lib2/library-preload.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/lib2/library-preload.json +1 -1
- package/test/sap/ui/core/qunit/component/testdata/async/lib2/library.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/lib3/library-preload.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/lib3/library-preload.json +1 -1
- package/test/sap/ui/core/qunit/component/testdata/async/lib3/library.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/lib4/library-preload.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/lib4/library-preload.json +1 -1
- package/test/sap/ui/core/qunit/component/testdata/async/lib4/library.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/manifestcomp/Component-preload.js +1 -1
- package/test/sap/ui/core/qunit/component/testdata/async/manifestcomp/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/mycomp/Component-preload.js +1 -1
- package/test/sap/ui/core/qunit/component/testdata/async/mycomp/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/async/mysubcomp/Component-preload.js +1 -1
- package/test/sap/ui/core/qunit/component/testdata/async/mysubcomp/Component.js +2 -3
- package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/Component.js +0 -4
- package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/sync/Component.js +2 -6
- package/test/sap/ui/core/qunit/component/testdata/customizing/customersub/Component.js +0 -4
- package/test/sap/ui/core/qunit/component/testdata/inherit/Component.js +2 -7
- package/test/sap/ui/core/qunit/component/testdata/inherit/parent/Component.js +2 -7
- package/test/sap/ui/core/qunit/component/testdata/inheritAsync/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/other/Component.js +2 -7
- package/test/sap/ui/core/qunit/component/testdata/terminologies/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Component.js +2 -2
- package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Component.js +2 -3
- package/test/sap/ui/core/qunit/component/testdata/v1/Component.js +2 -7
- package/test/sap/ui/core/qunit/component/testdata/v1empty/Component.js +2 -7
- package/test/sap/ui/core/qunit/component/testdata/v1inline/Component.js +2 -5
- package/test/sap/ui/core/qunit/component/testdata/v1missing/Component.js +2 -7
- package/test/sap/ui/core/qunit/component/testdata/v2/Component.js +2 -5
- package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/Component.js +2 -5
- package/test/sap/ui/core/qunit/component/testdata/v2empty/Component.js +2 -9
- package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +2 -5
- package/test/sap/ui/core/qunit/component/testdata/v2missing/Component.js +2 -9
- package/test/sap/ui/core/qunit/component/testdata/v2version/Component.js +2 -2
- package/test/sap/ui/core/qunit/dnd/DragDropInfo.qunit.js +1 -2
- package/test/sap/ui/core/qunit/generic/EnforceSemanticRendering.qunit.js +2 -2
- package/test/sap/ui/core/qunit/generic/SettersContextReturn.qunit.js +2 -2
- package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +2 -0
- package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +2 -0
- package/test/sap/ui/core/qunit/generic/legacy/SettersContextReturn.qunit.js +2 -2
- package/test/sap/ui/core/qunit/gherkin/dataTableUtils.qunit.js +2 -2
- package/test/sap/ui/core/qunit/i18n/Locale.qunit.js +0 -52
- package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +49 -14
- package/test/sap/ui/core/qunit/i18n/UI5Date.qunit.js +16 -4
- package/test/sap/ui/core/qunit/i18n/UniversalDate.qunit.js +74 -114
- package/test/sap/ui/core/qunit/i18n/UniversalDateUtils.qunit.js +34 -39
- package/test/sap/ui/core/qunit/i18n/testsuite.i18n.qunit.js +18 -0
- package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +1 -0
- package/test/sap/ui/core/qunit/internal/BeforePush.ODataV4.js +28 -0
- package/test/sap/ui/core/qunit/internal/BeforePush.html +1 -0
- package/test/sap/ui/core/qunit/internal/BeforePush.js +15 -0
- package/test/sap/ui/core/qunit/internal/performance/ExpressionParser.performance.qunit.js +1 -0
- package/test/sap/ui/core/qunit/json/JSONListBinding.qunit.js +2 -7
- package/test/sap/ui/core/qunit/json/JSONPropertyBinding.qunit.js +7 -12
- package/test/sap/ui/core/qunit/json/JSONTwoWay.qunit.js +3 -8
- package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -2
- package/test/sap/ui/core/qunit/loader/asyncMode_unavoidablySync.qunit.js +1 -1
- package/test/sap/ui/core/qunit/loader/fixture/amd-with-export-true/module1.js +2 -2
- package/test/sap/ui/core/qunit/loader/testsuite.loader.qunit.js +0 -3
- package/test/sap/ui/core/qunit/messages/MessageMixin.qunit.js +2 -7
- package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +1 -1
- package/test/sap/ui/core/qunit/model/Binding.qunit.js +36 -11
- package/test/sap/ui/core/qunit/model/ClientListBinding.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/ClientTreeBinding.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/CompositeDataState.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/Context.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/ContextBinding.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/FAR_CUSTOMER_LINE_ITEMS.metadata.xml +2 -0
- package/test/sap/ui/core/qunit/model/ListBinding.qunit.js +63 -6
- package/test/sap/ui/core/qunit/model/Model.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +40 -0
- package/test/sap/ui/core/qunit/model/TreeBinding.qunit.js +2 -7
- package/test/sap/ui/core/qunit/model/TreeBindingAdapter.qunit.js +2 -7
- package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +51 -0
- package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +9 -8
- package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions.qunit.js +4 -4
- package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions_legacy.qunit.js +4 -4
- package/test/sap/ui/core/qunit/mvc/testdata/Async.view.xml +1 -1
- package/test/sap/ui/core/qunit/mvc/testdata/AsyncTypedView.js +5 -1
- package/test/sap/ui/core/qunit/odata/AnnotationParserNoFakeService.qunit.js +2 -7
- package/test/sap/ui/core/qunit/odata/ODataMessageParser.qunit.js +1 -1
- package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +2 -8
- package/test/sap/ui/core/qunit/odata/ODataMetadataNoFakeService.qunit.js +68 -9
- package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +24 -0
- package/test/sap/ui/core/qunit/odata/v2/Context.qunit.js +2 -7
- package/test/sap/ui/core/qunit/odata/v2/ODataContextBindingNoFakeService.qunit.js +2 -7
- package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +31 -17
- package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +260 -56
- package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +70 -15
- package/test/sap/ui/core/qunit/odata/v2/ODataPropertyBindingNoFakeService.qunit.js +2 -7
- package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +4 -9
- package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +2 -7
- package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +1 -1
- package/test/sap/ui/core/qunit/odata/v2/_CreatedContextsCache.qunit.js +2 -7
- package/test/sap/ui/core/qunit/odata/v4/AnnotationHelper.qunit.js +1 -1
- package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +55 -22
- package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +184 -151
- package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +60 -30
- package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +305 -69
- package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +20 -69
- package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1282 -255
- package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +90 -61
- package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +0 -3
- package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +283 -170
- package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +103 -78
- package/test/sap/ui/core/qunit/odata/v4/data/metadata.json +2 -1
- package/test/sap/ui/core/qunit/odata/v4/data/metadata.xml +4 -0
- package/test/sap/ui/core/qunit/odata/v4/data/metadata_special_cases.xml +2 -0
- package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +151 -1
- package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +24 -11
- package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +279 -458
- package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +204 -3
- package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +7 -3
- package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +145 -26
- package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +4 -0
- package/test/sap/ui/core/qunit/opa/_LogCollector.qunit.js +1 -1
- package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +4 -2
- package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +129 -2
- package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +5 -1
- package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +5 -0
- package/test/sap/ui/core/qunit/resource/ResourceModel.qunit.js +17 -37
- package/test/sap/ui/core/qunit/routing/HashChanger.qunit.js +1 -6
- package/test/sap/ui/core/qunit/routing/RouterHashChanger.qunit.js +1 -10
- package/test/sap/ui/core/qunit/routing/async/Router.qunit.js +1 -22
- package/test/sap/ui/core/qunit/routing/async/Target.qunit.js +1 -4
- package/test/sap/ui/core/qunit/routing/fixture/Async1.view.xml +1 -1
- package/test/sap/ui/core/qunit/rule/model/modelSupport.qunit.js +34 -1
- package/test/sap/ui/core/qunit/testdata/fastnavigation/view/FastNavigation.view.xml +2 -2
- package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/i18n.properties +1 -0
- package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/library.js +10 -0
- package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/manifest.json +10 -0
- package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib2/library.js +10 -0
- package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib2/messagebundle.properties +1 -0
- package/test/sap/ui/core/qunit/testdata/xml-require/helper/Formatter.js +7 -4
- package/test/sap/ui/core/qunit/testdata/xml-require/view/XMLTemplateProcessorAsync_require_in_html.view.xml +36 -0
- package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +3 -0
- package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +29 -0
- package/test/sap/ui/core/qunit/types/DateFormatTimezones.qunit.js +1381 -1570
- package/test/sap/ui/core/qunit/types/SimpleType.qunit.js +16 -2
- package/test/sap/ui/core/qunit/types/Types.qunit.js +2 -37
- package/test/sap/ui/core/qunit/types/testsuite.types.qunit.js +1 -1
- package/test/sap/ui/core/qunit/util/Popup.qunit.js +7 -11
- package/test/sap/ui/core/qunit/util/SyncPromise.qunit.js +4 -1
- package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +3 -1
- package/test/sap/ui/core/qunit/util/jQuery.sap.Version.qunit.js +3 -0
- package/test/sap/ui/core/qunit/util/jQuery.sap.measure.qunit.js +16 -11
- package/test/sap/ui/core/qunit/util/reflection/BaseTreeModifier.qunit.js +1 -1
- package/test/sap/ui/core/qunit/xml/XMLListBinding.qunit.js +1 -3
- package/test/sap/ui/core/qunit/xml/XMLModel.qunit.js +4 -14
- package/test/sap/ui/core/qunit/xml/XMLPropertyBinding.qunit.js +7 -11
- package/test/sap/ui/core/qunit/xml/XMLTreeBinding.qunit.js +1 -1
- package/test/sap/ui/core/qunit/xml/XMLTwoWay.qunit.js +3 -7
- package/test/sap/ui/core/relnotes/changes-1.115.json +1 -37
- package/test/sap/ui/core/relnotes/changes-1.116.json +71 -0
- package/test/sap/ui/core/relnotes/changes-1.117.json +127 -0
- package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
- package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
- package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
- package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
- package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
- package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
- package/test/sap/ui/core/visual/images/HyphenationPlayground/windows/1600x1200/chrome/horizon/ltr/cozy/19_thirdParty_language_sl.ref.lnk +1 -1
- package/test/testsuite/js/samples.js +2 -0
- package/ui5.yaml +166 -1
- package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +0 -45
- /package/test/sap/ui/core/qunit/bootstrap/{GlobalConfigurationSettings.js → Configuration.beforeBootstrap.qunit.js} +0 -0
|
@@ -10,10 +10,9 @@ sap.ui.define([
|
|
|
10
10
|
"./_Helper",
|
|
11
11
|
"./_Requestor",
|
|
12
12
|
"sap/base/Log",
|
|
13
|
-
"sap/base/util/isEmptyObject",
|
|
14
13
|
"sap/ui/base/SyncPromise",
|
|
15
14
|
"sap/ui/model/odata/ODataUtils"
|
|
16
|
-
], function (_GroupLock, _Helper, _Requestor, Log,
|
|
15
|
+
], function (_GroupLock, _Helper, _Requestor, Log, SyncPromise, ODataUtils) {
|
|
17
16
|
"use strict";
|
|
18
17
|
/*eslint max-nested-callbacks: 0 */
|
|
19
18
|
|
|
@@ -30,20 +29,6 @@ sap.ui.define([
|
|
|
30
29
|
// (ID='42') -> aMatches[1] === "", aMatches[2] === "(ID='42')"
|
|
31
30
|
rSegmentWithPredicate = /^([^(]*)(\(.*\))$/;
|
|
32
31
|
|
|
33
|
-
/**
|
|
34
|
-
* Adds the given delta to the collection's $count if there is one.
|
|
35
|
-
*
|
|
36
|
-
* @param {object} mChangeListeners A map of change listeners by path
|
|
37
|
-
* @param {string} sPath The path of the collection in the cache (as used by change listeners)
|
|
38
|
-
* @param {array} aCollection The collection
|
|
39
|
-
* @param {number} iDelta The delta
|
|
40
|
-
*/
|
|
41
|
-
function addToCount(mChangeListeners, sPath, aCollection, iDelta) {
|
|
42
|
-
if (aCollection.$count !== undefined) {
|
|
43
|
-
setCount(mChangeListeners, sPath, aCollection, aCollection.$count + iDelta);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
32
|
/**
|
|
48
33
|
* Returns <code>true</code> if <code>sRequestPath</code> is a sub-path of <code>sPath</code>.
|
|
49
34
|
*
|
|
@@ -55,26 +40,6 @@ sap.ui.define([
|
|
|
55
40
|
return sPath === "" || sRequestPath === sPath || sRequestPath.startsWith(sPath + "/");
|
|
56
41
|
}
|
|
57
42
|
|
|
58
|
-
/**
|
|
59
|
-
* Sets the collection's $count: a number representing the sum of the element count on
|
|
60
|
-
* server-side and the number of transient elements created on the client. It may be
|
|
61
|
-
* <code>undefined</code>, but not <code>Infinity</code>.
|
|
62
|
-
*
|
|
63
|
-
* @param {object} mChangeListeners A map of change listeners by path
|
|
64
|
-
* @param {string} sPath The path of the collection in the cache (as used by change listeners)
|
|
65
|
-
* @param {array} aCollection The collection
|
|
66
|
-
* @param {string|number} vCount The count
|
|
67
|
-
*/
|
|
68
|
-
function setCount(mChangeListeners, sPath, aCollection, vCount) {
|
|
69
|
-
// Note: @odata.count is of type Edm.Int64, represented as a string in OData responses;
|
|
70
|
-
// $count should be a number and the loss of precision is acceptable
|
|
71
|
-
if (typeof vCount === "string") {
|
|
72
|
-
vCount = parseInt(vCount);
|
|
73
|
-
}
|
|
74
|
-
// Note: this relies on $count being present as an own property of aCollection
|
|
75
|
-
_Helper.updateExisting(mChangeListeners, sPath, aCollection, {$count : vCount});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
43
|
//*********************************************************************************************
|
|
79
44
|
// Cache
|
|
80
45
|
//*********************************************************************************************
|
|
@@ -87,7 +52,7 @@ sap.ui.define([
|
|
|
87
52
|
* @param {string} sResourcePath
|
|
88
53
|
* A resource path relative to the service URL
|
|
89
54
|
* @param {object} [mQueryOptions]
|
|
90
|
-
* A map of key-value pairs representing the query string
|
|
55
|
+
* A map of key-value pairs representing the query string (requires "copy on write"!)
|
|
91
56
|
* @param {boolean} [bSortExpandSelect]
|
|
92
57
|
* Whether the paths in $expand and $select shall be sorted in the cache's query string;
|
|
93
58
|
* note that this flag can safely be ignored for all "new" features (after 1.47) which
|
|
@@ -190,14 +155,14 @@ sap.ui.define([
|
|
|
190
155
|
_Helper.removeByPath(that.mChangeRequests, sEntityPath, oRequestPromise);
|
|
191
156
|
|
|
192
157
|
if (aMessages.length) {
|
|
193
|
-
oModelInterface.
|
|
158
|
+
oModelInterface.updateMessages(undefined, aMessages);
|
|
194
159
|
}
|
|
195
160
|
|
|
196
161
|
delete oEntity["@$ui5.context.isDeleted"];
|
|
197
162
|
if (Array.isArray(vCacheData)) {
|
|
198
163
|
iIndex = oDeleted.index;
|
|
199
164
|
if (iIndex !== undefined) {
|
|
200
|
-
addToCount(that.mChangeListeners, sParentPath, vCacheData, 1);
|
|
165
|
+
_Helper.addToCount(that.mChangeListeners, sParentPath, vCacheData, 1);
|
|
201
166
|
}
|
|
202
167
|
iDeletedIndex = vCacheData.$deleted.indexOf(oDeleted);
|
|
203
168
|
that.adjustIndexes(sParentPath, vCacheData, iIndex, 1, iDeletedIndex);
|
|
@@ -241,7 +206,7 @@ sap.ui.define([
|
|
|
241
206
|
aMessages = oModelInterface.getMessagesByPath(
|
|
242
207
|
_Helper.buildPath("/", that.sResourcePath, sEntityPath), true);
|
|
243
208
|
|
|
244
|
-
oModelInterface.
|
|
209
|
+
oModelInterface.updateMessages(aMessages);
|
|
245
210
|
|
|
246
211
|
oEntity["@$ui5.context.isDeleted"] = true;
|
|
247
212
|
if (Array.isArray(vCacheData)) {
|
|
@@ -278,7 +243,7 @@ sap.ui.define([
|
|
|
278
243
|
} else if (vDeleteProperty) {
|
|
279
244
|
// set to null and notify listeners
|
|
280
245
|
_Helper.updateExisting(that.mChangeListeners, sParentPath,
|
|
281
|
-
vCacheData,
|
|
246
|
+
vCacheData, _Helper.makeUpdateData([vDeleteProperty], null));
|
|
282
247
|
} else { // deleting at root level
|
|
283
248
|
oEntity["$ui5.deleted"] = true;
|
|
284
249
|
}
|
|
@@ -495,7 +460,7 @@ sap.ui.define([
|
|
|
495
460
|
};
|
|
496
461
|
|
|
497
462
|
/**
|
|
498
|
-
* Creates a transient entity, inserts it
|
|
463
|
+
* Creates a transient entity, inserts it into the list, and adds a POST request to the batch
|
|
499
464
|
* group with the given ID. If the POST request failed, <code>fnErrorCallback</code> is called
|
|
500
465
|
* with an Error object, the POST request is automatically added again to the same batch
|
|
501
466
|
* group (for SubmitMode.API) or parked (for SubmitMode.Auto or SubmitMode.Direct). Parked POST
|
|
@@ -509,8 +474,8 @@ sap.ui.define([
|
|
|
509
474
|
* The collection's path within the cache (as used by change listeners)
|
|
510
475
|
* @param {string} sTransientPredicate
|
|
511
476
|
* A (temporary) key predicate for the transient entity: "($uid=...)"
|
|
512
|
-
* @param {
|
|
513
|
-
* The initial entity data
|
|
477
|
+
* @param {object} oEntityData
|
|
478
|
+
* The initial entity data, already cloned and cleaned of client-side annotations
|
|
514
479
|
* @param {boolean} bAtEndOfCreated
|
|
515
480
|
* Whether the newly created entity should be inserted after previously created entities or at
|
|
516
481
|
* the front of the list.
|
|
@@ -565,7 +530,7 @@ sap.ui.define([
|
|
|
565
530
|
if (!sPath) {
|
|
566
531
|
that.iActiveElements -= 1;
|
|
567
532
|
}
|
|
568
|
-
addToCount(that.mChangeListeners, sPath, aCollection, -1);
|
|
533
|
+
_Helper.addToCount(that.mChangeListeners, sPath, aCollection, -1);
|
|
569
534
|
}
|
|
570
535
|
delete aCollection.$byPredicate[sTransientPredicate];
|
|
571
536
|
that.adjustIndexes(sPath, aCollection, iIndex, -1);
|
|
@@ -615,23 +580,25 @@ sap.ui.define([
|
|
|
615
580
|
// contexts still use the transient predicate to access the data
|
|
616
581
|
} // else: transient element was not kept by #reset, leave it like that!
|
|
617
582
|
}
|
|
583
|
+
_Helper.cancelNestedCreates(oEntityData, "Deep create of " + sPostPath
|
|
584
|
+
+ " succeeded. Do not use this promise.");
|
|
618
585
|
// update the cache with the POST response
|
|
619
|
-
aSelect = _Helper.getQueryOptionsForPath(
|
|
620
|
-
that.mLateQueryOptions || that.mQueryOptions, sPath
|
|
621
|
-
).$select;
|
|
622
586
|
sResultingPath = _Helper.buildPath(sPath, sPredicate || sTransientPredicate);
|
|
623
|
-
//
|
|
624
|
-
|
|
587
|
+
// check for a deep create and update the created nested collections
|
|
588
|
+
const bDeepCreate = _Helper.updateNestedCreates(that.mChangeListeners,
|
|
589
|
+
that.mQueryOptions, sResultingPath, oEntityData, oCreatedEntity,
|
|
590
|
+
_Helper.getPrivateAnnotation(oEntityData, "select"));
|
|
591
|
+
if (!bDeepCreate) { // after a deep create the complete response is accepted
|
|
592
|
+
aSelect = _Helper.getQueryOptionsForPath(
|
|
593
|
+
that.mLateQueryOptions || that.mQueryOptions, sPath
|
|
594
|
+
).$select;
|
|
595
|
+
}
|
|
596
|
+
// update selected properties (or in case of a deep create all of them incl.
|
|
597
|
+
// single-valued navigation properties), ETags, and predicates
|
|
625
598
|
_Helper.updateSelected(that.mChangeListeners, sResultingPath, oEntityData,
|
|
626
599
|
oCreatedEntity, aSelect, /*fnCheckKeyPredicate*/ undefined,
|
|
627
600
|
/*bOkIfMissing*/ true);
|
|
628
|
-
_Helper.
|
|
629
|
-
+ " succeeded. Do not use this promise.");
|
|
630
|
-
_Helper.setPrivateAnnotation(oEntityData, "deepCreate",
|
|
631
|
-
// update properties from collections in a deep create
|
|
632
|
-
that.updateNestedCreates(sResultingPath, oEntityData, oCreatedEntity,
|
|
633
|
-
_Helper.getPrivateAnnotation(oEntityData, "select"))
|
|
634
|
-
);
|
|
601
|
+
_Helper.setPrivateAnnotation(oEntityData, "deepCreate", bDeepCreate);
|
|
635
602
|
_Helper.deletePrivateAnnotation(oEntityData, "select");
|
|
636
603
|
|
|
637
604
|
that.removePendingRequest();
|
|
@@ -671,10 +638,7 @@ sap.ui.define([
|
|
|
671
638
|
+ "' does not reference a collection");
|
|
672
639
|
}
|
|
673
640
|
|
|
674
|
-
|
|
675
|
-
// remove any property starting with "@$ui5."
|
|
676
|
-
oEntityData = _Helper.publicClone(oEntityData, true) || {};
|
|
677
|
-
oPostBody = _Helper.merge({}, oEntityData);
|
|
641
|
+
oPostBody = _Helper.clone(oEntityData);
|
|
678
642
|
// keep post body separate to allow local property changes in the cache
|
|
679
643
|
_Helper.setPrivateAnnotation(oEntityData, "postBody", oPostBody);
|
|
680
644
|
_Helper.setPrivateAnnotation(oEntityData, "transientPredicate", sTransientPredicate);
|
|
@@ -688,7 +652,7 @@ sap.ui.define([
|
|
|
688
652
|
if (!sPath) {
|
|
689
653
|
this.iActiveElements += 1;
|
|
690
654
|
}
|
|
691
|
-
addToCount(this.mChangeListeners, sPath, aCollection, 1);
|
|
655
|
+
_Helper.addToCount(this.mChangeListeners, sPath, aCollection, 1);
|
|
692
656
|
}
|
|
693
657
|
|
|
694
658
|
if (bAtEndOfCreated) {
|
|
@@ -879,13 +843,17 @@ sap.ui.define([
|
|
|
879
843
|
return oPromise.then(function step(vValue, bAgain) {
|
|
880
844
|
var vIndex, aMatches, oParentValue;
|
|
881
845
|
|
|
846
|
+
if (vValue === undefined) {
|
|
847
|
+
// already knowing there is nothing, but unable to stop the reduce loop early
|
|
848
|
+
return undefined;
|
|
849
|
+
}
|
|
882
850
|
if (sSegment === "$count") {
|
|
883
851
|
return Array.isArray(vValue) ? vValue.$count : invalidSegment(sSegment);
|
|
884
852
|
}
|
|
885
|
-
if (vValue ===
|
|
886
|
-
//
|
|
887
|
-
|
|
888
|
-
return
|
|
853
|
+
if (vValue === null) {
|
|
854
|
+
// a complex or navigation property is null -> treat it as transient
|
|
855
|
+
bTransient = true;
|
|
856
|
+
return missingValue({}, sSegment, i + 1);
|
|
889
857
|
}
|
|
890
858
|
if (typeof vValue !== "object" || sSegment === "@$ui5._"
|
|
891
859
|
|| Array.isArray(vValue) && (sSegment[0] === "$" || sSegment === "length")) {
|
|
@@ -952,11 +920,11 @@ sap.ui.define([
|
|
|
952
920
|
* The path of the requested property relative to oResource; this property is requested from
|
|
953
921
|
* the server. For annotations, except client annotations, the annotated property is requested
|
|
954
922
|
* from the server.
|
|
955
|
-
* @returns {Promise
|
|
956
|
-
* A promise
|
|
957
|
-
* or a <code>boolean</code> value if it is not; it
|
|
958
|
-
* failed, or if the key predicate or the ETag has changed. The
|
|
959
|
-
* value tells if the issue can be safely ignored.
|
|
923
|
+
* @returns {Promise<void>|boolean}
|
|
924
|
+
* A promise which is resolved without a defined result if the requested property is an
|
|
925
|
+
* expected late property, or a <code>boolean</code> value if it is not; it is rejected with
|
|
926
|
+
* an error if the GET request failed, or if the key predicate or the ETag has changed. The
|
|
927
|
+
* returned <code>boolean</code> value tells if the issue can be safely ignored.
|
|
960
928
|
*
|
|
961
929
|
* @private
|
|
962
930
|
*/
|
|
@@ -1019,7 +987,7 @@ sap.ui.define([
|
|
|
1019
987
|
}
|
|
1020
988
|
}
|
|
1021
989
|
|
|
1022
|
-
if (!this.mLateQueryOptions) {
|
|
990
|
+
if (!(this.mLateQueryOptions || this.mQueryOptions && this.mQueryOptions.$select)) {
|
|
1023
991
|
return false; // no autoExpandSelect
|
|
1024
992
|
}
|
|
1025
993
|
|
|
@@ -1032,10 +1000,15 @@ sap.ui.define([
|
|
|
1032
1000
|
aUpdateProperties = [sRequestedPropertyPath];
|
|
1033
1001
|
|
|
1034
1002
|
sFullResourceMetaPath = _Helper.buildPath(this.sMetaPath, sResourceMetaPath);
|
|
1003
|
+
mQueryOptions = this.mLateQueryOptions
|
|
1004
|
+
|| { // ensure that $select precedes $expand in the resulting query
|
|
1005
|
+
$select : this.mQueryOptions.$select,
|
|
1006
|
+
$expand : this.mQueryOptions.$expand
|
|
1007
|
+
};
|
|
1035
1008
|
// sRequestedPropertyPath is also a metapath because the binding does not accept a path with
|
|
1036
1009
|
// a collection-valued navigation property for a late property
|
|
1037
1010
|
mQueryOptions = _Helper.intersectQueryOptions(
|
|
1038
|
-
_Helper.getQueryOptionsForPath(
|
|
1011
|
+
_Helper.getQueryOptionsForPath(mQueryOptions, sResourcePath),
|
|
1039
1012
|
[sRequestedPropertyPath], this.oRequestor.getModelInterface().fetchMetadata,
|
|
1040
1013
|
sFullResourceMetaPath);
|
|
1041
1014
|
if (!mQueryOptions) {
|
|
@@ -1308,7 +1281,7 @@ sap.ui.define([
|
|
|
1308
1281
|
/**
|
|
1309
1282
|
* Returns this cache's query options.
|
|
1310
1283
|
*
|
|
1311
|
-
* @returns {object} The query options
|
|
1284
|
+
* @returns {object|undefined} The query options, if any
|
|
1312
1285
|
*
|
|
1313
1286
|
* @public
|
|
1314
1287
|
* @see #setQueryOptions
|
|
@@ -1354,7 +1327,7 @@ sap.ui.define([
|
|
|
1354
1327
|
* @see #registerChangeListener
|
|
1355
1328
|
*/
|
|
1356
1329
|
_Cache.prototype.hasChangeListeners = function () {
|
|
1357
|
-
return !isEmptyObject(this.mChangeListeners);
|
|
1330
|
+
return !_Helper.isEmptyObject(this.mChangeListeners);
|
|
1358
1331
|
};
|
|
1359
1332
|
|
|
1360
1333
|
/**
|
|
@@ -1559,8 +1532,8 @@ sap.ui.define([
|
|
|
1559
1532
|
mInCollectionQueryOptions = {},
|
|
1560
1533
|
sInCollectionUrl,
|
|
1561
1534
|
sKeyFilter,
|
|
1562
|
-
mQueryOptions
|
|
1563
|
-
|
|
1535
|
+
mQueryOptions = _Helper.clone(
|
|
1536
|
+
_Helper.getQueryOptionsForPath(that.mQueryOptions, sPath)),
|
|
1564
1537
|
sReadUrl,
|
|
1565
1538
|
sReadUrlPrefix = _Helper.buildPath(that.sResourcePath, sPath),
|
|
1566
1539
|
aRequests = [],
|
|
@@ -1700,7 +1673,7 @@ sap.ui.define([
|
|
|
1700
1673
|
}
|
|
1701
1674
|
if (iIndex >= 0) {
|
|
1702
1675
|
aElements.splice(iIndex, 1);
|
|
1703
|
-
addToCount(this.mChangeListeners, sPath, aElements, -1);
|
|
1676
|
+
_Helper.addToCount(this.mChangeListeners, sPath, aElements, -1);
|
|
1704
1677
|
if (sTransientPredicate) {
|
|
1705
1678
|
aElements.$created -= 1;
|
|
1706
1679
|
if (!sPath) {
|
|
@@ -1839,7 +1812,7 @@ sap.ui.define([
|
|
|
1839
1812
|
}).then(function (oResult) {
|
|
1840
1813
|
var iCount = parseInt(oResult["@odata.count"]) + that.iActiveElements;
|
|
1841
1814
|
|
|
1842
|
-
setCount(that.mChangeListeners, "", that.aElements, iCount);
|
|
1815
|
+
_Helper.setCount(that.mChangeListeners, "", that.aElements, iCount);
|
|
1843
1816
|
that.iLimit = iCount;
|
|
1844
1817
|
return iCount;
|
|
1845
1818
|
});
|
|
@@ -1983,7 +1956,7 @@ sap.ui.define([
|
|
|
1983
1956
|
return this.fetchValue(_GroupLock.$cached, sEntityPath, null, null, true)
|
|
1984
1957
|
.then(function (oEntity) {
|
|
1985
1958
|
_Helper.updateAll(that.mChangeListeners, sEntityPath, oEntity,
|
|
1986
|
-
|
|
1959
|
+
_Helper.makeUpdateData(sPropertyPath.split("/"), vValue, bUpdating));
|
|
1987
1960
|
});
|
|
1988
1961
|
};
|
|
1989
1962
|
|
|
@@ -2119,7 +2092,7 @@ sap.ui.define([
|
|
|
2119
2092
|
bSkip,
|
|
2120
2093
|
sTransientGroup,
|
|
2121
2094
|
sUnitOrCurrencyValue,
|
|
2122
|
-
oUpdateData =
|
|
2095
|
+
oUpdateData = _Helper.makeUpdateData(aPropertyPath, vValue);
|
|
2123
2096
|
|
|
2124
2097
|
/*
|
|
2125
2098
|
* Synchronous callback to cancel the PATCH request so that it is really gone when
|
|
@@ -2275,7 +2248,7 @@ sap.ui.define([
|
|
|
2275
2248
|
}
|
|
2276
2249
|
// remember the old value
|
|
2277
2250
|
oOldData
|
|
2278
|
-
=
|
|
2251
|
+
= _Helper.makeUpdateData(aPropertyPath, _Helper.drillDown(oEntity, aPropertyPath));
|
|
2279
2252
|
|
|
2280
2253
|
oPostBody = _Helper.getPrivateAnnotation(oEntity, "postBody");
|
|
2281
2254
|
if (oPostBody) {
|
|
@@ -2285,7 +2258,7 @@ sap.ui.define([
|
|
|
2285
2258
|
oUpdateData["@$ui5.context.isInactive"] = false;
|
|
2286
2259
|
_Helper.deletePrivateAnnotation(oEntity, "initialData");
|
|
2287
2260
|
that.iActiveElements += 1;
|
|
2288
|
-
addToCount(that.mChangeListeners, "", that.aElements, 1);
|
|
2261
|
+
_Helper.addToCount(that.mChangeListeners, "", that.aElements, 1);
|
|
2289
2262
|
}
|
|
2290
2263
|
}
|
|
2291
2264
|
// write the changed value into the cache
|
|
@@ -2302,7 +2275,7 @@ sap.ui.define([
|
|
|
2302
2275
|
} else {
|
|
2303
2276
|
// some servers need unit and currency information
|
|
2304
2277
|
_Helper.merge(sTransientGroup ? oPostBody : oUpdateData,
|
|
2305
|
-
|
|
2278
|
+
_Helper.makeUpdateData(aUnitOrCurrencyPath, sUnitOrCurrencyValue));
|
|
2306
2279
|
}
|
|
2307
2280
|
}
|
|
2308
2281
|
if (sTransientGroup) {
|
|
@@ -2328,79 +2301,6 @@ sap.ui.define([
|
|
|
2328
2301
|
});
|
|
2329
2302
|
};
|
|
2330
2303
|
|
|
2331
|
-
/**
|
|
2332
|
-
* Creates key predicates and rebuilds the nested entity collections after a deep create (in the
|
|
2333
|
-
* assumption that the response may differ significantly from the request regarding order and
|
|
2334
|
-
* count).
|
|
2335
|
-
*
|
|
2336
|
-
* @param {string} sPath - The path of the created entity within the cache
|
|
2337
|
-
* @param {object} oCacheEntity - The entity in the cache
|
|
2338
|
-
* @param {object} oCreatedEntity - The created entity from the response
|
|
2339
|
-
* @param {object} mSelectForMetaPath
|
|
2340
|
-
* A map of $select properties per meta path of the nested collections
|
|
2341
|
-
* @returns {boolean} Whether there actually was a deep create
|
|
2342
|
-
*
|
|
2343
|
-
* @private
|
|
2344
|
-
*/
|
|
2345
|
-
_Cache.prototype.updateNestedCreates = function (sPath, oCacheEntity, oCreatedEntity,
|
|
2346
|
-
mSelectForMetaPath) {
|
|
2347
|
-
var bDeepCreate = false,
|
|
2348
|
-
that = this;
|
|
2349
|
-
|
|
2350
|
-
if (!mSelectForMetaPath) { // no nested collections -> no deep create
|
|
2351
|
-
return false;
|
|
2352
|
-
}
|
|
2353
|
-
|
|
2354
|
-
Object.keys(mSelectForMetaPath).filter(function (sMetaPath) {
|
|
2355
|
-
return !sMetaPath.includes("/"); // only look at the direct descendants
|
|
2356
|
-
}).forEach(function (sSegment) {
|
|
2357
|
-
var sCollectionPath = sPath + "/" + sSegment,
|
|
2358
|
-
aNestedCacheEntities,
|
|
2359
|
-
aNestedCreatedEntities = oCreatedEntity[sSegment],
|
|
2360
|
-
sPrefix = sSegment + "/",
|
|
2361
|
-
aSelect,
|
|
2362
|
-
mSelectForChildMetaPath = {};
|
|
2363
|
-
|
|
2364
|
-
if (!aNestedCreatedEntities) { // create not called in this nested collection
|
|
2365
|
-
// #addTransientEntity added this in preparation of a deep create
|
|
2366
|
-
delete oCacheEntity[sSegment];
|
|
2367
|
-
return;
|
|
2368
|
-
}
|
|
2369
|
-
|
|
2370
|
-
aSelect = mSelectForMetaPath[sSegment]
|
|
2371
|
-
|| _Helper.getQueryOptionsForPath(that.mQueryOptions, sCollectionPath).$select;
|
|
2372
|
-
// rebuild the collection from the response only taking the selected properties
|
|
2373
|
-
oCacheEntity[sSegment] = aNestedCacheEntities
|
|
2374
|
-
= new Array(aNestedCreatedEntities.length);
|
|
2375
|
-
aNestedCacheEntities.$count = undefined; // so that setCount always fires a change event
|
|
2376
|
-
aNestedCacheEntities.$created = 0;
|
|
2377
|
-
aNestedCacheEntities.$byPredicate = {};
|
|
2378
|
-
setCount(that.mChangeListeners, sCollectionPath, aNestedCacheEntities,
|
|
2379
|
-
aNestedCreatedEntities.length);
|
|
2380
|
-
// build the next level
|
|
2381
|
-
Object.keys(mSelectForMetaPath).forEach(function (sMetaPath) {
|
|
2382
|
-
if (sMetaPath.startsWith(sPrefix)) {
|
|
2383
|
-
mSelectForChildMetaPath[sMetaPath.slice(sPrefix.length)]
|
|
2384
|
-
= mSelectForMetaPath[sMetaPath];
|
|
2385
|
-
}
|
|
2386
|
-
});
|
|
2387
|
-
aNestedCreatedEntities.forEach(function (oCreatedChildEntity, i) {
|
|
2388
|
-
var sPredicate = _Helper.getPrivateAnnotation(oCreatedChildEntity, "predicate");
|
|
2389
|
-
|
|
2390
|
-
aNestedCacheEntities.$byPredicate[sPredicate] = aNestedCacheEntities[i] = {};
|
|
2391
|
-
// no change events, the listeners are recreated anyway
|
|
2392
|
-
_Helper.updateSelected({}, sCollectionPath + sPredicate, aNestedCacheEntities[i],
|
|
2393
|
-
oCreatedChildEntity, aSelect, /*fnCheckKeyPredicate*/undefined, true);
|
|
2394
|
-
that.updateNestedCreates(sCollectionPath + sPredicate, aNestedCacheEntities[i],
|
|
2395
|
-
oCreatedChildEntity, mSelectForChildMetaPath);
|
|
2396
|
-
});
|
|
2397
|
-
|
|
2398
|
-
bDeepCreate = true;
|
|
2399
|
-
});
|
|
2400
|
-
|
|
2401
|
-
return bDeepCreate;
|
|
2402
|
-
};
|
|
2403
|
-
|
|
2404
2304
|
/**
|
|
2405
2305
|
* Processes the response from the server. All arrays are annotated by their length, influenced
|
|
2406
2306
|
* by the annotations "@odata.count" and "@odata.nextLink". Recursively calculates the key
|
|
@@ -2556,15 +2456,16 @@ sap.ui.define([
|
|
|
2556
2456
|
if (Array.isArray(vPropertyValue)) {
|
|
2557
2457
|
vPropertyValue.$created = 0; // number of (client-side) created elements
|
|
2558
2458
|
// compute count
|
|
2559
|
-
vPropertyValue.$count = undefined; // see setCount
|
|
2560
2459
|
sCount = oInstance[sProperty + "@odata.count"];
|
|
2561
2460
|
// Note: ignore change listeners, because any change listener that is already
|
|
2562
2461
|
// registered, is still waiting for its value and gets it via fetchValue
|
|
2563
2462
|
if (sCount) {
|
|
2564
|
-
|
|
2463
|
+
vPropertyValue.$count = parseInt(sCount);
|
|
2565
2464
|
} else if (!oInstance[sProperty + "@odata.nextLink"]) {
|
|
2566
2465
|
// Note: This relies on the fact that $skip/$top is not used on nested lists
|
|
2567
|
-
|
|
2466
|
+
vPropertyValue.$count = vPropertyValue.length;
|
|
2467
|
+
} else {
|
|
2468
|
+
vPropertyValue.$count = undefined; // see _Helper.setCount
|
|
2568
2469
|
}
|
|
2569
2470
|
visitArray(vPropertyValue, sPropertyMetaPath, sPropertyPath,
|
|
2570
2471
|
buildContextUrl(sContextUrl, oInstance[sProperty + "@odata.context"]));
|
|
@@ -2624,7 +2525,7 @@ sap.ui.define([
|
|
|
2624
2525
|
this.sContext = undefined; // the "@odata.context" from the responses
|
|
2625
2526
|
this.aElements = []; // the available elements
|
|
2626
2527
|
this.aElements.$byPredicate = {};
|
|
2627
|
-
this.aElements.$count = undefined; // see setCount
|
|
2528
|
+
this.aElements.$count = undefined; // see _Helper.setCount
|
|
2628
2529
|
// number of all (client-side) created elements (active or inactive)
|
|
2629
2530
|
this.aElements.$created = 0;
|
|
2630
2531
|
this.aElements.$tail = undefined; // promise for a read w/o $top
|
|
@@ -3005,7 +2906,7 @@ sap.ui.define([
|
|
|
3005
2906
|
}
|
|
3006
2907
|
}
|
|
3007
2908
|
if (iLimit !== -1) {
|
|
3008
|
-
setCount(this.mChangeListeners, "", this.aElements,
|
|
2909
|
+
_Helper.setCount(this.mChangeListeners, "", this.aElements,
|
|
3009
2910
|
iLimit !== undefined ? iLimit + this.iActiveElements : undefined);
|
|
3010
2911
|
}
|
|
3011
2912
|
|
|
@@ -3260,9 +3161,9 @@ sap.ui.define([
|
|
|
3260
3161
|
* no longer exist after refresh; the index is undefined for a non-created element
|
|
3261
3162
|
* @param {boolean} [bDropApply]
|
|
3262
3163
|
* Whether to drop the "$apply" system query option from the resulting GET
|
|
3263
|
-
* @returns {Promise
|
|
3264
|
-
* A promise
|
|
3265
|
-
* fails, or <code>undefined</code> if there are no kept-alive elements.
|
|
3164
|
+
* @returns {Promise<void>|undefined}
|
|
3165
|
+
* A promise which is resolved without a defined result, or rejected with an error if the
|
|
3166
|
+
* refresh fails, or <code>undefined</code> if there are no kept-alive elements.
|
|
3266
3167
|
* @throws {Error}
|
|
3267
3168
|
* If the cache is shared
|
|
3268
3169
|
*
|
|
@@ -3283,7 +3184,7 @@ sap.ui.define([
|
|
|
3283
3184
|
*/
|
|
3284
3185
|
function calculateKeptElementsQuery() {
|
|
3285
3186
|
var aKeyFilters,
|
|
3286
|
-
mQueryOptions = _Helper.
|
|
3187
|
+
mQueryOptions = _Helper.clone(that.mQueryOptions);
|
|
3287
3188
|
|
|
3288
3189
|
if (that.mLateQueryOptions) {
|
|
3289
3190
|
_Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
|
|
@@ -3361,6 +3262,20 @@ sap.ui.define([
|
|
|
3361
3262
|
});
|
|
3362
3263
|
};
|
|
3363
3264
|
|
|
3265
|
+
/**
|
|
3266
|
+
* Removes the element with the given predicate from $byPredicate of the cache's element list.
|
|
3267
|
+
*
|
|
3268
|
+
* @param {string} sPredicate - The predicate
|
|
3269
|
+
* @throws {Error}
|
|
3270
|
+
* If the cache is shared
|
|
3271
|
+
*
|
|
3272
|
+
* @public
|
|
3273
|
+
*/
|
|
3274
|
+
_CollectionCache.prototype.removeKeptElement = function (sPredicate) {
|
|
3275
|
+
this.checkSharedRequest();
|
|
3276
|
+
delete this.aElements.$byPredicate[sPredicate];
|
|
3277
|
+
};
|
|
3278
|
+
|
|
3364
3279
|
/**
|
|
3365
3280
|
* Requests the elements in the given range and places them into the aElements list. Calculates
|
|
3366
3281
|
* the key predicates for all entities in the result before the promise is resolved. While the
|
|
@@ -3377,8 +3292,8 @@ sap.ui.define([
|
|
|
3377
3292
|
* @param {function} [fnDataRequested]
|
|
3378
3293
|
* The function is called when the back-end requests have been sent.
|
|
3379
3294
|
* @returns {sap.ui.base.SyncPromise}
|
|
3380
|
-
* A promise
|
|
3381
|
-
* case of error
|
|
3295
|
+
* A promise which is resolved without a defined result when the request is finished and
|
|
3296
|
+
* rejected in case of error
|
|
3382
3297
|
* @throws {Error}
|
|
3383
3298
|
* If group ID is '$cached'. The error has a property <code>$cached = true</code>
|
|
3384
3299
|
*
|
|
@@ -3443,9 +3358,9 @@ sap.ui.define([
|
|
|
3443
3358
|
* in this case
|
|
3444
3359
|
* @param {boolean} bWithMessages
|
|
3445
3360
|
* Whether the "@com.sap.vocabularies.Common.v1.Messages" path is treated specially
|
|
3446
|
-
* @returns {Promise
|
|
3447
|
-
* A promise
|
|
3448
|
-
* effects fails
|
|
3361
|
+
* @returns {Promise<void>|sap.ui.base.SyncPromise}
|
|
3362
|
+
* A promise which is resolved without a defined result, or rejected with an error if loading
|
|
3363
|
+
* of side effects fails
|
|
3449
3364
|
* @throws {Error}
|
|
3450
3365
|
* If group ID is '$cached' (the error has a property <code>$cached = true</code> then) or if
|
|
3451
3366
|
* the cache is shared
|
|
@@ -3618,7 +3533,7 @@ sap.ui.define([
|
|
|
3618
3533
|
this.sContext = undefined;
|
|
3619
3534
|
this.aElements.length = this.aElements.$created = iCreated;
|
|
3620
3535
|
this.aElements.$byPredicate = {};
|
|
3621
|
-
this.aElements.$count = undefined; // needed for setCount
|
|
3536
|
+
this.aElements.$count = undefined; // needed for _Helper.setCount
|
|
3622
3537
|
this.iLimit = Infinity;
|
|
3623
3538
|
|
|
3624
3539
|
Object.keys(mChangeListeners).forEach(function (sPath) {
|
|
@@ -4002,6 +3917,11 @@ sap.ui.define([
|
|
|
4002
3917
|
]).then(function (aResult) {
|
|
4003
3918
|
that.buildOriginalResourcePath(aResult[0], aResult[1], fnGetOriginalResourcePath);
|
|
4004
3919
|
that.visitResponse(aResult[0], aResult[1]);
|
|
3920
|
+
if (that.mQueryOptions && that.mQueryOptions.$select) {
|
|
3921
|
+
// add "@$ui5.noData" annotations, e.g. for missing Edm.Stream properties
|
|
3922
|
+
_Helper.updateSelected({}, "", aResult[0], aResult[0],
|
|
3923
|
+
that.mQueryOptions.$select);
|
|
3924
|
+
}
|
|
4005
3925
|
that.bPosting = false;
|
|
4006
3926
|
if (oRequestLock) {
|
|
4007
3927
|
oRequestLock.unlock();
|
|
@@ -4052,7 +3972,7 @@ sap.ui.define([
|
|
|
4052
3972
|
if (oData) {
|
|
4053
3973
|
sHttpMethod = oData["X-HTTP-Method"] || sHttpMethod;
|
|
4054
3974
|
delete oData["X-HTTP-Method"];
|
|
4055
|
-
if (this.oRequestor.isActionBodyOptional() &&
|
|
3975
|
+
if (this.oRequestor.isActionBodyOptional() && _Helper.isEmptyObject(oData)) {
|
|
4056
3976
|
oData = undefined;
|
|
4057
3977
|
}
|
|
4058
3978
|
}
|
|
@@ -4080,8 +4000,8 @@ sap.ui.define([
|
|
|
4080
4000
|
* @param {string} [sResourcePath=this.sResourcePath]
|
|
4081
4001
|
* A resource path relative to the service URL; it must not contain a query string
|
|
4082
4002
|
* @returns {sap.ui.base.SyncPromise}
|
|
4083
|
-
* A promise
|
|
4084
|
-
* effects fails.
|
|
4003
|
+
* A promise which is resolved without a defined result, or rejected with an error if loading
|
|
4004
|
+
* of side effects fails.
|
|
4085
4005
|
* @throws {Error} If the side effects require a $expand, if group ID is '$cached' (the error
|
|
4086
4006
|
* has a property <code>$cached = true</code> then), or if the cache is shared
|
|
4087
4007
|
*
|
|
@@ -4465,39 +4385,5 @@ sap.ui.define([
|
|
|
4465
4385
|
return iIndex;
|
|
4466
4386
|
};
|
|
4467
4387
|
|
|
4468
|
-
/**
|
|
4469
|
-
* Makes an object that has the given value exactly at the given property path allowing to use
|
|
4470
|
-
* the result in _Helper.updateExisting().
|
|
4471
|
-
*
|
|
4472
|
-
* Examples:
|
|
4473
|
-
* <ul>
|
|
4474
|
-
* <li> ["Age"], 42 -> {Age: 42}
|
|
4475
|
-
* <li> ["Address", "City"], "Walldorf" -> {Address: {City: "Walldorf"}}
|
|
4476
|
-
* </ul>
|
|
4477
|
-
*
|
|
4478
|
-
* @param {string[]} aPropertyPath
|
|
4479
|
-
* The property path split into an array of segments
|
|
4480
|
-
* @param {any} vValue
|
|
4481
|
-
* The property value
|
|
4482
|
-
* @param {boolean} [bUpdating]
|
|
4483
|
-
* Whether the given property will not be overwritten by a creation POST(+GET) response
|
|
4484
|
-
* @returns {object}
|
|
4485
|
-
* The resulting object
|
|
4486
|
-
*
|
|
4487
|
-
* @private
|
|
4488
|
-
*/
|
|
4489
|
-
_Cache.makeUpdateData = function (aPropertyPath, vValue, bUpdating) {
|
|
4490
|
-
return aPropertyPath.reduceRight(function (vValue0, sSegment) {
|
|
4491
|
-
var oResult = {};
|
|
4492
|
-
|
|
4493
|
-
oResult[sSegment] = vValue0;
|
|
4494
|
-
if (bUpdating) {
|
|
4495
|
-
oResult[sSegment + "@$ui5.updating"] = true;
|
|
4496
|
-
bUpdating = false;
|
|
4497
|
-
}
|
|
4498
|
-
return oResult;
|
|
4499
|
-
}, vValue);
|
|
4500
|
-
};
|
|
4501
|
-
|
|
4502
4388
|
return _Cache;
|
|
4503
4389
|
}, /* bExport= */false);
|