@openui5/sap.ui.core 1.120.0 → 1.120.2

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 (625) hide show
  1. package/.reuse/dep5 +1 -1
  2. package/THIRDPARTY.txt +1 -1
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -1
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.storage.js +3 -3
  9. package/src/sap/base/Event.js +2 -2
  10. package/src/sap/base/Eventing.js +1 -1
  11. package/src/sap/base/config.js +1 -1
  12. package/src/sap/base/i18n/Formatting.js +30 -14
  13. package/src/sap/base/i18n/LanguageTag.js +1 -1
  14. package/src/sap/base/i18n/Localization.js +1 -2
  15. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  16. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  17. package/src/sap/base/util/restricted/_castArray.js +1 -1
  18. package/src/sap/base/util/restricted/_compact.js +1 -1
  19. package/src/sap/base/util/restricted/_curry.js +1 -1
  20. package/src/sap/base/util/restricted/_debounce.js +1 -1
  21. package/src/sap/base/util/restricted/_difference.js +1 -1
  22. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  24. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_flatten.js +1 -1
  28. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  30. package/src/sap/base/util/restricted/_intersection.js +1 -1
  31. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  33. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  35. package/src/sap/base/util/restricted/_isNil.js +1 -1
  36. package/src/sap/base/util/restricted/_max.js +1 -1
  37. package/src/sap/base/util/restricted/_merge.js +1 -1
  38. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  39. package/src/sap/base/util/restricted/_min.js +1 -1
  40. package/src/sap/base/util/restricted/_omit.js +1 -1
  41. package/src/sap/base/util/restricted/_pick.js +1 -1
  42. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  43. package/src/sap/base/util/restricted/_throttle.js +1 -1
  44. package/src/sap/base/util/restricted/_toArray.js +1 -1
  45. package/src/sap/base/util/restricted/_union.js +1 -1
  46. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  47. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  48. package/src/sap/base/util/restricted/_uniq.js +1 -1
  49. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  51. package/src/sap/base/util/restricted/_without.js +1 -1
  52. package/src/sap/base/util/restricted/_xor.js +1 -1
  53. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  54. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  55. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  57. package/src/sap/ui/Device.js +3 -3
  58. package/src/sap/ui/Global.js +4 -4
  59. package/src/sap/ui/base/BindingParser.js +4 -4
  60. package/src/sap/ui/base/DataType.js +5 -5
  61. package/src/sap/ui/base/Event.js +1 -1
  62. package/src/sap/ui/base/EventProvider.js +1 -1
  63. package/src/sap/ui/base/Interface.js +1 -1
  64. package/src/sap/ui/base/ManagedObject.js +9 -65
  65. package/src/sap/ui/base/ManagedObjectMetadata.js +25 -1
  66. package/src/sap/ui/base/ManagedObjectRegistry.js +186 -169
  67. package/src/sap/ui/base/Metadata.js +1 -1
  68. package/src/sap/ui/base/Object.js +1 -1
  69. package/src/sap/ui/base/ObjectPool.js +1 -1
  70. package/src/sap/ui/core/.library +3 -3
  71. package/src/sap/ui/core/BusyIndicator.js +1 -1
  72. package/src/sap/ui/core/Component.js +55 -150
  73. package/src/sap/ui/core/ComponentContainer.js +5 -5
  74. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  75. package/src/sap/ui/core/ComponentRegistry.js +153 -0
  76. package/src/sap/ui/core/ComponentSupport.js +3 -3
  77. package/src/sap/ui/core/Configuration.js +9 -7
  78. package/src/sap/ui/core/Control.js +6 -4
  79. package/src/sap/ui/core/Core.js +19 -71
  80. package/src/sap/ui/core/CustomData.js +1 -1
  81. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  82. package/src/sap/ui/core/Element.js +30 -142
  83. package/src/sap/ui/core/ElementMetadata.js +1 -1
  84. package/src/sap/ui/core/ElementRegistry.js +159 -0
  85. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  86. package/src/sap/ui/core/EventBus.js +1 -1
  87. package/src/sap/ui/core/ExtensionPoint.js +5 -5
  88. package/src/sap/ui/core/FocusHandler.js +3 -2
  89. package/src/sap/ui/core/Fragment.js +7 -7
  90. package/src/sap/ui/core/HTML.js +1 -1
  91. package/src/sap/ui/core/History.js +1 -1
  92. package/src/sap/ui/core/Icon.js +1 -1
  93. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  94. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  95. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  96. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  97. package/src/sap/ui/core/InvisibleText.js +1 -1
  98. package/src/sap/ui/core/Item.js +1 -1
  99. package/src/sap/ui/core/LabelEnablement.js +1 -1
  100. package/src/sap/ui/core/LayoutData.js +1 -1
  101. package/src/sap/ui/core/Lib.js +62 -32
  102. package/src/sap/ui/core/ListItem.js +1 -1
  103. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  104. package/src/sap/ui/core/Locale.js +1 -1
  105. package/src/sap/ui/core/LocaleData.js +55 -11
  106. package/src/sap/ui/core/Manifest.js +4 -5
  107. package/src/sap/ui/core/Message.js +2 -1
  108. package/src/sap/ui/core/Messaging.js +2 -2
  109. package/src/sap/ui/core/RenderManager.js +1 -1
  110. package/src/sap/ui/core/Renderer.js +1 -1
  111. package/src/sap/ui/core/ResizeHandler.js +1 -1
  112. package/src/sap/ui/core/ScrollBar.js +1 -1
  113. package/src/sap/ui/core/SeparatorItem.js +1 -1
  114. package/src/sap/ui/core/Shortcut.js +15 -9
  115. package/src/sap/ui/core/StaticArea.js +4 -1
  116. package/src/sap/ui/core/Theming.js +3 -3
  117. package/src/sap/ui/core/Title.js +1 -1
  118. package/src/sap/ui/core/TooltipBase.js +1 -1
  119. package/src/sap/ui/core/UIArea.js +54 -12
  120. package/src/sap/ui/core/UIAreaRegistry.js +150 -0
  121. package/src/sap/ui/core/UIComponent.js +3 -3
  122. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  123. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  124. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  125. package/src/sap/ui/core/XMLComposite.js +1 -1
  126. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  127. package/src/sap/ui/core/XMLTemplateProcessor.js +95 -76
  128. package/src/sap/ui/core/cldr/Unicode-Data-Files-LICENSE.txt +1 -1
  129. package/src/sap/ui/core/cldr/cy.json +12 -3
  130. package/src/sap/ui/core/cldr/en_AU.json +48 -12
  131. package/src/sap/ui/core/cldr/en_GB.json +24 -6
  132. package/src/sap/ui/core/cldr/en_HK.json +24 -6
  133. package/src/sap/ui/core/cldr/en_IE.json +24 -6
  134. package/src/sap/ui/core/cldr/en_IN.json +24 -6
  135. package/src/sap/ui/core/cldr/en_NZ.json +24 -6
  136. package/src/sap/ui/core/cldr/en_PG.json +24 -6
  137. package/src/sap/ui/core/cldr/en_SG.json +24 -6
  138. package/src/sap/ui/core/cldr/en_ZA.json +24 -6
  139. package/src/sap/ui/core/cldr/es.json +288 -72
  140. package/src/sap/ui/core/cldr/es_AR.json +288 -72
  141. package/src/sap/ui/core/cldr/es_BO.json +288 -72
  142. package/src/sap/ui/core/cldr/es_CL.json +144 -36
  143. package/src/sap/ui/core/cldr/es_CO.json +144 -36
  144. package/src/sap/ui/core/cldr/es_MX.json +288 -72
  145. package/src/sap/ui/core/cldr/fa.json +48 -12
  146. package/src/sap/ui/core/cldr/id.json +56 -14
  147. package/src/sap/ui/core/cldr/kk.json +184 -46
  148. package/src/sap/ui/core/cldr/ms.json +56 -14
  149. package/src/sap/ui/core/cldr/nb.json +36 -9
  150. package/src/sap/ui/core/cldr/nl.json +264 -66
  151. package/src/sap/ui/core/cldr/nl_BE.json +264 -66
  152. package/src/sap/ui/core/cldr/pt.json +288 -72
  153. package/src/sap/ui/core/cldr/pt_PT.json +288 -72
  154. package/src/sap/ui/core/cldr/sr.json +96 -24
  155. package/src/sap/ui/core/cldr/sr_Latn.json +72 -18
  156. package/src/sap/ui/core/date/Islamic.js +4 -4
  157. package/src/sap/ui/core/date/UI5Date.js +1 -1
  158. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  159. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  160. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  161. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  162. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  163. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  164. package/src/sap/ui/core/format/DateFormat.js +25 -13
  165. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  166. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  167. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  168. package/src/sap/ui/core/library.js +9 -3
  169. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  170. package/src/sap/ui/core/message/Message.js +7 -7
  171. package/src/sap/ui/core/message/MessageManager.js +1 -1
  172. package/src/sap/ui/core/message/MessageParser.js +1 -1
  173. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  174. package/src/sap/ui/core/message/MessageType.js +1 -1
  175. package/src/sap/ui/core/mvc/Controller.js +15 -13
  176. package/src/sap/ui/core/mvc/ControllerExtension.js +7 -5
  177. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +2 -2
  178. package/src/sap/ui/core/mvc/ControllerMetadata.js +1 -1
  179. package/src/sap/ui/core/mvc/EventHandlerResolver.js +4 -4
  180. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  181. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  182. package/src/sap/ui/core/mvc/JSView.js +1 -1
  183. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  184. package/src/sap/ui/core/mvc/View.js +21 -10
  185. package/src/sap/ui/core/mvc/XMLView.js +8 -2
  186. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  187. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  188. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  189. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  190. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  191. package/src/sap/ui/core/routing/History.js +1 -1
  192. package/src/sap/ui/core/routing/Route.js +6 -6
  193. package/src/sap/ui/core/routing/Router.js +6 -6
  194. package/src/sap/ui/core/routing/Targets.js +3 -3
  195. package/src/sap/ui/core/routing/async/Target.js +2 -2
  196. package/src/sap/ui/core/routing/async/Targets.js +1 -1
  197. package/src/sap/ui/core/rules/Misc.support.js +3 -3
  198. package/src/sap/ui/core/search/OpenSearchProvider.js +2 -1
  199. package/src/sap/ui/core/search/SearchProvider.js +2 -1
  200. package/src/sap/ui/core/service/Service.js +1 -1
  201. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  202. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  203. package/src/sap/ui/core/support/Plugin.js +1 -1
  204. package/src/sap/ui/core/support/Support.js +1 -1
  205. package/src/sap/ui/core/support/plugins/ControlTree.js +7 -5
  206. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  207. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  208. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  209. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  210. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  211. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  212. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  213. package/src/sap/ui/core/theming/Parameters.js +7 -7
  214. package/src/sap/ui/core/theming/ThemeHelper.js +2 -2
  215. package/src/sap/ui/core/theming/ThemeManager.js +2 -2
  216. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  217. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  218. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  219. package/src/sap/ui/core/tmpl/Template.js +1 -1
  220. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  221. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  222. package/src/sap/ui/core/util/Export.js +1 -1
  223. package/src/sap/ui/core/util/ExportCell.js +1 -1
  224. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  225. package/src/sap/ui/core/util/ExportRow.js +1 -1
  226. package/src/sap/ui/core/util/ExportType.js +1 -1
  227. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  228. package/src/sap/ui/core/util/File.js +1 -1
  229. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  230. package/src/sap/ui/core/util/MockServer.js +34 -3
  231. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  232. package/src/sap/ui/core/util/_LocalizationHelper.js +122 -0
  233. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  234. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  235. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  236. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  237. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  238. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  239. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  240. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  241. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  242. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  243. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  244. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  245. package/src/sap/ui/debug/ControlTree.js +1 -1
  246. package/src/sap/ui/debug/DebugEnv.js +1 -1
  247. package/src/sap/ui/debug/PropertyList.js +1 -1
  248. package/src/sap/ui/model/Binding.js +2 -2
  249. package/src/sap/ui/model/ClientListBinding.js +6 -3
  250. package/src/sap/ui/model/ClientModel.js +1 -1
  251. package/src/sap/ui/model/ClientTreeBinding.js +6 -3
  252. package/src/sap/ui/model/CompositeDataState.js +5 -5
  253. package/src/sap/ui/model/CompositeType.js +1 -1
  254. package/src/sap/ui/model/DataState.js +10 -10
  255. package/src/sap/ui/model/FilterProcessor.js +19 -16
  256. package/src/sap/ui/model/ManagedObjectBindingSupport.js +2 -2
  257. package/src/sap/ui/model/MetaModel.js +1 -1
  258. package/src/sap/ui/model/Model.js +10 -8
  259. package/src/sap/ui/model/SelectionModel.js +1 -1
  260. package/src/sap/ui/model/SimpleType.js +1 -1
  261. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  262. package/src/sap/ui/model/Type.js +1 -1
  263. package/src/sap/ui/model/analytics/odata4analytics.js +6 -6
  264. package/src/sap/ui/model/json/JSONModel.js +1 -1
  265. package/src/sap/ui/model/message/MessageModel.js +1 -1
  266. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  267. package/src/sap/ui/model/odata/ODataListBinding.js +5 -2
  268. package/src/sap/ui/model/odata/ODataMessageParser.js +3 -3
  269. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  270. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  271. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  272. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  273. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  274. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  275. package/src/sap/ui/model/odata/type/Date.js +1 -1
  276. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  277. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  278. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  279. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  280. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  281. package/src/sap/ui/model/odata/type/Double.js +1 -1
  282. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  283. package/src/sap/ui/model/odata/type/Int.js +1 -1
  284. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  285. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  286. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  287. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  288. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  289. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  290. package/src/sap/ui/model/odata/type/Single.js +1 -1
  291. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  292. package/src/sap/ui/model/odata/type/String.js +1 -1
  293. package/src/sap/ui/model/odata/type/Time.js +1 -1
  294. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  295. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  296. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  297. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  298. package/src/sap/ui/model/odata/v2/ODataListBinding.js +5 -2
  299. package/src/sap/ui/model/odata/v2/ODataModel.js +9 -58
  300. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +6 -3
  301. package/src/sap/ui/model/odata/v4/Context.js +32 -27
  302. package/src/sap/ui/model/odata/v4/ODataBinding.js +3 -0
  303. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
  304. package/src/sap/ui/model/odata/v4/ODataListBinding.js +198 -155
  305. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +2 -2
  306. package/src/sap/ui/model/odata/v4/ODataModel.js +9 -4
  307. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +9 -6
  308. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  309. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +220 -85
  310. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +33 -20
  311. package/src/sap/ui/model/odata/v4/lib/_Cache.js +70 -18
  312. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +9 -5
  313. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  314. package/src/sap/ui/model/type/Boolean.js +1 -1
  315. package/src/sap/ui/model/type/Currency.js +1 -1
  316. package/src/sap/ui/model/type/Date.js +1 -1
  317. package/src/sap/ui/model/type/DateInterval.js +1 -1
  318. package/src/sap/ui/model/type/DateTime.js +1 -1
  319. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  320. package/src/sap/ui/model/type/FileSize.js +1 -1
  321. package/src/sap/ui/model/type/Float.js +1 -1
  322. package/src/sap/ui/model/type/Integer.js +1 -1
  323. package/src/sap/ui/model/type/String.js +1 -1
  324. package/src/sap/ui/model/type/Time.js +1 -1
  325. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  326. package/src/sap/ui/model/type/Unit.js +1 -1
  327. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  328. package/src/sap/ui/performance/trace/Interaction.js +20 -16
  329. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  330. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +5 -5
  331. package/src/sap/ui/test/BranchTracking.js +4 -0
  332. package/src/sap/ui/test/actions/EnterText.js +1 -1
  333. package/src/sap/ui/test/generic/GenericTestCollection.js +1 -0
  334. package/src/sap/ui/test/generic/TestBase.js +4 -4
  335. package/src/sap/ui/test/generic/Utils.js +3 -2
  336. package/src/sap/ui/util/Storage.js +1 -1
  337. package/src/ui5loader-autoconfig.js +23 -15
  338. package/src/ui5loader.js +9 -4
  339. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/manifest.json +3 -10
  340. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/package.json +13 -0
  341. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/ui5.yaml +11 -0
  342. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Template.controller.js +3 -3
  343. package/test/sap/ui/core/demokit/sample/common/Controller.js +0 -1
  344. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/manifest.json +3 -11
  345. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/package.json +13 -0
  346. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +11 -0
  347. package/test/sap/ui/core/demokit/sample/matcher/Descendant/Component.js +1 -1
  348. package/test/sap/ui/core/demokit/sample/matcher/Descendant/manifest.json +3 -11
  349. package/test/sap/ui/core/demokit/sample/matcher/Descendant/package.json +13 -0
  350. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +11 -0
  351. package/test/sap/ui/core/demokit/sample/matcher/I18NText/manifest.json +3 -11
  352. package/test/sap/ui/core/demokit/sample/matcher/I18NText/package.json +13 -0
  353. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +11 -0
  354. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/manifest.json +3 -11
  355. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/package.json +13 -0
  356. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +11 -0
  357. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.controller.js +1 -1
  358. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +14 -1
  359. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +6 -0
  360. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/MIT.MultipleInlineCreationRowsGrid.html +5 -0
  361. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.view.xml +9 -2
  362. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +23 -0
  363. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/pages/Main.js +58 -1
  364. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +75 -30
  365. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +19 -1
  366. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +84 -28
  367. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +3 -3
  368. package/test/sap/ui/core/demokit/tutorial/databinding/01/Component.js +9 -25
  369. package/test/sap/ui/core/demokit/tutorial/databinding/01/manifest.json +20 -0
  370. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  371. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/manifest.json +5 -0
  372. package/test/sap/ui/core/demokit/tutorial/databinding/02/Component.js +9 -25
  373. package/test/sap/ui/core/demokit/tutorial/databinding/02/manifest.json +20 -0
  374. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  375. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/manifest.json +5 -0
  376. package/test/sap/ui/core/demokit/tutorial/databinding/03/Component.js +9 -25
  377. package/test/sap/ui/core/demokit/tutorial/databinding/03/manifest.json +20 -0
  378. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  379. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/manifest.json +5 -0
  380. package/test/sap/ui/core/demokit/tutorial/databinding/04/Component.js +9 -26
  381. package/test/sap/ui/core/demokit/tutorial/databinding/04/manifest.json +21 -0
  382. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  383. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/manifest.json +5 -0
  384. package/test/sap/ui/core/demokit/tutorial/databinding/05/Component.js +9 -26
  385. package/test/sap/ui/core/demokit/tutorial/databinding/05/manifest.json +21 -0
  386. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  387. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/manifest.json +5 -0
  388. package/test/sap/ui/core/demokit/tutorial/databinding/06/Component.js +9 -27
  389. package/test/sap/ui/core/demokit/tutorial/databinding/06/manifest.json +22 -0
  390. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  391. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/manifest.json +5 -0
  392. package/test/sap/ui/core/demokit/tutorial/databinding/07/Component.js +9 -28
  393. package/test/sap/ui/core/demokit/tutorial/databinding/07/manifest.json +23 -0
  394. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  395. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/manifest.json +5 -0
  396. package/test/sap/ui/core/demokit/tutorial/databinding/08/Component.js +9 -28
  397. package/test/sap/ui/core/demokit/tutorial/databinding/08/manifest.json +23 -0
  398. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  399. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/manifest.json +5 -0
  400. package/test/sap/ui/core/demokit/tutorial/databinding/09/Component.js +9 -29
  401. package/test/sap/ui/core/demokit/tutorial/databinding/09/manifest.json +24 -0
  402. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  403. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/manifest.json +5 -0
  404. package/test/sap/ui/core/demokit/tutorial/databinding/10/Component.js +9 -29
  405. package/test/sap/ui/core/demokit/tutorial/databinding/10/manifest.json +24 -0
  406. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  407. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/manifest.json +5 -0
  408. package/test/sap/ui/core/demokit/tutorial/databinding/11/Component.js +9 -29
  409. package/test/sap/ui/core/demokit/tutorial/databinding/11/manifest.json +24 -0
  410. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  411. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/manifest.json +5 -0
  412. package/test/sap/ui/core/demokit/tutorial/databinding/12/Component.js +9 -30
  413. package/test/sap/ui/core/demokit/tutorial/databinding/12/manifest.json +25 -0
  414. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  415. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/manifest.json +5 -0
  416. package/test/sap/ui/core/demokit/tutorial/databinding/13/Component.js +9 -30
  417. package/test/sap/ui/core/demokit/tutorial/databinding/13/manifest.json +25 -0
  418. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  419. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/manifest.json +5 -0
  420. package/test/sap/ui/core/demokit/tutorial/databinding/14/Component.js +9 -30
  421. package/test/sap/ui/core/demokit/tutorial/databinding/14/manifest.json +25 -0
  422. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  423. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/manifest.json +5 -0
  424. package/test/sap/ui/core/demokit/tutorial/databinding/15/Component.js +9 -32
  425. package/test/sap/ui/core/demokit/tutorial/databinding/15/manifest.json +27 -0
  426. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  427. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/manifest.json +5 -0
  428. package/test/sap/ui/core/demokit/tutorial/mockserver/01/Component.js +9 -30
  429. package/test/sap/ui/core/demokit/tutorial/mockserver/01/manifest.json +24 -0
  430. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  431. package/test/sap/ui/core/demokit/tutorial/mockserver/02/Component.js +9 -33
  432. package/test/sap/ui/core/demokit/tutorial/mockserver/02/manifest.json +27 -0
  433. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  434. package/test/sap/ui/core/demokit/tutorial/mockserver/03/Component.js +9 -33
  435. package/test/sap/ui/core/demokit/tutorial/mockserver/03/manifest.json +27 -0
  436. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  437. package/test/sap/ui/core/demokit/tutorial/mockserver/04/Component.js +9 -33
  438. package/test/sap/ui/core/demokit/tutorial/mockserver/04/manifest.json +27 -0
  439. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  440. package/test/sap/ui/core/demokit/tutorial/navigation/01/Component.js +9 -33
  441. package/test/sap/ui/core/demokit/tutorial/navigation/01/manifest.json +28 -0
  442. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  443. package/test/sap/ui/core/demokit/tutorial/navigation/02/Component.js +9 -35
  444. package/test/sap/ui/core/demokit/tutorial/navigation/02/manifest.json +30 -0
  445. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  446. package/test/sap/ui/core/demokit/tutorial/navigation/03/Component.js +9 -37
  447. package/test/sap/ui/core/demokit/tutorial/navigation/03/manifest.json +32 -0
  448. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  449. package/test/sap/ui/core/demokit/tutorial/navigation/04/Component.js +9 -38
  450. package/test/sap/ui/core/demokit/tutorial/navigation/04/manifest.json +33 -0
  451. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  452. package/test/sap/ui/core/demokit/tutorial/navigation/05/Component.js +9 -38
  453. package/test/sap/ui/core/demokit/tutorial/navigation/05/manifest.json +33 -0
  454. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  455. package/test/sap/ui/core/demokit/tutorial/navigation/06/Component.js +9 -40
  456. package/test/sap/ui/core/demokit/tutorial/navigation/06/manifest.json +35 -0
  457. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  458. package/test/sap/ui/core/demokit/tutorial/navigation/07/Component.js +9 -42
  459. package/test/sap/ui/core/demokit/tutorial/navigation/07/manifest.json +37 -0
  460. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  461. package/test/sap/ui/core/demokit/tutorial/navigation/08/Component.js +9 -45
  462. package/test/sap/ui/core/demokit/tutorial/navigation/08/manifest.json +40 -0
  463. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  464. package/test/sap/ui/core/demokit/tutorial/navigation/09/Component.js +9 -45
  465. package/test/sap/ui/core/demokit/tutorial/navigation/09/manifest.json +40 -0
  466. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  467. package/test/sap/ui/core/demokit/tutorial/navigation/10/Component.js +9 -47
  468. package/test/sap/ui/core/demokit/tutorial/navigation/10/manifest.json +42 -0
  469. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  470. package/test/sap/ui/core/demokit/tutorial/navigation/11/Component.js +9 -52
  471. package/test/sap/ui/core/demokit/tutorial/navigation/11/manifest.json +47 -0
  472. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  473. package/test/sap/ui/core/demokit/tutorial/navigation/12/Component.js +9 -52
  474. package/test/sap/ui/core/demokit/tutorial/navigation/12/manifest.json +47 -0
  475. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  476. package/test/sap/ui/core/demokit/tutorial/navigation/13/Component.js +9 -52
  477. package/test/sap/ui/core/demokit/tutorial/navigation/13/manifest.json +47 -0
  478. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  479. package/test/sap/ui/core/demokit/tutorial/navigation/14/Component.js +9 -52
  480. package/test/sap/ui/core/demokit/tutorial/navigation/14/manifest.json +47 -0
  481. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/navigation/15/Component.js +9 -52
  483. package/test/sap/ui/core/demokit/tutorial/navigation/15/manifest.json +47 -0
  484. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/navigation/16/Component.js +9 -52
  486. package/test/sap/ui/core/demokit/tutorial/navigation/16/manifest.json +47 -0
  487. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  488. package/test/sap/ui/core/demokit/tutorial/navigation/17/Component.js +9 -52
  489. package/test/sap/ui/core/demokit/tutorial/navigation/17/manifest.json +47 -0
  490. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  491. package/test/sap/ui/core/demokit/tutorial/odatav4/01/Component.js +3 -27
  492. package/test/sap/ui/core/demokit/tutorial/odatav4/01/manifest.json +28 -0
  493. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  494. package/test/sap/ui/core/demokit/tutorial/odatav4/02/Component.js +3 -27
  495. package/test/sap/ui/core/demokit/tutorial/odatav4/02/manifest.json +28 -0
  496. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  497. package/test/sap/ui/core/demokit/tutorial/odatav4/03/Component.js +3 -27
  498. package/test/sap/ui/core/demokit/tutorial/odatav4/03/manifest.json +28 -0
  499. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  500. package/test/sap/ui/core/demokit/tutorial/odatav4/04/Component.js +3 -27
  501. package/test/sap/ui/core/demokit/tutorial/odatav4/04/manifest.json +28 -0
  502. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  503. package/test/sap/ui/core/demokit/tutorial/odatav4/05/Component.js +3 -27
  504. package/test/sap/ui/core/demokit/tutorial/odatav4/05/manifest.json +28 -0
  505. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  506. package/test/sap/ui/core/demokit/tutorial/odatav4/06/Component.js +3 -27
  507. package/test/sap/ui/core/demokit/tutorial/odatav4/06/manifest.json +28 -0
  508. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  509. package/test/sap/ui/core/demokit/tutorial/odatav4/07/Component.js +3 -27
  510. package/test/sap/ui/core/demokit/tutorial/odatav4/07/manifest.json +28 -0
  511. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  512. package/test/sap/ui/core/demokit/tutorial/odatav4/08/Component.js +3 -27
  513. package/test/sap/ui/core/demokit/tutorial/odatav4/08/manifest.json +28 -0
  514. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  515. package/test/sap/ui/core/demokit/tutorial/odatav4/09/Component.js +3 -27
  516. package/test/sap/ui/core/demokit/tutorial/odatav4/09/manifest.json +28 -0
  517. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  518. package/test/sap/ui/core/demokit/tutorial/odatav4/10/Component.js +3 -27
  519. package/test/sap/ui/core/demokit/tutorial/odatav4/10/manifest.json +28 -0
  520. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  521. package/test/sap/ui/core/demokit/tutorial/odatav4/11/Component.js +3 -27
  522. package/test/sap/ui/core/demokit/tutorial/odatav4/11/manifest.json +28 -0
  523. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  524. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/Component.js +9 -29
  525. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/manifest.json +25 -0
  526. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  527. package/test/sap/ui/core/qunit/BindingParser.qunit.js +4 -4
  528. package/test/sap/ui/core/qunit/ClientModel.qunit.js +28 -28
  529. package/test/sap/ui/core/qunit/CommandExecution.qunit.js +3 -1
  530. package/test/sap/ui/core/qunit/Core.qunit.js +1 -1
  531. package/test/sap/ui/core/qunit/DataBinding.qunit.js +6 -6
  532. package/test/sap/ui/core/qunit/Declarative.qunit.js +6 -6
  533. package/test/sap/ui/core/qunit/Element_base.qunit.js +8 -7
  534. package/test/sap/ui/core/qunit/Element_base_legacyAPIs.qunit.js +48 -0
  535. package/test/sap/ui/core/qunit/Element_closestTo.qunit.js +1 -1
  536. package/test/sap/ui/core/qunit/Fragment.qunit.js +63 -13
  537. package/test/sap/ui/core/qunit/HTML.qunit.js +5 -5
  538. package/test/sap/ui/core/qunit/Lib.qunit.js +59 -0
  539. package/test/sap/ui/core/qunit/ManagedObject.qunit.js +86 -3
  540. package/test/sap/ui/core/qunit/PlaceAt.qunit.js +6 -6
  541. package/test/sap/ui/core/qunit/Shortcut.qunit.js +9 -1
  542. package/test/sap/ui/core/qunit/UIArea.qunit.js +7 -6
  543. package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +41 -0
  544. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.html +7 -5
  545. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +46 -7
  546. package/test/sap/ui/core/qunit/base/config/GlobalConfigForCascade.js +24 -21
  547. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.js +19 -0
  548. package/test/sap/ui/core/qunit/component/Component.qunit.js +35 -11
  549. package/test/sap/ui/core/qunit/component/ComponentContainer.qunit.js +1 -1
  550. package/test/sap/ui/core/qunit/component/Models.qunit.js +29 -30
  551. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +3 -3
  552. package/test/sap/ui/core/qunit/generic/ControlMemoryLeaks.qunit.js +4 -3
  553. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +6 -7
  554. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +3 -2
  555. package/test/sap/ui/core/qunit/generic/legacy/testsuite.generic.qunit.js +3 -0
  556. package/test/sap/ui/core/qunit/i18n/Islamic.qunit.js +4 -4
  557. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +65 -0
  558. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +12 -12
  559. package/test/sap/ui/core/qunit/loader/syncMode_unavoidablySync.qunit.js +54 -1
  560. package/test/sap/ui/core/qunit/messages/messagesGeneral.qunit.js +3 -1
  561. package/test/sap/ui/core/qunit/mockserver/testdata/shopping/Products.json +1 -1
  562. package/test/sap/ui/core/qunit/model/ClientListBinding.qunit.js +2 -2
  563. package/test/sap/ui/core/qunit/model/ClientTreeBinding.qunit.js +2 -2
  564. package/test/sap/ui/core/qunit/model/FilterProcessor.qunit.js +58 -16
  565. package/test/sap/ui/core/qunit/model/Model.qunit.js +43 -2
  566. package/test/sap/ui/core/qunit/mvc/AnyView.qunit.js +3 -0
  567. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +3 -2
  568. package/test/sap/ui/core/qunit/mvc/EventHandlerResolver.qunit.js +2 -2
  569. package/test/sap/ui/core/qunit/mvc/View.qunit.js +38 -35
  570. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessor.qunit.js +1 -1
  571. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync.qunit.js +1 -1
  572. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +5 -5
  573. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +1 -1
  574. package/test/sap/ui/core/qunit/mvc/extensions/ControllerMetadata.qunit.js +6 -2
  575. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions.qunit.js +12 -0
  576. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions_legacy.qunit.js +12 -0
  577. package/test/sap/ui/core/qunit/mvc/extensions/testdata/AnotherMain.controller.js +3 -1
  578. package/test/sap/ui/core/qunit/mvc/testdata/XMLViewEmbeddingTypedViews.view.xml +1 -1
  579. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +26 -7
  580. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLTemplateProcessorRequireXML_legacyAPIs.qunit.js +5 -5
  581. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +2 -2
  582. package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +36 -34
  583. package/test/sap/ui/core/qunit/odata/ODataModel_legacyAPIs.qunit.js +22 -22
  584. package/test/sap/ui/core/qunit/odata/ODataTreeBindingAdapter.qunit.js +1 -1
  585. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +16 -16
  586. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +69 -0
  587. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +2 -11
  588. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +17 -17
  589. package/test/sap/ui/core/qunit/odata/v2/ODataV2Model.qunit.js +32 -36
  590. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +43 -22
  591. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +19 -9
  592. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +318 -217
  593. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +5 -5
  594. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +2148 -124
  595. package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +43 -35
  596. package/test/sap/ui/core/qunit/odata/v4/data/metadata_special_cases.xml +20 -2
  597. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +453 -125
  598. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +70 -33
  599. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +256 -8
  600. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +10 -2
  601. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +40 -1
  602. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +11 -2
  603. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +4 -7
  604. package/test/sap/ui/core/qunit/routing/async/Router.qunit.js +102 -52
  605. package/test/sap/ui/core/qunit/routing/async/Target.qunit.js +1 -1
  606. package/test/sap/ui/core/qunit/routing/async/Targets.qunit.js +4 -5
  607. package/test/sap/ui/core/qunit/routing/async/TitleHistory.qunit.js +1 -1
  608. package/test/sap/ui/core/qunit/routing/fixture/router/component/parentRoute/Child/Component.js +1 -0
  609. package/test/sap/ui/core/qunit/routing/fixture/router/component/parentRoute/Child/manifest.json +1 -5
  610. package/test/sap/ui/core/qunit/routing/fixture/router/component/parentRoute/Parent/Component.js +1 -0
  611. package/test/sap/ui/core/qunit/routing/fixture/router/component/parentRoute/Parent/manifest.json +1 -5
  612. package/test/sap/ui/core/qunit/routing/fixture/router/component/parentRoute/ParentExtended/Component.js +15 -0
  613. package/test/sap/ui/core/qunit/routing/fixture/router/component/parentRoute/ParentExtended/manifest.json +8 -0
  614. package/test/sap/ui/core/qunit/routing/sync/Router.qunit.js +2 -2
  615. package/test/sap/ui/core/qunit/routing/sync/Targets.qunit.js +2 -3
  616. package/test/sap/ui/core/qunit/testdata/fragments/XMLTestFragmentWithXMLView.fragment.xml +5 -0
  617. package/test/sap/ui/core/qunit/testsuites/testsuite.base.configuration.qunit.js +1 -1
  618. package/test/sap/ui/core/qunit/testsuites/testsuite.control.framework.qunit.js +4 -0
  619. package/test/sap/ui/core/qunit/types/DateFormat.qunit.js +190 -0
  620. package/test/sap/ui/core/qunit/types/DateInterval.qunit.js +2 -2
  621. package/test/sap/ui/core/qunit/ui5classes/ManagedObjectRegistry.qunit.js +161 -0
  622. package/test/sap/ui/core/qunit/ui5classes/ManagedObjectRegistry_legacyAPIs.qunit.js +150 -0
  623. package/test/sap/ui/core/qunit/ui5classes/testsuite.ui5classes.qunit.js +84 -0
  624. package/test/sap/ui/core/qunit/util/ViewSerializer.qunit.js +4 -3
  625. package/test/sap/ui/core/relnotes/changes-1.120.json +307 -0
@@ -156,7 +156,7 @@ sap.ui.define([
156
156
  * @hideconstructor
157
157
  * @public
158
158
  * @since 1.37.0
159
- * @version 1.120.0
159
+ * @version 1.120.2
160
160
  */
161
161
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
162
162
  constructor : constructor
@@ -724,7 +724,7 @@ sap.ui.define([
724
724
  this.mSchema2MetadataUrl = {};
725
725
  this.mSupportedBindingModes = {OneTime : true, OneWay : true};
726
726
  this.bSupportReferences = bSupportReferences !== false; // default is true
727
- // ClientListBinding#filter calls checkFilterOperation on the model; ClientModel does
727
+ // ClientListBinding#filter calls checkFilter on the model; ClientModel does
728
728
  // not support "All" and "Any" filters
729
729
  this.mUnsupportedFilterOperators = {All : true, Any : true};
730
730
  this.sUrl = sUrl;
@@ -234,7 +234,7 @@ sap.ui.define([
234
234
  * @extends sap.ui.model.Model
235
235
  * @public
236
236
  * @since 1.37.0
237
- * @version 1.120.0
237
+ * @version 1.120.2
238
238
  */
239
239
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
240
240
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -965,9 +965,14 @@ sap.ui.define([
965
965
  * For valid values, see parameter "$$groupId".
966
966
  * @returns {sap.ui.model.odata.v4.ODataListBinding}
967
967
  * The list binding
968
- * @throws {Error}
969
- * If disallowed binding parameters are provided or an unsupported operation mode is used
970
- *
968
+ * @throws {Error} If
969
+ * <ul>
970
+ * <li> disallowed binding parameters are provided,
971
+ * <li> an unsupported operation mode is used,
972
+ * <li> the {@link sap.ui.model.Filter.NONE} filter instance is contained in
973
+ * <code>vFilters</code> together with other filters,
974
+ * <li> {@link sap.ui.model.Filter.NONE} is combined with <code>$$aggregation</code>
975
+ * </ul>
971
976
  * @public
972
977
  * @see sap.ui.model.Model#bindList
973
978
  * @since 1.37.0
@@ -911,14 +911,15 @@ sap.ui.define([
911
911
  this.mCanUseCachePromiseByChildPath[sChildPath] = oCanUseCachePromise;
912
912
  }
913
913
  this.aChildCanUseCachePromises.push(oCanUseCachePromise);
914
- this.oCachePromise = SyncPromise.all([this.oCachePromise, oCanUseCachePromise])
915
- .then(function (aResult) {
914
+ // If the cache is immutable, only mLateQueryOptions may have changed
915
+ const oPromise = bCacheImmutable
916
+ ? oCanUseCachePromise
917
+ : SyncPromise.all([this.oCachePromise, oCanUseCachePromise]).then(function (aResult) {
916
918
  var oCache = aResult[0];
917
919
 
918
920
  // Note: in operation bindings mAggregatedQueryOptions misses the options from
919
921
  // $$inheritExpandSelect
920
- // If the cache is immutable, only mLateQueryOptions may have changed
921
- if (!bCacheImmutable && oCache && !oCache.hasSentRequest() && !that.oOperation) {
922
+ if (oCache && !oCache.hasSentRequest() && !that.oOperation) {
922
923
  if (that.bSharedRequest) {
923
924
  oCache.setActive(false);
924
925
  oCache = that.createAndSetCache(that.mAggregatedQueryOptions,
@@ -931,11 +932,13 @@ sap.ui.define([
931
932
  return oCache;
932
933
  });
933
934
  // catch the error, but keep the rejected promise
934
- this.oCachePromise.catch(function (oError) {
935
+ oPromise.catch(function (oError) {
935
936
  that.oModel.reportError(that + ": Failed to enhance query options for "
936
937
  + "auto-$expand/$select for child " + sChildPath, sClassName, oError);
937
938
  });
938
-
939
+ if (!bCacheImmutable) {
940
+ this.oCachePromise = oPromise;
941
+ }
939
942
  return oCanUseCachePromise;
940
943
  };
941
944
 
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @mixes sap.ui.model.odata.v4.ODataBinding
43
43
  * @public
44
44
  * @since 1.37.0
45
- * @version 1.120.0
45
+ * @version 1.120.2
46
46
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
47
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
48
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -174,7 +174,7 @@ sap.ui.define([
174
174
  iIndex = _Cache.getElementIndex(this.aElements, sPredicate, iIndex);
175
175
  // remove in parent cache
176
176
  const iIndexInParentCache = oParentCache.removeElement(
177
- _Helper.getPrivateAnnotation(oElement, "index", 0), sPredicate);
177
+ _Helper.getPrivateAnnotation(oElement, "rank", 0), sPredicate);
178
178
  // remove the descendants in the parent cache (if any)
179
179
  const iDescendants = _Helper.getPrivateAnnotation(oElement, "descendants", 0);
180
180
  for (let i = 0; i < iDescendants; i += 1) {
@@ -187,9 +187,7 @@ sap.ui.define([
187
187
  // make parent a leaf (the direct predecessor)
188
188
  this.makeLeaf(this.aElements[iIndex - 1]);
189
189
  }
190
- if (!("@$ui5.context.isTransient" in oElement)) {
191
- this.shiftIndex(iIndex, -iOffset);
192
- }
190
+ this.shiftRank(iIndex, -iOffset);
193
191
  // remove in this cache
194
192
  this.removeElement(iIndex, sPredicate);
195
193
  // notify caller
@@ -208,8 +206,9 @@ sap.ui.define([
208
206
  * The group level cache which the given elements have been read from; omit it only for grand
209
207
  * totals or separate subtotals
210
208
  * @param {number} [iStart]
211
- * The $skip index of the first given element within the cache's collection; omit it only if
212
- * no group level cache is given or for a single created element (where it is always unknown)
209
+ * The rank (aka. $skip index) of the first given element within the cache's collection; omit
210
+ * it only if no group level cache is given or for a single created element (where it may be
211
+ * unknown)
213
212
  * @throws {Error}
214
213
  * In case an unexpected element or placeholder would be overwritten, if the given offset is
215
214
  * negative, if a resulting array index is out of bounds, in case of a duplicate predicate, or
@@ -268,9 +267,9 @@ sap.ui.define([
268
267
  }
269
268
 
270
269
  if (sTransientPredicate) { // created
271
- iStart -= 1; // "shift" index of non-created elements behind this one
270
+ iStart -= 1; // "shift" rank of non-created elements behind this one
272
271
  } else {
273
- _Helper.setPrivateAnnotation(oElement, "index", iStart + i);
272
+ _Helper.setPrivateAnnotation(oElement, "rank", iStart + i);
274
273
  }
275
274
  }
276
275
 
@@ -309,7 +308,7 @@ sap.ui.define([
309
308
  } else if (iCandidateLevel < iLevel) {
310
309
  if (!bInitialPlaceholderFound || this.isAncestorOf(iCandidateIndex, iIndex)) {
311
310
  const iCount
312
- = _Helper.getPrivateAnnotation(oCandidate, "descendants") + iOffset;
311
+ = _Helper.getPrivateAnnotation(oCandidate, "descendants", 0) + iOffset;
313
312
  _Helper.setPrivateAnnotation(oCandidate, "descendants", iCount);
314
313
  if (iCount === 0) {
315
314
  this.makeLeaf(oCandidate);
@@ -395,7 +394,7 @@ sap.ui.define([
395
394
  _Helper.getPrivateAnnotation(aElements[i], "transientPredicate")];
396
395
  }
397
396
  const aSpliced = aElements.splice(iIndex + 1, iCount);
398
- aSpliced.$index = _Helper.getPrivateAnnotation(oGroupNode, "index");
397
+ aSpliced.$rank = _Helper.getPrivateAnnotation(oGroupNode, "rank");
399
398
  _Helper.setPrivateAnnotation(oGroupNode, "spliced", aSpliced);
400
399
  aElements.$count -= iCount;
401
400
 
@@ -420,8 +419,8 @@ sap.ui.define([
420
419
  let iGroupNodeLevel = oGroupNode["@$ui5.node.level"];
421
420
  let iDescendants = _Helper.getPrivateAnnotation(oGroupNode, "descendants");
422
421
  if (iDescendants) { // => this.oAggregation.expandTo > 1
423
- // Note: "descendants" refers to LimitedDescendantCountProperty and counts descendants
424
- // within "top pyramid" only!
422
+ // Note: "descendants" refers to LimitedDescendantCount and counts descendants within
423
+ // "top pyramid" only!
425
424
  iGroupNodeLevel = this.oAggregation.expandTo;
426
425
  }
427
426
  const aElements = this.aElements;
@@ -490,6 +489,10 @@ sap.ui.define([
490
489
  if (oParentNode?.["@$ui5.node.isExpanded"] === false) {
491
490
  throw new Error("Unsupported collapsed parent: " + sParentPath);
492
491
  }
492
+ if (oParentNode && oParentNode["@$ui5.node.isExpanded"] === undefined) {
493
+ _Helper.updateAll(this.mChangeListeners, sParentPredicate, oParentNode,
494
+ {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
495
+ }
493
496
 
494
497
  const iLevel = oParentNode
495
498
  ? oParentNode["@$ui5.node.level"] + 1
@@ -501,8 +504,6 @@ sap.ui.define([
501
504
  oCache = this.createGroupLevelCache(oParentNode);
502
505
  oCache.setEmpty();
503
506
  _Helper.setPrivateAnnotation(oParentNode, "cache", oCache);
504
- _Helper.updateAll(this.mChangeListeners, sParentPredicate, oParentNode,
505
- {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
506
507
  }
507
508
 
508
509
  const iIndex = aElements.indexOf(oParentNode) + 1; // 0 w/o oParentNode :-)
@@ -512,8 +513,7 @@ sap.ui.define([
512
513
  this.adjustDescendantCount(oEntityData, iIndex, -1);
513
514
  }
514
515
  aElements.$count -= 1;
515
- delete aElements.$byPredicate[
516
- _Helper.getPrivateAnnotation(oEntityData, "transientPredicate")];
516
+ delete aElements.$byPredicate[sTransientPredicate];
517
517
  aElements.splice(iIndex, 1);
518
518
  });
519
519
 
@@ -525,18 +525,30 @@ sap.ui.define([
525
525
  oEntityData["@$ui5.node.level"] = iLevel; // do not send via POST!
526
526
 
527
527
  aElements.splice(iIndex, 0, null); // create a gap
528
- this.addElements(oEntityData, iIndex, oCache); // $skip index is undefined!
528
+ this.addElements(oEntityData, iIndex, oCache); // rank is undefined!
529
529
  aElements.$count += 1;
530
530
  if (oCache === this.oFirstLevel) {
531
531
  this.adjustDescendantCount(oEntityData, iIndex, +1);
532
532
  }
533
533
 
534
- return oPromise.then(function () {
534
+ return oPromise.then(async () => {
535
535
  aElements.$byPredicate[_Helper.getPrivateAnnotation(oEntityData, "predicate")]
536
536
  = oEntityData;
537
537
  // Note: #calculateKeyPredicateRH doesn't know better :-(
538
538
  oEntityData["@$ui5.node.level"] = iLevel;
539
539
 
540
+ if (this.oAggregation.expandTo >= 999) { // "expand all"
541
+ const iRank = await this.requestRank(oEntityData, oGroupLock.getUnlockedCopy());
542
+
543
+ this.oFirstLevel.removeElement(0, sTransientPredicate);
544
+ _Helper.deletePrivateAnnotation(oEntityData, "transientPredicate");
545
+ this.oFirstLevel.restoreElement(iRank, oEntityData);
546
+
547
+ delete this.aElements.$byPredicate[sTransientPredicate];
548
+ _Helper.setPrivateAnnotation(oEntityData, "rank", iRank);
549
+ this.shiftRank(iIndex, +1);
550
+ }
551
+
540
552
  return oEntityData;
541
553
  });
542
554
  };
@@ -639,15 +651,19 @@ sap.ui.define([
639
651
  iCount = aSpliced.length;
640
652
  this.aElements.$count = aOldElements.$count + iCount;
641
653
  const iLevelDiff = oGroupNode["@$ui5.node.level"] + 1 - aSpliced[0]["@$ui5.node.level"];
642
- const iIndexDiff = _Helper.getPrivateAnnotation(oGroupNode, "index") - aSpliced.$index;
654
+ const iRankDiff = _Helper.getPrivateAnnotation(oGroupNode, "rank") - aSpliced.$rank;
643
655
  aSpliced.forEach(function (oElement) {
644
656
  var sPredicate = _Helper.getPrivateAnnotation(oElement, "predicate");
645
657
 
646
- oElement["@$ui5.node.level"] += iLevelDiff;
658
+ if (oElement["@$ui5.node.level"]) {
659
+ // Note: level 0 is used for initial placeholders of 1st level cache in case
660
+ // expandTo > 1
661
+ oElement["@$ui5.node.level"] += iLevelDiff;
662
+ }
647
663
  if (_Helper.getPrivateAnnotation(oElement, "parent") === that.oFirstLevel) {
648
- const iIndex = _Helper.getPrivateAnnotation(oElement, "index");
649
- if (iIndex !== undefined) {
650
- _Helper.setPrivateAnnotation(oElement, "index", iIndex + iIndexDiff);
664
+ const iRank = _Helper.getPrivateAnnotation(oElement, "rank");
665
+ if (iRank !== undefined) {
666
+ _Helper.setPrivateAnnotation(oElement, "rank", iRank + iRankDiff);
651
667
  }
652
668
  }
653
669
  if (!_Helper.hasPrivateAnnotation(oElement, "placeholder")) {
@@ -748,6 +764,45 @@ sap.ui.define([
748
764
  });
749
765
  };
750
766
 
767
+ /**
768
+ * Returns a promise to be resolved with an OData object for the requested parent node.
769
+ *
770
+ * @param {number} iIndex
771
+ * The index of the child node
772
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
773
+ * A lock for the group to associate the requests with
774
+ * @returns {sap.ui.base.SyncPromise}
775
+ * A promise to be resolved with the requested data of the parent.
776
+ *
777
+ * @public
778
+ */
779
+ _AggregationCache.prototype.fetchParent = function (iIndex, oGroupLock) {
780
+ const sFilter = _Helper.getKeyFilter(this.aElements[iIndex], this.oAggregation.$metaPath,
781
+ this.getTypes());
782
+ const mQueryOptions = Object.assign({}, this.mQueryOptions);
783
+
784
+ mQueryOptions.$apply = "ancestors($root" + this.oAggregation.$path
785
+ + "," + this.oAggregation.hierarchyQualifier + "," + this.oAggregation.$NodeProperty
786
+ + ",filter(" + sFilter + "),1)";
787
+
788
+ const sQueryString = this.sResourcePath
789
+ + this.oRequestor.buildQueryString(/*sMetaPath*/null, mQueryOptions);
790
+
791
+ return SyncPromise.all([
792
+ this.oRequestor.request("GET", sQueryString, oGroupLock),
793
+ this.fetchTypes()
794
+ ]).then((aResults) => {
795
+ const oParent = aResults[0].value[0];
796
+ this.visitResponse(oParent, aResults[1],
797
+ _Helper.getMetaPath(_Helper.buildPath(this.sMetaPath, "")));
798
+
799
+ this.aElements.$byPredicate[_Helper.getPrivateAnnotation(oParent, "predicate")]
800
+ = oParent;
801
+
802
+ return oParent;
803
+ });
804
+ };
805
+
751
806
  /**
752
807
  * Returns a promise to be resolved with an OData object for the requested data.
753
808
  *
@@ -865,16 +920,13 @@ sap.ui.define([
865
920
  };
866
921
 
867
922
  /**
868
- * Returns the index of a parent node
923
+ * Returns the index of a parent node.
869
924
  *
870
925
  * @param {number} iIndex
871
926
  * The index of the child node
872
- * @returns {number|null}
927
+ * @returns {number|undefined}
873
928
  * The parent node's index, or -1 if the given node is a root node and thus has
874
- * no parent
875
- * @throws {Error}
876
- * If the index of a parent cannot be found
877
- *
929
+ * no parent, or <code>undefined</code> if the parent node hasn't been read yet
878
930
  *
879
931
  * @public
880
932
  */
@@ -885,13 +937,22 @@ sap.ui.define([
885
937
  return -1; // a root has no parent
886
938
  }
887
939
 
888
- for (; iIndex >= 0; iIndex -= 1) {
889
- if (this.aElements[iIndex]["@$ui5.node.level"] < iLevel) {
890
- return iIndex;
940
+ let bInitialPlaceholderFound = false;
941
+ for (let i = iIndex; i >= 0; i -= 1) {
942
+ const oCandidate = this.aElements[i];
943
+ const iCandidateLevel = oCandidate["@$ui5.node.level"];
944
+
945
+ if (iCandidateLevel === 0) {
946
+ bInitialPlaceholderFound = true;
947
+ } else if (iCandidateLevel < iLevel) {
948
+ if (iCandidateLevel === iLevel - 1
949
+ && (!bInitialPlaceholderFound || this.isAncestorOf(i, iIndex))) {
950
+ return i;
951
+ }
952
+ break; // missed the parent
891
953
  }
892
954
  }
893
-
894
- throw new Error("Unexpected error");
955
+ // return undefined;
895
956
  };
896
957
 
897
958
  /**
@@ -996,13 +1057,13 @@ sap.ui.define([
996
1057
  /**
997
1058
  * Moves the (child) node with the given path to the parent node with the given path by sending
998
1059
  * a PATCH request for "<parent navigation>@odata.bind". The (child) node may be a leaf or a
999
- * collapsed node, but not expanded!
1060
+ * collapsed node, but not expanded! Omitting a new parent turns the child into a root.
1000
1061
  *
1001
1062
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
1002
1063
  * A lock for the group to associate the requests with
1003
1064
  * @param {string} sChildPath
1004
1065
  * The (child) node's path relative to the cache
1005
- * @param {string} sParentPath
1066
+ * @param {string} [sParentPath=null]
1006
1067
  * The parent node's path relative to the cache
1007
1068
  * @returns {sap.ui.base.SyncPromise<number>}
1008
1069
  * A promise which is resolved with the number of child nodes added (normally one, but maybe
@@ -1011,20 +1072,24 @@ sap.ui.define([
1011
1072
  *
1012
1073
  * @public
1013
1074
  */
1014
- _AggregationCache.prototype.move = function (oGroupLock, sChildPath, sParentPath) {
1075
+ _AggregationCache.prototype.move = function (oGroupLock, sChildPath, sParentPath = null) {
1015
1076
  const sTransientPredicate = "($uid=" + _Helper.uid() + ")";
1016
1077
 
1017
1078
  const sChildPredicate = sChildPath.slice(sChildPath.indexOf("("));
1018
1079
  const oChildNode = this.aElements.$byPredicate[sChildPredicate];
1019
- const sParentPredicate = sParentPath.slice(sParentPath.indexOf("("));
1080
+ const sParentPredicate = sParentPath?.slice(sParentPath.indexOf("("));
1020
1081
  const oParentNode = this.aElements.$byPredicate[sParentPredicate];
1021
1082
 
1022
1083
  let oReadPromise;
1023
- let oCache = _Helper.getPrivateAnnotation(oParentNode, "cache");
1024
- if (!oCache && oParentNode["@$ui5.node.isExpanded"] === false) {
1084
+ let oCache = oParentNode
1085
+ ? _Helper.getPrivateAnnotation(oParentNode, "cache")
1086
+ : this.oFirstLevel;
1087
+ if (this.oAggregation.expandTo > 1) { // "expand all": GET LimitedRank
1088
+ oReadPromise = this.requestRank(oChildNode, oGroupLock.getUnlockedCopy());
1089
+ } else if (!oCache && oParentNode["@$ui5.node.isExpanded"] === false) {
1025
1090
  oCache = this.createGroupLevelCache(oParentNode);
1026
1091
  // @see #getExclusiveFilter
1027
- oCache.restoreElement(undefined, 0, oChildNode, "", undefined, sTransientPredicate);
1092
+ oCache.restoreElement(0, oChildNode, undefined, sTransientPredicate);
1028
1093
  // prefetch from the group level cache
1029
1094
  oReadPromise = oCache.read(0, this.iReadLength, 0, oGroupLock.getUnlockedCopy());
1030
1095
  }
@@ -1036,17 +1101,48 @@ sap.ui.define([
1036
1101
  }, {[this.oAggregation.$ParentNavigationProperty + "@odata.bind"] : sParentPath},
1037
1102
  /*fnSubmit*/null, function fnCancel() { /*nothing to do*/ }),
1038
1103
  oReadPromise
1039
- ]).then(([oPatchResult, _oReadResult]) => {
1104
+ ]).then(([oPatchResult, iPreorderRank]) => {
1105
+ const updateChildNode = () => {
1106
+ // update the cache with the PATCH response (Note: "@odata.etag" is optional!)
1107
+ _Helper.updateExisting(this.mChangeListeners, sChildPredicate, oChildNode, {
1108
+ "@odata.etag" : oPatchResult["@odata.etag"],
1109
+ "@$ui5.node.level" : oParentNode ? oParentNode["@$ui5.node.level"] + 1 : 1
1110
+ });
1111
+ };
1040
1112
  const iOldIndex = this.aElements.indexOf(oChildNode);
1041
- // update the cache with the PATCH response (Note: "@odata.etag" is optional!)
1042
- _Helper.updateExisting(this.mChangeListeners, sChildPredicate, oChildNode, {
1043
- "@odata.etag" : oPatchResult["@odata.etag"],
1044
- "@$ui5.node.level" : oParentNode["@$ui5.node.level"] + 1
1045
- });
1113
+ let iResult = 1;
1114
+
1115
+ if (this.oAggregation.expandTo > 1) {
1116
+ const iOffset = _Helper.getPrivateAnnotation(oChildNode, "descendants", 0) + 1;
1117
+ this.adjustDescendantCount(oChildNode, iOldIndex, -iOffset);
1118
+ this.shiftRank(iOldIndex, -iOffset);
1119
+ this.aElements.splice(iOldIndex, 1);
1120
+ this.oFirstLevel.move(_Helper.getPrivateAnnotation(oChildNode, "rank"),
1121
+ iPreorderRank, iOffset);
1122
+ updateChildNode();
1123
+ _Helper.setPrivateAnnotation(oChildNode, "rank", iPreorderRank);
1124
+ switch (oParentNode ? oParentNode["@$ui5.node.isExpanded"] : true) {
1125
+ case false:
1126
+ iResult = this.expand(_GroupLock.$cached, sParentPredicate).unwrap() + 1;
1127
+ // fall through
1128
+ case true:
1129
+ break;
1130
+
1131
+ default:
1132
+ _Helper.updateAll(this.mChangeListeners, sParentPredicate, oParentNode,
1133
+ {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
1134
+ }
1135
+ const iNewIndex = this.aElements.indexOf(oParentNode) + 1; // 0 w/o oParentNode :-)
1136
+ this.aElements.splice(iNewIndex, 0, oChildNode);
1137
+ this.shiftRank(iNewIndex, +iOffset);
1138
+ this.adjustDescendantCount(oChildNode, iNewIndex, +iOffset);
1139
+
1140
+ return iResult;
1141
+ }
1046
1142
 
1047
1143
  // remove original element from its cache's collection
1048
1144
  const oOldParentCache = _Helper.getPrivateAnnotation(oChildNode, "parent");
1049
- oOldParentCache.removeElement(_Helper.getPrivateAnnotation(oChildNode, "index", 0),
1145
+ oOldParentCache.removeElement(_Helper.getPrivateAnnotation(oChildNode, "rank", 0),
1050
1146
  sChildPredicate);
1051
1147
  if (oOldParentCache.getValue("$count") === 0) { // last child has gone
1052
1148
  const oOldParent = this.aElements[iOldIndex - 1];
@@ -1056,18 +1152,19 @@ sap.ui.define([
1056
1152
  }
1057
1153
 
1058
1154
  // once oChildNode has moved, it should look 'created' because of its new position
1059
- _Helper.deletePrivateAnnotation(oChildNode, "index");
1060
1155
  if (!_Helper.hasPrivateAnnotation(oChildNode, "transientPredicate")) {
1061
1156
  _Helper.setPrivateAnnotation(oChildNode, "transientPredicate",
1062
1157
  sTransientPredicate);
1063
1158
  this.aElements.$byPredicate[sTransientPredicate] = oChildNode;
1064
1159
  _Helper.updateAll(this.mChangeListeners, sChildPredicate, oChildNode,
1065
1160
  {"@$ui5.context.isTransient" : false});
1066
- this.shiftIndex(iOldIndex, -1); // only shift indices after non-created ones
1161
+ this.shiftRank(iOldIndex, -1); // only shift indices after non-created ones
1067
1162
  }
1163
+ _Helper.deletePrivateAnnotation(oChildNode, "rank");
1068
1164
  this.aElements.splice(iOldIndex, 1);
1069
1165
 
1070
- let iResult = 1;
1166
+ updateChildNode();
1167
+
1071
1168
  if (oReadPromise) {
1072
1169
  _Helper.setPrivateAnnotation(oChildNode, "parent", oCache);
1073
1170
  _Helper.setPrivateAnnotation(oParentNode, "cache", oCache);
@@ -1075,7 +1172,7 @@ sap.ui.define([
1075
1172
  // Note: oChildNode already belongs to oCache!
1076
1173
  this.aElements.$count -= 1; // #expand adjusts $count incl. oChildNode!
1077
1174
  iResult = this.expand(_GroupLock.$cached, sParentPredicate).unwrap();
1078
- // Note: "index" created OK by #expand for oChildNode's siblings
1175
+ // Note: "rank" created OK by #expand for oChildNode's siblings
1079
1176
  } else {
1080
1177
  if (!oCache) {
1081
1178
  oCache = this.createGroupLevelCache(oParentNode);
@@ -1085,10 +1182,11 @@ sap.ui.define([
1085
1182
  {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
1086
1183
  }
1087
1184
  _Helper.setPrivateAnnotation(oChildNode, "parent", oCache);
1088
- oCache.restoreElement(undefined, 0, oChildNode, "");
1185
+ oCache.restoreElement(0, oChildNode);
1089
1186
 
1090
- const iNewIndex = this.aElements.indexOf(oParentNode) + 1;
1091
- const aSpliced = _Helper.getPrivateAnnotation(oParentNode, "spliced");
1187
+ const iNewIndex = this.aElements.indexOf(oParentNode) + 1; // 0 w/o oParentNode :-)
1188
+ const aSpliced
1189
+ = oParentNode && _Helper.getPrivateAnnotation(oParentNode, "spliced");
1092
1190
  if (aSpliced) {
1093
1191
  // Note: "@$ui5.node.level" will be adjusted by #expand for aSpliced!
1094
1192
  oChildNode["@$ui5.node.level"] = aSpliced[0]["@$ui5.node.level"];
@@ -1201,10 +1299,10 @@ sap.ui.define([
1201
1299
  oGapParent = oCurrentParent;
1202
1300
  }
1203
1301
  } else if (iGapStart !== undefined
1204
- && _Helper.getPrivateAnnotation(oElement, "index")
1205
- !== _Helper.getPrivateAnnotation(this.aElements[i - 1], "index") + 1) {
1206
- // Note: w/ side effect, indices might not be consecutive => split gap
1207
- // Note: an undefined "index" causes a split gap, which is important!
1302
+ && _Helper.getPrivateAnnotation(oElement, "rank")
1303
+ !== _Helper.getPrivateAnnotation(this.aElements[i - 1], "rank") + 1) {
1304
+ // Note: w/ side effect, ranks might not be consecutive => split gap
1305
+ // Note: an undefined "rank" causes a split gap, which is important!
1208
1306
  readGap(iGapStart, i);
1209
1307
  iGapStart = i;
1210
1308
  }
@@ -1372,8 +1470,8 @@ sap.ui.define([
1372
1470
  _AggregationCache.prototype.readGap = function (oCache, iStart, iEnd, oGroupLock,
1373
1471
  fnDataRequested) {
1374
1472
  const oStartElement = this.aElements[iStart];
1375
- const iIndex = _Helper.getPrivateAnnotation(oStartElement, "index");
1376
- if (iIndex === undefined) {
1473
+ const iRank = _Helper.getPrivateAnnotation(oStartElement, "rank");
1474
+ if (iRank === undefined) {
1377
1475
  if (iEnd - iStart !== 1) {
1378
1476
  throw new Error("Not just a single created persisted");
1379
1477
  }
@@ -1395,7 +1493,7 @@ sap.ui.define([
1395
1493
  oCache.setQueryOptions(mQueryOptions, true);
1396
1494
  }
1397
1495
 
1398
- const oPromise = oCache.read(iIndex, iEnd - iStart, 0, oGroupLock, fnDataRequested, true)
1496
+ const oPromise = oCache.read(iRank, iEnd - iStart, 0, oGroupLock, fnDataRequested, true)
1399
1497
  .then((oResult) => {
1400
1498
  // Note: this code must be idempotent, it might well run twice!
1401
1499
  var bGapHasMoved = false,
@@ -1417,7 +1515,7 @@ sap.ui.define([
1417
1515
  }
1418
1516
  }
1419
1517
 
1420
- this.addElements(oResult.value, iStart, oCache, iIndex);
1518
+ this.addElements(oResult.value, iStart, oCache, iRank);
1421
1519
 
1422
1520
  if (bGapHasMoved) {
1423
1521
  oError = new Error("Collapse or expand before read has finished");
@@ -1447,6 +1545,37 @@ sap.ui.define([
1447
1545
  return this.oFirstLevel.refreshKeptElements.call(this, oGroupLock, fnOnRemove, true);
1448
1546
  };
1449
1547
 
1548
+ /**
1549
+ * Requests the (limited preorder) rank of the given element which must belong to
1550
+ * <code>this.oFirstLevel</code>.
1551
+ *
1552
+ * @param {object} oElement - The element
1553
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
1554
+ * A lock for the group ID to be used for the GET request
1555
+ * @returns {Promise<number>}
1556
+ * A promise which is resolved with the (limited preorder) rank of the given element, or
1557
+ * rejected in case of an error
1558
+ *
1559
+ * @private
1560
+ */
1561
+ _AggregationCache.prototype.requestRank = async function (oElement, oGroupLock) {
1562
+ const sMetaPath = this.oAggregation.$metaPath;
1563
+ const {$apply, $orderby} = this.oFirstLevel.getQueryOptions();
1564
+ const mQueryOptions = {
1565
+ $apply,
1566
+ $filter : _Helper.getKeyFilter(oElement, sMetaPath, this.getTypes()),
1567
+ $select : this.oAggregation.$LimitedRank
1568
+ };
1569
+ if ($orderby) {
1570
+ mQueryOptions.$orderby = $orderby;
1571
+ }
1572
+ const sResourcePath = this.sResourcePath
1573
+ + this.oRequestor.buildQueryString(sMetaPath, mQueryOptions, false, true);
1574
+ const oResult = await this.oRequestor.request("GET", sResourcePath, oGroupLock);
1575
+
1576
+ return parseInt(_Helper.drillDown(oResult.value[0], this.oAggregation.$LimitedRank));
1577
+ };
1578
+
1450
1579
  /**
1451
1580
  * @override
1452
1581
  * @see sap.ui.model.odata.v4.lib._CollectionCache#reset
@@ -1512,27 +1641,33 @@ sap.ui.define([
1512
1641
  };
1513
1642
 
1514
1643
  /**
1515
- * Shifts the $skip "index" of all siblings (nodes or placeholders) after the node at the given
1516
- * index by the given offset, except for created elements (where it is always
1517
- * <code>undefined</code>).
1644
+ * Shifts the rank (aka. $skip index) of all siblings (nodes or placeholders) after the node at
1645
+ * the given array index by the given offset, except for elements where it is
1646
+ * <code>undefined</code> or lower than the node's own rank. If the node at the given index
1647
+ * itself has an <code>undefined</code> rank, nothing is shifted. Note that inside
1648
+ * <code>this.oFirstLevel</code> not only siblings are affected.
1518
1649
  *
1519
1650
  * @param {number} iIndex
1520
1651
  * Index in <code>this.aElements</code> of a node
1521
1652
  * @param {number} iOffset
1522
- * Offset to add to "index"
1653
+ * Offset to add to rank
1523
1654
  *
1524
1655
  * @private
1525
1656
  */
1526
- _AggregationCache.prototype.shiftIndex = function (iIndex, iOffset) {
1527
- const aElements = this.aElements;
1528
- const oNode = aElements[iIndex];
1657
+ _AggregationCache.prototype.shiftRank = function (iIndex, iOffset) {
1658
+ const oNode = this.aElements[iIndex];
1659
+ const iMinRank = _Helper.getPrivateAnnotation(oNode, "rank");
1660
+ if (iMinRank === undefined) {
1661
+ return;
1662
+ }
1663
+
1529
1664
  const oCache = _Helper.getPrivateAnnotation(oNode, "parent");
1530
- for (let i = iIndex + 1; i < aElements.length; i += 1) {
1531
- const oSibling = aElements[i];
1665
+ for (let i = iIndex + 1; i < this.aElements.length; i += 1) {
1666
+ const oSibling = this.aElements[i];
1532
1667
  if (_Helper.getPrivateAnnotation(oSibling, "parent") === oCache) {
1533
- const iIndex = _Helper.getPrivateAnnotation(oSibling, "index");
1534
- if (iIndex !== undefined) {
1535
- _Helper.setPrivateAnnotation(oSibling, "index", iIndex + iOffset);
1668
+ const iRank = _Helper.getPrivateAnnotation(oSibling, "rank");
1669
+ if (iRank >= iMinRank) { // Note: undefined >= ... is false
1670
+ _Helper.setPrivateAnnotation(oSibling, "rank", iRank + iOffset);
1536
1671
  }
1537
1672
  }
1538
1673
  if (oCache !== this.oFirstLevel
@@ -1576,9 +1711,9 @@ sap.ui.define([
1576
1711
  _AggregationHelper.markSplicedStale(oElement);
1577
1712
  delete this.aElements.$byPredicate[sPredicate];
1578
1713
  // drop original element from its cache's collection
1579
- const iIndex = _Helper.getPrivateAnnotation(oElement, "index");
1580
- if (iIndex !== undefined) {
1581
- _Helper.getPrivateAnnotation(oElement, "parent").drop(iIndex, sPredicate, true);
1714
+ const iRank = _Helper.getPrivateAnnotation(oElement, "rank");
1715
+ if (iRank !== undefined) {
1716
+ _Helper.getPrivateAnnotation(oElement, "parent").drop(iRank, sPredicate, true);
1582
1717
  } // else: special handling inside #readGap
1583
1718
  };
1584
1719
 
@@ -1688,7 +1823,7 @@ sap.ui.define([
1688
1823
  return sPredicate;
1689
1824
  }
1690
1825
 
1691
- switch (_Helper.drillDown(oElement, oAggregation.$DrillStateProperty)) {
1826
+ switch (_Helper.drillDown(oElement, oAggregation.$DrillState)) {
1692
1827
  case "expanded":
1693
1828
  bIsExpanded = true;
1694
1829
  break;
@@ -1700,24 +1835,24 @@ sap.ui.define([
1700
1835
  default: // "leaf"
1701
1836
  // bIsExpanded = undefined;
1702
1837
  }
1703
- _Helper.deleteProperty(oElement, oAggregation.$DrillStateProperty);
1838
+ _Helper.deleteProperty(oElement, oAggregation.$DrillState);
1704
1839
  if (oGroupNode) {
1705
1840
  iLevel = oGroupNode["@$ui5.node.level"] + 1;
1706
1841
  } else {
1707
- sDistanceFromRoot = _Helper.drillDown(oElement, oAggregation.$DistanceFromRootProperty);
1842
+ sDistanceFromRoot = _Helper.drillDown(oElement, oAggregation.$DistanceFromRoot);
1708
1843
  if (sDistanceFromRoot) { // Edm.Int64
1709
- _Helper.deleteProperty(oElement, oAggregation.$DistanceFromRootProperty);
1844
+ _Helper.deleteProperty(oElement, oAggregation.$DistanceFromRoot);
1710
1845
  iLevel = parseInt(sDistanceFromRoot) + 1;
1711
1846
  }
1712
1847
  }
1713
1848
  // set the node values
1714
1849
  _AggregationHelper.setAnnotations(oElement, bIsExpanded, /*bIsTotal*/undefined, iLevel);
1715
1850
 
1716
- if (oAggregation.$LimitedDescendantCountProperty) {
1851
+ if (oAggregation.$LimitedDescendantCount) {
1717
1852
  sLimitedDescendantCount
1718
- = _Helper.drillDown(oElement, oAggregation.$LimitedDescendantCountProperty);
1853
+ = _Helper.drillDown(oElement, oAggregation.$LimitedDescendantCount);
1719
1854
  if (sLimitedDescendantCount) {
1720
- _Helper.deleteProperty(oElement, oAggregation.$LimitedDescendantCountProperty);
1855
+ _Helper.deleteProperty(oElement, oAggregation.$LimitedDescendantCount);
1721
1856
  if (sLimitedDescendantCount !== "0") { // Edm.Int64
1722
1857
  _Helper.setPrivateAnnotation(oElement, "descendants",
1723
1858
  parseInt(sLimitedDescendantCount));