@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
@@ -792,8 +792,10 @@ sap.ui.define([
792
792
  return SyncPromise.resolve(sResolvedChildPath);
793
793
  }
794
794
 
795
+ // A binding w/o cache must skip this optimization and pass on to the parent binding;
796
+ // otherwise late properties might be missing later
795
797
  oCanUseCachePromise = this.mCanUseCachePromiseByChildPath[sChildPath];
796
- if (oCanUseCachePromise && bIsProperty) {
798
+ if (bIsProperty && this.oCache !== null && oCanUseCachePromise) {
797
799
  return oCanUseCachePromise.then(function (sOldReducedPath) {
798
800
  if (!sOldReducedPath) {
799
801
  return undefined;
@@ -905,7 +907,7 @@ sap.ui.define([
905
907
  }
906
908
  return sReducedPath;
907
909
  });
908
- if (bIsProperty && !oContext.getPath().includes("($uid=")) {
910
+ if (bIsProperty && this.oCache !== null && !oContext.getPath().includes("($uid=")) {
909
911
  this.mCanUseCachePromiseByChildPath[sChildPath] = oCanUseCachePromise;
910
912
  }
911
913
  this.aChildCanUseCachePromises.push(oCanUseCachePromise);
@@ -6,6 +6,7 @@
6
6
 
7
7
  //Provides class sap.ui.model.odata.v4.ODataPropertyBinding
8
8
  sap.ui.define([
9
+ "./Context",
9
10
  "./ODataBinding",
10
11
  "./lib/_Cache",
11
12
  "./lib/_Helper",
@@ -13,9 +14,8 @@ sap.ui.define([
13
14
  "sap/ui/base/SyncPromise",
14
15
  "sap/ui/model/BindingMode",
15
16
  "sap/ui/model/ChangeReason",
16
- "sap/ui/model/odata/v4/Context",
17
17
  "sap/ui/model/PropertyBinding"
18
- ], function (asODataBinding, _Cache, _Helper, Log, SyncPromise, BindingMode, ChangeReason, Context,
18
+ ], function (Context, asODataBinding, _Cache, _Helper, Log, SyncPromise, BindingMode, ChangeReason,
19
19
  PropertyBinding) {
20
20
  "use strict";
21
21
  /*eslint max-nested-callbacks: 0 */
@@ -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.118.0
45
+ * @version 1.119.1
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
@@ -118,8 +118,8 @@ sap.ui.define([
118
118
  *
119
119
  * @param {sap.ui.base.Event} oEvent
120
120
  * The event object
121
- * @param {object} oEvent.getParameters
122
- * Object containing all event parameters
121
+ * @param {function():Object<any>} oEvent.getParameters
122
+ * Function which returns an object containing all event parameters
123
123
  * @param {sap.ui.model.ChangeReason} oEvent.getParameters.reason
124
124
  * The reason for the 'change' event could be
125
125
  * <ul>
@@ -157,8 +157,8 @@ sap.ui.define([
157
157
  *
158
158
  * @param {sap.ui.base.Event} oEvent
159
159
  * The event object
160
- * @param {object} oEvent.getParameters
161
- * Object containing all event parameters
160
+ * @param {function():Object<any>} oEvent.getParameters
161
+ * Function which returns an object containing all event parameters
162
162
  * @param {object} [oEvent.getParameters.data]
163
163
  * An empty data object if a back-end request succeeds
164
164
  * @param {Error} [oEvent.getParameters.error] The error object if a back-end request failed.
@@ -368,12 +368,9 @@ sap.ui.define([
368
368
  * @private
369
369
  */
370
370
  ODataPropertyBinding.prototype.deregisterChangeListener = function () {
371
- var that = this;
372
-
373
- this.withCache(function (_oCache, sPath, oBinding) {
374
- oBinding.doDeregisterChangeListener(sPath, that);
375
- }, /*sPath*/"", /*bSync*/false, /*bWithOrWithoutCache*/true)
376
- .catch(this.oModel.getReporter());
371
+ if (this.sReducedPath) {
372
+ this.doDeregisterChangeListener(this.sReducedPath, this);
373
+ }
377
374
  };
378
375
 
379
376
  /**
@@ -14,8 +14,8 @@ sap.ui.define([
14
14
  "./_MinMaxHelper",
15
15
  "sap/base/Log",
16
16
  "sap/ui/base/SyncPromise"
17
- ], function (_AggregationHelper, _Cache, _ConcatHelper, _GroupLock, _Helper, _MinMaxHelper,
18
- Log, SyncPromise) {
17
+ ], function (_AggregationHelper, _Cache, _ConcatHelper, _GroupLock, _Helper, _MinMaxHelper, Log,
18
+ SyncPromise) {
19
19
  "use strict";
20
20
 
21
21
  //*********************************************************************************************
@@ -120,7 +120,7 @@ sap.ui.define([
120
120
  // make _AggregationCache a _Cache, but actively disinherit some critical methods
121
121
  _AggregationCache.prototype = Object.create(_Cache.prototype);
122
122
  _AggregationCache.prototype.addTransientCollection = null;
123
- _AggregationCache.prototype.getAndRemoveValue = null;
123
+ _AggregationCache.prototype.getAndRemoveCollection = null;
124
124
 
125
125
  /**
126
126
  * Deletes an entity on the server and in the cached data.
@@ -191,6 +191,7 @@ sap.ui.define([
191
191
  iFlatIndex = iParentIndex + iIndex + 1;
192
192
  this.restoreElement(this.aElements, iFlatIndex, oElement, "");
193
193
  this.shiftIndex(iFlatIndex, iOffset);
194
+ _Helper.setPrivateAnnotation(oElement, "index", iIndex);
194
195
  }
195
196
  fnCallback(iFlatIndex, iOffset);
196
197
  });
@@ -332,6 +333,8 @@ sap.ui.define([
332
333
 
333
334
  function collapse(j) {
334
335
  delete aElements.$byPredicate[_Helper.getPrivateAnnotation(aElements[j], "predicate")];
336
+ delete aElements.$byPredicate[
337
+ _Helper.getPrivateAnnotation(aElements[j], "transientPredicate")];
335
338
  iCount += 1;
336
339
  }
337
340
 
@@ -497,13 +500,14 @@ sap.ui.define([
497
500
  });
498
501
  }
499
502
  if (oGroupNode) {
503
+ const sParentFilter = _Helper.getPrivateAnnotation(oGroupNode, "filter")
504
+ || _Helper.getKeyFilter(oGroupNode, oAggregation.$metaPath, this.getTypes());
500
505
  // Note: parent filter is just eq/and, no need for parentheses, but
501
506
  // $$filterBeforeAggregate is a black box! Put specific filter 1st for performance!
502
- mQueryOptions.$$filterBeforeAggregate
503
- = _Helper.getPrivateAnnotation(oGroupNode, "filter")
504
- + (mQueryOptions.$$filterBeforeAggregate
505
- ? " and (" + mQueryOptions.$$filterBeforeAggregate + ")"
506
- : "");
507
+ mQueryOptions.$$filterBeforeAggregate = sParentFilter
508
+ + (mQueryOptions.$$filterBeforeAggregate
509
+ ? " and (" + mQueryOptions.$$filterBeforeAggregate + ")"
510
+ : "");
507
511
  }
508
512
  if (!bHasConcatHelper) {
509
513
  // Note: UI5__count currently handled only by _ConcatHelper!
@@ -538,15 +542,11 @@ sap.ui.define([
538
542
  * @see #collapse
539
543
  */
540
544
  _AggregationCache.prototype.expand = function (oGroupLock, vGroupNodeOrPath, fnDataRequested) {
541
- var oCache,
542
- iCount,
543
- aElements = this.aElements,
545
+ var iCount,
544
546
  oGroupNode = typeof vGroupNodeOrPath === "string"
545
547
  ? this.getValue(vGroupNodeOrPath)
546
548
  : vGroupNodeOrPath,
547
- iIndex,
548
549
  aSpliced = _Helper.getPrivateAnnotation(oGroupNode, "spliced"),
549
- bStale,
550
550
  that = this;
551
551
 
552
552
  if (vGroupNodeOrPath !== oGroupNode) {
@@ -557,20 +557,20 @@ sap.ui.define([
557
557
 
558
558
  if (aSpliced) {
559
559
  _Helper.deletePrivateAnnotation(oGroupNode, "spliced");
560
- bStale = aSpliced.$stale;
561
-
562
- iIndex = aElements.indexOf(oGroupNode) + 1;
560
+ const aOldElements = this.aElements;
561
+ const iIndex = aOldElements.indexOf(oGroupNode) + 1;
563
562
  // insert aSpliced at iIndex
564
- this.aElements = aElements.concat(aSpliced, aElements.splice(iIndex));
565
- this.aElements.$byPredicate = aElements.$byPredicate;
566
-
563
+ this.aElements = aOldElements.concat(aSpliced, aOldElements.splice(iIndex));
564
+ this.aElements.$byPredicate = aOldElements.$byPredicate;
567
565
  iCount = aSpliced.length;
568
- this.aElements.$count = aElements.$count + iCount;
566
+ this.aElements.$count = aOldElements.$count + iCount;
567
+ const iDiff = oGroupNode["@$ui5.node.level"] + 1 - aSpliced[0]["@$ui5.node.level"];
569
568
  aSpliced.forEach(function (oElement) {
570
569
  var sPredicate = _Helper.getPrivateAnnotation(oElement, "predicate");
571
570
 
571
+ oElement["@$ui5.node.level"] += iDiff;
572
572
  if (!_Helper.hasPrivateAnnotation(oElement, "placeholder")) {
573
- if (bStale) {
573
+ if (aSpliced.$stale) {
574
574
  that.turnIntoPlaceholder(oElement, sPredicate);
575
575
  } else {
576
576
  that.aElements.$byPredicate[sPredicate] = oElement;
@@ -584,7 +584,7 @@ sap.ui.define([
584
584
  return SyncPromise.resolve(iCount);
585
585
  }
586
586
 
587
- oCache = _Helper.getPrivateAnnotation(oGroupNode, "cache");
587
+ let oCache = _Helper.getPrivateAnnotation(oGroupNode, "cache");
588
588
  if (!oCache) {
589
589
  oCache = this.createGroupLevelCache(oGroupNode);
590
590
  _Helper.setPrivateAnnotation(oGroupNode, "cache", oCache);
@@ -833,6 +833,87 @@ sap.ui.define([
833
833
  });
834
834
  };
835
835
 
836
+ /**
837
+ * Moves the (child) node with the given path to the parent node with the given path by sending
838
+ * a PATCH request for "<parent navigation>@odata.bind".
839
+ *
840
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
841
+ * A lock for the group to associate the requests with
842
+ * @param {string} sChildPath
843
+ * The (child) node's path relative to the cache
844
+ * @param {string} sParentPath
845
+ * The parent node's path relative to the cache
846
+ * @returns {sap.ui.base.SyncPromise<void>}
847
+ * A promise which is resolved without a defined result when the move is finished, or
848
+ * rejected in case of an error
849
+ *
850
+ * @public
851
+ */
852
+ _AggregationCache.prototype.move = function (oGroupLock, sChildPath, sParentPath) {
853
+ const sChildPredicate = sChildPath.slice(sChildPath.indexOf("("));
854
+ const oChildNode = this.aElements.$byPredicate[sChildPredicate];
855
+
856
+ return this.oRequestor.request("PATCH", sChildPath, oGroupLock, {
857
+ "If-Match" : oChildNode,
858
+ Prefer : "return=minimal"
859
+ }, {[this.oAggregation.$ParentNavigationProperty + "@odata.bind"] : sParentPath},
860
+ /*fnSubmit*/null, function fnCancel() { /*nothing to do*/ })
861
+ .then((oPatchResult) => {
862
+ // update the cache with the PATCH response (Note: "@odata.etag" is optional!)
863
+ _Helper.updateExisting(this.mChangeListeners, sChildPredicate, oChildNode,
864
+ {"@odata.etag" : oPatchResult["@odata.etag"]});
865
+
866
+ const iOldIndex = this.aElements.indexOf(oChildNode);
867
+ this.shiftIndex(iOldIndex, -1);
868
+ this.aElements.splice(iOldIndex, 1);
869
+
870
+ // remove original element from its cache's collection
871
+ const oOldParentCache = _Helper.getPrivateAnnotation(oChildNode, "parent");
872
+ oOldParentCache.removeElement(undefined,
873
+ _Helper.getPrivateAnnotation(oChildNode, "index"), sChildPredicate, "");
874
+ if (oOldParentCache.getValue("$count") === 0) { // last child has gone
875
+ const oOldParent = this.aElements[iOldIndex - 1];
876
+ _Helper.updateAll(this.mChangeListeners,
877
+ _Helper.getPrivateAnnotation(oOldParent, "predicate"),
878
+ oOldParent, {"@$ui5.node.isExpanded" : undefined}); // a leaf now
879
+ // _Helper.updateAll only sets it to undefined
880
+ delete oOldParent["@$ui5.node.isExpanded"];
881
+ _Helper.deletePrivateAnnotation(oOldParent, "cache");
882
+ oOldParentCache.setActive(false);
883
+ }
884
+
885
+ // once oChildNode has moved, it should look 'created' because of its new position
886
+ if (!_Helper.hasPrivateAnnotation(oChildNode, "transientPredicate")) {
887
+ const sTransientPredicate = "($uid=" + _Helper.uid() + ")";
888
+ _Helper.setPrivateAnnotation(oChildNode, "transientPredicate",
889
+ sTransientPredicate);
890
+ this.aElements.$byPredicate[sTransientPredicate] = oChildNode;
891
+ _Helper.updateAll(this.mChangeListeners, sChildPredicate, oChildNode,
892
+ {"@$ui5.context.isTransient" : false});
893
+ }
894
+
895
+ const sParentPredicate = sParentPath.slice(sParentPath.indexOf("("));
896
+ const oParentNode = this.aElements.$byPredicate[sParentPredicate];
897
+ let oCache = _Helper.getPrivateAnnotation(oParentNode, "cache");
898
+ if (!oCache) {
899
+ oCache = this.createGroupLevelCache(oParentNode);
900
+ oCache.setEmpty();
901
+ _Helper.setPrivateAnnotation(oParentNode, "cache", oCache);
902
+ _Helper.updateAll(this.mChangeListeners, sParentPredicate, oParentNode,
903
+ {"@$ui5.node.isExpanded" : true}); // not a leaf anymore
904
+ }
905
+ oCache.restoreElement(undefined, 0, oChildNode, "");
906
+ _Helper.setPrivateAnnotation(oChildNode, "index", 0);
907
+ _Helper.setPrivateAnnotation(oChildNode, "parent", oCache);
908
+
909
+ _Helper.updateAll(this.mChangeListeners, sChildPredicate, oChildNode,
910
+ {"@$ui5.node.level" : oParentNode["@$ui5.node.level"] + 1});
911
+ const iNewIndex = this.aElements.indexOf(oParentNode) + 1;
912
+ this.aElements.splice(iNewIndex, 0, oChildNode);
913
+ this.shiftIndex(iNewIndex, +1); // relies on "parent" & "@$ui5.node.level"!
914
+ });
915
+ };
916
+
836
917
  /**
837
918
  * Returns a promise to be resolved with an OData object for a range of the requested data.
838
919
  *
@@ -1273,7 +1354,8 @@ sap.ui.define([
1273
1354
  /**
1274
1355
  * Turns the given element, which has the given predicate, into a placeholder which keeps all
1275
1356
  * private annotations plus the hierarchy node value. The original element is removed from its
1276
- * corresponding cache and must not be used any longer.
1357
+ * corresponding cache and must not be used any longer. Created persisted elements loose their
1358
+ * special treatment!
1277
1359
  *
1278
1360
  * @param {object} oElement - An element
1279
1361
  * @param {string} sPredicate - Its predicate
@@ -1406,8 +1488,6 @@ sap.ui.define([
1406
1488
 
1407
1489
  case "collapsed":
1408
1490
  bIsExpanded = false;
1409
- _Helper.setPrivateAnnotation(oElement, "filter",
1410
- _Helper.getKeyFilter(oElement, sMetaPath, mTypeForMetaPath));
1411
1491
  break;
1412
1492
 
1413
1493
  default: // "leaf"
@@ -158,7 +158,7 @@ sap.ui.define([
158
158
  && oPlaceholder["@$ui5.node.level"] !== 0) {
159
159
  throw new Error("Wrong placeholder");
160
160
  }
161
- ["descendants", "filter", "predicate"].forEach(function (sAnnotation) {
161
+ ["descendants", "predicate"].forEach(function (sAnnotation) {
162
162
  if (_Helper.hasPrivateAnnotation(oPlaceholder, sAnnotation)
163
163
  && _Helper.getPrivateAnnotation(oPlaceholder, sAnnotation)
164
164
  !== _Helper.getPrivateAnnotation(oElement, sAnnotation)) {
@@ -526,9 +526,7 @@ sap.ui.define([
526
526
  select("LimitedDescendantCountProperty");
527
527
  }
528
528
  }
529
- if (!bAllLevels) {
530
- select("DrillStateProperty");
531
- }
529
+ select("DrillStateProperty");
532
530
  mQueryOptions.$apply = sApply;
533
531
 
534
532
  return mQueryOptions;
@@ -593,7 +591,7 @@ sap.ui.define([
593
591
  throw new Error("Not a matching value for '" + sPath + "'");
594
592
  }
595
593
  } else if (typeof vType === "object") {
596
- var bIsMap = "*" in vType;
594
+ const bIsMap = "*" in vType;
597
595
 
598
596
  if (typeof vValue !== "object" || !vValue || Array.isArray(vValue)) {
599
597
  throw new Error("Not an object value for '" + sPath + "'");
@@ -937,7 +937,7 @@ sap.ui.define([
937
937
  mQueryOptions,
938
938
  sRequestPath,
939
939
  sResourceMetaPath = _Helper.getMetaPath(sResourcePath),
940
- mTypeForMetaPath = this.fetchTypes().getResult(),
940
+ mTypeForMetaPath = this.getTypes(),
941
941
  aUpdateProperties,
942
942
  that = this;
943
943
 
@@ -1081,6 +1081,7 @@ sap.ui.define([
1081
1081
  * A promise that is resolved with a map from resource path + entity path to the type
1082
1082
  *
1083
1083
  * @private
1084
+ * @see #getTypes
1084
1085
  */
1085
1086
  _Cache.prototype.fetchTypes = function () {
1086
1087
  var aPromises, mTypeForMetaPath,
@@ -1146,21 +1147,31 @@ sap.ui.define([
1146
1147
  */
1147
1148
 
1148
1149
  /**
1149
- * Returns the value at the given path and removes it from the cache.
1150
+ * Returns the collection at the given path and removes it from the cache if it is marked as
1151
+ * transferable.
1150
1152
  *
1151
1153
  * @param {string} sPath - The relative path of the property
1152
- * @returns {any} The value
1153
- * @throws {Error} If the cache is shared
1154
+ * @returns {object[]|undefined} The collection or <code>undefined</code>
1155
+ * @throws {Error} If the cache is shared or if the given path does not point to a collection.
1154
1156
  *
1155
1157
  * @public
1156
1158
  */
1157
- _Cache.prototype.getAndRemoveValue = function (sPath) {
1159
+ _Cache.prototype.getAndRemoveCollection = function (sPath) {
1158
1160
  var aSegments = sPath.split("/"),
1159
1161
  sName = aSegments.pop(),
1160
1162
  oParent = this.fetchValue(_GroupLock.$cached, aSegments.join("/")).getResult(),
1161
1163
  vValue = oParent[sName];
1162
1164
 
1163
1165
  this.checkSharedRequest();
1166
+ if (vValue) {
1167
+ if (!Array.isArray(vValue)) {
1168
+ throw new Error(`${sPath} must point to a collection`);
1169
+ }
1170
+ if (!vValue.$transfer) {
1171
+ return undefined;
1172
+ }
1173
+ delete vValue.$transfer;
1174
+ }
1164
1175
  delete oParent[sName];
1165
1176
 
1166
1177
  return vValue;
@@ -1287,6 +1298,19 @@ sap.ui.define([
1287
1298
  return this.mQueryOptions;
1288
1299
  };
1289
1300
 
1301
+ /**
1302
+ * Returns the existing map from meta path to type.
1303
+ *
1304
+ * @returns {Object<object>}
1305
+ * A map from resource path + entity path to the type
1306
+ *
1307
+ * @private
1308
+ * @see #fetchTypes
1309
+ */
1310
+ _Cache.prototype.getTypes = function () {
1311
+ return this.fetchTypes().getResult();
1312
+ };
1313
+
1290
1314
  /**
1291
1315
  * Returns the requested data if available synchronously.
1292
1316
  *
@@ -1641,8 +1665,8 @@ sap.ui.define([
1641
1665
  * <code>$byPredicate</code>, <code>$created</code> and <code>$count</code>, and a collection
1642
1666
  * cache's limit and number of active elements (if applicable).
1643
1667
  *
1644
- * @param {object[]} aElements
1645
- * The array of elements
1668
+ * @param {object[]} [aElements]
1669
+ * The array of elements, defaults to a collection cache's own elements
1646
1670
  * @param {number} [iIndex]
1647
1671
  * The array index of the old element to be removed or <code>undefined</code> in case the
1648
1672
  * element is a kept-alive element without an index
@@ -1656,7 +1680,9 @@ sap.ui.define([
1656
1680
  *
1657
1681
  * @protected
1658
1682
  */
1659
- _Cache.prototype.removeElement = function (aElements, iIndex, sPredicate, sPath) {
1683
+ // eslint-disable-next-line default-param-last
1684
+ _Cache.prototype.removeElement = function (aElements = this.aElements, iIndex, sPredicate,
1685
+ sPath) {
1660
1686
  var oElement = aElements.$byPredicate[sPredicate],
1661
1687
  bDeleted = oElement["@$ui5.context.isDeleted"],
1662
1688
  sTransientPredicate = _Helper.getPrivateAnnotation(oElement, "transientPredicate");
@@ -1880,10 +1906,10 @@ sap.ui.define([
1880
1906
 
1881
1907
  /**
1882
1908
  * Restores the element in the given array at the given index, taking care of the array's
1883
- * <code>$created</code> and <code>$count</code>, and a collection cache's limit and number of
1884
- * active elements (if applicable).
1909
+ * <code>$byPredicate</code>, <code>$created</code> and <code>$count</code>, and a collection
1910
+ * cache's limit and number of active elements (if applicable).
1885
1911
  *
1886
- * @param {object[]} aElements - The array of elements
1912
+ * @param {object[]} [aElements] - The array of elements
1887
1913
  * @param {number} iIndex - The index to restore at
1888
1914
  * @param {object} oElement - The element to restore
1889
1915
  * @param {string} sPath
@@ -1894,7 +1920,9 @@ sap.ui.define([
1894
1920
  *
1895
1921
  * @protected
1896
1922
  */
1897
- _Cache.prototype.restoreElement = function (aElements, iIndex, oElement, sPath, iDeletedIndex) {
1923
+ // eslint-disable-next-line default-param-last
1924
+ _Cache.prototype.restoreElement = function (aElements = this.aElements, iIndex, oElement, sPath,
1925
+ iDeletedIndex) {
1898
1926
  this.adjustIndexes(sPath, aElements, iIndex, 1, iDeletedIndex);
1899
1927
  const sTransientPredicate = _Helper.getPrivateAnnotation(oElement, "transientPredicate");
1900
1928
  if (sTransientPredicate) {
@@ -1907,12 +1935,13 @@ sap.ui.define([
1907
1935
  }
1908
1936
  _Helper.addToCount(this.mChangeListeners, sPath, aElements, 1);
1909
1937
  aElements.splice(iIndex, 0, oElement);
1938
+ aElements.$byPredicate[_Helper.getPrivateAnnotation(oElement, "predicate")] = oElement;
1910
1939
  };
1911
1940
 
1912
1941
  /**
1913
1942
  * Adds or removes a usage of this cache. A cache with active usages must not be destroyed.
1914
- * If a usage is removed, all change listeners are removed too. Note: shared caches have no
1915
- * listeners.
1943
+ * If the last usage is removed, all change listeners are removed too. Note: shared caches have
1944
+ * no listeners except for the empty path (cf. <code>registerChangeListener("", th</code>).
1916
1945
  *
1917
1946
  * @param {boolean} bActive
1918
1947
  * Whether a usage is added or removed
@@ -2625,14 +2654,31 @@ sap.ui.define([
2625
2654
  };
2626
2655
 
2627
2656
  /**
2628
- * Drops the element with the given index and predicate from this cache's collection.
2657
+ * Drops the element with the given index and predicate from this cache's collection, so that it
2658
+ * will be read again from the server later on. Created persisted elements loose their special
2659
+ * treatment!
2629
2660
  *
2630
2661
  * @param {number} iIndex - An index
2631
2662
  * @param {string} sPredicate - A key predicate
2663
+ * @throws {Error} When the element with the given index is still transient
2664
+ *
2665
+ * @public
2632
2666
  */
2633
2667
  _CollectionCache.prototype.drop = function (iIndex, sPredicate) {
2668
+ const oElement = this.aElements[iIndex];
2669
+ if (oElement["@$ui5.context.isTransient"]) {
2670
+ throw new Error("Must not drop a transient element");
2671
+ }
2634
2672
  delete this.aElements[iIndex];
2635
2673
  delete this.aElements.$byPredicate[sPredicate];
2674
+
2675
+ const sTransientPredicate = _Helper.getPrivateAnnotation(oElement, "transientPredicate");
2676
+ if (sTransientPredicate) { // createdPersisted => persisted
2677
+ this.aElements.$created -= 1;
2678
+ this.iActiveElements -= 1;
2679
+ this.iLimit += 1;
2680
+ delete this.aElements.$byPredicate[sTransientPredicate];
2681
+ }
2636
2682
  };
2637
2683
 
2638
2684
  /**
@@ -2745,8 +2791,7 @@ sap.ui.define([
2745
2791
  function addKeyFilter(oElement) {
2746
2792
  var sKeyFilter;
2747
2793
 
2748
- mTypeForMetaPath = mTypeForMetaPath
2749
- || that.fetchTypes().getResult(); // Note: $metadata already read
2794
+ mTypeForMetaPath = mTypeForMetaPath || that.getTypes(); // Note: $metadata already read
2750
2795
  sKeyFilter = _Helper.getKeyFilter(oElement, that.sMetaPath, mTypeForMetaPath);
2751
2796
  if (sKeyFilter) {
2752
2797
  aKeyFilters.push(sKeyFilter);
@@ -3075,7 +3120,8 @@ sap.ui.define([
3075
3120
  * with a number property <code>$count</code> representing the element count on server-side;
3076
3121
  * <code>$count</code> may be <code>undefined</code>, but not <code>Infinity</code>). If an
3077
3122
  * HTTP request fails, the error from the _Requestor is returned and the requested range is
3078
- * reset to <code>undefined</code>.
3123
+ * reset to <code>undefined</code>. If the request has been obsoleted by a {@link #reset}, the
3124
+ * promise is rejected with an error having a property <code>canceled = true</code>.
3079
3125
  * @throws {Error} If given index or length is less than 0
3080
3126
  *
3081
3127
  * @public
@@ -3245,7 +3291,7 @@ sap.ui.define([
3245
3291
  return undefined;
3246
3292
  }
3247
3293
 
3248
- mTypes = this.fetchTypes().getResult(); // in this stage the promise is resolved
3294
+ mTypes = this.getTypes(); // in this stage the promise is resolved
3249
3295
 
3250
3296
  return this.oRequestor.request("GET", calculateKeptElementsQuery(), oGroupLock)
3251
3297
  .then(function (oResponse) {
@@ -3306,7 +3352,8 @@ sap.ui.define([
3306
3352
  * The function is called when the back-end requests have been sent.
3307
3353
  * @returns {sap.ui.base.SyncPromise}
3308
3354
  * A promise which is resolved without a defined result when the request is finished and
3309
- * rejected in case of error
3355
+ * rejected in case of error; if the request has been obsoleted by a {@link #reset} the error
3356
+ * has a property <code>canceled = true</code>)
3310
3357
  * @throws {Error}
3311
3358
  * If group ID is '$cached'. The error has a property <code>$cached = true</code>
3312
3359
  *
@@ -3331,6 +3378,11 @@ sap.ui.define([
3331
3378
  ]).then(function (aResult) {
3332
3379
  var iFiltered;
3333
3380
 
3381
+ if (oReadRequest.obsolete) {
3382
+ const oError = new Error("Request is obsolete");
3383
+ oError.canceled = true;
3384
+ throw oError;
3385
+ }
3334
3386
  that.checkRange(oPromise, oReadRequest.iStart, oReadRequest.iEnd);
3335
3387
  if (that.aElements.$tail === oPromise) {
3336
3388
  that.aElements.$tail = undefined;
@@ -3340,8 +3392,10 @@ sap.ui.define([
3340
3392
  return that.handleCount(oGroupLock, iTransientElements, oReadRequest.iStart,
3341
3393
  oReadRequest.iEnd, aResult[0], iFiltered);
3342
3394
  }).catch(function (oError) {
3343
- that.checkRange(oPromise, oReadRequest.iStart, oReadRequest.iEnd);
3344
- that.fill(undefined, oReadRequest.iStart, oReadRequest.iEnd);
3395
+ if (!oError.canceled) {
3396
+ that.checkRange(oPromise, oReadRequest.iStart, oReadRequest.iEnd);
3397
+ that.fill(undefined, oReadRequest.iStart, oReadRequest.iEnd);
3398
+ }
3345
3399
  throw oError;
3346
3400
  }).finally(function () {
3347
3401
  that.aReadRequests.splice(that.aReadRequests.indexOf(oReadRequest), 1);
@@ -3387,7 +3441,7 @@ sap.ui.define([
3387
3441
  mQueryOptions,
3388
3442
  sResourcePath,
3389
3443
  bSkip,
3390
- mTypeForMetaPath = this.fetchTypes().getResult(),
3444
+ mTypeForMetaPath = this.getTypes(),
3391
3445
  that = this;
3392
3446
 
3393
3447
  this.checkSharedRequest();
@@ -3557,6 +3611,10 @@ sap.ui.define([
3557
3611
  aKeptElementPredicates.forEach(function (sPredicate) {
3558
3612
  that.aElements.$byPredicate[sPredicate] = mByPredicate[sPredicate];
3559
3613
  });
3614
+ // Beware: fireChange can trigger a read which must not be obsoleted
3615
+ this.aReadRequests?.forEach((oReadRequest) => {
3616
+ oReadRequest.obsolete = true;
3617
+ });
3560
3618
  if (mChangeListeners[""]) {
3561
3619
  this.mChangeListeners[""] = mChangeListeners[""];
3562
3620
  _Helper.fireChange(this.mChangeListeners, "");
@@ -3605,7 +3663,8 @@ sap.ui.define([
3605
3663
  };
3606
3664
 
3607
3665
  /**
3608
- * Sets the isInactive annotation at the entity with the given path, which might activate it.
3666
+ * Sets the "@$ui5.context.isInactive" annotation at the entity with the given path, which might
3667
+ * activate it.
3609
3668
  *
3610
3669
  * @param {string} sPath - The path
3611
3670
  * @param {boolean|number} bInactive
@@ -1711,26 +1711,6 @@ sap.ui.define([
1711
1711
  return sPath;
1712
1712
  },
1713
1713
 
1714
- /**
1715
- * Returns the path for the return value context. Supports bound operations on an entity or
1716
- * a collection.
1717
- *
1718
- * @param {string} sPath
1719
- * The bindings's path; either a resolved model path or a resource path; for example:
1720
- * "/Artists(ArtistID='42',IsActiveEntity=true)/special.cases.EditAction(...)" or
1721
- * "/Artists/special.cases.Create(...)", the leading "/" can be omitted.
1722
- * @param {string} sResponsePredicate The key predicate of the response entity
1723
- * @returns {string} The path for the return value context.
1724
- *
1725
- * @public
1726
- */
1727
- getReturnValueContextPath : function (sPath, sResponsePredicate) {
1728
- var sBoundParameterPath = sPath.slice(0, sPath.lastIndexOf("/")),
1729
- i = sBoundParameterPath.indexOf("(");
1730
-
1731
- return (i < 0 ? sBoundParameterPath : sPath.slice(0, i)) + sResponsePredicate;
1732
- },
1733
-
1734
1714
  /**
1735
1715
  * Tells whether <code>sPath</code> has <code>sBasePath</code> as path prefix. It returns
1736
1716
  * <code>true</code> iff {@link .getRelativePath} does not return <code>undefined</code>.
@@ -2795,6 +2775,12 @@ sap.ui.define([
2795
2775
  aNestedCreatedEntities.$count = undefined; // -> setCount must fire a change event
2796
2776
  aNestedCreatedEntities.$created = 0;
2797
2777
  aNestedCreatedEntities.$byPredicate = {};
2778
+ // If mSelectForMetaPath has query options, the corresponding nested ODLB will get a
2779
+ // cache later and must transfer the data to its own cache; otherwise, the nested
2780
+ // binding has no cache and must not lose its data (BCP: 2380101762)
2781
+ if (mSelectForMetaPath[sSegment]) {
2782
+ aNestedCreatedEntities.$transfer = true;
2783
+ }
2798
2784
  const sCollectionPath = sPath + "/" + sSegment;
2799
2785
  _Helper.setCount(mChangeListeners, sCollectionPath, aNestedCreatedEntities,
2800
2786
  aNestedCreatedEntities.length);
@@ -12,11 +12,11 @@ sap.ui.define([
12
12
  "./_V2Requestor",
13
13
  "sap/base/Log",
14
14
  "sap/ui/base/SyncPromise",
15
- "sap/ui/core/cache/CacheManager",
16
15
  "sap/ui/core/Configuration",
16
+ "sap/ui/core/cache/CacheManager",
17
17
  "sap/ui/thirdparty/jquery"
18
- ], function (_Batch, _GroupLock, _Helper, asV2Requestor, Log, SyncPromise, CacheManager,
19
- Configuration, jQuery) {
18
+ ], function (_Batch, _GroupLock, _Helper, asV2Requestor, Log, SyncPromise, Configuration,
19
+ CacheManager, jQuery) {
20
20
  "use strict";
21
21
 
22
22
  var mBatchHeaders = { // headers for the $batch request
@@ -444,7 +444,7 @@ sap.ui.define([
444
444
  case "creatable":
445
445
  case "deletable":
446
446
  case "updatable":
447
- // do not consume it here, it might be needed for xxx-path
447
+ // do not consume it here, it might be needed for xyz-path
448
448
  if (oAnnotatable.peek(sName) === "false") {
449
449
  oAnnotatable.convert(sName, false);
450
450
  }
@@ -227,7 +227,7 @@ sap.ui.define([
227
227
  *
228
228
  * @extends sap.ui.model.Model
229
229
  * @public
230
- * @version 1.118.0
230
+ * @version 1.119.1
231
231
  */
232
232
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
233
233
 
@@ -19,7 +19,7 @@ sap.ui.define(['sap/ui/model/SimpleType', 'sap/ui/model/FormatException', 'sap/u
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.118.0
22
+ * @version 1.119.1
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]