@openui5/sap.ui.core 1.115.0 → 1.116.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.
Files changed (541) hide show
  1. package/.dtsgenrc +18 -0
  2. package/.eslintrc.json +11 -0
  3. package/.reuse/dep5 +0 -5
  4. package/THIRDPARTY.txt +1 -7
  5. package/package.json +1 -1
  6. package/src/jquery.sap.global.js +1 -1
  7. package/src/jquery.sap.properties.js +1 -1
  8. package/src/jquery.sap.resources.js +1 -1
  9. package/src/jquery.sap.script.js +1 -1
  10. package/src/jquery.sap.sjax.js +2 -2
  11. package/src/jquery.sap.storage.js +3 -3
  12. package/src/sap/base/Event.js +106 -0
  13. package/src/sap/base/Eventing.js +320 -0
  14. package/src/sap/base/config.js +1 -1
  15. package/src/sap/base/i18n/Formatting.js +991 -0
  16. package/src/sap/base/i18n/LanguageTag.js +189 -0
  17. package/src/sap/base/i18n/Localization.js +711 -0
  18. package/src/sap/base/i18n/ResourceBundle.js +5 -20
  19. package/src/sap/base/i18n/date/CalendarType.js +54 -0
  20. package/src/sap/base/i18n/date/CalendarWeekNumbering.js +105 -0
  21. package/src/sap/base/i18n/date/TimezoneUtils.js +287 -0
  22. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  23. package/src/sap/base/util/restricted/_castArray.js +1 -1
  24. package/src/sap/base/util/restricted/_compact.js +1 -1
  25. package/src/sap/base/util/restricted/_curry.js +1 -1
  26. package/src/sap/base/util/restricted/_debounce.js +1 -1
  27. package/src/sap/base/util/restricted/_difference.js +1 -1
  28. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  29. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  30. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  31. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  32. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  33. package/src/sap/base/util/restricted/_flatten.js +1 -1
  34. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  35. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  36. package/src/sap/base/util/restricted/_intersection.js +1 -1
  37. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  38. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  39. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  40. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  41. package/src/sap/base/util/restricted/_isNil.js +1 -1
  42. package/src/sap/base/util/restricted/_max.js +1 -1
  43. package/src/sap/base/util/restricted/_merge.js +1 -1
  44. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  45. package/src/sap/base/util/restricted/_min.js +1 -1
  46. package/src/sap/base/util/restricted/_omit.js +1 -1
  47. package/src/sap/base/util/restricted/_pick.js +1 -1
  48. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  49. package/src/sap/base/util/restricted/_throttle.js +1 -1
  50. package/src/sap/base/util/restricted/_toArray.js +1 -1
  51. package/src/sap/base/util/restricted/_union.js +1 -1
  52. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  53. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  54. package/src/sap/base/util/restricted/_uniq.js +1 -1
  55. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  56. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  57. package/src/sap/base/util/restricted/_without.js +1 -1
  58. package/src/sap/base/util/restricted/_xor.js +1 -1
  59. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  60. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  61. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  62. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  63. package/src/sap/ui/Device.js +3 -3
  64. package/src/sap/ui/Global.js +4 -4
  65. package/src/sap/ui/base/Event.js +1 -1
  66. package/src/sap/ui/base/EventProvider.js +4 -12
  67. package/src/sap/ui/base/Interface.js +1 -1
  68. package/src/sap/ui/base/ManagedObject.js +8 -12
  69. package/src/sap/ui/base/ManagedObjectMetadata.js +30 -7
  70. package/src/sap/ui/base/Metadata.js +1 -1
  71. package/src/sap/ui/base/Object.js +1 -1
  72. package/src/sap/ui/base/ObjectPool.js +1 -1
  73. package/src/sap/ui/base/SyncPromise.js +10 -5
  74. package/src/sap/ui/core/.library +2 -2
  75. package/src/sap/ui/core/AccessKeysEnablement.js +10 -5
  76. package/src/sap/ui/core/AnimationMode.js +49 -0
  77. package/src/sap/ui/core/BusyIndicator.js +33 -42
  78. package/src/sap/ui/core/CalendarType.js +11 -37
  79. package/src/sap/ui/core/Component.js +4 -5
  80. package/src/sap/ui/core/ComponentContainer.js +1 -1
  81. package/src/sap/ui/core/ComponentMetadata.js +2 -2
  82. package/src/sap/ui/core/ComponentSupport.js +1 -1
  83. package/src/sap/ui/core/Configuration.js +409 -1270
  84. package/src/sap/ui/core/Control.js +4 -12
  85. package/src/sap/ui/core/ControlBehavior.js +157 -0
  86. package/src/sap/ui/core/Core.js +124 -132
  87. package/src/sap/ui/core/CustomData.js +1 -1
  88. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  89. package/src/sap/ui/core/Element.js +14 -3
  90. package/src/sap/ui/core/ElementMetadata.js +1 -1
  91. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  92. package/src/sap/ui/core/EventBus.js +1 -1
  93. package/src/sap/ui/core/Fragment.js +1 -1
  94. package/src/sap/ui/core/HTML.js +1 -1
  95. package/src/sap/ui/core/History.js +1 -1
  96. package/src/sap/ui/core/Icon.js +1 -1
  97. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  98. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  99. package/src/sap/ui/core/InvisibleMessage.js +5 -7
  100. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  101. package/src/sap/ui/core/InvisibleText.js +12 -12
  102. package/src/sap/ui/core/Item.js +1 -1
  103. package/src/sap/ui/core/LabelEnablement.js +1 -1
  104. package/src/sap/ui/core/LayoutData.js +1 -1
  105. package/src/sap/ui/core/Lib.js +109 -22
  106. package/src/sap/ui/core/ListItem.js +1 -1
  107. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  108. package/src/sap/ui/core/Locale.js +151 -430
  109. package/src/sap/ui/core/LocaleData.js +39 -11
  110. package/src/sap/ui/core/Manifest.js +1 -1
  111. package/src/sap/ui/core/Message.js +1 -1
  112. package/src/sap/ui/core/RenderManager.js +1 -1
  113. package/src/sap/ui/core/Renderer.js +1 -1
  114. package/src/sap/ui/core/ResizeHandler.js +1 -1
  115. package/src/sap/ui/core/ScrollBar.js +1 -1
  116. package/src/sap/ui/core/SeparatorItem.js +1 -1
  117. package/src/sap/ui/core/StaticArea.js +31 -17
  118. package/src/sap/ui/core/Theming.js +451 -0
  119. package/src/sap/ui/core/Title.js +1 -1
  120. package/src/sap/ui/core/TooltipBase.js +1 -1
  121. package/src/sap/ui/core/UIArea.js +1 -1
  122. package/src/sap/ui/core/UIComponent.js +1 -1
  123. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  124. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  125. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  126. package/src/sap/ui/core/XMLComposite.js +1 -1
  127. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  128. package/src/sap/ui/core/XMLTemplateProcessor.js +1 -0
  129. package/src/sap/ui/core/_IconRegistry.js +7 -1
  130. package/src/sap/ui/core/date/CalendarWeekNumbering.js +12 -83
  131. package/src/sap/ui/core/date/UI5Date.js +2 -2
  132. package/src/sap/ui/core/delegate/ItemNavigation.js +8 -10
  133. package/src/sap/ui/core/delegate/ScrollEnablement.js +5 -5
  134. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  135. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  136. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  137. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  138. package/src/sap/ui/core/format/DateFormat.js +20 -15
  139. package/src/sap/ui/core/format/TimezoneUtil.js +15 -273
  140. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  141. package/src/sap/ui/core/library.js +3 -3
  142. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  143. package/src/sap/ui/core/message/Message.js +1 -1
  144. package/src/sap/ui/core/message/MessageManager.js +1 -1
  145. package/src/sap/ui/core/message/MessageParser.js +1 -1
  146. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  147. package/src/sap/ui/core/messagebundle_cs.properties +1 -1
  148. package/src/sap/ui/core/messagebundle_cy.properties +1 -1
  149. package/src/sap/ui/core/messagebundle_da.properties +1 -1
  150. package/src/sap/ui/core/messagebundle_de.properties +1 -1
  151. package/src/sap/ui/core/messagebundle_el.properties +1 -1
  152. package/src/sap/ui/core/messagebundle_en.properties +1 -1
  153. package/src/sap/ui/core/messagebundle_en_GB.properties +1 -1
  154. package/src/sap/ui/core/messagebundle_es.properties +1 -1
  155. package/src/sap/ui/core/messagebundle_es_MX.properties +1 -1
  156. package/src/sap/ui/core/messagebundle_et.properties +1 -1
  157. package/src/sap/ui/core/messagebundle_id.properties +1 -1
  158. package/src/sap/ui/core/messagebundle_it.properties +49 -49
  159. package/src/sap/ui/core/messagebundle_iw.properties +1 -1
  160. package/src/sap/ui/core/messagebundle_kk.properties +1 -1
  161. package/src/sap/ui/core/messagebundle_ko.properties +1 -1
  162. package/src/sap/ui/core/messagebundle_lt.properties +1 -1
  163. package/src/sap/ui/core/messagebundle_lv.properties +1 -1
  164. package/src/sap/ui/core/messagebundle_ms.properties +8 -8
  165. package/src/sap/ui/core/messagebundle_nl.properties +1 -1
  166. package/src/sap/ui/core/messagebundle_no.properties +1 -1
  167. package/src/sap/ui/core/messagebundle_pl.properties +1 -1
  168. package/src/sap/ui/core/messagebundle_pt.properties +1 -1
  169. package/src/sap/ui/core/messagebundle_pt_PT.properties +1 -1
  170. package/src/sap/ui/core/messagebundle_ro.properties +1 -1
  171. package/src/sap/ui/core/messagebundle_sh.properties +1 -1
  172. package/src/sap/ui/core/messagebundle_sv.properties +1 -1
  173. package/src/sap/ui/core/messagebundle_th.properties +1 -1
  174. package/src/sap/ui/core/messagebundle_uk.properties +21 -21
  175. package/src/sap/ui/core/messagebundle_vi.properties +1 -1
  176. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  177. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  178. package/src/sap/ui/core/mvc/JSView.js +1 -1
  179. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  180. package/src/sap/ui/core/mvc/View.js +1 -1
  181. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  182. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  183. package/src/sap/ui/core/plugin/LessSupport.js +14 -16
  184. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  185. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  186. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  187. package/src/sap/ui/core/routing/HashChanger.js +1 -0
  188. package/src/sap/ui/core/routing/Route.js +1 -0
  189. package/src/sap/ui/core/routing/Router.js +3 -1
  190. package/src/sap/ui/core/rules/Config.support.js +2 -2
  191. package/src/sap/ui/core/rules/Model.support.js +3 -1
  192. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  193. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  194. package/src/sap/ui/core/service/Service.js +1 -1
  195. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  196. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  197. package/src/sap/ui/core/support/Plugin.js +1 -1
  198. package/src/sap/ui/core/support/Support.js +1 -1
  199. package/src/sap/ui/core/support/controls/TimelineOverview.js +1 -1
  200. package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
  201. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  202. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  203. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  204. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  205. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  206. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  207. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  208. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +4 -4
  209. package/src/sap/ui/core/themes/base/base.less +41 -20
  210. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  211. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  212. package/src/sap/ui/core/theming/Parameters.js +6 -5
  213. package/src/sap/ui/core/theming/ThemeManager.js +310 -447
  214. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  215. package/src/sap/ui/core/tmpl/DOMElement.js +5 -10
  216. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  217. package/src/sap/ui/core/tmpl/Template.js +1 -1
  218. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  219. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  220. package/src/sap/ui/core/util/Export.js +1 -1
  221. package/src/sap/ui/core/util/ExportCell.js +1 -1
  222. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  223. package/src/sap/ui/core/util/ExportRow.js +1 -1
  224. package/src/sap/ui/core/util/ExportType.js +1 -1
  225. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  226. package/src/sap/ui/core/util/File.js +1 -1
  227. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  228. package/src/sap/ui/core/util/MockServer.js +1 -1
  229. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  230. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +3 -1
  231. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  232. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  233. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  234. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  235. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  236. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  237. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  238. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  239. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  240. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  241. package/src/sap/ui/debug/ControlTree.js +1 -1
  242. package/src/sap/ui/debug/DebugEnv.js +1 -1
  243. package/src/sap/ui/debug/PropertyList.js +1 -1
  244. package/src/sap/ui/events/PseudoEvents.js +17 -9
  245. package/src/sap/ui/model/Binding.js +19 -15
  246. package/src/sap/ui/model/ClientModel.js +1 -1
  247. package/src/sap/ui/model/CompositeBinding.js +57 -19
  248. package/src/sap/ui/model/CompositeDataState.js +1 -1
  249. package/src/sap/ui/model/CompositeType.js +1 -1
  250. package/src/sap/ui/model/DataState.js +1 -1
  251. package/src/sap/ui/model/ListBinding.js +42 -1
  252. package/src/sap/ui/model/MetaModel.js +1 -1
  253. package/src/sap/ui/model/Model.js +5 -4
  254. package/src/sap/ui/model/PropertyBinding.js +10 -0
  255. package/src/sap/ui/model/SelectionModel.js +1 -1
  256. package/src/sap/ui/model/SimpleType.js +4 -1
  257. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  258. package/src/sap/ui/model/Type.js +1 -1
  259. package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
  260. package/src/sap/ui/model/json/JSONModel.js +1 -1
  261. package/src/sap/ui/model/message/MessageModel.js +1 -1
  262. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  263. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  264. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  265. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  266. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  267. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  268. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  269. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  270. package/src/sap/ui/model/odata/type/Date.js +1 -1
  271. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  272. package/src/sap/ui/model/odata/type/DateTimeBase.js +8 -1
  273. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  274. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  275. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  276. package/src/sap/ui/model/odata/type/Double.js +1 -1
  277. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  278. package/src/sap/ui/model/odata/type/Int.js +1 -1
  279. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  280. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  281. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  282. package/src/sap/ui/model/odata/type/ODataType.js +3 -3
  283. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  284. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  285. package/src/sap/ui/model/odata/type/Single.js +1 -1
  286. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  287. package/src/sap/ui/model/odata/type/String.js +1 -1
  288. package/src/sap/ui/model/odata/type/Time.js +1 -1
  289. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  290. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  291. package/src/sap/ui/model/odata/v2/Context.js +3 -2
  292. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  293. package/src/sap/ui/model/odata/v2/ODataListBinding.js +14 -3
  294. package/src/sap/ui/model/odata/v2/ODataModel.js +45 -31
  295. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  296. package/src/sap/ui/model/odata/v4/Context.js +7 -3
  297. package/src/sap/ui/model/odata/v4/ODataBinding.js +68 -39
  298. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +12 -8
  299. package/src/sap/ui/model/odata/v4/ODataListBinding.js +30 -8
  300. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +11 -9
  301. package/src/sap/ui/model/odata/v4/ODataModel.js +10 -14
  302. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +64 -31
  303. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +21 -16
  304. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +2 -0
  305. package/src/sap/ui/model/odata/v4/lib/_Cache.js +37 -14
  306. package/src/sap/ui/model/odata/v4/lib/_Helper.js +11 -1
  307. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +7 -4
  308. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +4 -4
  309. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
  310. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  311. package/src/sap/ui/model/type/Boolean.js +1 -1
  312. package/src/sap/ui/model/type/Currency.js +1 -1
  313. package/src/sap/ui/model/type/Date.js +1 -1
  314. package/src/sap/ui/model/type/DateInterval.js +1 -1
  315. package/src/sap/ui/model/type/DateTime.js +1 -1
  316. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  317. package/src/sap/ui/model/type/FileSize.js +1 -1
  318. package/src/sap/ui/model/type/Float.js +1 -1
  319. package/src/sap/ui/model/type/Integer.js +1 -1
  320. package/src/sap/ui/model/type/String.js +1 -1
  321. package/src/sap/ui/model/type/Time.js +1 -1
  322. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  323. package/src/sap/ui/model/type/Unit.js +1 -1
  324. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  325. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  326. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  327. package/src/sap/ui/test/Opa5.js +1 -1
  328. package/src/sap/ui/test/autowaiter/_autoWaiter.js +1 -1
  329. package/src/sap/ui/test/generic/TestBase.js +1 -1
  330. package/src/sap/ui/test/gherkin/simpleGherkinParser.js +10 -5
  331. package/src/sap/ui/test/matchers/LabelFor.js +1 -0
  332. package/src/sap/ui/thirdparty/caja-html-sanitizer.js +111 -96
  333. package/src/sap/ui/util/ActivityDetection.js +7 -1
  334. package/src/sap/ui/util/Mobile.js +11 -8
  335. package/src/sap/ui/util/Storage.js +1 -1
  336. package/src/ui5loader-autoconfig.js +5 -2
  337. package/src/ui5loader.js +169 -185
  338. package/test/sap/ui/core/FormatHelper.js +3 -2
  339. package/test/sap/ui/core/demokit/docuindex.json +6 -0
  340. package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/OpaBusyIndicator.js +1 -1
  341. package/test/sap/ui/core/demokit/sample/OpaMatchers/OpaMatchers.js +2 -2
  342. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/MIT.ODataTypes.html +9 -14
  343. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Opa.qunit.js +7 -0
  344. package/test/sap/ui/core/demokit/sample/common/pages/Any.js +1 -1
  345. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/filter.js +2 -2
  346. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Component.js +27 -0
  347. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ListReport.controller.js +43 -0
  348. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ListReport.view.xml +47 -0
  349. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Main.controller.js +27 -0
  350. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Main.view.xml +7 -0
  351. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/NotFound.view.xml +8 -0
  352. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.controller.js +123 -0
  353. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.view.xml +92 -0
  354. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.html +27 -0
  355. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +69 -0
  356. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/README.html +55 -0
  357. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/SandboxModel.js +56 -0
  358. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/POST-SalesOrderList.json +66 -0
  359. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000000')-SO_2_SOITEM.json +57 -0
  360. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000000').json +20 -0
  361. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000001').json +9 -0
  362. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000007')-SO_2_BP.json +12 -0
  363. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList.json +62 -0
  364. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_CurrencyCode.json +85 -0
  365. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_CurrencyCode.xml +185 -0
  366. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_ProductID.json +93 -0
  367. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_ProductID.xml +262 -0
  368. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/metadata.xml +1779 -0
  369. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/manifest.json +134 -0
  370. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/pages/Main.js +119 -0
  371. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/pages/Main.js +0 -41
  372. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/manifest.json +1 -1
  373. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/manifest.json +1 -1
  374. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +5 -17
  375. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Main.view.xml +3 -3
  376. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/arrangements/Startup.js +1 -1
  377. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/arrangements/Startup.js +1 -1
  378. package/test/sap/ui/core/qunit/CompositeBinding.qunit.js +25 -7
  379. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +86 -2
  380. package/test/sap/ui/core/qunit/DataState.qunit.js +2 -7
  381. package/test/sap/ui/core/qunit/HTML.qunit.js +31 -31
  382. package/test/sap/ui/core/qunit/Lib.qunit.js +55 -2
  383. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +22 -15
  384. package/test/sap/ui/core/qunit/ManagedObject.qunit.js +5 -3
  385. package/test/sap/ui/core/qunit/Object.qunit.js +4 -1
  386. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +2 -2
  387. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +9 -3
  388. package/test/sap/ui/core/qunit/Theming.beforeBootstrap.qunit.js +13 -0
  389. package/test/sap/ui/core/qunit/Theming.qunit.js +229 -0
  390. package/test/sap/ui/core/qunit/analytics/AnalyticalTreeBindingAdapter.qunit.js +2 -7
  391. package/test/sap/ui/core/qunit/analytics/ODataModelAdapter.qunit.js +2 -7
  392. package/test/sap/ui/core/qunit/app/MessageListBinding.qunit.js +2 -7
  393. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.html +24 -0
  394. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.js +275 -0
  395. package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +259 -0
  396. package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +5 -6
  397. package/test/sap/ui/core/qunit/base/security/sanitizeHTML.qunit.js +17 -0
  398. package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload.qunit.js +1 -2
  399. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.beforeBootstrap.qunit.js +13 -12
  400. package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +388 -254
  401. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +19 -30
  402. package/test/sap/ui/core/qunit/component/Models.qunit.js +7 -28
  403. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +8 -26
  404. package/test/sap/ui/core/qunit/component/testdata/async/lib2/library-preload.js +2 -2
  405. package/test/sap/ui/core/qunit/component/testdata/async/lib2/library-preload.json +1 -1
  406. package/test/sap/ui/core/qunit/component/testdata/async/lib2/library.js +2 -2
  407. package/test/sap/ui/core/qunit/component/testdata/async/lib3/library-preload.js +2 -2
  408. package/test/sap/ui/core/qunit/component/testdata/async/lib3/library-preload.json +1 -1
  409. package/test/sap/ui/core/qunit/component/testdata/async/lib3/library.js +2 -2
  410. package/test/sap/ui/core/qunit/component/testdata/async/lib4/library-preload.js +2 -2
  411. package/test/sap/ui/core/qunit/component/testdata/async/lib4/library-preload.json +1 -1
  412. package/test/sap/ui/core/qunit/component/testdata/async/lib4/library.js +2 -2
  413. package/test/sap/ui/core/qunit/component/testdata/async/manifestcomp/Component-preload.js +1 -1
  414. package/test/sap/ui/core/qunit/component/testdata/async/manifestcomp/Component.js +2 -2
  415. package/test/sap/ui/core/qunit/component/testdata/async/mycomp/Component-preload.js +1 -1
  416. package/test/sap/ui/core/qunit/component/testdata/async/mycomp/Component.js +2 -2
  417. package/test/sap/ui/core/qunit/component/testdata/async/mysubcomp/Component-preload.js +1 -1
  418. package/test/sap/ui/core/qunit/component/testdata/async/mysubcomp/Component.js +2 -3
  419. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/Component.js +0 -4
  420. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/sync/Component.js +2 -6
  421. package/test/sap/ui/core/qunit/component/testdata/customizing/customersub/Component.js +0 -4
  422. package/test/sap/ui/core/qunit/component/testdata/inherit/Component.js +2 -7
  423. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/Component.js +2 -7
  424. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/Component.js +2 -2
  425. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/Component.js +2 -2
  426. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/Component.js +2 -2
  427. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/Component.js +2 -2
  428. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/Component.js +2 -2
  429. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/Component.js +2 -2
  430. package/test/sap/ui/core/qunit/component/testdata/other/Component.js +2 -7
  431. package/test/sap/ui/core/qunit/component/testdata/terminologies/Component.js +2 -2
  432. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Component.js +2 -2
  433. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Component.js +2 -2
  434. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Component.js +2 -2
  435. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Component.js +2 -2
  436. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Component.js +2 -3
  437. package/test/sap/ui/core/qunit/component/testdata/v1/Component.js +2 -7
  438. package/test/sap/ui/core/qunit/component/testdata/v1empty/Component.js +2 -7
  439. package/test/sap/ui/core/qunit/component/testdata/v1inline/Component.js +2 -5
  440. package/test/sap/ui/core/qunit/component/testdata/v1missing/Component.js +2 -7
  441. package/test/sap/ui/core/qunit/component/testdata/v2/Component.js +2 -5
  442. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/Component.js +2 -5
  443. package/test/sap/ui/core/qunit/component/testdata/v2empty/Component.js +2 -9
  444. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +2 -5
  445. package/test/sap/ui/core/qunit/component/testdata/v2missing/Component.js +2 -9
  446. package/test/sap/ui/core/qunit/component/testdata/v2version/Component.js +2 -2
  447. package/test/sap/ui/core/qunit/dnd/DragDropInfo.qunit.js +1 -2
  448. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +2 -0
  449. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +2 -0
  450. package/test/sap/ui/core/qunit/gherkin/dataTableUtils.qunit.js +2 -2
  451. package/test/sap/ui/core/qunit/i18n/Locale.qunit.js +0 -52
  452. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +1 -1
  453. package/test/sap/ui/core/qunit/i18n/UniversalDate.qunit.js +14 -24
  454. package/test/sap/ui/core/qunit/i18n/testsuite.i18n.qunit.js +18 -0
  455. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +1 -0
  456. package/test/sap/ui/core/qunit/json/JSONListBinding.qunit.js +2 -7
  457. package/test/sap/ui/core/qunit/json/JSONPropertyBinding.qunit.js +7 -12
  458. package/test/sap/ui/core/qunit/json/JSONTwoWay.qunit.js +3 -8
  459. package/test/sap/ui/core/qunit/loader/fixture/amd-with-export-true/module1.js +2 -2
  460. package/test/sap/ui/core/qunit/messages/MessageMixin.qunit.js +2 -7
  461. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +1 -1
  462. package/test/sap/ui/core/qunit/model/Binding.qunit.js +36 -11
  463. package/test/sap/ui/core/qunit/model/ClientListBinding.qunit.js +2 -7
  464. package/test/sap/ui/core/qunit/model/ClientTreeBinding.qunit.js +2 -7
  465. package/test/sap/ui/core/qunit/model/CompositeDataState.qunit.js +2 -7
  466. package/test/sap/ui/core/qunit/model/Context.qunit.js +2 -7
  467. package/test/sap/ui/core/qunit/model/ContextBinding.qunit.js +2 -7
  468. package/test/sap/ui/core/qunit/model/ListBinding.qunit.js +63 -6
  469. package/test/sap/ui/core/qunit/model/Model.qunit.js +2 -7
  470. package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +40 -0
  471. package/test/sap/ui/core/qunit/model/TreeBinding.qunit.js +2 -7
  472. package/test/sap/ui/core/qunit/model/TreeBindingAdapter.qunit.js +2 -7
  473. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +9 -8
  474. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions.qunit.js +4 -4
  475. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions_legacy.qunit.js +4 -4
  476. package/test/sap/ui/core/qunit/odata/AnnotationParserNoFakeService.qunit.js +2 -7
  477. package/test/sap/ui/core/qunit/odata/ODataMessageParser.qunit.js +1 -1
  478. package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +2 -8
  479. package/test/sap/ui/core/qunit/odata/ODataMetadataNoFakeService.qunit.js +1 -6
  480. package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +24 -0
  481. package/test/sap/ui/core/qunit/odata/v2/Context.qunit.js +2 -7
  482. package/test/sap/ui/core/qunit/odata/v2/ODataContextBindingNoFakeService.qunit.js +2 -7
  483. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +31 -17
  484. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +28 -19
  485. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +70 -15
  486. package/test/sap/ui/core/qunit/odata/v2/ODataPropertyBindingNoFakeService.qunit.js +2 -7
  487. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +4 -9
  488. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +2 -7
  489. package/test/sap/ui/core/qunit/odata/v2/_CreatedContextsCache.qunit.js +2 -7
  490. package/test/sap/ui/core/qunit/odata/v4/AnnotationHelper.qunit.js +1 -1
  491. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +45 -17
  492. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +152 -151
  493. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +55 -27
  494. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +119 -4
  495. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +3 -3
  496. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +754 -195
  497. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +42 -53
  498. package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +283 -170
  499. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +103 -78
  500. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +3 -0
  501. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +87 -58
  502. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +3 -1
  503. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +124 -22
  504. package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +4 -0
  505. package/test/sap/ui/core/qunit/opa/_LogCollector.qunit.js +1 -1
  506. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +5 -0
  507. package/test/sap/ui/core/qunit/resource/ResourceModel.qunit.js +17 -37
  508. package/test/sap/ui/core/qunit/routing/HashChanger.qunit.js +1 -6
  509. package/test/sap/ui/core/qunit/routing/RouterHashChanger.qunit.js +1 -10
  510. package/test/sap/ui/core/qunit/routing/async/Router.qunit.js +1 -22
  511. package/test/sap/ui/core/qunit/routing/async/Target.qunit.js +1 -4
  512. package/test/sap/ui/core/qunit/rule/model/modelSupport.qunit.js +34 -1
  513. package/test/sap/ui/core/qunit/testdata/fastnavigation/view/FastNavigation.view.xml +2 -2
  514. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/i18n.properties +1 -0
  515. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/library.js +10 -0
  516. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/manifest.json +10 -0
  517. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib2/library.js +10 -0
  518. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib2/messagebundle.properties +1 -0
  519. package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +3 -0
  520. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +29 -0
  521. package/test/sap/ui/core/qunit/types/DateFormatTimezones.qunit.js +397 -607
  522. package/test/sap/ui/core/qunit/types/SimpleType.qunit.js +16 -2
  523. package/test/sap/ui/core/qunit/types/Types.qunit.js +2 -37
  524. package/test/sap/ui/core/qunit/types/testsuite.types.qunit.js +1 -1
  525. package/test/sap/ui/core/qunit/util/SyncPromise.qunit.js +4 -1
  526. package/test/sap/ui/core/qunit/util/jQuery.sap.measure.qunit.js +16 -11
  527. package/test/sap/ui/core/qunit/xml/XMLListBinding.qunit.js +1 -3
  528. package/test/sap/ui/core/qunit/xml/XMLModel.qunit.js +4 -14
  529. package/test/sap/ui/core/qunit/xml/XMLPropertyBinding.qunit.js +7 -11
  530. package/test/sap/ui/core/qunit/xml/XMLTreeBinding.qunit.js +1 -1
  531. package/test/sap/ui/core/qunit/xml/XMLTwoWay.qunit.js +3 -7
  532. package/test/sap/ui/core/relnotes/changes-1.115.json +1 -37
  533. package/test/sap/ui/core/relnotes/changes-1.116.json +82 -0
  534. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  535. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  536. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  537. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  538. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  539. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  540. package/test/testsuite/js/samples.js +2 -0
  541. package/ui5.yaml +1 -1
@@ -43,8 +43,8 @@
43
43
  * <tr><td><code>float</code></td><td>The value is converted to a <code>number</code>. Supported by
44
44
  * all numeric types.</td></tr>
45
45
  * <tr><td><code>object</code></td><td>The value is converted to a <code>Date</code> so that it can
46
- * be displayed in a date or time picker. Supported by {@link sap.ui.model.odata.type.Date} and
47
- * {@link sap.ui.model.odata.type.DateTimeOffset} since 1.69.0.
46
+ * be displayed in a date or time picker. Supported by {@link sap.ui.model.odata.type.Date},
47
+ * {@link sap.ui.model.odata.type.DateTime} and {@link sap.ui.model.odata.type.DateTimeOffset} since 1.69.0.
48
48
  * </td></tr>
49
49
  * <tr><td><code>any</code></td><td>A technical format. The value is simply passed through. Only
50
50
  * supported by <code>format</code>, not by <code>parse</code>. Supported by all types.</td></tr>
@@ -116,7 +116,7 @@ sap.ui.define([
116
116
  * @extends sap.ui.model.SimpleType
117
117
  *
118
118
  * @author SAP SE
119
- * @version 1.115.0
119
+ * @version 1.116.0
120
120
  *
121
121
  * @abstract
122
122
  * @alias sap.ui.model.odata.type.ODataType
@@ -30,7 +30,7 @@ sap.ui.define([
30
30
  * @extends sap.ui.model.odata.type.ODataType
31
31
  * @public
32
32
  * @since 1.37.0
33
- * @version 1.115.0
33
+ * @version 1.116.0
34
34
  */
35
35
  var Raw = ODataType.extend("sap.ui.model.odata.type.Raw", {
36
36
  constructor : function (oFormatOptions, oConstraints) {
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.odata.type.Int
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.115.0
27
+ * @version 1.116.0
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.SByte
30
30
  * @param {object} [oFormatOptions]
@@ -73,7 +73,7 @@ sap.ui.define([
73
73
  * @extends sap.ui.model.odata.type.ODataType
74
74
  *
75
75
  * @author SAP SE
76
- * @version 1.115.0
76
+ * @version 1.116.0
77
77
  *
78
78
  * @alias sap.ui.model.odata.type.Single
79
79
  * @param {object} [oFormatOptions]
@@ -60,7 +60,7 @@ sap.ui.define([
60
60
  * @extends sap.ui.model.odata.type.ODataType
61
61
  * @public
62
62
  * @since 1.51.0
63
- * @version 1.115.0
63
+ * @version 1.116.0
64
64
  */
65
65
  var Stream = ODataType.extend("sap.ui.model.odata.type.Stream", {
66
66
  constructor : function (oFormatOptions, oConstraints) {
@@ -84,7 +84,7 @@ sap.ui.define([
84
84
  * @extends sap.ui.model.odata.type.ODataType
85
85
  *
86
86
  * @author SAP SE
87
- * @version 1.115.0
87
+ * @version 1.116.0
88
88
  *
89
89
  * @alias sap.ui.model.odata.type.String
90
90
  * @param {object} [oFormatOptions]
@@ -138,7 +138,7 @@ sap.ui.define([
138
138
  * @extends sap.ui.model.odata.type.ODataType
139
139
  *
140
140
  * @author SAP SE
141
- * @version 1.115.0
141
+ * @version 1.116.0
142
142
  *
143
143
  * @alias sap.ui.model.odata.type.Time
144
144
  * @param {object} [oFormatOptions]
@@ -92,7 +92,7 @@ sap.ui.define([
92
92
  * @extends sap.ui.model.odata.type.ODataType
93
93
  * @public
94
94
  * @since 1.37.0
95
- * @version 1.115.0
95
+ * @version 1.116.0
96
96
  */
97
97
  var TimeOfDay = ODataType.extend("sap.ui.model.odata.type.TimeOfDay", {
98
98
  constructor : function (oFormatOptions, oConstraints) {
@@ -66,7 +66,7 @@ sap.ui.define([
66
66
  * @extends sap.ui.model.type.Unit
67
67
  * @public
68
68
  * @since 1.63.0
69
- * @version 1.115.0
69
+ * @version 1.116.0
70
70
  */
71
71
  var Unit = BaseUnit.extend("sap.ui.model.odata.type.Unit", {
72
72
  constructor : function (oFormatOptions, oConstraints, aDynamicFormatOptionNames) {
@@ -64,7 +64,7 @@ sap.ui.define([
64
64
  * @hideconstructor
65
65
  * @public
66
66
  * @since 1.93.0
67
- * @version 1.115.0
67
+ * @version 1.116.0
68
68
  */
69
69
  var Context = BaseContext.extend("sap.ui.model.odata.v2.Context", {
70
70
  constructor : function (oModel, sPath, sDeepPath, oCreatePromise, bInactive,
@@ -217,7 +217,8 @@ sap.ui.define([
217
217
  * see {@link #setRefreshAfterChange}. If given, this overrules the model-wide
218
218
  * <code>refreshAfterChange</code> flag for this operation only.
219
219
  * @returns {Promise<undefined>} A promise resolving with <code>undefined</code> in case of
220
- * successful deletion or rejecting with an error in case the deletion failed
220
+ * successful deletion or rejecting with an error in case the deletion failed. If the <code>DELETE</code> request
221
+ * has been aborted, the error has an <code>aborted</code> flag set to <code>true</code>.
221
222
  * @throws {Error}
222
223
  * If the given parameter map contains any other parameter than those documented above in case
223
224
  * of a persistent context
@@ -36,7 +36,7 @@ sap.ui.define([
36
36
  * @class Annotation loader for OData V2 services
37
37
  *
38
38
  * @author SAP SE
39
- * @version 1.115.0
39
+ * @version 1.116.0
40
40
  *
41
41
  * @public
42
42
  * @since 1.37.0
@@ -1935,8 +1935,14 @@ sap.ui.define([
1935
1935
  * batch request
1936
1936
  * @param {boolean} [mParameters.inactive]
1937
1937
  * Whether the created context is inactive. An inactive context will only be sent to the
1938
- * server after the first property update. From then on it behaves like any other created
1939
- * context.
1938
+ * server when it has become active after a property update. From then on it behaves like any
1939
+ * other created context.<br>
1940
+ * When a property update happens on an inactive context, the
1941
+ * {@link sap.ui.model.odata.v2.ODataListBinding#event:createActivate 'createActivate'} event
1942
+ * is fired, and the context becomes active, unless the event handler prevents this. While
1943
+ * inactive, the context does not count as a
1944
+ * {@link sap.ui.model.odata.v2.ODataModel#hasPendingChanges pending change} and does not
1945
+ * contribute to the {@link #getCount count}.
1940
1946
  * @param {function} [mParameters.success]
1941
1947
  * The success callback function
1942
1948
  * @returns {sap.ui.model.odata.v2.Context}
@@ -2225,15 +2231,20 @@ sap.ui.define([
2225
2231
  * Set of entity types that are affected by side-effects requests
2226
2232
  * @param {string} [sGroupId]
2227
2233
  * The ID of a request group
2234
+ * @returns {boolean}
2235
+ * Whether the list binding is affected by the side effect
2228
2236
  *
2229
2237
  * @private
2230
2238
  */
2231
2239
  ODataListBinding.prototype._refreshForSideEffects = function (oAffectedEntityTypes, sGroupId) {
2232
- if (!this._isExpandedListUsable() && oAffectedEntityTypes.has(this.oEntityType)) {
2240
+ var bIsAffected = !this._hasTransientParentContext() && oAffectedEntityTypes.has(this.oEntityType);
2241
+
2242
+ if (bIsAffected && !this._isExpandedListUsable()) {
2233
2243
  this.sRefreshGroupId = sGroupId;
2234
2244
  this._refresh();
2235
2245
  this.sRefreshGroupId = undefined;
2236
2246
  }
2247
+ return bIsAffected;
2237
2248
  };
2238
2249
 
2239
2250
  /**
@@ -213,7 +213,7 @@ sap.ui.define([
213
213
  * This model is not prepared to be inherited from.
214
214
  *
215
215
  * @author SAP SE
216
- * @version 1.115.0
216
+ * @version 1.116.0
217
217
  *
218
218
  * @public
219
219
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -5092,26 +5092,27 @@ sap.ui.define([
5092
5092
  * supported and may not work. These should be done separately and directly on the corresponding entry.
5093
5093
  *
5094
5094
  * @param {string} sPath A string containing the path to the data that should be updated.
5095
- * The path is concatenated to the sServiceUrl which was specified
5096
- * in the model constructor.
5095
+ * The path is concatenated to the sServiceUrl which was specified
5096
+ * in the model constructor.
5097
5097
  * @param {object} oData Data of the entry that should be updated.
5098
5098
  * @param {object} [mParameters] Optional, can contain the following attributes:
5099
5099
  * @param {object} [mParameters.context] If specified the sPath has to be is relative to the path given with the context.
5100
5100
  * @param {function} [mParameters.success] A callback function which is called when the data has been successfully updated.
5101
5101
  * @param {function} [mParameters.error] A callback function which is called when the request failed.
5102
- * The handler can have the parameter <code>oError</code> which contains additional error information.
5102
+ * The handler can have the parameter <code>oError</code> which contains additional error information.
5103
+ * If the <code>PUT/MERGE</code> request has been aborted, the error has an <code>aborted</code> flag set to
5104
+ * <code>true</code>.
5103
5105
  * @param {string} [mParameters.eTag] If specified, the <code>If-Match</code> header will be set to this ETag.
5104
- * Caution: This feature in not officially supported as using asynchronous requests can lead
5105
- * to data inconsistencies. If you decide to use this feature nevertheless, you have to make
5106
- * sure that the request is completed before the data is processed any further.
5106
+ * Caution: This feature in not officially supported as using asynchronous requests can lead
5107
+ * to data inconsistencies. If you decide to use this feature nevertheless, you have to make
5108
+ * sure that the request is completed before the data is processed any further.
5107
5109
  * @param {Object<string,string>} [mParameters.urlParameters] A map containing the parameters that will be passed as query strings
5108
5110
  * @param {Object<string,string>} [mParameters.headers] A map of headers for this request
5109
5111
  * @param {string} [mParameters.batchGroupId] Deprecated - use <code>groupId</code> instead
5110
5112
  * @param {string} [mParameters.groupId] ID of a request group; requests belonging to the same group will be bundled in one batch request
5111
5113
  * @param {string} [mParameters.changeSetId] ID of the <code>ChangeSet</code> that this request should belong to
5112
- * @param {boolean} [mParameters.refreshAfterChange] Since 1.46; defines whether to update all bindings after submitting this change operation. See {@link #setRefreshAfterChange}
5113
- If given, this overrules the model-wide <code>refreshAfterChange</code> flag for this operation only.
5114
- *
5114
+ * @param {boolean} [mParameters.refreshAfterChange] Since 1.46; defines whether to update all bindings after submitting this change operation.
5115
+ * See {@link #setRefreshAfterChange}. If given, this overrules the model-wide <code>refreshAfterChange</code> flag for this operation only.
5115
5116
  * @return {object} An object which has an <code>abort</code> function to abort the current request.
5116
5117
  *
5117
5118
  * @public
@@ -5177,24 +5178,26 @@ sap.ui.define([
5177
5178
  * {@link #createEntry} or {@link sap.ui.model.odata.v2.ODataListBinding#create} instead.
5178
5179
  *
5179
5180
  * @param {string} sPath A string containing the path to the collection where an entry
5180
- * should be created. The path is concatenated to the service URL
5181
- * which was specified in the model constructor.
5181
+ * should be created. The path is concatenated to the service URL
5182
+ * which was specified in the model constructor.
5182
5183
  * @param {object} oData Data of the entry that should be created.
5183
5184
  * @param {object} [mParameters] Optional parameter map containing any of the following properties:
5184
5185
  * @param {object} [mParameters.context] If specified , <code>sPath</code> has to be relative to the path given with the context.
5185
5186
  * @param {function} [mParameters.success] A callback function which is called when the data has
5186
- * been successfully retrieved. The handler can have the
5187
- * following parameters: <code>oData</code> and <code>response</code>. The <code>oData</code> parameter contains the data of the newly created entry if it is provided by the backend.
5188
- * The <code>response</code> parameter contains information about the response of the request.
5187
+ * been successfully retrieved. The handler can have the
5188
+ * following parameters: <code>oData</code> and <code>response</code>. The <code>oData</code> parameter contains the data of the newly created entry if it is provided by the backend.
5189
+ * The <code>response</code> parameter contains information about the response of the request.
5189
5190
  * @param {function} [mParameters.error] A callback function which is called when the request failed.
5190
- * The handler can have the parameter <code>oError</code> which contains additional error information.
5191
+ * The handler can have the parameter <code>oError</code> which contains additional error information.
5192
+ * If the <code>POST</code> request has been aborted, the error has an <code>aborted</code> flag set to
5193
+ * <code>true</code>.
5191
5194
  * @param {Object<string,string>} [mParameters.urlParameters] A map containing the parameters that will be passed as query strings
5192
5195
  * @param {Object<string,string>} [mParameters.headers] A map of headers for this request
5193
5196
  * @param {string} [mParameters.batchGroupId] Deprecated - use <code>groupId</code> instead
5194
5197
  * @param {string} [mParameters.groupId] ID of a request group; requests belonging to the same group will be bundled in one batch request
5195
5198
  * @param {string} [mParameters.changeSetId] ID of the <code>ChangeSet</code> that this request should belong to
5196
- * @param {boolean} [mParameters.refreshAfterChange] Since 1.46; defines whether to update all bindings after submitting this change operation. See {@link #setRefreshAfterChange}
5197
- If given, this overrules the model-wide <code>refreshAfterChange</code> flag for this operation only.
5199
+ * @param {boolean} [mParameters.refreshAfterChange] Since 1.46; defines whether to update all bindings after submitting this change operation.
5200
+ * See {@link #setRefreshAfterChange}. If given, this overrules the model-wide <code>refreshAfterChange</code> flag for this operation only.
5198
5201
  * @return {object} An object which has an <code>abort</code> function to abort the current request.
5199
5202
  *
5200
5203
  * @public
@@ -5270,6 +5273,8 @@ sap.ui.define([
5270
5273
  * @param {function} [mParameters.error]
5271
5274
  * A callback function which is called when the request failed. The handler can have the
5272
5275
  * parameter: <code>oError</code> which contains additional error information.
5276
+ * If the <code>DELETE</code> request has been aborted, the error has an <code>aborted</code> flag set to
5277
+ * <code>true</code>.
5273
5278
  * @param {string} [mParameters.eTag]
5274
5279
  * If specified, the <code>If-Match</code> header will be set to this ETag.
5275
5280
  * @param {Object<string,string>} [mParameters.urlParameters]
@@ -5407,6 +5412,7 @@ sap.ui.define([
5407
5412
  * @param {function} [mParameters.error]
5408
5413
  * A callback function which is called when the request failed. The handler can have the
5409
5414
  * parameter: <code>oError</code> which contains additional error information.
5415
+ * If the request has been aborted, the error has an <code>aborted</code> flag set to <code>true</code>.
5410
5416
  * @param {string} [mParameters.eTag]
5411
5417
  * If the function import changes an entity, the ETag for this entity can be passed with this
5412
5418
  * parameter
@@ -5745,16 +5751,18 @@ sap.ui.define([
5745
5751
  * ignored, use <code>mParameters.urlParameters</code> instead
5746
5752
  * @param {object} [mParameters] Optional parameter map containing any of the following properties:
5747
5753
  * @param {object} [mParameters.context] If specified, <code>sPath</code> has to be relative to the path
5748
- * given with the context.
5754
+ * given with the context.
5749
5755
  * @param {Object<string,string>} [mParameters.urlParameters] A map containing the parameters that will be passed as query strings
5750
5756
  * @param {sap.ui.model.Filter[]} [mParameters.filters] An array of filters to be included in the request URL
5751
5757
  * @param {sap.ui.model.Sorter[]} [mParameters.sorters] An array of sorters to be included in the request URL
5752
5758
  * @param {function} [mParameters.success] A callback function which is called when the data has
5753
- * been successfully retrieved. The handler can have the
5754
- * following parameters: <code>oData</code> and <code>response</code>. The <code>oData</code> parameter contains the data of the retrieved data.
5755
- * The <code>response</code> parameter contains further information about the response of the request.
5759
+ * been successfully retrieved. The handler can have the
5760
+ * following parameters: <code>oData</code> and <code>response</code>. The <code>oData</code> parameter contains the data of the retrieved data.
5761
+ * The <code>response</code> parameter contains further information about the response of the request.
5756
5762
  * @param {function} [mParameters.error] A callback function which is called when the request
5757
- * failed. The handler can have the parameter: <code>oError</code> which contains additional error information.
5763
+ * failed. The handler can have the parameter: <code>oError</code> which contains additional error information.
5764
+ * If the <code>GET</code> request has been aborted, the error has an <code>aborted</code> flag set to
5765
+ * <code>true</code>.
5758
5766
  * @param {string} [mParameters.batchGroupId] Deprecated - use <code>groupId</code> instead
5759
5767
  * @param {string} [mParameters.groupId] ID of a request group; requests belonging to the same group will be bundled in one batch request
5760
5768
  * @param {boolean} [mParameters.updateAggregatedMessages]
@@ -5889,10 +5897,10 @@ sap.ui.define([
5889
5897
  * @param {Object<string,string>} [mParameters.urlParameters]
5890
5898
  * URL parameters for the side-effects request as a map from a URL parameter name to its
5891
5899
  * string value including <code>$expand</code> and <code>$select</code>
5892
- * @returns {Promise}
5893
- * The promise on the outcome of the side-effects request; resolves with
5894
- * <code>undefined</code> if the request is processed successfully, or rejects with an error
5895
- * object if the request fails
5900
+ * @returns {Promise<Array<sap.ui.model.odata.v2.ODataListBinding>>}
5901
+ * The promise on the outcome of the side-effects request; resolves with the array of affected
5902
+ * list bindings if the request is processed successfully, or rejects with an error object if
5903
+ * the request fails
5896
5904
  * @throws {Error}
5897
5905
  * If the given parameters map contains any other parameter than those documented above
5898
5906
  *
@@ -5913,6 +5921,7 @@ sap.ui.define([
5913
5921
 
5914
5922
  return new Promise(function (resolve, reject) {
5915
5923
  var oAffectedEntityTypes = new Set(),
5924
+ aAffectedListBindings = [],
5916
5925
  sExpands = mParameters.urlParameters && mParameters.urlParameters["$expand"];
5917
5926
 
5918
5927
  that._read("", {
@@ -5921,7 +5930,7 @@ sap.ui.define([
5921
5930
  error : reject,
5922
5931
  groupId : mParameters.groupId,
5923
5932
  success : function (/*oData, oResponse*/) {
5924
- resolve();
5933
+ resolve(aAffectedListBindings);
5925
5934
  },
5926
5935
  updateAggregatedMessages : true,
5927
5936
  urlParameters : mParameters.urlParameters
@@ -5936,7 +5945,9 @@ sap.ui.define([
5936
5945
  });
5937
5946
  that.getBindings().forEach(function (oBinding) {
5938
5947
  if (oBinding.isA("sap.ui.model.odata.v2.ODataListBinding")) {
5939
- oBinding._refreshForSideEffects(oAffectedEntityTypes, mParameters.groupId);
5948
+ if (oBinding._refreshForSideEffects(oAffectedEntityTypes, mParameters.groupId)) {
5949
+ aAffectedListBindings.push(oBinding);
5950
+ }
5940
5951
  }
5941
5952
  });
5942
5953
  }
@@ -6180,7 +6191,10 @@ sap.ui.define([
6180
6191
  * and change sets of the actual batch request which was sent to the backend.
6181
6192
  * The changeResponses contain the actual response of that change set in the <code>response</code> property.
6182
6193
  * For each change set there is also a <code>__changeResponse</code> property.
6183
- * @param {function} [mParameters.error] A callback function which is called when the request failed. The handler can have the parameter: <code>oError</code> which contains additional error information
6194
+ * @param {function} [mParameters.error] A callback function which is called when the request failed.
6195
+ * The handler can have the parameter: <code>oError</code> which contains additional error information.
6196
+ * If all contained requests have been aborted, the error has an <code>aborted</code> flag set to
6197
+ * <code>true</code>.
6184
6198
  * @param {string} [mParameters.batchGroupId]
6185
6199
  * <b>Deprecated</b>, use <code>groupId</code> instead
6186
6200
  * @param {boolean} [mParameters.merge]
@@ -6442,7 +6456,7 @@ sap.ui.define([
6442
6456
  * @param {array} [aPath]
6443
6457
  * Paths to be reset; if no array is passed, all changes are reset
6444
6458
  * @param {boolean} [bAll=false]
6445
- * Whether also deferred requests are taken into account
6459
+ * Whether also deferred requests are taken into account so that they are aborted
6446
6460
  * @param {boolean} [bDeleteCreatedEntities=false]
6447
6461
  * Whether to delete the entities created via {@link #createEntry} or {@link #callFunction};
6448
6462
  * since 1.95.0
@@ -93,7 +93,7 @@ sap.ui.define([
93
93
  * @extends sap.ui.model.TreeBinding
94
94
  * @hideconstructor
95
95
  * @public
96
- * @version 1.115.0
96
+ * @version 1.116.0
97
97
  */
98
98
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
99
99
 
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.115.0
45
+ * @version 1.116.0
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -1333,7 +1333,7 @@ sap.ui.define([
1333
1333
  this.oBinding.checkSuspended();
1334
1334
 
1335
1335
  return Promise.all(aPaths.map(function (sPath) {
1336
- return that.oBinding.fetchIfChildCanUseCache(that, sPath, SyncPromise.resolve({}))
1336
+ return that.oBinding.fetchIfChildCanUseCache(that, sPath, undefined, true)
1337
1337
  .then(function (sReducedPath) {
1338
1338
  if (sReducedPath) {
1339
1339
  return that.fetchPrimitiveValue(sReducedPath, bExternalFormat);
@@ -1836,7 +1836,7 @@ sap.ui.define([
1836
1836
  if (!sMessagesPath) {
1837
1837
  throw new Error("Missing @com.sap.vocabularies.Common.v1.Messages");
1838
1838
  }
1839
- return that.oBinding.fetchIfChildCanUseCache(that, sMessagesPath, {});
1839
+ return that.oBinding.fetchIfChildCanUseCache(that, sMessagesPath, undefined, true);
1840
1840
  }).then(function (sReducedPath) {
1841
1841
  return that.fetchValue(sReducedPath);
1842
1842
  }).catch(this.oModel.getReporter());
@@ -1844,6 +1844,7 @@ sap.ui.define([
1844
1844
 
1845
1845
  this.bKeepAlive = bKeepAlive;
1846
1846
  this.fnOnBeforeDestroy = bKeepAlive ? fnOnBeforeDestroy : undefined;
1847
+ this.oBinding.onKeepAliveChanged(this);
1847
1848
  };
1848
1849
 
1849
1850
  /**
@@ -1961,6 +1962,9 @@ sap.ui.define([
1961
1962
  throw new Error("Must not select a deleted entity: " + this);
1962
1963
  }
1963
1964
  this.bSelected = bSelected;
1965
+ if (this.oBinding) {
1966
+ this.oBinding.onKeepAliveChanged(this); // selected contexts are effectively kept alive
1967
+ }
1964
1968
  };
1965
1969
 
1966
1970
  /**
@@ -455,17 +455,17 @@ sap.ui.define([
455
455
  };
456
456
 
457
457
  /**
458
- * Hook method for {@link #fetchQueryOptionsForOwnCache} to determine the query options for this
459
- * binding.
458
+ * Hook method for {@link #fetchOrGetQueryOptionsForOwnCache} to determine the query options for
459
+ * this binding.
460
460
  *
461
461
  * @param {sap.ui.model.Context} [oContext]
462
462
  * The context instance to be used for a relative binding
463
- * @returns {sap.ui.base.SyncPromise}
464
- * A promise resolving with the binding's query options
463
+ * @returns {object|undefined|sap.ui.base.SyncPromise}
464
+ * The binding's query options (if any) or a promise resolving with them
465
465
  *
466
466
  * @abstract
467
467
  * @function
468
- * @name sap.ui.model.odata.v4.ODataBinding#doFetchQueryOptions
468
+ * @name sap.ui.model.odata.v4.ODataBinding#doFetchOrGetQueryOptions
469
469
  * @private
470
470
  */
471
471
 
@@ -522,14 +522,16 @@ sap.ui.define([
522
522
  }
523
523
 
524
524
  aPromises = [
525
- this.fetchQueryOptionsForOwnCache(oContext, bIgnoreParentCache),
525
+ this.fetchOrGetQueryOptionsForOwnCache(oContext, bIgnoreParentCache),
526
526
  this.oModel.oRequestor.ready()
527
527
  ];
528
528
  this.mCacheQueryOptions = undefined;
529
529
  this.oCachePromise = SyncPromise.all(aPromises).then(function (aResult) {
530
530
  var mQueryOptions = aResult[0].mQueryOptions;
531
531
 
532
- that.sReducedPath = aResult[0].sReducedPath;
532
+ if (aResult[0].sReducedPath) {
533
+ that.sReducedPath = aResult[0].sReducedPath;
534
+ }
533
535
 
534
536
  // If there are mQueryOptions, the binding must create a cache. Do not create a cache
535
537
  // for a virtual context or if below a transient context
@@ -568,51 +570,79 @@ sap.ui.define([
568
570
  * @param {boolean} [bIgnoreParentCache]
569
571
  * Whether the query options of the parent cache shall be ignored and own query options are
570
572
  * determined (see {@link #fetchCache})
571
- * @returns {sap.ui.base.SyncPromise}
572
- * A promise resolving with an object having two properties:
573
+ * @returns {object|sap.ui.base.SyncPromise}
574
+ * An object having two properties (or a promise resolving with it):
573
575
  * {object} mQueryOptions - The query options to create the cache for this binding or
574
576
  * <code>undefined</code> if no cache is to be created
575
577
  * {string} sReducedPath - The binding's absolute, reduced path in the cache hierarchy
576
578
  *
577
579
  * @private
578
580
  */
579
- ODataBinding.prototype.fetchQueryOptionsForOwnCache = function (oContext, bIgnoreParentCache) {
581
+ ODataBinding.prototype.fetchOrGetQueryOptionsForOwnCache = function (oContext,
582
+ bIgnoreParentCache) {
580
583
  var bHasNonSystemQueryOptions,
581
- oQueryOptionsPromise,
584
+ vQueryOptions, // {object|undefined|sap.ui.base.SyncPromise}
582
585
  sResolvedPath = this.oModel.resolve(this.sPath, oContext),
583
586
  that = this;
584
587
 
585
588
  /*
586
- * Wraps the given query options (promise) and adds sReducedPath so that it can be returned
587
- * by fetchQueryOptionsForOwnCache.
589
+ * Wraps the given query options and adds sReducedPath to create a result for
590
+ * #fetchOrGetQueryOptionsForOwnCache.
588
591
  *
589
- * @param {object|sap.ui.base.SyncPromise} vQueryOptions
590
- * The query options (promise)
592
+ * @param {object} [mQueryOptions]
593
+ * Map of query options, or <code>undefined</code>
594
+ * @param {boolean} [bDropEmptyObject]
595
+ * Whether an empty query options object should be replaced by <code>undefined</code>
591
596
  * @param {string} [sReducedPath=sResolvedPath]
592
597
  * The reduced path
593
- * @returns {sap.ui.base.SyncPromise}
594
- * A promise to be returned by fetchQueryOptionsForOwnCache
598
+ * @returns {object}
599
+ * A result for #fetchOrGetQueryOptionsForOwnCache
595
600
  */
596
- function wrapQueryOptions(vQueryOptions, sReducedPath) {
597
- return SyncPromise.resolve(vQueryOptions).then(function (mQueryOptions) {
598
- return {
599
- mQueryOptions : mQueryOptions,
600
- sReducedPath : sReducedPath || sResolvedPath
601
- };
602
- });
601
+ function _wrapQueryOptions(mQueryOptions, bDropEmptyObject, sReducedPath) {
602
+ if (bDropEmptyObject && mQueryOptions && _Helper.isEmptyObject(mQueryOptions)) {
603
+ mQueryOptions = undefined;
604
+ }
605
+ return {
606
+ mQueryOptions : mQueryOptions,
607
+ sReducedPath : sReducedPath || sResolvedPath
608
+ };
609
+ }
610
+
611
+ /*
612
+ * Waits for <code>vQueryOptions</code> (if needed) and then creates a result for
613
+ * #fetchOrGetQueryOptionsForOwnCache.
614
+ *
615
+ * @param {boolean} [bDropEmptyObject]
616
+ * Whether an empty query options object should be replaced by <code>undefined</code>
617
+ * @param {string} [sReducedPath=sResolvedPath]
618
+ * The reduced path
619
+ * @returns {object|sap.ui.base.SyncPromise}
620
+ * A result for #fetchOrGetQueryOptionsForOwnCache
621
+ */
622
+ function wrapQueryOptions(bDropEmptyObject, sReducedPath) {
623
+ if (vQueryOptions instanceof SyncPromise) {
624
+ if (vQueryOptions.isPending()) {
625
+ return vQueryOptions.then(function (mQueryOptions) {
626
+ return _wrapQueryOptions(mQueryOptions, bDropEmptyObject, sReducedPath);
627
+ });
628
+ }
629
+ vQueryOptions = vQueryOptions.getResult();
630
+ }
631
+
632
+ return _wrapQueryOptions(vQueryOptions, bDropEmptyObject, sReducedPath);
603
633
  }
604
634
 
605
635
  if (this.oOperation // operation binding manages its cache on its own
606
636
  || !sResolvedPath // unresolved binding
607
637
  || this.isMeta()) {
608
- return wrapQueryOptions(undefined);
638
+ return _wrapQueryOptions();
609
639
  }
610
640
 
611
641
  // auto-$expand/$select and binding is a parent binding, so that it needs to wait until all
612
642
  // its child bindings know via the corresponding promise in this.aChildCanUseCachePromises
613
643
  // if they can use the parent binding's cache
614
644
  // With $$aggregation, no auto-$expand/$select is needed
615
- oQueryOptionsPromise = this.doFetchQueryOptions(oContext);
645
+ vQueryOptions = this.doFetchOrGetQueryOptions(oContext);
616
646
  if (this.oModel.bAutoExpandSelect && this.aChildCanUseCachePromises
617
647
  && !_Helper.isDataAggregation(this.mParameters)) {
618
648
  // For auto-$expand/$select, wait for query options of dependent bindings:
@@ -620,8 +650,8 @@ sap.ui.define([
620
650
  // query options promise to this binding via fetchIfChildCanUseCache.
621
651
  // The aggregated query options of this binding and its dependent bindings are available
622
652
  // in that.mAggregatedQueryOptions once all these promises are fulfilled.
623
- oQueryOptionsPromise = SyncPromise.all([
624
- oQueryOptionsPromise,
653
+ vQueryOptions = SyncPromise.all([
654
+ vQueryOptions,
625
655
  Promise.resolve().then(function () {
626
656
  return SyncPromise.all(that.aChildCanUseCachePromises);
627
657
  })
@@ -635,7 +665,7 @@ sap.ui.define([
635
665
  // parent cache is ignored or (quasi-)absolute binding
636
666
  if (bIgnoreParentCache || !this.bRelative || !oContext.fetchValue) {
637
667
  // the binding shall create its own cache
638
- return wrapQueryOptions(oQueryOptionsPromise);
668
+ return wrapQueryOptions();
639
669
  }
640
670
 
641
671
  // auto-$expand/$select: Use parent binding's cache if possible
@@ -645,28 +675,27 @@ sap.ui.define([
645
675
  return sKey[0] !== "$" || sKey[1] === "$";
646
676
  });
647
677
  if (bHasNonSystemQueryOptions) {
648
- return wrapQueryOptions(oQueryOptionsPromise);
678
+ return wrapQueryOptions();
649
679
  }
650
680
  return oContext.getBinding()
651
- .fetchIfChildCanUseCache(oContext, that.sPath, oQueryOptionsPromise,
681
+ .fetchIfChildCanUseCache(oContext, that.sPath, vQueryOptions,
652
682
  !this.mParameters) // duck typing for property binding
653
683
  .then(function (sReducedPath) {
654
- return wrapQueryOptions(sReducedPath ? undefined : oQueryOptionsPromise,
655
- sReducedPath);
684
+ if (sReducedPath) {
685
+ vQueryOptions = undefined;
686
+ }
687
+ return wrapQueryOptions(false, sReducedPath);
656
688
  });
657
689
  }
658
690
 
659
691
  // relative list or context binding with parameters which are not query options
660
692
  // (such as $$groupId)
661
- if (this.mParameters && Object.keys(this.mParameters).length) {
662
- return wrapQueryOptions(oQueryOptionsPromise);
693
+ if (this.mParameters && !_Helper.isEmptyObject(this.mParameters)) {
694
+ return wrapQueryOptions();
663
695
  }
664
696
 
665
697
  // relative binding which may have query options from UI5 filter or sorter objects
666
- return oQueryOptionsPromise.then(function (mQueryOptions) {
667
- return wrapQueryOptions(
668
- Object.keys(mQueryOptions).length ? mQueryOptions : undefined);
669
- });
698
+ return wrapQueryOptions(true);
670
699
  };
671
700
 
672
701
  /**