@openui5/sap.ui.core 1.118.0 → 1.119.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. package/.eslintrc.json +9 -0
  2. package/THIRDPARTY.txt +2 -2
  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 +1 -1
  10. package/src/sap/base/Eventing.js +1 -1
  11. package/src/sap/base/config.js +1 -1
  12. package/src/sap/base/i18n/LanguageTag.js +1 -1
  13. package/src/sap/base/i18n/Localization.js +16 -1
  14. package/src/sap/base/i18n/ResourceBundle.js +5 -0
  15. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  16. package/src/sap/base/util/UriParameters.js +26 -19
  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 +3 -3
  59. package/src/sap/ui/Global.js +4 -4
  60. package/src/sap/ui/base/BindingInfo.js +25 -3
  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 +2 -2
  65. package/src/sap/ui/base/ManagedObjectMetadata.js +4 -3
  66. package/src/sap/ui/base/Metadata.js +3 -3
  67. package/src/sap/ui/base/Object.js +1 -1
  68. package/src/sap/ui/base/ObjectPool.js +1 -1
  69. package/src/sap/ui/core/.library +1 -1
  70. package/src/sap/ui/core/AccessKeysEnablement.js +2 -2
  71. package/src/sap/ui/core/BusyIndicator.js +1 -1
  72. package/src/sap/ui/core/Component.js +68 -51
  73. package/src/sap/ui/core/ComponentContainer.js +1 -1
  74. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  75. package/src/sap/ui/core/ComponentSupport.js +1 -1
  76. package/src/sap/ui/core/Configuration.js +15 -167
  77. package/src/sap/ui/core/Control.js +2 -2
  78. package/src/sap/ui/core/Core.js +162 -93
  79. package/src/sap/ui/core/CustomData.js +1 -1
  80. package/src/sap/ui/core/CustomStyleClassSupport.js +3 -3
  81. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  82. package/src/sap/ui/core/Element.js +40 -4
  83. package/src/sap/ui/core/ElementMetadata.js +1 -1
  84. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  85. package/src/sap/ui/core/EventBus.js +19 -2
  86. package/src/sap/ui/core/FocusHandler.js +3 -24
  87. package/src/sap/ui/core/Fragment.js +2 -2
  88. package/src/sap/ui/core/HTML.js +1 -1
  89. package/src/sap/ui/core/History.js +1 -1
  90. package/src/sap/ui/core/Icon.js +1 -1
  91. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  92. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  93. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  94. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  95. package/src/sap/ui/core/InvisibleText.js +2 -2
  96. package/src/sap/ui/core/Item.js +1 -1
  97. package/src/sap/ui/core/LabelEnablement.js +11 -4
  98. package/src/sap/ui/core/LayoutData.js +1 -1
  99. package/src/sap/ui/core/Lib.js +42 -42
  100. package/src/sap/ui/core/ListItem.js +1 -1
  101. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  102. package/src/sap/ui/core/Locale.js +1 -1
  103. package/src/sap/ui/core/LocaleData.js +1 -1
  104. package/src/sap/ui/core/Manifest.js +1 -1
  105. package/src/sap/ui/core/Message.js +4 -4
  106. package/src/sap/ui/core/Messaging.js +4 -5
  107. package/src/sap/ui/core/Popup.js +3 -3
  108. package/src/sap/ui/core/RenderManager.js +15 -10
  109. package/src/sap/ui/core/Renderer.js +1 -1
  110. package/src/sap/ui/core/Rendering.js +1 -0
  111. package/src/sap/ui/core/ResizeHandler.js +15 -20
  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/ShortcutHintsMixin.js +5 -5
  115. package/src/sap/ui/core/StashedControlSupport.js +4 -4
  116. package/src/sap/ui/core/StaticArea.js +66 -74
  117. package/src/sap/ui/core/Theming.js +71 -8
  118. package/src/sap/ui/core/Title.js +1 -1
  119. package/src/sap/ui/core/TooltipBase.js +1 -1
  120. package/src/sap/ui/core/UIArea.js +10 -9
  121. package/src/sap/ui/core/UIComponent.js +2 -2
  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 +4 -2
  126. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  127. package/src/sap/ui/core/_IconRegistry.js +2 -0
  128. package/src/sap/ui/core/cache/CacheManager.js +22 -16
  129. package/src/sap/ui/core/cache/LRUPersistentCache.js +13 -7
  130. package/src/sap/ui/core/date/UI5Date.js +1 -1
  131. package/src/sap/ui/core/delegate/ItemNavigation.js +3 -3
  132. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  133. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  134. package/src/sap/ui/core/dnd/DragDropInfo.js +6 -6
  135. package/src/sap/ui/core/dnd/DragInfo.js +4 -4
  136. package/src/sap/ui/core/dnd/DropInfo.js +6 -6
  137. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  138. package/src/sap/ui/core/getCompatibilityVersion.js +64 -0
  139. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  140. package/src/sap/ui/core/library.js +14 -9
  141. package/src/sap/ui/core/message/ControlMessageProcessor.js +4 -4
  142. package/src/sap/ui/core/message/Message.js +14 -13
  143. package/src/sap/ui/core/message/MessageManager.js +12 -13
  144. package/src/sap/ui/core/message/MessageMixin.js +2 -2
  145. package/src/sap/ui/core/message/MessageParser.js +1 -1
  146. package/src/sap/ui/core/message/MessageProcessor.js +2 -2
  147. package/src/sap/ui/core/message/MessageType.js +4 -4
  148. package/src/sap/ui/core/messagebundle_ar.properties +2 -2
  149. package/src/sap/ui/core/messagebundle_bg.properties +3 -3
  150. package/src/sap/ui/core/messagebundle_ca.properties +1 -1
  151. package/src/sap/ui/core/messagebundle_cs.properties +4 -4
  152. package/src/sap/ui/core/messagebundle_cy.properties +1 -1
  153. package/src/sap/ui/core/messagebundle_da.properties +3 -3
  154. package/src/sap/ui/core/messagebundle_de.properties +2 -2
  155. package/src/sap/ui/core/messagebundle_el.properties +10 -10
  156. package/src/sap/ui/core/messagebundle_en.properties +4 -4
  157. package/src/sap/ui/core/messagebundle_es.properties +17 -17
  158. package/src/sap/ui/core/messagebundle_fi.properties +1 -1
  159. package/src/sap/ui/core/messagebundle_fr.properties +21 -21
  160. package/src/sap/ui/core/messagebundle_hi.properties +2 -2
  161. package/src/sap/ui/core/messagebundle_hr.properties +6 -6
  162. package/src/sap/ui/core/messagebundle_hu.properties +10 -10
  163. package/src/sap/ui/core/messagebundle_id.properties +5 -5
  164. package/src/sap/ui/core/messagebundle_it.properties +57 -57
  165. package/src/sap/ui/core/messagebundle_iw.properties +5 -5
  166. package/src/sap/ui/core/messagebundle_kk.properties +1 -1
  167. package/src/sap/ui/core/messagebundle_ko.properties +6 -6
  168. package/src/sap/ui/core/messagebundle_lv.properties +5 -5
  169. package/src/sap/ui/core/messagebundle_ms.properties +5 -5
  170. package/src/sap/ui/core/messagebundle_nl.properties +12 -12
  171. package/src/sap/ui/core/messagebundle_no.properties +8 -8
  172. package/src/sap/ui/core/messagebundle_pl.properties +2 -2
  173. package/src/sap/ui/core/messagebundle_pt.properties +8 -8
  174. package/src/sap/ui/core/messagebundle_ro.properties +2 -2
  175. package/src/sap/ui/core/messagebundle_ru.properties +7 -7
  176. package/src/sap/ui/core/messagebundle_sk.properties +2 -2
  177. package/src/sap/ui/core/messagebundle_sl.properties +9 -9
  178. package/src/sap/ui/core/messagebundle_sv.properties +8 -8
  179. package/src/sap/ui/core/messagebundle_th.properties +18 -18
  180. package/src/sap/ui/core/messagebundle_tr.properties +5 -5
  181. package/src/sap/ui/core/messagebundle_uk.properties +8 -8
  182. package/src/sap/ui/core/messagebundle_vi.properties +1 -1
  183. package/src/sap/ui/core/messagebundle_zh_CN.properties +2 -2
  184. package/src/sap/ui/core/messagebundle_zh_TW.properties +24 -24
  185. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  186. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  187. package/src/sap/ui/core/mvc/JSView.js +1 -1
  188. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  189. package/src/sap/ui/core/mvc/View.js +3 -3
  190. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  191. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  192. package/src/sap/ui/core/plugin/LessSupport.js +3 -3
  193. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  194. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  195. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  196. package/src/sap/ui/core/routing/async/Target.js +5 -4
  197. package/src/sap/ui/core/routing/sync/Target.js +3 -3
  198. package/src/sap/ui/core/rules/App.support.js +30 -1
  199. package/src/sap/ui/core/rules/Config.support.js +4 -0
  200. package/src/sap/ui/core/rules/CoreHelper.support.js +3 -3
  201. package/src/sap/ui/core/rules/Theming.support.js +4 -0
  202. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  203. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  204. package/src/sap/ui/core/service/Service.js +1 -1
  205. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  206. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  207. package/src/sap/ui/core/support/Plugin.js +1 -1
  208. package/src/sap/ui/core/support/Support.js +5 -3
  209. package/src/sap/ui/core/support/ToolsAPI.js +8 -4
  210. package/src/sap/ui/core/support/plugins/Breakpoint.js +4 -4
  211. package/src/sap/ui/core/support/plugins/ControlTree.js +31 -13
  212. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  213. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  214. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  215. package/src/sap/ui/core/support/plugins/Selector.js +2 -2
  216. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  217. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  218. package/src/sap/ui/core/support/plugins/ViewInfo.js +6 -4
  219. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +4 -2
  220. package/src/sap/ui/core/support/usage/EventBroadcaster.js +1 -1
  221. package/src/sap/ui/core/themes/base/base.less +275 -269
  222. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  223. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  224. package/src/sap/ui/core/themes/base/global.less +8 -8
  225. package/src/sap/ui/core/theming/Parameters.js +4 -5
  226. package/src/sap/ui/core/theming/ThemeHelper.js +0 -1
  227. package/src/sap/ui/core/theming/ThemeManager.js +15 -14
  228. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  229. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  230. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  231. package/src/sap/ui/core/tmpl/Template.js +1 -1
  232. package/src/sap/ui/core/tmpl/TemplateControl.js +4 -2
  233. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  234. package/src/sap/ui/core/util/Export.js +1 -1
  235. package/src/sap/ui/core/util/ExportCell.js +1 -1
  236. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  237. package/src/sap/ui/core/util/ExportRow.js +1 -1
  238. package/src/sap/ui/core/util/ExportType.js +1 -1
  239. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  240. package/src/sap/ui/core/util/File.js +1 -1
  241. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  242. package/src/sap/ui/core/util/MockServer.js +1 -1
  243. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  244. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +27 -4
  245. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +55 -30
  246. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +54 -48
  247. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +2 -2
  248. package/src/sap/ui/core/util/serializer/Serializer.js +3 -3
  249. package/src/sap/ui/core/util/serializer/ViewSerializer.js +27 -10
  250. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +2 -2
  251. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  252. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  253. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  254. package/src/sap/ui/core/webc/WebComponent.js +3 -3
  255. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  256. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  257. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  258. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  259. package/src/sap/ui/debug/ControlTree.js +5 -5
  260. package/src/sap/ui/debug/DebugEnv.js +15 -6
  261. package/src/sap/ui/debug/PropertyList.js +3 -3
  262. package/src/sap/ui/dom/jquery/control.js +3 -4
  263. package/src/sap/ui/events/F6Navigation.js +2 -1
  264. package/src/sap/ui/model/ClientModel.js +33 -1
  265. package/src/sap/ui/model/ClientPropertyBinding.js +17 -1
  266. package/src/sap/ui/model/CompositeDataState.js +1 -1
  267. package/src/sap/ui/model/CompositeType.js +1 -1
  268. package/src/sap/ui/model/DataState.js +1 -1
  269. package/src/sap/ui/model/Filter.js +1 -1
  270. package/src/sap/ui/model/MetaModel.js +1 -1
  271. package/src/sap/ui/model/Model.js +1 -1
  272. package/src/sap/ui/model/SelectionModel.js +1 -1
  273. package/src/sap/ui/model/SimpleType.js +1 -1
  274. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  275. package/src/sap/ui/model/Type.js +1 -1
  276. package/src/sap/ui/model/json/JSONModel.js +2 -3
  277. package/src/sap/ui/model/message/MessageModel.js +3 -7
  278. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  279. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  280. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  281. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  282. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  283. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  284. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  285. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  286. package/src/sap/ui/model/odata/type/Date.js +1 -1
  287. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  288. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  289. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  290. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -2
  291. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  292. package/src/sap/ui/model/odata/type/Double.js +1 -1
  293. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  294. package/src/sap/ui/model/odata/type/Int.js +1 -1
  295. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  296. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  297. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  298. package/src/sap/ui/model/odata/type/ODataType.js +2 -3
  299. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  300. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  301. package/src/sap/ui/model/odata/type/Single.js +1 -1
  302. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  303. package/src/sap/ui/model/odata/type/String.js +1 -1
  304. package/src/sap/ui/model/odata/type/Time.js +1 -1
  305. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  306. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  307. package/src/sap/ui/model/odata/v2/Context.js +13 -5
  308. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  309. package/src/sap/ui/model/odata/v2/ODataListBinding.js +85 -56
  310. package/src/sap/ui/model/odata/v2/ODataModel.js +20 -15
  311. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  312. package/src/sap/ui/model/odata/v4/Context.js +60 -10
  313. package/src/sap/ui/model/odata/v4/ODataBinding.js +13 -4
  314. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +159 -34
  315. package/src/sap/ui/model/odata/v4/ODataListBinding.js +94 -24
  316. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  317. package/src/sap/ui/model/odata/v4/ODataModel.js +10 -10
  318. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +4 -2
  319. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +10 -13
  320. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +105 -25
  321. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +3 -5
  322. package/src/sap/ui/model/odata/v4/lib/_Cache.js +83 -24
  323. package/src/sap/ui/model/odata/v4/lib/_Helper.js +6 -20
  324. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +3 -3
  325. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +1 -1
  326. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  327. package/src/sap/ui/model/type/Boolean.js +1 -1
  328. package/src/sap/ui/model/type/Currency.js +1 -1
  329. package/src/sap/ui/model/type/Date.js +1 -2
  330. package/src/sap/ui/model/type/DateInterval.js +1 -2
  331. package/src/sap/ui/model/type/DateTime.js +1 -1
  332. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  333. package/src/sap/ui/model/type/FileSize.js +1 -1
  334. package/src/sap/ui/model/type/Float.js +1 -1
  335. package/src/sap/ui/model/type/Integer.js +1 -1
  336. package/src/sap/ui/model/type/String.js +1 -1
  337. package/src/sap/ui/model/type/Time.js +1 -1
  338. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  339. package/src/sap/ui/model/type/Unit.js +1 -1
  340. package/src/sap/ui/model/xml/XMLModel.js +2 -2
  341. package/src/sap/ui/model/xml/XMLPropertyBinding.js +4 -2
  342. package/src/sap/ui/performance/BeaconRequest.js +8 -10
  343. package/src/sap/ui/qunit/qunit-coverage-istanbul.js +60 -6
  344. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  345. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  346. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +16 -14
  347. package/src/sap/ui/test/BlanketReporterUI.view.xml +5 -2
  348. package/src/sap/ui/test/OpaPlugin.js +3 -3
  349. package/src/sap/ui/test/TestUtils.js +3 -3
  350. package/src/sap/ui/test/generic/TestBase.js +1 -1
  351. package/src/sap/ui/test/matchers/Descendant.js +1 -1
  352. package/src/sap/ui/test/matchers/Sibling.js +1 -1
  353. package/src/sap/ui/test/selectors/_LabelFor.js +3 -2
  354. package/src/sap/ui/test/starter/_setupAndStart.js +35 -11
  355. package/src/sap/ui/util/Storage.js +1 -1
  356. package/test/sap/ui/core/HTMLControl.html +94 -93
  357. package/test/sap/ui/core/HyphenationPlayground.html +10 -9
  358. package/test/sap/ui/core/Strings.view.xml +5 -1
  359. package/test/sap/ui/core/ThemeParameters.html +31 -30
  360. package/test/sap/ui/core/ValidateURL.html +10 -10
  361. package/test/sap/ui/core/demokit/sample/BusyIndicator/manifest.json +2 -1
  362. package/test/sap/ui/core/demokit/sample/Commands/manifest.json +2 -2
  363. package/test/sap/ui/core/demokit/sample/ControlBusyIndicator/manifest.json +2 -1
  364. package/test/sap/ui/core/demokit/sample/ControllerExtension/manifest.json +1 -0
  365. package/test/sap/ui/core/demokit/sample/FieldGroup/manifest.json +1 -0
  366. package/test/sap/ui/core/demokit/sample/Html/manifest.json +1 -0
  367. package/test/sap/ui/core/demokit/sample/Html/preserveDOM/manifest.json +1 -0
  368. package/test/sap/ui/core/demokit/sample/Html/static/manifest.json +1 -0
  369. package/test/sap/ui/core/demokit/sample/HyphenationAPI/C.controller.js +3 -3
  370. package/test/sap/ui/core/demokit/sample/Icon/manifest.json +2 -1
  371. package/test/sap/ui/core/demokit/sample/InvisibleMessage/InvisibleMessage.controller.js +4 -4
  372. package/test/sap/ui/core/demokit/sample/InvisibleMessage/manifest.json +2 -1
  373. package/test/sap/ui/core/demokit/sample/InvisibleText/manifest.json +2 -1
  374. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/manifest.json +1 -0
  375. package/test/sap/ui/core/demokit/sample/OpaAction/manifest.json +1 -0
  376. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/OpaAutoWaitParams.js +1 -1
  377. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/applicationUnderTest/manifest.json +2 -2
  378. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/manifest.json +2 -1
  379. package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/applicationUnderTest/manifest.json +2 -2
  380. package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/manifest.json +2 -1
  381. package/test/sap/ui/core/demokit/sample/OpaById/applicationUnderTest/manifest.json +2 -2
  382. package/test/sap/ui/core/demokit/sample/OpaById/manifest.json +2 -1
  383. package/test/sap/ui/core/demokit/sample/OpaDynamicWait/applicationUnderTest/manifest.json +2 -2
  384. package/test/sap/ui/core/demokit/sample/OpaDynamicWait/manifest.json +2 -1
  385. package/test/sap/ui/core/demokit/sample/OpaGetStarted/manifest.json +2 -1
  386. package/test/sap/ui/core/demokit/sample/OpaMatchers/applicationUnderTest/manifest.json +2 -2
  387. package/test/sap/ui/core/demokit/sample/OpaMatchers/manifest.json +2 -1
  388. package/test/sap/ui/core/demokit/sample/OpaPageObject/applicationUnderTest/manifest.json +2 -2
  389. package/test/sap/ui/core/demokit/sample/OpaPageObject/manifest.json +2 -1
  390. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/applicationUnderTest/manifest.json +2 -2
  391. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/manifest.json +2 -1
  392. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyUIComponent/applicationUnderTest/manifest.json +2 -2
  393. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyUIComponent/manifest.json +2 -1
  394. package/test/sap/ui/core/demokit/sample/OpaStaticAreaControls/applicationUnderTest/manifest.json +2 -2
  395. package/test/sap/ui/core/demokit/sample/OpaStaticAreaControls/manifest.json +2 -1
  396. package/test/sap/ui/core/demokit/sample/OpaTestLibrary/applicationUnderTest/manifest.json +2 -2
  397. package/test/sap/ui/core/demokit/sample/OpaTestLibrary/manifest.json +2 -1
  398. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyAppInAFrameWithURLParameters/applicationUnderTest/manifest.json +2 -2
  399. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyAppInAFrameWithURLParameters/manifest.json +2 -1
  400. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyUIComponentWithURLParameters/applicationUnderTest/manifest.json +2 -2
  401. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyUIComponentWithURLParameters/manifest.json +2 -1
  402. package/test/sap/ui/core/demokit/sample/OpaWithSupportAssistant/manifest.json +2 -1
  403. package/test/sap/ui/core/demokit/sample/PatternMatching/manifest.json +2 -1
  404. package/test/sap/ui/core/demokit/sample/PatternMatching/patternApp/manifest.json +2 -2
  405. package/test/sap/ui/core/demokit/sample/RoutingFullscreen/manifest.json +2 -1
  406. package/test/sap/ui/core/demokit/sample/RoutingMasterDetail/manifest.json +2 -1
  407. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/manifest.json +2 -2
  408. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/reuse/categories/manifest.json +2 -1
  409. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/reuse/products/manifest.json +2 -1
  410. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/reuse/suppliers/manifest.json +2 -1
  411. package/test/sap/ui/core/demokit/sample/TargetsStandalone/manifest.json +2 -1
  412. package/test/sap/ui/core/demokit/sample/ThemeCustomClasses/ThemeCustomClasses.controller.js +3 -3
  413. package/test/sap/ui/core/demokit/sample/ThemeCustomClasses/manifest.json +1 -0
  414. package/test/sap/ui/core/demokit/sample/TypeCurrency/manifest.json +1 -0
  415. package/test/sap/ui/core/demokit/sample/TypeDateAsDate/manifest.json +1 -0
  416. package/test/sap/ui/core/demokit/sample/TypeDateAsString/manifest.json +1 -0
  417. package/test/sap/ui/core/demokit/sample/TypeDateTime/manifest.json +1 -0
  418. package/test/sap/ui/core/demokit/sample/TypeFileSize/manifest.json +1 -0
  419. package/test/sap/ui/core/demokit/sample/TypeFloat/manifest.json +1 -0
  420. package/test/sap/ui/core/demokit/sample/TypeInteger/manifest.json +1 -0
  421. package/test/sap/ui/core/demokit/sample/TypeTimeAsTime/manifest.json +1 -0
  422. package/test/sap/ui/core/demokit/sample/View/async/manifest.json +2 -1
  423. package/test/sap/ui/core/demokit/sample/View/preprocessor/manifest.json +2 -1
  424. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/manifest.json +2 -1
  425. package/test/sap/ui/core/demokit/sample/XMLComposite/02/manifest.json +1 -0
  426. package/test/sap/ui/core/demokit/sample/common/Controller.js +3 -2
  427. package/test/sap/ui/core/demokit/sample/common/Helper.js +15 -2
  428. package/test/sap/ui/core/demokit/sample/common/pages/Any.js +3 -0
  429. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/applicationUnderTest/manifest.json +1 -0
  430. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/manifest.json +2 -1
  431. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/manifest.json +2 -1
  432. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/webapp/manifest.json +2 -2
  433. package/test/sap/ui/core/demokit/sample/matcher/Descendant/manifest.json +2 -1
  434. package/test/sap/ui/core/demokit/sample/matcher/Descendant/webapp/manifest.json +2 -2
  435. package/test/sap/ui/core/demokit/sample/matcher/I18NText/manifest.json +2 -1
  436. package/test/sap/ui/core/demokit/sample/matcher/I18NText/webapp/manifest.json +2 -2
  437. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/manifest.json +2 -1
  438. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/webapp/manifest.json +2 -2
  439. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/manifest.json +1 -0
  440. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/manifest.json +1 -0
  441. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/manifest.json +1 -0
  442. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +6 -2
  443. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.view.xml +7 -3
  444. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.controller.js +2 -2
  445. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.view.xml +7 -4
  446. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/expandPageCollapse.js +1 -1
  447. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/filter.js +1 -1
  448. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +1 -1
  449. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.js +3 -5
  450. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.js +4 -2
  451. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +6 -4
  452. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +6 -2
  453. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.js +9 -16
  454. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/GridTable.view.xml +6 -2
  455. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +7 -3
  456. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.js +1 -1
  457. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.js +1 -1
  458. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.view.xml +5 -2
  459. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +4 -2
  460. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.js +1 -1
  461. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +29 -4
  462. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +30 -5
  463. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +33 -6
  464. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/tests/createEdit.js +1 -1
  465. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/tests/pageExpandCollapse.js +1 -1
  466. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.js +1 -1
  467. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.js +1 -1
  468. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/pages/Main.js +9 -8
  469. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/ChangeContext.js +1 -1
  470. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/Create.js +1 -1
  471. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateMultiple.js +1 -1
  472. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateRelative.js +1 -1
  473. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/MessageHandling.js +1 -1
  474. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/TypeDeterminationAndDelete.js +8 -9
  475. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/WriteNonDeferredGroup.js +1 -1
  476. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/additionalTargets.js +1 -1
  477. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/tests/AdaptSalesOrdersTable.js +1 -1
  478. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.js +1 -1
  479. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Main.view.xml +5 -2
  480. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/pages/Main.js +4 -2
  481. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.js +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/mockserver/01/webapp/manifest.json +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/mockserver/02/webapp/manifest.json +1 -1
  484. package/test/sap/ui/core/demokit/tutorial/mockserver/03/webapp/manifest.json +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/mockserver/04/webapp/manifest.json +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/webapp/manifest.json +1 -1
  487. package/test/sap/ui/core/internal/samples/composite/xmlcomposite/exTableWrapperOuterBinding/Test.controller.js +3 -2
  488. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.controller.js +1 -1
  489. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.view.xml +6 -3
  490. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.view.xml +1 -1
  491. package/test/sap/ui/core/qunit/ControlDefinition.qunit.js +40 -20
  492. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +1 -1
  493. package/test/sap/ui/core/qunit/Core.qunit.js +5 -4
  494. package/test/sap/ui/core/qunit/Core_libraryTerminologies_integration.qunit.js +12 -11
  495. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +119 -117
  496. package/test/sap/ui/core/qunit/CustomThemeFallback.qunit.js +5 -17
  497. package/test/sap/ui/core/qunit/Declarative.qunit.js +37 -37
  498. package/test/sap/ui/core/qunit/Element_base.qunit.js +1 -1
  499. package/test/sap/ui/core/qunit/EventBus.qunit.js +4 -3
  500. package/test/sap/ui/core/qunit/FastNavigation.qunit.js +3 -2
  501. package/test/sap/ui/core/qunit/FieldGroup.qunit.js +9 -8
  502. package/test/sap/ui/core/qunit/FocusHandler.qunit.js +5 -4
  503. package/test/sap/ui/core/qunit/Fragment.qunit.js +12 -12
  504. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +13 -12
  505. package/test/sap/ui/core/qunit/HTML.qunit.js +35 -35
  506. package/test/sap/ui/core/qunit/IconPool.qunit.js +6 -6
  507. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +5 -4
  508. package/test/sap/ui/core/qunit/ManagedObject.qunit.js +3 -3
  509. package/test/sap/ui/core/qunit/PlaceAt.qunit.js +2 -2
  510. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +3 -3
  511. package/test/sap/ui/core/qunit/StashedControlSupport.qunit.js +9 -9
  512. package/test/sap/ui/core/qunit/ThemeHelper.qunit.js +5 -4
  513. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +47 -79
  514. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +40 -372
  515. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +686 -0
  516. package/test/sap/ui/core/qunit/TooltipBase.qunit.js +3 -2
  517. package/test/sap/ui/core/qunit/UIArea.qunit.js +10 -10
  518. package/test/sap/ui/core/qunit/analytics/testsuite4analytics.qunit.html +3 -3
  519. package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +4 -3
  520. package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +13 -3
  521. package/test/sap/ui/core/qunit/base/util/UriParameters.qunit.js +27 -1
  522. package/test/sap/ui/core/qunit/bootstrap/BootstrapCustomBootTaskPreloadCss.qunit.js +4 -4
  523. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.beforeBootstrap.qunit.js +22 -21
  524. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.qunit.js +4 -9
  525. package/test/sap/ui/core/qunit/bootstrap/CalendarClassLoadingWithCustomBootTaskAndPreload.qunit.js +19 -4
  526. package/test/sap/ui/core/qunit/bootstrap/CfgDefaults.qunit.js +3 -2
  527. package/test/sap/ui/core/qunit/bootstrap/CfgFromConfigAttribute.qunit.js +4 -3
  528. package/test/sap/ui/core/qunit/bootstrap/CfgFromGlobalObject.qunit.js +4 -3
  529. package/test/sap/ui/core/qunit/bootstrap/CfgFromTagAttributes.qunit.js +4 -3
  530. package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +2 -198
  531. package/test/sap/ui/core/qunit/bootstrap/Configuration_language_via_URL.qunit.js +210 -0
  532. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +33 -30
  533. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +6 -0
  534. package/test/sap/ui/core/qunit/component/Component.qunit.js +12 -0
  535. package/test/sap/ui/core/qunit/component/ComponentSupport.qunit.js +6 -5
  536. package/test/sap/ui/core/qunit/component/Component_dependencyLoading.qunit.js +15 -9
  537. package/test/sap/ui/core/qunit/component/Component_dependencyLoading_unavoidablySync.qunit.js +10 -6
  538. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +8 -7
  539. package/test/sap/ui/core/qunit/component/Customizing_disabled.qunit.js +6 -5
  540. package/test/sap/ui/core/qunit/component/Customizing_legacyAPIs.qunit.js +8 -7
  541. package/test/sap/ui/core/qunit/component/Customizing_multi.qunit.js +7 -6
  542. package/test/sap/ui/core/qunit/component/Customizing_unavoidablySync.qunit.js +5 -4
  543. package/test/sap/ui/core/qunit/component/Metadata.qunit.js +3 -3
  544. package/test/sap/ui/core/qunit/component/Models.qunit.js +103 -44
  545. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +20 -4
  546. package/test/sap/ui/core/qunit/component/UIComponent_unavoidablySync.qunit.js +5 -4
  547. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/manifest.json +2 -1
  548. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/manifest.json +1 -0
  549. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/manifest.json +2 -1
  550. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/manifest.json +1 -0
  551. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/manifest.json +1 -1
  552. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/manifest.json +1 -0
  553. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/componentVariant/manifest.json +1 -0
  554. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/manifest.json +1 -1
  555. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +1 -1
  556. package/test/sap/ui/core/qunit/composite/XMLComposite.qunit.js +5 -5
  557. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +4 -5
  558. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +1 -0
  559. package/test/sap/ui/core/qunit/internal/AnnotationParser.qunit.html +4 -4
  560. package/test/sap/ui/core/qunit/internal/testsuite.models.qunit.js +19 -9
  561. package/test/sap/ui/core/qunit/jquery.sap.global-config.qunit.js +2 -4
  562. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +5 -4
  563. package/test/sap/ui/core/qunit/json/JSONModel.qunit.js +5 -9
  564. package/test/sap/ui/core/qunit/messages/Messaging.qunit.js +10 -5
  565. package/test/sap/ui/core/qunit/messages/messagesGeneral.qunit.js +6 -0
  566. package/test/sap/ui/core/qunit/messages/messagesGeneral_legacyAPIs.qunit.js +158 -0
  567. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +5 -4
  568. package/test/sap/ui/core/qunit/messages/testsuite.messaging.base.qunit.js +7 -0
  569. package/test/sap/ui/core/qunit/model/ClientPropertyBinding.qunit.js +47 -0
  570. package/test/sap/ui/core/qunit/mvc/AsyncXMLView.qunit.js +5 -3
  571. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +3 -3
  572. package/test/sap/ui/core/qunit/mvc/View.qunit.js +5 -1
  573. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +6 -5
  574. package/test/sap/ui/core/qunit/mvc/testdata/TypedViewWithRendererRenderer.js +2 -2
  575. package/test/sap/ui/core/qunit/mvc/testdata/stashed/manifest.json +2 -1
  576. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +4 -3
  577. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing_legacyAPIs.qunit.js +4 -3
  578. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AsyncXMLView_legacyAPIs.qunit.js +5 -3
  579. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +6 -5
  580. package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +11 -7
  581. package/test/sap/ui/core/qunit/odata/ODataMetaModel.qunit.js +35 -0
  582. package/test/sap/ui/core/qunit/odata/_AnnotationHelperBasics.qunit.js +10 -4
  583. package/test/sap/ui/core/qunit/odata/data/ODataModelFakeService.js +1 -1
  584. package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +5 -0
  585. package/test/sap/ui/core/qunit/odata/type/ODataType.qunit.js +9 -0
  586. package/test/sap/ui/core/qunit/odata/v2/Context.qunit.js +12 -0
  587. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +422 -9
  588. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +483 -33
  589. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +121 -2
  590. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +95 -8
  591. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +59 -13
  592. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +355 -75
  593. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +152 -19
  594. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1253 -130
  595. package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +19 -9
  596. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +6 -27
  597. package/test/sap/ui/core/qunit/odata/v4/data/metadata.json +3 -1
  598. package/test/sap/ui/core/qunit/odata/v4/data/metadata.xml +2 -2
  599. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +172 -17
  600. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +7 -8
  601. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +185 -84
  602. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +2 -22
  603. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +6 -4
  604. package/test/sap/ui/core/qunit/opa/selectors/_Selector.js +3 -2
  605. package/test/sap/ui/core/qunit/opa/selectors/_TableRowItem.js +4 -3
  606. package/test/sap/ui/core/qunit/rule/app/deprecatedJSViewUsage.qunit.js +4 -0
  607. package/test/sap/ui/core/qunit/rule/app/globalApiUsage.qunit.js +4 -0
  608. package/test/sap/ui/core/qunit/rule/app/jquerySapUsage.qunit.js +4 -0
  609. package/test/sap/ui/core/qunit/rule/app/syncXHR.qunit.js +4 -0
  610. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrap.qunit.js +4 -0
  611. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrapDebug.qunit.js +4 -0
  612. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrapDebugBeforeBootstrap.js +4 -0
  613. package/test/sap/ui/core/qunit/rule/config/asynchronousXMLViews.qunit.js +4 -1
  614. package/test/sap/ui/core/qunit/rule/misc/silentEventBus.qunit.js +8 -7
  615. package/test/sap/ui/core/qunit/rule/model/modelSupport.qunit.js +11 -2
  616. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +18 -0
  617. package/test/sap/ui/core/qunit/test/starter/find/main.js +11 -8
  618. package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +6 -0
  619. package/test/sap/ui/core/qunit/testsuites/testsuite.foundation.enablement.qunit.js +7 -1
  620. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +21 -2
  621. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +26 -4
  622. package/test/sap/ui/core/qunit/util/jQuery.sap.Version.qunit.js +5 -5
  623. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +30 -13
  624. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +40 -16
  625. package/test/sap/ui/core/qunit/util/support/TechnicalInfo.qunit.js +11 -10
  626. package/test/sap/ui/core/qunit/xml/XMLPropertyBinding.qunit.js +69 -8
  627. package/test/sap/ui/core/relnotes/changes-1.118.json +1 -34
  628. package/test/sap/ui/core/relnotes/changes-1.119.json +217 -0
  629. package/test/sap/ui/core/resources/fastnav.js +3 -2
  630. package/test/sap/ui/core/samples/ResponsiveDemo.html +3 -3
  631. package/test/sap/ui/core/samples/components/commands/manifest.json +2 -2
  632. package/test/sap/ui/core/samples/components/sample/manifest.json +2 -1
  633. package/test/sap/ui/core/samples/databinding/DatabindingMessages.html +1 -1
  634. package/test/sap/ui/core/samples/databinding/ODatabindingMessages.html +3 -3
  635. package/test/sap/ui/core/samples/databinding/UnitTable.view.xml +9 -2
  636. package/test/sap/ui/core/samples/formatting/manifest.json +2 -2
  637. package/test/sap/ui/core/samples/mvc/XMLViewAsync.html +62 -61
  638. package/test/sap/ui/core/samples/routing_legacyAPIs/AsyncViews.html +124 -123
  639. package/test/sap/ui/core/terminologies/App.controller.js +3 -2
  640. package/test/sap/ui/core/terminologies/App.view.xml +64 -64
  641. package/test/sap/ui/core/tmpl_legacyAPIs/TemplateSimple.html +38 -37
  642. package/test/sap/ui/core/util/PasteHelper.html +5 -4
  643. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  644. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  645. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  646. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  647. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  648. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  649. package/test/sap/ui/core/samples/databinding/DataBinding.html +0 -135
  650. package/test/sap/ui/core/samples/databinding/DataBindingCalculatedFields.html +0 -229
  651. package/test/sap/ui/core/samples/databinding/DataBindingCompositeTypes.html +0 -273
  652. package/test/sap/ui/core/samples/databinding/DataBindingFormat.html +0 -294
  653. package/test/sap/ui/core/samples/databinding/DataBindingList.html +0 -290
  654. package/test/sap/ui/core/samples/databinding/DataBindingListNamedModel.html +0 -290
  655. package/test/sap/ui/core/samples/databinding/DataBindingListXML.html +0 -280
  656. package/test/sap/ui/core/samples/databinding/DataBindingMasterDetail.html +0 -117
  657. package/test/sap/ui/core/samples/databinding/DataBindingMultiModel.html +0 -154
  658. package/test/sap/ui/core/samples/databinding/DataBindingResourceModel.html +0 -119
  659. package/test/sap/ui/core/samples/databinding/DataBindingSortingFiltering.html +0 -103
  660. package/test/sap/ui/core/samples/databinding/DataBindingTree.html +0 -166
  661. package/test/sap/ui/core/samples/databinding/DataBindingTreeFilter.html +0 -117
  662. package/test/sap/ui/core/samples/databinding/DataBindingTreeFilterXML.html +0 -103
  663. package/test/sap/ui/core/samples/databinding/DataBindingTreeLarge.html +0 -128
  664. package/test/sap/ui/core/samples/databinding/DataBindingTreeWithArrays.html +0 -132
  665. package/test/sap/ui/core/samples/databinding/DataBindingTwoWay.html +0 -158
  666. package/test/sap/ui/core/samples/databinding/DataBindingTwoWayTable.html +0 -141
  667. package/test/sap/ui/core/samples/databinding/DataBindingTypes.html +0 -265
  668. package/test/sap/ui/core/samples/databinding/DataBindingValidation.html +0 -195
  669. package/test/sap/ui/core/samples/databinding/DataBindingXML.html +0 -148
  670. package/test/sap/ui/core/samples/databinding/DataBindingXMLView.html +0 -53
  671. package/test/sap/ui/core/samples/databinding/testdata/ListBinding.view.xml +0 -9
  672. package/test/sap/ui/core/samples/databinding/testdata/test.view.json +0 -15
  673. package/test/sap/ui/core/samples/databinding/testdata/test.view.xml +0 -8
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
75
75
  * @public
76
76
  * @since 1.37.0
77
- * @version 1.118.0
77
+ * @version 1.119.1
78
78
  *
79
79
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
80
80
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
@@ -142,6 +142,13 @@ sap.ui.define([
142
142
 
143
143
  this.oOperation = {
144
144
  bAction : undefined,
145
+ // Whether the operation is a bound action with a navigation property inside the
146
+ // path to its binding parameter, and thus additional ($expand/$select) query
147
+ // options have been computed to facilitate a RVC.
148
+ // undefined: unknown whether it is possible to determine the needed query options
149
+ // true: query options are determined
150
+ // false: the preconditions are not given to determine the query options
151
+ bAdditionalQueryOptionsForRVC : undefined,
145
152
  mChangeListeners : {}, // map from path to an array of change listeners
146
153
  mParameters : {},
147
154
  mRefreshParameters : {}
@@ -250,7 +257,7 @@ sap.ui.define([
250
257
  mParameters, fnGetEntity, bIgnoreETag, fnOnStrictHandlingFailed);
251
258
  }).then(function (oResponseEntity) {
252
259
  return fireChangeAndRefreshDependentBindings().then(function () {
253
- return that.handleOperationResult(sResolvedPath, oOperationMetadata,
260
+ return that.handleOperationResult(oOperationMetadata,
254
261
  oResponseEntity, bReplaceWithRVC);
255
262
  });
256
263
  }, function (oError) {
@@ -274,6 +281,56 @@ sap.ui.define([
274
281
  return Promise.resolve(oPromise);
275
282
  };
276
283
 
284
+ /**
285
+ * Adds the query options for determining the key properties of a return value context.
286
+ * If all preconditions are fulfilled (see {@link #isReturnValueLikeBindingParameter} and
287
+ * {@link #hasReturnValueContext}) and it was possible to determine the query options, the flag
288
+ * <code>bAdditionalQueryOptionsForRVC</code> in <code>this.oOperation</code> is set to
289
+ * <code>true</code>, if it was not possible the flag is set to <code>false</code>.
290
+ *
291
+ * @param {object} oOperationMetadata
292
+ * The operation's metadata
293
+ * @param {object} mQueryOptions
294
+ * The operation binding's cache query options
295
+ * @returns {object}
296
+ * The computed query options
297
+ *
298
+ * @private
299
+ */
300
+ ODataContextBinding.prototype.addQueryOptionsForReturnValueContext
301
+ = function (oOperationMetadata, mQueryOptions) {
302
+ const aMetaSegments = _Helper.getMetaPath(this.getResolvedPath()).split("/");
303
+
304
+ if (!this.isReturnValueLikeBindingParameter(oOperationMetadata)
305
+ || !this.hasReturnValueContext() || aMetaSegments.length !== 4) {
306
+ this.oOperation.bAdditionalQueryOptionsForRVC = false;
307
+
308
+ return mQueryOptions;
309
+ }
310
+ const oMetaModel = this.oModel.getMetaModel();
311
+ const sEntitySet = oMetaModel.getObject(
312
+ "/" + aMetaSegments[1] + "/$NavigationPropertyBinding/" + aMetaSegments[2]);
313
+ const sPartner = oMetaModel.getObject(
314
+ "/" + aMetaSegments[1] + "/" + aMetaSegments[2] + "/$Partner");
315
+
316
+ let mAdditionalQueryOptions;
317
+ if (sEntitySet && sPartner) {
318
+ mAdditionalQueryOptions = {$expand : {}};
319
+ mAdditionalQueryOptions.$expand[sPartner] = {};
320
+ _Helper.selectKeyProperties(mAdditionalQueryOptions.$expand[sPartner],
321
+ oMetaModel.getObject("/" + sEntitySet + "/" + sPartner + "/"));
322
+ if (mQueryOptions.$select) {
323
+ _Helper.selectKeyProperties(mAdditionalQueryOptions,
324
+ oMetaModel.getObject("/" + sEntitySet + "/"));
325
+ }
326
+ mQueryOptions = _Helper.clone(mQueryOptions); // "copy on write"
327
+ _Helper.aggregateExpandSelect(mQueryOptions, mAdditionalQueryOptions);
328
+ }
329
+ this.oOperation.bAdditionalQueryOptionsForRVC = !!mAdditionalQueryOptions;
330
+
331
+ return mQueryOptions;
332
+ };
333
+
277
334
  /**
278
335
  * @override
279
336
  * @see sap.ui.model.odata.v4.ODataBinding#adjustPredicate
@@ -329,8 +386,8 @@ sap.ui.define([
329
386
  *
330
387
  * @param {sap.ui.base.Event} oEvent
331
388
  * The event object
332
- * @param {object} oEvent.getParameters
333
- * Object containing all event parameters
389
+ * @param {function():Object<any>} oEvent.getParameters
390
+ * Function which returns an object containing all event parameters
334
391
  * @param {sap.ui.model.ChangeReason} oEvent.getParameters.reason
335
392
  * The reason for the 'change' event could be
336
393
  * <ul>
@@ -376,8 +433,8 @@ sap.ui.define([
376
433
  * The event object
377
434
  * @param {function} oEvent.cancelBubble
378
435
  * A callback function to prevent that the event is bubbled up to the model
379
- * @param {object} oEvent.getParameters
380
- * Object containing all event parameters
436
+ * @param {function():Object<any>} oEvent.getParameters
437
+ * Function which returns an object containing all event parameters
381
438
  * @param {object} [oEvent.getParameters.data]
382
439
  * An empty data object if a back-end request succeeds
383
440
  * @param {Error} [oEvent.getParameters.error] The error object if a back-end request failed.
@@ -418,7 +475,8 @@ sap.ui.define([
418
475
  *
419
476
  * @param {sap.ui.base.Event} oEvent The event object
420
477
  * @param {sap.ui.model.odata.v4.ODataContextBinding} oEvent.getSource() This binding
421
- * @param {object} oEvent.getParameters Object containing all event parameters
478
+ * @param {function():Object<any>} oEvent.getParameters
479
+ * Function which returns an object containing all event parameters
422
480
  * @param {boolean} oEvent.getParameters.success
423
481
  * Whether all PATCHes are successfully processed
424
482
  *
@@ -538,8 +596,7 @@ sap.ui.define([
538
596
  function getOriginalResourcePath(oResponseEntity) {
539
597
  if (that.isReturnValueLikeBindingParameter(oOperationMetadata)) {
540
598
  if (that.hasReturnValueContext()) {
541
- return _Helper.getReturnValueContextPath(sOriginalResourcePath,
542
- _Helper.getPrivateAnnotation(oResponseEntity, "predicate"));
599
+ return that.getReturnValueContextPath(oResponseEntity);
543
600
  }
544
601
  if (_Helper.getPrivateAnnotation(vEntity, "predicate")
545
602
  === _Helper.getPrivateAnnotation(oResponseEntity, "predicate")) {
@@ -611,7 +668,8 @@ sap.ui.define([
611
668
  this.oOperation.bAction = bAction;
612
669
  this.oOperation.mRefreshParameters = mParameters;
613
670
  mParameters = Object.assign({}, mParameters);
614
- this.mCacheQueryOptions = this.computeOperationQueryOptions();
671
+ this.mCacheQueryOptions = this.addQueryOptionsForReturnValueContext(oOperationMetadata,
672
+ this.computeOperationQueryOptions());
615
673
  // Note: in case of NavigationProperty, this just removes "(...)"
616
674
  sPath = oRequestor.getPathAndAddQueryOptions(sPath, oOperationMetadata, mParameters,
617
675
  this.mCacheQueryOptions, vEntity);
@@ -744,10 +802,12 @@ sap.ui.define([
744
802
  * @see sap.ui.model.odata.v4.ODataBinding#doDeregisterChangeListener
745
803
  */
746
804
  ODataContextBinding.prototype.doDeregisterChangeListener = function (sPath, oListener) {
747
- if (this.oOperation && (sPath === "$Parameter" || sPath.startsWith("$Parameter/"))) {
748
- _Helper.removeByPath(this.oOperation.mChangeListeners,
749
- sPath.slice(/*"$Parameter/".length*/11), oListener);
750
- return;
805
+ if (this.oOperation) {
806
+ const sRelativePath = _Helper.getRelativePath(sPath, this.oParameterContext.getPath());
807
+ if (sRelativePath !== undefined) {
808
+ _Helper.removeByPath(this.oOperation.mChangeListeners, sRelativePath, oListener);
809
+ return;
810
+ }
751
811
  }
752
812
  asODataParentBinding.prototype.doDeregisterChangeListener.apply(this, arguments);
753
813
  };
@@ -849,27 +909,41 @@ sap.ui.define([
849
909
  * <code>bIgnoreETag</code> is used for an operation other than a bound action. It is also
850
910
  * rejected if <code>fnOnStrictHandlingFailed</code> is supplied and
851
911
  * <ul>
852
- * <li> is used for an operation other than an action,
853
- * <li> another request that applies the preference "handling=strict" exists in a different
854
- * change set of the same $batch request,
855
- * <li> it does not return a <code>Promise</code>,
856
- * <li> returns a <code>Promise</code> that resolves with <code>false</code>. In this case
857
- * <code>oError.canceled === true</code>.
912
+ * <li> is used for an operation other than an action,
913
+ * <li> another request that applies the preference "handling=strict" exists in a different
914
+ * change set of the same $batch request,
915
+ * <li> it does not return a <code>Promise</code>,
916
+ * <li> returns a <code>Promise</code> that resolves with <code>false</code>. In this case
917
+ * <code>oError.canceled === true</code>.
858
918
  * </ul>
859
919
  * It is also rejected if <code>bReplaceWithRVC</code> is supplied, and there is no return
860
920
  * value context at all or the existing context as described above is currently part of the
861
921
  * list's collection (that is, has an index).
862
922
  * <br>
863
923
  * A return value context is an {@link sap.ui.model.odata.v4.Context} which represents a bound
864
- * operation response. It is created only if the operation is bound and has a single entity
865
- * return value from the same entity set as the operation's binding parameter and has a
866
- * parent context which is an {@link sap.ui.model.odata.v4.Context} and points to an entity
867
- * from an entity set. It is destroyed the next time this operation binding is executed again!
924
+ * operation response. It is created only if the operation is bound and these conditions
925
+ * apply:
926
+ * <ul>
927
+ * <li> The operation has a single entity return value from the same entity set as the
928
+ * operation's binding parameter.
929
+ * <li> It has a parent context which is an {@link sap.ui.model.odata.v4.Context} and points
930
+ * to (an entity from) an entity set. The path of the parent context must not contain a
931
+ * navigation property (but see last paragraph).
932
+ * </ul>
933
+ * <b>Note:</b> A return value context is destroyed the next time the operation binding is
934
+ * executed again.
868
935
  * <br>
869
936
  * If a return value context is created, it must be used instead of
870
937
  * <code>this.getBoundContext()</code>. All bound messages will be related to the return value
871
938
  * context only. Such a message can only be connected to a corresponding control if the
872
939
  * control's property bindings use the return value context as binding context.
940
+ * <br>
941
+ * A return value context may also be provided if the parent context's path contains a maximum
942
+ * of one navigation property. In addition to the existing preconditions for a return value
943
+ * context, the metadata has to specify a partner attribute for the navigation property and
944
+ * the partner relationship has to be bi-directional. Also the navigation property binding has
945
+ * to be available in the entity set of the first segment in the parent context's path
946
+ * (@experimental as of version 1.119.0).
873
947
  * @throws {Error} If
874
948
  * <ul>
875
949
  * <li> the binding's root binding is suspended,
@@ -1187,11 +1261,42 @@ sap.ui.define([
1187
1261
  return sResolvedPath;
1188
1262
  };
1189
1263
 
1264
+ /**
1265
+ * Returns the path for the return value context. Supports bound operations on an entity or
1266
+ * a collection.
1267
+ *
1268
+ * @param {object} oResponseEntity
1269
+ * The result of the executed operation
1270
+ * @returns {string} The path for the return value context.
1271
+ *
1272
+ * @privat
1273
+ */
1274
+ ODataContextBinding.prototype.getReturnValueContextPath = function (oResponseEntity) {
1275
+ if (this.oOperation.bAdditionalQueryOptionsForRVC === undefined) {
1276
+ throw new Error("Unexpected Value for bAdditionalQueryOptionsForRVC: undefined");
1277
+ }
1278
+ const sBindingParameterPath = this.oContext.getPath().slice(1);
1279
+ const sPredicate = _Helper.getPrivateAnnotation(oResponseEntity, "predicate");
1280
+ if (this.oOperation.bAdditionalQueryOptionsForRVC === false) {
1281
+ const i = sBindingParameterPath.indexOf("(");
1282
+
1283
+ return (i < 0 ? sBindingParameterPath : sBindingParameterPath.slice(0, i)) + sPredicate;
1284
+ }
1285
+ const aMetaPathSegments = _Helper.getMetaPath(sBindingParameterPath).split("/");
1286
+ const sPartner = this.oModel.getMetaModel()
1287
+ .getObject("/" + aMetaPathSegments[0] + "/" + aMetaPathSegments[1] + "/$Partner");
1288
+ const sPartnerPredicate
1289
+ = this.oModel.getKeyPredicate("/" + aMetaPathSegments[0], oResponseEntity[sPartner]);
1290
+
1291
+ return sBindingParameterPath.split("/").map(function (sSegment, i) {
1292
+ return sSegment.slice(0, sSegment.lastIndexOf("("))
1293
+ + (i ? sPredicate : sPartnerPredicate);
1294
+ }).join("/");
1295
+ };
1296
+
1190
1297
  /**
1191
1298
  * Handles the result of an executed operation and creates a return value context if possible.
1192
1299
  *
1193
- * @param {string} sResolvedPath
1194
- * The resolved path
1195
1300
  * @param {object} oOperationMetadata
1196
1301
  * The operation's metadata
1197
1302
  * @param {object} oResponseEntity
@@ -1207,8 +1312,8 @@ sap.ui.define([
1207
1312
  *
1208
1313
  * @private
1209
1314
  */
1210
- ODataContextBinding.prototype.handleOperationResult = function (sResolvedPath,
1211
- oOperationMetadata, oResponseEntity, bReplaceWithRVC) {
1315
+ ODataContextBinding.prototype.handleOperationResult = function (oOperationMetadata,
1316
+ oResponseEntity, bReplaceWithRVC) {
1212
1317
  var sContextPredicate, oOldValue, sResponsePredicate, sNewPath, oResult;
1213
1318
 
1214
1319
  if (this.isReturnValueLikeBindingParameter(oOperationMetadata)) {
@@ -1224,7 +1329,17 @@ sap.ui.define([
1224
1329
  this.oContext.patch(oResponseEntity);
1225
1330
  }
1226
1331
  if (this.hasReturnValueContext()) {
1332
+ // determine the new path
1333
+ sNewPath = this.getReturnValueContextPath(oResponseEntity);
1227
1334
  if (bReplaceWithRVC) {
1335
+ // replace is only possible if the path does not contain any navigation
1336
+ // property or the key predicate of the first segment has not changed!
1337
+ if (this.oOperation.bAdditionalQueryOptionsForRVC
1338
+ && this.oContext.getPath().split("/")[1]
1339
+ !== sNewPath.split("/")[1]) {
1340
+ throw new Error("Cannot replace due changed key predicates "
1341
+ + "and navigation property in path");
1342
+ }
1228
1343
  this.oCache = null;
1229
1344
  this.oCachePromise = SyncPromise.resolve(null);
1230
1345
  oResult = this.oContext.getBinding()
@@ -1234,11 +1349,10 @@ sap.ui.define([
1234
1349
  return oResult;
1235
1350
  }
1236
1351
 
1237
- sNewPath = _Helper.getReturnValueContextPath(sResolvedPath, sResponsePredicate);
1238
1352
  this.oReturnValueContext = Context.createNewContext(this.oModel,
1239
- this, sNewPath);
1353
+ this, "/" + sNewPath);
1240
1354
  // set the resource path for late property requests
1241
- this.oCache.setResourcePath(sNewPath.slice(1));
1355
+ this.oCache.setResourcePath(sNewPath);
1242
1356
 
1243
1357
  return this.oReturnValueContext;
1244
1358
  }
@@ -1260,19 +1374,30 @@ sap.ui.define([
1260
1374
  * 3. EntitySetPath of operation is the binding parameter.
1261
1375
  * 4. Operation binding has
1262
1376
  * (a) a V4 parent context which
1263
- * (b) points to an entity from an entity set w/o navigation properties.
1377
+ * (b) points to an entity from an entity set or the entity set itself w/ a maximum of one
1378
+ * navigation property.
1264
1379
  *
1265
1380
  * BEWARE: It is the caller's duty to check 1. through 4.(a) via
1266
1381
  * {@link #isReturnValueLikeBindingParameter}!
1267
1382
  *
1268
- * @returns {boolean} Whether a return value context is created
1383
+ * BEWARE: In {@link #addQueryOptionsForReturnValueContext} the flag
1384
+ * <code>this.oOperation.bAdditionalQueryOptionsForRVC</code> ist set. Until this is done this
1385
+ * function will also return true, because it seems possible to create a return value context.
1386
+ * If it was possbile to determine the additional needed query options in
1387
+ * {@link #addQueryOptionsForReturnValueContext}, we can be sure that it is possible to create a
1388
+ * return value context.
1389
+ *
1390
+ * @returns {boolean} Whether it seems possible to create a return value context
1269
1391
  *
1270
1392
  * @private
1271
1393
  */
1272
1394
  ODataContextBinding.prototype.hasReturnValueContext = function () {
1273
1395
  var aMetaSegments = _Helper.getMetaPath(this.getResolvedPath()).split("/");
1274
1396
 
1275
- // case 4b
1397
+ if (aMetaSegments.length === 4) {
1398
+ return this.oOperation.bAdditionalQueryOptionsForRVC !== false;
1399
+ }
1400
+
1276
1401
  return aMetaSegments.length === 3
1277
1402
  && this.oModel.getMetaModel().getObject("/" + aMetaSegments[1]).$kind === "EntitySet";
1278
1403
  };
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
58
58
  * @public
59
59
  * @since 1.37.0
60
- * @version 1.118.0
60
+ * @version 1.119.1
61
61
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -145,7 +145,7 @@ sap.ui.define([
145
145
  // #destroyPreviousContexts after the next call to #createContexts.
146
146
  // A kept-alive context may be parked here for a longer time, with undefined index.
147
147
  this.mPreviousContextsByPath = {};
148
- this.aPreviousData = [];
148
+ this.aPreviousData = null; // no previous data for E.C.D. known yet
149
149
  this.bRefreshKeptElements = false; // refresh kept elements when resuming?
150
150
  this.sResumeAction = undefined; // a special resume action for $$sharedRequest
151
151
  this.bSharedRequest = "$$sharedRequest" in mParameters
@@ -281,7 +281,7 @@ sap.ui.define([
281
281
  * @param {string} sNewPath - The path with the transient predicate replaced
282
282
  */
283
283
  function adjustPreviousData(sOldPath, sNewPath) {
284
- var iIndex = that.aPreviousData.indexOf(sOldPath);
284
+ var iIndex = that.aPreviousData?.indexOf(sOldPath);
285
285
 
286
286
  if (iIndex >= 0) {
287
287
  that.aPreviousData[iIndex] = sNewPath;
@@ -377,8 +377,8 @@ sap.ui.define([
377
377
  *
378
378
  * @param {sap.ui.base.Event} oEvent
379
379
  * The event object
380
- * @param {object} oEvent.getParameters
381
- * Object containing all event parameters
380
+ * @param {function():Object<any>} oEvent.getParameters
381
+ * Function which returns an object containing all event parameters
382
382
  * @param {sap.ui.model.ChangeReason} oEvent.getParameters.reason
383
383
  * The reason for the 'change' event is
384
384
  * <ul>
@@ -410,7 +410,8 @@ sap.ui.define([
410
410
  *
411
411
  * @param {sap.ui.base.Event} oEvent The event object
412
412
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
413
- * @param {object} oEvent.getParameters Object containing all event parameters
413
+ * @param {function():Object<any>} oEvent.getParameters
414
+ * Function which returns an object containing all event parameters
414
415
  * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters.context The affected context
415
416
  *
416
417
  * @event sap.ui.model.odata.v4.ODataListBinding#createActivate
@@ -426,7 +427,8 @@ sap.ui.define([
426
427
  *
427
428
  * @param {sap.ui.base.Event} oEvent The event object
428
429
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
429
- * @param {object} oEvent.getParameters Object containing all event parameters
430
+ * @param {function():Object<any>} oEvent.getParameters
431
+ * Function which returns an object containing all event parameters
430
432
  * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters.context
431
433
  * The context for the created entity
432
434
  * @param {boolean} oEvent.getParameters.success
@@ -445,7 +447,8 @@ sap.ui.define([
445
447
  *
446
448
  * @param {sap.ui.base.Event} oEvent The event object
447
449
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
448
- * @param {object} oEvent.getParameters Object containing all event parameters
450
+ * @param {function():Object<any>} oEvent.getParameters
451
+ * Function which returns an object containing all event parameters
449
452
  * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters.context
450
453
  * The context for the created entity
451
454
  *
@@ -478,8 +481,8 @@ sap.ui.define([
478
481
  * The event object
479
482
  * @param {function} oEvent.cancelBubble
480
483
  * A callback function to prevent that the event is bubbled up to the model
481
- * @param {object} oEvent.getParameters
482
- * Object containing all event parameters
484
+ * @param {function():Object<any>} oEvent.getParameters
485
+ * Function which returns an object containing all event parameters
483
486
  * @param {object} [oEvent.getParameters.data]
484
487
  * An empty data object if a back-end request succeeds
485
488
  * @param {Error} [oEvent.getParameters.error] The error object if a back-end request failed.
@@ -518,7 +521,8 @@ sap.ui.define([
518
521
  *
519
522
  * @param {sap.ui.base.Event} oEvent The event object
520
523
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
521
- * @param {object} oEvent.getParameters Object containing all event parameters
524
+ * @param {function():Object<any>} oEvent.getParameters
525
+ * Function which returns an object containing all event parameters
522
526
  * @param {boolean} oEvent.getParameters.success
523
527
  * Whether all PATCHes are successfully processed
524
528
  *
@@ -550,8 +554,8 @@ sap.ui.define([
550
554
  *
551
555
  * @param {sap.ui.base.Event} oEvent
552
556
  * The event object
553
- * @param {object} oEvent.getParameters
554
- * Object containing all event parameters
557
+ * @param {function():Object<any>} oEvent.getParameters
558
+ * Function which returns an object containing all event parameters
555
559
  * @param {sap.ui.model.ChangeReason} oEvent.getParameters.reason
556
560
  * The reason for the 'refresh' event could be
557
561
  * <ul>
@@ -661,13 +665,15 @@ sap.ui.define([
661
665
  *
662
666
  * @param {sap.ui.model.odata.v4.Context} oContext
663
667
  * The context corresponding to the group node
668
+ * @param {boolean} [bSilent]
669
+ * Whether no ("change") events should be fired
664
670
  * @throws {Error}
665
671
  * If the binding's root binding is suspended
666
672
  *
667
673
  * @private
668
674
  * @see #expand
669
675
  */
670
- ODataListBinding.prototype.collapse = function (oContext) {
676
+ ODataListBinding.prototype.collapse = function (oContext, bSilent) {
671
677
  var aContexts = this.aContexts,
672
678
  iCount = this.oCache.collapse(
673
679
  _Helper.getRelativePath(oContext.getPath(), this.oHeaderContext.getPath())),
@@ -685,7 +691,9 @@ sap.ui.define([
685
691
  }
686
692
  }
687
693
  this.iMaxLength -= iCount;
688
- this._fireChange({reason : ChangeReason.Change});
694
+ if (!bSilent) {
695
+ this._fireChange({reason : ChangeReason.Change});
696
+ }
689
697
  } // else: collapse before expand has finished
690
698
  };
691
699
 
@@ -768,9 +776,9 @@ sap.ui.define([
768
776
  * {@link sap.ui.model.odata.v4.Context} instance given as
769
777
  * <code>oInitialData["@$ui5.node.parent"]</code>. <code>oAggregation.expandTo</code> (see
770
778
  * {@link #setAggregation}) must be one, <code>bSkipRefresh</code> must be set, but both
771
- * <code>bAtEnd</code> and <code>bInactive</code> must not be set. No other creation must be
772
- * pending, and no other modification (including collapse of some ancestor node) must happen
773
- * while this creation is pending!
779
+ * <code>bAtEnd</code> and <code>bInactive</code> must not be set. No other creation or
780
+ * {@link sap.ui.model.odata.v4.Context#move move} must be pending, and no other modification
781
+ * (including collapse of some ancestor node) must happen while this creation is pending!
774
782
  *
775
783
  * @param {Object<any>} [oInitialData={}]
776
784
  * The initial data for the created entity
@@ -1616,7 +1624,7 @@ sap.ui.define([
1616
1624
 
1617
1625
  if (oCache) {
1618
1626
  if (!oCache.hasSentRequest() && ODataListBinding.isBelowCreated(oContext)) {
1619
- aElements = oContext.getAndRemoveValue(that.sPath);
1627
+ aElements = oContext.getAndRemoveCollection(that.sPath);
1620
1628
  if (aElements) { // there is a collection from a finished deep create
1621
1629
  // copy the created elements into the newly created cache
1622
1630
  oCache.setPersistedCollection(aElements);
@@ -2058,6 +2066,9 @@ sap.ui.define([
2058
2066
  * <li> "$DistanceFromRootProperty" holds the path to the property which provides the raw
2059
2067
  * value for "@$ui5.node.level" (minus one) and should be used only to interpret the
2060
2068
  * response retrieved via {@link #getDownloadUrl}.
2069
+ * <li> "$DrillStateProperty" holds the path to the property which provides the raw value
2070
+ * for "@$ui5.node.isExpanded" and should be used only to interpret the response retrieved
2071
+ * via {@link #getDownloadUrl}.
2061
2072
  * <li> "$NodeProperty" holds the path to the property which provides the hierarchy node
2062
2073
  * value. That property is always $select'ed automatically and can be accessed as usual.
2063
2074
  * </ul>
@@ -2071,7 +2082,8 @@ sap.ui.define([
2071
2082
  ODataListBinding.prototype.getAggregation = function (bVerbose) {
2072
2083
  return _Helper.clone(this.mParameters.$$aggregation, function (sKey, vValue) {
2073
2084
  return sKey[0] === "$"
2074
- && !(bVerbose && ["$DistanceFromRootProperty", "$NodeProperty"].includes(sKey))
2085
+ && !(bVerbose && ["$DistanceFromRootProperty", "$DrillStateProperty",
2086
+ "$NodeProperty"].includes(sKey))
2075
2087
  ? undefined
2076
2088
  : vValue;
2077
2089
  });
@@ -2248,7 +2260,7 @@ sap.ui.define([
2248
2260
  }
2249
2261
 
2250
2262
  if (!this.isResolved()) { // unresolved relative binding
2251
- this.aPreviousData = []; // compute diff from scratch when binding is resolved again
2263
+ this.aPreviousData = null; // compute diff from scratch when binding is resolved again
2252
2264
  return [];
2253
2265
  }
2254
2266
 
@@ -2316,7 +2328,7 @@ sap.ui.define([
2316
2328
  };
2317
2329
  }
2318
2330
  if (bFireChange) {
2319
- if (bChanged || (that.oDiff && that.oDiff.aDiff.length)) {
2331
+ if (bChanged || (that.oDiff && that.oDiff.aDiff?.length)) {
2320
2332
  that._fireChange({reason : sChangeReason});
2321
2333
  } else { // we cannot keep a diff if we do not tell the control to fetch it!
2322
2334
  that.oDiff = undefined;
@@ -2490,7 +2502,7 @@ sap.ui.define([
2490
2502
  * The length of the range requested in getContexts
2491
2503
  * @returns {object}
2492
2504
  * The array of differences which is the comparison of current versus previous data as given
2493
- * by {@link #getContextData}.
2505
+ * by {@link #getContextData}, or <code>null</code> in case no previous data is known.
2494
2506
  *
2495
2507
  * @private
2496
2508
  */
@@ -2502,7 +2514,7 @@ sap.ui.define([
2502
2514
  return that.getContextData(oContext);
2503
2515
  });
2504
2516
 
2505
- return this.diffData(aPreviousData, this.aPreviousData);
2517
+ return aPreviousData ? this.diffData(aPreviousData, this.aPreviousData) : null;
2506
2518
  };
2507
2519
 
2508
2520
  /**
@@ -3061,6 +3073,64 @@ sap.ui.define([
3061
3073
  return aContexts;
3062
3074
  };
3063
3075
 
3076
+ /**
3077
+ * Moves the given (child) node to the given parent.
3078
+ *
3079
+ * @param {sap.ui.model.odata.v4.Context} oChildContext - The (child) node to be moved
3080
+ * @param {sap.ui.model.odata.v4.Context} oParentContext - The new parent's context
3081
+ * @returns {sap.ui.base.SyncPromise<void>}
3082
+ * A promise which is resolved without a defined result when the move is finished, or
3083
+ * rejected in case of an error
3084
+ *
3085
+ * @private
3086
+ */
3087
+ ODataListBinding.prototype.move = function (oChildContext, oParentContext) {
3088
+ /*
3089
+ * Sets the <code>iIndex</code> of every context instance inside the given range.
3090
+ *
3091
+ * @param {number} iFrom - Start index
3092
+ * @param {number} iToInclusive - Inclusive end index
3093
+ */
3094
+ const setIndices = (iFrom, iToInclusive) => {
3095
+ for (let i = iFrom; i <= iToInclusive; i += 1) {
3096
+ if (this.aContexts[i]) {
3097
+ this.aContexts[i].iIndex = i;
3098
+ }
3099
+ }
3100
+ };
3101
+
3102
+ const bExpanded = oChildContext.isExpanded();
3103
+ if (bExpanded) {
3104
+ this.collapse(oChildContext, /*bSilent*/true);
3105
+ }
3106
+
3107
+ const sChildPath = oChildContext.getCanonicalPath().slice(1);
3108
+ const sParentPath = oParentContext.getCanonicalPath().slice(1); // before #lockGroup!
3109
+ const oGroupLock = this.lockGroup(this.getUpdateGroupId(), true, true);
3110
+
3111
+ return this.oCache.move(oGroupLock, sChildPath, sParentPath).then(() => {
3112
+ const iChildIndex = this.aContexts.indexOf(oChildContext);
3113
+ const iParentIndex = this.aContexts.indexOf(oParentContext); // Note: !== iChildIndex
3114
+ if (iChildIndex < iParentIndex) {
3115
+ this.aContexts.splice(iParentIndex + 1, 0, oChildContext);
3116
+ this.aContexts.splice(iChildIndex, 1); // parent moves to lower index!
3117
+ setIndices(iChildIndex, iParentIndex);
3118
+ } else if (iChildIndex > iParentIndex + 1) {
3119
+ this.aContexts.splice(iChildIndex, 1); // parent unaffected!
3120
+ this.aContexts.splice(iParentIndex + 1, 0, oChildContext);
3121
+ setIndices(iParentIndex + 1, iChildIndex);
3122
+ } // else: iChildIndex === iParentIndex + 1 => nothing to do
3123
+ if (!oChildContext.created()) {
3124
+ oChildContext.setCreatedPersisted();
3125
+ }
3126
+ if (bExpanded) {
3127
+ this.expand(oChildContext); // guaranteed to by sync! incl. _fireChange
3128
+ } else {
3129
+ this._fireChange({reason : ChangeReason.Change});
3130
+ }
3131
+ });
3132
+ };
3133
+
3064
3134
  /**
3065
3135
  * Notification from the cache that the collection has changed. Currently, only bindings with
3066
3136
  * bSharedRequest register at the cache and are notified when the cache has been reset.
@@ -156,7 +156,7 @@ sap.ui.define([
156
156
  * @hideconstructor
157
157
  * @public
158
158
  * @since 1.37.0
159
- * @version 1.118.0
159
+ * @version 1.119.1
160
160
  */
161
161
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
162
162
  constructor : constructor
@@ -35,12 +35,12 @@ sap.ui.define([
35
35
  "sap/base/assert",
36
36
  "sap/base/Log",
37
37
  "sap/ui/base/SyncPromise",
38
- "sap/ui/core/cache/CacheManager",
39
38
  "sap/ui/core/Configuration",
40
39
  "sap/ui/core/library",
40
+ "sap/ui/core/Messaging",
41
41
  "sap/ui/core/Rendering",
42
+ "sap/ui/core/cache/CacheManager",
42
43
  "sap/ui/core/message/Message",
43
- "sap/ui/core/Messaging",
44
44
  "sap/ui/model/BindingMode",
45
45
  "sap/ui/model/Context",
46
46
  "sap/ui/model/Model",
@@ -48,7 +48,7 @@ sap.ui.define([
48
48
  "sap/ui/thirdparty/URI"
49
49
  ], function (ODataContextBinding, ODataListBinding, ODataMetaModel, ODataPropertyBinding,
50
50
  SubmitMode, _GroupLock, _Helper, _MetadataRequestor, _Parser, _Requestor, assert, Log,
51
- SyncPromise, CacheManager, Configuration, coreLibrary, Rendering, Message, Messaging,
51
+ SyncPromise, Configuration, coreLibrary, Messaging, Rendering, CacheManager, Message,
52
52
  BindingMode, BaseContext, Model, OperationMode, URI) {
53
53
  "use strict";
54
54
 
@@ -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.118.0
237
+ * @version 1.119.1
238
238
  */
239
239
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
240
240
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -465,8 +465,8 @@ sap.ui.define([
465
465
  *
466
466
  * @param {sap.ui.base.Event} oEvent
467
467
  * The event object
468
- * @param {object} oEvent.getParameters
469
- * Object containing all event parameters
468
+ * @param {function():Object<any>} oEvent.getParameters
469
+ * Function which returns an object containing all event parameters
470
470
  * @param {object} [oEvent.getParameters.data]
471
471
  * An empty data object if a back-end request succeeds
472
472
  * @param {Error} [oEvent.getParameters.error]
@@ -509,8 +509,8 @@ sap.ui.define([
509
509
  *
510
510
  * @param {sap.ui.base.Event} oEvent
511
511
  * The event object
512
- * @param {object} oEvent.getParameters
513
- * Object containing all event parameters
512
+ * @param {function():Object<any>} oEvent.getParameters
513
+ * Function which returns an object containing all event parameters
514
514
  * @param {string} [oEvent.getParameters.path]
515
515
  * The absolute path to the entity which caused the event. The path is only provided for
516
516
  * additional property requests; for other requests it is <code>undefined</code>.
@@ -540,8 +540,8 @@ sap.ui.define([
540
540
  *
541
541
  * @param {sap.ui.base.Event} oEvent
542
542
  * The event object
543
- * @param {object} oEvent.getParameters
544
- * Object containing all event parameters
543
+ * @param {function():Object<any>} oEvent.getParameters
544
+ * Function which returns an object containing all event parameters
545
545
  * @param {sap.ui.model.Context} [oEvent.getParameters.context]
546
546
  * The property binding's {@link sap.ui.model.Binding#getContext context}, if available
547
547
  * @param {string} oEvent.getParameters.path