@openui5/sap.ui.core 1.125.0 → 1.126.1

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 (464) hide show
  1. package/.dtsgenrc +76 -0
  2. package/.eslintrc.json +4 -1
  3. package/.reuse/dep5 +4 -4
  4. package/THIRDPARTY.txt +6 -6
  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.storage.js +3 -3
  11. package/src/sap/base/Event.js +1 -1
  12. package/src/sap/base/Eventing.js +1 -1
  13. package/src/sap/base/Log.js +0 -16
  14. package/src/sap/base/config.js +1 -1
  15. package/src/sap/base/i18n/LanguageTag.js +1 -1
  16. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  17. package/src/sap/base/util/ObjectPath.js +6 -6
  18. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  19. package/src/sap/base/util/restricted/_castArray.js +1 -1
  20. package/src/sap/base/util/restricted/_compact.js +1 -1
  21. package/src/sap/base/util/restricted/_curry.js +1 -1
  22. package/src/sap/base/util/restricted/_debounce.js +1 -1
  23. package/src/sap/base/util/restricted/_difference.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  25. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  28. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  29. package/src/sap/base/util/restricted/_flatten.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  31. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  32. package/src/sap/base/util/restricted/_intersection.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  34. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  36. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  37. package/src/sap/base/util/restricted/_isNil.js +1 -1
  38. package/src/sap/base/util/restricted/_max.js +1 -1
  39. package/src/sap/base/util/restricted/_merge.js +1 -1
  40. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  41. package/src/sap/base/util/restricted/_min.js +1 -1
  42. package/src/sap/base/util/restricted/_omit.js +1 -1
  43. package/src/sap/base/util/restricted/_pick.js +1 -1
  44. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  45. package/src/sap/base/util/restricted/_throttle.js +1 -1
  46. package/src/sap/base/util/restricted/_toArray.js +1 -1
  47. package/src/sap/base/util/restricted/_union.js +1 -1
  48. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  49. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  50. package/src/sap/base/util/restricted/_uniq.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  52. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  53. package/src/sap/base/util/restricted/_without.js +1 -1
  54. package/src/sap/base/util/restricted/_xor.js +1 -1
  55. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  56. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  58. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  59. package/src/sap/ui/Device.js +35 -10
  60. package/src/sap/ui/Global.js +6 -6
  61. package/src/sap/ui/base/Event.js +1 -1
  62. package/src/sap/ui/base/EventProvider.js +1 -1
  63. package/src/sap/ui/base/Interface.js +1 -1
  64. package/src/sap/ui/base/ManagedObject.js +16 -1
  65. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  66. package/src/sap/ui/base/Metadata.js +1 -1
  67. package/src/sap/ui/base/Object.js +1 -1
  68. package/src/sap/ui/base/ObjectPool.js +1 -1
  69. package/src/sap/ui/core/.library +1 -8
  70. package/src/sap/ui/core/BusyIndicator.js +1 -1
  71. package/src/sap/ui/core/Component.js +17 -3
  72. package/src/sap/ui/core/ComponentContainer.js +1 -1
  73. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  74. package/src/sap/ui/core/ComponentSupport.js +1 -1
  75. package/src/sap/ui/core/Configuration.js +1 -1
  76. package/src/sap/ui/core/Control.js +1 -1
  77. package/src/sap/ui/core/Core.js +14 -5
  78. package/src/sap/ui/core/CustomData.js +1 -1
  79. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  80. package/src/sap/ui/core/Element.js +1 -1
  81. package/src/sap/ui/core/ElementMetadata.js +1 -1
  82. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  83. package/src/sap/ui/core/EventBus.js +1 -1
  84. package/src/sap/ui/core/Fragment.js +1 -1
  85. package/src/sap/ui/core/HTML.js +1 -1
  86. package/src/sap/ui/core/History.js +1 -1
  87. package/src/sap/ui/core/Icon.js +1 -1
  88. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  89. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  90. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  91. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  92. package/src/sap/ui/core/InvisibleText.js +1 -1
  93. package/src/sap/ui/core/Item.js +1 -1
  94. package/src/sap/ui/core/LabelEnablement.js +1 -1
  95. package/src/sap/ui/core/LayoutData.js +1 -1
  96. package/src/sap/ui/core/Lib.js +2 -2
  97. package/src/sap/ui/core/ListItem.js +1 -1
  98. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  99. package/src/sap/ui/core/Locale.js +1 -1
  100. package/src/sap/ui/core/LocaleData.js +148 -102
  101. package/src/sap/ui/core/Manifest.js +1 -1
  102. package/src/sap/ui/core/Message.js +1 -1
  103. package/src/sap/ui/core/RenderManager.js +1 -1
  104. package/src/sap/ui/core/Renderer.js +1 -1
  105. package/src/sap/ui/core/ResizeHandler.js +1 -1
  106. package/src/sap/ui/core/ScrollBar.js +1 -1
  107. package/src/sap/ui/core/SeparatorItem.js +1 -1
  108. package/src/sap/ui/core/Title.js +1 -1
  109. package/src/sap/ui/core/TooltipBase.js +1 -1
  110. package/src/sap/ui/core/UIArea.js +2 -2
  111. package/src/sap/ui/core/UIComponent.js +1 -1
  112. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  113. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  114. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  115. package/src/sap/ui/core/XMLComposite.js +1 -1
  116. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  117. package/src/sap/ui/core/boot.js +1 -6
  118. package/src/sap/ui/core/date/UI5Date.js +1 -1
  119. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  120. package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
  121. package/src/sap/ui/core/dnd/DragAndDrop.js +151 -10
  122. package/src/sap/ui/core/dnd/DragDropBase.js +13 -2
  123. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  124. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  125. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  126. package/src/sap/ui/{model → core/fieldhelp}/FieldHelp.js +92 -65
  127. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +62 -0
  128. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  129. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  130. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  131. package/src/sap/ui/core/hyphenation/Hyphenation.js +2 -1
  132. package/src/sap/ui/core/library.js +49 -9
  133. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  134. package/src/sap/ui/core/message/Message.js +1 -1
  135. package/src/sap/ui/core/message/MessageManager.js +1 -1
  136. package/src/sap/ui/core/message/MessageParser.js +1 -1
  137. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  138. package/src/sap/ui/core/mvc/ControllerExtension.js +16 -0
  139. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  140. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  141. package/src/sap/ui/core/mvc/JSView.js +1 -1
  142. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  143. package/src/sap/ui/core/mvc/View.js +1 -1
  144. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  145. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  146. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  147. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  148. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  149. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  150. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  151. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  152. package/src/sap/ui/core/service/Service.js +1 -1
  153. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  155. package/src/sap/ui/core/support/Plugin.js +1 -1
  156. package/src/sap/ui/core/support/Support.js +1 -1
  157. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  158. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  159. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  160. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  161. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  162. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  163. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  164. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  165. package/src/sap/ui/core/support/trace/E2eTraceLib.js +1 -1
  166. package/src/sap/ui/core/themes/sap_hcb/base_BlindLayer.less +37 -0
  167. package/src/sap/ui/core/themes/sap_hcb/base_BrowserScrollbar.less +36 -0
  168. package/src/sap/ui/core/themes/sap_hcb/base_BusyIndicator.less +19 -0
  169. package/src/sap/ui/core/themes/sap_hcb/base_CommandShortcutHints.less +20 -0
  170. package/src/sap/ui/core/themes/sap_hcb/base_DragAndDrop.less +76 -0
  171. package/src/sap/ui/core/themes/sap_hcb/base_Icon.less +144 -0
  172. package/src/sap/ui/core/themes/sap_hcb/base_LocalBusyIndicator.less +292 -0
  173. package/src/sap/ui/core/themes/sap_hcb/base_SAP-icons.less +10 -0
  174. package/src/sap/ui/core/themes/sap_hcb/base_ScrollBar.less +20 -0
  175. package/src/sap/ui/core/themes/sap_hcb/base_Shadow.less +3 -0
  176. package/src/sap/ui/core/themes/sap_hcb/base_TechnicalInfo.less +157 -0
  177. package/src/sap/ui/core/themes/sap_hcb/base_View.less +12 -0
  178. package/src/sap/ui/core/themes/sap_hcb/base_media.less +36 -0
  179. package/src/sap/ui/core/themes/sap_hcb/base_parameterClasses.less +83 -0
  180. package/src/sap/ui/core/themes/sap_hcb/base_shared.less +340 -0
  181. package/src/sap/ui/core/themes/sap_hcb/library.source.less +27 -1
  182. package/src/sap/ui/core/theming/Parameters.js +68 -8
  183. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  184. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  185. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  186. package/src/sap/ui/core/tmpl/Template.js +1 -1
  187. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  188. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  189. package/src/sap/ui/core/util/Export.js +1 -1
  190. package/src/sap/ui/core/util/ExportCell.js +1 -1
  191. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  192. package/src/sap/ui/core/util/ExportRow.js +1 -1
  193. package/src/sap/ui/core/util/ExportType.js +1 -1
  194. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  195. package/src/sap/ui/core/util/File.js +1 -1
  196. package/src/sap/ui/core/util/LibraryInfo.js +2 -2
  197. package/src/sap/ui/core/util/MockServer.js +1 -2
  198. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  199. package/src/sap/ui/core/util/XMLPreprocessor.js +14 -15
  200. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  201. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  202. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  203. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  204. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  205. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  206. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  207. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  208. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  209. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  210. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  211. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  212. package/src/sap/ui/debug/ControlTree.js +1 -1
  213. package/src/sap/ui/debug/DebugEnv.js +1 -1
  214. package/src/sap/ui/debug/PropertyList.js +1 -1
  215. package/src/sap/ui/model/Binding.js +28 -0
  216. package/src/sap/ui/model/ClientModel.js +1 -1
  217. package/src/sap/ui/model/CompositeDataState.js +1 -1
  218. package/src/sap/ui/model/CompositeType.js +1 -1
  219. package/src/sap/ui/model/DataState.js +1 -1
  220. package/src/sap/ui/model/ManagedObjectBindingSupport.js +5 -0
  221. package/src/sap/ui/model/MetaModel.js +1 -1
  222. package/src/sap/ui/model/Model.js +1 -1
  223. package/src/sap/ui/model/SelectionModel.js +1 -1
  224. package/src/sap/ui/model/SimpleType.js +1 -1
  225. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  226. package/src/sap/ui/model/Type.js +1 -1
  227. package/src/sap/ui/model/base/ManagedObjectModel.js +12 -2
  228. package/src/sap/ui/model/json/JSONModel.js +16 -11
  229. package/src/sap/ui/model/message/MessageModel.js +1 -1
  230. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  231. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  232. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  233. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  234. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  235. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +7 -2
  236. package/src/sap/ui/model/odata/ODataUtils.js +22 -14
  237. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  238. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  239. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  240. package/src/sap/ui/model/odata/type/Date.js +1 -1
  241. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  242. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  243. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  244. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  245. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  246. package/src/sap/ui/model/odata/type/Double.js +1 -1
  247. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  248. package/src/sap/ui/model/odata/type/Int.js +1 -1
  249. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  250. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  251. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  252. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  253. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  254. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  255. package/src/sap/ui/model/odata/type/Single.js +1 -1
  256. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  257. package/src/sap/ui/model/odata/type/String.js +1 -1
  258. package/src/sap/ui/model/odata/type/Time.js +1 -1
  259. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  260. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  261. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  262. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  263. package/src/sap/ui/model/odata/v2/ODataModel.js +1 -1
  264. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  265. package/src/sap/ui/model/odata/v4/Context.js +92 -43
  266. package/src/sap/ui/model/odata/v4/ODataBinding.js +20 -20
  267. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +6 -7
  268. package/src/sap/ui/model/odata/v4/ODataListBinding.js +176 -87
  269. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +9 -9
  270. package/src/sap/ui/model/odata/v4/ODataModel.js +36 -9
  271. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +3 -3
  272. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +12 -11
  273. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +176 -75
  274. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +48 -9
  275. package/src/sap/ui/model/odata/v4/lib/_Cache.js +15 -17
  276. package/src/sap/ui/model/odata/v4/lib/_Helper.js +49 -14
  277. package/src/sap/ui/model/odata/v4/lib/_Parser.js +3 -3
  278. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +20 -12
  279. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +2 -2
  280. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +3 -3
  281. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  282. package/src/sap/ui/model/type/Boolean.js +1 -1
  283. package/src/sap/ui/model/type/Currency.js +1 -1
  284. package/src/sap/ui/model/type/Date.js +1 -1
  285. package/src/sap/ui/model/type/DateInterval.js +1 -1
  286. package/src/sap/ui/model/type/DateTime.js +1 -1
  287. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  288. package/src/sap/ui/model/type/FileSize.js +1 -1
  289. package/src/sap/ui/model/type/Float.js +1 -1
  290. package/src/sap/ui/model/type/Integer.js +1 -1
  291. package/src/sap/ui/model/type/String.js +1 -1
  292. package/src/sap/ui/model/type/Time.js +1 -1
  293. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  294. package/src/sap/ui/model/type/Unit.js +1 -1
  295. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  296. package/src/sap/ui/performance/trace/FESR.js +2 -2
  297. package/src/sap/ui/performance/trace/Interaction.js +1 -1
  298. package/src/sap/ui/performance/trace/Passport.js +1 -1
  299. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  300. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  301. package/src/sap/ui/test/generic/TestBase.js +1 -1
  302. package/src/sap/ui/test/starter/_utils.js +18 -3
  303. package/src/sap/ui/util/Mobile.js +7 -4
  304. package/src/sap/ui/util/Storage.js +1 -1
  305. package/src/ui5loader-autoconfig.js +0 -25
  306. package/test/sap/ui/core/BindableResponseHeaders.html +1 -2
  307. package/test/sap/ui/core/ODataV2CanonicalRequests.html +8 -5
  308. package/test/sap/ui/core/ODataV2Messages.html +14 -11
  309. package/test/sap/ui/core/ODataV2MessagesPerf.html +34 -9
  310. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  311. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.html +2 -1
  312. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.js +2 -12
  313. package/test/sap/ui/core/demokit/sample/common/Controller.js +2 -2
  314. package/test/sap/ui/core/demokit/sample/common/ValueHelp.js +2 -2
  315. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  316. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  317. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  318. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  319. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/SandboxModel.js +6 -6
  320. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +110 -21
  321. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +35 -43
  322. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +118 -26
  323. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +99 -90
  324. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +87 -40
  325. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/pages/Main.js +4 -3
  326. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Component.js +18 -0
  327. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateRelative.js +1 -8
  328. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Main.controller.js +1 -2
  329. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  330. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  331. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  332. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  333. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  334. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  335. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  336. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  337. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  338. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  339. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  342. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  343. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  344. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  345. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  346. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  347. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  348. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  350. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  351. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  352. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  353. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  354. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  355. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  356. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  362. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  363. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  364. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  365. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  366. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/localService/mockserver.js +4 -4
  367. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  368. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/localService/mockserver.js +4 -4
  369. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  370. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/localService/mockserver.js +4 -4
  371. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  372. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/localService/mockserver.js +4 -4
  373. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  374. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/localService/mockserver.js +4 -4
  375. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  376. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +4 -4
  377. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  378. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +4 -4
  379. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  380. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +4 -4
  381. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  382. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +4 -4
  383. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  384. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +4 -4
  385. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  386. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +4 -4
  387. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  388. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.view.xml +3 -3
  389. package/test/sap/ui/core/qunit/CommandExecution.qunit.js +96 -92
  390. package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +24 -0
  391. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +80 -0
  392. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -0
  393. package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +1 -1
  394. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +2 -1
  395. package/test/sap/ui/core/qunit/base/Config.qunit.js +117 -114
  396. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.html +3 -3
  397. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.js +98 -95
  398. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +20 -45
  399. package/test/sap/ui/core/qunit/base/Config_global.qunit.html +2 -2
  400. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +2 -2
  401. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.html +2 -2
  402. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.js +17 -16
  403. package/test/sap/ui/core/qunit/base/Config_url.qunit.html +2 -2
  404. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.beforeBootstrap.js +6 -0
  405. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.qunit.js +4 -4
  406. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.js +30 -10
  407. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +5 -1
  408. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +159 -3
  409. package/test/sap/ui/core/qunit/{model → fieldhelp}/FieldHelp.qunit.js +306 -24
  410. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +55 -0
  411. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.html +12 -0
  412. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.js +50 -0
  413. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +1 -1
  414. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +6 -1
  415. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +1 -1
  416. package/test/sap/ui/core/qunit/jquery-mobile-custom.beforeBootstrap.js +11 -0
  417. package/test/sap/ui/core/qunit/jquery-mobile-custom.qunit.js +3 -3
  418. package/test/sap/ui/core/qunit/json/JSONModel.qunit.js +21 -0
  419. package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -6
  420. package/test/sap/ui/core/qunit/loader/config.qunit.js +41 -2
  421. package/test/sap/ui/core/qunit/mvc/testsuite.mvc.qunit.js +9 -4
  422. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +5 -12
  423. package/test/sap/ui/core/qunit/odata/type/testsuite.odata.types.qunit.js +1 -0
  424. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +202 -73
  425. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +94 -2
  426. package/test/sap/ui/core/qunit/odata/v2/data/ZUI5_GWSAMPLE_BASIC.metadata.xml +4 -0
  427. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +106 -103
  428. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +3 -3
  429. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +20 -20
  430. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +370 -109
  431. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +42 -42
  432. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +2260 -177
  433. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +39 -7
  434. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +7 -6
  435. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +13 -14
  436. package/test/sap/ui/core/qunit/odata/v4/_AnnotationHelperExpression.qunit.js +3 -3
  437. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +592 -169
  438. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +82 -2
  439. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +44 -47
  440. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +80 -20
  441. package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +2 -2
  442. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +175 -69
  443. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +3 -3
  444. package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +1 -1
  445. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +9 -7
  446. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +6 -1
  447. package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib4/themes/sap_horizon_hcb/library.css +2 -0
  448. package/test/sap/ui/core/qunit/testsuite.qunit.js +1 -0
  449. package/test/sap/ui/core/qunit/testsuites/testsuite.browser.runtime.qunit.js +5 -1
  450. package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +0 -3
  451. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +4 -1
  452. package/test/sap/ui/core/qunit/ui/Device.qunit.js +68 -25
  453. package/test/sap/ui/core/qunit/ui5classes/ManagedObjectMetadata.qunit.js +3 -0
  454. package/test/sap/ui/core/qunit/util/Mobile.qunit.js +12 -7
  455. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +20 -20
  456. package/test/sap/ui/core/relnotes/changes-1.125.json +1 -6
  457. package/test/sap/ui/core/relnotes/changes-1.126.json +63 -0
  458. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  459. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  460. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  461. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  462. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  463. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  464. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
@@ -931,7 +931,8 @@ sap.ui.define([
931
931
  /**
932
932
  * Calculates the index range to be read for the given start, length and prefetch length.
933
933
  * Checks if <code>aElements</code> entries are available for at least half the prefetch length
934
- * left and right to it. If not, the full prefetch length is added to this side.
934
+ * left and right to it. If not, the full prefetch length is added to this side, starting at the first missing
935
+ * index.
935
936
  *
936
937
  * @param {any[]} aElements
937
938
  * The array of available elements
@@ -951,28 +952,35 @@ sap.ui.define([
951
952
  * @private
952
953
  */
953
954
  ODataUtils._getReadRange = function (aElements, iStart, iLength, iPrefetchLength, fnIsMissing) {
954
- // Checks whether aElements contains at least one missing entry within the given start
955
- // (inclusive) and end (exclusive).
956
- function isDataMissing(iStart, iEnd) {
957
- var i;
958
- for (i = iStart; i < iEnd; i += 1) {
955
+ // Returns the index of the first missing element in the element range iFrom (inclusive) to iTo (exclusive) or
956
+ // -1 if no element is missing in the range
957
+ function getFirstMissingIndex(iFrom, iTo) {
958
+ const iStep = Math.sign(iTo - iFrom);
959
+ for (let i = iFrom; i !== iTo; i += iStep) {
959
960
  if (aElements[i] === undefined || fnIsMissing?.(aElements[i])) {
960
- return true;
961
+ return i;
961
962
  }
962
963
  }
963
- return false;
964
+
965
+ return -1;
964
966
  }
965
967
 
966
968
  // Make sure that "half the prefetch length" is an integer. Round it up so that at least the
967
969
  // half is checked on both sides. (With a prefetch of 5 for example, 3 elements are checked
968
970
  // both to the left and to the right.)
969
971
  const iHalfPrefetchLength = Math.ceil(iPrefetchLength / 2);
970
- if (isDataMissing(iStart + iLength, iStart + iLength + iHalfPrefetchLength)) {
971
- iLength += iPrefetchLength;
972
- }
973
- if (isDataMissing(Math.max(iStart - iHalfPrefetchLength, 0), iStart)) {
974
- iLength += iPrefetchLength;
975
- iStart -= iPrefetchLength;
972
+ let iFirstMissingIndex = getFirstMissingIndex(iStart + iLength, iStart + iLength + iHalfPrefetchLength);
973
+ if (iFirstMissingIndex !== -1) {
974
+ const iAvailableElements = iFirstMissingIndex - (iStart + iLength);
975
+ iLength += iAvailableElements + iPrefetchLength;
976
+ }
977
+ // for start index 0, both iFrom and iTo passed to getFirstMissingIndex are -1, so that it returns -1
978
+ iFirstMissingIndex = getFirstMissingIndex(iStart - 1, Math.max(iStart - 1 - iHalfPrefetchLength, -1));
979
+ if (iFirstMissingIndex !== -1) {
980
+ const iAvailableElements = iStart - 1 - iFirstMissingIndex;
981
+ const iAdditionalElements = iAvailableElements + iPrefetchLength;
982
+ iLength += iAdditionalElements;
983
+ iStart -= iAdditionalElements;
976
984
  if (iStart < 0) {
977
985
  iLength += iStart; // Note: Infinity + -Infinity === NaN
978
986
  if (isNaN(iLength)) {
@@ -87,7 +87,7 @@ sap.ui.define([
87
87
  * @extends sap.ui.model.odata.type.ODataType
88
88
  *
89
89
  * @author SAP SE
90
- * @version 1.125.0
90
+ * @version 1.126.1
91
91
  *
92
92
  * @alias sap.ui.model.odata.type.Boolean
93
93
  * @param {object} [oFormatOptions]
@@ -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.125.0
27
+ * @version 1.126.1
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.Byte
30
30
  * @param {object} [oFormatOptions]
@@ -65,7 +65,7 @@ sap.ui.define([
65
65
  * @extends sap.ui.model.type.Currency
66
66
  * @public
67
67
  * @since 1.63.0
68
- * @version 1.125.0
68
+ * @version 1.126.1
69
69
  */
70
70
  var Currency = BaseCurrency.extend("sap.ui.model.odata.type.Currency", {
71
71
  constructor : function (oFormatOptions, oConstraints) {
@@ -76,7 +76,7 @@ sap.ui.define([
76
76
  * @extends sap.ui.model.odata.type.ODataType
77
77
  *
78
78
  * @author SAP SE
79
- * @version 1.125.0
79
+ * @version 1.126.1
80
80
  *
81
81
  * @alias sap.ui.model.odata.type.Date
82
82
  * @param {object} [oFormatOptions]
@@ -61,7 +61,7 @@ sap.ui.define([
61
61
  * @extends sap.ui.model.odata.type.DateTimeBase
62
62
  *
63
63
  * @author SAP SE
64
- * @version 1.125.0
64
+ * @version 1.126.1
65
65
  *
66
66
  * @alias sap.ui.model.odata.type.DateTime
67
67
  * @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.27.0
95
- * @version 1.125.0
95
+ * @version 1.126.1
96
96
  */
97
97
  var DateTimeBase = ODataType.extend("sap.ui.model.odata.type.DateTimeBase", {
98
98
  constructor : function (oFormatOptions, oConstraints) {
@@ -29,7 +29,7 @@ sap.ui.define([
29
29
  * @extends sap.ui.model.odata.type.DateTimeBase
30
30
  *
31
31
  * @author SAP SE
32
- * @version 1.125.0
32
+ * @version 1.126.1
33
33
  *
34
34
  * @alias sap.ui.model.odata.type.DateTimeOffset
35
35
  * @param {object} [oFormatOptions]
@@ -46,7 +46,7 @@ sap.ui.define([
46
46
  * @public
47
47
  * @see {sap.ui.model.odata.v2.ODataModel#bindProperty}
48
48
  * @since 1.99.0
49
- * @version 1.125.0
49
+ * @version 1.126.1
50
50
  */
51
51
  var DateTimeWithTimezone = CompositeType.extend("sap.ui.model.odata.type.DateTimeWithTimezone",
52
52
  {
@@ -171,7 +171,7 @@ sap.ui.define([
171
171
  * @extends sap.ui.model.odata.type.ODataType
172
172
  *
173
173
  * @author SAP SE
174
- * @version 1.125.0
174
+ * @version 1.126.1
175
175
  *
176
176
  * @alias sap.ui.model.odata.type.Decimal
177
177
  * @param {object} [oFormatOptions]
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  * @extends sap.ui.model.odata.type.ODataType
75
75
  *
76
76
  * @author SAP SE
77
- * @version 1.125.0
77
+ * @version 1.126.1
78
78
  *
79
79
  * @alias sap.ui.model.odata.type.Double
80
80
  * @param {object} [oFormatOptions]
@@ -63,7 +63,7 @@ sap.ui.define([
63
63
  * @extends sap.ui.model.odata.type.ODataType
64
64
  *
65
65
  * @author SAP SE
66
- * @version 1.125.0
66
+ * @version 1.126.1
67
67
  *
68
68
  * @alias sap.ui.model.odata.type.Guid
69
69
  * @param {object} [oFormatOptions]
@@ -63,7 +63,7 @@ sap.ui.define([
63
63
  * @extends sap.ui.model.odata.type.ODataType
64
64
  *
65
65
  * @author SAP SE
66
- * @version 1.125.0
66
+ * @version 1.126.1
67
67
  *
68
68
  * @abstract
69
69
  * @alias sap.ui.model.odata.type.Int
@@ -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.125.0
27
+ * @version 1.126.1
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.Int16
30
30
  * @param {object} [oFormatOptions]
@@ -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.125.0
27
+ * @version 1.126.1
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.Int32
30
30
  * @param {object} [oFormatOptions]
@@ -119,7 +119,7 @@ sap.ui.define([
119
119
  * @extends sap.ui.model.odata.type.ODataType
120
120
  *
121
121
  * @author SAP SE
122
- * @version 1.125.0
122
+ * @version 1.126.1
123
123
  *
124
124
  * @alias sap.ui.model.odata.type.Int64
125
125
  * @param {object} [oFormatOptions]
@@ -116,7 +116,7 @@ sap.ui.define([
116
116
  * @extends sap.ui.model.SimpleType
117
117
  *
118
118
  * @author SAP SE
119
- * @version 1.125.0
119
+ * @version 1.126.1
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.125.0
33
+ * @version 1.126.1
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.125.0
27
+ * @version 1.126.1
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.SByte
30
30
  * @param {object} [oFormatOptions]
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  * @extends sap.ui.model.odata.type.ODataType
75
75
  *
76
76
  * @author SAP SE
77
- * @version 1.125.0
77
+ * @version 1.126.1
78
78
  *
79
79
  * @alias sap.ui.model.odata.type.Single
80
80
  * @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.125.0
63
+ * @version 1.126.1
64
64
  */
65
65
  var Stream = ODataType.extend("sap.ui.model.odata.type.Stream", {
66
66
  constructor : function (oFormatOptions, oConstraints) {
@@ -85,7 +85,7 @@ sap.ui.define([
85
85
  * @extends sap.ui.model.odata.type.ODataType
86
86
  *
87
87
  * @author SAP SE
88
- * @version 1.125.0
88
+ * @version 1.126.1
89
89
  *
90
90
  * @alias sap.ui.model.odata.type.String
91
91
  * @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.125.0
141
+ * @version 1.126.1
142
142
  *
143
143
  * @alias sap.ui.model.odata.type.Time
144
144
  * @param {object} [oFormatOptions]
@@ -93,7 +93,7 @@ sap.ui.define([
93
93
  * @extends sap.ui.model.odata.type.ODataType
94
94
  * @public
95
95
  * @since 1.37.0
96
- * @version 1.125.0
96
+ * @version 1.126.1
97
97
  */
98
98
  var TimeOfDay = ODataType.extend("sap.ui.model.odata.type.TimeOfDay", {
99
99
  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.125.0
69
+ * @version 1.126.1
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.125.0
67
+ * @version 1.126.1
68
68
  */
69
69
  var Context = BaseContext.extend("sap.ui.model.odata.v2.Context", {
70
70
  constructor : function (oModel, sPath, sDeepPath, oCreatePromise, bInactive,
@@ -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.125.0
39
+ * @version 1.126.1
40
40
  *
41
41
  * @public
42
42
  * @since 1.37.0
@@ -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.125.0
216
+ * @version 1.126.1
217
217
  *
218
218
  * @public
219
219
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -103,7 +103,7 @@ sap.ui.define([
103
103
  * @extends sap.ui.model.TreeBinding
104
104
  * @hideconstructor
105
105
  * @public
106
- * @version 1.125.0
106
+ * @version 1.126.1
107
107
  */
108
108
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
109
109
 
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.125.0
45
+ * @version 1.126.1
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -360,8 +360,9 @@ sap.ui.define([
360
360
 
361
361
  /**
362
362
  * Destroys this context, that is, it removes this context from all dependent bindings and drops
363
- * references to binding and model, so that the context cannot be used anymore; it keeps path
364
- * and index for debugging purposes.
363
+ * references to {@link #getBinding binding} and {@link #getModel model}, so that the context
364
+ * cannot be used anymore; it keeps path and index for debugging purposes. A destroyed context
365
+ * can be recognized by calling {@link #getBinding}, which returns <code>undefined</code>.
365
366
  *
366
367
  * <b>BEWARE:</b> Do not call this function! The lifetime of an OData V4 context is completely
367
368
  * controlled by its binding.
@@ -435,8 +436,8 @@ sap.ui.define([
435
436
 
436
437
  // Messages have been updated via _Cache#_delete; "that" is already destroyed; remove
437
438
  // all dependent caches in all bindings
438
- oModel.getAllBindings().forEach(function (oBinding) {
439
- oBinding.removeCachesAndMessages(sResourcePathPrefix, true);
439
+ oModel.getAllBindings().forEach(function (oBinding0) {
440
+ oBinding0.removeCachesAndMessages(sResourcePathPrefix, true);
440
441
  });
441
442
  }).catch(function (oError) {
442
443
  oModel.reportError("Failed to delete " + that.getPath(), sClassName, oError);
@@ -606,15 +607,32 @@ sap.ui.define([
606
607
  *
607
608
  * @param {boolean} bSelected
608
609
  * Whether this context is to be selected
610
+ * @param {boolean} [bDoNotUpdateAnnotation]
611
+ * Whether the client-side annotation "@$ui5.context.isSelected" should not be updated
612
+ * @returns {boolean}
613
+ * Whether the selection state of the context has changed
609
614
  *
610
615
  * @private
611
616
  * @see #setSelected
612
617
  */
613
- Context.prototype.doSetSelected = function (bSelected) {
614
- this.bSelected = bSelected;
615
- if (this.oBinding) {
616
- this.oBinding.onKeepAliveChanged(this); // selected contexts are effectively kept alive
618
+ Context.prototype.doSetSelected = function (bSelected, bDoNotUpdateAnnotation) {
619
+ if (bSelected === this.bSelected) {
620
+ return false;
621
+ }
622
+
623
+ if (!bDoNotUpdateAnnotation) {
624
+ this.withCache((oCache, sPath) => {
625
+ if (this.oBinding) {
626
+ oCache.setProperty("@$ui5.context.isSelected", bSelected, sPath);
627
+ } // else: context already destroyed
628
+ }, "");
617
629
  }
630
+
631
+ this.bSelected = bSelected;
632
+
633
+ this.oBinding?.onKeepAliveChanged(this); // selected contexts are effectively kept alive
634
+
635
+ return true;
618
636
  };
619
637
 
620
638
  /**
@@ -1015,6 +1033,32 @@ sap.ui.define([
1015
1033
  return this.oBinding.getQueryOptionsForPath(sPath);
1016
1034
  };
1017
1035
 
1036
+ /**
1037
+ * Returns this node's sibling; either the next one (via offset +1) or the previous one (via
1038
+ * offset -1). Returns <code>null</code> if no such sibling exists (because this node is the
1039
+ * last or first sibling, respectively). If it's not known whether the requested sibling
1040
+ * exists, <code>undefined</code> is returned and {@link #requestSibling} can be used instead.
1041
+ *
1042
+ * @param {number} [iOffset=+1] - An offset, either -1 or +1
1043
+ * @returns {sap.ui.model.odata.v4.Context|null|undefined}
1044
+ * The sibling's context, or <code>null</code> if no such sibling exists for sure, or
1045
+ * <code>undefined</code> if we cannot tell
1046
+ * @throws {Error} If
1047
+ * <ul>
1048
+ * <li> the given offset is unsupported,
1049
+ * <li> this context's root binding is suspended,
1050
+ * <li> this context is {@link #isDeleted deleted}, {@link #isTransient transient}, or not
1051
+ * part of a recursive hierarchy.
1052
+ * </ul>
1053
+ *
1054
+ * @private
1055
+ * @since 1.126.0
1056
+ * @ui5-restricted sap.fe
1057
+ */
1058
+ Context.prototype.getSibling = function (iOffset) {
1059
+ return this.oBinding.fetchOrGetSibling(this, iOffset);
1060
+ };
1061
+
1018
1062
  /**
1019
1063
  * Returns the group ID of the context's binding that is used for update requests. See
1020
1064
  * {@link sap.ui.model.odata.v4.ODataListBinding#getUpdateGroupId} and
@@ -1260,7 +1304,13 @@ sap.ui.define([
1260
1304
  *
1261
1305
  * The move potentially changes the {@link #getIndex index} of this context, of all of its
1262
1306
  * descendants, and of all other nodes affected by the move. Any index change can, however, only
1263
- * be observed reliably for this context itself.
1307
+ * be observed reliably for this context itself or (since 1.126.0) the next sibling's context
1308
+ * if that is {@link #isKeepAlive kept alive} or {@link #isSelected selected} (and the
1309
+ * preconditions of {@link #setKeepAlive} hold). For a kept-alive or selected next sibling, the
1310
+ * index must be retrieved as soon as the returned promise resolves. If such a next sibling is
1311
+ * not one of the binding's {@link sap.ui.model.odata.v4.ODataListBinding#getCurrentContexts
1312
+ * current contexts} after the move, it is not in the collection anymore and thus loses its
1313
+ * index pretty soon.
1264
1314
  *
1265
1315
  * The move changes the
1266
1316
  * {@link topic:c9723f8265f644af91c0ed941e114d46/section_CST context states} of the nodes as
@@ -1649,18 +1699,12 @@ sap.ui.define([
1649
1699
  * </ul>
1650
1700
  *
1651
1701
  * @private
1702
+ * @see #getSibling
1652
1703
  * @since 1.125.0
1653
1704
  * @ui5-restricted sap.fe
1654
1705
  */
1655
- Context.prototype.requestSibling = function (iOffset = +1) {
1656
- if (iOffset !== -1 && iOffset !== +1) {
1657
- throw new Error("Unsupported offset: " + iOffset);
1658
- }
1659
- if (this.isDeleted() || this.isTransient()) {
1660
- throw new Error("Unsupported context: " + this);
1661
- }
1662
-
1663
- return this.oBinding.requestSibling(this, iOffset);
1706
+ Context.prototype.requestSibling = function (iOffset) {
1707
+ return Promise.resolve(this.oBinding.fetchOrGetSibling(this, iOffset, true));
1664
1708
  };
1665
1709
 
1666
1710
  /**
@@ -2238,17 +2282,24 @@ sap.ui.define([
2238
2282
  };
2239
2283
 
2240
2284
  /**
2241
- * Sets whether this context is currently selected. While a context is currently
2242
- * {@link #delete deleted} on the client, it does not appear as {@link #isSelected selected}. If
2243
- * the preconditions of {@link #setKeepAlive} hold, a best effort is made to implicitly keep a
2244
- * selected context alive in order to preserve the selection state. Once the selection is no
2245
- * longer needed, for example because you perform an operation on this context which logically
2246
- * removes it from its list, you need to reset the selection.
2285
+ * Sets whether this context is currently selected. If the selection state changes, a
2286
+ * {@link sap.ui.model.odata.v4.ODataListBinding#event:selectionChanged 'selectionChanged'}
2287
+ * event is fired on the list binding which this context belongs to. While a context is
2288
+ * currently {@link #delete deleted} on the client, it does not appear as
2289
+ * {@link #isSelected selected}. If the preconditions of {@link #setKeepAlive} hold, a best
2290
+ * effort is made to implicitly keep a selected context alive in order to preserve the selection
2291
+ * state. Once the selection is no longer needed, for example because you perform an operation
2292
+ * on this context which logically removes it from its list, you need to reset the selection.
2247
2293
  *
2248
2294
  * If this context is a header context of a list binding, the new selection state is propagated
2249
- * to all row contexts. This method can be called repeatedly with the same value to again select
2250
- * all row contexts. For example, if a row context was deselected explicitly, it is selected
2251
- * again by selecting the header context (even if the header context is already selected).
2295
+ * to all row contexts. If the selection state of this header context changes, a
2296
+ * {@link sap.ui.model.odata.v4.ODataListBinding#event:selectionChanged 'selectionChanged'}
2297
+ * event is fired for this header context. This method can be called repeatedly with
2298
+ * the same value to again select all row contexts. For example, if a row context was deselected
2299
+ * explicitly, it is selected again by selecting the header context (even if the header context
2300
+ * is already selected). If the selection state of any row context changes in this way, then a
2301
+ * {@link sap.ui.model.odata.v4.ODataListBinding#event:selectionChanged 'selectionChanged'}
2302
+ * event is nevertheless fired for this header context, but not for the row context.
2252
2303
  *
2253
2304
  * <b>Note:</b> It is unsafe to keep a reference to a context instance which is not
2254
2305
  * {@link #isKeepAlive kept alive}.
@@ -2269,23 +2320,21 @@ sap.ui.define([
2269
2320
  if (bSelected && this.isDeleted()) {
2270
2321
  throw new Error("Must not select a deleted entity: " + this);
2271
2322
  }
2272
- if (this.oBinding.getHeaderContext() === this) {
2273
- this.oBinding._getAllExistingContexts().forEach(function (oContext) {
2274
- oContext.setSelected(bSelected);
2275
- });
2276
- }
2277
- if (bSelected !== this.bSelected) {
2278
- if (this.mChangeListeners) { // header context: "select all"
2279
- _Helper.fireChange(this.mChangeListeners, "", bSelected);
2280
- }
2281
- this.withCache((oCache, sPath) => {
2282
- if (this.oBinding) {
2283
- oCache.setProperty("@$ui5.context.isSelected", bSelected, sPath);
2284
- } // else: context already destroyed
2285
- }, "");
2323
+
2324
+ const bRowsChanged = this.oBinding.getHeaderContext() === this
2325
+ && this.oBinding._getAllExistingContexts().reduce((bChanged, oContext) => {
2326
+ return oContext.doSetSelected(bSelected) || bChanged;
2327
+ }, false);
2328
+
2329
+ const bSelectionChanged = this.doSetSelected(bSelected);
2330
+
2331
+ if (bSelectionChanged && this.mChangeListeners) { // header context: "select all"
2332
+ _Helper.fireChange(this.mChangeListeners, "", bSelected);
2286
2333
  }
2287
2334
 
2288
- this.doSetSelected(bSelected);
2335
+ if (bSelectionChanged || bRowsChanged) {
2336
+ this.oBinding.fireSelectionChanged(this);
2337
+ }
2289
2338
  };
2290
2339
 
2291
2340
  /**
@@ -123,26 +123,6 @@ sap.ui.define([
123
123
  this.sReducedPath = this.sReducedPath.replace(sTransientPredicate, sPredicate);
124
124
  };
125
125
 
126
- /**
127
- * Throws an error that the response is being ignored if the current cache is not the expected
128
- * one. The error has the property <code>canceled : true</code>
129
- *
130
- * @param {sap.ui.model.odata.v4.lib._Cache} oExpectedCache - The expected cache
131
- * @throws {Error} If the current cache is not the expected one
132
- *
133
- * @private
134
- */
135
- ODataBinding.prototype.assertSameCache = function (oExpectedCache) {
136
- var oError;
137
-
138
- if (this.oCache !== oExpectedCache) {
139
- oError = new Error(this + " is ignoring response from inactive cache: "
140
- + oExpectedCache);
141
- oError.canceled = true;
142
- throw oError;
143
- }
144
- };
145
-
146
126
  /**
147
127
  * Checks binding-specific parameters from the given map. "Binding-specific" parameters are
148
128
  * those with a key starting with '$$', i.e. OData query options provided as binding parameters
@@ -250,6 +230,26 @@ sap.ui.define([
250
230
  });
251
231
  };
252
232
 
233
+ /**
234
+ * Throws an error that the response is being ignored if the current cache is not the expected
235
+ * one. The error has the property <code>canceled : true</code>
236
+ *
237
+ * @param {sap.ui.model.odata.v4.lib._Cache} oExpectedCache - The expected cache
238
+ * @throws {Error} If the current cache is not the expected one
239
+ *
240
+ * @private
241
+ */
242
+ ODataBinding.prototype.checkSameCache = function (oExpectedCache) {
243
+ var oError;
244
+
245
+ if (this.oCache !== oExpectedCache) {
246
+ oError = new Error(this + " is ignoring response from inactive cache: "
247
+ + oExpectedCache);
248
+ oError.canceled = true;
249
+ throw oError;
250
+ }
251
+ };
252
+
253
253
  /**
254
254
  * Throws an Error if the binding's root binding is suspended.
255
255
  *