@openui5/sap.ui.core 1.96.5 → 1.99.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 (426) hide show
  1. package/.eslintrc.json +93 -3
  2. package/.reuse/dep5 +26 -31
  3. package/THIRDPARTY.txt +15 -21
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +1 -1
  6. package/src/jquery.sap.mobile.js +29 -19
  7. package/src/jquery.sap.properties.js +1 -1
  8. package/src/jquery.sap.resources.js +2 -2
  9. package/src/jquery.sap.script.js +1 -1
  10. package/src/jquery.sap.storage.js +3 -3
  11. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  12. package/src/sap/base/util/restricted/_castArray.js +1 -1
  13. package/src/sap/base/util/restricted/_compact.js +1 -1
  14. package/src/sap/base/util/restricted/_curry.js +1 -1
  15. package/src/sap/base/util/restricted/_debounce.js +1 -1
  16. package/src/sap/base/util/restricted/_difference.js +1 -1
  17. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  18. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  22. package/src/sap/base/util/restricted/_flatten.js +1 -1
  23. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_intersection.js +1 -1
  26. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  27. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  28. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  29. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isNil.js +1 -1
  31. package/src/sap/base/util/restricted/_max.js +1 -1
  32. package/src/sap/base/util/restricted/_merge.js +1 -1
  33. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  34. package/src/sap/base/util/restricted/_min.js +1 -1
  35. package/src/sap/base/util/restricted/_omit.js +1 -1
  36. package/src/sap/base/util/restricted/_pick.js +1 -1
  37. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  38. package/src/sap/base/util/restricted/_throttle.js +1 -1
  39. package/src/sap/base/util/restricted/_toArray.js +1 -1
  40. package/src/sap/base/util/restricted/_union.js +1 -1
  41. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  42. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  43. package/src/sap/base/util/restricted/_uniq.js +1 -1
  44. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  45. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  46. package/src/sap/base/util/restricted/_without.js +1 -1
  47. package/src/sap/base/util/restricted/_xor.js +1 -1
  48. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  49. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  50. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  51. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  52. package/src/sap/ui/Device.js +81 -169
  53. package/src/sap/ui/Global.js +11 -16
  54. package/src/sap/ui/VersionInfo.js +13 -10
  55. package/src/sap/ui/base/BindingParser.js +34 -7
  56. package/src/sap/ui/base/Event.js +1 -1
  57. package/src/sap/ui/base/EventProvider.js +1 -1
  58. package/src/sap/ui/base/Interface.js +1 -1
  59. package/src/sap/ui/base/ManagedObject.js +50 -29
  60. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  61. package/src/sap/ui/base/Metadata.js +1 -3
  62. package/src/sap/ui/base/Object.js +1 -1
  63. package/src/sap/ui/base/ObjectPool.js +1 -1
  64. package/src/sap/ui/core/.library +1 -27
  65. package/src/sap/ui/core/AppCacheBuster.js +4 -4
  66. package/src/sap/ui/core/BusyIndicator.js +1 -1
  67. package/src/sap/ui/core/BusyIndicatorUtils.js +1 -1
  68. package/src/sap/ui/core/Component.js +33 -11
  69. package/src/sap/ui/core/ComponentContainer.js +1 -1
  70. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  71. package/src/sap/ui/core/ComponentSupport.js +1 -1
  72. package/src/sap/ui/core/Configuration.js +79 -13
  73. package/src/sap/ui/core/Control.js +4 -3
  74. package/src/sap/ui/core/Core.js +4 -7
  75. package/src/sap/ui/core/CustomData.js +1 -1
  76. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  77. package/src/sap/ui/core/Element.js +6 -12
  78. package/src/sap/ui/core/ElementMetadata.js +1 -1
  79. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  80. package/src/sap/ui/core/EventBus.js +1 -1
  81. package/src/sap/ui/core/ExtensionPoint.js +1 -1
  82. package/src/sap/ui/core/FocusHandler.js +1 -1
  83. package/src/sap/ui/core/Fragment.js +1 -1
  84. package/src/sap/ui/core/HTML.js +3 -3
  85. package/src/sap/ui/core/HTMLRenderer.js +1 -1
  86. package/src/sap/ui/core/History.js +1 -1
  87. package/src/sap/ui/core/Icon.js +2 -3
  88. package/src/sap/ui/core/IconRenderer.js +1 -1
  89. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  90. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  91. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  92. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  93. package/src/sap/ui/core/InvisibleText.js +1 -1
  94. package/src/sap/ui/core/Item.js +1 -1
  95. package/src/sap/ui/core/LabelEnablement.js +9 -2
  96. package/src/sap/ui/core/LayoutData.js +1 -1
  97. package/src/sap/ui/core/ListItem.js +1 -1
  98. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  99. package/src/sap/ui/core/LocalBusyIndicatorRenderer.js +2 -2
  100. package/src/sap/ui/core/LocalBusyIndicatorSupport.js +1 -1
  101. package/src/sap/ui/core/Locale.js +1 -1
  102. package/src/sap/ui/core/LocaleData.js +39 -4
  103. package/src/sap/ui/core/Manifest.js +1 -1
  104. package/src/sap/ui/core/Message.js +1 -1
  105. package/src/sap/ui/core/Placeholder.js +28 -28
  106. package/src/sap/ui/core/Popup.js +3 -3
  107. package/src/sap/ui/core/RenderManager.js +3 -3
  108. package/src/sap/ui/core/Renderer.js +1 -1
  109. package/src/sap/ui/core/ResizeHandler.js +1 -1
  110. package/src/sap/ui/core/ScrollBar.js +4 -3
  111. package/src/sap/ui/core/ScrollBarRenderer.js +1 -1
  112. package/src/sap/ui/core/SeparatorItem.js +1 -1
  113. package/src/sap/ui/core/ThemeCheck.js +2 -2
  114. package/src/sap/ui/core/Title.js +1 -1
  115. package/src/sap/ui/core/TooltipBase.js +2 -2
  116. package/src/sap/ui/core/UIArea.js +3 -3
  117. package/src/sap/ui/core/UIComponent.js +1 -1
  118. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  119. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  120. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  121. package/src/sap/ui/core/XMLComposite.js +1 -1
  122. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  123. package/src/sap/ui/core/XMLTemplateProcessor.js +26 -5
  124. package/src/sap/ui/core/_IconRegistry.js +10 -1
  125. package/src/sap/ui/core/cache/LRUPersistentCache.js +4 -2
  126. package/src/sap/ui/core/date/Japanese.js +1 -1
  127. package/src/sap/ui/core/date/UniversalDateUtils.js +205 -2
  128. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  129. package/src/sap/ui/core/delegate/ScrollEnablement.js +9 -6
  130. package/src/sap/ui/core/dnd/DragAndDrop.js +2 -2
  131. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  132. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  133. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  134. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  135. package/src/sap/ui/core/format/DateFormat.js +562 -174
  136. package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +43 -0
  137. package/src/sap/ui/core/format/ListFormat.js +2 -2
  138. package/src/sap/ui/core/format/NumberFormat.js +1 -1
  139. package/src/sap/ui/core/format/TimezoneUtil.js +248 -0
  140. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  141. package/src/sap/ui/core/library.js +47 -10
  142. package/src/sap/ui/core/message/ControlMessageProcessor.js +5 -5
  143. package/src/sap/ui/core/message/Message.js +1 -1
  144. package/src/sap/ui/core/message/MessageManager.js +1 -1
  145. package/src/sap/ui/core/message/MessageMixin.js +2 -1
  146. package/src/sap/ui/core/message/MessageParser.js +1 -1
  147. package/src/sap/ui/core/message/MessageProcessor.js +22 -12
  148. package/src/sap/ui/core/messagebundle.properties +4 -0
  149. package/src/sap/ui/core/messagebundle_ar.properties +2 -0
  150. package/src/sap/ui/core/messagebundle_bg.properties +7 -5
  151. package/src/sap/ui/core/messagebundle_ca.properties +2 -0
  152. package/src/sap/ui/core/messagebundle_cs.properties +2 -0
  153. package/src/sap/ui/core/messagebundle_cy.properties +2 -0
  154. package/src/sap/ui/core/messagebundle_da.properties +2 -0
  155. package/src/sap/ui/core/messagebundle_de.properties +3 -1
  156. package/src/sap/ui/core/messagebundle_el.properties +2 -0
  157. package/src/sap/ui/core/messagebundle_en.properties +2 -0
  158. package/src/sap/ui/core/messagebundle_en_GB.properties +2 -0
  159. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +2 -0
  160. package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
  161. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +2 -0
  162. package/src/sap/ui/core/messagebundle_es.properties +2 -0
  163. package/src/sap/ui/core/messagebundle_es_MX.properties +2 -0
  164. package/src/sap/ui/core/messagebundle_et.properties +2 -0
  165. package/src/sap/ui/core/messagebundle_fi.properties +2 -0
  166. package/src/sap/ui/core/messagebundle_fr.properties +9 -7
  167. package/src/sap/ui/core/messagebundle_fr_CA.properties +2 -0
  168. package/src/sap/ui/core/messagebundle_hi.properties +2 -0
  169. package/src/sap/ui/core/messagebundle_hr.properties +2 -0
  170. package/src/sap/ui/core/messagebundle_hu.properties +2 -0
  171. package/src/sap/ui/core/messagebundle_id.properties +4 -2
  172. package/src/sap/ui/core/messagebundle_it.properties +3 -1
  173. package/src/sap/ui/core/messagebundle_iw.properties +2 -0
  174. package/src/sap/ui/core/messagebundle_ja.properties +2 -0
  175. package/src/sap/ui/core/messagebundle_kk.properties +2 -0
  176. package/src/sap/ui/core/messagebundle_ko.properties +2 -0
  177. package/src/sap/ui/core/messagebundle_lt.properties +2 -0
  178. package/src/sap/ui/core/messagebundle_lv.properties +3 -1
  179. package/src/sap/ui/core/messagebundle_ms.properties +2 -0
  180. package/src/sap/ui/core/messagebundle_nl.properties +2 -0
  181. package/src/sap/ui/core/messagebundle_no.properties +6 -4
  182. package/src/sap/ui/core/messagebundle_pl.properties +2 -0
  183. package/src/sap/ui/core/messagebundle_pt.properties +2 -0
  184. package/src/sap/ui/core/messagebundle_pt_PT.properties +2 -0
  185. package/src/sap/ui/core/messagebundle_ro.properties +2 -0
  186. package/src/sap/ui/core/messagebundle_ru.properties +23 -21
  187. package/src/sap/ui/core/messagebundle_sh.properties +2 -0
  188. package/src/sap/ui/core/messagebundle_sk.properties +2 -0
  189. package/src/sap/ui/core/messagebundle_sl.properties +2 -0
  190. package/src/sap/ui/core/messagebundle_sv.properties +2 -0
  191. package/src/sap/ui/core/messagebundle_th.properties +2 -0
  192. package/src/sap/ui/core/messagebundle_tr.properties +2 -0
  193. package/src/sap/ui/core/messagebundle_uk.properties +2 -0
  194. package/src/sap/ui/core/messagebundle_vi.properties +2 -0
  195. package/src/sap/ui/core/messagebundle_zh_CN.properties +2 -0
  196. package/src/sap/ui/core/messagebundle_zh_TW.properties +2 -0
  197. package/src/sap/ui/core/mvc/Controller.js +4 -4
  198. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  199. package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
  200. package/src/sap/ui/core/mvc/JSONView.js +2 -1
  201. package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
  202. package/src/sap/ui/core/mvc/JSView.js +1 -1
  203. package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
  204. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  205. package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
  206. package/src/sap/ui/core/mvc/View.js +2 -1
  207. package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
  208. package/src/sap/ui/core/mvc/XMLView.js +16 -3
  209. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  210. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  211. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  212. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  213. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  214. package/src/sap/ui/core/routing/Route.js +6 -6
  215. package/src/sap/ui/core/routing/Router.js +4 -3
  216. package/src/sap/ui/core/routing/Targets.js +17 -13
  217. package/src/sap/ui/core/rules/Misc.support.js +51 -1
  218. package/src/sap/ui/core/rules/Model.support.js +95 -8
  219. package/src/sap/ui/core/rules/Rendering.support.js +1 -4
  220. package/src/sap/ui/core/rules/View.support.js +14 -46
  221. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  222. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  223. package/src/sap/ui/core/service/Service.js +1 -1
  224. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  225. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  226. package/src/sap/ui/core/support/Plugin.js +2 -2
  227. package/src/sap/ui/core/support/RuleEngineOpaExtension.js +0 -1
  228. package/src/sap/ui/core/support/Support.js +1 -1
  229. package/src/sap/ui/core/support/controls/TreeViewer.js +1 -1
  230. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  231. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  232. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  233. package/src/sap/ui/core/support/plugins/Performance.js +1 -2
  234. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  235. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  236. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  237. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  238. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +2 -6
  239. package/src/sap/ui/core/support/trace/E2eTraceLib.js +3 -3
  240. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  241. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  242. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  243. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  244. package/src/sap/ui/core/tmpl/Template.js +1 -1
  245. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  246. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  247. package/src/sap/ui/core/util/DraftEnabledMockServer.js +21 -16
  248. package/src/sap/ui/core/util/Export.js +1 -1
  249. package/src/sap/ui/core/util/ExportCell.js +1 -1
  250. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  251. package/src/sap/ui/core/util/ExportRow.js +1 -1
  252. package/src/sap/ui/core/util/ExportType.js +1 -1
  253. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  254. package/src/sap/ui/core/util/File.js +1 -1
  255. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  256. package/src/sap/ui/core/util/MockServer.js +157 -58
  257. package/src/sap/ui/core/util/PasteHelper.js +4 -4
  258. package/src/sap/ui/core/util/XMLPreprocessor.js +16 -4
  259. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -1
  260. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  261. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  262. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  263. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  264. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  265. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  266. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  267. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  268. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  269. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  270. package/src/sap/ui/debug/ControlTree.js +1 -1
  271. package/src/sap/ui/debug/DebugEnv.js +1 -1
  272. package/src/sap/ui/debug/PropertyList.js +1 -1
  273. package/src/sap/ui/dom/includeStylesheet.js +8 -3
  274. package/src/sap/ui/events/jquery/EventExtension.js +1 -1
  275. package/src/sap/ui/events/jquery/EventSimulation.js +3 -13
  276. package/src/sap/ui/model/Binding.js +4 -3
  277. package/src/sap/ui/model/ChangeReason.js +1 -1
  278. package/src/sap/ui/model/ClientListBinding.js +7 -0
  279. package/src/sap/ui/model/ClientModel.js +6 -5
  280. package/src/sap/ui/model/ClientTreeBinding.js +1 -1
  281. package/src/sap/ui/model/ClientTreeBindingAdapter.js +1 -1
  282. package/src/sap/ui/model/CompositeBinding.js +1 -1
  283. package/src/sap/ui/model/CompositeDataState.js +26 -4
  284. package/src/sap/ui/model/CompositeType.js +1 -1
  285. package/src/sap/ui/model/ContextBinding.js +1 -1
  286. package/src/sap/ui/model/DataState.js +27 -6
  287. package/src/sap/ui/model/ListBinding.js +24 -5
  288. package/src/sap/ui/model/MetaModel.js +2 -3
  289. package/src/sap/ui/model/Model.js +6 -11
  290. package/src/sap/ui/model/SelectionModel.js +1 -1
  291. package/src/sap/ui/model/SimpleType.js +1 -1
  292. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  293. package/src/sap/ui/model/TreeBindingAdapter.js +0 -2
  294. package/src/sap/ui/model/TreeBindingUtils.js +2 -0
  295. package/src/sap/ui/model/Type.js +1 -1
  296. package/src/sap/ui/model/analytics/AnalyticalBinding.js +13 -8
  297. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +16 -18
  298. package/src/sap/ui/model/analytics/ODataModelAdapter.js +2 -15
  299. package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
  300. package/src/sap/ui/model/json/JSONListBinding.js +1 -1
  301. package/src/sap/ui/model/json/JSONModel.js +7 -7
  302. package/src/sap/ui/model/json/JSONPropertyBinding.js +2 -2
  303. package/src/sap/ui/model/message/MessageListBinding.js +1 -1
  304. package/src/sap/ui/model/message/MessageModel.js +3 -3
  305. package/src/sap/ui/model/message/MessagePropertyBinding.js +2 -2
  306. package/src/sap/ui/model/odata/AnnotationHelper.js +2 -2
  307. package/src/sap/ui/model/odata/AnnotationParser.js +4 -2
  308. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  309. package/src/sap/ui/model/odata/ODataListBinding.js +62 -39
  310. package/src/sap/ui/model/odata/ODataMessageParser.js +2 -2
  311. package/src/sap/ui/model/odata/ODataMetaModel.js +3 -3
  312. package/src/sap/ui/model/odata/ODataMetadata.js +138 -87
  313. package/src/sap/ui/model/odata/ODataModel.js +443 -216
  314. package/src/sap/ui/model/odata/ODataPropertyBinding.js +7 -5
  315. package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
  316. package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +27 -17
  317. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +440 -260
  318. package/src/sap/ui/model/odata/ODataUtils.js +24 -9
  319. package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +3 -2
  320. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +11 -9
  321. package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +7 -5
  322. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  323. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  324. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  325. package/src/sap/ui/model/odata/type/Date.js +1 -1
  326. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  327. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  328. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  329. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +338 -0
  330. package/src/sap/ui/model/odata/type/Decimal.js +5 -1
  331. package/src/sap/ui/model/odata/type/Double.js +1 -1
  332. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  333. package/src/sap/ui/model/odata/type/Int.js +1 -1
  334. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  335. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  336. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  337. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  338. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  339. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  340. package/src/sap/ui/model/odata/type/Single.js +1 -1
  341. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  342. package/src/sap/ui/model/odata/type/String.js +1 -1
  343. package/src/sap/ui/model/odata/type/Time.js +1 -1
  344. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  345. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  346. package/src/sap/ui/model/odata/type/UnitMixin.js +1 -2
  347. package/src/sap/ui/model/odata/v2/Context.js +98 -14
  348. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  349. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +8 -4
  350. package/src/sap/ui/model/odata/v2/ODataListBinding.js +418 -172
  351. package/src/sap/ui/model/odata/v2/ODataModel.js +242 -138
  352. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +164 -92
  353. package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +117 -7
  354. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +21 -22
  355. package/src/sap/ui/model/odata/v4/Context.js +249 -83
  356. package/src/sap/ui/model/odata/v4/ODataBinding.js +100 -43
  357. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +309 -228
  358. package/src/sap/ui/model/odata/v4/ODataListBinding.js +573 -278
  359. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +131 -100
  360. package/src/sap/ui/model/odata/v4/ODataModel.js +342 -259
  361. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +113 -100
  362. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +87 -81
  363. package/src/sap/ui/model/odata/v4/ODataUtils.js +5 -5
  364. package/src/sap/ui/model/odata/v4/SubmitMode.js +0 -1
  365. package/src/sap/ui/model/odata/v4/ValueListType.js +0 -1
  366. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +20 -20
  367. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +3 -5
  368. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +5 -4
  369. package/src/sap/ui/model/odata/v4/lib/_Batch.js +21 -20
  370. package/src/sap/ui/model/odata/v4/lib/_Cache.js +278 -103
  371. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +1 -1
  372. package/src/sap/ui/model/odata/v4/lib/_Helper.js +55 -21
  373. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +62 -61
  374. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +1 -1
  375. package/src/sap/ui/model/odata/v4/lib/_Parser.js +52 -43
  376. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +61 -41
  377. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +147 -147
  378. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +14 -13
  379. package/src/sap/ui/model/odata/v4/lib/_V4MetadataConverter.js +66 -67
  380. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  381. package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
  382. package/src/sap/ui/model/type/Boolean.js +1 -1
  383. package/src/sap/ui/model/type/Currency.js +1 -1
  384. package/src/sap/ui/model/type/Date.js +1 -1
  385. package/src/sap/ui/model/type/DateInterval.js +1 -1
  386. package/src/sap/ui/model/type/DateTime.js +1 -1
  387. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  388. package/src/sap/ui/model/type/FileSize.js +1 -1
  389. package/src/sap/ui/model/type/Float.js +1 -1
  390. package/src/sap/ui/model/type/Integer.js +1 -1
  391. package/src/sap/ui/model/type/String.js +1 -1
  392. package/src/sap/ui/model/type/Time.js +1 -1
  393. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  394. package/src/sap/ui/model/type/Unit.js +1 -1
  395. package/src/sap/ui/model/xml/XMLListBinding.js +1 -1
  396. package/src/sap/ui/model/xml/XMLModel.js +5 -5
  397. package/src/sap/ui/model/xml/XMLPropertyBinding.js +2 -2
  398. package/src/sap/ui/performance/trace/Passport.js +3 -3
  399. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  400. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  401. package/src/sap/ui/test/BlanketReporter.js +1 -1
  402. package/src/sap/ui/test/Opa5.js +1 -1
  403. package/src/sap/ui/test/TestUtils.js +2 -2
  404. package/src/sap/ui/test/_LogCollector.js +1 -1
  405. package/src/sap/ui/test/actions/Action.js +11 -2
  406. package/src/sap/ui/test/actions/Press.js +79 -3
  407. package/src/sap/ui/test/autowaiter/_XHRWaiter.js +1 -1
  408. package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +111 -0
  409. package/src/sap/ui/test/starter/createSuite.js +1 -2
  410. package/src/sap/ui/thirdparty/jquery-mobile-custom.js +3 -6
  411. package/src/sap/ui/thirdparty/jqueryui/jquery-ui-datepicker.js +143 -3
  412. package/src/sap/ui/thirdparty/jqueryui/jquery-ui-position.js +8 -1
  413. package/src/sap/ui/util/Mobile.js +28 -39
  414. package/src/sap/ui/util/Storage.js +1 -1
  415. package/src/sap/ui/util/XMLHelper.js +53 -30
  416. package/src/ui5loader.js +9 -9
  417. package/ui5.yaml +244 -1
  418. package/src/sap/ui/core/CustomizingConfiguration.js +0 -47
  419. package/src/sap/ui/thirdparty/baseuri.js +0 -1
  420. package/src/sap/ui/thirdparty/es6-object-assign.js +0 -1
  421. package/src/sap/ui/thirdparty/es6-promise.js +0 -1
  422. package/src/sap/ui/thirdparty/es6-shim-nopromise.js +0 -1
  423. package/src/sap/ui/thirdparty/es6-string-methods.js +0 -1
  424. package/src/sap/ui/thirdparty/flexie.js +0 -1
  425. package/src/sap/ui/thirdparty/unorm.js +0 -1
  426. package/src/sap/ui/thirdparty/unormdata.js +0 -1
@@ -9,12 +9,11 @@
9
9
  sap.ui.define([
10
10
  "./Context",
11
11
  "./ODataBinding",
12
- "./SubmitMode",
13
12
  "./lib/_Helper",
14
13
  "sap/base/Log",
15
14
  "sap/ui/base/SyncPromise",
16
15
  "sap/ui/model/ChangeReason"
17
- ], function (Context, asODataBinding, SubmitMode, _Helper, Log, SyncPromise, ChangeReason) {
16
+ ], function (Context, asODataBinding, _Helper, Log, SyncPromise, ChangeReason) {
18
17
  "use strict";
19
18
 
20
19
  /**
@@ -83,9 +82,10 @@ sap.ui.define([
83
82
  * The new value which must be primitive
84
83
  * @param {sap.ui.model.odata.v4.lib._GroupLock} [oGroupLock]
85
84
  * A lock for the group ID to be used for the PATCH request; without a lock, no PATCH is sent
86
- * @returns {sap.ui.base.SyncPromise} <code>undefined</code> for the general case which is
87
- * handled generically by the caller {@link sap.ui.model.odata.v4.Context#doSetProperty}
88
- * or a <code>SyncPromise</code> for the exceptional case
85
+ * @returns {sap.ui.base.SyncPromise|undefined}
86
+ * <code>undefined</code> for the general case which is handled generically by the caller
87
+ * {@link sap.ui.model.odata.v4.Context#doSetProperty} or a <code>SyncPromise</code> for the
88
+ * exceptional case
89
89
  *
90
90
  * @abstract
91
91
  * @function
@@ -191,15 +191,16 @@ sap.ui.define([
191
191
  * "5.1.2 System Query Option $expand" and "5.1.3 System Query Option $select" in specification
192
192
  * "OData Version 4.0 Part 2: URL Conventions".
193
193
  *
194
- * @param {object} mQueryOptions The query options to be merged
195
- * @param {string} sBaseMetaPath This binding's meta path
196
- * @param {boolean} bCacheImmutable Whether the cache of this binding is immutable
194
+ * @param {object} mQueryOptions - The query options to be merged
195
+ * @param {string} sBaseMetaPath - This binding's meta path
196
+ * @param {boolean} bCacheImmutable - Whether the cache of this binding is immutable
197
+ * @param {boolean} bIsProperty - Whether the child is a property binding
197
198
  * @returns {boolean} Whether the query options can be fulfilled by this binding
198
199
  *
199
200
  * @private
200
201
  */
201
202
  ODataParentBinding.prototype.aggregateQueryOptions = function (mQueryOptions, sBaseMetaPath,
202
- bCacheImmutable) {
203
+ bCacheImmutable, bIsProperty) {
203
204
  var mAggregatedQueryOptionsClone = _Helper.merge({},
204
205
  bCacheImmutable && this.mLateQueryOptions || this.mAggregatedQueryOptions),
205
206
  bChanged = false,
@@ -256,8 +257,9 @@ sap.ui.define([
256
257
 
257
258
  // Top-level all query options in the aggregate are OK, even if not repeated in the
258
259
  // child. In a $expand the child must also have them (and the second loop checks that
259
- // they're equal).
260
- return (!bInsideExpand || Object.keys(mAggregatedQueryOptions).every(function (sName) {
260
+ // they're equal). Property bindings are an exception to this rule.
261
+ return (bIsProperty || !bInsideExpand
262
+ || Object.keys(mAggregatedQueryOptions).every(function (sName) {
261
263
  return sName in mQueryOptions0 || sName === "$count" || sName === "$expand"
262
264
  || sName === "$select";
263
265
  }))
@@ -299,8 +301,8 @@ sap.ui.define([
299
301
  /**
300
302
  * Changes this binding's parameters and refreshes the binding.
301
303
  *
302
- * If there are pending changes an error is thrown. Use {@link #hasPendingChanges} to check if
303
- * there are pending changes. If there are changes, call
304
+ * If there are pending changes that cannot be ignored, an error is thrown. Use
305
+ * {@link #hasPendingChanges} to check if there are such pending changes. If there are, call
304
306
  * {@link sap.ui.model.odata.v4.ODataModel#submitBatch} to submit the changes or
305
307
  * {@link sap.ui.model.odata.v4.ODataModel#resetChanges} to reset the changes before calling
306
308
  * {@link #changeParameters}.
@@ -313,12 +315,16 @@ sap.ui.define([
313
315
  * Map of binding parameters, see {@link sap.ui.model.odata.v4.ODataModel#bindList} and
314
316
  * {@link sap.ui.model.odata.v4.ODataModel#bindContext}
315
317
  * @throws {Error}
316
- * If there are pending changes or if <code>mParameters</code> is missing, contains
317
- * binding-specific or unsupported parameters, contains unsupported values, or contains the
318
- * property "$expand" or "$select" when the model is in auto-$expand/$select mode.
319
- * Since 1.90.0, binding-specific parameters are ignored if they are unchanged. Since 1.93.0,
320
- * string values for "$expand" and "$select" are ignored if they are unchanged; pending
321
- * changes are ignored if all parameters are unchanged.
318
+ * If there are pending changes that cannot be ignored or if <code>mParameters</code> is
319
+ * missing, contains binding-specific or unsupported parameters, contains unsupported values,
320
+ * or contains the property "$expand" or "$select" when the model is in auto-$expand/$select
321
+ * mode. Since 1.90.0, binding-specific parameters are ignored if they are unchanged. Since
322
+ * 1.93.0, string values for "$expand" and "$select" are ignored if they are unchanged;
323
+ * pending changes are ignored if all parameters are unchanged. Since 1.97.0, pending changes
324
+ * are ignored if they relate to a
325
+ * {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
326
+ * Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
327
+ * of a {@link #getRootBinding root binding} do not count as pending changes.
322
328
  *
323
329
  * @public
324
330
  * @since 1.45.0
@@ -384,7 +390,7 @@ sap.ui.define([
384
390
  }
385
391
 
386
392
  if (sChangeReason) {
387
- if (this.hasPendingChanges()) {
393
+ if (this.hasPendingChanges(true)) {
388
394
  throw new Error("Cannot change parameters due to pending changes");
389
395
  }
390
396
  this.applyParameters(mBindingParameters, sChangeReason);
@@ -411,7 +417,7 @@ sap.ui.define([
411
417
  *
412
418
  * @returns {sap.ui.base.SyncPromise}
413
419
  * A promise resolving without a defined result when the check is finished, or rejecting in
414
- * case of an error (e.g. thrown by the change event handler of a control)
420
+ * case of an error
415
421
  * @throws {Error} If called with parameters
416
422
  *
417
423
  * @private
@@ -456,8 +462,11 @@ sap.ui.define([
456
462
  * The absolute path to the collection in the cache where to create the entity
457
463
  * @param {string} sTransientPredicate
458
464
  * A (temporary) key predicate for the transient entity: "($uid=...)"
459
- * @param {object} oInitialData
465
+ * @param {object} [oInitialData={}]
460
466
  * The initial data for the created entity
467
+ * @param {boolean} bAtEndOfCreated
468
+ * Whether the newly created entity should be inserted after previously created entities, not
469
+ * before them
461
470
  * @param {function} fnErrorCallback
462
471
  * A function which is called with an error object each time a POST request for the create
463
472
  * fails
@@ -470,7 +479,8 @@ sap.ui.define([
470
479
  * @private
471
480
  */
472
481
  ODataParentBinding.prototype.createInCache = function (oUpdateGroupLock, vCreatePath,
473
- sCollectionPath, sTransientPredicate, oInitialData, fnErrorCallback, fnSubmitCallback) {
482
+ sCollectionPath, sTransientPredicate, oInitialData, bAtEndOfCreated, fnErrorCallback,
483
+ fnSubmitCallback) {
474
484
  var that = this;
475
485
 
476
486
  return this.oCachePromise.then(function (oCache) {
@@ -479,7 +489,8 @@ sap.ui.define([
479
489
  if (oCache) {
480
490
  sPathInCache = _Helper.getRelativePath(sCollectionPath, that.getResolvedPath());
481
491
  return oCache.create(oUpdateGroupLock, vCreatePath, sPathInCache,
482
- sTransientPredicate, oInitialData, fnErrorCallback, fnSubmitCallback
492
+ sTransientPredicate, oInitialData, bAtEndOfCreated, fnErrorCallback,
493
+ fnSubmitCallback
483
494
  ).then(function (oCreatedEntity) {
484
495
  if (that.mCacheByResourcePath) {
485
496
  // Ensure that cache containing non-transient created entity is recreated
@@ -490,8 +501,8 @@ sap.ui.define([
490
501
  });
491
502
  }
492
503
  return that.oContext.getBinding().createInCache(oUpdateGroupLock, vCreatePath,
493
- sCollectionPath, sTransientPredicate, oInitialData, fnErrorCallback,
494
- fnSubmitCallback);
504
+ sCollectionPath, sTransientPredicate, oInitialData, bAtEndOfCreated,
505
+ fnErrorCallback, fnSubmitCallback);
495
506
  });
496
507
  };
497
508
 
@@ -563,46 +574,41 @@ sap.ui.define([
563
574
  * Deletes the entity in the cache. If the binding doesn't have a cache, it forwards to the
564
575
  * parent binding adjusting the path.
565
576
  *
566
- * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
567
- * A lock for the group ID to be used for the DELETE request; if no group ID is specified, it
568
- * defaults to <code>getUpdateGroupId()</code>()
577
+ * @param {sap.ui.model.odata.v4.lib._GroupLock} [oGroupLock]
578
+ * A lock for the group ID to be used for the DELETE request; w/o a lock, no DELETE is sent.
579
+ * For a transient entity, the lock is ignored (use NULL)!
569
580
  * @param {string} sEditUrl
570
- * The edit URL to be used for the DELETE request
581
+ * The entity's edit URL to be used for the DELETE request; w/o a lock, this is mostly
582
+ * ignored.
571
583
  * @param {string} sPath
572
584
  * The path of the entity relative to this binding
573
585
  * @param {object} [oETagEntity]
574
586
  * An entity with the ETag of the binding for which the deletion was requested. This is
575
587
  * provided if the deletion is delegated from a context binding with empty path to a list
576
- * binding.
588
+ * binding. W/o a lock, this is ignored.
589
+ * @param {boolean} [bDoNotRequestCount]
590
+ * Whether not to request the new count from the server; useful in case of
591
+ * {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
592
+ * unchanged; w/o a lock this should be true
577
593
  * @param {function} fnCallback
578
- * A function which is called after the entity has been deleted from the server and from the
579
- * cache; the index of the entity is passed as parameter
594
+ * A function which is called after a transient entity has been deleted from the cache or
595
+ * after the entity has been deleted from the server and from the cache; the index of the
596
+ * entity and the entity list are both passed as parameter, or none of them
580
597
  * @returns {sap.ui.base.SyncPromise}
581
598
  * A promise which is resolved without a result in case of success, or rejected with an
582
- * instance of <code>Error</code> in case of failure
599
+ * instance of <code>Error</code> in case of failure; returns <code>undefined</code> if the
600
+ * cache promise for this binding is not yet fulfilled
583
601
  * @throws {Error}
584
- * If the group ID has {@link sap.ui.model.odata.v4.SubmitMode.Auto} or if the cache promise
585
- * for this binding is not yet fulfilled
602
+ * If the cache is shared
586
603
  *
587
604
  * @private
588
605
  */
589
606
  ODataParentBinding.prototype.deleteFromCache = function (oGroupLock, sEditUrl, sPath,
590
- oETagEntity, fnCallback) {
591
- var sGroupId;
592
-
593
- if (this.oCache === undefined) {
594
- throw new Error("DELETE request not allowed");
595
- }
596
-
597
- if (this.oCache) {
598
- sGroupId = oGroupLock.getGroupId();
599
- if (!this.oModel.isAutoGroup(sGroupId) && !this.oModel.isDirectGroup(sGroupId)) {
600
- throw new Error("Illegal update group ID: " + sGroupId);
601
- }
602
- return this.oCache._delete(oGroupLock, sEditUrl, sPath, oETagEntity, fnCallback);
603
- }
604
- return this.oContext.getBinding().deleteFromCache(oGroupLock, sEditUrl,
605
- _Helper.buildPath(this.oContext.iIndex, this.sPath, sPath), oETagEntity, fnCallback);
607
+ oETagEntity, bDoNotRequestCount, fnCallback) {
608
+ return this.withCache(function (oCache, sCachePath) {
609
+ return oCache._delete(oGroupLock, sEditUrl, sCachePath, oETagEntity, bDoNotRequestCount,
610
+ fnCallback);
611
+ }, sPath, /*bSync*/true);
606
612
  };
607
613
 
608
614
  /**
@@ -612,7 +618,7 @@ sap.ui.define([
612
618
  * @since 1.61
613
619
  */
614
620
  ODataParentBinding.prototype.destroy = function () {
615
- // this.mAggregatedQueryOptions = undefined;
621
+ // this.mAggregatedQueryOptions = undefined;
616
622
  this.aChildCanUseCachePromises = [];
617
623
  this.removeReadGroupLock();
618
624
  this.oResumePromise = undefined;
@@ -641,15 +647,18 @@ sap.ui.define([
641
647
  * The child binding's binding path relative to <code>oContext</code>
642
648
  * @param {object|sap.ui.base.SyncPromise} vChildQueryOptions
643
649
  * The child binding's (aggregated) query options or a promise resolving with them
650
+ * @param {boolean} bIsProperty
651
+ * Whether the child is a property binding
644
652
  * @returns {sap.ui.base.SyncPromise}
645
653
  * A promise resolved with the reduced path for the child binding if the child binding can use
646
- * this binding's or an ancestor binding's cache; <code>undefined</code> otherwise.
654
+ * this binding's or an ancestor binding's cache; resolved with <code>undefined</code>
655
+ * otherwise.
647
656
  *
648
657
  * @private
649
658
  * @see sap.ui.model.odata.v4.ODataMetaModel#getReducedPath
650
659
  */
651
660
  ODataParentBinding.prototype.fetchIfChildCanUseCache = function (oContext, sChildPath,
652
- vChildQueryOptions) {
661
+ vChildQueryOptions, bIsProperty) {
653
662
  // getBaseForPathReduction must be called early, because the (virtual) parent context may be
654
663
  // lost again when the path is needed
655
664
  var sBaseForPathReduction = this.getBaseForPathReduction(),
@@ -759,9 +768,9 @@ sap.ui.define([
759
768
  that.bAggregatedQueryOptionsInitial = false;
760
769
  }
761
770
  if (bIsAdvertisement) {
762
- mWrappedChildQueryOptions = {"$select" : [sReducedChildMetaPath.slice(1)]};
771
+ mWrappedChildQueryOptions = {$select : [sReducedChildMetaPath.slice(1)]};
763
772
  return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
764
- bCacheImmutable)
773
+ bCacheImmutable, bIsProperty)
765
774
  ? sReducedPath
766
775
  : undefined;
767
776
  }
@@ -773,7 +782,7 @@ sap.ui.define([
773
782
  that.oModel.oInterface.fetchMetadata);
774
783
  if (mWrappedChildQueryOptions) {
775
784
  return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
776
- bCacheImmutable)
785
+ bCacheImmutable, bIsProperty)
777
786
  ? sReducedPath
778
787
  : undefined;
779
788
  }
@@ -781,7 +790,7 @@ sap.ui.define([
781
790
  }
782
791
  if (sReducedChildMetaPath === "value") { // symbolic name for operation result
783
792
  return that.aggregateQueryOptions(mChildQueryOptions, sBaseMetaPath,
784
- bCacheImmutable)
793
+ bCacheImmutable, bIsProperty)
785
794
  ? sReducedPath
786
795
  : undefined;
787
796
  }
@@ -825,7 +834,7 @@ sap.ui.define([
825
834
  // catch the error, but keep the rejected promise
826
835
  this.oCachePromise.catch(function (oError) {
827
836
  that.oModel.reportError(that + ": Failed to enhance query options for "
828
- + "auto-$expand/$select for child " + sChildPath, sClassName, oError);
837
+ + "auto-$expand/$select for child " + sChildPath, sClassName, oError);
829
838
  });
830
839
  return oCanUseCachePromise;
831
840
  };
@@ -858,9 +867,13 @@ sap.ui.define([
858
867
  sMetaPath = _Helper.getMetaPath(oModel.resolve(this.sPath, oContext));
859
868
  mConvertedQueryOptions = Object.assign({}, mQueryOptions, {$select : []});
860
869
  return SyncPromise.all(mQueryOptions.$select.map(function (sSelectPath) {
861
- return _Helper.fetchPropertyAndType(
862
- fnFetchMetadata, sMetaPath + "/" + sSelectPath
863
- ).then(function () {
870
+ var sMetaSelectPath = sMetaPath + "/" + sSelectPath;
871
+
872
+ if (sMetaSelectPath.endsWith(".*")) { // fetch metadata for namespace itself
873
+ sMetaSelectPath = sMetaSelectPath.slice(0, -1);
874
+ }
875
+
876
+ return _Helper.fetchPropertyAndType(fnFetchMetadata, sMetaSelectPath).then(function () {
864
877
  var mWrappedQueryOptions = _Helper.wrapChildQueryOptions(
865
878
  sMetaPath, sSelectPath, {}, fnFetchMetadata);
866
879
 
@@ -892,8 +905,7 @@ sap.ui.define([
892
905
  oParentBinding = this.oContext.getBinding();
893
906
  sParentUpdateGroupId = oParentBinding.getUpdateGroupId();
894
907
  if (sParentUpdateGroupId === this.getUpdateGroupId()
895
- || this.oModel.getGroupProperty(sParentUpdateGroupId, "submit")
896
- !== SubmitMode.API) {
908
+ || !this.oModel.isApiGroup(sParentUpdateGroupId)) {
897
909
  return oParentBinding.getBaseForPathReduction();
898
910
  }
899
911
  }
@@ -992,16 +1004,24 @@ sap.ui.define([
992
1004
  * @override
993
1005
  * @see sap.ui.model.odata.v4.ODataBinding#hasPendingChangesInDependents
994
1006
  */
995
- ODataParentBinding.prototype.hasPendingChangesInDependents = function () {
996
- var aDependents = this.getDependentBindings();
997
-
998
- return aDependents.some(function (oDependent) {
1007
+ ODataParentBinding.prototype.hasPendingChangesInDependents = function (bIgnoreKeptAlive0) {
1008
+ return this.getDependentBindings().some(function (oDependent) {
999
1009
  var oCache = oDependent.oCache,
1000
- bHasPendingChanges;
1010
+ bHasPendingChanges,
1011
+ bIgnoreKeptAlive = bIgnoreKeptAlive0; // new copy for this dependent only
1001
1012
 
1013
+ if (bIgnoreKeptAlive) {
1014
+ if (oDependent.oContext.isKeepAlive()) {
1015
+ return false; // changes can be safely ignored here
1016
+ }
1017
+ if (oDependent.oContext.getIndex() !== undefined) {
1018
+ bIgnoreKeptAlive = false; // context of ODLB which is not kept alive: unsafe!
1019
+ }
1020
+ }
1002
1021
  if (oCache !== undefined) {
1003
1022
  // Pending changes for this cache are only possible when there is a cache already
1004
- if (oCache && oCache.hasPendingChangesForPath("")) {
1023
+ if (oCache && oCache.hasPendingChangesForPath("", false,
1024
+ bIgnoreKeptAlive && oDependent.mParameters.$$ownRequest)) {
1005
1025
  return true;
1006
1026
  }
1007
1027
  } else if (oDependent.hasPendingChangesForPath("")) {
@@ -1010,14 +1030,17 @@ sap.ui.define([
1010
1030
  if (oDependent.mCacheByResourcePath) {
1011
1031
  bHasPendingChanges = Object.keys(oDependent.mCacheByResourcePath)
1012
1032
  .some(function (sPath) {
1013
- return oDependent.mCacheByResourcePath[sPath].hasPendingChangesForPath("");
1033
+ var oCacheForPath = oDependent.mCacheByResourcePath[sPath];
1034
+
1035
+ return oCacheForPath !== oCache // don't ask again
1036
+ && oCacheForPath.hasPendingChangesForPath("");
1014
1037
  });
1015
1038
  if (bHasPendingChanges) {
1016
1039
  return true;
1017
1040
  }
1018
1041
  }
1019
1042
  // Ask dependents, they might have no cache, but pending changes in mCacheByResourcePath
1020
- return oDependent.hasPendingChangesInDependents();
1043
+ return oDependent.hasPendingChangesInDependents(bIgnoreKeptAlive);
1021
1044
  })
1022
1045
  || this.oModel.withUnresolvedBindings("hasPendingChangesInCaches",
1023
1046
  this.getResolvedPath().slice(1));
@@ -1060,9 +1083,11 @@ sap.ui.define([
1060
1083
  * @param {boolean} [bKeepCacheOnError]
1061
1084
  * If <code>true</code>, the binding data remains unchanged if the refresh fails
1062
1085
  * @returns {sap.ui.base.SyncPromise}
1063
- * A promise resolving when all dependent bindings are refreshed; it is rejected if the
1064
- * binding's root binding is suspended and a group ID different from the binding's group ID is
1065
- * given
1086
+ * A promise resolving when all dependent bindings are refreshed; it is rejected
1087
+ * when the refresh fails; the promise is resolved immediately on a suspended binding
1088
+ * @throws {Error}
1089
+ * If the binding's root binding is suspended and a group ID different from the binding's
1090
+ * group ID is given
1066
1091
  *
1067
1092
  * @private
1068
1093
  */
@@ -1078,7 +1103,11 @@ sap.ui.define([
1078
1103
  * Recursively refreshes all dependent list bindings that have no own cache.
1079
1104
  *
1080
1105
  * @returns {sap.ui.base.SyncPromise}
1081
- * A promise resolving when all dependent list bindings without own cache are refreshed
1106
+ * A promise resolving when all dependent list bindings without own cache are refreshed; it is
1107
+ * rejected when the refresh fails; the promise is resolved immediately on a suspended binding
1108
+ * @throws {Error}
1109
+ * If the binding's root binding is suspended and a group ID different from the binding's
1110
+ * group ID is given
1082
1111
  *
1083
1112
  * @private
1084
1113
  */
@@ -1106,24 +1135,6 @@ sap.ui.define([
1106
1135
  }
1107
1136
  };
1108
1137
 
1109
- /**
1110
- * Refreshes the binding; expects it to be suspended.
1111
- *
1112
- * @param {string} sGroupId
1113
- * The group ID to be used for the refresh
1114
- * @throws {Error}
1115
- * If a group ID different from the binding's group ID is given
1116
-
1117
- * @private
1118
- */
1119
- ODataParentBinding.prototype.refreshSuspended = function (sGroupId) {
1120
- if (sGroupId && sGroupId !== this.getGroupId()) {
1121
- throw new Error(this + ": Cannot refresh a suspended binding with group ID '"
1122
- + sGroupId + "' (own group ID is '" + this.getGroupId() + "')");
1123
- }
1124
- this.setResumeChangeReason(ChangeReason.Refresh);
1125
- };
1126
-
1127
1138
  /**
1128
1139
  * Loads side effects for the given context of this binding.
1129
1140
  *
@@ -1322,8 +1333,11 @@ sap.ui.define([
1322
1333
 
1323
1334
  /**
1324
1335
  * Suspends this binding. A suspended binding does not fire change events nor does it trigger
1325
- * data service requests. Call {@link #resume} to resume the binding.
1326
- * Before 1.53.0, this method was not supported and threw an error.
1336
+ * data service requests. Call {@link #resume} to resume the binding. Before 1.53.0, this method
1337
+ * was not supported and threw an error. Since 1.97.0, pending changes are ignored if they
1338
+ * relate to a {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this
1339
+ * binding. Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
1340
+ * of a {@link #getRootBinding root binding} do not count as pending changes.
1327
1341
  *
1328
1342
  * @throws {Error}
1329
1343
  * If this binding
@@ -1331,7 +1345,7 @@ sap.ui.define([
1331
1345
  * <li>is relative to a {@link sap.ui.model.odata.v4.Context},</li>
1332
1346
  * <li>is an operation binding,</li>
1333
1347
  * <li>has {@link sap.ui.model.Binding#isSuspended} set to <code>true</code>,</li>
1334
- * <li>has pending changes,</li>
1348
+ * <li>has pending changes that cannot be ignored,</li>
1335
1349
  * <li>is not a root binding. Use {@link #getRootBinding} to determine the root binding.</li>
1336
1350
  * </ul>
1337
1351
  *
@@ -1356,7 +1370,7 @@ sap.ui.define([
1356
1370
  if (this.bSuspended) {
1357
1371
  throw new Error("Cannot suspend a suspended binding: " + this);
1358
1372
  }
1359
- if (this.hasPendingChanges()) {
1373
+ if (this.hasPendingChanges(true)) {
1360
1374
  throw new Error("Cannot suspend a binding with pending changes: " + this);
1361
1375
  }
1362
1376
 
@@ -1445,7 +1459,6 @@ sap.ui.define([
1445
1459
  "adjustPredicate",
1446
1460
  "destroy",
1447
1461
  "doDeregisterChangeListener",
1448
- "fetchCache",
1449
1462
  "getGeneration",
1450
1463
  "hasPendingChangesForPath"
1451
1464
  ].forEach(function (sMethod) { // method (still) not final, allow for "super" calls