@openui5/sap.ui.core 1.124.2 → 1.126.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 (734) hide show
  1. package/.eslintrc.json +4 -1
  2. package/.reuse/dep5 +9 -4
  3. package/THIRDPARTY.txt +13 -6
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +1 -1
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +1 -1
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +3 -3
  10. package/src/sap/base/Event.js +1 -1
  11. package/src/sap/base/Eventing.js +1 -1
  12. package/src/sap/base/Log.js +0 -16
  13. package/src/sap/base/config.js +1 -1
  14. package/src/sap/base/i18n/LanguageTag.js +1 -1
  15. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  16. package/src/sap/base/util/ObjectPath.js +6 -6
  17. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  18. package/src/sap/base/util/restricted/_castArray.js +1 -1
  19. package/src/sap/base/util/restricted/_compact.js +1 -1
  20. package/src/sap/base/util/restricted/_curry.js +1 -1
  21. package/src/sap/base/util/restricted/_debounce.js +1 -1
  22. package/src/sap/base/util/restricted/_difference.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_flatten.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  31. package/src/sap/base/util/restricted/_intersection.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  36. package/src/sap/base/util/restricted/_isNil.js +1 -1
  37. package/src/sap/base/util/restricted/_max.js +1 -1
  38. package/src/sap/base/util/restricted/_merge.js +1 -1
  39. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  40. package/src/sap/base/util/restricted/_min.js +1 -1
  41. package/src/sap/base/util/restricted/_omit.js +1 -1
  42. package/src/sap/base/util/restricted/_pick.js +1 -1
  43. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  44. package/src/sap/base/util/restricted/_throttle.js +1 -1
  45. package/src/sap/base/util/restricted/_toArray.js +1 -1
  46. package/src/sap/base/util/restricted/_union.js +1 -1
  47. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  48. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  49. package/src/sap/base/util/restricted/_uniq.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  52. package/src/sap/base/util/restricted/_without.js +1 -1
  53. package/src/sap/base/util/restricted/_xor.js +1 -1
  54. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  55. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  58. package/src/sap/ui/Device.js +35 -10
  59. package/src/sap/ui/Global.js +6 -6
  60. package/src/sap/ui/base/Event.js +1 -1
  61. package/src/sap/ui/base/EventProvider.js +1 -1
  62. package/src/sap/ui/base/Interface.js +1 -1
  63. package/src/sap/ui/base/ManagedObject.js +16 -1
  64. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  65. package/src/sap/ui/base/Metadata.js +1 -1
  66. package/src/sap/ui/base/Object.js +1 -1
  67. package/src/sap/ui/base/ObjectPool.js +1 -1
  68. package/src/sap/ui/core/.library +3 -3
  69. package/src/sap/ui/core/BusyIndicator.js +1 -1
  70. package/src/sap/ui/core/Component.js +22 -5
  71. package/src/sap/ui/core/ComponentContainer.js +1 -1
  72. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  73. package/src/sap/ui/core/ComponentSupport.js +1 -1
  74. package/src/sap/ui/core/Configuration.js +1 -1
  75. package/src/sap/ui/core/Control.js +1 -1
  76. package/src/sap/ui/core/Core.js +31 -29
  77. package/src/sap/ui/core/CustomData.js +1 -1
  78. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  79. package/src/sap/ui/core/Element.js +1 -1
  80. package/src/sap/ui/core/ElementMetadata.js +4 -3
  81. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  82. package/src/sap/ui/core/EventBus.js +1 -1
  83. package/src/sap/ui/core/ExtensionPoint.js +23 -9
  84. package/src/sap/ui/core/Fragment.js +15 -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 +84 -50
  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 +66 -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 +23 -16
  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/XMLTemplateProcessor.js +110 -74
  118. package/src/sap/ui/core/boot.js +1 -6
  119. package/src/sap/ui/core/cldr/zh_TW.json +20 -20
  120. package/src/sap/ui/core/date/UI5Date.js +1 -1
  121. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  122. package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
  123. package/src/sap/ui/core/dnd/DragAndDrop.js +180 -33
  124. package/src/sap/ui/core/dnd/DragDropBase.js +13 -2
  125. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  126. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  127. package/src/sap/ui/core/dnd/DropInfo.js +6 -3
  128. package/src/sap/ui/core/fieldhelp/FieldHelp.js +389 -0
  129. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +62 -0
  130. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  131. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  132. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  133. package/src/sap/ui/core/hyphenation/Hyphenation.js +2 -1
  134. package/src/sap/ui/core/library.js +49 -9
  135. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  136. package/src/sap/ui/core/message/Message.js +1 -1
  137. package/src/sap/ui/core/message/MessageManager.js +1 -1
  138. package/src/sap/ui/core/message/MessageParser.js +1 -1
  139. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  140. package/src/sap/ui/core/mvc/Controller.js +77 -77
  141. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  142. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  143. package/src/sap/ui/core/mvc/JSView.js +1 -1
  144. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  145. package/src/sap/ui/core/mvc/View.js +10 -2
  146. package/src/sap/ui/core/mvc/XMLProcessingMode.js +4 -1
  147. package/src/sap/ui/core/mvc/XMLView.js +33 -5
  148. package/src/sap/ui/core/mvc/XMLViewRenderer.js +40 -7
  149. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  150. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  151. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  152. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  153. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  154. package/src/sap/ui/core/routing/async/TargetCache.js +12 -1
  155. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  156. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  157. package/src/sap/ui/core/service/Service.js +1 -1
  158. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  159. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  160. package/src/sap/ui/core/support/Plugin.js +1 -1
  161. package/src/sap/ui/core/support/Support.js +1 -1
  162. package/src/sap/ui/core/support/bootstrapFallback.js +1 -1
  163. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  165. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  166. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  167. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  168. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  169. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  170. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  171. package/src/sap/ui/core/themes/sap_hcb/base_BlindLayer.less +37 -0
  172. package/src/sap/ui/core/themes/sap_hcb/base_BrowserScrollbar.less +36 -0
  173. package/src/sap/ui/core/themes/sap_hcb/base_BusyIndicator.less +19 -0
  174. package/src/sap/ui/core/themes/sap_hcb/base_CommandShortcutHints.less +20 -0
  175. package/src/sap/ui/core/themes/sap_hcb/base_DragAndDrop.less +76 -0
  176. package/src/sap/ui/core/themes/sap_hcb/base_Icon.less +144 -0
  177. package/src/sap/ui/core/themes/sap_hcb/base_LocalBusyIndicator.less +292 -0
  178. package/src/sap/ui/core/themes/sap_hcb/base_SAP-icons.less +10 -0
  179. package/src/sap/ui/core/themes/sap_hcb/base_ScrollBar.less +20 -0
  180. package/src/sap/ui/core/themes/sap_hcb/base_Shadow.less +3 -0
  181. package/src/sap/ui/core/themes/sap_hcb/base_TechnicalInfo.less +157 -0
  182. package/src/sap/ui/core/themes/sap_hcb/base_View.less +12 -0
  183. package/src/sap/ui/core/themes/sap_hcb/base_media.less +36 -0
  184. package/src/sap/ui/core/themes/sap_hcb/base_parameterClasses.less +83 -0
  185. package/src/sap/ui/core/themes/sap_hcb/base_shared.less +340 -0
  186. package/src/sap/ui/core/themes/sap_hcb/library.source.less +27 -1
  187. package/src/sap/ui/core/theming/Parameters.js +66 -6
  188. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  189. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  190. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  191. package/src/sap/ui/core/tmpl/Template.js +1 -1
  192. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  193. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  194. package/src/sap/ui/core/util/Export.js +1 -1
  195. package/src/sap/ui/core/util/ExportCell.js +1 -1
  196. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  197. package/src/sap/ui/core/util/ExportRow.js +1 -1
  198. package/src/sap/ui/core/util/ExportType.js +1 -1
  199. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  200. package/src/sap/ui/core/util/File.js +1 -1
  201. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  202. package/src/sap/ui/core/util/MockServer.js +1 -1
  203. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  204. package/src/sap/ui/core/util/XMLPreprocessor.js +14 -15
  205. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  206. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  207. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  208. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  209. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  210. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  211. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  212. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  213. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  214. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  215. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  216. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  217. package/src/sap/ui/debug/ControlTree.js +1 -1
  218. package/src/sap/ui/debug/DebugEnv.js +1 -1
  219. package/src/sap/ui/debug/PropertyList.js +1 -1
  220. package/src/sap/ui/dom/jquery/control.js +6 -3
  221. package/src/sap/ui/model/Binding.js +38 -0
  222. package/src/sap/ui/model/ClientModel.js +1 -1
  223. package/src/sap/ui/model/CompositeDataState.js +1 -1
  224. package/src/sap/ui/model/CompositeType.js +1 -1
  225. package/src/sap/ui/model/DataState.js +1 -1
  226. package/src/sap/ui/model/ManagedObjectBindingSupport.js +5 -0
  227. package/src/sap/ui/model/MetaModel.js +1 -1
  228. package/src/sap/ui/model/Model.js +1 -1
  229. package/src/sap/ui/model/SelectionModel.js +1 -1
  230. package/src/sap/ui/model/SimpleType.js +1 -1
  231. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  232. package/src/sap/ui/model/Type.js +1 -1
  233. package/src/sap/ui/model/analytics/AnalyticalBinding.js +8 -12
  234. package/src/sap/ui/model/base/ManagedObjectModel.js +12 -2
  235. package/src/sap/ui/model/json/JSONModel.js +6 -5
  236. package/src/sap/ui/model/message/MessageModel.js +1 -1
  237. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  238. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  239. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  240. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  241. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  242. package/src/sap/ui/model/odata/ODataUtils.js +22 -14
  243. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  244. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  245. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  246. package/src/sap/ui/model/odata/type/Date.js +1 -1
  247. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  248. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  249. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  250. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  251. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  252. package/src/sap/ui/model/odata/type/Double.js +1 -1
  253. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  254. package/src/sap/ui/model/odata/type/Int.js +1 -1
  255. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  256. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  257. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  258. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  259. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  260. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  261. package/src/sap/ui/model/odata/type/Single.js +1 -1
  262. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  263. package/src/sap/ui/model/odata/type/String.js +1 -1
  264. package/src/sap/ui/model/odata/type/Time.js +1 -1
  265. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  266. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  267. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  268. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  269. package/src/sap/ui/model/odata/v2/ODataModel.js +50 -6
  270. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  271. package/src/sap/ui/model/odata/v4/Context.js +127 -46
  272. package/src/sap/ui/model/odata/v4/ODataBinding.js +20 -20
  273. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +72 -73
  274. package/src/sap/ui/model/odata/v4/ODataListBinding.js +406 -250
  275. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +49 -47
  276. package/src/sap/ui/model/odata/v4/ODataModel.js +271 -217
  277. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +205 -205
  278. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -10
  279. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +232 -61
  280. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +53 -9
  281. package/src/sap/ui/model/odata/v4/lib/_Cache.js +53 -59
  282. package/src/sap/ui/model/odata/v4/lib/_Helper.js +140 -80
  283. package/src/sap/ui/model/odata/v4/lib/_Parser.js +3 -3
  284. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +98 -90
  285. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +1 -1
  286. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +22 -22
  287. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +63 -63
  288. package/src/sap/ui/model/resource/ResourceModel.js +7 -2
  289. package/src/sap/ui/model/type/Boolean.js +1 -1
  290. package/src/sap/ui/model/type/Currency.js +1 -1
  291. package/src/sap/ui/model/type/Date.js +1 -1
  292. package/src/sap/ui/model/type/DateInterval.js +1 -1
  293. package/src/sap/ui/model/type/DateTime.js +1 -1
  294. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  295. package/src/sap/ui/model/type/FileSize.js +1 -1
  296. package/src/sap/ui/model/type/Float.js +1 -1
  297. package/src/sap/ui/model/type/Integer.js +1 -1
  298. package/src/sap/ui/model/type/String.js +1 -1
  299. package/src/sap/ui/model/type/Time.js +1 -1
  300. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  301. package/src/sap/ui/model/type/Unit.js +1 -1
  302. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  303. package/src/sap/ui/performance/trace/FESR.js +1 -1
  304. package/src/sap/ui/qunit/qunit-coverage-istanbul.js +1 -1
  305. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  306. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  307. package/src/sap/ui/test/OpaPlugin.js +36 -12
  308. package/src/sap/ui/test/generic/TestBase.js +1 -1
  309. package/src/sap/ui/test/starter/_utils.js +18 -3
  310. package/src/sap/ui/util/Storage.js +1 -1
  311. package/src/ui5loader-autoconfig.js +0 -25
  312. package/test/sap/ui/core/BindableResponseHeaders.html +5 -6
  313. package/test/sap/ui/core/ComponentCleanup.html +46 -46
  314. package/test/sap/ui/core/ComponentManifestFirst.html +26 -20
  315. package/test/sap/ui/core/ContextMenuSupport.html +9 -10
  316. package/test/sap/ui/core/DesigntimeOverview.html +1 -1
  317. package/test/sap/ui/core/EventBroadcaster.html +2 -2
  318. package/test/sap/ui/core/FieldGroup.html +70 -61
  319. package/test/sap/ui/core/GenericEventBinding.html +26 -23
  320. package/test/sap/ui/core/HTMLControl.html +46 -38
  321. package/test/sap/ui/core/HTMLSanitizer.html +70 -45
  322. package/test/sap/ui/core/IntervalTrigger.html +22 -21
  323. package/test/sap/ui/core/InvisibleControls.html +72 -72
  324. package/test/sap/ui/core/InvisibleText.html +2 -2
  325. package/test/sap/ui/core/LRUPersistentCache.html +19 -18
  326. package/test/sap/ui/core/LabelEnablement.html +18 -29
  327. package/test/sap/ui/core/Localization.html +40 -65
  328. package/test/sap/ui/core/Localization_HeapUsage.html +11 -12
  329. package/test/sap/ui/core/ManagedObjectModel.html +6 -7
  330. package/test/sap/ui/core/ODataAnnotationsPerformance.html +592 -602
  331. package/test/sap/ui/core/ODataV2CanonicalRequests.html +16 -13
  332. package/test/sap/ui/core/ODataV2Messages.html +15 -12
  333. package/test/sap/ui/core/ODataV2MessagesPerf.html +156 -132
  334. package/test/sap/ui/core/Popup.html +18 -14
  335. package/test/sap/ui/core/PopupWithUserSelection.html +4 -4
  336. package/test/sap/ui/core/StashedControlSupport.html +1 -1
  337. package/test/sap/ui/core/ThemeParameters.html +32 -20
  338. package/test/sap/ui/core/ValidateURL.html +109 -75
  339. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.html +2 -1
  341. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.js +2 -12
  342. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Component.js +1 -4
  343. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Detail.controller.js +0 -1
  344. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Main.controller.js +0 -1
  345. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Opa.qunit.html +0 -1
  346. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/extension/Component.js +1 -5
  347. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/manifest.json +2 -10
  348. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/Component.js +4 -1
  349. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/manifest.json +37 -0
  350. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Component.js +5 -1
  351. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/manifest.json +42 -0
  352. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Component.js +6 -3
  353. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Main.view.xml +4 -1
  354. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/manifest.json +49 -0
  355. package/test/sap/ui/core/demokit/sample/common/Controller.js +2 -2
  356. package/test/sap/ui/core/demokit/sample/common/ValueHelp.js +2 -2
  357. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTime/Component.js +1 -0
  362. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTime/manifest.json +1 -2
  363. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/Component.js +1 -0
  364. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/manifest.json +1 -2
  365. package/test/sap/ui/core/demokit/sample/odata/types/v2/Time/Component.js +1 -0
  366. package/test/sap/ui/core/demokit/sample/odata/types/v2/Time/manifest.json +1 -2
  367. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/Component.js +1 -0
  368. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/manifest.json +1 -2
  369. package/test/sap/ui/core/demokit/sample/odata/types/v4/DateTimeOffset/Component.js +1 -0
  370. package/test/sap/ui/core/demokit/sample/odata/types/v4/DateTimeOffset/manifest.json +1 -2
  371. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/Component.js +1 -0
  372. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/manifest.json +1 -2
  373. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Component.js +1 -0
  374. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.controller.js +35 -31
  375. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/manifest.json +1 -10
  376. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/Component.js +1 -0
  377. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/manifest.json +2 -11
  378. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Component.js +1 -0
  379. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.controller.js +71 -68
  380. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.html +0 -1
  381. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/manifest.json +3 -11
  382. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Component.js +1 -0
  383. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.html +0 -1
  384. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/manifest.json +7 -16
  385. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Component.js +1 -0
  386. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Main.controller.js +3 -3
  387. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.html +0 -1
  388. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/manifest.json +1 -10
  389. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Component.js +1 -0
  390. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/FieldGroups.view.xml +0 -1
  391. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.html +0 -1
  392. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/manifest.json +3 -11
  393. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/Component.js +1 -0
  394. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +46 -43
  395. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +12 -10
  396. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/manifest.json +3 -11
  397. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Component.js +1 -0
  398. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Main.controller.js +21 -18
  399. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.html +0 -1
  400. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/manifest.json +4 -7
  401. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/Component.js +1 -0
  402. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/SandboxModel.js +6 -6
  403. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/manifest.json +1 -10
  404. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Component.js +1 -0
  405. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +130 -38
  406. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +35 -43
  407. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/manifest.json +1 -10
  408. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Component.js +1 -0
  409. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +25 -22
  410. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.html +0 -1
  411. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +5 -4
  412. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.html +0 -1
  413. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/manifest.json +3 -7
  414. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Component.js +1 -0
  415. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.html +0 -1
  416. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/manifest.json +3 -11
  417. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Component.js +1 -0
  418. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.html +0 -1
  419. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/manifest.json +2 -10
  420. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Component.js +1 -0
  421. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +60 -57
  422. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.html +0 -1
  423. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/manifest.json +4 -6
  424. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/Component.js +1 -0
  425. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/manifest.json +3 -11
  426. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Component.js +1 -0
  427. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Main.view.xml +0 -1
  428. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.html +0 -1
  429. package/test/sap/ui/core/demokit/sample/odata/v4/Products/manifest.json +3 -10
  430. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Component.js +1 -0
  431. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Opa.qunit.html +0 -1
  432. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +194 -90
  433. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +102 -58
  434. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +135 -39
  435. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +14 -0
  436. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/manifest.json +1 -10
  437. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/pages/Main.js +4 -3
  438. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Component.js +1 -0
  439. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.html +0 -1
  440. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/manifest.json +2 -11
  441. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Component.js +1 -0
  442. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.html +0 -1
  443. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/manifest.json +2 -11
  444. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Component.js +19 -2
  445. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.html +0 -1
  446. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/manifest.json +3 -10
  447. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateRelative.js +1 -8
  448. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Component.js +1 -0
  449. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Main.controller.js +1 -2
  450. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.html +0 -1
  451. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/manifest.json +6 -5
  452. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Component.js +1 -0
  453. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.html +0 -1
  454. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/manifest.json +2 -10
  455. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Component.js +1 -0
  456. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.html +0 -1
  457. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/manifest.json +3 -10
  458. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.html +0 -1
  459. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/manifest.json +3 -11
  460. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  461. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  462. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  463. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  464. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  465. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  466. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  467. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  468. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  469. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  470. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  471. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  472. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  473. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  474. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  475. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  476. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  477. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  478. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  479. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  480. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  481. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  484. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  487. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  488. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  489. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  490. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  491. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  492. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  493. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  494. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  495. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  496. package/test/sap/ui/core/demokit/tutorial/odatav4/01/Component.js +1 -0
  497. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  498. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/Component.js +1 -0
  499. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/index.html +0 -1
  500. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/localService/mockserver.js +4 -4
  501. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/manifest.json +2 -13
  502. package/test/sap/ui/core/demokit/tutorial/odatav4/02/Component.js +1 -0
  503. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  504. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/Component.js +1 -0
  505. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/index.html +0 -1
  506. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/localService/mockserver.js +4 -4
  507. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/manifest.json +2 -13
  508. package/test/sap/ui/core/demokit/tutorial/odatav4/03/Component.js +1 -0
  509. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  510. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/Component.js +1 -0
  511. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/index.html +0 -1
  512. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/localService/mockserver.js +4 -4
  513. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/manifest.json +2 -13
  514. package/test/sap/ui/core/demokit/tutorial/odatav4/04/Component.js +1 -0
  515. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  516. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/Component.js +1 -0
  517. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/index.html +0 -1
  518. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/localService/mockserver.js +4 -4
  519. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/manifest.json +2 -13
  520. package/test/sap/ui/core/demokit/tutorial/odatav4/05/Component.js +1 -0
  521. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  522. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/Component.js +1 -0
  523. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/index.html +0 -1
  524. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/localService/mockserver.js +4 -4
  525. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/manifest.json +2 -13
  526. package/test/sap/ui/core/demokit/tutorial/odatav4/06/Component.js +1 -0
  527. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  528. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/Component.js +1 -0
  529. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/index.html +0 -1
  530. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +4 -4
  531. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/manifest.json +2 -13
  532. package/test/sap/ui/core/demokit/tutorial/odatav4/07/Component.js +1 -0
  533. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  534. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/Component.js +1 -0
  535. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/index.html +0 -1
  536. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +4 -4
  537. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/manifest.json +2 -13
  538. package/test/sap/ui/core/demokit/tutorial/odatav4/08/Component.js +1 -0
  539. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  540. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/Component.js +1 -0
  541. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/index.html +0 -1
  542. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +4 -4
  543. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/manifest.json +2 -13
  544. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/opaTests.qunit.html +0 -1
  545. package/test/sap/ui/core/demokit/tutorial/odatav4/09/Component.js +1 -0
  546. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  547. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/Component.js +1 -0
  548. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/index.html +0 -1
  549. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +4 -4
  550. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/manifest.json +2 -11
  551. package/test/sap/ui/core/demokit/tutorial/odatav4/10/Component.js +1 -0
  552. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  553. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/Component.js +1 -0
  554. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/index.html +0 -1
  555. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +4 -4
  556. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/manifest.json +2 -11
  557. package/test/sap/ui/core/demokit/tutorial/odatav4/11/Component.js +1 -0
  558. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  559. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/Component.js +1 -0
  560. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/index.html +0 -1
  561. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +4 -4
  562. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/manifest.json +2 -11
  563. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/opaTests.qunit.html +0 -1
  564. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  565. package/test/sap/ui/core/getComputedStyle.html +2 -1
  566. package/test/sap/ui/core/getComputedStyleFF.html +1 -1
  567. package/test/sap/ui/core/internal/samples/client/MusicCollection/Component.js +5 -8
  568. package/test/sap/ui/core/internal/samples/client/MusicCollection/Main.controller.js +6 -2
  569. package/test/sap/ui/core/internal/samples/client/MusicCollection/Main.view.xml +7 -3
  570. package/test/sap/ui/core/internal/samples/client/MusicCollection/index.html +1 -3
  571. package/test/sap/ui/core/internal/samples/client/MusicCollection/manifest.json +1 -13
  572. package/test/sap/ui/core/internal/samples/odata/twoFields/Component.js +3 -45
  573. package/test/sap/ui/core/internal/samples/odata/twoFields/Main.controller.js +37 -1
  574. package/test/sap/ui/core/internal/samples/odata/twoFields/Main.view.xml +5 -5
  575. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.html +1 -3
  576. package/test/sap/ui/core/internal/samples/odata/twoFields/index.html +1 -3
  577. package/test/sap/ui/core/internal/samples/odata/twoFields/manifest.json +1 -11
  578. package/test/sap/ui/core/internal/samples/odata/v2/Products/Component.js +3 -22
  579. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.controller.js +16 -22
  580. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.view.xml +3 -2
  581. package/test/sap/ui/core/internal/samples/odata/v2/Products/SandboxModel.js +1 -1
  582. package/test/sap/ui/core/internal/samples/odata/v2/Products/index.html +1 -3
  583. package/test/sap/ui/core/internal/samples/odata/v2/Products/manifest.json +2 -13
  584. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Component.js +1 -0
  585. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.controller.js +49 -41
  586. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.view.xml +6 -4
  587. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/manifest.json +3 -12
  588. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Component.js +1 -0
  589. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.controller.js +2 -2
  590. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.view.xml +7 -6
  591. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/index.html +1 -3
  592. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/manifest.json +1 -11
  593. package/test/sap/ui/core/qunit/CommandExecution.qunit.js +96 -92
  594. package/test/sap/ui/core/qunit/Fragment.qunit.js +20 -20
  595. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +4 -4
  596. package/test/sap/ui/core/qunit/Icon.qunit.js +217 -1
  597. package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +24 -0
  598. package/test/sap/ui/core/qunit/RenderManager.qunit.js +18 -5
  599. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +15 -18
  600. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +80 -0
  601. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -0
  602. package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +6 -14
  603. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +2 -1
  604. package/test/sap/ui/core/qunit/base/Config.qunit.js +117 -114
  605. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.html +3 -3
  606. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.js +98 -95
  607. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +20 -45
  608. package/test/sap/ui/core/qunit/base/Config_global.qunit.html +2 -2
  609. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +2 -2
  610. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.html +2 -2
  611. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.js +17 -16
  612. package/test/sap/ui/core/qunit/base/Config_url.qunit.html +2 -2
  613. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.beforeBootstrap.js +6 -0
  614. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.qunit.js +4 -4
  615. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.js +30 -10
  616. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +5 -1
  617. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +2 -2
  618. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +36 -1
  619. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +475 -290
  620. package/test/sap/ui/core/qunit/component/Models.qunit.js +0 -70
  621. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +86 -0
  622. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +86 -1
  623. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EP_In_Product_Table_Cell_Found.fragment.xml +5 -0
  624. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EP_In_Product_Table_Column.fragment.xml +5 -0
  625. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EPinNestedView.view.xml +51 -0
  626. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/ExtensionPointProvider.js +27 -4
  627. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/Main.view.xml +5 -0
  628. package/test/sap/ui/core/qunit/component/testdata/customizing/sap/Main.view.xml +0 -1
  629. package/test/sap/ui/core/qunit/component/testdata/customizing/sap/Sub2.view.xml +1 -3
  630. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +231 -5
  631. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +14 -2
  632. package/test/sap/ui/core/qunit/fieldhelp/FieldHelp.qunit.js +1146 -0
  633. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +55 -0
  634. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.html +12 -0
  635. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.js +50 -0
  636. package/test/sap/ui/core/qunit/generic/ControlRenderer.qunit.js +4 -1
  637. package/test/sap/ui/core/qunit/generic/legacy/ControlRenderer.qunit.js +4 -0
  638. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +1 -1
  639. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +6 -0
  640. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +1 -1
  641. package/test/sap/ui/core/qunit/jquery-mobile-custom.beforeBootstrap.js +11 -0
  642. package/test/sap/ui/core/qunit/jquery-mobile-custom.qunit.js +3 -3
  643. package/test/sap/ui/core/qunit/loader/amd/base_tag/_launchTest.js +2 -4
  644. package/test/sap/ui/core/qunit/loader/amd/config_paths/_launchTest.js +2 -4
  645. package/test/sap/ui/core/qunit/loader/amd/config_paths_relative/_launchTest.js +2 -4
  646. package/test/sap/ui/core/qunit/loader/amdAPIs.qunit.js +3 -0
  647. package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -6
  648. package/test/sap/ui/core/qunit/loader/config.qunit.js +41 -2
  649. package/test/sap/ui/core/qunit/model/Binding.qunit.js +13 -0
  650. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +2 -2
  651. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync.qunit.js +8 -6
  652. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +7 -7
  653. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +131 -22
  654. package/test/sap/ui/core/qunit/mvc/testdata/Async.view.xml +1 -2
  655. package/test/sap/ui/core/qunit/mvc/testdata/asyncHooks.view.xml +1 -3
  656. package/test/sap/ui/core/qunit/mvc/testdata/cache.view.xml +1 -1
  657. package/test/sap/ui/core/qunit/mvc/testdata/legacy/test.view.xml +32 -0
  658. package/test/sap/ui/core/qunit/mvc/testdata/test.view.xml +2 -15
  659. package/test/sap/ui/core/qunit/mvc/testsuite.mvc.qunit.js +9 -4
  660. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +5 -12
  661. package/test/sap/ui/core/qunit/odata/type/testsuite.odata.types.qunit.js +1 -0
  662. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +285 -12
  663. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +55 -6
  664. package/test/sap/ui/core/qunit/odata/v2/data/ZUI5_GWSAMPLE_BASIC.metadata.xml +18 -0
  665. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +118 -61
  666. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +17 -17
  667. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +559 -74
  668. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +42 -42
  669. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +2695 -97
  670. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +125 -12
  671. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +7 -6
  672. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +12 -13
  673. package/test/sap/ui/core/qunit/odata/v4/_AnnotationHelperExpression.qunit.js +3 -3
  674. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +796 -110
  675. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +102 -2
  676. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +48 -57
  677. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +141 -33
  678. package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +2 -2
  679. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +175 -69
  680. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +3 -3
  681. package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +1 -1
  682. package/test/sap/ui/core/qunit/resource/ResourceBinding.qunit.js +17 -14
  683. package/test/sap/ui/core/qunit/routing/async/Views.qunit.js +3 -0
  684. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +6 -1
  685. package/test/sap/ui/core/qunit/test/starter/find/main.js +6 -4
  686. package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib4/themes/sap_horizon_hcb/library.css +2 -0
  687. package/test/sap/ui/core/qunit/testdata/routing/HistoryIFrame.html +2 -1
  688. package/test/sap/ui/core/qunit/testsuite.qunit.js +1 -0
  689. package/test/sap/ui/core/qunit/testsuites/testsuite.browser.runtime.qunit.js +5 -1
  690. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +4 -1
  691. package/test/sap/ui/core/qunit/ui/Device.qunit.js +92 -25
  692. package/test/sap/ui/core/qunit/ui5classes/ManagedObjectMetadata.qunit.js +3 -0
  693. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +47 -1
  694. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +20 -20
  695. package/test/sap/ui/core/relnotes/changes-1.124.json +1 -66
  696. package/test/sap/ui/core/relnotes/changes-1.125.json +32 -0
  697. package/test/sap/ui/core/relnotes/changes-1.126.json +47 -0
  698. package/test/sap/ui/core/samples/ResponsiveDemo.html +97 -103
  699. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  700. package/test/sap/ui/core/samples/draganddrop/DragAndDrop.html +2 -2
  701. package/test/sap/ui/core/samples/mvc/Product.html +1 -7
  702. package/test/sap/ui/core/samples/mvc/ViewPreprocessor.html +20 -12
  703. package/test/sap/ui/core/samples/mvc/XMLView.html +77 -24
  704. package/test/sap/ui/core/samples/mvc/XMLViewAsync.html +13 -19
  705. package/test/sap/ui/core/samples/mvc/controller/Async.controller.js +0 -1
  706. package/test/sap/ui/core/samples/mvc/controller/Product.controller.js +0 -1
  707. package/test/sap/ui/core/samples/mvc/views/Async.view.xml +16 -57
  708. package/test/sap/ui/core/samples/mvc/views/Dummy.fragment.xml +2 -2
  709. package/test/sap/ui/core/samples/mvc/views/Dummy.view.xml +2 -2
  710. package/test/sap/ui/core/samples/mvc/views/Product.view.xml +16 -57
  711. package/test/sap/ui/core/util/PasteHelper.html +148 -147
  712. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  713. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  714. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  715. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  716. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  717. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  718. package/test/testsuite/js/settings.js +5 -4
  719. package/test/testsuite/styles/main.css +5 -0
  720. package/test/sap/ui/core/ResourceRoots.html +0 -28
  721. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/component.json +0 -17
  722. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/component.json +0 -18
  723. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/component.json +0 -30
  724. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +0 -52
  725. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/Component.js +0 -30
  726. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/Sandbox.js +0 -51
  727. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L0_top5.json +0 -32
  728. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_A_skip8.json +0 -138
  729. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_B.json +0 -17
  730. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_C.json +0 -17
  731. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_top8.json +0 -93
  732. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/metadata.xml +0 -2322
  733. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/i18n/i18n.properties +0 -3
  734. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/manifest.json +0 -69
@@ -42,7 +42,8 @@ sap.ui.define([
42
42
  DataStateChange : true,
43
43
  patchCompleted : true,
44
44
  patchSent : true,
45
- refresh : true
45
+ refresh : true,
46
+ selectionChanged : true
46
47
  },
47
48
  /**
48
49
  * @alias sap.ui.model.odata.v4.ODataListBinding
@@ -50,14 +51,14 @@ sap.ui.define([
50
51
  * @class List binding for an OData V4 model.
51
52
  * An event handler can only be attached to this binding for the following events:
52
53
  * 'AggregatedDataStateChange', 'change', 'createActivate', 'createCompleted',
53
- * 'createSent', 'dataReceived', 'dataRequested', 'DataStateChange', 'patchCompleted',
54
- * 'patchSent', and 'refresh'. For other events, an error is thrown.
54
+ * 'createSent', 'dataReceived', 'dataRequested', 'DataStateChange', 'selectionChanged',
55
+ * 'patchCompleted', 'patchSent', and 'refresh'. For other events, an error is thrown.
55
56
  * @extends sap.ui.model.ListBinding
56
57
  * @hideconstructor
57
58
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
58
59
  * @public
59
60
  * @since 1.37.0
60
- * @version 1.124.2
61
+ * @version 1.126.0
61
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
64
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -178,89 +179,30 @@ sap.ui.define([
178
179
  asODataParentBinding(ODataListBinding.prototype);
179
180
 
180
181
  /**
181
- * Attach event handler <code>fnFunction</code> to the 'createActivate' event of this binding.
182
- *
183
- * @param {function} fnFunction The function to call when the event occurs
184
- * @param {object} [oListener] Object on which to call the given function
185
- * @returns {this} <code>this</code> to allow method chaining
186
- *
187
- * @public
188
- * @since 1.98.0
189
- */
190
- ODataListBinding.prototype.attachCreateActivate = function (fnFunction, oListener) {
191
- return this.attachEvent("createActivate", fnFunction, oListener);
192
- };
193
-
194
- /**
195
- * Detach event handler <code>fnFunction</code> from the 'createActivate' event of this binding.
196
- *
197
- * @param {function} fnFunction The function to call when the event occurs
198
- * @param {object} [oListener] Object on which to call the given function
199
- * @returns {this} <code>this</code> to allow method chaining
200
- *
201
- * @public
202
- * @since 1.98.0
203
- */
204
- ODataListBinding.prototype.detachCreateActivate = function (fnFunction, oListener) {
205
- return this.detachEvent("createActivate", fnFunction, oListener);
206
- };
207
-
208
- /**
209
- * Attach event handler <code>fnFunction</code> to the 'createCompleted' event of this binding.
210
- *
211
- * @param {function} fnFunction The function to call when the event occurs
212
- * @param {object} [oListener] Object on which to call the given function
213
- * @returns {this} <code>this</code> to allow method chaining
214
- *
215
- * @public
216
- * @since 1.66.0
217
- */
218
- ODataListBinding.prototype.attachCreateCompleted = function (fnFunction, oListener) {
219
- return this.attachEvent("createCompleted", fnFunction, oListener);
220
- };
221
-
222
- /**
223
- * Detach event handler <code>fnFunction</code> from the 'createCompleted' event of this
224
- * binding.
225
- *
226
- * @param {function} fnFunction The function to call when the event occurs
227
- * @param {object} [oListener] Object on which to call the given function
228
- * @returns {this} <code>this</code> to allow method chaining
229
- *
230
- * @public
231
- * @since 1.66.0
232
- */
233
- ODataListBinding.prototype.detachCreateCompleted = function (fnFunction, oListener) {
234
- return this.detachEvent("createCompleted", fnFunction, oListener);
235
- };
236
-
237
- /**
238
- * Attach event handler <code>fnFunction</code> to the 'createSent' event of this binding.
239
- *
240
- * @param {function} fnFunction The function to call when the event occurs
241
- * @param {object} [oListener] Object on which to call the given function
242
- * @returns {this} <code>this</code> to allow method chaining
243
- *
244
- * @public
245
- * @since 1.66.0
182
+ * @override
183
+ * @see sap.ui.model.Binding#_checkDataStateMessages
246
184
  */
247
- ODataListBinding.prototype.attachCreateSent = function (fnFunction, oListener) {
248
- return this.attachEvent("createSent", fnFunction, oListener);
185
+ ODataListBinding.prototype._checkDataStateMessages = function (oDataState, sResolvedPath) {
186
+ if (sResolvedPath) {
187
+ oDataState.setModelMessages(this.oModel.getMessagesByPath(sResolvedPath, true));
188
+ }
249
189
  };
250
190
 
251
191
  /**
252
- * Detach event handler <code>fnFunction</code> from the 'createSent' event of this
253
- * binding.
192
+ * Returns all currently existing contexts of this list binding in no special order.
254
193
  *
255
- * @param {function} fnFunction The function to call when the event occurs
256
- * @param {object} [oListener] Object on which to call the given function
257
- * @returns {this} <code>this</code> to allow method chaining
194
+ * @returns {sap.ui.model.odata.v4.Context[]}
195
+ * All currently existing contexts of this list binding, in no special order
258
196
  *
259
- * @public
260
- * @since 1.66.0
197
+ * @private
198
+ * @see #getAllCurrentContexts
261
199
  */
262
- ODataListBinding.prototype.detachCreateSent = function (fnFunction, oListener) {
263
- return this.detachEvent("createSent", fnFunction, oListener);
200
+ ODataListBinding.prototype._getAllExistingContexts = function () {
201
+ return (this.aContexts ?? []).filter(function (oContext) {
202
+ return oContext;
203
+ }).concat(Object.values(this.mPreviousContextsByPath).filter(function (oContext) {
204
+ return oContext.isEffectivelyKeptAlive();
205
+ }));
264
206
  };
265
207
 
266
208
  /**
@@ -304,8 +246,8 @@ sap.ui.define([
304
246
  this.fetchCache(this.oContext, /*bIgnoreParentCache*/true);
305
247
  }
306
248
  this.oHeaderContext.adjustPredicate(sTransientPredicate, sPredicate);
307
- this.aContexts.forEach(function (oContext) {
308
- oContext.adjustPredicate(sTransientPredicate, sPredicate, adjustPreviousData);
249
+ this.aContexts.forEach(function (oContext0) {
250
+ oContext0.adjustPredicate(sTransientPredicate, sPredicate, adjustPreviousData);
309
251
  });
310
252
  }
311
253
  };
@@ -606,6 +548,64 @@ sap.ui.define([
606
548
  * @since 1.37.0
607
549
  */
608
550
 
551
+ /**
552
+ * The 'selectionChanged' event is fired if the selection state of a context changes; for more
553
+ * information see {@link sap.ui.model.odata.v4.Context#setSelected}.
554
+ *
555
+ * @param {sap.ui.base.Event} oEvent The event object
556
+ * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
557
+ * @param {function():Object<any>} oEvent.getParameters
558
+ * Function which returns an object containing all event parameters
559
+ * @param {boolean} oEvent.getParameters.context
560
+ * The context for which {@link sap.ui.model.odata.v4.Context#setSelected} was called
561
+ *
562
+ * @event sap.ui.model.odata.v4.ODataListBinding#selectionChanged
563
+ * @experimental As of version 1.126.0
564
+ * @public
565
+ */
566
+
567
+ /**
568
+ * Attach event handler <code>fnFunction</code> to the 'createActivate' event of this binding.
569
+ *
570
+ * @param {function} fnFunction The function to call when the event occurs
571
+ * @param {object} [oListener] Object on which to call the given function
572
+ * @returns {this} <code>this</code> to allow method chaining
573
+ *
574
+ * @public
575
+ * @since 1.98.0
576
+ */
577
+ ODataListBinding.prototype.attachCreateActivate = function (fnFunction, oListener) {
578
+ return this.attachEvent("createActivate", fnFunction, oListener);
579
+ };
580
+
581
+ /**
582
+ * Attach event handler <code>fnFunction</code> to the 'createCompleted' event of this binding.
583
+ *
584
+ * @param {function} fnFunction The function to call when the event occurs
585
+ * @param {object} [oListener] Object on which to call the given function
586
+ * @returns {this} <code>this</code> to allow method chaining
587
+ *
588
+ * @public
589
+ * @since 1.66.0
590
+ */
591
+ ODataListBinding.prototype.attachCreateCompleted = function (fnFunction, oListener) {
592
+ return this.attachEvent("createCompleted", fnFunction, oListener);
593
+ };
594
+
595
+ /**
596
+ * Attach event handler <code>fnFunction</code> to the 'createSent' event of this binding.
597
+ *
598
+ * @param {function} fnFunction The function to call when the event occurs
599
+ * @param {object} [oListener] Object on which to call the given function
600
+ * @returns {this} <code>this</code> to allow method chaining
601
+ *
602
+ * @public
603
+ * @since 1.66.0
604
+ */
605
+ ODataListBinding.prototype.attachCreateSent = function (fnFunction, oListener) {
606
+ return this.attachEvent("createSent", fnFunction, oListener);
607
+ };
608
+
609
609
  /**
610
610
  * See {@link sap.ui.base.EventProvider#attachEvent}
611
611
  *
@@ -628,16 +628,6 @@ sap.ui.define([
628
628
  return ListBinding.prototype.attachEvent.apply(this, arguments);
629
629
  };
630
630
 
631
- /**
632
- * @override
633
- * @see sap.ui.model.Binding#_checkDataStateMessages
634
- */
635
- ODataListBinding.prototype._checkDataStateMessages = function (oDataState, sResolvedPath) {
636
- if (sResolvedPath) {
637
- oDataState.setModelMessages(this.oModel.getMessagesByPath(sResolvedPath, true));
638
- }
639
- };
640
-
641
631
  /**
642
632
  * Checks that deep create is possible in this binding.
643
633
  *
@@ -695,21 +685,26 @@ sap.ui.define([
695
685
  * @param {number} [iCount]
696
686
  * The count of nodes affected by the collapse, in case the cache already performed it
697
687
  * @throws {Error}
698
- * If the binding's root binding is suspended
688
+ * If the binding's root binding is suspended or if the given context is not part of a
689
+ * recursive hierarchy
699
690
  *
700
691
  * @private
701
692
  * @see #expand
702
693
  */
703
694
  ODataListBinding.prototype.collapse = function (oContext, bSilent, iCount) {
695
+ if (this.aContexts[oContext.iIndex] !== oContext) {
696
+ throw new Error("Not currently part of the hierarchy: " + oContext);
697
+ }
698
+
704
699
  iCount ??= this.oCache.collapse(
705
700
  _Helper.getRelativePath(oContext.getPath(), this.oHeaderContext.getPath()));
706
701
 
707
702
  if (iCount > 0) {
708
703
  const aContexts = this.aContexts;
709
704
  const iModelIndex = oContext.getModelIndex();
710
- aContexts.splice(iModelIndex + 1, iCount).forEach((oContext) => {
711
- if (!oContext.created()) {
712
- this.mPreviousContextsByPath[oContext.getPath()] = oContext;
705
+ aContexts.splice(iModelIndex + 1, iCount).forEach((oContext0) => {
706
+ if (!oContext0.created()) {
707
+ this.mPreviousContextsByPath[oContext0.getPath()] = oContext0;
713
708
  } // else: created (even persisted) is kept inside "context" annotation
714
709
  });
715
710
  for (let i = iModelIndex + 1; i < aContexts.length; i += 1) {
@@ -797,17 +792,35 @@ sap.ui.define([
797
792
  * the case if the complete collection has been read or if the system query option
798
793
  * <code>$count</code> is <code>true</code> and the binding has processed at least one request.
799
794
  *
800
- * Creating a new child beneath an existing and visible parent node (which must either be a leaf
801
- * or expanded, but not collapsed) is supported (@experimental as of version 1.117.0) in case of
802
- * a recursive hierarchy (see {@link #setAggregation}). The parent node must be identified via
803
- * an {@link sap.ui.model.odata.v4.Context} instance given as
795
+ * Since 1.125.0, creating a new child beneath an existing and visible parent node (which must
796
+ * either be a leaf or expanded, but not collapsed) is supported in case of a recursive
797
+ * hierarchy (see {@link #setAggregation}). The parent node must be identified via an
798
+ * {@link sap.ui.model.odata.v4.Context} instance given as
804
799
  * <code>oInitialData["@$ui5.node.parent"]</code> (which is immediately removed from the new
805
- * child's data). It can be <code>null</code> or absent when creating a new root node
806
- * (@experimental as of version 1.120.0). <code>bSkipRefresh</code> must be set, but both
807
- * <code>bAtEnd</code> and <code>bInactive</code> must not be set. No other creation or
800
+ * child's data). It can be <code>null</code> or absent when creating a new root node.
801
+ * <code>bSkipRefresh</code> must be set, but both <code>bAtEnd</code> and
802
+ * <code>bInactive</code> must not be set. No other creation or
808
803
  * {@link sap.ui.model.odata.v4.Context#move move} must be pending, and no other modification
809
804
  * (including collapse of some ancestor node) must happen while this creation is pending!
810
805
  *
806
+ * When using the <code>createInPlace</code> parameter
807
+ * (see {@link #setAggregation}, @experimental as of version 1.125.0), the new
808
+ * {@link sap.ui.model.odata.v4.Context#isTransient transient} child is hidden until its
809
+ * {@link sap.ui.model.odata.v4.Context#created created promise} resolves, and then it is shown
810
+ * at a position determined by the back end and the current sort order. Note that the returned
811
+ * context is not always part of this list binding's collection and can only be used for the
812
+ * following scenarios:
813
+ * <ul>
814
+ * <li> The position of the new child can be retrieved by using its
815
+ * {@link sap.ui.model.odata.v4.Context#getIndex index}. If the created child does not
816
+ * become part of the hierarchy due to the search or filter criteria, the context will be
817
+ * {@link sap.ui.model.odata.v4.Context#destroy destroyed} and its
818
+ * {@link sap.ui.model.odata.v4.Context#getIndex index} is set to <code>undefined</code>.
819
+ * <li> The created context always knows its
820
+ * {@link sap.ui.model.odata.v4.Context#getPath path}, which can be used for
821
+ * {@link #getKeepAliveContext}.
822
+ * </ul>
823
+ *
811
824
  * @param {Object<any>} [oInitialData={}]
812
825
  * The initial data for the created entity
813
826
  * @param {boolean} [bSkipRefresh]
@@ -871,6 +884,7 @@ sap.ui.define([
871
884
  var oAggregation = this.mParameters.$$aggregation,
872
885
  iChildIndex, // used only in case of recursive hierarchy
873
886
  oContext,
887
+ bCreateInPlace = oAggregation?.createInPlace,
874
888
  oCreatePathPromise = this.fetchResourcePath(),
875
889
  oCreatePromise,
876
890
  oEntityData,
@@ -879,7 +893,6 @@ sap.ui.define([
879
893
  sResolvedPath = this.getResolvedPath(),
880
894
  sTransientPredicate = "($uid=" + _Helper.uid() + ")",
881
895
  sTransientPath = sResolvedPath + sTransientPredicate,
882
- i,
883
896
  that = this;
884
897
 
885
898
  if (!sResolvedPath) {
@@ -920,6 +933,7 @@ sap.ui.define([
920
933
  // clone data to avoid modifications outside the cache
921
934
  // remove any property starting with "@$ui5."
922
935
  oEntityData = _Helper.publicClone(oInitialData, true) || {};
936
+ let bRefresh;
923
937
  if (oAggregation) {
924
938
  if (!bSkipRefresh) {
925
939
  throw new Error("Missing bSkipRefresh");
@@ -937,6 +951,7 @@ sap.ui.define([
937
951
  throw new Error("Unsupported collapsed parent: " + oParentContext);
938
952
  }
939
953
  oEntityData["@$ui5.node.parent"] = oParentContext.getCanonicalPath().slice(1);
954
+ bRefresh = this.oCache.isRefreshNeededAfterCreate(oParentContext.iIndex);
940
955
  } else {
941
956
  iChildIndex = 0;
942
957
  }
@@ -952,7 +967,7 @@ sap.ui.define([
952
967
  return;
953
968
  }
954
969
 
955
- oContext.doSetSelected(false);
970
+ oContext.doSetSelected(false, true);
956
971
  that.removeCreated(oContext);
957
972
  return Promise.resolve().then(function () {
958
973
  // Fire the change asynchronously so that Cache#delete is finished and #getContexts
@@ -974,7 +989,7 @@ sap.ui.define([
974
989
  ).then(function (oCreatedEntity) {
975
990
  // The entity was created on the server
976
991
  // Note: This code is not called for nested creates, they are always rejected
977
- var bDeepCreate, sGroupId, sPredicate;
992
+ var bDeepCreate, sGroupId0, sPredicate;
978
993
 
979
994
  // refreshSingle requires the new key predicate in oContext.getPath()
980
995
  sPredicate = _Helper.getPrivateAnnotation(oCreatedEntity, "predicate");
@@ -983,27 +998,48 @@ sap.ui.define([
983
998
  that.oModel.checkMessages();
984
999
  }
985
1000
  that.fireEvent("createCompleted", {context : oContext, success : true});
1001
+ if (bCreateInPlace) {
1002
+ const iRank = _Helper.getPrivateAnnotation(oCreatedEntity, "rank");
1003
+ oContext.iIndex = iRank;
1004
+ if (iRank === undefined || bRefresh) {
1005
+ oContext.destroy();
1006
+ return;
1007
+ }
1008
+
1009
+ that.insertContext(oContext, iRank);
1010
+ }
986
1011
  bDeepCreate = _Helper.getPrivateAnnotation(oCreatedEntity, "deepCreate");
987
1012
  _Helper.deletePrivateAnnotation(oCreatedEntity, "deepCreate");
988
- sGroupId = that.getGroupId();
989
- if (that.oModel.isApiGroup(sGroupId)) {
990
- sGroupId = "$auto";
1013
+ sGroupId0 = that.getGroupId();
1014
+ if (that.oModel.isApiGroup(sGroupId0)) {
1015
+ sGroupId0 = "$auto";
991
1016
  }
992
1017
  // currently the optimized update w/o bSkipRefresh is restricted to deep create
993
1018
  return bSkipRefresh || bDeepCreate
994
- ? oContext.updateAfterCreate(bSkipRefresh, sGroupId)
995
- : that.refreshSingle(oContext, that.lockGroup(sGroupId));
1019
+ ? oContext.updateAfterCreate(bSkipRefresh, sGroupId0)
1020
+ : that.refreshSingle(oContext, that.lockGroup(sGroupId0));
996
1021
  }, function (oError) {
997
1022
  oGroupLock.unlock(true); // createInCache failed, so the lock might still be blocking
998
1023
  throw oError;
999
1024
  });
1025
+ if (bRefresh) {
1026
+ oCreatePromise = SyncPromise.all([
1027
+ oCreatePromise,
1028
+ this.requestSideEffects(sGroupId, [""])
1029
+ ]);
1030
+ }
1000
1031
 
1001
- oContext = Context.create(this.oModel, this, sTransientPath,
1002
- iChildIndex ?? -this.iCreatedContexts, oCreatePromise, bInactive);
1003
- oContext.setSelected(this.oHeaderContext.isSelected());
1032
+ const iIndex = bCreateInPlace ? undefined : iChildIndex ?? -this.iCreatedContexts;
1033
+ oContext = Context.create(this.oModel, this, sTransientPath, iIndex, oCreatePromise,
1034
+ bInactive);
1035
+ oContext.doSetSelected(this.oHeaderContext.isSelected());
1004
1036
  if (this.isTransient()) {
1005
1037
  oContext.created().catch(this.oModel.getReporter());
1006
1038
  }
1039
+ if (bCreateInPlace) {
1040
+ return oContext;
1041
+ }
1042
+
1007
1043
  // to make sure that #fetchValue does not overtake #createInCache, avoid bCached flag!
1008
1044
  oContext.fetchValue().then(function (oElement) {
1009
1045
  if (oElement) {
@@ -1012,23 +1048,7 @@ sap.ui.define([
1012
1048
  } // else: context already destroyed
1013
1049
  });
1014
1050
 
1015
- if (iChildIndex !== undefined) {
1016
- this.aContexts.splice(iChildIndex, 0, oContext);
1017
- for (i = this.aContexts.length - 1; i > iChildIndex; i -= 1) {
1018
- if (this.aContexts[i]) {
1019
- this.aContexts[i].iIndex += 1;
1020
- }
1021
- }
1022
- this.iMaxLength += 1;
1023
- } else if (this.bFirstCreateAtEnd !== bAtEnd) {
1024
- this.aContexts.splice(this.iCreatedContexts - 1, 0, oContext);
1025
- for (i = this.iCreatedContexts - 1; i >= 0; i -= 1) {
1026
- this.aContexts[i].iIndex = i - this.iCreatedContexts;
1027
- }
1028
- } else {
1029
- this.aContexts.unshift(oContext);
1030
- }
1031
- this._fireChange({reason : ChangeReason.Add});
1051
+ this.insertContext(oContext, iChildIndex, bAtEnd);
1032
1052
 
1033
1053
  return oContext;
1034
1054
  };
@@ -1059,21 +1079,19 @@ sap.ui.define([
1059
1079
  sPath = this.getResolvedPath(),
1060
1080
  sPredicate,
1061
1081
  bStartBeyondRange = iStart > this.aContexts.length,
1062
- i,
1063
1082
  that = this;
1064
1083
 
1065
1084
  /*
1066
1085
  * Shrinks contexts to the new length, destroys unneeded contexts
1067
1086
  */
1068
1087
  function shrinkContexts() {
1069
- var iNewLength = that.iMaxLength + that.iCreatedContexts,
1070
- i;
1088
+ var iNewLength = that.iMaxLength + that.iCreatedContexts;
1071
1089
 
1072
1090
  if (iNewLength >= that.aContexts.length) {
1073
1091
  return;
1074
1092
  }
1075
1093
 
1076
- for (i = iNewLength; i < that.aContexts.length; i += 1) {
1094
+ for (let i = iNewLength; i < that.aContexts.length; i += 1) {
1077
1095
  if (that.aContexts[i]) {
1078
1096
  that.aContexts[i].destroy();
1079
1097
  }
@@ -1085,7 +1103,7 @@ sap.ui.define([
1085
1103
  bChanged = true;
1086
1104
  }
1087
1105
 
1088
- for (i = 0; i < aResults.length; i += 1) {
1106
+ for (let i = 0; i < aResults.length; i += 1) {
1089
1107
  if (this.aContexts[iStart + i] === undefined && aResults[i]) {
1090
1108
  bChanged = true;
1091
1109
  i$skipIndex = iStart + i - this.iCreatedContexts; // index on server ($skip)
@@ -1115,7 +1133,7 @@ sap.ui.define([
1115
1133
  }
1116
1134
  } else {
1117
1135
  oContext = Context.create(oModel, this, sContextPath, i$skipIndex);
1118
- oContext.setSelected(this.oHeaderContext.isSelected());
1136
+ oContext.doSetSelected(this.oHeaderContext.isSelected());
1119
1137
  }
1120
1138
  this.aContexts[iStart + i] = oContext;
1121
1139
  }
@@ -1365,6 +1383,50 @@ sap.ui.define([
1365
1383
  }
1366
1384
  };
1367
1385
 
1386
+ /**
1387
+ * Detach event handler <code>fnFunction</code> from the 'createActivate' event of this binding.
1388
+ *
1389
+ * @param {function} fnFunction The function to call when the event occurs
1390
+ * @param {object} [oListener] Object on which to call the given function
1391
+ * @returns {this} <code>this</code> to allow method chaining
1392
+ *
1393
+ * @public
1394
+ * @since 1.98.0
1395
+ */
1396
+ ODataListBinding.prototype.detachCreateActivate = function (fnFunction, oListener) {
1397
+ return this.detachEvent("createActivate", fnFunction, oListener);
1398
+ };
1399
+
1400
+ /**
1401
+ * Detach event handler <code>fnFunction</code> from the 'createCompleted' event of this
1402
+ * binding.
1403
+ *
1404
+ * @param {function} fnFunction The function to call when the event occurs
1405
+ * @param {object} [oListener] Object on which to call the given function
1406
+ * @returns {this} <code>this</code> to allow method chaining
1407
+ *
1408
+ * @public
1409
+ * @since 1.66.0
1410
+ */
1411
+ ODataListBinding.prototype.detachCreateCompleted = function (fnFunction, oListener) {
1412
+ return this.detachEvent("createCompleted", fnFunction, oListener);
1413
+ };
1414
+
1415
+ /**
1416
+ * Detach event handler <code>fnFunction</code> from the 'createSent' event of this
1417
+ * binding.
1418
+ *
1419
+ * @param {function} fnFunction The function to call when the event occurs
1420
+ * @param {object} [oListener] Object on which to call the given function
1421
+ * @returns {this} <code>this</code> to allow method chaining
1422
+ *
1423
+ * @public
1424
+ * @since 1.66.0
1425
+ */
1426
+ ODataListBinding.prototype.detachCreateSent = function (fnFunction, oListener) {
1427
+ return this.detachEvent("createSent", fnFunction, oListener);
1428
+ };
1429
+
1368
1430
  /**
1369
1431
  * @override
1370
1432
  * @see sap.ui.model.odata.v4.ODataBinding#doCreateCache
@@ -1527,13 +1589,18 @@ sap.ui.define([
1527
1589
  * @returns {sap.ui.base.SyncPromise}
1528
1590
  * A promise that is resolved when the expand is successful and rejected when it fails
1529
1591
  * @throws {Error}
1530
- * If the binding's root binding is suspended
1592
+ * If the binding's root binding is suspended or if the given context is not part of a
1593
+ * recursive hierarchy
1531
1594
  *
1532
1595
  * @private
1533
1596
  * @see #collapse
1534
1597
  */
1535
1598
  ODataListBinding.prototype.expand = function (oContext, bSilent) {
1536
1599
  this.checkSuspended();
1600
+ if (this.aContexts[oContext.iIndex] !== oContext) {
1601
+ throw new Error("Not currently part of the hierarchy: " + oContext);
1602
+ }
1603
+
1537
1604
  let bDataRequested = false;
1538
1605
 
1539
1606
  return this.oCache.expand(this.lockGroup(),
@@ -1918,7 +1985,7 @@ sap.ui.define([
1918
1985
  *
1919
1986
  * @param {sap.ui.model.odata.v4.Context} oNode
1920
1987
  * Some node which could have a parent
1921
- * @param {boolean} [bAllowRequest]
1988
+ * @param {boolean} [bAllowRequest]
1922
1989
  * Whether it is allowed to send a GET request to fetch the parent node's data
1923
1990
  * @returns {sap.ui.model.odata.v4.Context|null|undefined|
1924
1991
  * Promise<sap.ui.model.odata.v4.Context>|sap.ui.base.SyncPromise}
@@ -1935,9 +2002,7 @@ sap.ui.define([
1935
2002
  * @private
1936
2003
  */
1937
2004
  ODataListBinding.prototype.fetchOrGetParent = function (oNode, bAllowRequest) {
1938
- const oAggregation = this.mParameters.$$aggregation;
1939
-
1940
- if (!oAggregation || !oAggregation.hierarchyQualifier) {
2005
+ if (!this.mParameters.$$aggregation?.hierarchyQualifier) {
1941
2006
  throw new Error("Missing recursive hierarchy");
1942
2007
  }
1943
2008
  if (this.aContexts[oNode.iIndex] !== oNode) {
@@ -1962,6 +2027,64 @@ sap.ui.define([
1962
2027
  return this.aContexts[iParentIndex];
1963
2028
  };
1964
2029
 
2030
+ /**
2031
+ * Fetches (if <code>bAllowRequest</code> is set) or gets the given node's sibling, either the
2032
+ * next one (via offset +1) or the previous one (via offset -1).
2033
+ *
2034
+ * @param {sap.ui.model.odata.v4.Context} oNode - A node
2035
+ * @param {number} iOffset - An offset, either -1 or +1
2036
+ * @param {boolean} [bAllowRequest]
2037
+ * Whether it is allowed to send a GET request to fetch the sibling
2038
+ * @returns {sap.ui.model.odata.v4.Context|null|undefined
2039
+ * |Promise<sap.ui.model.odata.v4.Context|null>}
2040
+ * The sibling's context, or <code>null</code> if no such sibling exists for sure, or
2041
+ * <code>undefined</code> if we cannot tell and it is not allowed to send a request (see
2042
+ * <code>bAllowRequest</code>). Or a promise (if a request was sent) which resolves with the
2043
+ * sibling's context (or <code>null</code> if no such sibling exists) in case of success, or
2044
+ * rejects with an instance of <code>Error</code> in case of failure.
2045
+ * @throws {Error} If
2046
+ * <ul>
2047
+ * <li> the given offset is unsupported,
2048
+ * <li> this binding's root binding is suspended,
2049
+ * <li> the given context is {@link #isDeleted deleted}, {@link #isTransient transient}, or
2050
+ * not part of a recursive hierarchy.
2051
+ * </ul>
2052
+ *
2053
+ * @private
2054
+ */
2055
+ ODataListBinding.prototype.fetchOrGetSibling = function (oNode, iOffset = +1,
2056
+ bAllowRequest = false) {
2057
+ if (!this.mParameters.$$aggregation?.hierarchyQualifier) {
2058
+ throw new Error("Missing recursive hierarchy");
2059
+ }
2060
+ if (iOffset !== -1 && iOffset !== +1) {
2061
+ throw new Error("Unsupported offset: " + iOffset);
2062
+ }
2063
+ if (oNode.isDeleted() || oNode.isTransient() || this.aContexts[oNode.iIndex] !== oNode) {
2064
+ throw new Error("Unsupported context: " + oNode);
2065
+ }
2066
+ this.checkSuspended();
2067
+
2068
+ const iSibling = this.oCache.getSiblingIndex(oNode.iIndex, iOffset);
2069
+ if (iSibling < 0) {
2070
+ return null;
2071
+ }
2072
+ if (iSibling !== undefined) {
2073
+ this.fetchContexts(iSibling, 1, 0, _GroupLock.$cached);
2074
+ return this.aContexts[iSibling];
2075
+ }
2076
+ if (!bAllowRequest) {
2077
+ return undefined;
2078
+ }
2079
+
2080
+ return this.oCache.requestSiblingIndex(oNode.iIndex, iOffset, this.lockGroup())
2081
+ .then((iIndex) => {
2082
+ return iIndex < 0
2083
+ ? null
2084
+ : this.requestContexts(iIndex, 1).then((aResult) => aResult[0]);
2085
+ });
2086
+ };
2087
+
1965
2088
  /**
1966
2089
  * Requests the value for the given path and index; the value is requested from this binding's
1967
2090
  * cache or from its context in case it has no cache.
@@ -2000,31 +2123,6 @@ sap.ui.define([
2000
2123
  });
2001
2124
  };
2002
2125
 
2003
- /**
2004
- * @override
2005
- * @see sap.ui.model.odata.v4.ODataParentBinding#findContextForCanonicalPath
2006
- */
2007
- ODataListBinding.prototype.findContextForCanonicalPath = function (sCanonicalPath) {
2008
- var aKeptAliveContexts = Object.values(this.mPreviousContextsByPath)
2009
- .filter(function (oCandidate) {
2010
- return oCandidate.isEffectivelyKeptAlive();
2011
- });
2012
-
2013
- function check(aContexts) {
2014
- return aContexts.find(function (oCandidate) {
2015
- var oPromise;
2016
-
2017
- if (oCandidate) {
2018
- oPromise = oCandidate.fetchCanonicalPath();
2019
- oPromise.caught();
2020
- return oPromise.getResult() === sCanonicalPath;
2021
- }
2022
- });
2023
- }
2024
-
2025
- return check(aKeptAliveContexts) || check(this.aContexts);
2026
- };
2027
-
2028
2126
  /**
2029
2127
  * Filters the list with the given filters. Since 1.97.0, if filters are unchanged, no request
2030
2128
  * is sent, regardless of pending changes. Since 1.111.0, all contexts (incl. the header
@@ -2148,6 +2246,31 @@ sap.ui.define([
2148
2246
  return this;
2149
2247
  };
2150
2248
 
2249
+ /**
2250
+ * @override
2251
+ * @see sap.ui.model.odata.v4.ODataParentBinding#findContextForCanonicalPath
2252
+ */
2253
+ ODataListBinding.prototype.findContextForCanonicalPath = function (sCanonicalPath) {
2254
+ var aKeptAliveContexts = Object.values(this.mPreviousContextsByPath)
2255
+ .filter(function (oCandidate) {
2256
+ return oCandidate.isEffectivelyKeptAlive();
2257
+ });
2258
+
2259
+ function check(aContexts) {
2260
+ return aContexts.find(function (oCandidate) {
2261
+ var oPromise;
2262
+
2263
+ if (oCandidate) {
2264
+ oPromise = oCandidate.fetchCanonicalPath();
2265
+ oPromise.caught();
2266
+ return oPromise.getResult() === sCanonicalPath;
2267
+ }
2268
+ });
2269
+ }
2270
+
2271
+ return check(aKeptAliveContexts) || check(this.aContexts);
2272
+ };
2273
+
2151
2274
  /**
2152
2275
  * Fires the 'createActivate' event.
2153
2276
  *
@@ -2168,14 +2291,26 @@ sap.ui.define([
2168
2291
  return false;
2169
2292
  };
2170
2293
 
2294
+ /**
2295
+ * Fires the 'selectionChanged' event.
2296
+ *
2297
+ * @param {sap.ui.model.odata.v4.Context} oContext
2298
+ * The context whose selection has changed
2299
+ *
2300
+ * @private
2301
+ */
2302
+ ODataListBinding.prototype.fireSelectionChanged = function (oContext) {
2303
+ this.fireEvent("selectionChanged", {context : oContext});
2304
+ };
2305
+
2171
2306
  /**
2172
2307
  * Returns the current object holding the information needed for data aggregation, see
2173
2308
  * {@link #setAggregation}.
2174
2309
  *
2175
2310
  * @param {boolean} [bVerbose]
2176
2311
  * Whether to additionally return the "$"-prefixed values described below which obviously
2177
- * cannot be given back to the setter (@experimental as of version 1.111.0). They are
2178
- * retrieved from the pair of "Org.OData.Aggregation.V1.RecursiveHierarchy" and
2312
+ * cannot be given back to the setter (since 1.125.0). They are retrieved from the pair of
2313
+ * "Org.OData.Aggregation.V1.RecursiveHierarchy" and
2179
2314
  * "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy" annotations at this binding's
2180
2315
  * entity type, identified via the <code>hierarchyQualifier</code> given to
2181
2316
  * {@link #setAggregation}.
@@ -2711,7 +2846,9 @@ sap.ui.define([
2711
2846
  * from which the tree has been created
2712
2847
  * @returns {object} The AST of the filter tree including the static filter as string or null if
2713
2848
  * no filters are set
2849
+ *
2714
2850
  * @private
2851
+ * @since 1.57.0
2715
2852
  * @ui5-restricted sap.ui.table, sap.ui.export
2716
2853
  */
2717
2854
  // @override sap.ui.model.ListBinding#getFilterInfo
@@ -2771,28 +2908,6 @@ sap.ui.define([
2771
2908
  return this.isResolved() ? this.oHeaderContext : null;
2772
2909
  };
2773
2910
 
2774
- /**
2775
- * Converts the view index of a context to the model index in case there are contexts created at
2776
- * the end.
2777
- *
2778
- * @param {number} iViewIndex The view index
2779
- * @returns {number} The model index
2780
- *
2781
- * @private
2782
- */
2783
- ODataListBinding.prototype.getModelIndex = function (iViewIndex) {
2784
- if (!this.bFirstCreateAtEnd) {
2785
- return iViewIndex;
2786
- }
2787
- if (!this.bLengthFinal) { // created at end, but the read is pending and $count unknown yet
2788
- return this.aContexts.length - iViewIndex - 1;
2789
- }
2790
- return iViewIndex < this.getLength() - this.iCreatedContexts
2791
- ? iViewIndex + this.iCreatedContexts
2792
- // Note: the created rows are mirrored at the end
2793
- : this.getLength() - iViewIndex - 1;
2794
- };
2795
-
2796
2911
  /**
2797
2912
  * Calls {@link sap.ui.model.odata.v4.Context#setKeepAlive} at the context for the given path
2798
2913
  * and returns it. Since 1.100.0 the function always returns such a context. If none exists yet,
@@ -2819,7 +2934,7 @@ sap.ui.define([
2819
2934
  * </ul>
2820
2935
  *
2821
2936
  * @public
2822
- * @see sap.ui.model.odata.v4.Model#getKeepAliveContext
2937
+ * @see sap.ui.model.odata.v4.ODataModel#getKeepAliveContext
2823
2938
  * @since 1.99.0
2824
2939
  */
2825
2940
  ODataListBinding.prototype.getKeepAliveContext = function (sPath, bRequestMessages, sGroupId) {
@@ -2911,6 +3026,28 @@ sap.ui.define([
2911
3026
  return this.aContexts.length ? this.aContexts.length + 10 : 0;
2912
3027
  };
2913
3028
 
3029
+ /**
3030
+ * Converts the view index of a context to the model index in case there are contexts created at
3031
+ * the end.
3032
+ *
3033
+ * @param {number} iViewIndex The view index
3034
+ * @returns {number} The model index
3035
+ *
3036
+ * @private
3037
+ */
3038
+ ODataListBinding.prototype.getModelIndex = function (iViewIndex) {
3039
+ if (!this.bFirstCreateAtEnd) {
3040
+ return iViewIndex;
3041
+ }
3042
+ if (!this.bLengthFinal) { // created at end, but the read is pending and $count unknown yet
3043
+ return this.aContexts.length - iViewIndex - 1;
3044
+ }
3045
+ return iViewIndex < this.getLength() - this.iCreatedContexts
3046
+ ? iViewIndex + this.iCreatedContexts
3047
+ // Note: the created rows are mirrored at the end
3048
+ : this.getLength() - iViewIndex - 1;
3049
+ };
3050
+
2914
3051
  /**
2915
3052
  * Builds the value for the OData V4 '$orderby' system query option from the given sorters
2916
3053
  * and the optional static '$orderby' value which is appended to the sorters.
@@ -3078,6 +3215,39 @@ sap.ui.define([
3078
3215
  }
3079
3216
  };
3080
3217
 
3218
+ /**
3219
+ * Inserts the given context at the given position into <code>this.aContexts</code>. The
3220
+ * position can be described either via a specific <code>iIndex</code>, or the relative position
3221
+ * in the creation area according to <code>bAtEnd</code>. Fires a change event with
3222
+ * <code>ChangeReason.Add</code>.
3223
+ *
3224
+ * @param {sap.ui.model.odata.v4.Context} oContext
3225
+ * The context to be inserted
3226
+ * @param {number} [iIndex]
3227
+ * The insertion index
3228
+ * @param {boolean} [bAtEnd]
3229
+ * The relative position in the creation area
3230
+ */
3231
+ ODataListBinding.prototype.insertContext = function (oContext, iIndex, bAtEnd) {
3232
+ if (iIndex !== undefined) {
3233
+ _Helper.insert(this.aContexts, iIndex, oContext);
3234
+ for (let i = this.aContexts.length - 1; i > iIndex; i -= 1) {
3235
+ if (this.aContexts[i]) {
3236
+ this.aContexts[i].iIndex += 1;
3237
+ }
3238
+ }
3239
+ this.iMaxLength += 1;
3240
+ } else if (this.bFirstCreateAtEnd !== bAtEnd) {
3241
+ this.aContexts.splice(this.iCreatedContexts - 1, 0, oContext);
3242
+ for (let i = this.iCreatedContexts - 1; i >= 0; i -= 1) {
3243
+ this.aContexts[i].iIndex = i - this.iCreatedContexts;
3244
+ }
3245
+ } else {
3246
+ this.aContexts.unshift(oContext);
3247
+ }
3248
+ this._fireChange({reason : ChangeReason.Add});
3249
+ };
3250
+
3081
3251
  /**
3082
3252
  * Inserts a new gap into <code>this.aContexts</code> just after the given index and with the
3083
3253
  * given positive length. Note that the given index may be the last within the array, but not
@@ -3123,7 +3293,7 @@ sap.ui.define([
3123
3293
  * @private
3124
3294
  */
3125
3295
  ODataListBinding.prototype.isAncestorOf = function (oAncestor, oDescendant) {
3126
- if (!this.mParameters.$$aggregation || !this.mParameters.$$aggregation.hierarchyQualifier) {
3296
+ if (!this.mParameters.$$aggregation?.hierarchyQualifier) {
3127
3297
  throw new Error("Missing recursive hierarchy");
3128
3298
  }
3129
3299
  if (!oDescendant) {
@@ -3283,7 +3453,8 @@ sap.ui.define([
3283
3453
  * @returns {sap.ui.base.SyncPromise<void>}
3284
3454
  * A promise which is resolved without a defined result when the move is finished, or
3285
3455
  * rejected in case of an error
3286
- * @throws {Error} If there is no recursive hierarchy
3456
+ * @throws {Error} If there is no recursive hierarchy or if this binding's root binding is
3457
+ * suspended
3287
3458
  *
3288
3459
  * @private
3289
3460
  */
@@ -3306,10 +3477,10 @@ sap.ui.define([
3306
3477
  }
3307
3478
  };
3308
3479
 
3309
- const oAggregation = this.mParameters.$$aggregation;
3310
- if (!oAggregation || !oAggregation.hierarchyQualifier) {
3480
+ if (!this.mParameters.$$aggregation?.hierarchyQualifier) {
3311
3481
  throw new Error("Missing recursive hierarchy");
3312
3482
  }
3483
+ this.checkSuspended();
3313
3484
 
3314
3485
  const sUpdateGroupId = this.getUpdateGroupId();
3315
3486
  const oGroupLock = this.lockGroup(sUpdateGroupId, true, true);
@@ -3323,16 +3494,21 @@ sap.ui.define([
3323
3494
  const sNonCanonicalChildPath = oSiblingContext === undefined
3324
3495
  ? undefined
3325
3496
  : oChildContext.getPath().slice(1);
3497
+ const bUpdateSiblingIndex = oSiblingContext?.isEffectivelyKeptAlive();
3326
3498
  const {promise : oPromise, refresh : bRefresh} = this.oCache.move(oGroupLock, sChildPath,
3327
- sParentPath, sSiblingPath, sNonCanonicalChildPath);
3499
+ sParentPath, sSiblingPath, sNonCanonicalChildPath, bUpdateSiblingIndex);
3328
3500
 
3329
3501
  if (bRefresh) {
3330
3502
  return SyncPromise.all([
3331
3503
  oPromise,
3332
3504
  this.requestSideEffects(sUpdateGroupId, [""])
3333
- ]).then(([fnGetIndex]) => {
3505
+ ]).then(([fnGetIndices]) => {
3334
3506
  // Note: wait for side-effects refresh before getting index!
3335
- oChildContext.iIndex = fnGetIndex();
3507
+ const [iChildIndex, iSiblingIndex] = fnGetIndices();
3508
+ oChildContext.iIndex = iChildIndex;
3509
+ if (bUpdateSiblingIndex) {
3510
+ oSiblingContext.iIndex = iSiblingIndex;
3511
+ }
3336
3512
  });
3337
3513
  }
3338
3514
 
@@ -3345,12 +3521,8 @@ sap.ui.define([
3345
3521
  }
3346
3522
  const iOldIndex = oChildContext.getModelIndex();
3347
3523
  this.aContexts.splice(iOldIndex, 1);
3348
- if (iNewIndex > this.aContexts.length) {
3349
- this.aContexts[iNewIndex] = oChildContext;
3350
- // Note: no need to adjust iMaxLength
3351
- } else {
3352
- this.aContexts.splice(iNewIndex, 0, oChildContext);
3353
- }
3524
+ // Note: no need to adjust iMaxLength
3525
+ _Helper.insert(this.aContexts, iNewIndex, oChildContext);
3354
3526
  setIndices(iOldIndex, iNewIndex);
3355
3527
 
3356
3528
  if (iCollapseCount) {
@@ -3454,20 +3626,20 @@ sap.ui.define([
3454
3626
  sResolvedPath = that.getResolvedPath();
3455
3627
 
3456
3628
  that.aContexts = aInitialDataCollection.map(function (oInitialData, i) {
3457
- var oContext,
3629
+ var oContext0,
3458
3630
  sTransientPredicate
3459
3631
  = _Helper.getPrivateAnnotation(oInitialData, "transientPredicate"),
3460
3632
  oPromise = _Helper.getPrivateAnnotation(oInitialData, "promise");
3461
3633
 
3462
- oContext = Context.create(that.oModel, that, sResolvedPath + sTransientPredicate,
3634
+ oContext0 = Context.create(that.oModel, that, sResolvedPath + sTransientPredicate,
3463
3635
  i - aInitialDataCollection.length, oPromise, false, true);
3464
- oContext.created().catch(that.oModel.getReporter());
3636
+ oContext0.created().catch(that.oModel.getReporter());
3465
3637
 
3466
- _Helper.setPrivateAnnotation(oInitialData, "context", oContext);
3638
+ _Helper.setPrivateAnnotation(oInitialData, "context", oContext0);
3467
3639
  _Helper.setPrivateAnnotation(oInitialData, "firstCreateAtEnd", false);
3468
3640
  _Helper.deletePrivateAnnotation(oInitialData, "promise");
3469
3641
 
3470
- return oContext;
3642
+ return oContext0;
3471
3643
  });
3472
3644
  that.iCreatedContexts = that.iActiveContexts = that.aContexts.length;
3473
3645
  that.bFirstCreateAtEnd = false;
@@ -3613,7 +3785,7 @@ sap.ui.define([
3613
3785
  if (iIndex >= 0) { // Note: implies oContext.created()
3614
3786
  that.removeCreated(oContext);
3615
3787
  }
3616
- }, false, bIgnorePendingChanges);
3788
+ }, bIgnorePendingChanges);
3617
3789
  }).catch(function (oError) {
3618
3790
  that.oModel.reportError("Failed to refresh kept-alive elements", sClassName, oError);
3619
3791
  throw oError;
@@ -4074,8 +4246,7 @@ sap.ui.define([
4074
4246
  * @private
4075
4247
  */
4076
4248
  ODataListBinding.prototype.reset = function (sChangeReason, bDrop, sGroupId) {
4077
- var oContext,
4078
- iCreated = 0, // index (and finally number) of created elements that we keep
4249
+ var iCreated = 0, // index (and finally number) of created elements that we keep
4079
4250
  bEmpty = this.iCurrentEnd === 0,
4080
4251
  bKeepTransient = sGroupId && sGroupId !== this.getUpdateGroupId(),
4081
4252
  i,
@@ -4090,7 +4261,7 @@ sap.ui.define([
4090
4261
  that.mPreviousContextsByPath[oContext.getPath()] = oContext;
4091
4262
  });
4092
4263
  for (i = 0; i < this.iCreatedContexts; i += 1) {
4093
- oContext = this.aContexts[i];
4264
+ const oContext = this.aContexts[i];
4094
4265
  if (bDrop === false
4095
4266
  ? bKeepTransient && oContext.isTransient()
4096
4267
  || oContext.isInactive() !== undefined
@@ -4241,17 +4412,16 @@ sap.ui.define([
4241
4412
  * used to remove the data aggregation object, which allows to set <code>$apply</code>
4242
4413
  * explicitly afterwards. <code>null</code> is not supported.
4243
4414
  * <br>
4244
- * Since 1.89.0, the deprecated property <code>"grandTotal like 1.84" : true</code> can be
4245
- * used to turn on the handling of grand totals like in 1.84.0, using aggregates of aggregates
4246
- * and thus allowing to filter by aggregated properties while grand totals are needed. Beware
4247
- * that methods like "average" or "countdistinct" are not compatible with this approach, and
4248
- * it cannot be combined with group levels.
4415
+ * Since 1.89.0, the <b>deprecated</b> property <code>"grandTotal like 1.84" : true</code> can
4416
+ * be used to turn on the handling of grand totals like in 1.84.0, using aggregates of
4417
+ * aggregates and thus allowing to filter by aggregated properties while grand totals are
4418
+ * needed. Beware that methods like "average" or "countdistinct" are not compatible with this
4419
+ * approach, and it cannot be combined with group levels.
4249
4420
  * <br>
4250
- * Since 1.105.0, either a recursive hierarchy or pure data aggregation is supported, but no
4251
- * mix; <code>hierarchyQualifier</code> is the leading property that decides between those two
4252
- * use cases - this is an <b>experimental API</b> and is only supported if the model uses the
4253
- * <code>autoExpandSelect</code> parameter! Since 1.117.0, it is available for read-only
4254
- * hierarchies.
4421
+ * Since 1.117.0, either a read-only recursive hierarchy or pure data aggregation is
4422
+ * supported, but no mix; <code>hierarchyQualifier</code> is the leading property that decides
4423
+ * between those two use cases. Since 1.125.0, maintenance of a recursive hierarchy is
4424
+ * supported.
4255
4425
  * @param {object} [oAggregation.aggregate]
4256
4426
  * A map from aggregatable property names or aliases to objects containing the following
4257
4427
  * details:
@@ -4279,10 +4449,13 @@ sap.ui.define([
4279
4449
  * there is only one, or <code>null</code> otherwise ("multi-unit situation"). (SQL
4280
4450
  * suggestion: <code>CASE WHEN MIN(Unit) = MAX(Unit) THEN MIN(Unit) END</code>)
4281
4451
  * </ul>
4452
+ * @param {boolean} [oAggregation.createInPlace]
4453
+ * Whether created nodes are shown in place at the position specified by the service
4454
+ * (@experimental as of version 1.125.0); only the value <code>true</code> is allowed.
4455
+ * Otherwise, created nodes are displayed out of place as the first child of their parent.
4282
4456
  * @param {number} [oAggregation.expandTo=1]
4283
4457
  * The number (as a positive integer) of different levels initially available without calling
4284
- * {@link sap.ui.model.odata.v4.Context#expand} (@experimental as of version 1.105.0;
4285
- * available for read-only hierarchies since 1.117.0), supported only if a
4458
+ * {@link sap.ui.model.odata.v4.Context#expand} (since 1.117.0), supported only if a
4286
4459
  * <code>hierarchyQualifier</code> is given. Root nodes are on the first level. By default,
4287
4460
  * only root nodes are available; they are not yet expanded. Since 1.120.0,
4288
4461
  * <code>expandTo >= Number.MAX_SAFE_INTEGER</code> can be used to expand all levels
@@ -4312,14 +4485,14 @@ sap.ui.define([
4312
4485
  * @param {string} [oAggregation.hierarchyQualifier]
4313
4486
  * The qualifier for the pair of "Org.OData.Aggregation.V1.RecursiveHierarchy" and
4314
4487
  * "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy" annotations at this binding's
4315
- * entity type (@experimental as of version 1.105.0; available for read-only hierarchies since
4316
- * 1.117.0). If present, a recursive hierarchy without data aggregation is defined, and the
4317
- * only other supported properties are <code>expandTo</code> and <code>search</code>. A
4318
- * recursive hierarchy cannot be combined with:
4488
+ * entity type (since 1.117.0). If present, a recursive hierarchy without data aggregation is
4489
+ * defined, and the only other supported properties are <code>createInPlace</code>,
4490
+ * <code>expandTo</code>, and <code>search</code>. A recursive hierarchy cannot be combined
4491
+ * with:
4319
4492
  * <ul>
4320
4493
  * <li> "$search",
4321
- * <li> the <code>vGroup</code> parameter of {@link sap.ui.model.Sorter} (since 1.107.0),
4322
- * <li> shared requests (since 1.108.0).
4494
+ * <li> the <code>vGroup</code> parameter of {@link sap.ui.model.Sorter},
4495
+ * <li> shared requests.
4323
4496
  * </ul>
4324
4497
  * @param {string} [oAggregation.search]
4325
4498
  * Like the <a href=
@@ -4442,10 +4615,10 @@ sap.ui.define([
4442
4615
  sResolvedPath = this.oModel.resolve(this.sPath, oContext);
4443
4616
  // Note: oHeaderContext is missing only if called from c'tor
4444
4617
  if (this.oHeaderContext && this.oHeaderContext.getPath() !== sResolvedPath) {
4618
+ this.oHeaderContext.doSetSelected(false);
4445
4619
  // Do not destroy the context immediately to avoid timing issues with
4446
4620
  // dependent bindings, keep it in mPreviousContextsByPath to destroy it
4447
4621
  // later
4448
- this.oHeaderContext.setSelected(false);
4449
4622
  this.mPreviousContextsByPath[this.oHeaderContext.getPath()]
4450
4623
  = this.oHeaderContext;
4451
4624
  this.oHeaderContext = null;
@@ -4732,23 +4905,6 @@ sap.ui.define([
4732
4905
  }
4733
4906
  };
4734
4907
 
4735
- /**
4736
- * Returns all currently existing contexts of this list binding in no special order.
4737
- *
4738
- * @returns {sap.ui.model.odata.v4.Context[]}
4739
- * All currently existing contexts of this list binding, in no special order
4740
- *
4741
- * @private
4742
- * @see #getAllCurrentContexts
4743
- */
4744
- ODataListBinding.prototype._getAllExistingContexts = function () {
4745
- return (this.aContexts ?? []).filter(function (oContext) {
4746
- return oContext;
4747
- }).concat(Object.values(this.mPreviousContextsByPath).filter(function (oContext) {
4748
- return oContext.isEffectivelyKeptAlive();
4749
- }));
4750
- };
4751
-
4752
4908
  //*********************************************************************************************
4753
4909
  // "static" functions
4754
4910
  //*********************************************************************************************