@openui5/sap.ui.core 1.96.2 → 1.98.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. package/.eslintrc.json +62 -3
  2. package/.reuse/dep5 +26 -31
  3. package/THIRDPARTY.txt +15 -21
  4. package/package.json +1 -1
  5. package/src/jquery.sap.act.js +1 -1
  6. package/src/jquery.sap.dom.js +1 -1
  7. package/src/jquery.sap.encoder.js +1 -1
  8. package/src/jquery.sap.events.js +1 -1
  9. package/src/jquery.sap.global.js +2 -2
  10. package/src/jquery.sap.history.js +1 -1
  11. package/src/jquery.sap.keycodes.js +1 -1
  12. package/src/jquery.sap.mobile.js +1 -9
  13. package/src/jquery.sap.promise.js +1 -1
  14. package/src/jquery.sap.properties.js +2 -2
  15. package/src/jquery.sap.resources.js +3 -3
  16. package/src/jquery.sap.script.js +2 -2
  17. package/src/jquery.sap.sjax.js +1 -1
  18. package/src/jquery.sap.storage.js +4 -4
  19. package/src/jquery.sap.strings.js +1 -1
  20. package/src/jquery.sap.stubs.js +1 -1
  21. package/src/jquery.sap.trace.js +1 -1
  22. package/src/jquery.sap.ui.js +1 -1
  23. package/src/jquery.sap.xml.js +1 -1
  24. package/src/sap/base/Log.js +1 -1
  25. package/src/sap/base/assert.js +1 -1
  26. package/src/sap/base/i18n/ResourceBundle.js +1 -1
  27. package/src/sap/base/security/URLListValidator.js +1 -1
  28. package/src/sap/base/security/URLWhitelist.js +1 -1
  29. package/src/sap/base/security/encodeCSS.js +1 -1
  30. package/src/sap/base/security/encodeJS.js +1 -1
  31. package/src/sap/base/security/encodeURL.js +1 -1
  32. package/src/sap/base/security/encodeURLParameters.js +1 -1
  33. package/src/sap/base/security/encodeXML.js +1 -1
  34. package/src/sap/base/security/sanitizeHTML.js +1 -1
  35. package/src/sap/base/strings/camelize.js +1 -1
  36. package/src/sap/base/strings/capitalize.js +1 -1
  37. package/src/sap/base/strings/escapeRegExp.js +1 -1
  38. package/src/sap/base/strings/formatMessage.js +1 -1
  39. package/src/sap/base/strings/hash.js +1 -1
  40. package/src/sap/base/strings/hyphenate.js +1 -1
  41. package/src/sap/base/strings/toHex.js +1 -1
  42. package/src/sap/base/strings/whitespaceReplacer.js +1 -1
  43. package/src/sap/base/util/Deferred.js +1 -1
  44. package/src/sap/base/util/JSTokenizer.js +1 -1
  45. package/src/sap/base/util/LoaderExtensions.js +1 -1
  46. package/src/sap/base/util/ObjectPath.js +1 -1
  47. package/src/sap/base/util/Properties.js +1 -1
  48. package/src/sap/base/util/UriParameters.js +1 -1
  49. package/src/sap/base/util/Version.js +1 -1
  50. package/src/sap/base/util/_merge.js +1 -1
  51. package/src/sap/base/util/array/diff.js +1 -1
  52. package/src/sap/base/util/array/uniqueSort.js +1 -1
  53. package/src/sap/base/util/deepClone.js +1 -1
  54. package/src/sap/base/util/deepEqual.js +1 -1
  55. package/src/sap/base/util/deepExtend.js +1 -1
  56. package/src/sap/base/util/defineCoupledProperty.js +1 -1
  57. package/src/sap/base/util/defineLazyProperty.js +1 -1
  58. package/src/sap/base/util/each.js +1 -1
  59. package/src/sap/base/util/extend.js +1 -1
  60. package/src/sap/base/util/includes.js +1 -1
  61. package/src/sap/base/util/isEmptyObject.js +1 -1
  62. package/src/sap/base/util/isPlainObject.js +1 -1
  63. package/src/sap/base/util/merge.js +1 -1
  64. package/src/sap/base/util/now.js +1 -1
  65. package/src/sap/base/util/resolveReference.js +1 -1
  66. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  67. package/src/sap/base/util/restricted/_castArray.js +2 -2
  68. package/src/sap/base/util/restricted/_compact.js +2 -2
  69. package/src/sap/base/util/restricted/_curry.js +2 -2
  70. package/src/sap/base/util/restricted/_debounce.js +2 -2
  71. package/src/sap/base/util/restricted/_difference.js +2 -2
  72. package/src/sap/base/util/restricted/_differenceBy.js +2 -2
  73. package/src/sap/base/util/restricted/_differenceWith.js +2 -2
  74. package/src/sap/base/util/restricted/_flatMap.js +2 -2
  75. package/src/sap/base/util/restricted/_flatMapDeep.js +2 -2
  76. package/src/sap/base/util/restricted/_flatMapDepth.js +2 -2
  77. package/src/sap/base/util/restricted/_flatten.js +2 -2
  78. package/src/sap/base/util/restricted/_flattenDeep.js +2 -2
  79. package/src/sap/base/util/restricted/_flattenDepth.js +2 -2
  80. package/src/sap/base/util/restricted/_intersection.js +2 -2
  81. package/src/sap/base/util/restricted/_intersectionBy.js +2 -2
  82. package/src/sap/base/util/restricted/_intersectionWith.js +2 -2
  83. package/src/sap/base/util/restricted/_isEqual.js +2 -2
  84. package/src/sap/base/util/restricted/_isEqualWith.js +2 -2
  85. package/src/sap/base/util/restricted/_isNil.js +2 -2
  86. package/src/sap/base/util/restricted/_max.js +2 -2
  87. package/src/sap/base/util/restricted/_merge.js +2 -2
  88. package/src/sap/base/util/restricted/_mergeWith.js +2 -2
  89. package/src/sap/base/util/restricted/_min.js +2 -2
  90. package/src/sap/base/util/restricted/_omit.js +2 -2
  91. package/src/sap/base/util/restricted/_pick.js +2 -2
  92. package/src/sap/base/util/restricted/_pickBy.js +2 -2
  93. package/src/sap/base/util/restricted/_throttle.js +2 -2
  94. package/src/sap/base/util/restricted/_toArray.js +2 -2
  95. package/src/sap/base/util/restricted/_union.js +2 -2
  96. package/src/sap/base/util/restricted/_unionBy.js +2 -2
  97. package/src/sap/base/util/restricted/_unionWith.js +2 -2
  98. package/src/sap/base/util/restricted/_uniq.js +2 -2
  99. package/src/sap/base/util/restricted/_uniqBy.js +2 -2
  100. package/src/sap/base/util/restricted/_uniqWith.js +2 -2
  101. package/src/sap/base/util/restricted/_without.js +2 -2
  102. package/src/sap/base/util/restricted/_xor.js +2 -2
  103. package/src/sap/base/util/restricted/_xorBy.js +2 -2
  104. package/src/sap/base/util/restricted/_xorWith.js +2 -2
  105. package/src/sap/base/util/restricted/_zipObject.js +2 -2
  106. package/src/sap/base/util/restricted/_zipObjectDeep.js +2 -2
  107. package/src/sap/base/util/uid.js +1 -1
  108. package/src/sap/base/util/values.js +1 -1
  109. package/src/sap/ui/Device.js +82 -170
  110. package/src/sap/ui/Global.js +12 -17
  111. package/src/sap/ui/VersionInfo.js +1 -1
  112. package/src/sap/ui/base/BindingParser.js +1 -1
  113. package/src/sap/ui/base/DataType.js +1 -1
  114. package/src/sap/ui/base/Event.js +2 -2
  115. package/src/sap/ui/base/EventProvider.js +2 -2
  116. package/src/sap/ui/base/Exception.js +1 -1
  117. package/src/sap/ui/base/ExpressionParser.js +1 -1
  118. package/src/sap/ui/base/Interface.js +2 -2
  119. package/src/sap/ui/base/ManagedObject.js +20 -9
  120. package/src/sap/ui/base/ManagedObjectMetadata.js +2 -2
  121. package/src/sap/ui/base/ManagedObjectObserver.js +1 -1
  122. package/src/sap/ui/base/ManagedObjectRegistry.js +1 -1
  123. package/src/sap/ui/base/Metadata.js +2 -4
  124. package/src/sap/ui/base/Object.js +2 -2
  125. package/src/sap/ui/base/ObjectPool.js +2 -2
  126. package/src/sap/ui/base/SyncPromise.js +1 -1
  127. package/src/sap/ui/base/syncXHRFix.js +1 -1
  128. package/src/sap/ui/core/.library +2 -28
  129. package/src/sap/ui/core/AppCacheBuster.js +5 -5
  130. package/src/sap/ui/core/BlockLayerUtils.js +1 -1
  131. package/src/sap/ui/core/BusyIndicator.js +2 -2
  132. package/src/sap/ui/core/BusyIndicatorUtils.js +2 -2
  133. package/src/sap/ui/core/CalendarType.js +1 -1
  134. package/src/sap/ui/core/CommandExecution.js +1 -1
  135. package/src/sap/ui/core/Component.js +32 -10
  136. package/src/sap/ui/core/ComponentContainer.js +2 -2
  137. package/src/sap/ui/core/ComponentContainerRenderer.js +1 -1
  138. package/src/sap/ui/core/ComponentMetadata.js +2 -2
  139. package/src/sap/ui/core/ComponentSupport.js +2 -2
  140. package/src/sap/ui/core/Configuration.js +3 -5
  141. package/src/sap/ui/core/ContextMenuSupport.js +1 -1
  142. package/src/sap/ui/core/Control.js +4 -4
  143. package/src/sap/ui/core/Core.js +3 -6
  144. package/src/sap/ui/core/CustomData.js +2 -2
  145. package/src/sap/ui/core/CustomStyleClassSupport.js +1 -1
  146. package/src/sap/ui/core/DeclarativeSupport.js +2 -2
  147. package/src/sap/ui/core/Element.js +4 -7
  148. package/src/sap/ui/core/ElementMetadata.js +2 -2
  149. package/src/sap/ui/core/EnabledPropagator.js +2 -2
  150. package/src/sap/ui/core/EventBus.js +2 -2
  151. package/src/sap/ui/core/ExtensionPoint.js +1 -1
  152. package/src/sap/ui/core/FocusHandler.js +1 -1
  153. package/src/sap/ui/core/Fragment.js +2 -2
  154. package/src/sap/ui/core/HTML.js +4 -4
  155. package/src/sap/ui/core/HTMLRenderer.js +1 -1
  156. package/src/sap/ui/core/History.js +2 -2
  157. package/src/sap/ui/core/Icon.js +3 -4
  158. package/src/sap/ui/core/IconPool.js +1 -1
  159. package/src/sap/ui/core/IconRenderer.js +1 -1
  160. package/src/sap/ui/core/IndicationColorSupport.js +2 -2
  161. package/src/sap/ui/core/IntervalTrigger.js +2 -2
  162. package/src/sap/ui/core/InvisibleMessage.js +2 -2
  163. package/src/sap/ui/core/InvisibleRenderer.js +2 -2
  164. package/src/sap/ui/core/InvisibleText.js +2 -2
  165. package/src/sap/ui/core/Item.js +2 -2
  166. package/src/sap/ui/core/LabelEnablement.js +2 -2
  167. package/src/sap/ui/core/LayoutData.js +2 -2
  168. package/src/sap/ui/core/ListItem.js +2 -2
  169. package/src/sap/ui/core/LocalBusyIndicator.js +2 -2
  170. package/src/sap/ui/core/LocalBusyIndicatorRenderer.js +1 -1
  171. package/src/sap/ui/core/LocalBusyIndicatorSupport.js +2 -2
  172. package/src/sap/ui/core/Locale.js +2 -2
  173. package/src/sap/ui/core/LocaleData.js +4 -4
  174. package/src/sap/ui/core/Manifest.js +2 -2
  175. package/src/sap/ui/core/Message.js +2 -2
  176. package/src/sap/ui/core/Patcher.js +1 -1
  177. package/src/sap/ui/core/Placeholder.js +29 -29
  178. package/src/sap/ui/core/Popup.js +2 -2
  179. package/src/sap/ui/core/RenderManager.js +4 -4
  180. package/src/sap/ui/core/Renderer.js +2 -2
  181. package/src/sap/ui/core/ResizeHandler.js +2 -2
  182. package/src/sap/ui/core/ScrollBar.js +5 -4
  183. package/src/sap/ui/core/ScrollBarRenderer.js +1 -1
  184. package/src/sap/ui/core/SeparatorItem.js +2 -2
  185. package/src/sap/ui/core/Shortcut.js +1 -1
  186. package/src/sap/ui/core/ShortcutHint.js +1 -1
  187. package/src/sap/ui/core/ShortcutHintsMixin.js +1 -1
  188. package/src/sap/ui/core/StashedControlSupport.js +1 -1
  189. package/src/sap/ui/core/ThemeCheck.js +3 -3
  190. package/src/sap/ui/core/Title.js +2 -2
  191. package/src/sap/ui/core/TooltipBase.js +3 -3
  192. package/src/sap/ui/core/UIArea.js +4 -4
  193. package/src/sap/ui/core/UIComponent.js +2 -2
  194. package/src/sap/ui/core/UIComponentMetadata.js +2 -2
  195. package/src/sap/ui/core/ValueStateSupport.js +2 -2
  196. package/src/sap/ui/core/VariantLayoutData.js +2 -2
  197. package/src/sap/ui/core/XMLComposite.js +2 -2
  198. package/src/sap/ui/core/XMLCompositeMetadata.js +2 -2
  199. package/src/sap/ui/core/XMLTemplateProcessor.js +27 -6
  200. package/src/sap/ui/core/_IconRegistry.js +1 -1
  201. package/src/sap/ui/core/cache/CacheManager.js +1 -1
  202. package/src/sap/ui/core/cache/CacheManagerNOP.js +1 -1
  203. package/src/sap/ui/core/cache/LRUPersistentCache.js +5 -3
  204. package/src/sap/ui/core/date/Buddhist.js +1 -1
  205. package/src/sap/ui/core/date/Gregorian.js +1 -1
  206. package/src/sap/ui/core/date/Islamic.js +1 -1
  207. package/src/sap/ui/core/date/Japanese.js +1 -1
  208. package/src/sap/ui/core/date/Persian.js +1 -1
  209. package/src/sap/ui/core/date/UniversalDate.js +1 -1
  210. package/src/sap/ui/core/date/UniversalDateUtils.js +206 -3
  211. package/src/sap/ui/core/date/_Calendars.js +1 -1
  212. package/src/sap/ui/core/delegate/ItemNavigation.js +2 -2
  213. package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
  214. package/src/sap/ui/core/designtime/ComponentContainer.designtime.js +1 -1
  215. package/src/sap/ui/core/designtime/CustomData.designtime.js +1 -1
  216. package/src/sap/ui/core/designtime/Icon.designtime.js +1 -1
  217. package/src/sap/ui/core/designtime/UIComponent.designtime.js +1 -1
  218. package/src/sap/ui/core/designtime/library.designtime.js +1 -1
  219. package/src/sap/ui/core/designtime/mvc/ControllerExtensionTemplate.js +1 -1
  220. package/src/sap/ui/core/designtime/mvc/View.designtime.js +1 -1
  221. package/src/sap/ui/core/designtime/mvc/XMLView.designtime.js +1 -1
  222. package/src/sap/ui/core/dnd/DragAndDrop.js +3 -3
  223. package/src/sap/ui/core/dnd/DragDropBase.js +2 -2
  224. package/src/sap/ui/core/dnd/DragDropInfo.js +2 -2
  225. package/src/sap/ui/core/dnd/DragInfo.js +2 -2
  226. package/src/sap/ui/core/dnd/DropInfo.js +2 -2
  227. package/src/sap/ui/core/format/DateFormat.js +45 -9
  228. package/src/sap/ui/core/format/FileSizeFormat.js +1 -1
  229. package/src/sap/ui/core/format/ListFormat.js +1 -1
  230. package/src/sap/ui/core/format/NumberFormat.js +1 -1
  231. package/src/sap/ui/core/hyphenation/Hyphenation.js +2 -2
  232. package/src/sap/ui/core/hyphenation/HyphenationTestingWords.js +1 -1
  233. package/src/sap/ui/core/library.js +46 -9
  234. package/src/sap/ui/core/library.support.js +1 -1
  235. package/src/sap/ui/core/message/ControlMessageProcessor.js +6 -6
  236. package/src/sap/ui/core/message/Message.js +2 -2
  237. package/src/sap/ui/core/message/MessageManager.js +2 -2
  238. package/src/sap/ui/core/message/MessageMixin.js +3 -2
  239. package/src/sap/ui/core/message/MessageParser.js +2 -2
  240. package/src/sap/ui/core/message/MessageProcessor.js +23 -13
  241. package/src/sap/ui/core/messagebundle_fr.properties +7 -7
  242. package/src/sap/ui/core/messagebundle_it.properties +1 -1
  243. package/src/sap/ui/core/messagebundle_no.properties +4 -4
  244. package/src/sap/ui/core/messagebundle_ru.properties +21 -21
  245. package/src/sap/ui/core/mvc/Controller.js +5 -5
  246. package/src/sap/ui/core/mvc/ControllerExtension.js +1 -1
  247. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
  248. package/src/sap/ui/core/mvc/ControllerMetadata.js +1 -1
  249. package/src/sap/ui/core/mvc/EventHandlerResolver.js +1 -1
  250. package/src/sap/ui/core/mvc/HTMLView.js +2 -2
  251. package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
  252. package/src/sap/ui/core/mvc/JSONView.js +3 -2
  253. package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
  254. package/src/sap/ui/core/mvc/JSView.js +2 -2
  255. package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
  256. package/src/sap/ui/core/mvc/OverrideExecution.js +1 -1
  257. package/src/sap/ui/core/mvc/TemplateView.js +2 -2
  258. package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
  259. package/src/sap/ui/core/mvc/View.js +3 -2
  260. package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
  261. package/src/sap/ui/core/mvc/ViewType.js +1 -1
  262. package/src/sap/ui/core/mvc/XMLProcessingMode.js +1 -1
  263. package/src/sap/ui/core/mvc/XMLView.js +17 -4
  264. package/src/sap/ui/core/mvc/XMLViewRenderer.js +1 -1
  265. package/src/sap/ui/core/plugin/DeclarativeSupport.js +2 -2
  266. package/src/sap/ui/core/plugin/LessSupport.js +2 -2
  267. package/src/sap/ui/core/plugin/TemplatingSupport.js +2 -2
  268. package/src/sap/ui/core/postmessage/Bus.js +2 -2
  269. package/src/sap/ui/core/postmessage/confirmationDialog.js +2 -2
  270. package/src/sap/ui/core/routing/HashChanger.js +1 -1
  271. package/src/sap/ui/core/routing/HashChangerBase.js +1 -1
  272. package/src/sap/ui/core/routing/History.js +1 -1
  273. package/src/sap/ui/core/routing/Route.js +7 -7
  274. package/src/sap/ui/core/routing/Router.js +4 -3
  275. package/src/sap/ui/core/routing/RouterHashChanger.js +1 -1
  276. package/src/sap/ui/core/routing/Target.js +1 -1
  277. package/src/sap/ui/core/routing/TargetCache.js +1 -1
  278. package/src/sap/ui/core/routing/Targets.js +18 -14
  279. package/src/sap/ui/core/routing/Views.js +1 -1
  280. package/src/sap/ui/core/routing/async/Route.js +1 -1
  281. package/src/sap/ui/core/routing/async/Target.js +1 -1
  282. package/src/sap/ui/core/routing/async/TargetCache.js +1 -1
  283. package/src/sap/ui/core/routing/async/Targets.js +1 -1
  284. package/src/sap/ui/core/routing/sync/Route.js +1 -1
  285. package/src/sap/ui/core/routing/sync/Target.js +1 -1
  286. package/src/sap/ui/core/routing/sync/TargetCache.js +1 -1
  287. package/src/sap/ui/core/routing/sync/Targets.js +1 -1
  288. package/src/sap/ui/core/rules/App.support.js +1 -1
  289. package/src/sap/ui/core/rules/Config.support.js +1 -1
  290. package/src/sap/ui/core/rules/CoreHelper.support.js +1 -1
  291. package/src/sap/ui/core/rules/Misc.support.js +52 -2
  292. package/src/sap/ui/core/rules/Model.support.js +96 -9
  293. package/src/sap/ui/core/rules/Rendering.support.js +2 -5
  294. package/src/sap/ui/core/rules/Theming.support.js +1 -1
  295. package/src/sap/ui/core/rules/View.support.js +15 -47
  296. package/src/sap/ui/core/search/OpenSearchProvider.js +2 -2
  297. package/src/sap/ui/core/search/SearchProvider.js +2 -2
  298. package/src/sap/ui/core/service/Service.js +2 -2
  299. package/src/sap/ui/core/service/ServiceFactory.js +2 -2
  300. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +2 -2
  301. package/src/sap/ui/core/support/BootSupportTool.js +1 -1
  302. package/src/sap/ui/core/support/Hotkeys.js +1 -1
  303. package/src/sap/ui/core/support/Plugin.js +3 -3
  304. package/src/sap/ui/core/support/RuleEngineOpaExtension.js +1 -2
  305. package/src/sap/ui/core/support/Support.js +2 -2
  306. package/src/sap/ui/core/support/ToolsAPI.js +1 -1
  307. package/src/sap/ui/core/support/bootstrapFallback.js +1 -1
  308. package/src/sap/ui/core/support/controls/InteractionSlider.js +1 -1
  309. package/src/sap/ui/core/support/controls/InteractionTree.js +1 -1
  310. package/src/sap/ui/core/support/controls/ObjectViewer.js +1 -1
  311. package/src/sap/ui/core/support/controls/TimelineOverview.js +1 -1
  312. package/src/sap/ui/core/support/controls/TreeViewer.js +2 -2
  313. package/src/sap/ui/core/support/debugReboot.js +1 -1
  314. package/src/sap/ui/core/support/plugins/Breakpoint.js +1 -1
  315. package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
  316. package/src/sap/ui/core/support/plugins/Debugging.js +1 -1
  317. package/src/sap/ui/core/support/plugins/Interaction.js +2 -2
  318. package/src/sap/ui/core/support/plugins/LocalStorage.js +2 -2
  319. package/src/sap/ui/core/support/plugins/Performance.js +2 -3
  320. package/src/sap/ui/core/support/plugins/Selector.js +2 -2
  321. package/src/sap/ui/core/support/plugins/TechInfo.js +2 -2
  322. package/src/sap/ui/core/support/plugins/Trace.js +2 -2
  323. package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -2
  324. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +3 -7
  325. package/src/sap/ui/core/support/techinfo/moduleTreeHelper.js +1 -1
  326. package/src/sap/ui/core/support/trace/E2eTraceLib.js +4 -4
  327. package/src/sap/ui/core/support/trace/EppLib.js +1 -1
  328. package/src/sap/ui/core/support/usage/EventBroadcaster.js +1 -1
  329. package/src/sap/ui/core/syncStyleClass.js +1 -1
  330. package/src/sap/ui/core/themes/base/library.source.less +1 -1
  331. package/src/sap/ui/core/themes/base/parameterClasses.less +21 -21
  332. package/src/sap/ui/core/themes/sap_hcb/library.source.less +1 -1
  333. package/src/sap/ui/core/theming/Parameters.js +23 -143
  334. package/src/sap/ui/core/theming/ThemeHelper.js +27 -38
  335. package/src/sap/ui/core/tmpl/DOMAttribute.js +2 -2
  336. package/src/sap/ui/core/tmpl/DOMElement.js +2 -2
  337. package/src/sap/ui/core/tmpl/DOMElementRenderer.js +1 -1
  338. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +2 -2
  339. package/src/sap/ui/core/tmpl/Template.js +2 -2
  340. package/src/sap/ui/core/tmpl/TemplateControl.js +2 -2
  341. package/src/sap/ui/core/tmpl/TemplateControlRenderer.js +1 -1
  342. package/src/sap/ui/core/tmpl/_parsePath.js +1 -1
  343. package/src/sap/ui/core/util/AsyncHintsHelper.js +2 -2
  344. package/src/sap/ui/core/util/DraftEnabledMockServer.js +22 -17
  345. package/src/sap/ui/core/util/Export.js +2 -2
  346. package/src/sap/ui/core/util/ExportCell.js +2 -2
  347. package/src/sap/ui/core/util/ExportColumn.js +2 -2
  348. package/src/sap/ui/core/util/ExportRow.js +2 -2
  349. package/src/sap/ui/core/util/ExportType.js +2 -2
  350. package/src/sap/ui/core/util/ExportTypeCSV.js +2 -2
  351. package/src/sap/ui/core/util/File.js +2 -2
  352. package/src/sap/ui/core/util/LibraryInfo.js +2 -2
  353. package/src/sap/ui/core/util/MockServer.js +140 -43
  354. package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +1 -1
  355. package/src/sap/ui/core/util/PasteHelper.js +2 -2
  356. package/src/sap/ui/core/util/ResponsivePaddingsEnablement.js +1 -1
  357. package/src/sap/ui/core/util/ShortcutHelper.js +1 -1
  358. package/src/sap/ui/core/util/XMLPreprocessor.js +1 -1
  359. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +5 -1
  360. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +31 -21
  361. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -1
  362. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +2 -2
  363. package/src/sap/ui/core/util/serializer/Serializer.js +2 -2
  364. package/src/sap/ui/core/util/serializer/ViewSerializer.js +2 -2
  365. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +2 -2
  366. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +2 -2
  367. package/src/sap/ui/core/util/serializer/delegate/HTML.js +2 -2
  368. package/src/sap/ui/core/util/serializer/delegate/XML.js +2 -2
  369. package/src/sap/ui/core/ws/ReadyState.js +2 -2
  370. package/src/sap/ui/core/ws/SapPcpWebSocket.js +2 -2
  371. package/src/sap/ui/core/ws/WebSocket.js +2 -2
  372. package/src/sap/ui/debug/ControlTree.js +2 -2
  373. package/src/sap/ui/debug/DebugEnv.js +2 -2
  374. package/src/sap/ui/debug/Highlighter.js +1 -1
  375. package/src/sap/ui/debug/LogViewer.js +1 -1
  376. package/src/sap/ui/debug/PropertyList.js +2 -2
  377. package/src/sap/ui/dom/containsOrEquals.js +1 -1
  378. package/src/sap/ui/dom/denormalizeScrollBeginRTL.js +1 -1
  379. package/src/sap/ui/dom/denormalizeScrollLeftRTL.js +1 -1
  380. package/src/sap/ui/dom/getComputedStyleFix.js +1 -1
  381. package/src/sap/ui/dom/getFirstEditableInput.js +1 -1
  382. package/src/sap/ui/dom/getOwnerWindow.js +1 -1
  383. package/src/sap/ui/dom/getScrollbarSize.js +1 -1
  384. package/src/sap/ui/dom/includeScript.js +1 -1
  385. package/src/sap/ui/dom/includeStylesheet.js +1 -1
  386. package/src/sap/ui/dom/isHidden.js +1 -1
  387. package/src/sap/ui/dom/jquery/Aria.js +1 -1
  388. package/src/sap/ui/dom/jquery/Focusable.js +1 -1
  389. package/src/sap/ui/dom/jquery/Selection.js +1 -1
  390. package/src/sap/ui/dom/jquery/Selectors.js +1 -1
  391. package/src/sap/ui/dom/jquery/control.js +1 -1
  392. package/src/sap/ui/dom/jquery/cursorPos.js +1 -1
  393. package/src/sap/ui/dom/jquery/getSelectedText.js +1 -1
  394. package/src/sap/ui/dom/jquery/hasTabIndex.js +1 -1
  395. package/src/sap/ui/dom/jquery/parentByAttribute.js +1 -1
  396. package/src/sap/ui/dom/jquery/rect.js +1 -1
  397. package/src/sap/ui/dom/jquery/rectContains.js +1 -1
  398. package/src/sap/ui/dom/jquery/scrollLeftRTL.js +1 -1
  399. package/src/sap/ui/dom/jquery/scrollRightRTL.js +1 -1
  400. package/src/sap/ui/dom/jquery/selectText.js +1 -1
  401. package/src/sap/ui/dom/jquery/zIndex.js +1 -1
  402. package/src/sap/ui/dom/units/Rem.js +1 -1
  403. package/src/sap/ui/events/ControlEvents.js +1 -1
  404. package/src/sap/ui/events/F6Navigation.js +1 -1
  405. package/src/sap/ui/events/KeyCodes.js +1 -1
  406. package/src/sap/ui/events/PasteEventFix.js +1 -1
  407. package/src/sap/ui/events/PseudoEvents.js +1 -1
  408. package/src/sap/ui/events/TouchToMouseMapping.js +1 -1
  409. package/src/sap/ui/events/checkMouseEnterOrLeave.js +1 -1
  410. package/src/sap/ui/events/isMouseEventDelayed.js +1 -1
  411. package/src/sap/ui/events/isSpecialKey.js +1 -1
  412. package/src/sap/ui/events/jquery/EventExtension.js +1 -1
  413. package/src/sap/ui/events/jquery/EventSimulation.js +4 -14
  414. package/src/sap/ui/events/jquery/EventTriggerHook.js +1 -1
  415. package/src/sap/ui/model/Binding.js +1 -1
  416. package/src/sap/ui/model/BindingMode.js +1 -1
  417. package/src/sap/ui/model/ChangeReason.js +2 -2
  418. package/src/sap/ui/model/ClientContextBinding.js +1 -1
  419. package/src/sap/ui/model/ClientListBinding.js +8 -1
  420. package/src/sap/ui/model/ClientModel.js +7 -6
  421. package/src/sap/ui/model/ClientPropertyBinding.js +1 -1
  422. package/src/sap/ui/model/ClientTreeBinding.js +1 -1
  423. package/src/sap/ui/model/ClientTreeBindingAdapter.js +2 -2
  424. package/src/sap/ui/model/CompositeBinding.js +1 -1
  425. package/src/sap/ui/model/CompositeDataState.js +27 -5
  426. package/src/sap/ui/model/CompositeType.js +2 -2
  427. package/src/sap/ui/model/Context.js +1 -1
  428. package/src/sap/ui/model/ContextBinding.js +1 -1
  429. package/src/sap/ui/model/DataState.js +28 -7
  430. package/src/sap/ui/model/Filter.js +1 -1
  431. package/src/sap/ui/model/FilterOperator.js +1 -1
  432. package/src/sap/ui/model/FilterProcessor.js +1 -1
  433. package/src/sap/ui/model/FilterType.js +1 -1
  434. package/src/sap/ui/model/FormatException.js +1 -1
  435. package/src/sap/ui/model/ListBinding.js +25 -6
  436. package/src/sap/ui/model/MetaModel.js +3 -3
  437. package/src/sap/ui/model/Model.js +7 -12
  438. package/src/sap/ui/model/ParseException.js +1 -1
  439. package/src/sap/ui/model/PropertyBinding.js +1 -1
  440. package/src/sap/ui/model/SelectionModel.js +2 -2
  441. package/src/sap/ui/model/SimpleType.js +2 -2
  442. package/src/sap/ui/model/Sorter.js +1 -1
  443. package/src/sap/ui/model/SorterProcessor.js +1 -1
  444. package/src/sap/ui/model/StaticBinding.js +1 -1
  445. package/src/sap/ui/model/TreeAutoExpandMode.js +2 -2
  446. package/src/sap/ui/model/TreeBinding.js +1 -1
  447. package/src/sap/ui/model/TreeBindingAdapter.js +1 -3
  448. package/src/sap/ui/model/TreeBindingCompatibilityAdapter.js +1 -1
  449. package/src/sap/ui/model/TreeBindingUtils.js +3 -1
  450. package/src/sap/ui/model/Type.js +2 -2
  451. package/src/sap/ui/model/ValidateException.js +1 -1
  452. package/src/sap/ui/model/analytics/AnalyticalBinding.js +52 -35
  453. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +17 -19
  454. package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +1 -1
  455. package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
  456. package/src/sap/ui/model/analytics/ODataModelAdapter.js +3 -16
  457. package/src/sap/ui/model/analytics/odata4analytics.js +1 -1
  458. package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
  459. package/src/sap/ui/model/json/JSONListBinding.js +1 -1
  460. package/src/sap/ui/model/json/JSONModel.js +8 -8
  461. package/src/sap/ui/model/json/JSONPropertyBinding.js +2 -2
  462. package/src/sap/ui/model/json/JSONTreeBinding.js +1 -1
  463. package/src/sap/ui/model/message/MessageListBinding.js +1 -1
  464. package/src/sap/ui/model/message/MessageModel.js +4 -4
  465. package/src/sap/ui/model/message/MessagePropertyBinding.js +2 -2
  466. package/src/sap/ui/model/odata/AnnotationHelper.js +3 -3
  467. package/src/sap/ui/model/odata/AnnotationParser.js +5 -3
  468. package/src/sap/ui/model/odata/CountMode.js +1 -1
  469. package/src/sap/ui/model/odata/Filter.js +1 -1
  470. package/src/sap/ui/model/odata/MessageScope.js +1 -1
  471. package/src/sap/ui/model/odata/ODataAnnotations.js +2 -2
  472. package/src/sap/ui/model/odata/ODataContextBinding.js +1 -1
  473. package/src/sap/ui/model/odata/ODataListBinding.js +62 -39
  474. package/src/sap/ui/model/odata/ODataMessageParser.js +3 -3
  475. package/src/sap/ui/model/odata/ODataMetaModel.js +4 -4
  476. package/src/sap/ui/model/odata/ODataMetadata.js +137 -86
  477. package/src/sap/ui/model/odata/ODataModel.js +443 -216
  478. package/src/sap/ui/model/odata/ODataPropertyBinding.js +8 -6
  479. package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
  480. package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +28 -18
  481. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +441 -261
  482. package/src/sap/ui/model/odata/ODataUtils.js +25 -10
  483. package/src/sap/ui/model/odata/OperationMode.js +1 -1
  484. package/src/sap/ui/model/odata/UpdateMethod.js +1 -1
  485. package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +4 -3
  486. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +12 -10
  487. package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +8 -6
  488. package/src/sap/ui/model/odata/type/Boolean.js +2 -2
  489. package/src/sap/ui/model/odata/type/Byte.js +2 -2
  490. package/src/sap/ui/model/odata/type/Currency.js +2 -2
  491. package/src/sap/ui/model/odata/type/Date.js +2 -2
  492. package/src/sap/ui/model/odata/type/DateTime.js +2 -2
  493. package/src/sap/ui/model/odata/type/DateTimeBase.js +2 -2
  494. package/src/sap/ui/model/odata/type/DateTimeOffset.js +2 -2
  495. package/src/sap/ui/model/odata/type/Decimal.js +6 -2
  496. package/src/sap/ui/model/odata/type/Double.js +2 -2
  497. package/src/sap/ui/model/odata/type/Guid.js +2 -2
  498. package/src/sap/ui/model/odata/type/Int.js +2 -2
  499. package/src/sap/ui/model/odata/type/Int16.js +2 -2
  500. package/src/sap/ui/model/odata/type/Int32.js +2 -2
  501. package/src/sap/ui/model/odata/type/Int64.js +2 -2
  502. package/src/sap/ui/model/odata/type/ODataType.js +2 -2
  503. package/src/sap/ui/model/odata/type/Raw.js +2 -2
  504. package/src/sap/ui/model/odata/type/SByte.js +2 -2
  505. package/src/sap/ui/model/odata/type/Single.js +2 -2
  506. package/src/sap/ui/model/odata/type/Stream.js +2 -2
  507. package/src/sap/ui/model/odata/type/String.js +2 -2
  508. package/src/sap/ui/model/odata/type/Time.js +2 -2
  509. package/src/sap/ui/model/odata/type/TimeOfDay.js +2 -2
  510. package/src/sap/ui/model/odata/type/Unit.js +2 -2
  511. package/src/sap/ui/model/odata/type/UnitMixin.js +2 -3
  512. package/src/sap/ui/model/odata/v2/BatchMode.js +1 -1
  513. package/src/sap/ui/model/odata/v2/Context.js +99 -15
  514. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -2
  515. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +1 -1
  516. package/src/sap/ui/model/odata/v2/ODataListBinding.js +389 -149
  517. package/src/sap/ui/model/odata/v2/ODataModel.js +233 -134
  518. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +163 -90
  519. package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +118 -8
  520. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +6 -6
  521. package/src/sap/ui/model/odata/v4/Context.js +164 -36
  522. package/src/sap/ui/model/odata/v4/ODataBinding.js +91 -41
  523. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +184 -61
  524. package/src/sap/ui/model/odata/v4/ODataListBinding.js +398 -129
  525. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +44 -41
  526. package/src/sap/ui/model/odata/v4/ODataModel.js +28 -12
  527. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +70 -80
  528. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +26 -23
  529. package/src/sap/ui/model/odata/v4/ODataUtils.js +6 -6
  530. package/src/sap/ui/model/odata/v4/SubmitMode.js +1 -2
  531. package/src/sap/ui/model/odata/v4/ValueListType.js +1 -2
  532. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +19 -20
  533. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +4 -6
  534. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +6 -5
  535. package/src/sap/ui/model/odata/v4/lib/_Batch.js +22 -21
  536. package/src/sap/ui/model/odata/v4/lib/_Cache.js +247 -103
  537. package/src/sap/ui/model/odata/v4/lib/_ConcatHelper.js +1 -1
  538. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +2 -2
  539. package/src/sap/ui/model/odata/v4/lib/_Helper.js +50 -20
  540. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +61 -60
  541. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +2 -2
  542. package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +1 -1
  543. package/src/sap/ui/model/odata/v4/lib/_Parser.js +53 -44
  544. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +42 -24
  545. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +148 -148
  546. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +14 -13
  547. package/src/sap/ui/model/odata/v4/lib/_V4MetadataConverter.js +67 -68
  548. package/src/sap/ui/model/resource/ResourceModel.js +2 -2
  549. package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
  550. package/src/sap/ui/model/type/Boolean.js +2 -2
  551. package/src/sap/ui/model/type/Currency.js +2 -2
  552. package/src/sap/ui/model/type/Date.js +2 -2
  553. package/src/sap/ui/model/type/DateInterval.js +2 -2
  554. package/src/sap/ui/model/type/DateTime.js +2 -2
  555. package/src/sap/ui/model/type/DateTimeInterval.js +2 -2
  556. package/src/sap/ui/model/type/FileSize.js +2 -2
  557. package/src/sap/ui/model/type/Float.js +2 -2
  558. package/src/sap/ui/model/type/Integer.js +2 -2
  559. package/src/sap/ui/model/type/String.js +2 -2
  560. package/src/sap/ui/model/type/Time.js +2 -2
  561. package/src/sap/ui/model/type/TimeInterval.js +2 -2
  562. package/src/sap/ui/model/type/Unit.js +2 -2
  563. package/src/sap/ui/model/xml/XMLListBinding.js +1 -1
  564. package/src/sap/ui/model/xml/XMLModel.js +6 -6
  565. package/src/sap/ui/model/xml/XMLPropertyBinding.js +2 -2
  566. package/src/sap/ui/model/xml/XMLTreeBinding.js +1 -1
  567. package/src/sap/ui/performance/BeaconRequest.js +1 -1
  568. package/src/sap/ui/performance/Measurement.js +1 -1
  569. package/src/sap/ui/performance/XHRInterceptor.js +1 -1
  570. package/src/sap/ui/performance/trace/FESR.js +1 -1
  571. package/src/sap/ui/performance/trace/Interaction.js +1 -1
  572. package/src/sap/ui/performance/trace/Passport.js +1 -1
  573. package/src/sap/ui/performance/trace/initTraces.js +1 -1
  574. package/src/sap/ui/qunit/QUnitUtils.js +1 -1
  575. package/src/sap/ui/qunit/qunit-2-css.js +1 -1
  576. package/src/sap/ui/qunit/qunit-coverage.js +1 -1
  577. package/src/sap/ui/qunit/qunit-css.js +1 -1
  578. package/src/sap/ui/qunit/qunit-junit.js +1 -1
  579. package/src/sap/ui/qunit/qunit-redirect.js +1 -1
  580. package/src/sap/ui/qunit/sinon-qunit-bridge.js +1 -1
  581. package/src/sap/ui/qunit/utils/ControlIterator.js +2 -2
  582. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +2 -2
  583. package/src/sap/ui/qunit/utils/createAndAppendDiv.js +1 -1
  584. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +1 -1
  585. package/src/sap/ui/security/FrameOptions.js +1 -1
  586. package/src/sap/ui/test/BlanketReporter.js +2 -2
  587. package/src/sap/ui/test/BranchTracking.js +1 -1
  588. package/src/sap/ui/test/Opa.js +1 -1
  589. package/src/sap/ui/test/Opa5.js +1 -1
  590. package/src/sap/ui/test/OpaBuilder.js +1 -1
  591. package/src/sap/ui/test/OpaExtension.js +1 -1
  592. package/src/sap/ui/test/OpaPlugin.js +1 -1
  593. package/src/sap/ui/test/PageObjectFactory.js +1 -1
  594. package/src/sap/ui/test/RecordReplay.js +1 -1
  595. package/src/sap/ui/test/RecorderHotkeyListener.js +1 -1
  596. package/src/sap/ui/test/TestUtils.js +3 -3
  597. package/src/sap/ui/test/_BrowserLogCollector.js +1 -1
  598. package/src/sap/ui/test/_ControlFinder.js +1 -1
  599. package/src/sap/ui/test/_LogCollector.js +2 -2
  600. package/src/sap/ui/test/_OpaLogger.js +1 -1
  601. package/src/sap/ui/test/_OpaUriParameterParser.js +1 -1
  602. package/src/sap/ui/test/_ParameterValidator.js +1 -1
  603. package/src/sap/ui/test/_UsageReport.js +1 -1
  604. package/src/sap/ui/test/_ValidationParameters.js +1 -1
  605. package/src/sap/ui/test/actions/Action.js +12 -3
  606. package/src/sap/ui/test/actions/Drag.js +1 -1
  607. package/src/sap/ui/test/actions/Drop.js +1 -1
  608. package/src/sap/ui/test/actions/EnterText.js +1 -1
  609. package/src/sap/ui/test/actions/Press.js +80 -4
  610. package/src/sap/ui/test/actions/Scroll.js +1 -1
  611. package/src/sap/ui/test/autowaiter/WaiterBase.js +1 -1
  612. package/src/sap/ui/test/autowaiter/_UIUpdatesWaiter.js +1 -1
  613. package/src/sap/ui/test/autowaiter/_XHRWaiter.js +2 -2
  614. package/src/sap/ui/test/autowaiter/_autoWaiter.js +1 -1
  615. package/src/sap/ui/test/autowaiter/_autoWaiterAsync.js +1 -1
  616. package/src/sap/ui/test/autowaiter/_moduleWaiter.js +1 -1
  617. package/src/sap/ui/test/autowaiter/_navigationContainerWaiter.js +1 -1
  618. package/src/sap/ui/test/autowaiter/_promiseWaiter.js +1 -1
  619. package/src/sap/ui/test/autowaiter/_resourceWaiter.js +1 -1
  620. package/src/sap/ui/test/autowaiter/_timeoutWaiter.js +1 -1
  621. package/src/sap/ui/test/autowaiter/_utils.js +1 -1
  622. package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +111 -0
  623. package/src/sap/ui/test/gherkin/GherkinTestGenerator.js +1 -1
  624. package/src/sap/ui/test/gherkin/StepDefinitions.js +1 -1
  625. package/src/sap/ui/test/gherkin/dataTableUtils.js +1 -1
  626. package/src/sap/ui/test/gherkin/opa5TestHarness.js +1 -1
  627. package/src/sap/ui/test/gherkin/qUnitTestHarness.js +1 -1
  628. package/src/sap/ui/test/gherkin/simpleGherkinParser.js +1 -1
  629. package/src/sap/ui/test/launchers/componentLauncher.js +1 -1
  630. package/src/sap/ui/test/launchers/iFrameLauncher.js +1 -1
  631. package/src/sap/ui/test/matchers/AggregationContainsPropertyEqual.js +1 -1
  632. package/src/sap/ui/test/matchers/AggregationEmpty.js +1 -1
  633. package/src/sap/ui/test/matchers/AggregationFilled.js +1 -1
  634. package/src/sap/ui/test/matchers/AggregationLengthEquals.js +1 -1
  635. package/src/sap/ui/test/matchers/Ancestor.js +1 -1
  636. package/src/sap/ui/test/matchers/BindingPath.js +1 -1
  637. package/src/sap/ui/test/matchers/Descendant.js +1 -1
  638. package/src/sap/ui/test/matchers/I18NText.js +1 -1
  639. package/src/sap/ui/test/matchers/Interactable.js +1 -1
  640. package/src/sap/ui/test/matchers/LabelFor.js +1 -1
  641. package/src/sap/ui/test/matchers/Matcher.js +1 -1
  642. package/src/sap/ui/test/matchers/MatcherFactory.js +1 -1
  643. package/src/sap/ui/test/matchers/Properties.js +1 -1
  644. package/src/sap/ui/test/matchers/PropertyStrictEquals.js +1 -1
  645. package/src/sap/ui/test/matchers/Sibling.js +1 -1
  646. package/src/sap/ui/test/matchers/Visible.js +1 -1
  647. package/src/sap/ui/test/matchers/_Busy.js +1 -1
  648. package/src/sap/ui/test/matchers/_Editable.js +1 -1
  649. package/src/sap/ui/test/matchers/_Enabled.js +1 -1
  650. package/src/sap/ui/test/matchers/_Visitor.js +1 -1
  651. package/src/sap/ui/test/matchers/matchers.js +1 -1
  652. package/src/sap/ui/test/opaQunit.js +1 -1
  653. package/src/sap/ui/test/pipelines/ActionPipeline.js +1 -1
  654. package/src/sap/ui/test/pipelines/MatcherPipeline.js +1 -1
  655. package/src/sap/ui/test/pipelines/PipelineFactory.js +1 -1
  656. package/src/sap/ui/test/qunitPause.js +1 -1
  657. package/src/sap/ui/test/selectors/_BindingPath.js +1 -1
  658. package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +1 -1
  659. package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
  660. package/src/sap/ui/test/selectors/_ControlType.js +1 -1
  661. package/src/sap/ui/test/selectors/_DropdownItem.js +1 -1
  662. package/src/sap/ui/test/selectors/_GlobalID.js +1 -1
  663. package/src/sap/ui/test/selectors/_LabelFor.js +1 -1
  664. package/src/sap/ui/test/selectors/_Properties.js +1 -1
  665. package/src/sap/ui/test/selectors/_Selector.js +1 -1
  666. package/src/sap/ui/test/selectors/_TableRowItem.js +1 -1
  667. package/src/sap/ui/test/selectors/_ViewID.js +1 -1
  668. package/src/sap/ui/test/selectors/_selectors.js +1 -1
  669. package/src/sap/ui/test/starter/_configureLoader.js +1 -1
  670. package/src/sap/ui/test/starter/_setupAndStart.js +1 -1
  671. package/src/sap/ui/test/starter/_utils.js +1 -1
  672. package/src/sap/ui/test/starter/createSuite.js +4 -4
  673. package/src/sap/ui/test/starter/runTest.js +1 -1
  674. package/src/sap/ui/thirdparty/RequestRecorder.js +1 -1
  675. package/src/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
  676. package/src/sap/ui/thirdparty/jquery-mobile-custom.js +3 -6
  677. package/src/sap/ui/util/ActivityDetection.js +1 -1
  678. package/src/sap/ui/util/Mobile.js +29 -40
  679. package/src/sap/ui/util/Storage.js +2 -2
  680. package/src/sap/ui/util/XMLHelper.js +54 -31
  681. package/src/sap/ui/util/_FeatureDetection.js +1 -1
  682. package/src/sap/ui/util/defaultLinkTypes.js +1 -1
  683. package/src/sap/ui/util/isCrossOriginURL.js +1 -1
  684. package/src/sap/ui/util/openWindow.js +1 -1
  685. package/src/sap-ui-boot.js +1 -1
  686. package/src/sap-ui-core-nojQuery.js +1 -1
  687. package/src/sap-ui-core.js +1 -1
  688. package/src/sap-ui-debug.js +1 -1
  689. package/src/ui5loader-autoconfig.js +1 -1
  690. package/src/ui5loader.js +10 -10
  691. package/ui5.yaml +244 -1
  692. package/src/sap/ui/core/CustomizingConfiguration.js +0 -47
  693. package/src/sap/ui/thirdparty/baseuri.js +0 -1
  694. package/src/sap/ui/thirdparty/es6-object-assign.js +0 -1
  695. package/src/sap/ui/thirdparty/es6-promise.js +0 -1
  696. package/src/sap/ui/thirdparty/es6-shim-nopromise.js +0 -1
  697. package/src/sap/ui/thirdparty/es6-string-methods.js +0 -1
  698. package/src/sap/ui/thirdparty/flexie.js +0 -1
  699. package/src/sap/ui/thirdparty/unorm.js +0 -1
  700. package/src/sap/ui/thirdparty/unormdata.js +0 -1
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * OpenUI5
3
- * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
3
+ * (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
6
 
@@ -21,6 +21,7 @@ sap.ui.define([
21
21
  // EMPLOYEE($uid=id-1550828854217-16) -> aMatches[0] === "($uid=id-1550828854217-16)"
22
22
  // @see sap.base.util.uid
23
23
  rEndsWithTransientPredicate = /\(\$uid=[-\w]+\)$/,
24
+ rInactive = /^\$inactive\./,
24
25
  sMessagesAnnotation = "@com.sap.vocabularies.Common.v1.Messages",
25
26
  rNumber = /^-?\d+$/,
26
27
  // Matches two cases: segment with predicate or simply predicate:
@@ -130,27 +131,35 @@ sap.ui.define([
130
131
  /**
131
132
  * Deletes an entity on the server and in the cached data.
132
133
  *
133
- * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
134
- * A lock for the group ID
134
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} [oGroupLock]
135
+ * A lock for the group ID to be used for the DELETE request; w/o a lock, no DELETE is sent.
136
+ * For a transient entity, the lock is ignored (use NULL)!
135
137
  * @param {string} sEditUrl
136
- * The entity's edit URL
138
+ * The entity's edit URL to be used for the DELETE request; w/o a lock, this is mostly
139
+ * ignored.
137
140
  * @param {string} sPath
138
141
  * The entity's path within the cache (as used by change listeners)
139
142
  * @param {object} [oETagEntity]
140
143
  * An entity with the ETag of the binding for which the deletion was requested. This is
141
144
  * provided if the deletion is delegated from a context binding with empty path to a list
142
- * binding.
145
+ * binding. W/o a lock, this is ignored.
146
+ * @param {boolean} [bDoNotRequestCount]
147
+ * Whether not to request the new count from the server; useful in case of
148
+ * {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
149
+ * unchanged; w/o a lock this should be true
143
150
  * @param {function} fnCallback
144
151
  * A function which is called after a transient entity has been deleted from the cache or
145
152
  * after the entity has been deleted from the server and from the cache; the index of the
146
- * entity and the entity list are passed as parameter
153
+ * entity and the entity list are both passed as parameter, or none of them
147
154
  * @returns {sap.ui.base.SyncPromise}
148
- * A promise for the DELETE request
155
+ * A promise which is resolved without a result in case of success, or rejected with an
156
+ * instance of <code>Error</code> in case of failure
149
157
  * @throws {Error} If the cache is shared
150
158
  *
151
159
  * @public
152
160
  */
153
- _Cache.prototype._delete = function (oGroupLock, sEditUrl, sPath, oETagEntity, fnCallback) {
161
+ _Cache.prototype._delete = function (oGroupLock, sEditUrl, sPath, oETagEntity,
162
+ bDoNotRequestCount, fnCallback) {
154
163
  var aSegments = sPath.split("/"),
155
164
  vDeleteProperty = aSegments.pop(),
156
165
  iIndex = rNumber.test(vDeleteProperty) ? Number(vDeleteProperty) : undefined,
@@ -175,7 +184,6 @@ sap.ui.define([
175
184
  throw new Error("No 'delete' allowed while waiting for server response");
176
185
  }
177
186
  if (sTransientGroup) {
178
- oGroupLock.unlock();
179
187
  that.oRequestor.removePost(sTransientGroup, oEntity);
180
188
  return undefined;
181
189
  }
@@ -186,37 +194,38 @@ sap.ui.define([
186
194
  mHeaders = {"If-Match" : oETagEntity || oEntity};
187
195
  sEditUrl += that.oRequestor.buildQueryString(that.sMetaPath, that.mQueryOptions, true);
188
196
  return SyncPromise.all([
189
- that.oRequestor.request("DELETE", sEditUrl, oGroupLock.getUnlockedCopy(), mHeaders,
190
- undefined, undefined, undefined, undefined,
191
- _Helper.buildPath(that.getOriginalResourcePath(oEntity), sEntityPath))
192
- .catch(function (oError) {
193
- if (oError.status !== 404) {
194
- delete oEntity["$ui5.deleting"];
195
- throw oError;
196
- } // else: map 404 to 200
197
- })
198
- .then(function () {
199
- if (Array.isArray(vCacheData)) {
200
- fnCallback(
201
- that.removeElement(vCacheData, iIndex, sKeyPredicate, sParentPath),
202
- vCacheData);
203
- } else {
204
- if (vDeleteProperty) {
205
- // set to null and notify listeners
206
- _Helper.updateExisting(that.mChangeListeners, sParentPath,
207
- vCacheData, _Cache.makeUpdateData([vDeleteProperty], null));
208
- } else { // deleting at root level
209
- oEntity["$ui5.deleted"] = true;
210
- }
211
- fnCallback();
212
- }
213
- that.oRequestor.getModelInterface().reportStateMessages(that.sResourcePath,
214
- [], [sEntityPath]);
215
- }),
197
+ oGroupLock
198
+ && that.oRequestor.request("DELETE", sEditUrl, oGroupLock.getUnlockedCopy(),
199
+ mHeaders, undefined, undefined, undefined, undefined,
200
+ _Helper.buildPath(that.getOriginalResourcePath(oEntity), sEntityPath))
201
+ .catch(function (oError) {
202
+ if (oError.status !== 404) {
203
+ delete oEntity["$ui5.deleting"];
204
+ throw oError;
205
+ } // else: map 404 to 200
206
+ }),
216
207
  iIndex === undefined // single element or kept-alive not in list
208
+ && !bDoNotRequestCount
217
209
  && that.requestCount(oGroupLock),
218
- oGroupLock.unlock() // unlock when all requests have been queued
219
- ]);
210
+ oGroupLock && oGroupLock.unlock() // unlock when all requests have been queued
211
+ ]).then(function () {
212
+ if (Array.isArray(vCacheData)) {
213
+ fnCallback(
214
+ that.removeElement(vCacheData, iIndex, sKeyPredicate, sParentPath),
215
+ vCacheData);
216
+ } else {
217
+ if (vDeleteProperty) {
218
+ // set to null and notify listeners
219
+ _Helper.updateExisting(that.mChangeListeners, sParentPath,
220
+ vCacheData, _Cache.makeUpdateData([vDeleteProperty], null));
221
+ } else { // deleting at root level
222
+ oEntity["$ui5.deleted"] = true;
223
+ }
224
+ fnCallback();
225
+ }
226
+ that.oRequestor.getModelInterface().reportStateMessages(that.sResourcePath,
227
+ {}, [sEntityPath]);
228
+ });
220
229
  }).finally(function () {
221
230
  that.removePendingRequest();
222
231
  });
@@ -251,7 +260,7 @@ sap.ui.define([
251
260
  * A map from meta path to the entity type (as delivered by {@link #fetchTypes})
252
261
  * @param {string} sMetaPath
253
262
  * The meta path for the entity
254
- * @returns {string}
263
+ * @returns {string|undefined}
255
264
  * The key predicate or <code>undefined</code>, if key predicate cannot be determined
256
265
  * @private
257
266
  */
@@ -313,7 +322,8 @@ sap.ui.define([
313
322
  */
314
323
  _Cache.prototype.create = function (oGroupLock, oPostPathPromise, sPath, sTransientPredicate,
315
324
  oEntityData, fnErrorCallback, fnSubmitCallback) {
316
- var aCollection,
325
+ var aCollection = this.getValue(sPath),
326
+ sGroupId = oGroupLock.getGroupId(),
317
327
  bKeepTransientPath = oEntityData && oEntityData["@$ui5.keepTransientPath"],
318
328
  oPostBody,
319
329
  that = this;
@@ -323,7 +333,10 @@ sap.ui.define([
323
333
  _Helper.removeByPath(that.mPostRequests, sPath, oEntityData);
324
334
  aCollection.splice(aCollection.indexOf(oEntityData), 1);
325
335
  aCollection.$created -= 1;
326
- addToCount(that.mChangeListeners, sPath, aCollection, -1);
336
+ if (!oEntityData["@$ui5.context.isInactive"]) {
337
+ that.iActiveElements -= 1;
338
+ addToCount(that.mChangeListeners, sPath, aCollection, -1);
339
+ }
327
340
  delete aCollection.$byPredicate[sTransientPredicate];
328
341
  if (!sPath) {
329
342
  // Note: sPath is empty only in a CollectionCache, so we may call adjustReadRequests
@@ -340,10 +353,8 @@ sap.ui.define([
340
353
  }
341
354
 
342
355
  function request(sPostPath, oPostGroupLock) {
343
- var sPostGroupId = oPostGroupLock.getGroupId();
344
-
345
356
  // mark as transient (again)
346
- _Helper.setPrivateAnnotation(oEntityData, "transient", sPostGroupId);
357
+ _Helper.setPrivateAnnotation(oEntityData, "transient", sGroupId);
347
358
  _Helper.addByPath(that.mPostRequests, sPath, oEntityData);
348
359
  return SyncPromise.all([
349
360
  that.oRequestor.request("POST", sPostPath, oPostGroupLock, null, oPostBody,
@@ -395,13 +406,22 @@ sap.ui.define([
395
406
  if (that.fetchTypes().isRejected()) {
396
407
  throw oError;
397
408
  }
398
- return request(sPostPath, that.oRequestor.lockGroup(
399
- that.oRequestor.getGroupSubmitMode(sPostGroupId) === "API" ?
400
- sPostGroupId : "$parked." + sPostGroupId, that, true, true));
409
+ sGroupId = sGroupId.replace(rInactive, "");
410
+ sGroupId = that.oRequestor.getGroupSubmitMode(sGroupId) === "API"
411
+ ? sGroupId
412
+ : "$parked." + sGroupId;
413
+
414
+ return request(sPostPath,
415
+ that.oRequestor.lockGroup(sGroupId, that, true, true));
401
416
  });
402
417
  }
403
418
 
404
419
  this.checkSharedRequest();
420
+ if (!Array.isArray(aCollection)) {
421
+ throw new Error("Create is only supported for collections; '" + sPath
422
+ + "' does not reference a collection");
423
+ }
424
+
405
425
  // clone data to avoid modifications outside the cache
406
426
  // remove any property starting with "@$ui5."
407
427
  oEntityData = _Helper.publicClone(oEntityData, true) || {};
@@ -410,15 +430,15 @@ sap.ui.define([
410
430
  _Helper.setPrivateAnnotation(oEntityData, "postBody", oPostBody);
411
431
  _Helper.setPrivateAnnotation(oEntityData, "transientPredicate", sTransientPredicate);
412
432
  oEntityData["@$ui5.context.isTransient"] = true;
413
-
414
- aCollection = this.getValue(sPath);
415
- if (!Array.isArray(aCollection)) {
416
- throw new Error("Create is only supported for collections; '" + sPath
417
- + "' does not reference a collection");
433
+ if (sGroupId.startsWith("$inactive.")) {
434
+ oEntityData["@$ui5.context.isInactive"] = true;
435
+ } else {
436
+ this.iActiveElements += 1;
437
+ addToCount(this.mChangeListeners, sPath, aCollection, 1);
418
438
  }
439
+
419
440
  aCollection.unshift(oEntityData);
420
441
  aCollection.$created += 1;
421
- addToCount(this.mChangeListeners, sPath, aCollection, 1);
422
442
  // if the nested collection is empty $byPredicate is not available, create it on demand
423
443
  aCollection.$byPredicate = aCollection.$byPredicate || {};
424
444
  aCollection.$byPredicate[sTransientPredicate] = oEntityData;
@@ -626,7 +646,7 @@ sap.ui.define([
626
646
  * @param {string} sMissingPropertyPath
627
647
  * The path of the missing property relative to oResource; this property is returned so that
628
648
  * drillDown can proceed
629
- * @returns {sap.ui.base.SyncPromise}
649
+ * @returns {sap.ui.base.SyncPromise|undefined}
630
650
  * A promise resolving with the missing property value or <code>undefined</code> if the
631
651
  * requested property is not an expected late property; it rejects with an error if the GET
632
652
  * request failed, or if the key predicate or the ETag has changed
@@ -803,7 +823,8 @@ sap.ui.define([
803
823
  * @private
804
824
  */
805
825
  _Cache.prototype.fetchTypes = function () {
806
- var aPromises, mTypeForMetaPath, that = this;
826
+ var aPromises, mTypeForMetaPath,
827
+ that = this;
807
828
 
808
829
  /*
809
830
  * Recursively calls fetchType for all (sub)paths in $expand.
@@ -939,6 +960,7 @@ sap.ui.define([
939
960
  *
940
961
  * @public
941
962
  */
963
+ // eslint-disable-next-line valid-jsdoc -- in the subclasses the function does return a value
942
964
  _Cache.prototype.getValue = function (_sPath) {
943
965
  throw new Error("Unsupported operation");
944
966
  };
@@ -989,16 +1011,31 @@ sap.ui.define([
989
1011
  *
990
1012
  * @param {string} sPath
991
1013
  * The relative path of a binding; must not end with '/'
1014
+ * @param {boolean} [bIgnoreKeptAlive]
1015
+ * Whether to ignore changes which will not be lost by APIs like sort or filter because they
1016
+ * relate to a context which is kept alive
1017
+ * @param {boolean} [bIgnoreTransient]
1018
+ * Whether to ignore transient elements which will not be lost by APIs like sort or filter
992
1019
  * @returns {boolean}
993
1020
  * <code>true</code> if there are pending changes
994
1021
  *
995
1022
  * @public
996
1023
  */
997
- _Cache.prototype.hasPendingChangesForPath = function (sPath) {
1024
+ _Cache.prototype.hasPendingChangesForPath = function (sPath, bIgnoreKeptAlive,
1025
+ bIgnoreTransient) {
1026
+ var that = this;
1027
+
998
1028
  return Object.keys(this.mPatchRequests).some(function (sRequestPath) {
999
- return isSubPath(sRequestPath, sPath);
1000
- }) || Object.keys(this.mPostRequests).some(function (sRequestPath) {
1001
- return isSubPath(sRequestPath, sPath);
1029
+ return isSubPath(sRequestPath, sPath)
1030
+ && !(bIgnoreKeptAlive
1031
+ && that.mPatchRequests[sRequestPath].every(function (oPatchPromise) {
1032
+ return oPatchPromise.$isKeepAlive();
1033
+ }));
1034
+ }) || !bIgnoreTransient && Object.keys(this.mPostRequests).some(function (sRequestPath) {
1035
+ return isSubPath(sRequestPath, sPath)
1036
+ && that.mPostRequests[sRequestPath].some(function (oEntityData) {
1037
+ return !oEntityData["@$ui5.context.isInactive"];
1038
+ });
1002
1039
  });
1003
1040
  };
1004
1041
 
@@ -1161,9 +1198,9 @@ sap.ui.define([
1161
1198
  oEntity = aElements.$byPredicate[sPredicate];
1162
1199
  }
1163
1200
  sKeyFilter = _Helper.getKeyFilter(oEntity, that.sMetaPath, mTypeForMetaPath);
1164
- sInCollectionFilter =
1165
- (mQueryOptions.$filter ? "(" + mQueryOptions.$filter + ") and " : "")
1166
- + sKeyFilter;
1201
+ sInCollectionFilter
1202
+ = (mQueryOptions.$filter ? "(" + mQueryOptions.$filter + ") and " : "")
1203
+ + sKeyFilter;
1167
1204
  delete mQueryOptions.$count;
1168
1205
  delete mQueryOptions.$orderby;
1169
1206
 
@@ -1220,7 +1257,7 @@ sap.ui.define([
1220
1257
  } else if (aReadResult.length === 0) {
1221
1258
  that.removeElement(aElements, iIndex, sPredicate, sPath);
1222
1259
  that.oRequestor.getModelInterface()
1223
- .reportStateMessages(that.sResourcePath, [], [sPath + sPredicate]);
1260
+ .reportStateMessages(that.sResourcePath, {}, [sPath + sPredicate]);
1224
1261
  fnOnRemove(false);
1225
1262
  } else if (bRemoveFromCollection) {
1226
1263
  that.removeElement(aElements, iIndex, sPredicate, sPath);
@@ -1286,6 +1323,9 @@ sap.ui.define([
1286
1323
  sTransientPredicate = _Helper.getPrivateAnnotation(oElement, "transientPredicate");
1287
1324
  if (sTransientPredicate) {
1288
1325
  aElements.$created -= 1;
1326
+ if (!sPath) {
1327
+ this.iActiveElements -= 1;
1328
+ }
1289
1329
  delete aElements.$byPredicate[sTransientPredicate];
1290
1330
  } else if (!sPath) {
1291
1331
  // Note: sPath is empty only in a CollectionCache, so we may use iLmit and
@@ -1352,7 +1392,7 @@ sap.ui.define([
1352
1392
  mTypeForMetaPath, sPath) {
1353
1393
  var oOldElement, sTransientPredicate;
1354
1394
 
1355
- if (iIndex === undefined) {// kept-alive element not in the list
1395
+ if (iIndex === undefined) { // kept-alive element not in the list
1356
1396
  aElements.$byPredicate[sPredicate] = oElement;
1357
1397
  } else {
1358
1398
  // the element might have moved due to parallel insert/delete
@@ -1377,13 +1417,15 @@ sap.ui.define([
1377
1417
  *
1378
1418
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
1379
1419
  * A lock for the group ID
1380
- * @returns {Promise}
1381
- * A promise that resolves if the count has been determined or undefined if no request needed
1420
+ * @returns {Promise|undefined}
1421
+ * A promise that resolves if the count has been determined or <code>undefined</code> if no
1422
+ * request needed
1382
1423
  *
1383
1424
  * @private
1384
1425
  */
1385
1426
  _Cache.prototype.requestCount = function (oGroupLock) {
1386
- var sExclusiveFilter, mQueryOptions, sReadUrl, that = this;
1427
+ var sExclusiveFilter, mQueryOptions, sReadUrl,
1428
+ that = this;
1387
1429
 
1388
1430
  if (this.mQueryOptions && this.mQueryOptions.$count) {
1389
1431
  // now we are definitely in a CollectionCache
@@ -1410,7 +1452,7 @@ sap.ui.define([
1410
1452
  }
1411
1453
  throw oError;
1412
1454
  }).then(function (oResult) {
1413
- var iCount = parseInt(oResult["@odata.count"]) + that.aElements.$created;
1455
+ var iCount = parseInt(oResult["@odata.count"]) + that.iActiveElements;
1414
1456
 
1415
1457
  setCount(that.mChangeListeners, "", that.aElements, iCount);
1416
1458
  that.iLimit = iCount;
@@ -1451,9 +1493,11 @@ sap.ui.define([
1451
1493
  aEntities = that.mPostRequests[sRequestPath];
1452
1494
  for (i = aEntities.length - 1; i >= 0; i -= 1) {
1453
1495
  sTransientGroup = _Helper.getPrivateAnnotation(aEntities[i], "transient");
1454
- that.oRequestor.removePost(sTransientGroup, aEntities[i]);
1496
+ if (!sTransientGroup.startsWith("$inactive.")) {
1497
+ // this also cleans up that.mPostRequests
1498
+ that.oRequestor.removePost(sTransientGroup, aEntities[i]);
1499
+ }
1455
1500
  }
1456
- delete that.mPostRequests[sRequestPath];
1457
1501
  }
1458
1502
  });
1459
1503
  };
@@ -1620,6 +1664,8 @@ sap.ui.define([
1620
1664
  * @param {function} fnPatchSent
1621
1665
  * The function is called just before a back-end request is sent for the first time.
1622
1666
  * If no back-end request is needed, the function is not called.
1667
+ * @param {function} fnIsKeepAlive
1668
+ * A function to tell whether the entity is kept-alive
1623
1669
  * @returns {Promise}
1624
1670
  * A promise for the PATCH request (resolves with <code>undefined</code>); rejected in case of
1625
1671
  * cancellation or if no <code>fnErrorCallback</code> is given
@@ -1628,7 +1674,8 @@ sap.ui.define([
1628
1674
  * @public
1629
1675
  */
1630
1676
  _Cache.prototype.update = function (oGroupLock, sPropertyPath, vValue, fnErrorCallback,
1631
- sEditUrl, sEntityPath, sUnitOrCurrencyPath, bPatchWithoutSideEffects, fnPatchSent) {
1677
+ sEditUrl, sEntityPath, sUnitOrCurrencyPath, bPatchWithoutSideEffects, fnPatchSent,
1678
+ fnIsKeepAlive) {
1632
1679
  var oPromise,
1633
1680
  aPropertyPath = sPropertyPath.split("/"),
1634
1681
  aUnitOrCurrencyPath,
@@ -1691,6 +1738,7 @@ sap.ui.define([
1691
1738
  mHeaders, oUpdateData, onSubmit, onCancel, /*sMetaPath*/undefined,
1692
1739
  _Helper.buildPath(that.getOriginalResourcePath(oEntity), sEntityPath),
1693
1740
  bAtFront);
1741
+ oPatchPromise.$isKeepAlive = fnIsKeepAlive;
1694
1742
  _Helper.addByPath(that.mPatchRequests, sFullPath, oPatchPromise);
1695
1743
  return SyncPromise.all([
1696
1744
  oPatchPromise,
@@ -1761,9 +1809,10 @@ sap.ui.define([
1761
1809
  if (sTransientGroup === true) {
1762
1810
  throw new Error("No 'update' allowed while waiting for server response");
1763
1811
  }
1764
- if (sTransientGroup.startsWith("$parked.")) {
1812
+ if (sTransientGroup.startsWith("$parked.")
1813
+ || sTransientGroup.startsWith("$inactive.")) {
1765
1814
  sParkedGroup = sTransientGroup;
1766
- sTransientGroup = sTransientGroup.slice(8);
1815
+ sTransientGroup = sTransientGroup.slice(sTransientGroup.indexOf(".") + 1);
1767
1816
  }
1768
1817
  if (sTransientGroup !== sGroupId) {
1769
1818
  throw new Error("The entity will be created via group '" + sTransientGroup
@@ -1772,13 +1821,18 @@ sap.ui.define([
1772
1821
  }
1773
1822
  // remember the old value
1774
1823
  vOldValue = _Helper.drillDown(oEntity, aPropertyPath);
1775
- // write the changed value into the cache
1776
- _Helper.updateAll(that.mChangeListeners, sEntityPath, oEntity, oUpdateData);
1777
1824
  oPostBody = _Helper.getPrivateAnnotation(oEntity, "postBody");
1778
1825
  if (oPostBody) {
1779
- // change listeners are already informed
1826
+ // change listeners are informed later
1780
1827
  _Helper.updateAll({}, sEntityPath, oPostBody, oUpdateData);
1828
+ if (oEntity["@$ui5.context.isInactive"]) {
1829
+ oUpdateData["@$ui5.context.isInactive"] = false;
1830
+ that.iActiveElements += 1;
1831
+ addToCount(that.mChangeListeners, "", that.aElements, 1);
1832
+ }
1781
1833
  }
1834
+ // write the changed value into the cache
1835
+ _Helper.updateAll(that.mChangeListeners, sEntityPath, oEntity, oUpdateData);
1782
1836
  if (sUnitOrCurrencyPath) {
1783
1837
  aUnitOrCurrencyPath = sUnitOrCurrencyPath.split("/");
1784
1838
  sUnitOrCurrencyPath = _Helper.buildPath(sEntityPath, sUnitOrCurrencyPath);
@@ -1816,7 +1870,7 @@ sap.ui.define([
1816
1870
  * predicates for all entities in the result. Collects and reports OData messages via
1817
1871
  * {@link sap.ui.model.odata.v4.lib._Requestor#reportStateMessages}.
1818
1872
  *
1819
- * @param {*} oRoot An OData response, arrays or simple values are wrapped into an object as
1873
+ * @param {any} oRoot An OData response, arrays or simple values are wrapped into an object as
1820
1874
  * property "value"
1821
1875
  * @param {object} mTypeForMetaPath A map from absolute meta path to entity type (as delivered
1822
1876
  * by {@link #fetchTypes})
@@ -1874,7 +1928,7 @@ sap.ui.define([
1874
1928
  * Calls visitInstance for all object entries of the given collection and creates the map
1875
1929
  * $byPredicate from predicate to entity.
1876
1930
  *
1877
- * @param {*[]} aInstances The collection
1931
+ * @param {any[]} aInstances The collection
1878
1932
  * @param {string} sMetaPath The meta path of the collection in mTypeForMetaPath
1879
1933
  * @param {string} sCollectionPath The path of the collection
1880
1934
  * @param {string} sContextUrl The context URL for message longtexts
@@ -2024,11 +2078,13 @@ sap.ui.define([
2024
2078
  return sDeepResourcePath;
2025
2079
  }, bSharedRequest);
2026
2080
 
2081
+ this.iActiveElements = 0; // number of active (client-side) created elements
2027
2082
  this.sContext = undefined; // the "@odata.context" from the responses
2028
2083
  this.aElements = []; // the available elements
2029
2084
  this.aElements.$byPredicate = {};
2030
2085
  this.aElements.$count = undefined; // see setCount
2031
- this.aElements.$created = 0; // number of (client-side) created elements
2086
+ // number of all (client-side) created elements (active or inactive)
2087
+ this.aElements.$created = 0;
2032
2088
  this.aElements.$tail = undefined; // promise for a read w/o $top
2033
2089
  // upper limit for @odata.count, maybe sharp; assumes #getQueryString can $filter out all
2034
2090
  // created elements
@@ -2073,6 +2129,19 @@ sap.ui.define([
2073
2129
  });
2074
2130
  };
2075
2131
 
2132
+ /**
2133
+ * Replaces the old element at the given index with the given new element.
2134
+ *
2135
+ * @param {number} iIndex - The index
2136
+ * @param {object} oElement - The new element
2137
+ *
2138
+ * @public
2139
+ */
2140
+ _CollectionCache.prototype.doReplaceWith = function (iIndex, oElement) {
2141
+ this.aElements[iIndex] = oElement;
2142
+ this.addKeptElement(oElement); // maintain $byPredicate
2143
+ };
2144
+
2076
2145
  /**
2077
2146
  * Returns a promise to be resolved (synchronously if possible) with an OData object for the
2078
2147
  * requested data.
@@ -2162,13 +2231,13 @@ sap.ui.define([
2162
2231
  for (i = iStart; i < iEnd; i += 1) {
2163
2232
  this.aElements[i] = oPromise;
2164
2233
  }
2165
- this.oSyncPromiseAll = undefined; // from now on, fetchValue has to wait again
2234
+ this.oSyncPromiseAll = undefined; // from now on, fetchValue has to wait again
2166
2235
  };
2167
2236
 
2168
2237
  /**
2169
2238
  * Returns a filter that excludes all created entities in this cache's collection.
2170
2239
  *
2171
- * @returns {string}
2240
+ * @returns {string|undefined}
2172
2241
  * The filter or <code>undefined</code> if there is no created entity.
2173
2242
  *
2174
2243
  * @private
@@ -2231,7 +2300,8 @@ sap.ui.define([
2231
2300
  * The start index of the range
2232
2301
  * @param {number} iEnd
2233
2302
  * The index after the last element
2234
- * @returns {string} The resource path including the query string
2303
+ * @returns {string}
2304
+ * The resource path including the query string
2235
2305
  * @throws {Error}
2236
2306
  * If there are created elements inside the given range
2237
2307
  *
@@ -2284,11 +2354,11 @@ sap.ui.define([
2284
2354
  * @private
2285
2355
  */
2286
2356
  _CollectionCache.prototype.handleResponse = function (iStart, iEnd, oResult, mTypeForMetaPath) {
2287
- var iCount = -1,
2288
- sCount,
2357
+ var sCount,
2289
2358
  iCreated = this.aElements.$created,
2290
2359
  oElement,
2291
2360
  oKeptElement,
2361
+ iLimit = -1,
2292
2362
  iOld$count = this.aElements.$count,
2293
2363
  sPredicate,
2294
2364
  iResultLength = oResult.value.length,
@@ -2303,7 +2373,8 @@ sap.ui.define([
2303
2373
  oKeptElement = this.aElements.$byPredicate[sPredicate];
2304
2374
  if (oKeptElement) {
2305
2375
  if (oElement["@odata.etag"] === oKeptElement["@odata.etag"]) {
2306
- _Helper.merge(oElement, oKeptElement);
2376
+ _Helper.updateNonExisting(oKeptElement, oElement);
2377
+ oElement = oKeptElement;
2307
2378
  } else if (this.hasPendingChangesForPath(sPredicate)) {
2308
2379
  throw new Error("Modified on client and on server: "
2309
2380
  + this.sResourcePath + sPredicate);
@@ -2315,7 +2386,7 @@ sap.ui.define([
2315
2386
  }
2316
2387
  sCount = oResult["@odata.count"];
2317
2388
  if (sCount) {
2318
- this.iLimit = iCount = parseInt(sCount);
2389
+ this.iLimit = iLimit = parseInt(sCount);
2319
2390
  }
2320
2391
  if (oResult["@odata.nextLink"]) { // server-driven paging
2321
2392
  this.bServerDrivenPaging = true;
@@ -2327,25 +2398,26 @@ sap.ui.define([
2327
2398
  this.aElements.length = iStart + iResultLength;
2328
2399
  }
2329
2400
  } else if (iResultLength < iEnd - iStart) { // short read
2330
- if (iCount === -1) {
2401
+ if (iLimit === -1) {
2331
2402
  // use formerly computed $count
2332
- iCount = iOld$count && iOld$count - iCreated;
2403
+ iLimit = iOld$count && iOld$count - this.iActiveElements;
2333
2404
  }
2334
- iCount = Math.min(
2335
- iCount !== undefined ? iCount : Infinity,
2405
+ iLimit = Math.min(
2406
+ iLimit !== undefined ? iLimit : Infinity,
2407
+ // length determined from the short read
2336
2408
  iStart - iCreated + iResultLength);
2337
- this.aElements.length = iCreated + iCount;
2338
- this.iLimit = iCount;
2409
+ this.aElements.length = iCreated + iLimit;
2410
+ this.iLimit = iLimit;
2339
2411
  // If the server did not send a count, the calculated count is greater than 0
2340
2412
  // and the element before has not been read yet, we do not know the count:
2341
2413
  // The element might or might not exist.
2342
- if (!sCount && iCount > 0 && !this.aElements[iCount - 1]) {
2343
- iCount = undefined;
2414
+ if (!sCount && iLimit > 0 && !this.aElements[iLimit - 1]) {
2415
+ iLimit = undefined;
2344
2416
  }
2345
2417
  }
2346
- if (iCount !== -1) {
2418
+ if (iLimit !== -1) {
2347
2419
  setCount(this.mChangeListeners, "", this.aElements,
2348
- iCount !== undefined ? iCount + iCreated : undefined);
2420
+ iLimit !== undefined ? iLimit + this.iActiveElements : undefined);
2349
2421
  }
2350
2422
  };
2351
2423
 
@@ -2435,7 +2507,7 @@ sap.ui.define([
2435
2507
  * A lock for the group ID
2436
2508
  * @param {function} fnOnRemove
2437
2509
  * A function which is called if a kept-alive element does no longer exist
2438
- * @returns {sap.ui.base.SyncPromise}
2510
+ * @returns {sap.ui.base.SyncPromise|undefined}
2439
2511
  * A promise resolving without a defined result, or rejecting with an error if the refresh
2440
2512
  * fails, or <code>undefined</code> if there are no kept-alive elements.
2441
2513
  *
@@ -2456,7 +2528,9 @@ sap.ui.define([
2456
2528
  var aKeyFilters,
2457
2529
  mQueryOptions = _Helper.merge({}, that.mQueryOptions);
2458
2530
 
2459
- _Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
2531
+ if (that.mLateQueryOptions) {
2532
+ _Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
2533
+ }
2460
2534
  delete mQueryOptions.$count;
2461
2535
  delete mQueryOptions.$orderby;
2462
2536
  delete mQueryOptions.$search;
@@ -2588,6 +2662,7 @@ sap.ui.define([
2588
2662
  mQueryOptions,
2589
2663
  mPredicates = {}, // a set of the predicates (as map to true) to speed up the search
2590
2664
  sResourcePath,
2665
+ bSkip,
2591
2666
  mTypeForMetaPath = this.fetchTypes().getResult(),
2592
2667
  that = this;
2593
2668
 
@@ -2662,8 +2737,15 @@ sap.ui.define([
2662
2737
  + this.oRequestor.buildQueryString(this.sMetaPath, mQueryOptions, false, true);
2663
2738
 
2664
2739
  return this.oRequestor.request("GET", sResourcePath, oGroupLock, undefined, undefined,
2665
- undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions
2666
- ).then(function (oResult) {
2740
+ undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions,
2741
+ this, function (aOtherPaths) {
2742
+ if (arguments.length) {
2743
+ aPaths = aPaths.concat(aOtherPaths);
2744
+ } else {
2745
+ bSkip = true; // my GET was merged
2746
+ return aPaths;
2747
+ }
2748
+ }).then(function (oResult) {
2667
2749
  var oElement, sPredicate, i, n;
2668
2750
 
2669
2751
  function preventKeyPredicateChange(sPath) {
@@ -2674,6 +2756,10 @@ sap.ui.define([
2674
2756
  });
2675
2757
  }
2676
2758
 
2759
+ if (bSkip) {
2760
+ return;
2761
+ }
2762
+
2677
2763
  if (oResult.value.length !== aElements.length) {
2678
2764
  throw new Error("Expected " + aElements.length + " row(s), but instead saw "
2679
2765
  + oResult.value.length);
@@ -2691,6 +2777,51 @@ sap.ui.define([
2691
2777
  });
2692
2778
  };
2693
2779
 
2780
+ /**
2781
+ * Resets this cache to its initial state, but keeps certain elements and their change listeners
2782
+ * alive.
2783
+ *
2784
+ * @param {string[]} aKeptElementPredicates
2785
+ * The key predicates for all kept-alive elements
2786
+ *
2787
+ * @public
2788
+ */
2789
+ _CollectionCache.prototype.reset = function (aKeptElementPredicates) {
2790
+ var mByPredicate = this.aElements.$byPredicate,
2791
+ mChangeListeners = this.mChangeListeners,
2792
+ oElement,
2793
+ iTransient = 0,
2794
+ i,
2795
+ that = this;
2796
+
2797
+ for (i = 0; i < this.aElements.$created; i += 1) {
2798
+ oElement = this.aElements[i];
2799
+ if (_Helper.getPrivateAnnotation(oElement, "transient")) {
2800
+ aKeptElementPredicates.push(
2801
+ _Helper.getPrivateAnnotation(oElement, "transientPredicate"));
2802
+ this.aElements[iTransient] = oElement;
2803
+ iTransient += 1;
2804
+ } else { // Note: "created persisted" elements must be active
2805
+ this.iActiveElements -= 1;
2806
+ }
2807
+ }
2808
+ this.mChangeListeners = {};
2809
+ this.sContext = undefined;
2810
+ this.aElements.length = this.aElements.$created = iTransient;
2811
+ this.aElements.$byPredicate = {};
2812
+ this.aElements.$count = undefined; // needed for setCount()
2813
+ this.iLimit = Infinity;
2814
+
2815
+ Object.keys(mChangeListeners).forEach(function (sPath) {
2816
+ if (aKeptElementPredicates.includes(sPath.split("/")[0])) {
2817
+ that.mChangeListeners[sPath] = mChangeListeners[sPath];
2818
+ }
2819
+ });
2820
+ aKeptElementPredicates.forEach(function (sPredicate) {
2821
+ that.aElements.$byPredicate[sPredicate] = mByPredicate[sPredicate];
2822
+ });
2823
+ };
2824
+
2694
2825
  //*********************************************************************************************
2695
2826
  // PropertyCache
2696
2827
  //*********************************************************************************************
@@ -3052,14 +3183,14 @@ sap.ui.define([
3052
3183
  _SingleCache.prototype.requestSideEffects = function (oGroupLock, aPaths,
3053
3184
  mNavigationPropertyPaths, sResourcePath) {
3054
3185
  var mMergeableQueryOptions,
3055
- oOldValuePromise = this.oPromise,
3056
3186
  mQueryOptions,
3057
3187
  oResult,
3188
+ bSkip,
3058
3189
  that = this;
3059
3190
 
3060
3191
  this.checkSharedRequest();
3061
3192
 
3062
- mQueryOptions = oOldValuePromise && _Helper.intersectQueryOptions(
3193
+ mQueryOptions = this.oPromise && _Helper.intersectQueryOptions(
3063
3194
  Object.assign({}, this.mQueryOptions, this.mLateQueryOptions), aPaths,
3064
3195
  this.oRequestor.getModelInterface().fetchMetadata,
3065
3196
  this.sMetaPath, mNavigationPropertyPaths);
@@ -3072,7 +3203,15 @@ sap.ui.define([
3072
3203
  + this.oRequestor.buildQueryString(this.sMetaPath, mQueryOptions, false, true);
3073
3204
  oResult = SyncPromise.all([
3074
3205
  this.oRequestor.request("GET", sResourcePath, oGroupLock, undefined, undefined,
3075
- undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions),
3206
+ undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions,
3207
+ this, function (aOtherPaths) {
3208
+ if (arguments.length) {
3209
+ aPaths = aPaths.concat(aOtherPaths);
3210
+ } else {
3211
+ bSkip = true; // my GET was merged
3212
+ return aPaths;
3213
+ }
3214
+ }),
3076
3215
  this.fetchTypes(),
3077
3216
  this.fetchValue(_GroupLock.$cached, "") // Note: includes some additional checks
3078
3217
  ]).then(function (aResult) {
@@ -3083,6 +3222,10 @@ sap.ui.define([
3083
3222
  var oNewValue = aResult[0],
3084
3223
  oOldValue = aResult[2];
3085
3224
 
3225
+ if (bSkip) {
3226
+ return;
3227
+ }
3228
+
3086
3229
  // ensure that the new value has a predicate although key properties were not requested
3087
3230
  _Helper.setPrivateAnnotation(oNewValue, "predicate",
3088
3231
  _Helper.getPrivateAnnotation(oOldValue, "predicate"));
@@ -3300,6 +3443,7 @@ sap.ui.define([
3300
3443
  _Cache.makeUpdateData = function (aPropertyPath, vValue) {
3301
3444
  return aPropertyPath.reduceRight(function (vValue0, sSegment) {
3302
3445
  var oResult = {};
3446
+
3303
3447
  oResult[sSegment] = vValue0;
3304
3448
  return oResult;
3305
3449
  }, vValue);