@openui5/sap.ui.core 1.97.1 → 1.99.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/.eslintrc.json +92 -2
  2. package/.reuse/dep5 +25 -30
  3. package/THIRDPARTY.txt +14 -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 +1 -1
  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 +80 -168
  53. package/src/sap/ui/Global.js +4 -4
  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 +48 -27
  60. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  61. package/src/sap/ui/base/Metadata.js +1 -1
  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 +2 -2
  65. package/src/sap/ui/core/BusyIndicator.js +1 -1
  66. package/src/sap/ui/core/BusyIndicatorUtils.js +1 -1
  67. package/src/sap/ui/core/Component.js +3 -3
  68. package/src/sap/ui/core/ComponentContainer.js +1 -1
  69. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  70. package/src/sap/ui/core/ComponentSupport.js +1 -1
  71. package/src/sap/ui/core/Configuration.js +79 -14
  72. package/src/sap/ui/core/Control.js +3 -2
  73. package/src/sap/ui/core/Core.js +3 -6
  74. package/src/sap/ui/core/CustomData.js +1 -1
  75. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  76. package/src/sap/ui/core/Element.js +5 -7
  77. package/src/sap/ui/core/ElementMetadata.js +1 -1
  78. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  79. package/src/sap/ui/core/EventBus.js +1 -1
  80. package/src/sap/ui/core/ExtensionPoint.js +1 -1
  81. package/src/sap/ui/core/FocusHandler.js +1 -1
  82. package/src/sap/ui/core/Fragment.js +1 -1
  83. package/src/sap/ui/core/HTML.js +1 -1
  84. package/src/sap/ui/core/HTMLRenderer.js +1 -1
  85. package/src/sap/ui/core/History.js +1 -1
  86. package/src/sap/ui/core/Icon.js +2 -3
  87. package/src/sap/ui/core/IconRenderer.js +1 -1
  88. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  89. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  90. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  91. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  92. package/src/sap/ui/core/InvisibleText.js +1 -1
  93. package/src/sap/ui/core/Item.js +1 -1
  94. package/src/sap/ui/core/LabelEnablement.js +9 -2
  95. package/src/sap/ui/core/LayoutData.js +1 -1
  96. package/src/sap/ui/core/ListItem.js +1 -1
  97. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  98. package/src/sap/ui/core/LocalBusyIndicatorRenderer.js +2 -2
  99. package/src/sap/ui/core/LocalBusyIndicatorSupport.js +1 -1
  100. package/src/sap/ui/core/Locale.js +1 -1
  101. package/src/sap/ui/core/LocaleData.js +37 -2
  102. package/src/sap/ui/core/Manifest.js +1 -1
  103. package/src/sap/ui/core/Message.js +1 -1
  104. package/src/sap/ui/core/Placeholder.js +28 -28
  105. package/src/sap/ui/core/Popup.js +3 -3
  106. package/src/sap/ui/core/RenderManager.js +1 -1
  107. package/src/sap/ui/core/Renderer.js +1 -1
  108. package/src/sap/ui/core/ResizeHandler.js +1 -1
  109. package/src/sap/ui/core/ScrollBar.js +1 -1
  110. package/src/sap/ui/core/ScrollBarRenderer.js +1 -1
  111. package/src/sap/ui/core/SeparatorItem.js +1 -1
  112. package/src/sap/ui/core/Title.js +1 -1
  113. package/src/sap/ui/core/TooltipBase.js +2 -2
  114. package/src/sap/ui/core/UIArea.js +1 -1
  115. package/src/sap/ui/core/UIComponent.js +1 -1
  116. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  117. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  118. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  119. package/src/sap/ui/core/XMLComposite.js +1 -1
  120. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  121. package/src/sap/ui/core/_IconRegistry.js +10 -1
  122. package/src/sap/ui/core/date/Japanese.js +1 -1
  123. package/src/sap/ui/core/date/UniversalDateUtils.js +175 -5
  124. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  125. package/src/sap/ui/core/delegate/ScrollEnablement.js +9 -6
  126. package/src/sap/ui/core/dnd/DragAndDrop.js +2 -2
  127. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  128. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  129. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  130. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  131. package/src/sap/ui/core/format/DateFormat.js +562 -174
  132. package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +43 -0
  133. package/src/sap/ui/core/format/ListFormat.js +2 -2
  134. package/src/sap/ui/core/format/NumberFormat.js +190 -56
  135. package/src/sap/ui/core/format/TimezoneUtil.js +248 -0
  136. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  137. package/src/sap/ui/core/library.js +45 -8
  138. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  139. package/src/sap/ui/core/message/Message.js +1 -1
  140. package/src/sap/ui/core/message/MessageManager.js +1 -1
  141. package/src/sap/ui/core/message/MessageMixin.js +2 -1
  142. package/src/sap/ui/core/message/MessageParser.js +1 -1
  143. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  144. package/src/sap/ui/core/messagebundle.properties +4 -0
  145. package/src/sap/ui/core/messagebundle_ar.properties +2 -0
  146. package/src/sap/ui/core/messagebundle_bg.properties +7 -5
  147. package/src/sap/ui/core/messagebundle_ca.properties +2 -0
  148. package/src/sap/ui/core/messagebundle_cs.properties +2 -0
  149. package/src/sap/ui/core/messagebundle_cy.properties +2 -0
  150. package/src/sap/ui/core/messagebundle_da.properties +2 -0
  151. package/src/sap/ui/core/messagebundle_de.properties +3 -1
  152. package/src/sap/ui/core/messagebundle_el.properties +2 -0
  153. package/src/sap/ui/core/messagebundle_en.properties +2 -0
  154. package/src/sap/ui/core/messagebundle_en_GB.properties +2 -0
  155. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +2 -0
  156. package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
  157. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +2 -0
  158. package/src/sap/ui/core/messagebundle_es.properties +2 -0
  159. package/src/sap/ui/core/messagebundle_es_MX.properties +2 -0
  160. package/src/sap/ui/core/messagebundle_et.properties +2 -0
  161. package/src/sap/ui/core/messagebundle_fi.properties +2 -0
  162. package/src/sap/ui/core/messagebundle_fr.properties +2 -0
  163. package/src/sap/ui/core/messagebundle_fr_CA.properties +2 -0
  164. package/src/sap/ui/core/messagebundle_hi.properties +2 -0
  165. package/src/sap/ui/core/messagebundle_hr.properties +2 -0
  166. package/src/sap/ui/core/messagebundle_hu.properties +2 -0
  167. package/src/sap/ui/core/messagebundle_id.properties +4 -2
  168. package/src/sap/ui/core/messagebundle_it.properties +3 -1
  169. package/src/sap/ui/core/messagebundle_iw.properties +2 -0
  170. package/src/sap/ui/core/messagebundle_ja.properties +2 -0
  171. package/src/sap/ui/core/messagebundle_kk.properties +2 -0
  172. package/src/sap/ui/core/messagebundle_ko.properties +2 -0
  173. package/src/sap/ui/core/messagebundle_lt.properties +2 -0
  174. package/src/sap/ui/core/messagebundle_lv.properties +3 -1
  175. package/src/sap/ui/core/messagebundle_ms.properties +2 -0
  176. package/src/sap/ui/core/messagebundle_nl.properties +2 -0
  177. package/src/sap/ui/core/messagebundle_no.properties +6 -4
  178. package/src/sap/ui/core/messagebundle_pl.properties +2 -0
  179. package/src/sap/ui/core/messagebundle_pt.properties +2 -0
  180. package/src/sap/ui/core/messagebundle_pt_PT.properties +2 -0
  181. package/src/sap/ui/core/messagebundle_ro.properties +2 -0
  182. package/src/sap/ui/core/messagebundle_ru.properties +2 -0
  183. package/src/sap/ui/core/messagebundle_sh.properties +2 -0
  184. package/src/sap/ui/core/messagebundle_sk.properties +2 -0
  185. package/src/sap/ui/core/messagebundle_sl.properties +2 -0
  186. package/src/sap/ui/core/messagebundle_sv.properties +2 -0
  187. package/src/sap/ui/core/messagebundle_th.properties +2 -0
  188. package/src/sap/ui/core/messagebundle_tr.properties +2 -0
  189. package/src/sap/ui/core/messagebundle_uk.properties +2 -0
  190. package/src/sap/ui/core/messagebundle_vi.properties +2 -0
  191. package/src/sap/ui/core/messagebundle_zh_CN.properties +2 -0
  192. package/src/sap/ui/core/messagebundle_zh_TW.properties +2 -0
  193. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  194. package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
  195. package/src/sap/ui/core/mvc/JSONView.js +2 -1
  196. package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
  197. package/src/sap/ui/core/mvc/JSView.js +1 -1
  198. package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
  199. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  200. package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
  201. package/src/sap/ui/core/mvc/View.js +2 -1
  202. package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
  203. package/src/sap/ui/core/mvc/XMLView.js +16 -3
  204. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  205. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  206. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  207. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  208. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  209. package/src/sap/ui/core/routing/Route.js +6 -6
  210. package/src/sap/ui/core/routing/Router.js +4 -3
  211. package/src/sap/ui/core/routing/Targets.js +17 -13
  212. package/src/sap/ui/core/rules/Model.support.js +95 -8
  213. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  214. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  215. package/src/sap/ui/core/service/Service.js +1 -1
  216. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  217. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  218. package/src/sap/ui/core/support/Plugin.js +1 -1
  219. package/src/sap/ui/core/support/Support.js +1 -1
  220. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  221. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  222. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  223. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  224. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  225. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  226. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  227. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  228. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +1 -5
  229. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  230. package/src/sap/ui/core/themes/base/parameterClasses.less +21 -21
  231. package/src/sap/ui/core/theming/Parameters.js +22 -142
  232. package/src/sap/ui/core/theming/ThemeHelper.js +26 -37
  233. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  234. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  235. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  236. package/src/sap/ui/core/tmpl/Template.js +1 -1
  237. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  238. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  239. package/src/sap/ui/core/util/DraftEnabledMockServer.js +21 -16
  240. package/src/sap/ui/core/util/Export.js +1 -1
  241. package/src/sap/ui/core/util/ExportCell.js +1 -1
  242. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  243. package/src/sap/ui/core/util/ExportRow.js +1 -1
  244. package/src/sap/ui/core/util/ExportType.js +1 -1
  245. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  246. package/src/sap/ui/core/util/File.js +1 -1
  247. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  248. package/src/sap/ui/core/util/MockServer.js +156 -57
  249. package/src/sap/ui/core/util/PasteHelper.js +4 -4
  250. package/src/sap/ui/core/util/XMLPreprocessor.js +16 -4
  251. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +4 -0
  252. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +26 -16
  253. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -1
  254. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  255. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  256. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  257. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  258. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  259. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  260. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  261. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  262. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  263. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  264. package/src/sap/ui/debug/ControlTree.js +1 -1
  265. package/src/sap/ui/debug/DebugEnv.js +1 -1
  266. package/src/sap/ui/debug/PropertyList.js +1 -1
  267. package/src/sap/ui/dom/includeStylesheet.js +8 -3
  268. package/src/sap/ui/events/jquery/EventExtension.js +1 -1
  269. package/src/sap/ui/events/jquery/EventSimulation.js +3 -13
  270. package/src/sap/ui/model/Binding.js +4 -3
  271. package/src/sap/ui/model/ClientModel.js +1 -1
  272. package/src/sap/ui/model/ClientTreeBinding.js +1 -1
  273. package/src/sap/ui/model/CompositeBinding.js +1 -1
  274. package/src/sap/ui/model/CompositeDataState.js +26 -4
  275. package/src/sap/ui/model/CompositeType.js +1 -1
  276. package/src/sap/ui/model/ContextBinding.js +1 -1
  277. package/src/sap/ui/model/DataState.js +27 -6
  278. package/src/sap/ui/model/ListBinding.js +2 -2
  279. package/src/sap/ui/model/MetaModel.js +2 -3
  280. package/src/sap/ui/model/Model.js +2 -2
  281. package/src/sap/ui/model/SelectionModel.js +1 -1
  282. package/src/sap/ui/model/SimpleType.js +1 -1
  283. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  284. package/src/sap/ui/model/Type.js +1 -1
  285. package/src/sap/ui/model/analytics/AnalyticalBinding.js +40 -30
  286. package/src/sap/ui/model/analytics/ODataModelAdapter.js +2 -15
  287. package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
  288. package/src/sap/ui/model/json/JSONListBinding.js +1 -1
  289. package/src/sap/ui/model/json/JSONModel.js +1 -1
  290. package/src/sap/ui/model/json/JSONPropertyBinding.js +1 -1
  291. package/src/sap/ui/model/message/MessageListBinding.js +1 -1
  292. package/src/sap/ui/model/message/MessageModel.js +1 -1
  293. package/src/sap/ui/model/message/MessagePropertyBinding.js +1 -1
  294. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  295. package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
  296. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  297. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  298. package/src/sap/ui/model/odata/ODataMetadata.js +3 -3
  299. package/src/sap/ui/model/odata/ODataModel.js +2 -2
  300. package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
  301. package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +1 -1
  302. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +1 -1
  303. package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +1 -1
  304. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  305. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  306. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  307. package/src/sap/ui/model/odata/type/Date.js +1 -1
  308. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  309. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  310. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  311. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +338 -0
  312. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  313. package/src/sap/ui/model/odata/type/Double.js +1 -1
  314. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  315. package/src/sap/ui/model/odata/type/Int.js +1 -1
  316. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  317. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  318. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  319. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  320. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  321. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  322. package/src/sap/ui/model/odata/type/Single.js +1 -1
  323. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  324. package/src/sap/ui/model/odata/type/String.js +1 -1
  325. package/src/sap/ui/model/odata/type/Time.js +1 -1
  326. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  327. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  328. package/src/sap/ui/model/odata/type/UnitMixin.js +1 -1
  329. package/src/sap/ui/model/odata/v2/Context.js +57 -4
  330. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  331. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +8 -4
  332. package/src/sap/ui/model/odata/v2/ODataListBinding.js +216 -87
  333. package/src/sap/ui/model/odata/v2/ODataModel.js +89 -50
  334. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +6 -4
  335. package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +65 -5
  336. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +21 -22
  337. package/src/sap/ui/model/odata/v4/Context.js +208 -83
  338. package/src/sap/ui/model/odata/v4/ODataBinding.js +53 -27
  339. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +252 -218
  340. package/src/sap/ui/model/odata/v4/ODataListBinding.js +395 -233
  341. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +131 -100
  342. package/src/sap/ui/model/odata/v4/ODataModel.js +341 -259
  343. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +85 -85
  344. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +85 -79
  345. package/src/sap/ui/model/odata/v4/ODataUtils.js +5 -5
  346. package/src/sap/ui/model/odata/v4/SubmitMode.js +0 -1
  347. package/src/sap/ui/model/odata/v4/ValueListType.js +0 -1
  348. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +20 -20
  349. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +3 -5
  350. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +5 -4
  351. package/src/sap/ui/model/odata/v4/lib/_Batch.js +21 -20
  352. package/src/sap/ui/model/odata/v4/lib/_Cache.js +183 -103
  353. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +1 -1
  354. package/src/sap/ui/model/odata/v4/lib/_Helper.js +22 -18
  355. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +62 -61
  356. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +1 -1
  357. package/src/sap/ui/model/odata/v4/lib/_Parser.js +52 -43
  358. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +54 -43
  359. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +147 -147
  360. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +14 -13
  361. package/src/sap/ui/model/odata/v4/lib/_V4MetadataConverter.js +66 -67
  362. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  363. package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
  364. package/src/sap/ui/model/type/Boolean.js +1 -1
  365. package/src/sap/ui/model/type/Currency.js +1 -1
  366. package/src/sap/ui/model/type/Date.js +1 -1
  367. package/src/sap/ui/model/type/DateInterval.js +1 -1
  368. package/src/sap/ui/model/type/DateTime.js +1 -1
  369. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  370. package/src/sap/ui/model/type/FileSize.js +1 -1
  371. package/src/sap/ui/model/type/Float.js +1 -1
  372. package/src/sap/ui/model/type/Integer.js +1 -1
  373. package/src/sap/ui/model/type/String.js +1 -1
  374. package/src/sap/ui/model/type/Time.js +1 -1
  375. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  376. package/src/sap/ui/model/type/Unit.js +1 -1
  377. package/src/sap/ui/model/xml/XMLListBinding.js +1 -1
  378. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  379. package/src/sap/ui/model/xml/XMLPropertyBinding.js +1 -1
  380. package/src/sap/ui/performance/trace/Passport.js +3 -3
  381. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  382. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  383. package/src/sap/ui/test/BlanketReporter.js +1 -1
  384. package/src/sap/ui/test/Opa5.js +1 -1
  385. package/src/sap/ui/test/TestUtils.js +2 -2
  386. package/src/sap/ui/test/_LogCollector.js +1 -1
  387. package/src/sap/ui/test/actions/Action.js +4 -2
  388. package/src/sap/ui/test/actions/Press.js +51 -2
  389. package/src/sap/ui/test/autowaiter/_XHRWaiter.js +1 -1
  390. package/src/sap/ui/test/starter/createSuite.js +3 -3
  391. package/src/sap/ui/thirdparty/IPv6.js +1 -1
  392. package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
  393. package/src/sap/ui/thirdparty/URI.js +7 -3
  394. package/src/sap/ui/thirdparty/URITemplate.js +1 -1
  395. package/src/sap/ui/thirdparty/jquery-mobile-custom.js +3 -6
  396. package/src/sap/ui/thirdparty/jqueryui/jquery-ui-datepicker.js +143 -3
  397. package/src/sap/ui/thirdparty/jqueryui/jquery-ui-position.js +8 -1
  398. package/src/sap/ui/thirdparty/jszip.js +18 -7
  399. package/src/sap/ui/thirdparty/mobify-carousel.js +1 -1
  400. package/src/sap/ui/util/Mobile.js +17 -0
  401. package/src/sap/ui/util/Storage.js +1 -1
  402. package/src/sap/ui/util/XMLHelper.js +53 -30
  403. package/src/ui5loader.js +4 -4
@@ -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
  }))
@@ -321,6 +323,8 @@ sap.ui.define([
321
323
  * pending changes are ignored if all parameters are unchanged. Since 1.97.0, pending changes
322
324
  * are ignored if they relate to a
323
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.
324
328
  *
325
329
  * @public
326
330
  * @since 1.45.0
@@ -413,7 +417,7 @@ sap.ui.define([
413
417
  *
414
418
  * @returns {sap.ui.base.SyncPromise}
415
419
  * A promise resolving without a defined result when the check is finished, or rejecting in
416
- * case of an error (e.g. thrown by the change event handler of a control)
420
+ * case of an error
417
421
  * @throws {Error} If called with parameters
418
422
  *
419
423
  * @private
@@ -460,6 +464,9 @@ sap.ui.define([
460
464
  * A (temporary) key predicate for the transient entity: "($uid=...)"
461
465
  * @param {object} [oInitialData={}]
462
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
463
470
  * @param {function} fnErrorCallback
464
471
  * A function which is called with an error object each time a POST request for the create
465
472
  * fails
@@ -472,7 +479,8 @@ sap.ui.define([
472
479
  * @private
473
480
  */
474
481
  ODataParentBinding.prototype.createInCache = function (oUpdateGroupLock, vCreatePath,
475
- sCollectionPath, sTransientPredicate, oInitialData, fnErrorCallback, fnSubmitCallback) {
482
+ sCollectionPath, sTransientPredicate, oInitialData, bAtEndOfCreated, fnErrorCallback,
483
+ fnSubmitCallback) {
476
484
  var that = this;
477
485
 
478
486
  return this.oCachePromise.then(function (oCache) {
@@ -481,7 +489,8 @@ sap.ui.define([
481
489
  if (oCache) {
482
490
  sPathInCache = _Helper.getRelativePath(sCollectionPath, that.getResolvedPath());
483
491
  return oCache.create(oUpdateGroupLock, vCreatePath, sPathInCache,
484
- sTransientPredicate, oInitialData, fnErrorCallback, fnSubmitCallback
492
+ sTransientPredicate, oInitialData, bAtEndOfCreated, fnErrorCallback,
493
+ fnSubmitCallback
485
494
  ).then(function (oCreatedEntity) {
486
495
  if (that.mCacheByResourcePath) {
487
496
  // Ensure that cache containing non-transient created entity is recreated
@@ -492,8 +501,8 @@ sap.ui.define([
492
501
  });
493
502
  }
494
503
  return that.oContext.getBinding().createInCache(oUpdateGroupLock, vCreatePath,
495
- sCollectionPath, sTransientPredicate, oInitialData, fnErrorCallback,
496
- fnSubmitCallback);
504
+ sCollectionPath, sTransientPredicate, oInitialData, bAtEndOfCreated,
505
+ fnErrorCallback, fnSubmitCallback);
497
506
  });
498
507
  };
499
508
 
@@ -565,52 +574,41 @@ sap.ui.define([
565
574
  * Deletes the entity in the cache. If the binding doesn't have a cache, it forwards to the
566
575
  * parent binding adjusting the path.
567
576
  *
568
- * @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
569
- * A lock for the group ID to be used for the DELETE request; if no group ID is specified, it
570
- * 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)!
571
580
  * @param {string} sEditUrl
572
- * 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.
573
583
  * @param {string} sPath
574
584
  * The path of the entity relative to this binding
575
585
  * @param {object} [oETagEntity]
576
586
  * An entity with the ETag of the binding for which the deletion was requested. This is
577
587
  * provided if the deletion is delegated from a context binding with empty path to a list
578
- * binding.
588
+ * binding. W/o a lock, this is ignored.
579
589
  * @param {boolean} [bDoNotRequestCount]
580
590
  * Whether not to request the new count from the server; useful in case of
581
591
  * {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
582
- * unchanged
592
+ * unchanged; w/o a lock this should be true
583
593
  * @param {function} fnCallback
584
- * A function which is called after the entity has been deleted from the server and from the
585
- * 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
586
597
  * @returns {sap.ui.base.SyncPromise}
587
598
  * A promise which is resolved without a result in case of success, or rejected with an
588
- * 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
589
601
  * @throws {Error}
590
- * If the group ID has {@link sap.ui.model.odata.v4.SubmitMode.Auto} or if the cache promise
591
- * for this binding is not yet fulfilled
602
+ * If the cache is shared
592
603
  *
593
604
  * @private
594
605
  */
595
606
  ODataParentBinding.prototype.deleteFromCache = function (oGroupLock, sEditUrl, sPath,
596
607
  oETagEntity, bDoNotRequestCount, fnCallback) {
597
- var sGroupId;
598
-
599
- if (this.oCache === undefined) {
600
- throw new Error("DELETE request not allowed");
601
- }
602
-
603
- if (this.oCache) {
604
- sGroupId = oGroupLock.getGroupId();
605
- if (!this.oModel.isAutoGroup(sGroupId) && !this.oModel.isDirectGroup(sGroupId)) {
606
- throw new Error("Illegal update group ID: " + sGroupId);
607
- }
608
- return this.oCache._delete(oGroupLock, sEditUrl, sPath, oETagEntity, bDoNotRequestCount,
608
+ return this.withCache(function (oCache, sCachePath) {
609
+ return oCache._delete(oGroupLock, sEditUrl, sCachePath, oETagEntity, bDoNotRequestCount,
609
610
  fnCallback);
610
- }
611
- return this.oContext.getBinding().deleteFromCache(oGroupLock, sEditUrl,
612
- _Helper.buildPath(this.oContext.iIndex, this.sPath, sPath), oETagEntity,
613
- bDoNotRequestCount, fnCallback);
611
+ }, sPath, /*bSync*/true);
614
612
  };
615
613
 
616
614
  /**
@@ -620,7 +618,7 @@ sap.ui.define([
620
618
  * @since 1.61
621
619
  */
622
620
  ODataParentBinding.prototype.destroy = function () {
623
- // this.mAggregatedQueryOptions = undefined;
621
+ // this.mAggregatedQueryOptions = undefined;
624
622
  this.aChildCanUseCachePromises = [];
625
623
  this.removeReadGroupLock();
626
624
  this.oResumePromise = undefined;
@@ -649,15 +647,18 @@ sap.ui.define([
649
647
  * The child binding's binding path relative to <code>oContext</code>
650
648
  * @param {object|sap.ui.base.SyncPromise} vChildQueryOptions
651
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
652
652
  * @returns {sap.ui.base.SyncPromise}
653
653
  * A promise resolved with the reduced path for the child binding if the child binding can use
654
- * 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.
655
656
  *
656
657
  * @private
657
658
  * @see sap.ui.model.odata.v4.ODataMetaModel#getReducedPath
658
659
  */
659
660
  ODataParentBinding.prototype.fetchIfChildCanUseCache = function (oContext, sChildPath,
660
- vChildQueryOptions) {
661
+ vChildQueryOptions, bIsProperty) {
661
662
  // getBaseForPathReduction must be called early, because the (virtual) parent context may be
662
663
  // lost again when the path is needed
663
664
  var sBaseForPathReduction = this.getBaseForPathReduction(),
@@ -767,9 +768,9 @@ sap.ui.define([
767
768
  that.bAggregatedQueryOptionsInitial = false;
768
769
  }
769
770
  if (bIsAdvertisement) {
770
- mWrappedChildQueryOptions = {"$select" : [sReducedChildMetaPath.slice(1)]};
771
+ mWrappedChildQueryOptions = {$select : [sReducedChildMetaPath.slice(1)]};
771
772
  return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
772
- bCacheImmutable)
773
+ bCacheImmutable, bIsProperty)
773
774
  ? sReducedPath
774
775
  : undefined;
775
776
  }
@@ -781,7 +782,7 @@ sap.ui.define([
781
782
  that.oModel.oInterface.fetchMetadata);
782
783
  if (mWrappedChildQueryOptions) {
783
784
  return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
784
- bCacheImmutable)
785
+ bCacheImmutable, bIsProperty)
785
786
  ? sReducedPath
786
787
  : undefined;
787
788
  }
@@ -789,7 +790,7 @@ sap.ui.define([
789
790
  }
790
791
  if (sReducedChildMetaPath === "value") { // symbolic name for operation result
791
792
  return that.aggregateQueryOptions(mChildQueryOptions, sBaseMetaPath,
792
- bCacheImmutable)
793
+ bCacheImmutable, bIsProperty)
793
794
  ? sReducedPath
794
795
  : undefined;
795
796
  }
@@ -833,7 +834,7 @@ sap.ui.define([
833
834
  // catch the error, but keep the rejected promise
834
835
  this.oCachePromise.catch(function (oError) {
835
836
  that.oModel.reportError(that + ": Failed to enhance query options for "
836
- + "auto-$expand/$select for child " + sChildPath, sClassName, oError);
837
+ + "auto-$expand/$select for child " + sChildPath, sClassName, oError);
837
838
  });
838
839
  return oCanUseCachePromise;
839
840
  };
@@ -866,9 +867,13 @@ sap.ui.define([
866
867
  sMetaPath = _Helper.getMetaPath(oModel.resolve(this.sPath, oContext));
867
868
  mConvertedQueryOptions = Object.assign({}, mQueryOptions, {$select : []});
868
869
  return SyncPromise.all(mQueryOptions.$select.map(function (sSelectPath) {
869
- return _Helper.fetchPropertyAndType(
870
- fnFetchMetadata, sMetaPath + "/" + sSelectPath
871
- ).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 () {
872
877
  var mWrappedQueryOptions = _Helper.wrapChildQueryOptions(
873
878
  sMetaPath, sSelectPath, {}, fnFetchMetadata);
874
879
 
@@ -900,8 +905,7 @@ sap.ui.define([
900
905
  oParentBinding = this.oContext.getBinding();
901
906
  sParentUpdateGroupId = oParentBinding.getUpdateGroupId();
902
907
  if (sParentUpdateGroupId === this.getUpdateGroupId()
903
- || this.oModel.getGroupProperty(sParentUpdateGroupId, "submit")
904
- !== SubmitMode.API) {
908
+ || !this.oModel.isApiGroup(sParentUpdateGroupId)) {
905
909
  return oParentBinding.getBaseForPathReduction();
906
910
  }
907
911
  }
@@ -1000,17 +1004,24 @@ sap.ui.define([
1000
1004
  * @override
1001
1005
  * @see sap.ui.model.odata.v4.ODataBinding#hasPendingChangesInDependents
1002
1006
  */
1003
- ODataParentBinding.prototype.hasPendingChangesInDependents = function (bIgnoreKeptAlive) {
1007
+ ODataParentBinding.prototype.hasPendingChangesInDependents = function (bIgnoreKeptAlive0) {
1004
1008
  return this.getDependentBindings().some(function (oDependent) {
1005
1009
  var oCache = oDependent.oCache,
1006
- bHasPendingChanges;
1010
+ bHasPendingChanges,
1011
+ bIgnoreKeptAlive = bIgnoreKeptAlive0; // new copy for this dependent only
1007
1012
 
1008
- if (bIgnoreKeptAlive && oDependent.oContext.isKeepAlive()) {
1009
- return false;
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
+ }
1010
1020
  }
1011
1021
  if (oCache !== undefined) {
1012
1022
  // Pending changes for this cache are only possible when there is a cache already
1013
- if (oCache && oCache.hasPendingChangesForPath("")) {
1023
+ if (oCache && oCache.hasPendingChangesForPath("", false,
1024
+ bIgnoreKeptAlive && oDependent.mParameters.$$ownRequest)) {
1014
1025
  return true;
1015
1026
  }
1016
1027
  } else if (oDependent.hasPendingChangesForPath("")) {
@@ -1029,7 +1040,7 @@ sap.ui.define([
1029
1040
  }
1030
1041
  }
1031
1042
  // Ask dependents, they might have no cache, but pending changes in mCacheByResourcePath
1032
- return oDependent.hasPendingChangesInDependents();
1043
+ return oDependent.hasPendingChangesInDependents(bIgnoreKeptAlive);
1033
1044
  })
1034
1045
  || this.oModel.withUnresolvedBindings("hasPendingChangesInCaches",
1035
1046
  this.getResolvedPath().slice(1));
@@ -1072,9 +1083,11 @@ sap.ui.define([
1072
1083
  * @param {boolean} [bKeepCacheOnError]
1073
1084
  * If <code>true</code>, the binding data remains unchanged if the refresh fails
1074
1085
  * @returns {sap.ui.base.SyncPromise}
1075
- * A promise resolving when all dependent bindings are refreshed; it is rejected if the
1076
- * binding's root binding is suspended and a group ID different from the binding's group ID is
1077
- * 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
1078
1091
  *
1079
1092
  * @private
1080
1093
  */
@@ -1090,7 +1103,11 @@ sap.ui.define([
1090
1103
  * Recursively refreshes all dependent list bindings that have no own cache.
1091
1104
  *
1092
1105
  * @returns {sap.ui.base.SyncPromise}
1093
- * 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
1094
1111
  *
1095
1112
  * @private
1096
1113
  */
@@ -1118,24 +1135,6 @@ sap.ui.define([
1118
1135
  }
1119
1136
  };
1120
1137
 
1121
- /**
1122
- * Refreshes the binding; expects it to be suspended.
1123
- *
1124
- * @param {string} sGroupId
1125
- * The group ID to be used for the refresh
1126
- * @throws {Error}
1127
- * If a group ID different from the binding's group ID is given
1128
-
1129
- * @private
1130
- */
1131
- ODataParentBinding.prototype.refreshSuspended = function (sGroupId) {
1132
- if (sGroupId && sGroupId !== this.getGroupId()) {
1133
- throw new Error(this + ": Cannot refresh a suspended binding with group ID '"
1134
- + sGroupId + "' (own group ID is '" + this.getGroupId() + "')");
1135
- }
1136
- this.setResumeChangeReason(ChangeReason.Refresh);
1137
- };
1138
-
1139
1138
  /**
1140
1139
  * Loads side effects for the given context of this binding.
1141
1140
  *
@@ -1337,7 +1336,8 @@ sap.ui.define([
1337
1336
  * data service requests. Call {@link #resume} to resume the binding. Before 1.53.0, this method
1338
1337
  * was not supported and threw an error. Since 1.97.0, pending changes are ignored if they
1339
1338
  * relate to a {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this
1340
- * binding.
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.
1341
1341
  *
1342
1342
  * @throws {Error}
1343
1343
  * If this binding
@@ -29,7 +29,38 @@ sap.ui.define([
29
29
  dataRequested : true,
30
30
  DataStateChange : true
31
31
  },
32
- sVirtualPath = "/" + Context.VIRTUAL; // a snippet indicating a virtual path
32
+ sVirtualPath = "/" + Context.VIRTUAL, // a snippet indicating a virtual path
33
+ /**
34
+ * @alias sap.ui.model.odata.v4.ODataPropertyBinding
35
+ * @author SAP SE
36
+ * @class Property binding for an OData V4 model.
37
+ * An event handler can only be attached to this binding for the following events:
38
+ * 'AggregatedDataStateChange', 'change', 'dataReceived', 'dataRequested' and
39
+ * 'DataStateChange'. For unsupported events, an error is thrown.
40
+ * @extends sap.ui.model.PropertyBinding
41
+ * @hideconstructor
42
+ * @mixes sap.ui.model.odata.v4.ODataBinding
43
+ * @public
44
+ * @since 1.37.0
45
+ * @version 1.99.1
46
+ * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
+ * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
+ * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
49
+ * @borrows sap.ui.model.odata.v4.ODataBinding#hasPendingChanges as #hasPendingChanges
50
+ * @borrows sap.ui.model.odata.v4.ODataBinding#isInitial as #isInitial
51
+ * @borrows sap.ui.model.odata.v4.ODataBinding#refresh as #refresh
52
+ * @borrows sap.ui.model.odata.v4.ODataBinding#requestRefresh as #requestRefresh
53
+ * @borrows sap.ui.model.odata.v4.ODataBinding#resetChanges as #resetChanges
54
+ * @borrows sap.ui.model.odata.v4.ODataBinding#toString as #toString
55
+ */
56
+ ODataPropertyBinding
57
+ = PropertyBinding.extend("sap.ui.model.odata.v4.ODataPropertyBinding", {
58
+ constructor : constructor
59
+ });
60
+
61
+ //*********************************************************************************************
62
+ // ODataPropertyBinding
63
+ //*********************************************************************************************
33
64
 
34
65
  /**
35
66
  * Do <strong>NOT</strong> call this private constructor, but rather use
@@ -45,66 +76,37 @@ sap.ui.define([
45
76
  * Map of binding parameters
46
77
  * @throws {Error}
47
78
  * If disallowed binding parameters are provided
48
- *
49
- * @alias sap.ui.model.odata.v4.ODataPropertyBinding
50
- * @author SAP SE
51
- * @class Property binding for an OData V4 model.
52
- * An event handler can only be attached to this binding for the following events:
53
- * 'AggregatedDataStateChange', 'change', 'dataReceived', 'dataRequested' and
54
- * 'DataStateChange'. For unsupported events, an error is thrown.
55
- * @extends sap.ui.model.PropertyBinding
56
- * @hideconstructor
57
- * @mixes sap.ui.model.odata.v4.ODataBinding
58
- * @public
59
- * @since 1.37.0
60
- * @version 1.97.1
61
- * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
- * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
- * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
64
- * @borrows sap.ui.model.odata.v4.ODataBinding#hasPendingChanges as #hasPendingChanges
65
- * @borrows sap.ui.model.odata.v4.ODataBinding#isInitial as #isInitial
66
- * @borrows sap.ui.model.odata.v4.ODataBinding#refresh as #refresh
67
- * @borrows sap.ui.model.odata.v4.ODataBinding#requestRefresh as #requestRefresh
68
- * @borrows sap.ui.model.odata.v4.ODataBinding#resetChanges as #resetChanges
69
- * @borrows sap.ui.model.odata.v4.ODataBinding#toString as #toString
70
- */
71
- var ODataPropertyBinding
72
- = PropertyBinding.extend("sap.ui.model.odata.v4.ODataPropertyBinding", {
73
- constructor : function (oModel, sPath, oContext, mParameters) {
74
-
75
- PropertyBinding.call(this, oModel, sPath);
76
- // initialize mixin members
77
- asODataBinding.call(this);
78
-
79
- if (sPath.endsWith("/")) {
80
- throw new Error("Invalid path: " + sPath);
81
- }
82
- if (mParameters) {
83
- this.checkBindingParameters(mParameters,
84
- ["$$groupId", "$$ignoreMessages", "$$noPatch"]);
85
- this.sGroupId = mParameters.$$groupId;
86
- this.bNoPatch = mParameters.$$noPatch;
87
- this.setIgnoreMessages(mParameters.$$ignoreMessages);
88
- } else {
89
- this.sGroupId = undefined;
90
- this.bNoPatch = false;
91
- }
92
- this.oCheckUpdateCallToken = undefined;
93
- this.oContext = oContext;
94
- this.bHasDeclaredType = undefined; // whether the binding info declares a type
95
- this.bInitial = true;
96
- // Note: system query options supported at property binding only for ".../$count"
97
- this.mQueryOptions = this.oModel.buildQueryOptions(_Helper.clone(mParameters),
98
- /*bSystemQueryOptionsAllowed*/sPath.endsWith("$count"));
99
- this.vValue = undefined;
100
- // BEWARE: #doFetchQueryOptions uses #isRoot which relies on this.oContext!
101
- this.fetchCache(oContext);
102
- oModel.bindingCreated(this);
103
- },
104
- metadata : {
105
- publicMethods : []
106
- }
107
- });
79
+ */
80
+ function constructor(oModel, sPath, oContext, mParameters) {
81
+ PropertyBinding.call(this, oModel, sPath);
82
+ // initialize mixin members
83
+ asODataBinding.call(this);
84
+
85
+ if (sPath.endsWith("/")) {
86
+ throw new Error("Invalid path: " + sPath);
87
+ }
88
+ if (mParameters) {
89
+ this.checkBindingParameters(mParameters,
90
+ ["$$groupId", "$$ignoreMessages", "$$noPatch"]);
91
+ this.sGroupId = mParameters.$$groupId;
92
+ this.bNoPatch = mParameters.$$noPatch;
93
+ this.setIgnoreMessages(mParameters.$$ignoreMessages);
94
+ } else {
95
+ this.sGroupId = undefined;
96
+ this.bNoPatch = false;
97
+ }
98
+ this.oCheckUpdateCallToken = undefined;
99
+ this.oContext = oContext;
100
+ this.bHasDeclaredType = undefined; // whether the binding info declares a type
101
+ this.bInitial = true;
102
+ // Note: system query options supported at property binding only for ".../$count"
103
+ this.mQueryOptions = this.oModel.buildQueryOptions(_Helper.clone(mParameters),
104
+ /*bSystemQueryOptionsAllowed*/sPath.endsWith("$count"));
105
+ this.vValue = undefined;
106
+ // BEWARE: #doFetchQueryOptions uses #isRoot which relies on this.oContext!
107
+ this.fetchCache(oContext);
108
+ oModel.bindingCreated(this);
109
+ }
108
110
 
109
111
  asODataBinding(ODataPropertyBinding.prototype);
110
112
 
@@ -230,9 +232,9 @@ sap.ui.define([
230
232
  * The new value obtained from the cache, see {@link #onChange}
231
233
  * @returns {sap.ui.base.SyncPromise}
232
234
  * A promise resolving without a defined result when the check is finished, or rejecting in
233
- * case of an error (e.g. thrown by the change event handler of a control). If the cache is no
234
- * longer the active cache when the response arrives, that response is silently ignored and
235
- * the value remains unchanged.
235
+ * case of an error. If the cache is no longer the active cache when the response arrives,
236
+ * that response is ignored almost silently (that is, with a canceled error) and the value
237
+ * remains unchanged.
236
238
  *
237
239
  * @private
238
240
  * @see sap.ui.model.PropertyBinding#checkDataState
@@ -310,20 +312,19 @@ sap.ui.define([
310
312
  || (that.sPath[that.sPath.lastIndexOf("/") + 1] === "#" && !bIsMeta))) {
311
313
  if (bIsMeta) {
312
314
  return vValue;
313
- } else if (that.bRelative){
315
+ } else if (that.bRelative) {
314
316
  return _Helper.publicClone(vValue);
315
317
  }
316
318
  }
317
319
  Log.error("Accessed value is not primitive", sResolvedPath, sClassName);
318
320
  }, function (oError) {
319
- // do not rethrow, ManagedObject doesn't react on this either
320
- // throwing an error would cause "Uncaught (in promise)" in Chrome
321
321
  that.oModel.reportError("Failed to read path " + sResolvedPath, sClassName, oError);
322
322
  if (oError.canceled) { // canceled -> value remains unchanged
323
323
  oCallToken.forceUpdate = false;
324
324
  return that.vValue;
325
325
  }
326
326
  mParametersForDataReceived = {error : oError};
327
+ // oError is re-thrown below
327
328
  });
328
329
  if (bForceUpdate && vValue.isFulfilled()) {
329
330
  if (vType && vType.isFulfilled && vType.isFulfilled()) {
@@ -352,6 +353,9 @@ sap.ui.define([
352
353
  if (bDataRequested) {
353
354
  that.fireDataReceived(mParametersForDataReceived);
354
355
  }
356
+ if (mParametersForDataReceived.error) {
357
+ throw mParametersForDataReceived.error;
358
+ }
355
359
  });
356
360
  };
357
361
 
@@ -493,7 +497,8 @@ sap.ui.define([
493
497
  * @private
494
498
  */
495
499
  ODataPropertyBinding.prototype.onChange = function (vValue) {
496
- this.checkUpdateInternal(undefined, undefined, undefined, vValue);
500
+ this.checkUpdateInternal(undefined, undefined, undefined, vValue)
501
+ .catch(this.oModel.getReporter());
497
502
  };
498
503
 
499
504
  /**
@@ -505,7 +510,7 @@ sap.ui.define([
505
510
  var that = this;
506
511
 
507
512
  if (this.isRootBindingSuspended()) {
508
- this.sResumeChangeReason = ChangeReason.Refresh;
513
+ this.refreshSuspended(sGroupId);
509
514
  return SyncPromise.resolve();
510
515
  }
511
516
  return this.oCachePromise.then(function () {
@@ -522,7 +527,7 @@ sap.ui.define([
522
527
  *
523
528
  * @returns {Promise}
524
529
  * A promise resolving with the resulting value or <code>undefined</code> if it could not be
525
- * determined
530
+ * determined, or rejecting in case of an error
526
531
  *
527
532
  * @public
528
533
  * @since 1.69
@@ -633,7 +638,8 @@ sap.ui.define([
633
638
 
634
639
  this.fetchCache(this.oContext);
635
640
  if (bCheckUpdate) {
636
- this.checkUpdateInternal(bParentHasChanges ? undefined : false, sResumeChangeReason);
641
+ this.checkUpdateInternal(bParentHasChanges ? undefined : false, sResumeChangeReason)
642
+ .catch(this.oModel.getReporter());
637
643
  }
638
644
  };
639
645
 
@@ -660,7 +666,8 @@ sap.ui.define([
660
666
  this.sResumeChangeReason = undefined;
661
667
  if (this.bRelative) {
662
668
  this.fetchCache(this.oContext);
663
- this.checkUpdateInternal(this.bInitial || undefined, ChangeReason.Context);
669
+ this.checkUpdateInternal(this.bInitial || undefined, ChangeReason.Context)
670
+ .catch(this.oModel.getReporter());
664
671
  }
665
672
  }
666
673
  };
@@ -705,15 +712,14 @@ sap.ui.define([
705
712
  * this binding (or its relevant parent binding) is used, see {@link #getUpdateGroupId}.
706
713
  * Valid values are <code>undefined</code>, '$auto', '$auto.*', '$direct' or application group
707
714
  * IDs as specified in {@link sap.ui.model.odata.v4.ODataModel}.
708
- * @throws {Error}
709
- * If one of the following situations occurs:
715
+ * @throws {Error} If
710
716
  * <ul>
711
- * <li> The binding's root binding is suspended.
712
- * <li> The new value is not primitive.
713
- * <li> No value has been read before and the binding does not have the parameter
717
+ * <li> the binding's root binding is suspended.
718
+ * <li> the new value is not primitive.
719
+ * <li> no value has been read before and the binding does not have the parameter
714
720
  * <code>$$noPatch</code>.
715
- * <li> The binding is not relative to a {@link sap.ui.model.odata.v4.Context}.
716
- * <li> The binding has the parameter <code>$$noPatch</code> and a group ID has been given.
721
+ * <li> the binding is not relative to a {@link sap.ui.model.odata.v4.Context}.
722
+ * <li> the binding has the parameter <code>$$noPatch</code> and a group ID has been given.
717
723
  * </ul>
718
724
  *
719
725
  * @public
@@ -116,13 +116,13 @@ sap.ui.define([
116
116
  * </ul>
117
117
  * If the specified <code>sResponseBody</code> contains responses for change sets,
118
118
  * then the corresponding response objects will be returned in a nested array.
119
- * @throws {Error}
119
+ * @throws {Error} If
120
120
  * <ul>
121
- * <li> If the <code>sContentType</code> parameter does not represent a
121
+ * <li> the <code>sContentType</code> parameter does not represent a
122
122
  * "multipart/mixed" media type with "boundary" parameter
123
- * <li> If the "charset" parameter of the "Content-Type" header of a nested response
123
+ * <li> the "charset" parameter of the "Content-Type" header of a nested response
124
124
  * has a value other than "UTF-8"
125
- * <li> If there is no "Content-ID" header for a change set response or its value is
125
+ * <li> there is no "Content-ID" header for a change set response or its value is
126
126
  * not a number
127
127
  * </ul>
128
128
  *
@@ -241,7 +241,7 @@ sap.ui.define([
241
241
  // "round" to millis: "HH:mm:ss.SSS"
242
242
  sTimeOfDay = sTimeOfDay.slice(0, 12);
243
243
  }
244
- oTimeOfDay = oTimeFormatter.parse(sTimeOfDay);
244
+ oTimeOfDay = oTimeFormatter.parse(sTimeOfDay);
245
245
  }
246
246
  if (!oTimeOfDay) {
247
247
  throw new Error("Not a valid Edm.TimeOfDay value: " + sTimeOfDay);
@@ -39,5 +39,4 @@ sap.ui.define(function () {
39
39
  };
40
40
 
41
41
  return SubmitMode;
42
-
43
42
  }, /* bExport= */ true);