@openui5/sap.ui.core 1.95.0 → 1.96.3

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 (338) hide show
  1. package/.eslintrc.json +12 -0
  2. package/.reuse/dep5 +10 -5
  3. package/THIRDPARTY.txt +17 -8
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +1 -1
  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 +3 -3
  10. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  11. package/src/sap/base/util/restricted/_castArray.js +1 -1
  12. package/src/sap/base/util/restricted/_compact.js +1 -1
  13. package/src/sap/base/util/restricted/_curry.js +1 -1
  14. package/src/sap/base/util/restricted/_debounce.js +1 -1
  15. package/src/sap/base/util/restricted/_difference.js +1 -1
  16. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  17. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  18. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  21. package/src/sap/base/util/restricted/_flatten.js +1 -1
  22. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  23. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  24. package/src/sap/base/util/restricted/_intersection.js +1 -1
  25. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  26. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  27. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  28. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  29. package/src/sap/base/util/restricted/_isNil.js +1 -1
  30. package/src/sap/base/util/restricted/_max.js +1 -1
  31. package/src/sap/base/util/restricted/_merge.js +1 -1
  32. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  33. package/src/sap/base/util/restricted/_min.js +1 -1
  34. package/src/sap/base/util/restricted/_omit.js +1 -1
  35. package/src/sap/base/util/restricted/_pick.js +1 -1
  36. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  37. package/src/sap/base/util/restricted/_throttle.js +1 -1
  38. package/src/sap/base/util/restricted/_toArray.js +1 -1
  39. package/src/sap/base/util/restricted/_union.js +1 -1
  40. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  41. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  42. package/src/sap/base/util/restricted/_uniq.js +1 -1
  43. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  44. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  45. package/src/sap/base/util/restricted/_without.js +1 -1
  46. package/src/sap/base/util/restricted/_xor.js +1 -1
  47. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  48. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  49. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  50. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  51. package/src/sap/ui/Device.js +3 -3
  52. package/src/sap/ui/Global.js +6 -5
  53. package/src/sap/ui/base/Event.js +1 -1
  54. package/src/sap/ui/base/EventProvider.js +1 -1
  55. package/src/sap/ui/base/Interface.js +1 -1
  56. package/src/sap/ui/base/ManagedObject.js +1 -1
  57. package/src/sap/ui/base/ManagedObjectMetadata.js +2 -2
  58. package/src/sap/ui/base/Metadata.js +1 -1
  59. package/src/sap/ui/base/Object.js +1 -1
  60. package/src/sap/ui/base/ObjectPool.js +1 -1
  61. package/src/sap/ui/core/.library +2 -2
  62. package/src/sap/ui/core/BusyIndicator.js +1 -1
  63. package/src/sap/ui/core/Component.js +2 -3
  64. package/src/sap/ui/core/ComponentContainer.js +9 -3
  65. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  66. package/src/sap/ui/core/ComponentSupport.js +1 -1
  67. package/src/sap/ui/core/Configuration.js +6 -2
  68. package/src/sap/ui/core/Control.js +1 -1
  69. package/src/sap/ui/core/Core.js +64 -6
  70. package/src/sap/ui/core/CustomData.js +1 -1
  71. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  72. package/src/sap/ui/core/Element.js +1 -1
  73. package/src/sap/ui/core/ElementMetadata.js +1 -1
  74. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  75. package/src/sap/ui/core/EventBus.js +1 -1
  76. package/src/sap/ui/core/Fragment.js +2 -2
  77. package/src/sap/ui/core/HTML.js +1 -1
  78. package/src/sap/ui/core/History.js +1 -1
  79. package/src/sap/ui/core/Icon.js +3 -4
  80. package/src/sap/ui/core/IconPool.js +11 -0
  81. package/src/sap/ui/core/IconRenderer.js +4 -4
  82. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  83. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  84. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  85. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  86. package/src/sap/ui/core/InvisibleText.js +1 -1
  87. package/src/sap/ui/core/Item.js +1 -1
  88. package/src/sap/ui/core/LabelEnablement.js +1 -1
  89. package/src/sap/ui/core/LayoutData.js +1 -1
  90. package/src/sap/ui/core/ListItem.js +1 -1
  91. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  92. package/src/sap/ui/core/Locale.js +1 -1
  93. package/src/sap/ui/core/LocaleData.js +1 -1
  94. package/src/sap/ui/core/Manifest.js +1 -1
  95. package/src/sap/ui/core/Message.js +1 -1
  96. package/src/sap/ui/core/Patcher.js +27 -3
  97. package/src/sap/ui/core/Placeholder.js +4 -4
  98. package/src/sap/ui/core/RenderManager.js +20 -4
  99. package/src/sap/ui/core/Renderer.js +1 -1
  100. package/src/sap/ui/core/ResizeHandler.js +1 -1
  101. package/src/sap/ui/core/ScrollBar.js +1 -1
  102. package/src/sap/ui/core/SeparatorItem.js +1 -1
  103. package/src/sap/ui/core/Title.js +1 -1
  104. package/src/sap/ui/core/TooltipBase.js +1 -1
  105. package/src/sap/ui/core/UIArea.js +1 -1
  106. package/src/sap/ui/core/UIComponent.js +3 -4
  107. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  108. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  109. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  110. package/src/sap/ui/core/XMLComposite.js +2 -2
  111. package/src/sap/ui/core/XMLCompositeMetadata.js +2 -2
  112. package/src/sap/ui/core/XMLTemplateProcessor.js +112 -37
  113. package/src/sap/ui/core/_IconRegistry.js +31 -98
  114. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  115. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  116. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  117. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  118. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  119. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  120. package/src/sap/ui/core/format/NumberFormat.js +16 -1
  121. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  122. package/src/sap/ui/core/library.js +3 -3
  123. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  124. package/src/sap/ui/core/message/Message.js +1 -1
  125. package/src/sap/ui/core/message/MessageManager.js +1 -1
  126. package/src/sap/ui/core/message/MessageParser.js +1 -1
  127. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  128. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  129. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  130. package/src/sap/ui/core/mvc/JSView.js +1 -1
  131. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  132. package/src/sap/ui/core/mvc/View.js +1 -1
  133. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  134. package/src/sap/ui/core/mvc/XMLViewRenderer.js +17 -20
  135. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  136. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  137. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  138. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  139. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  140. package/src/sap/ui/core/routing/Router.js +8 -1
  141. package/src/sap/ui/core/routing/async/Target.js +2 -4
  142. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  143. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  144. package/src/sap/ui/core/service/Service.js +1 -1
  145. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  146. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  147. package/src/sap/ui/core/support/Plugin.js +1 -1
  148. package/src/sap/ui/core/support/Support.js +1 -1
  149. package/src/sap/ui/core/support/plugins/ControlTree.js +37 -43
  150. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  151. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  152. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  153. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  154. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  155. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  156. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  157. package/src/sap/ui/core/themes/base/Icon.less +9 -0
  158. package/src/sap/ui/core/themes/base/SAP-icons.css +2 -0
  159. package/src/sap/ui/core/themes/base/SAP-icons.less +10 -0
  160. package/src/sap/ui/core/themes/base/base.less +543 -390
  161. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  162. package/src/sap/ui/core/themes/base/global.less +38 -0
  163. package/src/sap/ui/core/themes/base/library.source.less +1 -2
  164. package/src/sap/ui/core/themes/sap_hcb/global.less +34 -0
  165. package/src/sap/ui/core/theming/Parameters.js +22 -142
  166. package/src/sap/ui/core/theming/ThemeHelper.js +26 -37
  167. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  168. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  169. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  170. package/src/sap/ui/core/tmpl/Template.js +1 -1
  171. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  172. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  173. package/src/sap/ui/core/util/Export.js +1 -1
  174. package/src/sap/ui/core/util/ExportCell.js +1 -1
  175. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  176. package/src/sap/ui/core/util/ExportRow.js +1 -1
  177. package/src/sap/ui/core/util/ExportType.js +1 -1
  178. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  179. package/src/sap/ui/core/util/File.js +1 -1
  180. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  181. package/src/sap/ui/core/util/MockServer.js +1 -1
  182. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  183. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +4 -0
  184. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +36 -28
  185. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +6 -3
  186. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  187. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  188. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  189. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  190. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  191. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  192. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  193. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  194. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  195. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  196. package/src/sap/ui/debug/ControlTree.js +1 -1
  197. package/src/sap/ui/debug/DebugEnv.js +1 -1
  198. package/src/sap/ui/debug/Highlighter.js +8 -2
  199. package/src/sap/ui/debug/PropertyList.js +1 -1
  200. package/src/sap/ui/model/Binding.js +174 -118
  201. package/src/sap/ui/model/ClientContextBinding.js +1 -1
  202. package/src/sap/ui/model/ClientListBinding.js +1 -3
  203. package/src/sap/ui/model/ClientModel.js +4 -4
  204. package/src/sap/ui/model/ClientPropertyBinding.js +1 -1
  205. package/src/sap/ui/model/ClientTreeBinding.js +1 -1
  206. package/src/sap/ui/model/ClientTreeBindingAdapter.js +28 -23
  207. package/src/sap/ui/model/CompositeBinding.js +98 -77
  208. package/src/sap/ui/model/CompositeDataState.js +2 -2
  209. package/src/sap/ui/model/CompositeType.js +2 -2
  210. package/src/sap/ui/model/Context.js +4 -2
  211. package/src/sap/ui/model/ContextBinding.js +6 -14
  212. package/src/sap/ui/model/DataState.js +2 -2
  213. package/src/sap/ui/model/Filter.js +255 -53
  214. package/src/sap/ui/model/FilterOperator.js +1 -1
  215. package/src/sap/ui/model/FilterProcessor.js +27 -17
  216. package/src/sap/ui/model/FilterType.js +1 -1
  217. package/src/sap/ui/model/ListBinding.js +180 -117
  218. package/src/sap/ui/model/MetaModel.js +4 -9
  219. package/src/sap/ui/model/Model.js +345 -294
  220. package/src/sap/ui/model/PropertyBinding.js +92 -58
  221. package/src/sap/ui/model/SelectionModel.js +2 -2
  222. package/src/sap/ui/model/SimpleType.js +2 -2
  223. package/src/sap/ui/model/Sorter.js +1 -1
  224. package/src/sap/ui/model/SorterProcessor.js +1 -1
  225. package/src/sap/ui/model/StaticBinding.js +1 -1
  226. package/src/sap/ui/model/TreeAutoExpandMode.js +2 -2
  227. package/src/sap/ui/model/TreeBinding.js +1 -1
  228. package/src/sap/ui/model/TreeBindingAdapter.js +251 -100
  229. package/src/sap/ui/model/TreeBindingCompatibilityAdapter.js +16 -9
  230. package/src/sap/ui/model/TreeBindingUtils.js +1 -0
  231. package/src/sap/ui/model/Type.js +1 -1
  232. package/src/sap/ui/model/analytics/AnalyticalBinding.js +41 -29
  233. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +1 -1
  234. package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +1 -1
  235. package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
  236. package/src/sap/ui/model/analytics/ODataModelAdapter.js +1 -1
  237. package/src/sap/ui/model/analytics/odata4analytics.js +3 -2
  238. package/src/sap/ui/model/json/JSONListBinding.js +8 -5
  239. package/src/sap/ui/model/json/JSONModel.js +21 -14
  240. package/src/sap/ui/model/json/JSONPropertyBinding.js +4 -3
  241. package/src/sap/ui/model/json/JSONTreeBinding.js +1 -1
  242. package/src/sap/ui/model/message/MessageListBinding.js +6 -3
  243. package/src/sap/ui/model/message/MessageModel.js +20 -14
  244. package/src/sap/ui/model/message/MessagePropertyBinding.js +2 -2
  245. package/src/sap/ui/model/odata/AnnotationHelper.js +1 -1
  246. package/src/sap/ui/model/odata/AnnotationParser.js +1 -1
  247. package/src/sap/ui/model/odata/CountMode.js +1 -1
  248. package/src/sap/ui/model/odata/Filter.js +1 -1
  249. package/src/sap/ui/model/odata/ODataAnnotations.js +2 -2
  250. package/src/sap/ui/model/odata/ODataContextBinding.js +1 -1
  251. package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
  252. package/src/sap/ui/model/odata/ODataMessageParser.js +2 -2
  253. package/src/sap/ui/model/odata/ODataMetaModel.js +2 -2
  254. package/src/sap/ui/model/odata/ODataMetadata.js +2 -2
  255. package/src/sap/ui/model/odata/ODataModel.js +2 -2
  256. package/src/sap/ui/model/odata/ODataPropertyBinding.js +1 -1
  257. package/src/sap/ui/model/odata/ODataTreeBinding.js +65 -33
  258. package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +1 -1
  259. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +2 -2
  260. package/src/sap/ui/model/odata/ODataUtils.js +1 -1
  261. package/src/sap/ui/model/odata/OperationMode.js +1 -1
  262. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +1 -1
  263. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  264. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  265. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  266. package/src/sap/ui/model/odata/type/Date.js +1 -1
  267. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  268. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  269. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  270. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  271. package/src/sap/ui/model/odata/type/Double.js +1 -1
  272. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  273. package/src/sap/ui/model/odata/type/Int.js +1 -1
  274. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  275. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  276. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  277. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  278. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  279. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  280. package/src/sap/ui/model/odata/type/Single.js +1 -1
  281. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  282. package/src/sap/ui/model/odata/type/String.js +1 -1
  283. package/src/sap/ui/model/odata/type/Time.js +1 -1
  284. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  285. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  286. package/src/sap/ui/model/odata/v2/Context.js +59 -9
  287. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -2
  288. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +1 -1
  289. package/src/sap/ui/model/odata/v2/ODataListBinding.js +212 -45
  290. package/src/sap/ui/model/odata/v2/ODataModel.js +139 -59
  291. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +2 -2
  292. package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +129 -0
  293. package/src/sap/ui/model/odata/v4/Context.js +1 -1
  294. package/src/sap/ui/model/odata/v4/ODataBinding.js +2 -3
  295. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +37 -26
  296. package/src/sap/ui/model/odata/v4/ODataListBinding.js +22 -12
  297. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +30 -20
  298. package/src/sap/ui/model/odata/v4/ODataModel.js +4 -4
  299. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +37 -28
  300. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  301. package/src/sap/ui/model/odata/v4/lib/_Cache.js +3 -5
  302. package/src/sap/ui/model/odata/v4/lib/_Helper.js +2 -2
  303. package/src/sap/ui/model/resource/ResourceModel.js +2 -1
  304. package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
  305. package/src/sap/ui/model/type/Boolean.js +2 -2
  306. package/src/sap/ui/model/type/Currency.js +2 -2
  307. package/src/sap/ui/model/type/Date.js +9 -3
  308. package/src/sap/ui/model/type/DateInterval.js +4 -2
  309. package/src/sap/ui/model/type/DateTime.js +2 -2
  310. package/src/sap/ui/model/type/DateTimeInterval.js +2 -2
  311. package/src/sap/ui/model/type/FileSize.js +4 -2
  312. package/src/sap/ui/model/type/Float.js +4 -2
  313. package/src/sap/ui/model/type/Integer.js +4 -2
  314. package/src/sap/ui/model/type/String.js +2 -2
  315. package/src/sap/ui/model/type/Time.js +2 -2
  316. package/src/sap/ui/model/type/TimeInterval.js +2 -2
  317. package/src/sap/ui/model/type/Unit.js +14 -7
  318. package/src/sap/ui/model/xml/XMLListBinding.js +15 -9
  319. package/src/sap/ui/model/xml/XMLModel.js +67 -40
  320. package/src/sap/ui/model/xml/XMLPropertyBinding.js +4 -4
  321. package/src/sap/ui/model/xml/XMLTreeBinding.js +5 -4
  322. package/src/sap/ui/performance/trace/Interaction.js +1 -1
  323. package/src/sap/ui/qunit/QUnitUtils.js +3 -2
  324. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  325. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +9 -11
  326. package/src/sap/ui/test/matchers/I18NText.js +2 -2
  327. package/src/sap/ui/test/opaQunit.js +1 -1
  328. package/src/sap/ui/test/starter/createSuite.js +2 -1
  329. package/src/sap/ui/thirdparty/IPv6.js +2 -2
  330. package/src/sap/ui/thirdparty/SecondLevelDomains.js +2 -2
  331. package/src/sap/ui/thirdparty/URI.js +14 -5
  332. package/src/sap/ui/thirdparty/URITemplate.js +2 -2
  333. package/src/sap/ui/thirdparty/jquery.js +9 -1
  334. package/src/sap/ui/thirdparty/qunit-2.js +1 -1
  335. package/src/sap/ui/thirdparty/qunit.js +1 -1
  336. package/src/sap/ui/util/Mobile.js +2 -20
  337. package/src/sap/ui/util/Storage.js +1 -1
  338. package/ui5.yaml +5 -2
@@ -106,7 +106,7 @@ sap.ui.define([
106
106
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
107
107
  * @public
108
108
  * @since 1.37.0
109
- * @version 1.95.0
109
+ * @version 1.96.3
110
110
  *
111
111
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
112
112
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
@@ -296,7 +296,7 @@ sap.ui.define([
296
296
  return that.refreshDependentBindings("", oGroupLock.getGroupId(), true);
297
297
  }
298
298
 
299
- oPromise = oMetaModel.fetchObject(oMetaModel.getMetaPath(sResolvedPath) + "/@$ui5.overload")
299
+ oPromise = oMetaModel.fetchObject(_Helper.getMetaPath(sResolvedPath) + "/@$ui5.overload")
300
300
  .then(function (aOperationMetadata) {
301
301
  var fnGetEntity, iIndex, sPath;
302
302
 
@@ -403,7 +403,9 @@ sap.ui.define([
403
403
  this.mParameters = mParameters; // store mParameters at binding after validation
404
404
 
405
405
  if (this.isRootBindingSuspended()) {
406
- this.sResumeChangeReason = ChangeReason.Change;
406
+ if (!this.oOperation) {
407
+ this.sResumeChangeReason = ChangeReason.Change;
408
+ }
407
409
  } else if (!this.oOperation) {
408
410
  this.fetchCache(this.oContext);
409
411
  if (sChangeReason) {
@@ -601,7 +603,7 @@ sap.ui.define([
601
603
  oCache,
602
604
  vEntity = fnGetEntity,
603
605
  oModel = this.oModel,
604
- sMetaPath = oModel.getMetaModel().getMetaPath(sPath) + "/@$ui5.overload/0/$ReturnType",
606
+ sMetaPath = _Helper.getMetaPath(sPath) + "/@$ui5.overload/0/$ReturnType",
605
607
  sOriginalResourcePath = sPath.slice(1),
606
608
  oRequestor = oModel.oRequestor,
607
609
  that = this;
@@ -714,7 +716,6 @@ sap.ui.define([
714
716
  this.oReturnValueContext = undefined;
715
717
  }
716
718
  this.oModel.bindingDestroyed(this);
717
- this.mCacheByResourcePath = undefined;
718
719
  this.oOperation = undefined;
719
720
  this.mParameters = undefined;
720
721
  this.mQueryOptions = undefined;
@@ -778,7 +779,7 @@ sap.ui.define([
778
779
  * @see sap.ui.model.odata.v4.ODataParentBinding#doSuspend
779
780
  */
780
781
  ODataContextBinding.prototype.doSuspend = function () {
781
- if (this.bInitial) {
782
+ if (this.bInitial && !this.oOperation) {
782
783
  // if the binding is still initial, it must fire an event in resume
783
784
  this.sResumeChangeReason = ChangeReason.Change;
784
785
  }
@@ -1031,7 +1032,9 @@ sap.ui.define([
1031
1032
  mQueryOptions = Object.assign({}, mQueryOptions);
1032
1033
  // keep $select before $expand
1033
1034
  if ("$select" in mInheritableQueryOptions) {
1034
- mQueryOptions.$select = mInheritableQueryOptions.$select;
1035
+ // avoid that this.mQueryOptions.$select is modified
1036
+ mQueryOptions.$select = mQueryOptions.$select && mQueryOptions.$select.slice();
1037
+ _Helper.addToSelect(mQueryOptions, mInheritableQueryOptions.$select);
1035
1038
  }
1036
1039
  if ("$expand" in mInheritableQueryOptions) {
1037
1040
  mQueryOptions.$expand = mInheritableQueryOptions.$expand;
@@ -1099,17 +1102,17 @@ sap.ui.define([
1099
1102
  * @private
1100
1103
  */
1101
1104
  ODataContextBinding.prototype.hasReturnValueContext = function (oMetadata) {
1102
- var oMetaModel = this.oModel.getMetaModel(),
1103
- aMetaSegments;
1105
+ var aMetaSegments;
1104
1106
 
1105
1107
  if (!this.isReturnValueLikeBindingParameter(oMetadata)) {
1106
1108
  return false;
1107
1109
  }
1108
1110
 
1109
- aMetaSegments = oMetaModel.getMetaPath(this.getResolvedPath()).split("/");
1111
+ aMetaSegments = _Helper.getMetaPath(this.getResolvedPath()).split("/");
1110
1112
 
1113
+ // case 4b
1111
1114
  return aMetaSegments.length === 3
1112
- && oMetaModel.getObject("/" + aMetaSegments[1]).$kind === "EntitySet"; // case 4b
1115
+ && this.oModel.getMetaModel().getObject("/" + aMetaSegments[1]).$kind === "EntitySet";
1113
1116
  };
1114
1117
 
1115
1118
  /**
@@ -1249,7 +1252,7 @@ sap.ui.define([
1249
1252
  if (bKeepCacheOnError && oPromise) {
1250
1253
  oPromise = oPromise.catch(function (oError) {
1251
1254
  return that.fetchResourcePath(that.oContext).then(function (sResourcePath) {
1252
- if (!that.bRelative || oCache.$resourcePath === sResourcePath) {
1255
+ if (!that.bRelative || oCache.getResourcePath() === sResourcePath) {
1253
1256
  that.oCache = oCache;
1254
1257
  that.oCachePromise = SyncPromise.resolve(oCache);
1255
1258
  oCache.setActive(true);
@@ -1394,23 +1397,31 @@ sap.ui.define([
1394
1397
  * @see sap.ui.model.odata.v4.ODataParentBinding#resumeInternal
1395
1398
  */
1396
1399
  ODataContextBinding.prototype.resumeInternal = function (bCheckUpdate, bParentHasChanges) {
1397
- var sResumeChangeReason = this.sResumeChangeReason;
1398
-
1399
- this.sResumeChangeReason = undefined;
1400
+ var sResumeChangeReason = this.sResumeChangeReason,
1401
+ that = this;
1400
1402
 
1401
- if (!this.oOperation) {
1402
- if (bParentHasChanges || sResumeChangeReason) {
1403
- this.mAggregatedQueryOptions = {};
1404
- this.bAggregatedQueryOptionsInitial = true;
1405
- this.removeCachesAndMessages("");
1406
- this.fetchCache(this.oContext);
1407
- }
1408
- this.getDependentBindings().forEach(function (oDependentBinding) {
1403
+ function resumeDependents() {
1404
+ that.getDependentBindings().forEach(function (oDependentBinding) {
1409
1405
  oDependentBinding.resumeInternal(bCheckUpdate, !!sResumeChangeReason);
1410
1406
  });
1411
- if (sResumeChangeReason) {
1412
- this._fireChange({reason : sResumeChangeReason});
1413
- }
1407
+ }
1408
+
1409
+ this.sResumeChangeReason = undefined;
1410
+
1411
+ if (this.oOperation) {
1412
+ resumeDependents();
1413
+ return;
1414
+ }
1415
+
1416
+ if (bParentHasChanges || sResumeChangeReason) {
1417
+ this.mAggregatedQueryOptions = {};
1418
+ this.bAggregatedQueryOptionsInitial = true;
1419
+ this.removeCachesAndMessages("");
1420
+ this.fetchCache(this.oContext);
1421
+ }
1422
+ resumeDependents();
1423
+ if (sResumeChangeReason) {
1424
+ this._fireChange({reason : sResumeChangeReason});
1414
1425
  }
1415
1426
  };
1416
1427
 
@@ -76,7 +76,7 @@ sap.ui.define([
76
76
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
77
77
  * @public
78
78
  * @since 1.37.0
79
- * @version 1.95.0
79
+ * @version 1.96.3
80
80
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
81
81
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
82
82
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -1511,6 +1511,22 @@ sap.ui.define([
1511
1511
  * <code>false</code>. This property has to be set on each filter, it is not inherited from a
1512
1512
  * multi-filter.
1513
1513
  *
1514
+ * <h4>Application and Control Filters</h4>
1515
+ * Each list binding maintains two separate lists of filters, one for filters defined by the
1516
+ * control that owns the binding, and another list for filters that an application can define in
1517
+ * addition. When executing the filter operation, both sets of filters are combined.
1518
+ *
1519
+ * By using the <code>sFilterType</code> parameter of the <code>filter</code> method, the
1520
+ * caller can control which set of filters is modified.
1521
+ *
1522
+ * <h4>Auto-Grouping of Filters</h4>
1523
+ * Filters are first grouped according to their binding path. All filters belonging to the same
1524
+ * path are ORed, and after that the results of all paths are ANDed. Usually this means that all
1525
+ * filters applied to the same property are ORed, while filters on different properties are
1526
+ * ANDed.
1527
+ * Please use either the automatic grouping of filters (where applicable) or explicit
1528
+ * AND/OR filters, as a mixture of both is not supported.
1529
+ *
1514
1530
  * @param {sap.ui.model.Filter|sap.ui.model.Filter[]} [vFilters]
1515
1531
  * The dynamic filters to be used; replaces the dynamic filters given in
1516
1532
  * {@link sap.ui.model.odata.v4.ODataModel#bindList}.
@@ -2351,7 +2367,7 @@ sap.ui.define([
2351
2367
  throw oError;
2352
2368
  }
2353
2369
  return that.fetchResourcePath(that.oContext).then(function (sResourcePath) {
2354
- if (!that.bRelative || oCache.$resourcePath === sResourcePath) {
2370
+ if (!that.bRelative || oCache.getResourcePath() === sResourcePath) {
2355
2371
  that.oCache = oCache;
2356
2372
  that.oCachePromise = SyncPromise.resolve(oCache);
2357
2373
  that.iCreatedContexts = iCreatedContexts;
@@ -2626,7 +2642,7 @@ sap.ui.define([
2626
2642
  return Promise.resolve(null);
2627
2643
  }
2628
2644
 
2629
- sMetaPath = oMetaModel.getMetaPath(sResolvedPath);
2645
+ sMetaPath = _Helper.getMetaPath(sResolvedPath);
2630
2646
  return oMetaModel.requestObject(sMetaPath + "/").then(function (oEntityType) {
2631
2647
  var aFilters,
2632
2648
  mPredicates = {};
@@ -2661,8 +2677,7 @@ sap.ui.define([
2661
2677
  * @see sap.ui.model.odata.v4.ODataParentBinding#requestSideEffects
2662
2678
  */
2663
2679
  ODataListBinding.prototype.requestSideEffects = function (sGroupId, aPaths, oContext) {
2664
- var bAllContextsTransient,
2665
- aContexts,
2680
+ var aContexts,
2666
2681
  bMissingPredicate,
2667
2682
  oModel = this.oModel,
2668
2683
  // Hash set of collection-valued navigation property meta paths (relative to the cache's
@@ -2743,13 +2758,8 @@ sap.ui.define([
2743
2758
  if (bSingle) {
2744
2759
  return this.refreshSingle(oContext, this.lockGroup(sGroupId), false);
2745
2760
  }
2746
- if (this.aContexts.length) {
2747
- bAllContextsTransient = this.aContexts.every(function (oContext) {
2748
- return oContext.isTransient();
2749
- });
2750
- if (bAllContextsTransient) {
2751
- return SyncPromise.resolve();
2752
- }
2761
+ if (this.iCurrentEnd === 0) {
2762
+ return SyncPromise.resolve();
2753
2763
  }
2754
2764
  return this.refreshInternal("", sGroupId, false, true);
2755
2765
  };
@@ -658,7 +658,7 @@ sap.ui.define([
658
658
  * @hideconstructor
659
659
  * @public
660
660
  * @since 1.37.0
661
- * @version 1.95.0
661
+ * @version 1.96.3
662
662
  */
663
663
  var ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
664
664
  /*
@@ -1663,7 +1663,7 @@ sap.ui.define([
1663
1663
 
1664
1664
  // First fetch the complete metapath to ensure that everything is in mScope
1665
1665
  // This also ensures that the metadata is valid
1666
- return this.fetchObject(this.getMetaPath(sResolvedPath)).then(function () {
1666
+ return this.fetchObject(_Helper.getMetaPath(sResolvedPath)).then(function () {
1667
1667
  // Then fetch mScope
1668
1668
  return that.fetchEntityContainer();
1669
1669
  }).then(function (mScope) {
@@ -2081,7 +2081,8 @@ sap.ui.define([
2081
2081
  && aSegments0[i + 1] === "$Parameter") {
2082
2082
  // Filter via the binding parameter
2083
2083
  aOverloadMetadata = that.getObject(
2084
- that.getMetaPath(aSegments0.slice(0, i + 1).join("/") + "/@$ui5.overload")
2084
+ _Helper.getMetaPath(aSegments0.slice(0, i + 1).join("/")
2085
+ + "/@$ui5.overload")
2085
2086
  );
2086
2087
  // Note: This must be a bound operation with a binding parameter; otherwise it
2087
2088
  // would be in the first segment and the loop would not touch it due to
@@ -2100,7 +2101,7 @@ sap.ui.define([
2100
2101
  return j < iBasePathLength || sSegment[0] === "#" || sSegment[0] === "@"
2101
2102
  || rNumber.test(sSegment) || sSegment === "$Parameter"
2102
2103
  ? {} // simply an object w/o $Partner and $isCollection
2103
- : that.getObject(that.getMetaPath(aSegments.slice(0, j + 1).join("/"))) || {};
2104
+ : that.getObject(_Helper.getMetaPath(aSegments.slice(0, j + 1).join("/"))) || {};
2104
2105
  });
2105
2106
  mPaths[sPath] = true;
2106
2107
  if (!(bNoReduceBeforeCollection
@@ -2229,7 +2230,7 @@ sap.ui.define([
2229
2230
  * @since 1.37.0
2230
2231
  */
2231
2232
  ODataMetaModel.prototype.getMetaContext = function (sPath) {
2232
- return new BaseContext(this, this.getMetaPath(sPath));
2233
+ return new BaseContext(this, _Helper.getMetaPath(sPath));
2233
2234
  };
2234
2235
 
2235
2236
  /**
@@ -3085,7 +3086,8 @@ sap.ui.define([
3085
3086
  * instead, see {@link sap.ui.model.odata.v4.ODataModel#bindList}.
3086
3087
  *
3087
3088
  * For fixed values, only one mapping is expected and the qualifier is ignored. The mapping
3088
- * is available with key "".
3089
+ * is available with key "" and has an additional property "$qualifier" which is the original
3090
+ * qualifier (useful in case of "ValueListRelevantQualifiers" annotation).
3089
3091
  *
3090
3092
  * The promise is rejected with an error if there is no value list information available
3091
3093
  * for the given property path. Use {@link #getValueListType} to determine if value list
@@ -3113,7 +3115,7 @@ sap.ui.define([
3113
3115
  */
3114
3116
  ODataMetaModel.prototype.requestValueListInfo = function (sPropertyPath, bAutoExpandSelect,
3115
3117
  oContext) {
3116
- var sPropertyMetaPath = this.getMetaPath(sPropertyPath),
3118
+ var sPropertyMetaPath = _Helper.getMetaPath(sPropertyPath),
3117
3119
  sParentMetaPath = sPropertyMetaPath.slice(0, sPropertyMetaPath.lastIndexOf("/"))
3118
3120
  .replace("/$Parameter", ""),
3119
3121
  sQualifiedName = sParentMetaPath.slice(sParentMetaPath.lastIndexOf("/") + 1),
@@ -3213,7 +3215,7 @@ sap.ui.define([
3213
3215
  });
3214
3216
  });
3215
3217
  })).then(function () {
3216
- var aQualifiers;
3218
+ var aRelevantQualifiers = mAnnotationByTerm[sValueListRelevantQualifiers];
3217
3219
 
3218
3220
  // add all mappings in the data service (or local annotation files)
3219
3221
  Object.keys(mAnnotationByTerm).filter(function (sTerm) {
@@ -3222,28 +3224,36 @@ sap.ui.define([
3222
3224
  addMapping(mAnnotationByTerm[sTerm], getValueListQualifier(sTerm), that.sUrl,
3223
3225
  that.oModel);
3224
3226
  });
3225
- aQualifiers = Object.keys(oValueListInfo);
3226
3227
 
3227
3228
  // Each reference must have contributed at least one qualifier. So if oValueListInfo
3228
3229
  // is empty, there cannot have been a reference.
3229
- if (!aQualifiers.length) {
3230
+ if (isEmptyObject(oValueListInfo)) {
3230
3231
  throw new Error("No annotation '" + sValueListReferences.slice(1) + "' for " +
3231
3232
  sPropertyPath);
3232
3233
  }
3234
+
3235
+ return aRelevantQualifiers && oContext && oContext.getBinding
3236
+ ? that.filterValueListRelevantQualifiers(oValueListInfo, aRelevantQualifiers,
3237
+ sPropertyMetaPath + sValueListRelevantQualifiers, oContext)
3238
+ : oValueListInfo;
3239
+ }).then(function (mValueListByRelevantQualifier) {
3240
+ var aQualifiers, mValueListMapping;
3241
+
3233
3242
  if (bFixedValues) {
3234
- // With fixed values, only one mapping may exist. Return it for qualifier "".
3235
- if (aQualifiers.length > 1) {
3243
+ aQualifiers = Object.keys(mValueListByRelevantQualifier);
3244
+ // With fixed values, only one mapping should exist. Return it for qualifier "".
3245
+ if (aQualifiers.length !== 1) {
3236
3246
  throw new Error("Annotation '" + sValueListWithFixedValues.slice(1)
3237
- + "' but multiple '" + sValueList.slice(1)
3247
+ + "' but not exactly one '" + sValueList.slice(1)
3238
3248
  + "' for property " + sPropertyPath);
3239
3249
  }
3240
- return {"" : oValueListInfo[aQualifiers[0]]};
3250
+ mValueListMapping = mValueListByRelevantQualifier[aQualifiers[0]];
3251
+ mValueListMapping.$qualifier = aQualifiers[0];
3252
+
3253
+ return {"" : mValueListMapping};
3241
3254
  }
3242
- aQualifiers = mAnnotationByTerm[sValueListRelevantQualifiers];
3243
- return aQualifiers && oContext && oContext.getBinding
3244
- ? that.filterValueListRelevantQualifiers(oValueListInfo, aQualifiers,
3245
- sPropertyMetaPath + sValueListRelevantQualifiers, oContext)
3246
- : oValueListInfo;
3255
+
3256
+ return mValueListByRelevantQualifier;
3247
3257
  });
3248
3258
  });
3249
3259
  };
@@ -3443,4 +3453,4 @@ sap.ui.define([
3443
3453
  };
3444
3454
 
3445
3455
  return ODataMetaModel;
3446
- });
3456
+ });
@@ -210,7 +210,7 @@ sap.ui.define([
210
210
  * @extends sap.ui.model.Model
211
211
  * @public
212
212
  * @since 1.37.0
213
- * @version 1.95.0
213
+ * @version 1.96.3
214
214
  */
215
215
  var ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
216
216
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */
@@ -540,8 +540,8 @@ sap.ui.define([
540
540
  * @param {boolean} [mParameters.$$inheritExpandSelect]
541
541
  * For operation bindings only: Whether $expand and $select from the parent binding are used
542
542
  * in the request sent on {@link #execute}. If set to <code>true</code>, the binding must not
543
- * set the $expand or $select parameter itself, the operation must be bound, and the return
544
- * value and the binding parameter must belong to the same entity set.
543
+ * set the $expand itself, the operation must be bound, and the return value and the binding
544
+ * parameter must belong to the same entity set.
545
545
  * @param {boolean} [mParameters.$$ownRequest]
546
546
  * Whether the binding always uses an own service request to read its data; only the value
547
547
  * <code>true</code> is allowed.
@@ -561,7 +561,7 @@ sap.ui.define([
561
561
  * @throws {Error}
562
562
  * If disallowed binding parameters are provided, for example if the binding parameter
563
563
  * $$inheritExpandSelect is set to <code>true</code> and the binding is no operation binding
564
- * or the binding has one of the parameters $expand or $select.
564
+ * or the binding has the parameter $expand.
565
565
  *
566
566
  * @public
567
567
  * @see sap.ui.model.Model#bindContext
@@ -434,7 +434,7 @@ sap.ui.define([
434
434
  return this.oCachePromise.then(function (oCache) {
435
435
  if (oCache && that.bRelative) {
436
436
  return that.fetchResourcePath(that.oContext).then(function (sResourcePath) {
437
- if (oCache.$resourcePath === sResourcePath) {
437
+ if (oCache.getResourcePath() === sResourcePath) {
438
438
  return updateDependents();
439
439
  }
440
440
  return that.refreshInternal(""); // entity of context changed
@@ -481,10 +481,10 @@ sap.ui.define([
481
481
  return oCache.create(oUpdateGroupLock, vCreatePath, sPathInCache,
482
482
  sTransientPredicate, oInitialData, fnErrorCallback, fnSubmitCallback
483
483
  ).then(function (oCreatedEntity) {
484
- if (oCache.$resourcePath) {
484
+ if (that.mCacheByResourcePath) {
485
485
  // Ensure that cache containing non-transient created entity is recreated
486
486
  // when the parent binding changes to another row and back again.
487
- delete that.mCacheByResourcePath[oCache.$resourcePath];
487
+ delete that.mCacheByResourcePath[oCache.getResourcePath()];
488
488
  }
489
489
  return oCreatedEntity;
490
490
  });
@@ -653,17 +653,16 @@ sap.ui.define([
653
653
  // getBaseForPathReduction must be called early, because the (virtual) parent context may be
654
654
  // lost again when the path is needed
655
655
  var sBaseForPathReduction = this.getBaseForPathReduction(),
656
- sBaseMetaPath,
656
+ sBaseMetaPath = _Helper.getMetaPath(oContext.getPath()),
657
657
  bCacheImmutable,
658
658
  oCanUseCachePromise,
659
- sFullMetaPath,
659
+ // whether this binding is an operation or depends on one
660
+ bDependsOnOperation = oContext.getPath().includes("(...)"),
660
661
  iIndex = oContext.getIndex(),
661
662
  bIsAdvertisement = sChildPath[0] === "#",
662
663
  oMetaModel = this.oModel.getMetaModel(),
663
664
  aPromises,
664
665
  sResolvedChildPath = this.oModel.resolve(sChildPath, oContext),
665
- // whether this binding is an operation or depends on one
666
- bDependsOnOperation = oContext.getPath().includes("(...)"),
667
666
  that = this;
668
667
 
669
668
  /*
@@ -677,12 +676,27 @@ sap.ui.define([
677
676
  if (bIsAdvertisement) {
678
677
  // Ensure entity type metadata is loaded even for advertisement so that sync access
679
678
  // to key properties is possible
680
- return oMetaModel.fetchObject(sFullMetaPath.slice(0,
681
- sFullMetaPath.lastIndexOf("/") + 1));
679
+ return oMetaModel.fetchObject(sBaseMetaPath + "/");
682
680
  }
683
681
 
684
682
  return _Helper.fetchPropertyAndType(that.oModel.oInterface.fetchMetadata,
685
- sFullMetaPath);
683
+ getStrippedMetaPath(sResolvedChildPath));
684
+ }
685
+
686
+ /*
687
+ * Returns the meta path corresponding to the given path, with its annotation part stripped
688
+ * off.
689
+ *
690
+ * @param {string} sPath - A path
691
+ * @returns {string} The meta path with its annotation part stripped off
692
+ */
693
+ function getStrippedMetaPath(sPath) {
694
+ var iIndex;
695
+
696
+ sPath = _Helper.getMetaPath(sPath);
697
+ iIndex = sPath.indexOf("@"); // Note: sPath[0] !== "@"
698
+
699
+ return iIndex > 0 ? sPath.slice(0, iIndex) : sPath;
686
700
  }
687
701
 
688
702
  if (bDependsOnOperation && !sResolvedChildPath.includes("/$Parameter/")
@@ -701,8 +715,6 @@ sap.ui.define([
701
715
  || oContext.isKeepAlive() // kept-alive contexts have no index when not in aContexts
702
716
  || this.oCache === null
703
717
  || this.oCache && this.oCache.hasSentRequest();
704
- sBaseMetaPath = oMetaModel.getMetaPath(oContext.getPath());
705
- sFullMetaPath = oMetaModel.getMetaPath(sResolvedChildPath);
706
718
  aPromises = [
707
719
  this.doFetchQueryOptions(this.oContext),
708
720
  // After access to complete meta path of property, the metadata of all prefix paths
@@ -712,11 +724,11 @@ sap.ui.define([
712
724
  vChildQueryOptions
713
725
  ];
714
726
  oCanUseCachePromise = SyncPromise.all(aPromises).then(function (aResult) {
715
- var sChildMetaPath,
716
- mChildQueryOptions = aResult[2],
727
+ var mChildQueryOptions = aResult[2],
717
728
  mWrappedChildQueryOptions,
718
729
  mLocalQueryOptions = aResult[0],
719
730
  oProperty = aResult[1],
731
+ sReducedChildMetaPath,
720
732
  sReducedPath;
721
733
 
722
734
  if (Array.isArray(oProperty)) { // Arrays are only used for functions and actions
@@ -725,15 +737,10 @@ sap.ui.define([
725
737
  }
726
738
 
727
739
  sReducedPath = oMetaModel.getReducedPath(sResolvedChildPath, sBaseForPathReduction);
728
-
729
- if (sChildPath === "$count" || sChildPath.endsWith("/$count")
730
- || sChildPath[0] === "@") {
731
- return sReducedPath;
732
- }
733
-
734
- sChildMetaPath = _Helper.getRelativePath(_Helper.getMetaPath(sReducedPath),
740
+ sReducedChildMetaPath = _Helper.getRelativePath(getStrippedMetaPath(sReducedPath),
735
741
  sBaseMetaPath);
736
- if (sChildMetaPath === undefined) {
742
+
743
+ if (sReducedChildMetaPath === undefined) {
737
744
  // the child's data does not fit into this bindings's cache, try the parent
738
745
  that.bHasPathReductionToParent = true;
739
746
  return that.oContext.getBinding().fetchIfChildCanUseCache(that.oContext,
@@ -741,7 +748,8 @@ sap.ui.define([
741
748
  vChildQueryOptions);
742
749
  }
743
750
 
744
- if (bDependsOnOperation) {
751
+ if (bDependsOnOperation || sReducedChildMetaPath === "$count"
752
+ || sReducedChildMetaPath.endsWith("/$count")) {
745
753
  return sReducedPath;
746
754
  }
747
755
 
@@ -751,17 +759,18 @@ sap.ui.define([
751
759
  that.bAggregatedQueryOptionsInitial = false;
752
760
  }
753
761
  if (bIsAdvertisement) {
754
- mWrappedChildQueryOptions = {"$select" : [sChildMetaPath.slice(1)]};
762
+ mWrappedChildQueryOptions = {"$select" : [sReducedChildMetaPath.slice(1)]};
755
763
  return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
756
764
  bCacheImmutable)
757
765
  ? sReducedPath
758
766
  : undefined;
759
767
  }
760
- if (sChildMetaPath === ""
768
+ if (sReducedChildMetaPath === ""
761
769
  || oProperty
762
770
  && (oProperty.$kind === "Property" || oProperty.$kind === "NavigationProperty")) {
763
771
  mWrappedChildQueryOptions = _Helper.wrapChildQueryOptions(sBaseMetaPath,
764
- sChildMetaPath, mChildQueryOptions, that.oModel.oInterface.fetchMetadata);
772
+ sReducedChildMetaPath, mChildQueryOptions,
773
+ that.oModel.oInterface.fetchMetadata);
765
774
  if (mWrappedChildQueryOptions) {
766
775
  return that.aggregateQueryOptions(mWrappedChildQueryOptions, sBaseMetaPath,
767
776
  bCacheImmutable)
@@ -770,14 +779,14 @@ sap.ui.define([
770
779
  }
771
780
  return undefined;
772
781
  }
773
- if (sChildMetaPath === "value") { // symbolic name for operation result
782
+ if (sReducedChildMetaPath === "value") { // symbolic name for operation result
774
783
  return that.aggregateQueryOptions(mChildQueryOptions, sBaseMetaPath,
775
784
  bCacheImmutable)
776
785
  ? sReducedPath
777
786
  : undefined;
778
787
  }
779
788
  Log.error("Failed to enhance query options for auto-$expand/$select as the path '"
780
- + sFullMetaPath + "' does not point to a property",
789
+ + sResolvedChildPath + "' does not point to a property",
781
790
  JSON.stringify(oProperty), sClassName);
782
791
  return undefined;
783
792
  }).then(function (sReducedPath) {
@@ -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.95.0
60
+ * @version 1.96.3
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#getUpdateGroupId as #getUpdateGroupId
@@ -599,7 +599,7 @@ sap.ui.define([
599
599
  vValue = vValue[vIndex];
600
600
  }
601
601
  // missing advertisement or annotation is not an error
602
- return vValue === undefined && sSegment[0] !== "#" && sSegment[0] !== "@"
602
+ return vValue === undefined && sSegment[0] !== "#" && !sSegment.includes("@")
603
603
  ? missingValue(oParentValue, sSegment, i + 1)
604
604
  : vValue;
605
605
  });
@@ -1617,7 +1617,7 @@ sap.ui.define([
1617
1617
  * Path of the unit or currency for the property, relative to the entity
1618
1618
  * @param {boolean} [bPatchWithoutSideEffects]
1619
1619
  * Whether the PATCH response is ignored, except for a new ETag
1620
- * @param {function} [fnPatchSent]
1620
+ * @param {function} fnPatchSent
1621
1621
  * The function is called just before a back-end request is sent for the first time.
1622
1622
  * If no back-end request is needed, the function is not called.
1623
1623
  * @returns {Promise}
@@ -1681,9 +1681,7 @@ sap.ui.define([
1681
1681
  */
1682
1682
  function onSubmit() {
1683
1683
  oRequestLock = that.oRequestor.lockGroup(sGroupId, that, true);
1684
- if (fnPatchSent) {
1685
- fnPatchSent();
1686
- }
1684
+ fnPatchSent();
1687
1685
  }
1688
1686
 
1689
1687
  if (bPatchWithoutSideEffects) {
@@ -1845,7 +1845,7 @@ sap.ui.define([
1845
1845
  /**
1846
1846
  * Converts given value to an array.
1847
1847
  * <code>null</code> and <code>undefined</code> are converted to the empty array, a
1848
- * non-array value is wrapped with an array and an array is returned as it is.
1848
+ * non-array value is wrapped with an array and an array is returned as a shallow copy.
1849
1849
  *
1850
1850
  * @param {any} [vElement]
1851
1851
  * The element to be converted into an array.
@@ -1857,7 +1857,7 @@ sap.ui.define([
1857
1857
  return [];
1858
1858
  }
1859
1859
  if (Array.isArray(vElement)) {
1860
- return vElement;
1860
+ return vElement.slice();
1861
1861
  }
1862
1862
  return [vElement];
1863
1863
  },
@@ -3,6 +3,7 @@
3
3
  * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
+ /*eslint-disable max-len */
6
7
  /**
7
8
  * ResourceBundle-based DataBinding
8
9
  *
@@ -227,7 +228,7 @@ sap.ui.define([
227
228
  *
228
229
  * @extends sap.ui.model.Model
229
230
  * @public
230
- * @version 1.95.0
231
+ * @version 1.96.3
231
232
  */
232
233
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
233
234
 
@@ -3,7 +3,7 @@
3
3
  * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
-
6
+ /*eslint-disable max-len */
7
7
  // Provides the resource model implementation of a property binding
8
8
  sap.ui.define(['sap/ui/model/PropertyBinding', 'sap/ui/model/ChangeReason'],
9
9
  function(PropertyBinding, ChangeReason) {
@@ -3,7 +3,7 @@
3
3
  * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
-
6
+ /*eslint-disable max-len */
7
7
  // Provides the base implementation for all model implementations
8
8
  sap.ui.define(['sap/ui/model/SimpleType', 'sap/ui/model/FormatException', 'sap/ui/model/ParseException'],
9
9
  function(SimpleType, FormatException, ParseException) {
@@ -19,7 +19,7 @@ sap.ui.define(['sap/ui/model/SimpleType', 'sap/ui/model/FormatException', 'sap/u
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.95.0
22
+ * @version 1.96.3
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -3,7 +3,7 @@
3
3
  * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
4
4
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
5
  */
6
-
6
+ /*eslint-disable max-len */
7
7
  // Provides the base implementation for all model implementations
8
8
  sap.ui.define([
9
9
  "sap/base/Log",
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @extends sap.ui.model.CompositeType
33
33
  *
34
34
  * @author SAP SE
35
- * @version 1.95.0
35
+ * @version 1.96.3
36
36
  *
37
37
  * @public
38
38
  * @param {object} [oFormatOptions]