@openui5/sap.ui.core 1.108.1 → 1.109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/THIRDPARTY.txt +1 -1
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/Log.js +125 -84
  9. package/src/sap/base/i18n/ResourceBundle.js +41 -11
  10. package/src/sap/base/util/includes.js +1 -1
  11. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  12. package/src/sap/base/util/restricted/_castArray.js +1 -1
  13. package/src/sap/base/util/restricted/_compact.js +1 -1
  14. package/src/sap/base/util/restricted/_curry.js +1 -1
  15. package/src/sap/base/util/restricted/_debounce.js +1 -1
  16. package/src/sap/base/util/restricted/_difference.js +1 -1
  17. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  18. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  22. package/src/sap/base/util/restricted/_flatten.js +1 -1
  23. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_intersection.js +1 -1
  26. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  27. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  28. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  29. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isNil.js +1 -1
  31. package/src/sap/base/util/restricted/_max.js +1 -1
  32. package/src/sap/base/util/restricted/_merge.js +1 -1
  33. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  34. package/src/sap/base/util/restricted/_min.js +1 -1
  35. package/src/sap/base/util/restricted/_omit.js +1 -1
  36. package/src/sap/base/util/restricted/_pick.js +1 -1
  37. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  38. package/src/sap/base/util/restricted/_throttle.js +1 -1
  39. package/src/sap/base/util/restricted/_toArray.js +1 -1
  40. package/src/sap/base/util/restricted/_union.js +1 -1
  41. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  42. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  43. package/src/sap/base/util/restricted/_uniq.js +1 -1
  44. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  45. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  46. package/src/sap/base/util/restricted/_without.js +1 -1
  47. package/src/sap/base/util/restricted/_xor.js +1 -1
  48. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  49. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  50. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  51. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  52. package/src/sap/base/util/values.js +2 -1
  53. package/src/sap/ui/Device.js +3 -3
  54. package/src/sap/ui/Global.js +4 -4
  55. package/src/sap/ui/base/Event.js +1 -1
  56. package/src/sap/ui/base/EventProvider.js +1 -1
  57. package/src/sap/ui/base/Interface.js +1 -1
  58. package/src/sap/ui/base/ManagedObject.js +1 -1
  59. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  60. package/src/sap/ui/base/ManagedObjectObserver.js +33 -11
  61. package/src/sap/ui/base/Metadata.js +1 -1
  62. package/src/sap/ui/base/Object.js +1 -1
  63. package/src/sap/ui/base/ObjectPool.js +1 -1
  64. package/src/sap/ui/core/.library +3 -3
  65. package/src/sap/ui/core/BusyIndicator.js +1 -1
  66. package/src/sap/ui/core/Component.js +1 -1
  67. package/src/sap/ui/core/ComponentContainer.js +1 -1
  68. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  69. package/src/sap/ui/core/ComponentSupport.js +1 -1
  70. package/src/sap/ui/core/Configuration.js +1 -1
  71. package/src/sap/ui/core/Control.js +1 -1
  72. package/src/sap/ui/core/Core.js +4 -4
  73. package/src/sap/ui/core/CustomData.js +1 -1
  74. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  75. package/src/sap/ui/core/Element.js +1 -1
  76. package/src/sap/ui/core/ElementMetadata.js +1 -1
  77. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  78. package/src/sap/ui/core/EventBus.js +1 -1
  79. package/src/sap/ui/core/Fragment.js +1 -1
  80. package/src/sap/ui/core/HTML.js +1 -1
  81. package/src/sap/ui/core/History.js +1 -1
  82. package/src/sap/ui/core/Icon.js +1 -1
  83. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  84. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  85. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  86. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  87. package/src/sap/ui/core/InvisibleText.js +1 -1
  88. package/src/sap/ui/core/Item.js +1 -1
  89. package/src/sap/ui/core/LabelEnablement.js +1 -1
  90. package/src/sap/ui/core/LayoutData.js +1 -1
  91. package/src/sap/ui/core/ListItem.js +1 -1
  92. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  93. package/src/sap/ui/core/Locale.js +1 -1
  94. package/src/sap/ui/core/LocaleData.js +133 -1
  95. package/src/sap/ui/core/Manifest.js +1 -1
  96. package/src/sap/ui/core/Message.js +1 -1
  97. package/src/sap/ui/core/RenderManager.js +82 -50
  98. package/src/sap/ui/core/Renderer.js +1 -1
  99. package/src/sap/ui/core/Rendering.js +29 -9
  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 +7 -5
  106. package/src/sap/ui/core/UIComponent.js +1 -1
  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 +1 -1
  111. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  112. package/src/sap/ui/core/XMLTemplateProcessor.js +1 -3
  113. package/src/sap/ui/core/cldr/ar.json +330 -0
  114. package/src/sap/ui/core/cldr/ar_EG.json +330 -0
  115. package/src/sap/ui/core/cldr/ar_SA.json +330 -0
  116. package/src/sap/ui/core/cldr/bg.json +295 -0
  117. package/src/sap/ui/core/cldr/ca.json +329 -0
  118. package/src/sap/ui/core/cldr/cs.json +328 -0
  119. package/src/sap/ui/core/cldr/cy.json +260 -0
  120. package/src/sap/ui/core/cldr/da.json +295 -0
  121. package/src/sap/ui/core/cldr/de.json +329 -0
  122. package/src/sap/ui/core/cldr/de_AT.json +329 -0
  123. package/src/sap/ui/core/cldr/de_CH.json +329 -0
  124. package/src/sap/ui/core/cldr/el.json +228 -0
  125. package/src/sap/ui/core/cldr/el_CY.json +228 -0
  126. package/src/sap/ui/core/cldr/en.json +294 -0
  127. package/src/sap/ui/core/cldr/en_AU.json +294 -0
  128. package/src/sap/ui/core/cldr/en_GB.json +294 -0
  129. package/src/sap/ui/core/cldr/en_HK.json +294 -0
  130. package/src/sap/ui/core/cldr/en_IE.json +294 -0
  131. package/src/sap/ui/core/cldr/en_IN.json +294 -0
  132. package/src/sap/ui/core/cldr/en_NZ.json +294 -0
  133. package/src/sap/ui/core/cldr/en_PG.json +294 -0
  134. package/src/sap/ui/core/cldr/en_SG.json +294 -0
  135. package/src/sap/ui/core/cldr/en_ZA.json +294 -0
  136. package/src/sap/ui/core/cldr/es.json +261 -0
  137. package/src/sap/ui/core/cldr/es_AR.json +261 -0
  138. package/src/sap/ui/core/cldr/es_BO.json +261 -0
  139. package/src/sap/ui/core/cldr/es_CL.json +261 -0
  140. package/src/sap/ui/core/cldr/es_CO.json +261 -0
  141. package/src/sap/ui/core/cldr/es_MX.json +261 -0
  142. package/src/sap/ui/core/cldr/es_PE.json +261 -0
  143. package/src/sap/ui/core/cldr/es_UY.json +261 -0
  144. package/src/sap/ui/core/cldr/es_VE.json +261 -0
  145. package/src/sap/ui/core/cldr/et.json +294 -0
  146. package/src/sap/ui/core/cldr/fa.json +296 -0
  147. package/src/sap/ui/core/cldr/fi.json +328 -0
  148. package/src/sap/ui/core/cldr/fr.json +294 -0
  149. package/src/sap/ui/core/cldr/fr_BE.json +294 -0
  150. package/src/sap/ui/core/cldr/fr_CA.json +294 -0
  151. package/src/sap/ui/core/cldr/fr_CH.json +294 -0
  152. package/src/sap/ui/core/cldr/fr_LU.json +294 -0
  153. package/src/sap/ui/core/cldr/he.json +329 -0
  154. package/src/sap/ui/core/cldr/hi.json +261 -0
  155. package/src/sap/ui/core/cldr/hr.json +294 -0
  156. package/src/sap/ui/core/cldr/hu.json +362 -0
  157. package/src/sap/ui/core/cldr/id.json +294 -0
  158. package/src/sap/ui/core/cldr/it.json +294 -0
  159. package/src/sap/ui/core/cldr/it_CH.json +294 -0
  160. package/src/sap/ui/core/cldr/ja.json +328 -0
  161. package/src/sap/ui/core/cldr/kk.json +294 -0
  162. package/src/sap/ui/core/cldr/ko.json +328 -0
  163. package/src/sap/ui/core/cldr/lt.json +294 -0
  164. package/src/sap/ui/core/cldr/lv.json +294 -0
  165. package/src/sap/ui/core/cldr/ms.json +262 -0
  166. package/src/sap/ui/core/cldr/nb.json +295 -0
  167. package/src/sap/ui/core/cldr/nl.json +261 -0
  168. package/src/sap/ui/core/cldr/nl_BE.json +261 -0
  169. package/src/sap/ui/core/cldr/pl.json +328 -0
  170. package/src/sap/ui/core/cldr/pt.json +294 -0
  171. package/src/sap/ui/core/cldr/pt_PT.json +294 -0
  172. package/src/sap/ui/core/cldr/ro.json +294 -0
  173. package/src/sap/ui/core/cldr/ru.json +294 -0
  174. package/src/sap/ui/core/cldr/ru_UA.json +294 -0
  175. package/src/sap/ui/core/cldr/sk.json +328 -0
  176. package/src/sap/ui/core/cldr/sl.json +328 -0
  177. package/src/sap/ui/core/cldr/sr.json +294 -0
  178. package/src/sap/ui/core/cldr/sr_Latn.json +294 -0
  179. package/src/sap/ui/core/cldr/sv.json +295 -0
  180. package/src/sap/ui/core/cldr/th.json +362 -0
  181. package/src/sap/ui/core/cldr/tr.json +362 -0
  182. package/src/sap/ui/core/cldr/uk.json +294 -0
  183. package/src/sap/ui/core/cldr/vi.json +294 -0
  184. package/src/sap/ui/core/cldr/zh_CN.json +329 -0
  185. package/src/sap/ui/core/cldr/zh_HK.json +329 -0
  186. package/src/sap/ui/core/cldr/zh_SG.json +329 -0
  187. package/src/sap/ui/core/cldr/zh_TW.json +329 -0
  188. package/src/sap/ui/core/date/Japanese.js +30 -0
  189. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  190. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  191. package/src/sap/ui/core/dnd/DragAndDrop.js +2 -2
  192. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  193. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  194. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  195. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  196. package/src/sap/ui/core/format/DateFormat.js +122 -2
  197. package/src/sap/ui/core/format/NumberFormat.js +111 -70
  198. package/src/sap/ui/core/format/TimezoneUtil.js +2 -2
  199. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  200. package/src/sap/ui/core/library.js +3 -3
  201. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  202. package/src/sap/ui/core/message/Message.js +1 -1
  203. package/src/sap/ui/core/message/MessageManager.js +1 -1
  204. package/src/sap/ui/core/message/MessageParser.js +1 -1
  205. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  206. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  207. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  208. package/src/sap/ui/core/mvc/JSView.js +1 -1
  209. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  210. package/src/sap/ui/core/mvc/View.js +3 -3
  211. package/src/sap/ui/core/mvc/ViewType.js +4 -0
  212. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  213. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  214. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  215. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  216. package/src/sap/ui/core/postmessage/Bus.js +12 -17
  217. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  218. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  219. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  220. package/src/sap/ui/core/service/Service.js +1 -1
  221. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  222. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  223. package/src/sap/ui/core/support/Plugin.js +1 -1
  224. package/src/sap/ui/core/support/Support.js +1 -1
  225. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  226. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  227. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  228. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  229. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  230. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  231. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  232. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  233. package/src/sap/ui/core/themes/base/Icon.less +17 -4
  234. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +1 -1
  235. package/src/sap/ui/core/themes/base/base.less +599 -90
  236. package/src/sap/ui/core/themes/base/global.less +64 -0
  237. package/src/sap/ui/core/themes/sap_hcb/global.less +65 -0
  238. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  239. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  240. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  241. package/src/sap/ui/core/tmpl/Template.js +1 -1
  242. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  243. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  244. package/src/sap/ui/core/util/Export.js +1 -1
  245. package/src/sap/ui/core/util/ExportCell.js +1 -1
  246. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  247. package/src/sap/ui/core/util/ExportRow.js +1 -1
  248. package/src/sap/ui/core/util/ExportType.js +1 -1
  249. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  250. package/src/sap/ui/core/util/File.js +1 -1
  251. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  252. package/src/sap/ui/core/util/MockServer.js +1 -1
  253. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  254. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -3
  255. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  256. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  257. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  258. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  259. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  260. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  261. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  262. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  263. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  264. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  265. package/src/sap/ui/debug/ControlTree.js +1 -1
  266. package/src/sap/ui/debug/DebugEnv.js +1 -1
  267. package/src/sap/ui/debug/PropertyList.js +1 -1
  268. package/src/sap/ui/model/ClientModel.js +1 -1
  269. package/src/sap/ui/model/CompositeDataState.js +1 -1
  270. package/src/sap/ui/model/CompositeType.js +1 -1
  271. package/src/sap/ui/model/DataState.js +1 -1
  272. package/src/sap/ui/model/MetaModel.js +1 -1
  273. package/src/sap/ui/model/Model.js +1 -1
  274. package/src/sap/ui/model/SelectionModel.js +1 -1
  275. package/src/sap/ui/model/SimpleType.js +1 -1
  276. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  277. package/src/sap/ui/model/Type.js +1 -1
  278. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +11 -3
  279. package/src/sap/ui/model/json/JSONModel.js +1 -1
  280. package/src/sap/ui/model/message/MessageModel.js +1 -1
  281. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  282. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  283. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  284. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  285. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  286. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  287. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  288. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  289. package/src/sap/ui/model/odata/type/Date.js +1 -1
  290. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  291. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  292. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  293. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  294. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  295. package/src/sap/ui/model/odata/type/Double.js +1 -1
  296. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  297. package/src/sap/ui/model/odata/type/Int.js +1 -1
  298. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  299. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  300. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  301. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  302. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  303. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  304. package/src/sap/ui/model/odata/type/Single.js +1 -1
  305. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  306. package/src/sap/ui/model/odata/type/String.js +1 -1
  307. package/src/sap/ui/model/odata/type/Time.js +1 -1
  308. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  309. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  310. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  311. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  312. package/src/sap/ui/model/odata/v2/ODataListBinding.js +1 -1
  313. package/src/sap/ui/model/odata/v2/ODataModel.js +1 -1
  314. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +3 -4
  315. package/src/sap/ui/model/odata/v4/Context.js +82 -29
  316. package/src/sap/ui/model/odata/v4/ODataBinding.js +3 -0
  317. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +3 -2
  318. package/src/sap/ui/model/odata/v4/ODataListBinding.js +77 -23
  319. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  320. package/src/sap/ui/model/odata/v4/ODataModel.js +2 -2
  321. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  322. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +334 -142
  323. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +109 -16
  324. package/src/sap/ui/model/odata/v4/lib/_Cache.js +82 -42
  325. package/src/sap/ui/model/odata/v4/lib/_Helper.js +26 -0
  326. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  327. package/src/sap/ui/model/type/Boolean.js +1 -1
  328. package/src/sap/ui/model/type/Currency.js +1 -1
  329. package/src/sap/ui/model/type/Date.js +1 -1
  330. package/src/sap/ui/model/type/DateInterval.js +1 -1
  331. package/src/sap/ui/model/type/DateTime.js +1 -1
  332. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  333. package/src/sap/ui/model/type/FileSize.js +1 -1
  334. package/src/sap/ui/model/type/Float.js +1 -1
  335. package/src/sap/ui/model/type/Integer.js +1 -1
  336. package/src/sap/ui/model/type/String.js +1 -1
  337. package/src/sap/ui/model/type/Time.js +1 -1
  338. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  339. package/src/sap/ui/model/type/Unit.js +1 -1
  340. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  341. package/src/sap/ui/qunit/QUnitUtils.js +14 -2
  342. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  343. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  344. package/src/sap/ui/test/OpaExtension.js +1 -1
  345. package/src/sap/ui/test/OpaPlugin.js +6 -4
  346. package/src/sap/ui/test/PageObjectFactory.js +11 -9
  347. package/src/sap/ui/test/RecordReplay.js +1 -1
  348. package/src/sap/ui/test/_OpaLogger.js +1 -1
  349. package/src/sap/ui/test/autowaiter/_promiseWaiter.js +4 -1
  350. package/src/sap/ui/test/generic/TestBase.js +1 -1
  351. package/src/sap/ui/util/Mobile.js +17 -18
  352. package/src/sap/ui/util/Storage.js +90 -63
@@ -36,6 +36,8 @@ sap.ui.define([
36
36
  search : "string",
37
37
  subtotalsAtBottomOnly : "boolean"
38
38
  },
39
+ oFrozenCollapsed = Object.freeze({"@$ui5.node.isExpanded" : false}),
40
+ oFrozenExpanded = Object.freeze({"@$ui5.node.isExpanded" : true}),
39
41
  // Example: "Texts/Country asc"
40
42
  // capture groups: 1 - the property path
41
43
  rOrderbyItem = new RegExp("^(" + _Parser.sODataIdentifier
@@ -97,6 +99,7 @@ sap.ui.define([
97
99
  /*
98
100
  * Takes care of the $skip/$top system query options and returns the corresponding
99
101
  * transformation(s).
102
+ *
100
103
  * @param {object} mQueryOptions
101
104
  * A modifiable map of key-value pairs representing the query string
102
105
  * @param {number} [mQueryOptions.$skip]
@@ -122,6 +125,54 @@ sap.ui.define([
122
125
  }
123
126
 
124
127
  _AggregationHelper = {
128
+ /**
129
+ * Before overwriting the given placeholder with the given element, perform some sanity
130
+ * checks and restore some data from the placeholder to the element.
131
+ *
132
+ * @param {object} oPlaceholder - A placeholder
133
+ * @param {object} oElement - Any node or leaf element
134
+ * @param {sap.ui.model.odata.v4.lib._CollectionCache} oCache
135
+ * The group level cache which the given element has been read from
136
+ * @param {number} iIndex
137
+ * The index of the given element within the cache's collection
138
+ * @throws {Error}
139
+ * In case an unexpected element or placeholder would be overwritten, or in case of a
140
+ * structural change
141
+ *
142
+ * @private
143
+ */
144
+ beforeOverwritePlaceholder : function (oPlaceholder, oElement, oCache, iIndex) {
145
+ var oParent = _Helper.getPrivateAnnotation(oPlaceholder, "parent");
146
+
147
+ if (!_Helper.hasPrivateAnnotation(oPlaceholder, "placeholder")) {
148
+ throw new Error("Unexpected element");
149
+ }
150
+ if (oParent !== oCache
151
+ || _Helper.getPrivateAnnotation(oPlaceholder, "index") !== iIndex
152
+ || oPlaceholder["@$ui5.node.level"] !== oElement["@$ui5.node.level"]
153
+ // Note: level 0 is used for initial placeholders of 1st level cache in case
154
+ // expandTo > 1
155
+ && oPlaceholder["@$ui5.node.level"] !== 0) {
156
+ throw new Error("Wrong placeholder");
157
+ }
158
+ ["descendants", "filter", "predicate"].forEach(function (sAnnotation) {
159
+ if (_Helper.hasPrivateAnnotation(oPlaceholder, sAnnotation)
160
+ && _Helper.getPrivateAnnotation(oElement, sAnnotation)
161
+ !== _Helper.getPrivateAnnotation(oPlaceholder, sAnnotation)) {
162
+ throw new Error("Unexpected structural change: " + sAnnotation);
163
+ }
164
+ });
165
+
166
+ _Helper.copyPrivateAnnotation(oPlaceholder, "spliced", oElement);
167
+ if ("@$ui5.node.isExpanded" in oPlaceholder) {
168
+ if ((oElement["@$ui5.node.isExpanded"] === undefined)
169
+ !== (oPlaceholder["@$ui5.node.isExpanded"] === undefined)) {
170
+ throw new Error("Not a leaf anymore (or vice versa)");
171
+ }
172
+ oElement["@$ui5.node.isExpanded"] = oPlaceholder["@$ui5.node.isExpanded"];
173
+ }
174
+ },
175
+
125
176
  /**
126
177
  * Builds the value for a "$apply" system query option based on the given data aggregation
127
178
  * information. The value is "groupby((<groupable_1,...,groupable_N),aggregate(
@@ -344,7 +395,9 @@ sap.ui.define([
344
395
  /**
345
396
  * Builds the value for a "$apply" system query option based on the given data aggregation
346
397
  * information for a recursive hierarchy. If no query options are given, only a symbolic
347
- * "$apply" is constructed to avoid timing issues with metadata.
398
+ * "$apply" is constructed to avoid timing issues with metadata. The property paths for
399
+ * DistanceFromRootProperty, DrillStateProperty, and LimitedDescendantCountProperty are
400
+ * stored at <code>oAggregation</code> using a "$" prefix (if not already stored).
348
401
  *
349
402
  * @param {object} oAggregation
350
403
  * An object holding the information needed for a recursive hierarchy; see
@@ -383,14 +436,21 @@ sap.ui.define([
383
436
  sSeparator = "";
384
437
 
385
438
  function select(sProperty) {
439
+ var sPropertyPath;
440
+
386
441
  if (mQueryOptions.$select) {
387
- if (!mRecursiveHierarchy) {
388
- mRecursiveHierarchy = oAggregation.$fetchMetadata(sPath
389
- + "/@com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy#"
390
- + sHierarchyQualifier).getResult();
391
- }
442
+ sPropertyPath = oAggregation["$" + sProperty];
443
+ if (!sPropertyPath) {
444
+ if (!mRecursiveHierarchy) {
445
+ mRecursiveHierarchy = oAggregation.$fetchMetadata(sPath
446
+ + "/@com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy#"
447
+ + sHierarchyQualifier).getResult();
448
+ }
392
449
 
393
- mQueryOptions.$select.push(mRecursiveHierarchy[sProperty].$PropertyPath);
450
+ sPropertyPath = oAggregation["$" + sProperty]
451
+ = mRecursiveHierarchy[sProperty].$PropertyPath;
452
+ }
453
+ mQueryOptions.$select.push(sPropertyPath);
394
454
  }
395
455
  }
396
456
 
@@ -434,8 +494,8 @@ sap.ui.define([
434
494
  + "',Levels=" + (oAggregation.expandTo || 1)
435
495
  + ")";
436
496
  if (oAggregation.expandTo > 1) {
437
- select("DescendantCountProperty");
438
497
  select("DistanceFromRootProperty");
498
+ select("LimitedDescendantCountProperty");
439
499
  }
440
500
  }
441
501
  select("DrillStateProperty");
@@ -499,7 +559,7 @@ sap.ui.define([
499
559
  *
500
560
  * @param {number} iLevel - The level
501
561
  * @param {number} iIndex - The index within the parent cache
502
- * @param {object} oParentCache - The parent cache
562
+ * @param {sap.ui.model.odata.v4.lib._CollectionCache} oParentCache - The parent cache
503
563
  * @returns {object} A placeholder object
504
564
  *
505
565
  * @public
@@ -509,6 +569,7 @@ sap.ui.define([
509
569
 
510
570
  _Helper.setPrivateAnnotation(oPlaceholder, "index", iIndex);
511
571
  _Helper.setPrivateAnnotation(oPlaceholder, "parent", oParentCache);
572
+ _Helper.setPrivateAnnotation(oPlaceholder, "placeholder", true);
512
573
 
513
574
  return oPlaceholder;
514
575
  },
@@ -631,6 +692,21 @@ sap.ui.define([
631
692
  return aAllProperties;
632
693
  },
633
694
 
695
+ /**
696
+ * Gets an object with property updates to be applied when collapsing the given group node.
697
+ *
698
+ * @param {object} oGroupNode
699
+ * The group node which is about to be expanded
700
+ * @returns {object}
701
+ * An object with property updates to be applied when collapsing the given group node
702
+ *
703
+ * @public
704
+ * @see .getOrCreateExpandedObject
705
+ */
706
+ getCollapsedObject : function (oGroupNode) {
707
+ return _Helper.getPrivateAnnotation(oGroupNode, "collapsed") || oFrozenCollapsed;
708
+ },
709
+
634
710
  /**
635
711
  * Returns the "$orderby" system query option filtered in such a way that only aggregatable
636
712
  * or groupable properties, units, or additionally requested properties are used, provided
@@ -722,7 +798,7 @@ sap.ui.define([
722
798
  /**
723
799
  * Gets an object with property updates to be applied when expanding the given group node,
724
800
  * creating it when needed for the first time. Creates a corresponding object to be applied
725
- * when collapsing the node again. Takes placement of subtotals into account.
801
+ * when collapsing the node again, if needed. Takes placement of subtotals into account.
726
802
  *
727
803
  * @param {object} oAggregation
728
804
  * An object holding the information needed for data aggregation;
@@ -733,20 +809,23 @@ sap.ui.define([
733
809
  * An object with property updates to be applied when expanding the given group node
734
810
  *
735
811
  * @public
812
+ * @see .getCollapsedObject
736
813
  */
737
814
  getOrCreateExpandedObject : function (oAggregation, oGroupNode) {
738
- var oCollapsed,
739
- oExpanded = _Helper.getPrivateAnnotation(oGroupNode, "expanded");
815
+ var oCollapsed, oExpanded;
740
816
 
817
+ if (oAggregation.subtotalsAtBottomOnly === undefined) { // "top only"
818
+ return oFrozenExpanded;
819
+ }
820
+
821
+ oExpanded = _Helper.getPrivateAnnotation(oGroupNode, "expanded");
741
822
  if (!oExpanded) {
742
823
  oCollapsed = {"@$ui5.node.isExpanded" : false};
743
824
  _Helper.setPrivateAnnotation(oGroupNode, "collapsed", oCollapsed);
744
825
  oExpanded = {"@$ui5.node.isExpanded" : true};
745
826
  _Helper.setPrivateAnnotation(oGroupNode, "expanded", oExpanded);
746
- if (oAggregation.subtotalsAtBottomOnly !== undefined) { // "only or also at bottom"
747
- _AggregationHelper.extractSubtotals(oAggregation, oGroupNode, oCollapsed,
748
- oAggregation.subtotalsAtBottomOnly ? oExpanded : null);
749
- }
827
+ _AggregationHelper.extractSubtotals(oAggregation, oGroupNode, oCollapsed,
828
+ oAggregation.subtotalsAtBottomOnly ? oExpanded : null);
750
829
  }
751
830
 
752
831
  return oExpanded;
@@ -840,6 +919,20 @@ sap.ui.define([
840
919
  });
841
920
  },
842
921
 
922
+ /**
923
+ * Marks the value of the given element's private annotation "spliced" with
924
+ * <code>$stale : true</code>, if available.
925
+ *
926
+ * @param {object} oElement - Any node or leaf element
927
+ */
928
+ markSplicedStale : function (oElement) {
929
+ var aSpliced = _Helper.getPrivateAnnotation(oElement, "spliced");
930
+
931
+ if (aSpliced) { // => collapsed
932
+ aSpliced.$stale = true;
933
+ }
934
+ },
935
+
843
936
  /**
844
937
  * Removes any potential "UI5grand__" prefix from the given grand totals.
845
938
  *
@@ -1772,7 +1772,7 @@ sap.ui.define([
1772
1772
  * Path of the entity, relative to the cache (as used by change listeners)
1773
1773
  * @param {boolean} [bUpdating]
1774
1774
  * Whether the given property will not be overwritten by a creation POST(+GET) response
1775
- * @returns {Promise}
1775
+ * @returns {sap.ui.base.SyncPromise}
1776
1776
  * A promise which resolves with <code>undefined</code> once the value has been set, or is
1777
1777
  * rejected with an error if setting fails somehow
1778
1778
  * @throws {Error} If the cache is shared
@@ -1880,6 +1880,9 @@ sap.ui.define([
1880
1880
  * If no back-end request is needed, the function is not called.
1881
1881
  * @param {function} fnIsKeepAlive
1882
1882
  * A function to tell whether the entity is kept-alive
1883
+ * @param {boolean} [bInactive]
1884
+ * If <code>true</code>, the cache and the POST request will be updated, but the entity stays
1885
+ * inactive
1883
1886
  * @returns {Promise}
1884
1887
  * A promise for the PATCH request (resolves with <code>undefined</code>); rejected in case of
1885
1888
  * cancellation or if no <code>fnErrorCallback</code> is given
@@ -1889,7 +1892,7 @@ sap.ui.define([
1889
1892
  */
1890
1893
  _Cache.prototype.update = function (oGroupLock, sPropertyPath, vValue, fnErrorCallback,
1891
1894
  sEditUrl, sEntityPath, sUnitOrCurrencyPath, bPatchWithoutSideEffects, fnPatchSent,
1892
- fnIsKeepAlive) {
1895
+ fnIsKeepAlive, bInactive) {
1893
1896
  var oPromise,
1894
1897
  aPropertyPath = sPropertyPath.split("/"),
1895
1898
  aUnitOrCurrencyPath,
@@ -2081,7 +2084,7 @@ sap.ui.define([
2081
2084
  if (oPostBody) {
2082
2085
  // change listeners are informed later
2083
2086
  _Helper.updateAll({}, sEntityPath, oPostBody, oUpdateData);
2084
- if (oEntity["@$ui5.context.isInactive"]) {
2087
+ if (oEntity["@$ui5.context.isInactive"] && !bInactive) {
2085
2088
  oUpdateData["@$ui5.context.isInactive"] = false;
2086
2089
  that.iActiveElements += 1;
2087
2090
  addToCount(that.mChangeListeners, "", that.aElements, 1);
@@ -2105,9 +2108,10 @@ sap.ui.define([
2105
2108
  }
2106
2109
  }
2107
2110
  if (sTransientGroup) {
2108
- // When updating a transient entity, _Helper.updateAll has already updated the
2109
- // POST request.
2110
- if (sParkedGroup) {
2111
+ // When updating a transient entity, the above _Helper.updateAll has already updated
2112
+ // the POST request.
2113
+ // If the entity remains inactive, update the request, but keep it parked
2114
+ if (sParkedGroup && !bInactive) {
2111
2115
  _Helper.setPrivateAnnotation(oEntity, "transient", sTransientGroup);
2112
2116
  that.oRequestor.relocate(sParkedGroup, oPostBody, sTransientGroup);
2113
2117
  }
@@ -2451,6 +2455,17 @@ sap.ui.define([
2451
2455
  this.addKeptElement(oElement); // maintain $byPredicate
2452
2456
  };
2453
2457
 
2458
+ /**
2459
+ * Drops the element with the given index and predicate from this cache's collection.
2460
+ *
2461
+ * @param {number} iIndex - An index
2462
+ * @param {string} sPredicate - A key predicate
2463
+ */
2464
+ _CollectionCache.prototype.drop = function (iIndex, sPredicate) {
2465
+ delete this.aElements[iIndex];
2466
+ delete this.aElements.$byPredicate[sPredicate];
2467
+ };
2468
+
2454
2469
  /**
2455
2470
  * Returns a promise to be resolved (synchronously if possible) with an OData object for the
2456
2471
  * requested data.
@@ -2543,6 +2558,57 @@ sap.ui.define([
2543
2558
  this.oSyncPromiseAll = undefined; // from now on, fetchValue has to wait again
2544
2559
  };
2545
2560
 
2561
+ /**
2562
+ * Determines the list of visible or kept-alive elements determined by the given predicates. All
2563
+ * other elements from the back end are discarded!
2564
+ *
2565
+ * @param {string[]} aPredicates
2566
+ * The key predicates of the root elements to request side effects for
2567
+ * @returns {object[]}
2568
+ * The list of visible or kept-alive elements
2569
+ *
2570
+ * @private
2571
+ */
2572
+ _CollectionCache.prototype.filterVisibleElements = function (aPredicates) {
2573
+ var aElements,
2574
+ iMaxIndex = -1,
2575
+ mPredicates = {}, // a set of the predicates (as map to true) to speed up the search
2576
+ that = this;
2577
+
2578
+ aPredicates.forEach(function (sPredicate) {
2579
+ mPredicates[sPredicate] = true;
2580
+ });
2581
+
2582
+ aElements = this.aElements.filter(function (oElement, i) {
2583
+ var sPredicate;
2584
+
2585
+ if (!oElement) {
2586
+ return false; // ignore
2587
+ }
2588
+ if (_Helper.hasPrivateAnnotation(oElement, "transient")) {
2589
+ iMaxIndex = i;
2590
+ return false; // keep, but do not request
2591
+ }
2592
+
2593
+ sPredicate = _Helper.getPrivateAnnotation(oElement, "predicate");
2594
+ if (mPredicates[sPredicate]
2595
+ || _Helper.hasPrivateAnnotation(oElement, "transientPredicate")) {
2596
+ iMaxIndex = i;
2597
+ delete mPredicates[sPredicate];
2598
+ return true; // keep and request
2599
+ }
2600
+
2601
+ that.drop(i, sPredicate);
2602
+ return false;
2603
+ });
2604
+ this.aElements.length = iMaxIndex + 1;
2605
+ Object.keys(mPredicates).forEach(function (sPredicate) {
2606
+ aElements.push(that.aElements.$byPredicate[sPredicate]);
2607
+ });
2608
+
2609
+ return aElements;
2610
+ };
2611
+
2546
2612
  /**
2547
2613
  * Returns a filter that excludes all created entities in this cache's collection and all
2548
2614
  * entities that have been deleted on the client, but not on the server yet.
@@ -3122,10 +3188,8 @@ sap.ui.define([
3122
3188
  _CollectionCache.prototype.requestSideEffects = function (oGroupLock, aPaths, aPredicates,
3123
3189
  bSingle) {
3124
3190
  var aElements,
3125
- iMaxIndex = -1,
3126
3191
  mMergeableQueryOptions,
3127
3192
  mQueryOptions,
3128
- mPredicates = {}, // a set of the predicates (as map to true) to speed up the search
3129
3193
  sResourcePath,
3130
3194
  bSkip,
3131
3195
  mTypeForMetaPath = this.fetchTypes().getResult(),
@@ -3145,44 +3209,17 @@ sap.ui.define([
3145
3209
  if (!mQueryOptions) {
3146
3210
  return SyncPromise.resolve(); // micro optimization: use *sync.* promise which is cached
3147
3211
  }
3212
+ if (this.beforeRequestSideEffects) {
3213
+ this.beforeRequestSideEffects(mQueryOptions);
3214
+ }
3148
3215
 
3149
3216
  if (bSingle) {
3150
3217
  aElements = [this.aElements.$byPredicate[aPredicates[0]]];
3151
3218
  } else {
3152
- aPredicates.forEach(function (sPredicate) {
3153
- mPredicates[sPredicate] = true;
3154
- });
3155
-
3156
- aElements = this.aElements.filter(function (oElement, i) {
3157
- var sPredicate;
3158
-
3159
- if (!oElement) {
3160
- return false; // ignore
3161
- }
3162
- if (_Helper.hasPrivateAnnotation(oElement, "transient")) {
3163
- iMaxIndex = i;
3164
- return false; // keep, but do not request
3165
- }
3166
-
3167
- sPredicate = _Helper.getPrivateAnnotation(oElement, "predicate");
3168
- if (mPredicates[sPredicate]
3169
- || _Helper.hasPrivateAnnotation(oElement, "transientPredicate")) {
3170
- iMaxIndex = i;
3171
- delete mPredicates[sPredicate];
3172
- return true; // keep and request
3173
- }
3174
-
3175
- delete that.aElements[i];
3176
- delete that.aElements.$byPredicate[sPredicate];
3177
- return false;
3178
- });
3179
- this.aElements.length = iMaxIndex + 1;
3219
+ aElements = this.filterVisibleElements(aPredicates);
3180
3220
  if (!aElements.length) {
3181
3221
  return SyncPromise.resolve(); // micro optimization: use cached *sync.* promise
3182
3222
  }
3183
- Object.keys(mPredicates).forEach(function (sPredicate) {
3184
- aElements.push(that.aElements.$byPredicate[sPredicate]);
3185
- });
3186
3223
  }
3187
3224
  mQueryOptions.$filter = aElements.map(function (oElement) {
3188
3225
  // all elements have a key predicate, so we will get a key filter
@@ -3922,7 +3959,8 @@ sap.ui.define([
3922
3959
  * @param {sap.ui.model.odata.v4.lib._Requestor} oRequestor
3923
3960
  * The requestor
3924
3961
  * @param {string} sResourcePath
3925
- * A resource path relative to the service URL; it must not contain a query string<br>
3962
+ * A resource path relative to the service URL; it must not contain a query string
3963
+ * <br>
3926
3964
  * Example: Products
3927
3965
  * @param {object} [mQueryOptions]
3928
3966
  * A map of key-value pairs representing the query string, the value in this pair has to
@@ -3994,7 +4032,8 @@ sap.ui.define([
3994
4032
  * @param {sap.ui.model.odata.v4.lib._Requestor} oRequestor
3995
4033
  * The requestor
3996
4034
  * @param {string} sResourcePath
3997
- * A resource path relative to the service URL; it must not contain a query string<br>
4035
+ * A resource path relative to the service URL; it must not contain a query string
4036
+ * <br>
3998
4037
  * Example: Products
3999
4038
  * @param {object} [mQueryOptions]
4000
4039
  * A map of key-value pairs representing the query string, the value in this pair has to
@@ -4021,7 +4060,8 @@ sap.ui.define([
4021
4060
  * @param {sap.ui.model.odata.v4.lib._Requestor} oRequestor
4022
4061
  * The requestor
4023
4062
  * @param {string} sResourcePath
4024
- * A resource path relative to the service URL; it must not contain a query string<br>
4063
+ * A resource path relative to the service URL; it must not contain a query string
4064
+ * <br>
4025
4065
  * Example: Products
4026
4066
  * @param {object} [mQueryOptions]
4027
4067
  * A map of key-value pairs representing the query string, the value in this pair has to
@@ -356,6 +356,32 @@ sap.ui.define([
356
356
  : JSON.parse(JSON.stringify(vValue, fnReplacer));
357
357
  },
358
358
 
359
+ /**
360
+ * Copies the value of the private client-side instance annotation with the given
361
+ * unqualified name from the given source to the given target object, if present at the
362
+ * source.
363
+ *
364
+ * @param {object} oSource
365
+ * Any object
366
+ * @param {string} sAnnotation
367
+ * The unqualified name of a private client-side instance annotation (hidden inside
368
+ * namespace "@$ui5._")
369
+ * @param {object} oTarget
370
+ * Any object
371
+ * @throws {Error}
372
+ * If the annotation to be copied is already present at the target, no matter if the value
373
+ * is the same or not
374
+ */
375
+ copyPrivateAnnotation : function (oSource, sAnnotation, oTarget) {
376
+ if (_Helper.hasPrivateAnnotation(oSource, sAnnotation)) {
377
+ if (_Helper.hasPrivateAnnotation(oTarget, sAnnotation)) {
378
+ throw new Error("Must not overwrite: " + sAnnotation);
379
+ }
380
+ _Helper.setPrivateAnnotation(oTarget, sAnnotation,
381
+ _Helper.getPrivateAnnotation(oSource, sAnnotation));
382
+ }
383
+ },
384
+
359
385
  /**
360
386
  * Returns an <code>Error</code> instance from a jQuery XHR wrapper.
361
387
  *
@@ -229,7 +229,7 @@ sap.ui.define([
229
229
  *
230
230
  * @extends sap.ui.model.Model
231
231
  * @public
232
- * @version 1.108.1
232
+ * @version 1.109.0
233
233
  */
234
234
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
235
235
 
@@ -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.108.1
22
+ * @version 1.109.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @extends sap.ui.model.CompositeType
33
33
  *
34
34
  * @author SAP SE
35
- * @version 1.108.1
35
+ * @version 1.109.0
36
36
  *
37
37
  * @public
38
38
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.108.1
29
+ * @version 1.109.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @extends sap.ui.model.CompositeType
34
34
  *
35
35
  * @author SAP SE
36
- * @version 1.108.1
36
+ * @version 1.109.0
37
37
  *
38
38
  * @public
39
39
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.1
22
+ * @version 1.109.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.1
22
+ * @version 1.109.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.108.1
27
+ * @version 1.109.0
28
28
  *
29
29
  * @public
30
30
  * @param {object} [oFormatOptions] formatting options. Supports the same options as {@link sap.ui.core.format.FileSizeFormat.getInstance FileSizeFormat.getInstance}
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.108.1
29
+ * @version 1.109.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.NumberFormat NumberFormat}.
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.108.1
29
+ * @version 1.109.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.NumberFormat NumberFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.108.1
27
+ * @version 1.109.0
28
28
  *
29
29
  * @alias sap.ui.model.type.String
30
30
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.1
22
+ * @version 1.109.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.1
22
+ * @version 1.109.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -48,7 +48,7 @@ sap.ui.define([
48
48
  *
49
49
  *
50
50
  * @author SAP SE
51
- * @version 1.108.1
51
+ * @version 1.109.0
52
52
  *
53
53
  * @public
54
54
  * @param {object} [oFormatOptions]
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.model.ClientModel
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.108.1
50
+ * @version 1.109.0
51
51
  *
52
52
  * @param {XMLDocument|string} oData
53
53
  * Either the URL where to load the XML from or an XML document
@@ -24,6 +24,7 @@ sap.ui.define('sap/ui/qunit/QUnitUtils', [
24
24
  "sap/base/strings/capitalize",
25
25
  "sap/base/util/UriParameters",
26
26
  "sap/base/Log",
27
+ "sap/ui/core/Element",
27
28
  "sap/ui/dom/jquery/control" // jQuery Plugin "control"
28
29
  ],
29
30
  function(
@@ -34,7 +35,8 @@ sap.ui.define('sap/ui/qunit/QUnitUtils', [
34
35
  camelize,
35
36
  capitalize,
36
37
  UriParameters,
37
- Log
38
+ Log,
39
+ Element
38
40
  ) {
39
41
  "use strict";
40
42
 
@@ -218,6 +220,16 @@ sap.ui.define('sap/ui/qunit/QUnitUtils', [
218
220
 
219
221
  };
220
222
 
223
+ var fnClosestTo = Element.closestTo && Element.closestTo.bind(Element);
224
+
225
+ /**
226
+ * @deprecated Since 1.106
227
+ */
228
+ if ( fnClosestTo == null ) {
229
+ fnClosestTo = function(oElement) {
230
+ return jQuery(oElement).control(0);
231
+ };
232
+ }
221
233
 
222
234
  /**
223
235
  * Programmatically triggers a touch event specified by its name.
@@ -236,7 +248,7 @@ sap.ui.define('sap/ui/qunit/QUnitUtils', [
236
248
  }
237
249
 
238
250
  var oEvent = fakeEvent(sEventName, oTarget, oParams),
239
- oElement = jQuery(oTarget).control(0),
251
+ oElement = fnClosestTo(oTarget),
240
252
  sEventHandlerName = (sEventHandlerPrefix == null ? 'on' : sEventHandlerPrefix) + sEventName;
241
253
 
242
254
  if (oElement && oElement[sEventHandlerName]) {
@@ -53,7 +53,7 @@ sap.ui.define(['sap/ui/core/Core', "sap/ui/VersionInfo"],
53
53
  * @namespace
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.108.1
56
+ * @version 1.109.0
57
57
  *
58
58
  * @public
59
59
  * @since 1.48.0