@openui5/sap.ui.core 1.98.0 → 1.99.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 (351) hide show
  1. package/.eslintrc.json +32 -1
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.mobile.js +29 -11
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.storage.js +3 -3
  9. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  10. package/src/sap/base/util/restricted/_castArray.js +1 -1
  11. package/src/sap/base/util/restricted/_compact.js +1 -1
  12. package/src/sap/base/util/restricted/_curry.js +1 -1
  13. package/src/sap/base/util/restricted/_debounce.js +1 -1
  14. package/src/sap/base/util/restricted/_difference.js +1 -1
  15. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  16. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  17. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  18. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  20. package/src/sap/base/util/restricted/_flatten.js +1 -1
  21. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  22. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  23. package/src/sap/base/util/restricted/_intersection.js +1 -1
  24. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  25. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  26. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  27. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  28. package/src/sap/base/util/restricted/_isNil.js +1 -1
  29. package/src/sap/base/util/restricted/_max.js +1 -1
  30. package/src/sap/base/util/restricted/_merge.js +1 -1
  31. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  32. package/src/sap/base/util/restricted/_min.js +1 -1
  33. package/src/sap/base/util/restricted/_omit.js +1 -1
  34. package/src/sap/base/util/restricted/_pick.js +1 -1
  35. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  36. package/src/sap/base/util/restricted/_throttle.js +1 -1
  37. package/src/sap/base/util/restricted/_toArray.js +1 -1
  38. package/src/sap/base/util/restricted/_union.js +1 -1
  39. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  40. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  41. package/src/sap/base/util/restricted/_uniq.js +1 -1
  42. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  43. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  44. package/src/sap/base/util/restricted/_without.js +1 -1
  45. package/src/sap/base/util/restricted/_xor.js +1 -1
  46. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  47. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  48. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  49. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  50. package/src/sap/ui/Device.js +3 -3
  51. package/src/sap/ui/Global.js +4 -4
  52. package/src/sap/ui/VersionInfo.js +13 -10
  53. package/src/sap/ui/base/BindingParser.js +34 -7
  54. package/src/sap/ui/base/Event.js +1 -1
  55. package/src/sap/ui/base/EventProvider.js +1 -1
  56. package/src/sap/ui/base/Interface.js +1 -1
  57. package/src/sap/ui/base/ManagedObject.js +32 -22
  58. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  59. package/src/sap/ui/base/Metadata.js +1 -1
  60. package/src/sap/ui/base/Object.js +1 -1
  61. package/src/sap/ui/base/ObjectPool.js +1 -1
  62. package/src/sap/ui/core/.library +1 -1
  63. package/src/sap/ui/core/BusyIndicator.js +1 -1
  64. package/src/sap/ui/core/Component.js +3 -3
  65. package/src/sap/ui/core/ComponentContainer.js +1 -1
  66. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  67. package/src/sap/ui/core/ComponentSupport.js +1 -1
  68. package/src/sap/ui/core/Configuration.js +77 -10
  69. package/src/sap/ui/core/Control.js +2 -1
  70. package/src/sap/ui/core/Core.js +3 -3
  71. package/src/sap/ui/core/CustomData.js +1 -1
  72. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  73. package/src/sap/ui/core/Element.js +4 -7
  74. package/src/sap/ui/core/ElementMetadata.js +1 -1
  75. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  76. package/src/sap/ui/core/EventBus.js +1 -1
  77. package/src/sap/ui/core/ExtensionPoint.js +1 -1
  78. package/src/sap/ui/core/FocusHandler.js +1 -1
  79. package/src/sap/ui/core/Fragment.js +1 -1
  80. package/src/sap/ui/core/HTML.js +1 -1
  81. package/src/sap/ui/core/HTMLRenderer.js +1 -1
  82. package/src/sap/ui/core/History.js +1 -1
  83. package/src/sap/ui/core/Icon.js +1 -1
  84. package/src/sap/ui/core/IconRenderer.js +1 -1
  85. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  86. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  87. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  88. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  89. package/src/sap/ui/core/InvisibleText.js +1 -1
  90. package/src/sap/ui/core/Item.js +1 -1
  91. package/src/sap/ui/core/LabelEnablement.js +9 -2
  92. package/src/sap/ui/core/LayoutData.js +1 -1
  93. package/src/sap/ui/core/ListItem.js +1 -1
  94. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  95. package/src/sap/ui/core/LocalBusyIndicatorRenderer.js +2 -2
  96. package/src/sap/ui/core/Locale.js +1 -1
  97. package/src/sap/ui/core/LocaleData.js +37 -2
  98. package/src/sap/ui/core/Manifest.js +1 -1
  99. package/src/sap/ui/core/Message.js +1 -1
  100. package/src/sap/ui/core/Popup.js +2 -2
  101. package/src/sap/ui/core/RenderManager.js +1 -1
  102. package/src/sap/ui/core/Renderer.js +1 -1
  103. package/src/sap/ui/core/ResizeHandler.js +1 -1
  104. package/src/sap/ui/core/ScrollBar.js +1 -1
  105. package/src/sap/ui/core/ScrollBarRenderer.js +1 -1
  106. package/src/sap/ui/core/SeparatorItem.js +1 -1
  107. package/src/sap/ui/core/Title.js +1 -1
  108. package/src/sap/ui/core/TooltipBase.js +1 -1
  109. package/src/sap/ui/core/UIArea.js +1 -1
  110. package/src/sap/ui/core/UIComponent.js +1 -1
  111. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  112. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  113. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  114. package/src/sap/ui/core/XMLComposite.js +1 -1
  115. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  116. package/src/sap/ui/core/_IconRegistry.js +10 -1
  117. package/src/sap/ui/core/date/Japanese.js +1 -1
  118. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  119. package/src/sap/ui/core/delegate/ScrollEnablement.js +9 -6
  120. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  122. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  124. package/src/sap/ui/core/format/DateFormat.js +524 -172
  125. package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +43 -0
  126. package/src/sap/ui/core/format/ListFormat.js +2 -2
  127. package/src/sap/ui/core/format/NumberFormat.js +190 -56
  128. package/src/sap/ui/core/format/TimezoneUtil.js +248 -0
  129. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  130. package/src/sap/ui/core/library.js +5 -5
  131. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  132. package/src/sap/ui/core/message/Message.js +1 -1
  133. package/src/sap/ui/core/message/MessageManager.js +1 -1
  134. package/src/sap/ui/core/message/MessageParser.js +1 -1
  135. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  136. package/src/sap/ui/core/messagebundle.properties +4 -0
  137. package/src/sap/ui/core/messagebundle_ar.properties +2 -0
  138. package/src/sap/ui/core/messagebundle_bg.properties +7 -5
  139. package/src/sap/ui/core/messagebundle_ca.properties +2 -0
  140. package/src/sap/ui/core/messagebundle_cs.properties +2 -0
  141. package/src/sap/ui/core/messagebundle_cy.properties +2 -0
  142. package/src/sap/ui/core/messagebundle_da.properties +2 -0
  143. package/src/sap/ui/core/messagebundle_de.properties +3 -1
  144. package/src/sap/ui/core/messagebundle_el.properties +2 -0
  145. package/src/sap/ui/core/messagebundle_en.properties +2 -0
  146. package/src/sap/ui/core/messagebundle_en_GB.properties +2 -0
  147. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +2 -0
  148. package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
  149. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +2 -0
  150. package/src/sap/ui/core/messagebundle_es.properties +2 -0
  151. package/src/sap/ui/core/messagebundle_es_MX.properties +2 -0
  152. package/src/sap/ui/core/messagebundle_et.properties +2 -0
  153. package/src/sap/ui/core/messagebundle_fi.properties +2 -0
  154. package/src/sap/ui/core/messagebundle_fr.properties +2 -0
  155. package/src/sap/ui/core/messagebundle_fr_CA.properties +2 -0
  156. package/src/sap/ui/core/messagebundle_hi.properties +2 -0
  157. package/src/sap/ui/core/messagebundle_hr.properties +2 -0
  158. package/src/sap/ui/core/messagebundle_hu.properties +2 -0
  159. package/src/sap/ui/core/messagebundle_id.properties +4 -2
  160. package/src/sap/ui/core/messagebundle_it.properties +2 -0
  161. package/src/sap/ui/core/messagebundle_iw.properties +2 -0
  162. package/src/sap/ui/core/messagebundle_ja.properties +2 -0
  163. package/src/sap/ui/core/messagebundle_kk.properties +2 -0
  164. package/src/sap/ui/core/messagebundle_ko.properties +2 -0
  165. package/src/sap/ui/core/messagebundle_lt.properties +2 -0
  166. package/src/sap/ui/core/messagebundle_lv.properties +3 -1
  167. package/src/sap/ui/core/messagebundle_ms.properties +2 -0
  168. package/src/sap/ui/core/messagebundle_nl.properties +2 -0
  169. package/src/sap/ui/core/messagebundle_no.properties +2 -0
  170. package/src/sap/ui/core/messagebundle_pl.properties +2 -0
  171. package/src/sap/ui/core/messagebundle_pt.properties +2 -0
  172. package/src/sap/ui/core/messagebundle_pt_PT.properties +2 -0
  173. package/src/sap/ui/core/messagebundle_ro.properties +2 -0
  174. package/src/sap/ui/core/messagebundle_ru.properties +2 -0
  175. package/src/sap/ui/core/messagebundle_sh.properties +2 -0
  176. package/src/sap/ui/core/messagebundle_sk.properties +2 -0
  177. package/src/sap/ui/core/messagebundle_sl.properties +2 -0
  178. package/src/sap/ui/core/messagebundle_sv.properties +2 -0
  179. package/src/sap/ui/core/messagebundle_th.properties +2 -0
  180. package/src/sap/ui/core/messagebundle_tr.properties +2 -0
  181. package/src/sap/ui/core/messagebundle_uk.properties +2 -0
  182. package/src/sap/ui/core/messagebundle_vi.properties +2 -0
  183. package/src/sap/ui/core/messagebundle_zh_CN.properties +2 -0
  184. package/src/sap/ui/core/messagebundle_zh_TW.properties +2 -0
  185. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  186. package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
  187. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  188. package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
  189. package/src/sap/ui/core/mvc/JSView.js +1 -1
  190. package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
  191. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  192. package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
  193. package/src/sap/ui/core/mvc/View.js +1 -1
  194. package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
  195. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  196. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  197. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  198. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  199. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  200. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  201. package/src/sap/ui/core/routing/Router.js +1 -1
  202. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  203. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  204. package/src/sap/ui/core/service/Service.js +1 -1
  205. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  206. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  207. package/src/sap/ui/core/support/Plugin.js +1 -1
  208. package/src/sap/ui/core/support/Support.js +1 -1
  209. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  210. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  211. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  212. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  213. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  214. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  215. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  216. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  217. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  218. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  219. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  220. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  221. package/src/sap/ui/core/tmpl/Template.js +1 -1
  222. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  223. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  224. package/src/sap/ui/core/util/Export.js +1 -1
  225. package/src/sap/ui/core/util/ExportCell.js +1 -1
  226. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  227. package/src/sap/ui/core/util/ExportRow.js +1 -1
  228. package/src/sap/ui/core/util/ExportType.js +1 -1
  229. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  230. package/src/sap/ui/core/util/File.js +1 -1
  231. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  232. package/src/sap/ui/core/util/MockServer.js +19 -17
  233. package/src/sap/ui/core/util/PasteHelper.js +4 -4
  234. package/src/sap/ui/core/util/XMLPreprocessor.js +16 -4
  235. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -1
  236. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  237. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  238. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  239. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  240. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  241. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  242. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  243. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  244. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  245. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  246. package/src/sap/ui/debug/ControlTree.js +1 -1
  247. package/src/sap/ui/debug/DebugEnv.js +1 -1
  248. package/src/sap/ui/debug/PropertyList.js +1 -1
  249. package/src/sap/ui/dom/includeStylesheet.js +8 -3
  250. package/src/sap/ui/events/jquery/EventExtension.js +1 -1
  251. package/src/sap/ui/model/Binding.js +4 -3
  252. package/src/sap/ui/model/ClientModel.js +1 -1
  253. package/src/sap/ui/model/ClientTreeBinding.js +1 -1
  254. package/src/sap/ui/model/CompositeBinding.js +1 -1
  255. package/src/sap/ui/model/CompositeDataState.js +1 -1
  256. package/src/sap/ui/model/CompositeType.js +1 -1
  257. package/src/sap/ui/model/ContextBinding.js +1 -1
  258. package/src/sap/ui/model/DataState.js +1 -1
  259. package/src/sap/ui/model/MetaModel.js +1 -2
  260. package/src/sap/ui/model/Model.js +1 -1
  261. package/src/sap/ui/model/SelectionModel.js +1 -1
  262. package/src/sap/ui/model/SimpleType.js +1 -1
  263. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  264. package/src/sap/ui/model/Type.js +1 -1
  265. package/src/sap/ui/model/analytics/AnalyticalBinding.js +1 -2
  266. package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
  267. package/src/sap/ui/model/json/JSONListBinding.js +1 -1
  268. package/src/sap/ui/model/json/JSONModel.js +1 -1
  269. package/src/sap/ui/model/json/JSONPropertyBinding.js +1 -1
  270. package/src/sap/ui/model/message/MessageListBinding.js +1 -1
  271. package/src/sap/ui/model/message/MessageModel.js +1 -1
  272. package/src/sap/ui/model/message/MessagePropertyBinding.js +1 -1
  273. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  274. package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
  275. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  276. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  277. package/src/sap/ui/model/odata/ODataMetadata.js +3 -3
  278. package/src/sap/ui/model/odata/ODataModel.js +2 -2
  279. package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
  280. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  281. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  282. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  283. package/src/sap/ui/model/odata/type/Date.js +1 -1
  284. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  285. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  286. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  287. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +338 -0
  288. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  289. package/src/sap/ui/model/odata/type/Double.js +1 -1
  290. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  291. package/src/sap/ui/model/odata/type/Int.js +1 -1
  292. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  293. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  294. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  295. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  296. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  297. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  298. package/src/sap/ui/model/odata/type/Single.js +1 -1
  299. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  300. package/src/sap/ui/model/odata/type/String.js +1 -1
  301. package/src/sap/ui/model/odata/type/Time.js +1 -1
  302. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  303. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  304. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  305. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  306. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +8 -4
  307. package/src/sap/ui/model/odata/v2/ODataListBinding.js +32 -26
  308. package/src/sap/ui/model/odata/v2/ODataModel.js +11 -6
  309. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +3 -4
  310. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +16 -17
  311. package/src/sap/ui/model/odata/v4/Context.js +90 -52
  312. package/src/sap/ui/model/odata/v4/ODataBinding.js +16 -9
  313. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +129 -170
  314. package/src/sap/ui/model/odata/v4/ODataListBinding.js +205 -179
  315. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +91 -63
  316. package/src/sap/ui/model/odata/v4/ODataModel.js +316 -249
  317. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +48 -25
  318. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +63 -60
  319. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +2 -1
  320. package/src/sap/ui/model/odata/v4/lib/_Cache.js +41 -10
  321. package/src/sap/ui/model/odata/v4/lib/_Helper.js +6 -2
  322. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +2 -2
  323. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +20 -18
  324. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
  325. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  326. package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
  327. package/src/sap/ui/model/type/Boolean.js +1 -1
  328. package/src/sap/ui/model/type/Currency.js +1 -1
  329. package/src/sap/ui/model/type/Date.js +1 -1
  330. package/src/sap/ui/model/type/DateInterval.js +1 -1
  331. package/src/sap/ui/model/type/DateTime.js +1 -1
  332. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  333. package/src/sap/ui/model/type/FileSize.js +1 -1
  334. package/src/sap/ui/model/type/Float.js +1 -1
  335. package/src/sap/ui/model/type/Integer.js +1 -1
  336. package/src/sap/ui/model/type/String.js +1 -1
  337. package/src/sap/ui/model/type/Time.js +1 -1
  338. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  339. package/src/sap/ui/model/type/Unit.js +1 -1
  340. package/src/sap/ui/model/xml/XMLListBinding.js +1 -1
  341. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  342. package/src/sap/ui/model/xml/XMLPropertyBinding.js +1 -1
  343. package/src/sap/ui/performance/trace/Passport.js +3 -3
  344. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  345. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  346. package/src/sap/ui/test/Opa5.js +1 -1
  347. package/src/sap/ui/thirdparty/jqueryui/jquery-ui-datepicker.js +143 -3
  348. package/src/sap/ui/thirdparty/jqueryui/jquery-ui-position.js +8 -1
  349. package/src/sap/ui/thirdparty/mobify-carousel.js +1 -1
  350. package/src/sap/ui/util/Storage.js +1 -1
  351. package/src/ui5loader.js +1 -1
@@ -145,7 +145,7 @@ sap.ui.define([
145
145
  /**
146
146
  * @see sap.ui.model.ContextBinding.prototype.checkUpdate
147
147
  *
148
- * @param {boolean} bForceUpdate unused
148
+ * @param {boolean} [bForceUpdate] unused
149
149
  */
150
150
  ODataContextBinding.prototype.checkUpdate = function(/*bForceUpdate*/) {
151
151
  var oContext,
@@ -280,7 +280,7 @@ sap.ui.define([
280
280
  * @private
281
281
  */
282
282
  ODataContextBinding.prototype.setContext = function(oContext) {
283
- var oBindingContext, sContextPath, oData, bReloadNeeded, sResolvedPath,
283
+ var oBindingContext, sContextPath, oData, sNavigationProperty, bReloadNeeded, sResolvedPath,
284
284
  bForceUpdate = oContext && oContext.isRefreshForced(),
285
285
  bPreliminary = oContext && oContext.isPreliminary(),
286
286
  bTransient = oContext && oContext.isTransient && oContext.isTransient(),
@@ -303,8 +303,12 @@ sap.ui.define([
303
303
  if (Context.hasChanged(this.oContext, oContext)) {
304
304
  this.oContext = oContext;
305
305
  sResolvedPath = this.getResolvedPath();
306
- // If path doesn't resolve or parent context is created, reset current context
307
- if (!sResolvedPath || bTransient) {
306
+ if (sResolvedPath && bTransient) {
307
+ // prevent propagation of transient context if it refers to a navigation property
308
+ sNavigationProperty = this.oModel.oMetadata
309
+ ._splitByLastNavigationProperty(sResolvedPath).lastNavigationProperty;
310
+ }
311
+ if (!sResolvedPath || sNavigationProperty) {
308
312
  if (this.oElementContext !== null) {
309
313
  this.oElementContext = null;
310
314
  this._fireChange({ reason: ChangeReason.Context });
@@ -225,7 +225,7 @@ sap.ui.define([
225
225
  var aContexts, oInterval, aIntervals, iLimit, oSkipAndTop,
226
226
  aContextData = [];
227
227
 
228
- if (this.bInitial) {
228
+ if (this.bInitial || this._hasTransientParentContext()) {
229
229
  return [];
230
230
  }
231
231
 
@@ -418,10 +418,9 @@ sap.ui.define([
418
418
  * {@link sap.ui.model.odata.v2.Context#isTransient}
419
419
  */
420
420
  ODataListBinding.prototype.setContext = function (oContext) {
421
- var bHasCreatedContexts, sResolvedPath,
421
+ var bHadNonTransientContext, sResolvedPath,
422
422
  bForceUpdate = oContext && oContext.isRefreshForced(),
423
423
  bPreliminary = oContext && oContext.isPreliminary(),
424
- bTransient = oContext && oContext.isTransient && oContext.isTransient(),
425
424
  bUpdated = oContext && oContext.isUpdated();
426
425
 
427
426
  // If binding is initial or not a relative binding, nothing to do here
@@ -438,9 +437,7 @@ sap.ui.define([
438
437
  return;
439
438
  }
440
439
  if (Context.hasChanged(this.oContext, oContext)) {
441
- if (this.oContext !== oContext) {
442
- bHasCreatedContexts = this._getCreatedContexts().length > 0;
443
- }
440
+ bHadNonTransientContext = this.isResolved() && !this._hasTransientParentContext();
444
441
  this.oContext = oContext;
445
442
  sResolvedPath = this.getResolvedPath(); // resolved path with the new context
446
443
  this.sDeepPath = this.oModel.resolveDeep(this.sPath, this.oContext);
@@ -450,13 +447,12 @@ sap.ui.define([
450
447
  // ensure that data state is updated with each change of the context
451
448
  this.checkDataState();
452
449
  // If path does not resolve or parent context is created, reset current list
453
- if (!sResolvedPath || bTransient) {
454
- if (bHasCreatedContexts || this.aAllKeys || this.aKeys.length > 0
455
- || this.iLength > 0) {
456
- this.aAllKeys = null;
457
- this.aKeys = [];
458
- this.iLength = 0;
459
- this.bLengthFinal = true;
450
+ if (!sResolvedPath || this._hasTransientParentContext()) {
451
+ this.aAllKeys = null;
452
+ this.aKeys = [];
453
+ this.iLength = 0;
454
+ this.bLengthFinal = true;
455
+ if (bHadNonTransientContext) {
460
456
  this._fireChange({reason : ChangeReason.Context});
461
457
  }
462
458
 
@@ -961,7 +957,7 @@ sap.ui.define([
961
957
  /**
962
958
  * Refreshes the binding.
963
959
  *
964
- * @param {boolean} bForceUpdate Whether an update should be forced
960
+ * @param {boolean} [bForceUpdate] Whether an update should be forced
965
961
  * @param {object} [mChangedEntities] A map of changed entities
966
962
  * @param {object} [mEntityTypes] A map of entity types
967
963
  *
@@ -969,11 +965,9 @@ sap.ui.define([
969
965
  */
970
966
  ODataListBinding.prototype._refresh = function(bForceUpdate, mChangedEntities, mEntityTypes) {
971
967
  var oEntityType, sResolvedPath,
972
- bChangeDetected = false,
973
- bRelativeAndTransient = this.isRelative()
974
- && this.oContext && this.oContext.isTransient && this.oContext.isTransient();
968
+ bChangeDetected = false;
975
969
 
976
- if (bRelativeAndTransient) {
970
+ if (this._hasTransientParentContext()) {
977
971
  return;
978
972
  }
979
973
  this.bPendingRefresh = false;
@@ -1091,11 +1085,8 @@ sap.ui.define([
1091
1085
  * @public
1092
1086
  */
1093
1087
  ODataListBinding.prototype.initialize = function() {
1094
- var bRelativeAndTransient = this.isRelative()
1095
- && this.oContext && this.oContext.isTransient && this.oContext.isTransient();
1096
-
1097
1088
  if (this.oModel.oMetadata && this.oModel.oMetadata.isLoaded() && this.bInitial
1098
- && !bRelativeAndTransient) {
1089
+ && !this._hasTransientParentContext()) {
1099
1090
  if (!this._checkPathType()) {
1100
1091
  Log.error("List Binding is not bound against a list for " + this.getResolvedPath());
1101
1092
  }
@@ -1105,6 +1096,7 @@ sap.ui.define([
1105
1096
  if (this.bDataAvailable) {
1106
1097
  this._fireChange({reason: ChangeReason.Change});
1107
1098
  } else {
1099
+ this.resetData();
1108
1100
  this._fireRefresh({reason: ChangeReason.Refresh});
1109
1101
  }
1110
1102
  }
@@ -1119,7 +1111,7 @@ sap.ui.define([
1119
1111
  * Check whether this Binding would provide new values and in case it changed,
1120
1112
  * inform interested parties about this.
1121
1113
  *
1122
- * @param {boolean} bForceUpdate Force control update
1114
+ * @param {boolean} [bForceUpdate] Force control update
1123
1115
  * @param {object} mChangedEntities Map of changed entities
1124
1116
  * @private
1125
1117
  */
@@ -1211,7 +1203,7 @@ sap.ui.define([
1211
1203
  this.aKeys = [];
1212
1204
  this.aAllKeys = null;
1213
1205
  this.iLength = 0;
1214
- this.bLengthFinal = false;
1206
+ this.bLengthFinal = this._hasTransientParentContext() || !this.isResolved();
1215
1207
  this.sChangeReason = undefined;
1216
1208
  this.bDataAvailable = false;
1217
1209
  this.bLengthRequested = false;
@@ -1704,7 +1696,9 @@ sap.ui.define([
1704
1696
  * Creates a new entity for this binding's collection via
1705
1697
  * {@link sap.ui.model.odata.v2.ODataModel#createEntry} using the parameters given in
1706
1698
  * <code>mParameters</code> and inserts it at the list position specified by the
1707
- * <code>bAtEnd</code> parameter.
1699
+ * <code>bAtEnd</code> parameter. See
1700
+ * {@link topic:6c47b2b39db9404582994070ec3d57a2#loio4c4cd99af9b14e08bb72470cc7cabff4 Creating
1701
+ * Entities documentation} for comprehensive information on the topic.
1708
1702
  *
1709
1703
  * Note: This method requires that the model metadata has been loaded; see
1710
1704
  * {@link sap.ui.model.odata.v2.ODataModel#metadataLoaded}.
@@ -1777,7 +1771,7 @@ sap.ui.define([
1777
1771
  throw new Error("Parameter '" + sParameterKey + "' is not supported");
1778
1772
  }
1779
1773
  });
1780
- if (this.oContext && this.oContext.isTransient && this.oContext.isTransient()) {
1774
+ if (this._hasTransientParentContext()) {
1781
1775
  throw new Error("Parent context is transient");
1782
1776
  }
1783
1777
  if (this.bUseExpandedList) {
@@ -1957,5 +1951,17 @@ sap.ui.define([
1957
1951
  }).length;
1958
1952
  };
1959
1953
 
1954
+ /**
1955
+ * Returns whether this binding is relative and has a transient parent context.
1956
+ *
1957
+ * @returns {boolean} Whether this binding is relative and has a transient parent context
1958
+ *
1959
+ * @private
1960
+ */
1961
+ ODataListBinding.prototype._hasTransientParentContext = function () {
1962
+ return this.isRelative()
1963
+ && !!(this.oContext && this.oContext.isTransient && this.oContext.isTransient());
1964
+ };
1965
+
1960
1966
  return ODataListBinding;
1961
1967
  });
@@ -201,7 +201,7 @@ sap.ui.define([
201
201
  * This model is not prepared to be inherited from.
202
202
  *
203
203
  * @author SAP SE
204
- * @version 1.98.0
204
+ * @version 1.99.0
205
205
  *
206
206
  * @public
207
207
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -1887,7 +1887,7 @@ sap.ui.define([
1887
1887
  * function lead to a single synchronous call where <code>mChangedEntities</code> is the union
1888
1888
  * of all <code>mChangedEntities</Code> from the asynchronous calls.
1889
1889
  *
1890
- * @param {boolean} bForceUpdate
1890
+ * @param {boolean} [bForceUpdate]
1891
1891
  * The parameter <code>bForceUpdate</code> for the <code>checkUpdate</code> call on the
1892
1892
  * bindings
1893
1893
  * @param {boolean} bAsync
@@ -2922,7 +2922,7 @@ sap.ui.define([
2922
2922
  oResultValue = {};
2923
2923
  for (i = 0; i < aOwnPropSelect.length; i++) {
2924
2924
  sSelect = aOwnPropSelect[i];
2925
- if (oValue[sSelect] !== undefined) {
2925
+ if (oValue[sSelect] !== undefined || oValue.__metadata.created) {
2926
2926
  oResultValue[sSelect] = oValue[sSelect];
2927
2927
  } else {
2928
2928
  Log.fatal("No data loaded for select property: " + sSelect + " of entry: " + that.getKey(oValue));
@@ -4928,7 +4928,10 @@ sap.ui.define([
4928
4928
  };
4929
4929
 
4930
4930
  /**
4931
- * Trigger a <code>POST</code> request to the OData service that was specified in the model constructor.
4931
+ * Trigger a <code>POST</code> request to the OData service that was specified in the model
4932
+ * constructor; see
4933
+ * {@link topic:6c47b2b39db9404582994070ec3d57a2#loio4c4cd99af9b14e08bb72470cc7cabff4 Creating
4934
+ * Entities documentation} for comprehensive information on the topic.
4932
4935
  *
4933
4936
  * Please note that deep creates are not supported and may not work.
4934
4937
  *
@@ -6514,7 +6517,9 @@ sap.ui.define([
6514
6517
  /**
6515
6518
  * Creates a new entry object which is described by the metadata of the entity type of the
6516
6519
  * specified <code>sPath</code> Name. A context object is returned which can be used to bind
6517
- * against the newly created object.
6520
+ * against the newly created object. See
6521
+ * {@link topic:6c47b2b39db9404582994070ec3d57a2#loio4c4cd99af9b14e08bb72470cc7cabff4 Creating
6522
+ * Entities documentation} for comprehensive information on the topic.
6518
6523
  *
6519
6524
  * For each created entry a request is created and stored in a request queue.
6520
6525
  * The request queue can be submitted by calling {@link #submitChanges}. As long as the context
@@ -7876,7 +7881,7 @@ sap.ui.define([
7876
7881
  * path prefix. Use <code>fullTarget</code> to determine whether a message matches the resolved
7877
7882
  * binding path prefix.
7878
7883
  *
7879
- * @param {string} sMessageTarget
7884
+ * @param {string} sMessagePath
7880
7885
  * The messages target used as key in <code>this.mMessages</code>
7881
7886
  * @param {string} sPathPrefix
7882
7887
  * The resolved binding path prefix
@@ -92,7 +92,7 @@ sap.ui.define([
92
92
  * @extends sap.ui.model.TreeBinding
93
93
  * @hideconstructor
94
94
  * @public
95
- * @version 1.98.0
95
+ * @version 1.99.0
96
96
  */
97
97
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
98
98
 
@@ -906,8 +906,7 @@ sap.ui.define([
906
906
  * Retrieves parent ids from a given data set
907
907
  *
908
908
  * @param {Array} aData Lookup array to search for parent ids
909
- * @param {boolean} bExcludeRootNodes Can be set to exclude root node elements
910
- * @returns {Array} Array of all parent ids
909
+ * @returns {Object<string,string>} Map of all parent ids
911
910
  *
912
911
  * @private
913
912
  */
@@ -1821,7 +1820,7 @@ sap.ui.define([
1821
1820
  * Check whether this Binding would provide new values and in case it changed,fire a change
1822
1821
  * event.
1823
1822
  *
1824
- * @param {boolean} bForceUpdate
1823
+ * @param {boolean} [bForceUpdate]
1825
1824
  * Whether to fire the event regardless of the bindings state
1826
1825
  * @param {object} mChangedEntities
1827
1826
  * A map of changed entities
@@ -15,7 +15,6 @@ sap.ui.define([
15
15
  rPaths = /\$(?:(?:Annotation)|(?:(?:Navigation)?Property))?Path/,
16
16
  rSplitPathSegment = /^(.+?\/(\$(?:Annotation)?Path))(\/?)(.*)$/,
17
17
  rUnsupportedPathSegments = /\$(?:Navigation)?PropertyPath/,
18
-
19
18
  /**
20
19
  * @classdesc
21
20
  * A collection of methods which help to consume
@@ -113,16 +112,16 @@ sap.ui.define([
113
112
  * Example for "$AnnotationPath" in the context's path:
114
113
  * <pre>
115
114
  * &lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi.v0001.EQUIPMENT">
116
- * &lt;Annotation Term="com.sap.vocabularies.UI.v1.Facets">
117
- * &lt;Collection>
118
- * &lt;Record Type="com.sap.vocabularies.UI.v1.ReferenceFacet">
119
- * &lt;PropertyValue Property="Target" AnnotationPath="EQUIPMENT_2_PRODUCT/@com.sap.vocabularies.Common.v1.QuickInfo" />
120
- * &lt;/Record>
121
- * &lt;/Collection>
122
- * &lt;/Annotation>
115
+ * &lt;Annotation Term="com.sap.vocabularies.UI.v1.Facets">
116
+ * &lt;Collection>
117
+ * &lt;Record Type="com.sap.vocabularies.UI.v1.ReferenceFacet">
118
+ * &lt;PropertyValue Property="Target" AnnotationPath="EQUIPMENT_2_PRODUCT/@com.sap.vocabularies.Common.v1.QuickInfo" />
119
+ * &lt;/Record>
120
+ * &lt;/Collection>
121
+ * &lt;/Annotation>
123
122
  * &lt;/Annotations>
124
123
  * &lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi_product.v0001.Product">
125
- * &lt;Annotation Term="com.sap.vocabularies.Common.v1.QuickInfo" Path="Name" />
124
+ * &lt;Annotation Term="com.sap.vocabularies.Common.v1.QuickInfo" Path="Name" />
126
125
  * &lt;/Annotations>
127
126
  * </pre>
128
127
  * <pre>
@@ -134,16 +133,16 @@ sap.ui.define([
134
133
  * Example for "$Path" in the context's path:
135
134
  * <pre>
136
135
  * &lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi.v0001.EQUIPMENT">
137
- * &lt;Annotation Term="com.sap.vocabularies.UI.v1.LineItem">
138
- * &lt;Collection>
139
- * &lt;Record Type="com.sap.vocabularies.UI.v1.DataField">
140
- * &lt;PropertyValue Property="Value" Path="EQUIPMENT_2_PRODUCT/Name" />
141
- * &lt;/Record>
142
- * &lt;/Collection>
143
- * &lt;/Annotation>
136
+ * &lt;Annotation Term="com.sap.vocabularies.UI.v1.LineItem">
137
+ * &lt;Collection>
138
+ * &lt;Record Type="com.sap.vocabularies.UI.v1.DataField">
139
+ * &lt;PropertyValue Property="Value" Path="EQUIPMENT_2_PRODUCT/Name" />
140
+ * &lt;/Record>
141
+ * &lt;/Collection>
142
+ * &lt;/Annotation>
144
143
  * &lt;/Annotations>
145
144
  * &lt;Annotations Target="com.sap.gateway.default.iwbep.tea_busi_product.v0001.Product/Name">
146
- * &lt;Annotation Term="com.sap.vocabularies.Common.v1.QuickInfo" Path="PRODUCT_2_SUPPLIER/Supplier_Name" />
145
+ * &lt;Annotation Term="com.sap.vocabularies.Common.v1.QuickInfo" Path="PRODUCT_2_SUPPLIER/Supplier_Name" />
147
146
  * &lt;/Annotations>
148
147
  * </pre>
149
148
  * <pre>
@@ -18,7 +18,35 @@ sap.ui.define([
18
18
  iGenerationCounter = 0,
19
19
  oModule,
20
20
  // index of virtual context used for auto-$expand/$select
21
- iVIRTUAL = -9007199254740991/*Number.MIN_SAFE_INTEGER*/;
21
+ iVIRTUAL = -9007199254740991/*Number.MIN_SAFE_INTEGER*/,
22
+ /**
23
+ * @alias sap.ui.model.odata.v4.Context
24
+ * @author SAP SE
25
+ * @class Implementation of an OData V4 model's context.
26
+ *
27
+ * The context is a pointer to model data as returned by a query from a
28
+ * {@link sap.ui.model.odata.v4.ODataContextBinding} or a
29
+ * {@link sap.ui.model.odata.v4.ODataListBinding}. Contexts are always and only
30
+ * created by such bindings. A context for a context binding points to the complete query
31
+ * result. A context for a list binding points to one specific entry in the binding's
32
+ * collection. A property binding does not have a context, you can access its value via
33
+ * {@link sap.ui.model.odata.v4.ODataPropertyBinding#getValue}.
34
+ *
35
+ * Applications can access model data only via a context, either synchronously with the
36
+ * risk that the values are not available yet ({@link #getProperty} and
37
+ * {@link #getObject}) or asynchronously ({@link #requestProperty} and
38
+ * {@link #requestObject}).
39
+ *
40
+ * Context instances are immutable except for their indexes.
41
+ * @extends sap.ui.model.Context
42
+ * @hideconstructor
43
+ * @public
44
+ * @since 1.39.0
45
+ * @version 1.99.0
46
+ */
47
+ Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
+ constructor : constructor
49
+ });
22
50
 
23
51
  /*
24
52
  * Fetches and formats the primitive value at the given path.
@@ -54,6 +82,10 @@ sap.ui.define([
54
82
  });
55
83
  }
56
84
 
85
+ //*********************************************************************************************
86
+ // Context
87
+ //*********************************************************************************************
88
+
57
89
  /**
58
90
  * Do <strong>NOT</strong> call this private constructor. In the OData V4 model you cannot
59
91
  * create contexts at will: retrieve them from a binding or a view element instead.
@@ -79,52 +111,27 @@ sap.ui.define([
79
111
  * property update
80
112
  * @throws {Error}
81
113
  * If an invalid path is given
82
- *
83
- * @alias sap.ui.model.odata.v4.Context
84
- * @author SAP SE
85
- * @class Implementation of an OData V4 model's context.
86
- *
87
- * The context is a pointer to model data as returned by a query from a
88
- * {@link sap.ui.model.odata.v4.ODataContextBinding} or a
89
- * {@link sap.ui.model.odata.v4.ODataListBinding}. Contexts are always and only
90
- * created by such bindings. A context for a context binding points to the complete query
91
- * result. A context for a list binding points to one specific entry in the binding's
92
- * collection. A property binding does not have a context, you can access its value via
93
- * {@link sap.ui.model.odata.v4.ODataPropertyBinding#getValue}.
94
- *
95
- * Applications can access model data only via a context, either synchronously with the risk
96
- * that the values are not available yet ({@link #getProperty} and {@link #getObject}) or
97
- * asynchronously ({@link #requestProperty} and {@link #requestObject}).
98
- *
99
- * Context instances are immutable except for their indexes.
100
- * @extends sap.ui.model.Context
101
- * @hideconstructor
102
- * @public
103
- * @since 1.39.0
104
- * @version 1.98.0
105
114
  */
106
- var Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
107
- constructor : function (oModel, oBinding, sPath, iIndex, oCreatePromise, iGeneration,
108
- bInactive) {
109
- if (sPath[0] !== "/") {
110
- throw new Error("Not an absolute path: " + sPath);
111
- }
112
- if (sPath.endsWith("/")) {
113
- throw new Error("Unsupported trailing slash: " + sPath);
114
- }
115
- BaseContext.call(this, oModel, sPath);
116
- this.oBinding = oBinding;
117
- this.oCreatedPromise = oCreatePromise
118
- // ensure to return a promise that is resolved w/o data
119
- && Promise.resolve(oCreatePromise).then(function () {});
120
- this.oSyncCreatePromise = oCreatePromise;
121
- this.iGeneration = iGeneration || 0;
122
- this.bInactive = bInactive || undefined; // be in sync with the annotation
123
- this.iIndex = iIndex;
124
- this.bKeepAlive = false;
125
- this.fnOnBeforeDestroy = undefined;
126
- }
127
- });
115
+ function constructor(oModel, oBinding, sPath, iIndex, oCreatePromise, iGeneration,
116
+ bInactive) {
117
+ if (sPath[0] !== "/") {
118
+ throw new Error("Not an absolute path: " + sPath);
119
+ }
120
+ if (sPath.endsWith("/")) {
121
+ throw new Error("Unsupported trailing slash: " + sPath);
122
+ }
123
+ BaseContext.call(this, oModel, sPath);
124
+ this.oBinding = oBinding;
125
+ this.oCreatedPromise = oCreatePromise
126
+ // ensure to return a promise that is resolved w/o data
127
+ && Promise.resolve(oCreatePromise).then(function () {});
128
+ this.oSyncCreatePromise = oCreatePromise;
129
+ this.iGeneration = iGeneration || 0;
130
+ this.bInactive = bInactive || undefined; // be in sync with the annotation
131
+ this.iIndex = iIndex;
132
+ this.bKeepAlive = false;
133
+ this.fnOnBeforeDestroy = undefined;
134
+ }
128
135
 
129
136
  /**
130
137
  * Deletes the OData entity this context points to.
@@ -532,9 +539,24 @@ sap.ui.define([
532
539
  * @private
533
540
  */
534
541
  Context.prototype.fetchValue = function (sPath, oListener, bCached) {
542
+ var oBinding = this.oBinding;
543
+
535
544
  if (this.iIndex === iVIRTUAL) {
536
545
  return SyncPromise.resolve(); // no cache access for virtual contexts
537
546
  }
547
+ if (oBinding.getHeaderContext && oBinding.getHeaderContext() === this) {
548
+ if (sPath && sPath.startsWith(this.sPath)) {
549
+ sPath = sPath.slice(this.sPath.length + 1);
550
+ }
551
+ if (!sPath) {
552
+ return oBinding.fetchValue(this.sPath, oListener, bCached)
553
+ .then(function (aElements) {
554
+ return {$count : aElements.$count};
555
+ });
556
+ } else if (sPath !== "$count") {
557
+ throw new Error("Invalid header path: " + sPath);
558
+ }
559
+ }
538
560
  if (!sPath || sPath[0] !== "/") {
539
561
  // Create an absolute path based on the context's path and reduce it. This is only
540
562
  // necessary for data access via Context APIs, bindings already use absolute paths.
@@ -680,12 +702,16 @@ sap.ui.define([
680
702
  * Returns <code>undefined</code> if the data is not (yet) available; no request is triggered.
681
703
  * Use {@link #requestObject} for asynchronous access.
682
704
  *
705
+ * The header context of a list binding only delivers <code>$count</code> (wrapped in an object
706
+ * if <code>sPath</code> is "").
707
+ *
683
708
  * @param {string} [sPath=""]
684
709
  * A path relative to this context
685
710
  * @returns {any}
686
711
  * The requested value
687
712
  * @throws {Error}
688
- * If the context's root binding is suspended
713
+ * If the context's root binding is suspended or if the context is a header context and the
714
+ * path is neither empty nor "$count".
689
715
  *
690
716
  * @public
691
717
  * @see sap.ui.model.Context#getObject
@@ -710,8 +736,12 @@ sap.ui.define([
710
736
  * If the type is not yet available, <code>undefined</code> is returned.
711
737
  * @returns {any}
712
738
  * The requested property value
713
- * @throws {Error}
714
- * If the context's root binding is suspended or if the value is not primitive
739
+ * @throws {Error} If
740
+ * <ul>
741
+ * <li> the context's root binding is suspended,
742
+ * <li> the value is not primitive,
743
+ * <li> or the context is a header context and the path is not "$count"
744
+ * </ul>
715
745
  *
716
746
  * @public
717
747
  * @see sap.ui.model.Context#getProperty
@@ -809,7 +839,8 @@ sap.ui.define([
809
839
  * Returns whether there are pending changes for bindings dependent on this context, or for
810
840
  * unresolved bindings (see {@link sap.ui.model.Binding#isResolved}) which were dependent on
811
841
  * this context at the time the pending change was created. This includes the context itself
812
- * being transient (see {@link #isTransient}).
842
+ * being {@link #isTransient transient}. Since 1.98.0, {@link #isInactive inactive} contexts are
843
+ * ignored.
813
844
  *
814
845
  * @returns {boolean}
815
846
  * Whether there are pending changes
@@ -850,6 +881,7 @@ sap.ui.define([
850
881
  * otherwise.
851
882
  *
852
883
  * @public
884
+ * @see #isTransient
853
885
  * @see sap.ui.model.odata.v4.ODataListBinding#create
854
886
  * @see sap.ui.model.odata.v4.ODataListBinding#event:createActivate
855
887
  * @since 1.98.0
@@ -884,6 +916,7 @@ sap.ui.define([
884
916
  * created using {@link sap.ui.model.odata.v4.ODataListBinding#create}
885
917
  *
886
918
  * @public
919
+ * @see #isInactive
887
920
  * @since 1.43.0
888
921
  */
889
922
  Context.prototype.isTransient = function () {
@@ -1035,12 +1068,16 @@ sap.ui.define([
1035
1068
  * Note that the function clones the result. Modify values via
1036
1069
  * {@link sap.ui.model.odata.v4.Context#setProperty}.
1037
1070
  *
1071
+ * The header context of a list binding only delivers <code>$count</code> (wrapped in an object
1072
+ * if <code>sPath</code> is "").
1073
+ *
1038
1074
  * If you want {@link #requestObject} to read fresh data, call {@link #refresh} first.
1039
1075
  *
1040
1076
  * @param {string} [sPath=""]
1041
1077
  * A path relative to this context
1042
1078
  * @returns {Promise}
1043
- * A promise on the requested value
1079
+ * A promise on the requested value; it is rejected if the context is a header context and the
1080
+ * path is neither empty nor "$count".
1044
1081
  * @throws {Error}
1045
1082
  * If the context's root binding is suspended
1046
1083
  *
@@ -1068,7 +1105,8 @@ sap.ui.define([
1068
1105
  * If <code>true</code>, the values are returned in external format using UI5 types for the
1069
1106
  * given property paths that format corresponding to the properties' EDM types and constraints
1070
1107
  * @returns {Promise}
1071
- * A promise on the requested value or values; it is rejected if a value is not primitive
1108
+ * A promise on the requested value or values; it is rejected if a value is not primitive or
1109
+ * if the context is a header context and a path is not "$count"
1072
1110
  * @throws {Error}
1073
1111
  * If the context's root binding is suspended
1074
1112
  *
@@ -166,6 +166,7 @@ sap.ui.define([
166
166
  }
167
167
  break;
168
168
  case "$$canonicalPath":
169
+ case "$$getKeepAliveContext":
169
170
  case "$$noPatch":
170
171
  case "$$ownRequest":
171
172
  case "$$patchWithoutSideEffects":
@@ -533,7 +534,7 @@ sap.ui.define([
533
534
  // With $$aggregation, no auto-$expand/$select is needed
534
535
  oQueryOptionsPromise = this.doFetchQueryOptions(oContext);
535
536
  if (this.oModel.bAutoExpandSelect && this.aChildCanUseCachePromises
536
- && !(this.mParameters && this.mParameters.$$aggregation)) {
537
+ && !this.mParameters.$$aggregation) {
537
538
  // For auto-$expand/$select, wait for query options of dependent bindings:
538
539
  // Promise.resolve() ensures all dependent bindings are created and have sent their
539
540
  // query options promise to this binding via fetchIfChildCanUseCache.
@@ -567,7 +568,8 @@ sap.ui.define([
567
568
  return wrapQueryOptions(oQueryOptionsPromise);
568
569
  }
569
570
  return oContext.getBinding()
570
- .fetchIfChildCanUseCache(oContext, that.sPath, oQueryOptionsPromise)
571
+ .fetchIfChildCanUseCache(oContext, that.sPath, oQueryOptionsPromise,
572
+ !this.mParameters) // duck typing for property binding
571
573
  .then(function (sReducedPath) {
572
574
  return wrapQueryOptions(sReducedPath ? undefined : oQueryOptionsPromise,
573
575
  sReducedPath);
@@ -814,7 +816,8 @@ sap.ui.define([
814
816
  * changes or created entities which have not been sent successfully to the server. This
815
817
  * function does not take into account the deletion of entities (see
816
818
  * {@link sap.ui.model.odata.v4.Context#delete}) and the execution of OData operations
817
- * (see {@link sap.ui.model.odata.v4.ODataContextBinding#execute}).
819
+ * (see {@link sap.ui.model.odata.v4.ODataContextBinding#execute}). Since 1.98.0,
820
+ * {@link sap.ui.model.odata.v4.Context#isInactive inactive} contexts are ignored.
818
821
  *
819
822
  * Note: If this binding is relative, its data is cached separately for each parent context
820
823
  * path. This method returns <code>true</code> if there are pending changes for the current
@@ -823,11 +826,15 @@ sap.ui.define([
823
826
  *
824
827
  * @param {boolean} [bIgnoreKeptAlive]
825
828
  * Whether to ignore changes which will not be lost by APIs like
826
- * {@link sap.ui.model.odata.v4.ODataListBinding#changeParameters changeParameters},
827
- * {@link sap.ui.model.odata.v4.ODataListBinding#filter filter},
828
- * {@link sap.ui.model.odata.v4.ODataListBinding#sort sort}, or
829
- * {@link sap.ui.model.odata.v4.ODataListBinding#suspend suspend} because they relate to a
830
- * {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
829
+ * {@link sap.ui.model.odata.v4.ODataListBinding#changeParameters changeParameters},
830
+ * {@link sap.ui.model.odata.v4.ODataListBinding#filter filter},
831
+ * {@link sap.ui.model.odata.v4.ODataListBinding#sort sort}, or
832
+ * {@link sap.ui.model.odata.v4.ODataListBinding#suspend suspend} because they relate to a
833
+ * {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
834
+ * Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
835
+ * of a {@link #getRootBinding root binding} are treated as kept-alive by this flag.
836
+ * Since 1.99.0, the same happens for bindings using the <code>$$ownRequest</code> parameter
837
+ * (see {@link sap.ui.model.odata.v4.ODataModel#bindList}).
831
838
  * @returns {boolean}
832
839
  * <code>true</code> if the binding is resolved and has pending changes
833
840
  *
@@ -857,7 +864,7 @@ sap.ui.define([
857
864
  ODataBinding.prototype.hasPendingChangesForPath = function (sPath, bIgnoreKeptAlive) {
858
865
  return this.withCache(function (oCache, sCachePath, oBinding) {
859
866
  return oCache.hasPendingChangesForPath(sCachePath, bIgnoreKeptAlive,
860
- bIgnoreKeptAlive && oBinding.isRoot()); // Note: implies oBinding === that
867
+ bIgnoreKeptAlive && (oBinding.isRoot() || oBinding.mParameters.$$ownRequest));
861
868
  }, sPath, true).unwrap();
862
869
  };
863
870