@openui5/sap.ui.core 1.91.0 → 1.93.2

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 (373) hide show
  1. package/.eslintrc.json +37 -0
  2. package/.reuse/dep5 +46 -0
  3. package/THIRDPARTY.txt +59 -1
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +6 -2
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +1 -1
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +7 -4
  10. package/src/jquery.sap.stubs.js +0 -1
  11. package/src/sap/base/i18n/ResourceBundle.js +2 -2
  12. package/src/sap/base/security/encodeCSS.js +1 -0
  13. package/src/sap/base/security/encodeJS.js +1 -0
  14. package/src/sap/base/security/encodeURL.js +1 -0
  15. package/src/sap/base/security/encodeXML.js +2 -0
  16. package/src/sap/base/util/LoaderExtensions.js +1 -1
  17. package/src/sap/base/util/Properties.js +4 -1
  18. package/src/sap/base/util/isEmptyObject.js +1 -2
  19. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  20. package/src/sap/base/util/restricted/_castArray.js +1 -1
  21. package/src/sap/base/util/restricted/_compact.js +1 -1
  22. package/src/sap/base/util/restricted/_curry.js +1 -1
  23. package/src/sap/base/util/restricted/_debounce.js +1 -1
  24. package/src/sap/base/util/restricted/_difference.js +1 -1
  25. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  26. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  28. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  29. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  30. package/src/sap/base/util/restricted/_flatten.js +1 -1
  31. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  32. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  33. package/src/sap/base/util/restricted/_intersection.js +1 -1
  34. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  35. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  36. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  37. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  38. package/src/sap/base/util/restricted/_isNil.js +1 -1
  39. package/src/sap/base/util/restricted/_max.js +1 -1
  40. package/src/sap/base/util/restricted/_merge.js +1 -1
  41. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  42. package/src/sap/base/util/restricted/_min.js +1 -1
  43. package/src/sap/base/util/restricted/_omit.js +1 -1
  44. package/src/sap/base/util/restricted/_pick.js +1 -1
  45. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  46. package/src/sap/base/util/restricted/_throttle.js +1 -1
  47. package/src/sap/base/util/restricted/_toArray.js +1 -1
  48. package/src/sap/base/util/restricted/_union.js +1 -1
  49. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  50. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  51. package/src/sap/base/util/restricted/_uniq.js +1 -1
  52. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  53. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  54. package/src/sap/base/util/restricted/_without.js +1 -1
  55. package/src/sap/base/util/restricted/_xor.js +1 -1
  56. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  57. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  58. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  59. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  60. package/src/sap/ui/Device.js +10 -10
  61. package/src/sap/ui/Global.js +4 -4
  62. package/src/sap/ui/VersionInfo.js +1 -0
  63. package/src/sap/ui/base/DataType.js +1 -0
  64. package/src/sap/ui/base/Event.js +1 -1
  65. package/src/sap/ui/base/EventProvider.js +1 -1
  66. package/src/sap/ui/base/Interface.js +1 -1
  67. package/src/sap/ui/base/ManagedObject.js +121 -18
  68. package/src/sap/ui/base/ManagedObjectMetadata.js +13 -4
  69. package/src/sap/ui/base/Metadata.js +1 -1
  70. package/src/sap/ui/base/Object.js +1 -1
  71. package/src/sap/ui/base/ObjectPool.js +1 -1
  72. package/src/sap/ui/core/.library +4 -2
  73. package/src/sap/ui/core/BusyIndicator.js +1 -1
  74. package/src/sap/ui/core/BusyIndicatorUtils.js +4 -1
  75. package/src/sap/ui/core/Component.js +144 -43
  76. package/src/sap/ui/core/ComponentContainer.js +51 -2
  77. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  78. package/src/sap/ui/core/ComponentSupport.js +1 -1
  79. package/src/sap/ui/core/Configuration.js +2 -1
  80. package/src/sap/ui/core/Control.js +1 -1
  81. package/src/sap/ui/core/Core.js +20 -22
  82. package/src/sap/ui/core/CustomData.js +1 -1
  83. package/src/sap/ui/core/CustomizingConfiguration.js +2 -2
  84. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  85. package/src/sap/ui/core/Element.js +1 -1
  86. package/src/sap/ui/core/ElementMetadata.js +1 -3
  87. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  88. package/src/sap/ui/core/EventBus.js +1 -1
  89. package/src/sap/ui/core/ExtensionPoint.js +59 -16
  90. package/src/sap/ui/core/Fragment.js +3 -3
  91. package/src/sap/ui/core/HTML.js +1 -1
  92. package/src/sap/ui/core/History.js +1 -1
  93. package/src/sap/ui/core/Icon.js +1 -1
  94. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  95. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  96. package/src/sap/ui/core/InvisibleMessage.js +9 -1
  97. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  98. package/src/sap/ui/core/InvisibleText.js +1 -1
  99. package/src/sap/ui/core/Item.js +1 -1
  100. package/src/sap/ui/core/LabelEnablement.js +1 -1
  101. package/src/sap/ui/core/LayoutData.js +1 -1
  102. package/src/sap/ui/core/ListItem.js +1 -1
  103. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  104. package/src/sap/ui/core/Locale.js +1 -1
  105. package/src/sap/ui/core/LocaleData.js +15 -1328
  106. package/src/sap/ui/core/Manifest.js +124 -69
  107. package/src/sap/ui/core/Message.js +1 -1
  108. package/src/sap/ui/core/Patcher.js +143 -153
  109. package/src/sap/ui/core/Placeholder.js +173 -0
  110. package/src/sap/ui/core/Popup.js +29 -5
  111. package/src/sap/ui/core/RenderManager.js +344 -104
  112. package/src/sap/ui/core/Renderer.js +1 -1
  113. package/src/sap/ui/core/ResizeHandler.js +1 -1
  114. package/src/sap/ui/core/ScrollBar.js +1 -1
  115. package/src/sap/ui/core/SeparatorItem.js +1 -1
  116. package/src/sap/ui/core/ThemeCheck.js +14 -62
  117. package/src/sap/ui/core/Title.js +1 -1
  118. package/src/sap/ui/core/TooltipBase.js +1 -1
  119. package/src/sap/ui/core/UIArea.js +6 -3
  120. package/src/sap/ui/core/UIComponent.js +46 -23
  121. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  122. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  123. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  124. package/src/sap/ui/core/XMLComposite.js +3 -5
  125. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  126. package/src/sap/ui/core/XMLTemplateProcessor.js +5 -6
  127. package/src/sap/ui/core/cldr/en.json +1 -0
  128. package/src/sap/ui/core/date/UniversalDate.js +4 -2
  129. package/src/sap/ui/core/delegate/ItemNavigation.js +4 -4
  130. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  131. package/src/sap/ui/core/dnd/DragAndDrop.js +1 -1
  132. package/src/sap/ui/core/dnd/DragDropBase.js +2 -9
  133. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  134. package/src/sap/ui/core/dnd/DragInfo.js +41 -1
  135. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  136. package/src/sap/ui/core/format/DateFormat.js +4 -2
  137. package/src/sap/ui/core/format/NumberFormat.js +3 -0
  138. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  139. package/src/sap/ui/core/library.js +26 -4
  140. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  141. package/src/sap/ui/core/message/Message.js +1 -1
  142. package/src/sap/ui/core/message/MessageManager.js +4 -2
  143. package/src/sap/ui/core/message/MessageParser.js +1 -1
  144. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  145. package/src/sap/ui/core/messagebundle_cs.properties +1 -1
  146. package/src/sap/ui/core/messagebundle_ms.properties +1 -1
  147. package/src/sap/ui/core/messagebundle_pt.properties +6 -6
  148. package/src/sap/ui/core/messagebundle_tr.properties +1 -1
  149. package/src/sap/ui/core/mvc/Controller.js +146 -8
  150. package/src/sap/ui/core/mvc/HTMLView.js +3 -1
  151. package/src/sap/ui/core/mvc/JSONView.js +7 -5
  152. package/src/sap/ui/core/mvc/JSView.js +4 -2
  153. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  154. package/src/sap/ui/core/mvc/View.js +145 -68
  155. package/src/sap/ui/core/mvc/ViewType.js +2 -0
  156. package/src/sap/ui/core/mvc/XMLView.js +13 -9
  157. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  158. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  159. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  160. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  161. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  162. package/src/sap/ui/core/routing/HashChangerBase.js +9 -2
  163. package/src/sap/ui/core/routing/History.js +188 -87
  164. package/src/sap/ui/core/routing/Route.js +10 -1
  165. package/src/sap/ui/core/routing/Router.js +8 -5
  166. package/src/sap/ui/core/routing/RouterHashChanger.js +26 -16
  167. package/src/sap/ui/core/routing/TargetCache.js +19 -8
  168. package/src/sap/ui/core/routing/Targets.js +29 -3
  169. package/src/sap/ui/core/routing/async/Route.js +9 -1
  170. package/src/sap/ui/core/routing/async/Target.js +249 -85
  171. package/src/sap/ui/core/routing/async/TargetCache.js +9 -7
  172. package/src/sap/ui/core/routing/async/Targets.js +4 -2
  173. package/src/sap/ui/core/routing/sync/Target.js +15 -0
  174. package/src/sap/ui/core/rules/App.support.js +36 -2
  175. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  176. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  177. package/src/sap/ui/core/service/Service.js +1 -1
  178. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  179. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  180. package/src/sap/ui/core/support/InteractionTree.css +0 -14
  181. package/src/sap/ui/core/support/Plugin.js +1 -1
  182. package/src/sap/ui/core/support/RuleEngineOpaExtension.js +0 -2
  183. package/src/sap/ui/core/support/Support.js +1 -1
  184. package/src/sap/ui/core/support/TimelineOverview.css +0 -35
  185. package/src/sap/ui/core/support/controls/ObjectViewer.js +5 -9
  186. package/src/sap/ui/core/support/controls/TreeViewer.js +0 -1
  187. package/src/sap/ui/core/support/interactionSlider.css +0 -3
  188. package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
  189. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  190. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  191. package/src/sap/ui/core/support/plugins/MessageTest.js +1 -1
  192. package/src/sap/ui/core/support/plugins/Performance.js +2 -1
  193. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  194. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  195. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  196. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -3
  197. package/src/sap/ui/core/support/support.css +4 -164
  198. package/src/sap/ui/core/support/trace/E2eTraceLib.js +3 -3
  199. package/src/sap/ui/core/support/usage/EventBroadcaster.js +0 -22
  200. package/src/sap/ui/core/themes/base/BlindLayer.less +0 -2
  201. package/src/sap/ui/core/themes/base/BrowserScrollbar.less +0 -9
  202. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +5 -5
  203. package/src/sap/ui/core/themes/base/SAP-icons.css +2 -0
  204. package/src/sap/ui/core/themes/base/SAP-icons.less +10 -0
  205. package/src/sap/ui/core/themes/base/TechnicalInfo.less +0 -1
  206. package/src/sap/ui/core/themes/base/base.less +569 -414
  207. package/src/sap/ui/core/themes/base/global.less +38 -0
  208. package/src/sap/ui/core/themes/base/library.source.less +1 -2
  209. package/src/sap/ui/core/themes/base/shared.less +1 -1
  210. package/src/sap/ui/core/themes/sap_hcb/global.less +34 -0
  211. package/src/sap/ui/core/theming/Parameters.js +222 -60
  212. package/src/sap/ui/core/theming/ThemeHelper.js +94 -0
  213. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  214. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  215. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  216. package/src/sap/ui/core/tmpl/Template.js +2 -1
  217. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  218. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  219. package/src/sap/ui/core/util/Export.js +1 -1
  220. package/src/sap/ui/core/util/ExportCell.js +1 -1
  221. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  222. package/src/sap/ui/core/util/ExportRow.js +1 -1
  223. package/src/sap/ui/core/util/ExportType.js +1 -1
  224. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  225. package/src/sap/ui/core/util/File.js +1 -1
  226. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  227. package/src/sap/ui/core/util/MockServer.js +27 -7
  228. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  229. package/src/sap/ui/core/util/XMLPreprocessor.js +2 -2
  230. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +18 -0
  231. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  232. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  233. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  234. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  235. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  236. package/src/sap/ui/core/util/serializer/delegate/HTML.js +2 -2
  237. package/src/sap/ui/core/util/serializer/delegate/XML.js +2 -2
  238. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  239. package/src/sap/ui/core/ws/SapPcpWebSocket.js +2 -1
  240. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  241. package/src/sap/ui/debug/ControlTree.js +1 -1
  242. package/src/sap/ui/debug/DebugEnv.js +1 -1
  243. package/src/sap/ui/debug/PropertyList.js +1 -1
  244. package/src/sap/ui/dom/jquery/zIndex.js +3 -3
  245. package/src/sap/ui/events/jquery/EventSimulation.js +7 -6
  246. package/src/sap/ui/events/jquery/EventTriggerHook.js +1 -1
  247. package/src/sap/ui/model/Binding.js +7 -3
  248. package/src/sap/ui/model/ClientModel.js +1 -1
  249. package/src/sap/ui/model/CompositeBinding.js +1 -1
  250. package/src/sap/ui/model/CompositeDataState.js +1 -1
  251. package/src/sap/ui/model/CompositeType.js +1 -1
  252. package/src/sap/ui/model/Context.js +31 -11
  253. package/src/sap/ui/model/DataState.js +1 -1
  254. package/src/sap/ui/model/ListBinding.js +19 -0
  255. package/src/sap/ui/model/MetaModel.js +1 -1
  256. package/src/sap/ui/model/Model.js +3 -3
  257. package/src/sap/ui/model/SelectionModel.js +5 -1
  258. package/src/sap/ui/model/SimpleType.js +1 -1
  259. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  260. package/src/sap/ui/model/Type.js +1 -1
  261. package/src/sap/ui/model/analytics/AnalyticalBinding.js +36 -45
  262. package/src/sap/ui/model/analytics/odata4analytics.js +31 -31
  263. package/src/sap/ui/model/base/ManagedObjectModel.js +11 -1
  264. package/src/sap/ui/model/json/JSONModel.js +1 -1
  265. package/src/sap/ui/model/message/MessageModel.js +1 -1
  266. package/src/sap/ui/model/odata/AnnotationParser.js +23 -18
  267. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  268. package/src/sap/ui/model/odata/ODataListBinding.js +1 -0
  269. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  270. package/src/sap/ui/model/odata/ODataMetaModel.js +52 -40
  271. package/src/sap/ui/model/odata/ODataMetadata.js +3 -3
  272. package/src/sap/ui/model/odata/ODataModel.js +6 -6
  273. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +1 -1
  274. package/src/sap/ui/model/odata/ODataUtils.js +126 -0
  275. package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +30 -27
  276. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  277. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  278. package/src/sap/ui/model/odata/type/Currency.js +7 -2
  279. package/src/sap/ui/model/odata/type/Date.js +1 -1
  280. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  281. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  282. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  283. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  284. package/src/sap/ui/model/odata/type/Double.js +1 -1
  285. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  286. package/src/sap/ui/model/odata/type/Int.js +1 -1
  287. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  288. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  289. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  290. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  291. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  292. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  293. package/src/sap/ui/model/odata/type/Single.js +1 -1
  294. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  295. package/src/sap/ui/model/odata/type/String.js +3 -1
  296. package/src/sap/ui/model/odata/type/Time.js +1 -1
  297. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  298. package/src/sap/ui/model/odata/type/Unit.js +7 -2
  299. package/src/sap/ui/model/odata/type/UnitMixin.js +20 -7
  300. package/src/sap/ui/model/odata/v2/Context.js +165 -0
  301. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  302. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +19 -5
  303. package/src/sap/ui/model/odata/v2/ODataListBinding.js +20 -79
  304. package/src/sap/ui/model/odata/v2/ODataModel.js +75 -53
  305. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +55 -41
  306. package/src/sap/ui/model/odata/v4/Context.js +48 -15
  307. package/src/sap/ui/model/odata/v4/ODataBinding.js +89 -9
  308. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +87 -21
  309. package/src/sap/ui/model/odata/v4/ODataListBinding.js +72 -50
  310. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +8 -8
  311. package/src/sap/ui/model/odata/v4/ODataModel.js +109 -171
  312. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +34 -67
  313. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +18 -9
  314. package/src/sap/ui/model/odata/v4/ODataUtils.js +1 -1
  315. package/src/sap/ui/model/odata/v4/SubmitMode.js +3 -3
  316. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +1 -1
  317. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +17 -16
  318. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +5 -1
  319. package/src/sap/ui/model/odata/v4/lib/_Cache.js +86 -117
  320. package/src/sap/ui/model/odata/v4/lib/{_GrandTotalHelper.js → _ConcatHelper.js} +34 -27
  321. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +2 -2
  322. package/src/sap/ui/model/odata/v4/lib/_Helper.js +122 -7
  323. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +4 -4
  324. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +2 -2
  325. package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +25 -74
  326. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +49 -12
  327. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +7 -7
  328. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  329. package/src/sap/ui/model/type/Boolean.js +1 -1
  330. package/src/sap/ui/model/type/Currency.js +1 -1
  331. package/src/sap/ui/model/type/Date.js +1 -1
  332. package/src/sap/ui/model/type/DateInterval.js +3 -3
  333. package/src/sap/ui/model/type/DateTime.js +1 -1
  334. package/src/sap/ui/model/type/DateTimeInterval.js +3 -3
  335. package/src/sap/ui/model/type/FileSize.js +1 -1
  336. package/src/sap/ui/model/type/Float.js +1 -1
  337. package/src/sap/ui/model/type/Integer.js +1 -1
  338. package/src/sap/ui/model/type/String.js +1 -1
  339. package/src/sap/ui/model/type/Time.js +1 -1
  340. package/src/sap/ui/model/type/TimeInterval.js +3 -3
  341. package/src/sap/ui/model/type/Unit.js +1 -1
  342. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  343. package/src/sap/ui/performance/Measurement.js +3 -5
  344. package/src/sap/ui/performance/trace/FESR.js +2 -1
  345. package/src/sap/ui/performance/trace/Interaction.js +11 -9
  346. package/src/sap/ui/qunit/QUnitUtils.js +1 -1
  347. package/src/sap/ui/qunit/qunit-coverage.js +1 -0
  348. package/src/sap/ui/qunit/qunit-junit.js +1 -0
  349. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  350. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  351. package/src/sap/ui/security/FrameOptions.js +2 -1
  352. package/src/sap/ui/test/Opa5.js +1 -1
  353. package/src/sap/ui/test/OpaBuilder.js +1 -0
  354. package/src/sap/ui/test/TestUtils.js +17 -30
  355. package/src/sap/ui/test/_BrowserLogCollector.js +1 -0
  356. package/src/sap/ui/test/actions/Action.js +1 -1
  357. package/src/sap/ui/test/launchers/componentLauncher.js +2 -1
  358. package/src/sap/ui/test/opaQunit.js +6 -9
  359. package/src/sap/ui/test/pipelines/MatcherPipeline.js +1 -1
  360. package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +4 -4
  361. package/src/sap/ui/test/starter/_utils.js +6 -0
  362. package/src/sap/ui/test/starter/createSuite.js +1 -1
  363. package/src/sap/ui/thirdparty/IPv6.js +2 -2
  364. package/src/sap/ui/thirdparty/SecondLevelDomains.js +2 -2
  365. package/src/sap/ui/thirdparty/URI.js +14 -5
  366. package/src/sap/ui/thirdparty/URITemplate.js +2 -2
  367. package/src/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
  368. package/src/sap/ui/thirdparty/crossroads.js +10 -2
  369. package/src/sap/ui/util/Mobile.js +10 -7
  370. package/src/sap/ui/util/Storage.js +1 -1
  371. package/src/ui5loader-autoconfig.js +1 -1
  372. package/src/ui5loader.js +24 -6
  373. package/src/sap/ui/model/odata/v4/.eslintrc +0 -6
@@ -98,12 +98,12 @@ sap.ui.define([
98
98
  * wins). The same annotations are overwritten; if an annotation file contains other elements
99
99
  * (like a type definition) that are already merged, an error is thrown.
100
100
  * Supported since 1.41.0
101
- * @param {boolean} [mParameters.autoExpandSelect=false]
101
+ * @param {boolean} [mParameters.autoExpandSelect]
102
102
  * Whether the OData model's bindings automatically generate $select and $expand system query
103
103
  * options from the binding hierarchy. Note: Dynamic changes to the binding hierarchy are not
104
104
  * supported. This parameter is supported since 1.47.0, and since 1.75.0 it also enables
105
105
  * property paths containing navigation properties in <code>$select</code>.
106
- * @param {boolean} [mParameters.earlyRequests=false]
106
+ * @param {boolean} [mParameters.earlyRequests]
107
107
  * Whether the following is requested at the earliest convenience:
108
108
  * <ul>
109
109
  * <li> root $metadata document and annotation files;
@@ -208,7 +208,7 @@ sap.ui.define([
208
208
  * @extends sap.ui.model.Model
209
209
  * @public
210
210
  * @since 1.37.0
211
- * @version 1.91.0
211
+ * @version 1.93.2
212
212
  */
213
213
  var ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
214
214
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */
@@ -345,7 +345,7 @@ sap.ui.define([
345
345
  *
346
346
  * @param {string} sGroupId
347
347
  * The group ID
348
- * @param {boolean} [bCatch=false]
348
+ * @param {boolean} [bCatch]
349
349
  * Whether the returned promise always resolves and never rejects
350
350
  * @returns {sap.ui.base.SyncPromise}
351
351
  * A promise on the outcome of the HTTP request resolving with <code>undefined</code>; it is
@@ -421,7 +421,7 @@ sap.ui.define([
421
421
  *
422
422
  * @param {function} fnPrerenderingTask
423
423
  * A function that is called before the rendering
424
- * @param {boolean} [bFirst=false]
424
+ * @param {boolean} [bFirst]
425
425
  * Whether the task should become the first one, not the last one
426
426
  * @private
427
427
  */
@@ -446,7 +446,7 @@ sap.ui.define([
446
446
  // runs after all setTimeout(0) tasks scheduled from within the current task, even those
447
447
  // that were scheduled afterwards. A simple setTimeout(n) with n > 0 is not sufficient
448
448
  // because this doesn't help if the current task runs very long.
449
- iTimeoutId = setTimeout(function() {
449
+ iTimeoutId = setTimeout(function () {
450
450
  iTimeoutId = setTimeout(fnRunTasks, 0);
451
451
  }, 0);
452
452
  }
@@ -812,9 +812,9 @@ sap.ui.define([
812
812
  *
813
813
  * @param {object} [mParameters={}]
814
814
  * Map of binding parameters
815
- * @param {boolean} [bSystemQueryOptionsAllowed=false]
815
+ * @param {boolean} [bSystemQueryOptionsAllowed]
816
816
  * Whether system query options are allowed
817
- * @param {boolean} [bSapAllowed=false]
817
+ * @param {boolean} [bSapAllowed]
818
818
  * Whether custom query options starting with "sap-" are allowed (Note: "sap-valid-" is always
819
819
  * allowed)
820
820
  * @throws {Error}
@@ -958,7 +958,7 @@ sap.ui.define([
958
958
  if (sHeaderName === "x-csrf-token") {
959
959
  sKey = "X-CSRF-Token";
960
960
  }
961
- mHeadersCopy[sHeaderName] = {key : sKey, value: sHeaderValue};
961
+ mHeadersCopy[sHeaderName] = {key : sKey, value : sHeaderValue};
962
962
  }
963
963
  }
964
964
  this.oRequestor.checkForOpenRequests();
@@ -1132,6 +1132,83 @@ sap.ui.define([
1132
1132
  return new BaseContext(this, sResolvedPath);
1133
1133
  };
1134
1134
 
1135
+ /**
1136
+ * Creates a {@link sap.ui.core.message.Message} from a given "raw" message object. For a
1137
+ * bound message, targets are resolved if they are not yet resolved. A message is called a bound
1138
+ * message if is has a target, even if it is empty.
1139
+ *
1140
+ * @param {object} oRawMessage
1141
+ * The raw message
1142
+ * @param {string} [oRawMessage.code]
1143
+ * The error code
1144
+ * @param {string} [oRawMessage.longtextUrl]
1145
+ * The message longtext URL; can be relative to the given <code>sResourcePath</code>
1146
+ * @param {string} [oRawMessage.message]
1147
+ * The message text
1148
+ * @param {number} [oRawMessage.numericSeverity]
1149
+ * The numeric message severity
1150
+ * @param {string} [oRawMessage.target]
1151
+ * The message target; can be relative to the <code>sResourcePath</code> plus
1152
+ * <code>sCachePath</code>
1153
+ * @param {string[]} [oRawMessage.additionalTargets]
1154
+ * Array of additional targets with the same meaning as <code>target</code>
1155
+ * @param {boolean} [oRawMessage.technical]
1156
+ * Whether the message is reported as <code>technical</code>
1157
+ * @param {boolean} [oRawMessage.transition]
1158
+ * Whether the message is a transition message and not a state message. Unbound messages
1159
+ * cannot be state messages
1160
+ * @param {object} [oRawMessage.@$ui5.error]
1161
+ * The original error instance
1162
+ * @param {object} [oRawMessage.@$ui5.originalMessage]
1163
+ * The original message object which is used to create the technical details
1164
+ * @param {string} [sResourcePath]
1165
+ * The resource path of the cache that saw the messages; used to resolve the targets and
1166
+ * the longtext URL
1167
+ * @param {string} [sCachePath]
1168
+ * The cache-relative path to the entity; used to resolve the targets
1169
+ * @returns {sap.ui.core.message.Message}
1170
+ * The created UI5 message object
1171
+ *
1172
+ * @private
1173
+ */
1174
+ ODataModel.prototype.createUI5Message = function (oRawMessage, sResourcePath, sCachePath) {
1175
+ var bIsBound = typeof oRawMessage.target === "string",
1176
+ sMessageLongtextUrl = oRawMessage.longtextUrl,
1177
+ aTargets;
1178
+
1179
+ function resolveTarget(sTarget) {
1180
+ return sTarget[0] === "/"
1181
+ ? sTarget
1182
+ : _Helper.buildPath("/" + sResourcePath, sCachePath, sTarget);
1183
+ }
1184
+
1185
+ if (bIsBound) {
1186
+ aTargets = [resolveTarget(oRawMessage.target)];
1187
+ if (oRawMessage.additionalTargets) {
1188
+ oRawMessage.additionalTargets.forEach(function (sTarget) {
1189
+ aTargets.push(resolveTarget(sTarget));
1190
+ });
1191
+ }
1192
+ }
1193
+ if (sMessageLongtextUrl && sResourcePath) {
1194
+ sMessageLongtextUrl = _Helper.makeAbsolute(sMessageLongtextUrl,
1195
+ this.sServiceUrl + sResourcePath);
1196
+ }
1197
+
1198
+ return new Message({
1199
+ code : oRawMessage.code,
1200
+ descriptionUrl : sMessageLongtextUrl || undefined,
1201
+ message : oRawMessage.message,
1202
+ persistent : bIsBound ? oRawMessage.transition : true,
1203
+ processor : this,
1204
+ // Note: "" instead of undefined makes filtering easier (agreement with FE!)
1205
+ target : bIsBound ? aTargets : "",
1206
+ technical : oRawMessage.technical,
1207
+ technicalDetails : _Helper.createTechnicalDetails(oRawMessage),
1208
+ type : aMessageTypes[oRawMessage.numericSeverity] || MessageType.None
1209
+ });
1210
+ };
1211
+
1135
1212
  /**
1136
1213
  * Destroys this model, its requestor and its meta model.
1137
1214
  *
@@ -1586,37 +1663,14 @@ sap.ui.define([
1586
1663
  * the new messages.
1587
1664
  *
1588
1665
  * @param {string} sResourcePath
1589
- * The resource path of the cache that saw the messages
1666
+ * The resource path of the cache that saw the messages; used to resolve the targets and
1667
+ * the longtext URL
1590
1668
  * @param {object} mPathToODataMessages
1591
- * Maps a cache-relative path with key predicates or indices to an array of messages with the
1592
- * following properties. Each message is passed to the "technicalDetails" (see
1593
- * _Helper.createTechnicalDetails). Currently the "technicalDetails" only contain an attribute
1594
- * named "originalMessage" that contains the message that is received from the back end.
1595
- * {string} code
1596
- * The error code
1597
- * {string} [longtextUrl]
1598
- * The absolute URL for the message's long text
1599
- * {string} message
1600
- * The message text
1601
- * {number} numericSeverity
1602
- * The numeric message severity (1 for "success", 2 for "info", 3 for "warning" and 4 for
1603
- * "error")
1604
- * {string} target
1605
- * The target for the message; if relative the reported target path is a concatenation of
1606
- * the resource path, the cache-relative path and this property
1607
- * {string[]} [additionalTargets]
1608
- * Array of additional targets with the same meaning as <code>target</code>
1609
- * {boolean} [technical]
1610
- * Whether the message is reported as <code>technical</code> (supplied by #reportError)
1611
- * {boolean} [transition]
1612
- * Whether the message is reported as <code>persistent=true</code> and therefore needs to be
1613
- * managed by the application
1614
- * {object} [@$ui5.originalMessage]
1615
- * The original message object supplied by #reportError. In case this is supplied it is used
1616
- * in _Helper.createTechnicalDetails to create the "originalMessage" property
1669
+ * Maps a cache-relative path with key predicates or indices to an array of messages suitable
1670
+ * for {@link #createUI5Message}
1617
1671
  * @param {string[]} [aCachePaths]
1618
- * An array of cache-relative paths of the entities for which non-persistent messages have to
1619
- * be removed; if the array is not given, all entities are affected
1672
+ * An array of cache-relative paths of the entities for which non-persistent messages have to
1673
+ * be removed; if the array is not given, all entities are affected
1620
1674
  *
1621
1675
  * @private
1622
1676
  */
@@ -1629,32 +1683,7 @@ sap.ui.define([
1629
1683
 
1630
1684
  Object.keys(mPathToODataMessages).forEach(function (sCachePath) {
1631
1685
  mPathToODataMessages[sCachePath].forEach(function (oRawMessage) {
1632
- var aTargets;
1633
-
1634
- function resolveTarget(sTarget) {
1635
- return sTarget[0] === "/"
1636
- ? sTarget
1637
- : _Helper.buildPath(sDataBindingPath, sCachePath, sTarget);
1638
- }
1639
-
1640
- aTargets = [resolveTarget(oRawMessage.target)];
1641
- if (oRawMessage.additionalTargets) {
1642
- oRawMessage.additionalTargets.forEach(function (sTarget) {
1643
- aTargets.push(resolveTarget(sTarget));
1644
- });
1645
- }
1646
-
1647
- aNewMessages.push(new Message({
1648
- code : oRawMessage.code,
1649
- descriptionUrl : oRawMessage.longtextUrl || undefined,
1650
- message : oRawMessage.message,
1651
- persistent : oRawMessage.transition,
1652
- processor : that,
1653
- target : aTargets,
1654
- technical : oRawMessage.technical,
1655
- technicalDetails : _Helper.createTechnicalDetails(oRawMessage),
1656
- type : aMessageTypes[oRawMessage.numericSeverity] || MessageType.None
1657
- }));
1686
+ aNewMessages.push(that.createUI5Message(oRawMessage, sResourcePath, sCachePath));
1658
1687
  });
1659
1688
  });
1660
1689
  (aCachePaths || [""]).forEach(function (sCachePath) {
@@ -1708,57 +1737,8 @@ sap.ui.define([
1708
1737
  * @private
1709
1738
  */
1710
1739
  ODataModel.prototype.reportError = function (sLogMessage, sReportingClassName, oError) {
1711
- var aBoundMessages = [],
1712
- sDetails,
1713
- sResourcePath,
1714
- aUnboundMessages = [];
1715
-
1716
- /*
1717
- * Clones the message object taking all relevant properties, converts the annotations for
1718
- * numeric severity and longtext to the corresponding properties and adds it to one of the
1719
- * arrays to be reported later.
1720
- * @param {object} oMessage The message
1721
- * @param {number} [iNumericSeverity] The numeric severity
1722
- * @param {boolean} [bTechnical] Whether the message is reported as technical
1723
- */
1724
- function addMessage(oMessage, iNumericSeverity, bTechnical) {
1725
- var oReportMessage = {
1726
- additionalTargets : _Helper.getAdditionalTargets(oMessage),
1727
- code : oMessage.code,
1728
- message : oMessage.message,
1729
- numericSeverity : iNumericSeverity,
1730
- technical : bTechnical || oMessage.technical,
1731
- // use "@$ui5." prefix to overcome name collisions with instance annotations
1732
- // returned from back end.
1733
- "@$ui5.error" : oError,
1734
- "@$ui5.originalMessage" : oMessage
1735
- };
1736
-
1737
- Object.keys(oMessage).forEach(function (sProperty) {
1738
- if (sProperty[0] === '@') {
1739
- if (sProperty.endsWith(".numericSeverity")) {
1740
- oReportMessage.numericSeverity = oMessage[sProperty];
1741
- } else if (sProperty.endsWith(".longtextUrl") && oError.requestUrl
1742
- && oMessage[sProperty]) {
1743
- oReportMessage.longtextUrl =
1744
- _Helper.makeAbsolute(oMessage[sProperty], oError.requestUrl);
1745
- }
1746
- }
1747
- });
1748
-
1749
- if (typeof oMessage.target !== "string") {
1750
- aUnboundMessages.push(oReportMessage);
1751
- } else if (oMessage.target[0] === "$" || !sResourcePath) {
1752
- // target for the bound message is a system query option or cannot be resolved
1753
- // -> report as unbound message
1754
- oReportMessage.message = oMessage.target + ": " + oReportMessage.message;
1755
- aUnboundMessages.push(oReportMessage);
1756
- } else {
1757
- oReportMessage.target = oMessage.target;
1758
- oReportMessage.transition = true;
1759
- aBoundMessages.push(oReportMessage);
1760
- }
1761
- }
1740
+ var sDetails,
1741
+ oRawMessages;
1762
1742
 
1763
1743
  if (oError.canceled === "noDebugLog") {
1764
1744
  return;
@@ -1779,24 +1759,16 @@ sap.ui.define([
1779
1759
  }
1780
1760
  oError.$reported = true;
1781
1761
 
1782
- if (oError.error) {
1783
- sResourcePath = oError.resourcePath && oError.resourcePath.split("?")[0];
1784
- if (!oError.error.$ignoreTopLevel) {
1785
- addMessage(oError.error, 4 /* Error */, true);
1786
- }
1787
- if (oError.error.details) {
1788
- oError.error.details.forEach(function (oMessage) {
1789
- addMessage(oMessage);
1790
- });
1791
- }
1792
- if (aBoundMessages.length) {
1793
- this.reportBoundMessages(sResourcePath, {"" : aBoundMessages}, []);
1794
- }
1795
- } else {
1796
- addMessage(oError, 4 /* Error */, true);
1762
+ oRawMessages = _Helper.extractMessages(oError);
1763
+ if (oRawMessages.bound.length) {
1764
+ this.reportBoundMessages(
1765
+ oError.resourcePath.split("?")[0],
1766
+ {"" : oRawMessages.bound},
1767
+ []
1768
+ );
1797
1769
  }
1798
1770
  // The longtextUrls are already absolute, so sResourcePath is not needed here
1799
- this.reportUnboundMessages(aUnboundMessages);
1771
+ this.reportUnboundMessages(oRawMessages.unbound);
1800
1772
  };
1801
1773
 
1802
1774
  /**
@@ -1804,27 +1776,10 @@ sap.ui.define([
1804
1776
  * the new messages.
1805
1777
  *
1806
1778
  * @param {object[]} aMessages
1807
- * The array of messages as contained in the <code>sap-messages</code> response header with
1808
- * the following properties. Each message is passed to the "technicalDetails" (see
1809
- * _Helper.createTechnicalDetails). Currently the "technicalDetails" only contain an attribute
1810
- * named "originalMessage" that contains the message that is received from the back end.
1811
- * {string} code
1812
- * The error code
1813
- * {string} [longtextUrl]
1814
- * The URL for the message's long text; it must be absolute if <code>sResourcePath</code> is
1815
- * missing
1816
- * {string} message
1817
- * The message text
1818
- * {number} numericSeverity
1819
- * The numeric message severity (1 for "success", 2 for "info", 3 for "warning" and 4 for
1820
- * "error")
1821
- * {boolean} [technical]
1822
- * Whether the message is reported as <code>technical</code> (supplied by #reportError)
1823
- * {object} [@$ui5.originalMessage]
1824
- * The original message object supplied by #reportError. In case this is supplied it is used
1825
- * in _Helper.createTechnicalDetails to create the "originalMessage" property
1779
+ * An array of messages suitable for {@link #createUI5Message}
1826
1780
  * @param {string} [sResourcePath]
1827
- * The resource path of the request whose response contained the messages.
1781
+ * The resource path of the cache that saw the messages; used to resolve the longtext URL
1782
+ *
1828
1783
  * @private
1829
1784
  */
1830
1785
  ODataModel.prototype.reportUnboundMessages = function (aMessages, sResourcePath) {
@@ -1833,24 +1788,7 @@ sap.ui.define([
1833
1788
  if (aMessages && aMessages.length) {
1834
1789
  this.fireMessageChange({
1835
1790
  newMessages : aMessages.map(function (oMessage) {
1836
- var sMessageLongTextUrl = oMessage.longtextUrl;
1837
-
1838
- if (sMessageLongTextUrl && sResourcePath) {
1839
- sMessageLongTextUrl = _Helper.makeAbsolute(sMessageLongTextUrl,
1840
- that.sServiceUrl + sResourcePath);
1841
- }
1842
-
1843
- return new Message({
1844
- code : oMessage.code,
1845
- descriptionUrl : sMessageLongTextUrl,
1846
- message : oMessage.message,
1847
- persistent : true,
1848
- processor : that,
1849
- target : "",
1850
- technical : oMessage.technical,
1851
- technicalDetails : _Helper.createTechnicalDetails(oMessage),
1852
- type : aMessageTypes[oMessage.numericSeverity] || MessageType.None
1853
- });
1791
+ return that.createUI5Message(oMessage, sResourcePath);
1854
1792
  })
1855
1793
  });
1856
1794
  }
@@ -1902,7 +1840,7 @@ sap.ui.define([
1902
1840
 
1903
1841
  return SyncPromise.all(
1904
1842
  this.aAllBindings.filter(function (oBinding) {
1905
- return oBinding.isRoot() && oBinding.requestAbsoluteSideEffects;
1843
+ return oBinding.isRoot();
1906
1844
  }).map(function (oRootBinding) {
1907
1845
  return oRootBinding.requestAbsoluteSideEffects(sGroupId, aAbsolutePaths);
1908
1846
  })
@@ -2076,4 +2014,4 @@ sap.ui.define([
2076
2014
  };
2077
2015
 
2078
2016
  return ODataModel;
2079
- });
2017
+ });
@@ -203,10 +203,9 @@ sap.ui.define([
203
203
  * @param {object} mQueryOptions0 The query options to merge into the aggregated query
204
204
  * options
205
205
  * @param {string} sMetaPath The meta path for the current $expand
206
- * @param {boolean} [bInsideExpand=false] Whether the given query options are inside a
207
- * $expand
208
- * @param {boolean} [bAdd=false] Whether to add the given query options because they are in
209
- * a $expand that has not been aggregated yet
206
+ * @param {boolean} [bInsideExpand] Whether the given query options are inside a $expand
207
+ * @param {boolean} [bAdd] Whether to add the given query options because they are in a
208
+ * $expand that has not been aggregated yet
210
209
  * @returns {boolean} Whether the query options can be fulfilled by this binding
211
210
  */
212
211
  function merge(mAggregatedQueryOptions, mQueryOptions0, sMetaPath, bInsideExpand, bAdd) {
@@ -308,7 +307,9 @@ sap.ui.define([
308
307
  * If there are pending changes or if <code>mParameters</code> is missing, contains
309
308
  * binding-specific or unsupported parameters, contains unsupported values, or contains the
310
309
  * property "$expand" or "$select" when the model is in auto-$expand/$select mode.
311
- * Since 1.90.0, binding-specific parameters are ignored if they are unchanged.
310
+ * Since 1.90.0, binding-specific parameters are ignored if they are unchanged. Since 1.93.0,
311
+ * string values for "$expand" and "$select" are ignored if they are unchanged; pending
312
+ * changes are ignored if all parameters are unchanged.
312
313
  *
313
314
  * @public
314
315
  * @since 1.45.0
@@ -319,14 +320,6 @@ sap.ui.define([
319
320
  sKey,
320
321
  that = this;
321
322
 
322
- function checkExpandSelect(sName) {
323
- if (that.oModel.bAutoExpandSelect && sName in mParameters) {
324
- throw new Error("Cannot change $expand or $select parameter in "
325
- + "auto-$expand/$select mode: "
326
- + sName + "=" + JSON.stringify(mParameters[sName]));
327
- }
328
- }
329
-
330
323
  /*
331
324
  * Updates <code>sChangeReason</code> depending on the given custom or system query option
332
325
  * name:
@@ -338,8 +331,16 @@ sap.ui.define([
338
331
  *
339
332
  * @param {string} sName
340
333
  * The name of a custom or system query option
334
+ * @throws {Error}
335
+ * If name is "$expand" or "$select" when the model is in auto-$expand/$select mode
341
336
  */
342
337
  function updateChangeReason(sName) {
338
+ if (that.oModel.bAutoExpandSelect && (sName === "$expand" || sName === "$select")) {
339
+ throw new Error("Cannot change " + sName
340
+ + " parameter in auto-$expand/$select mode: "
341
+ + JSON.stringify(mParameters[sName])
342
+ + " !== " + JSON.stringify(mBindingParameters[sName]));
343
+ }
343
344
  if (sName === "$filter" || sName === "$search") {
344
345
  sChangeReason = ChangeReason.Filter;
345
346
  } else if (sName === "$orderby" && sChangeReason !== ChangeReason.Filter) {
@@ -352,11 +353,6 @@ sap.ui.define([
352
353
  if (!mParameters) {
353
354
  throw new Error("Missing map of binding parameters");
354
355
  }
355
- checkExpandSelect("$expand");
356
- checkExpandSelect("$select");
357
- if (this.hasPendingChanges()) {
358
- throw new Error("Cannot change parameters due to pending changes");
359
- }
360
356
 
361
357
  for (sKey in mParameters) {
362
358
  if (sKey.startsWith("$$")) {
@@ -379,6 +375,9 @@ sap.ui.define([
379
375
  }
380
376
 
381
377
  if (sChangeReason) {
378
+ if (this.hasPendingChanges()) {
379
+ throw new Error("Cannot change parameters due to pending changes");
380
+ }
382
381
  this.applyParameters(mBindingParameters, sChangeReason);
383
382
  }
384
383
  };
@@ -631,8 +630,8 @@ sap.ui.define([
631
630
  * <code>sChildPath</code> accordingly.
632
631
  * @param {string} sChildPath
633
632
  * The child binding's binding path relative to <code>oContext</code>
634
- * @param {sap.ui.base.SyncPromise} oChildQueryOptionsPromise
635
- * Promise resolving with the child binding's (aggregated) query options
633
+ * @param {object|sap.ui.base.SyncPromise} vChildQueryOptions
634
+ * The child binding's (aggregated) query options or a promise resolving with them
636
635
  * @returns {sap.ui.base.SyncPromise}
637
636
  * A promise resolved with the reduced path for the child binding if the child binding can use
638
637
  * this binding's or an ancestor binding's cache; <code>undefined</code> otherwise.
@@ -641,7 +640,7 @@ sap.ui.define([
641
640
  * @see sap.ui.model.odata.v4.ODataMetaModel#getReducedPath
642
641
  */
643
642
  ODataParentBinding.prototype.fetchIfChildCanUseCache = function (oContext, sChildPath,
644
- oChildQueryOptionsPromise) {
643
+ vChildQueryOptions) {
645
644
  // getBaseForPathReduction must be called early, because the (virtual) parent context may be
646
645
  // lost again when the path is needed
647
646
  var sBaseForPathReduction = this.getBaseForPathReduction(),
@@ -701,7 +700,7 @@ sap.ui.define([
701
700
  // is loaded so that synchronous access in wrapChildQueryOptions via getObject is
702
701
  // possible
703
702
  fetchPropertyAndType(),
704
- oChildQueryOptionsPromise
703
+ vChildQueryOptions
705
704
  ];
706
705
  oCanUseCachePromise = SyncPromise.all(aPromises).then(function (aResult) {
707
706
  var sChildMetaPath,
@@ -730,7 +729,7 @@ sap.ui.define([
730
729
  that.bHasPathReductionToParent = true;
731
730
  return that.oContext.getBinding().fetchIfChildCanUseCache(that.oContext,
732
731
  _Helper.getRelativePath(sResolvedChildPath, that.oContext.getPath()),
733
- oChildQueryOptionsPromise);
732
+ vChildQueryOptions);
734
733
  }
735
734
 
736
735
  if (bDependsOnOperation) {
@@ -1107,42 +1106,6 @@ sap.ui.define([
1107
1106
  this.setResumeChangeReason(ChangeReason.Refresh);
1108
1107
  };
1109
1108
 
1110
- /**
1111
- * Requests side effects for the given absolute paths.
1112
- *
1113
- * @param {string} sGroupId
1114
- * The effective group ID
1115
- * @param {string[]} aAbsolutePaths
1116
- * The absolute paths to request side effects for
1117
- * @returns {sap.ui.base.SyncPromise}
1118
- * A promise resolving without a defined result, or rejecting with an error if loading of side
1119
- * effects fails, or <code>undefined</code> if there is nothing to do
1120
- *
1121
- * @private
1122
- */
1123
- ODataParentBinding.prototype.requestAbsoluteSideEffects = function (sGroupId, aAbsolutePaths) {
1124
- var aPaths = [],
1125
- sMetaPath = _Helper.getMetaPath(this.getResolvedPath()),
1126
- bRefresh;
1127
-
1128
- bRefresh = aAbsolutePaths.some(function (sAbsolutePath) {
1129
- var sRelativePath = _Helper.getRelativePath(sAbsolutePath, sMetaPath);
1130
-
1131
- if (sRelativePath !== undefined) {
1132
- aPaths.push(sRelativePath);
1133
- }
1134
-
1135
- return _Helper.hasPathPrefix(sMetaPath, sAbsolutePath);
1136
- });
1137
-
1138
- if (bRefresh) {
1139
- return this.refreshInternal("", sGroupId);
1140
- } else if (aPaths.length) {
1141
- return this.requestSideEffects(sGroupId, aPaths);
1142
- }
1143
- // return undefined;
1144
- };
1145
-
1146
1109
  /**
1147
1110
  * Loads side effects for the given context of this binding.
1148
1111
  *
@@ -1211,20 +1174,24 @@ sap.ui.define([
1211
1174
  */
1212
1175
 
1213
1176
  /**
1214
- * Resolves and clears the refresh promise created by {@link #createRefreshPromise} with the
1215
- * given result if there is one.
1177
+ * If there is a refresh promise created by {@link #createRefreshPromise}, it is resolved with
1178
+ * the given promise and cleared. Does not reject the refresh promise with a canceled error.
1216
1179
  *
1217
- * @param {any} vResult - The result to resolve with
1218
- * @returns {any} vResult for chaining
1180
+ * @param {Promise} oPromise - The promise to resolve with
1181
+ * @returns {Promise} oPromise for chaining
1219
1182
  *
1220
1183
  * @private
1221
1184
  */
1222
- ODataParentBinding.prototype.resolveRefreshPromise = function (vResult) {
1185
+ ODataParentBinding.prototype.resolveRefreshPromise = function (oPromise) {
1223
1186
  if (this.oRefreshPromise) {
1224
- this.oRefreshPromise.$resolve(vResult);
1187
+ this.oRefreshPromise.$resolve(oPromise.catch(function (oError) {
1188
+ if (!oError.canceled) {
1189
+ throw oError;
1190
+ }
1191
+ }));
1225
1192
  this.oRefreshPromise = null;
1226
1193
  }
1227
- return vResult;
1194
+ return oPromise;
1228
1195
  };
1229
1196
 
1230
1197
  /**
@@ -1467,4 +1434,4 @@ sap.ui.define([
1467
1434
  });
1468
1435
 
1469
1436
  return asODataParentBinding;
1470
- }, /* bExport= */ false);
1437
+ }, /* bExport= */ false);
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @mixes sap.ui.model.odata.v4.ODataBinding
58
58
  * @public
59
59
  * @since 1.37.0
60
- * @version 1.91.0
60
+ * @version 1.93.2
61
61
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#hasPendingChanges as #hasPendingChanges
@@ -226,8 +226,9 @@ sap.ui.define([
226
226
  * The new value obtained from the cache, see {@link #onChange}
227
227
  * @returns {sap.ui.base.SyncPromise}
228
228
  * A promise resolving without a defined result when the check is finished, or rejecting in
229
- * case of an error (e.g. thrown by the change event handler of a control), or if the cache is
230
- * no longer the active cache when the response arrives
229
+ * case of an error (e.g. thrown by the change event handler of a control). If the cache is no
230
+ * longer the active cache when the response arrives, that response is silently ignored and
231
+ * the value remains unchanged.
231
232
  *
232
233
  * @private
233
234
  * @see sap.ui.model.PropertyBinding#checkDataState
@@ -496,15 +497,20 @@ sap.ui.define([
496
497
  * @see sap.ui.model.odata.v4.ODataBinding#refreshInternal
497
498
  */
498
499
  ODataPropertyBinding.prototype.refreshInternal = function (_sResourcePathPrefix, sGroupId,
499
- bCheckUpdate/*, bKeepCacheOnError*/) {
500
+ bCheckUpdate, _bKeepCacheOnError) {
501
+ var that = this;
502
+
500
503
  if (this.isRootBindingSuspended()) {
501
504
  this.sResumeChangeReason = ChangeReason.Refresh;
502
505
  return SyncPromise.resolve();
503
506
  }
504
- this.fetchCache(this.oContext, false, /*bKeepQueryOptions*/true);
505
- return bCheckUpdate
506
- ? this.checkUpdateInternal(undefined, ChangeReason.Refresh, sGroupId)
507
- : SyncPromise.resolve();
507
+ return this.oCachePromise.then(function () {
508
+ that.fetchCache(that.oContext, false, /*bKeepQueryOptions*/true);
509
+
510
+ if (bCheckUpdate) {
511
+ return that.checkUpdateInternal(undefined, ChangeReason.Refresh, sGroupId);
512
+ }
513
+ });
508
514
  };
509
515
 
510
516
  /**
@@ -528,7 +534,7 @@ sap.ui.define([
528
534
  /**
529
535
  * Requests information to retrieve a value list for this property.
530
536
  *
531
- * @param {boolean} [bAutoExpandSelect=false]
537
+ * @param {boolean} [bAutoExpandSelect]
532
538
  * The value of the parameter <code>autoExpandSelect</code> for value list models created by
533
539
  * this method. If the value list model is this binding's model, this flag has no effect.
534
540
  * Supported since 1.68.0
@@ -634,6 +640,8 @@ sap.ui.define([
634
640
  *
635
641
  * @param {sap.ui.model.Context} [oContext]
636
642
  * The context which is required as base for a relative path
643
+ * @throws {Error}
644
+ * If the binding's root binding is suspended
637
645
  *
638
646
  * @private
639
647
  */
@@ -641,6 +649,7 @@ sap.ui.define([
641
649
  ODataPropertyBinding.prototype.setContext = function (oContext) {
642
650
  if (this.oContext !== oContext) {
643
651
  if (this.bRelative) {
652
+ this.checkSuspended(true);
644
653
  this.deregisterChange();
645
654
  }
646
655
  this.oContext = oContext;
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  _setDateTimeFormatter : function () {
43
43
  oDateFormatter = DateFormat.getDateInstance({
44
44
  calendarType : CalendarType.Gregorian,
45
- pattern: "yyyy-MM-dd",
45
+ pattern : "yyyy-MM-dd",
46
46
  strictParsing : true,
47
47
  UTC : true
48
48
  });