@openui5/sap.ui.core 1.130.0 → 1.131.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 (317) 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/Event.js +1 -1
  9. package/src/sap/base/Eventing.js +3 -2
  10. package/src/sap/base/config.js +1 -1
  11. package/src/sap/base/i18n/LanguageTag.js +1 -1
  12. package/src/sap/base/i18n/date/CalendarType.js +3 -1
  13. package/src/sap/base/i18n/date/CalendarWeekNumbering.js +3 -1
  14. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  15. package/src/sap/base/i18n/date/_EnumHelper.js +43 -0
  16. package/src/sap/base/util/clamp.js +26 -0
  17. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  18. package/src/sap/base/util/restricted/_castArray.js +1 -1
  19. package/src/sap/base/util/restricted/_compact.js +1 -1
  20. package/src/sap/base/util/restricted/_curry.js +1 -1
  21. package/src/sap/base/util/restricted/_debounce.js +1 -1
  22. package/src/sap/base/util/restricted/_difference.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_flatten.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  31. package/src/sap/base/util/restricted/_intersection.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  36. package/src/sap/base/util/restricted/_isNil.js +1 -1
  37. package/src/sap/base/util/restricted/_max.js +1 -1
  38. package/src/sap/base/util/restricted/_merge.js +1 -1
  39. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  40. package/src/sap/base/util/restricted/_min.js +1 -1
  41. package/src/sap/base/util/restricted/_omit.js +1 -1
  42. package/src/sap/base/util/restricted/_pick.js +1 -1
  43. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  44. package/src/sap/base/util/restricted/_throttle.js +1 -1
  45. package/src/sap/base/util/restricted/_toArray.js +1 -1
  46. package/src/sap/base/util/restricted/_union.js +1 -1
  47. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  48. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  49. package/src/sap/base/util/restricted/_uniq.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  52. package/src/sap/base/util/restricted/_without.js +1 -1
  53. package/src/sap/base/util/restricted/_xor.js +1 -1
  54. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  55. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  58. package/src/sap/ui/Device.js +11 -8
  59. package/src/sap/ui/Global.js +3 -3
  60. package/src/sap/ui/base/BindingInfo.js +4 -2
  61. package/src/sap/ui/base/DataType.js +7 -2
  62. package/src/sap/ui/base/Event.js +1 -1
  63. package/src/sap/ui/base/EventProvider.js +1 -1
  64. package/src/sap/ui/base/Interface.js +1 -1
  65. package/src/sap/ui/base/ManagedObject.js +1 -1
  66. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  67. package/src/sap/ui/base/Metadata.js +1 -1
  68. package/src/sap/ui/base/Object.js +1 -1
  69. package/src/sap/ui/base/ObjectPool.js +1 -1
  70. package/src/sap/ui/core/.library +3 -3
  71. package/src/sap/ui/core/BlockLayerUtils.js +17 -29
  72. package/src/sap/ui/core/BusyIndicator.js +2 -15
  73. package/src/sap/ui/core/BusyIndicatorUtils.js +34 -3
  74. package/src/sap/ui/core/Component.js +1 -1
  75. package/src/sap/ui/core/ComponentContainer.js +1 -1
  76. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  77. package/src/sap/ui/core/ComponentSupport.js +1 -1
  78. package/src/sap/ui/core/Configuration.js +1 -1
  79. package/src/sap/ui/core/ContextMenuSupport.js +2 -1
  80. package/src/sap/ui/core/Control.js +46 -10
  81. package/src/sap/ui/core/ControlBehavior.js +14 -18
  82. package/src/sap/ui/core/Core.js +2 -2
  83. package/src/sap/ui/core/CustomData.js +1 -1
  84. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  85. package/src/sap/ui/core/Element.js +230 -32
  86. package/src/sap/ui/core/ElementMetadata.js +1 -1
  87. package/src/sap/ui/core/EnabledPropagator.js +4 -4
  88. package/src/sap/ui/core/EventBus.js +1 -1
  89. package/src/sap/ui/core/FocusMode.js +28 -0
  90. package/src/sap/ui/core/Fragment.js +1 -1
  91. package/src/sap/ui/core/HTML.js +1 -1
  92. package/src/sap/ui/core/History.js +1 -1
  93. package/src/sap/ui/core/Icon.js +1 -1
  94. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  95. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  96. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  97. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  98. package/src/sap/ui/core/InvisibleText.js +1 -1
  99. package/src/sap/ui/core/Item.js +1 -1
  100. package/src/sap/ui/core/LabelEnablement.js +1 -1
  101. package/src/sap/ui/core/LayoutData.js +1 -1
  102. package/src/sap/ui/core/ListItem.js +1 -1
  103. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  104. package/src/sap/ui/core/Locale.js +1 -1
  105. package/src/sap/ui/core/LocaleData.js +3 -3
  106. package/src/sap/ui/core/Manifest.js +2 -2
  107. package/src/sap/ui/core/Message.js +1 -1
  108. package/src/sap/ui/core/Popup.js +12 -0
  109. package/src/sap/ui/core/RenderManager.js +4 -1
  110. package/src/sap/ui/core/Renderer.js +1 -1
  111. package/src/sap/ui/core/ResizeHandler.js +1 -1
  112. package/src/sap/ui/core/ScrollBar.js +1 -1
  113. package/src/sap/ui/core/SeparatorItem.js +1 -1
  114. package/src/sap/ui/core/Title.js +1 -1
  115. package/src/sap/ui/core/TooltipBase.js +1 -1
  116. package/src/sap/ui/core/UIArea.js +1 -1
  117. package/src/sap/ui/core/UIComponent.js +1 -1
  118. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  119. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  120. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  121. package/src/sap/ui/core/XMLComposite.js +1 -1
  122. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  123. package/src/sap/ui/core/_IconRegistry.js +1 -0
  124. package/src/sap/ui/core/cldr/ca.json +1 -1
  125. package/src/sap/ui/core/cldr/cs.json +1 -1
  126. package/src/sap/ui/core/cldr/es.json +2 -2
  127. package/src/sap/ui/core/cldr/es_AR.json +2 -2
  128. package/src/sap/ui/core/cldr/es_BO.json +2 -2
  129. package/src/sap/ui/core/cldr/es_CL.json +2 -2
  130. package/src/sap/ui/core/cldr/es_CO.json +2 -2
  131. package/src/sap/ui/core/cldr/es_PE.json +2 -2
  132. package/src/sap/ui/core/cldr/es_UY.json +2 -2
  133. package/src/sap/ui/core/cldr/es_VE.json +2 -2
  134. package/src/sap/ui/core/cldr/fi.json +1 -1
  135. package/src/sap/ui/core/cldr/hu.json +1 -1
  136. package/src/sap/ui/core/cldr/id.json +2 -2
  137. package/src/sap/ui/core/cldr/mk.json +2 -2
  138. package/src/sap/ui/core/cldr/tr.json +1 -1
  139. package/src/sap/ui/core/cldr/vi.json +2 -2
  140. package/src/sap/ui/core/date/CalendarWeekNumbering.js +1 -1
  141. package/src/sap/ui/core/date/UI5Date.js +1 -1
  142. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  143. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  144. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  145. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  146. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  147. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  148. package/src/sap/ui/core/fieldhelp/FieldHelpCustomData.js +5 -1
  149. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  150. package/src/sap/ui/core/format/NumberFormat.js +38 -17
  151. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  152. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  153. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  154. package/src/sap/ui/core/library.js +23 -19
  155. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  156. package/src/sap/ui/core/message/Message.js +1 -1
  157. package/src/sap/ui/core/message/MessageManager.js +1 -1
  158. package/src/sap/ui/core/message/MessageMixin.js +5 -2
  159. package/src/sap/ui/core/message/MessageParser.js +1 -1
  160. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  161. package/src/sap/ui/core/messagebundle_no.properties +1 -1
  162. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  163. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  164. package/src/sap/ui/core/mvc/JSView.js +1 -1
  165. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  166. package/src/sap/ui/core/mvc/View.js +1 -1
  167. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  168. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  169. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  170. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  171. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  172. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  173. package/src/sap/ui/core/routing/Target.js +5 -5
  174. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  175. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  176. package/src/sap/ui/core/service/Service.js +1 -1
  177. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  178. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  179. package/src/sap/ui/core/support/Plugin.js +1 -1
  180. package/src/sap/ui/core/support/Support.js +1 -1
  181. package/src/sap/ui/core/support/bootstrapFallback.js +1 -0
  182. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  183. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  184. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  185. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  186. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  187. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  188. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  189. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  190. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +1 -0
  191. package/src/sap/ui/core/themes/base/base.less +1353 -247
  192. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  193. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  194. package/src/sap/ui/core/themes/base/global.less +32 -0
  195. package/src/sap/ui/core/themes/base/skeleton.less +93 -3
  196. package/src/sap/ui/core/theming/ThemeManager.js +2 -2
  197. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  198. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  199. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  200. package/src/sap/ui/core/tmpl/Template.js +1 -1
  201. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  202. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  203. package/src/sap/ui/core/util/Export.js +1 -1
  204. package/src/sap/ui/core/util/ExportCell.js +1 -1
  205. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  206. package/src/sap/ui/core/util/ExportRow.js +1 -1
  207. package/src/sap/ui/core/util/ExportType.js +1 -1
  208. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  209. package/src/sap/ui/core/util/File.js +1 -1
  210. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  211. package/src/sap/ui/core/util/MockServer.js +1 -1
  212. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  213. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  214. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  215. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  216. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  217. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  218. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  219. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  220. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  221. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  222. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  223. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  224. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  225. package/src/sap/ui/debug/ControlTree.js +1 -1
  226. package/src/sap/ui/debug/DebugEnv.js +1 -1
  227. package/src/sap/ui/debug/PropertyList.js +1 -1
  228. package/src/sap/ui/model/ClientModel.js +1 -1
  229. package/src/sap/ui/model/ClientTreeBinding.js +32 -19
  230. package/src/sap/ui/model/CompositeDataState.js +1 -1
  231. package/src/sap/ui/model/CompositeType.js +1 -1
  232. package/src/sap/ui/model/DataState.js +1 -1
  233. package/src/sap/ui/model/Filter.js +2 -1
  234. package/src/sap/ui/model/MetaModel.js +1 -1
  235. package/src/sap/ui/model/Model.js +1 -1
  236. package/src/sap/ui/model/SelectionModel.js +1 -1
  237. package/src/sap/ui/model/SimpleType.js +1 -1
  238. package/src/sap/ui/model/Sorter.js +61 -31
  239. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  240. package/src/sap/ui/model/TreeBinding.js +21 -17
  241. package/src/sap/ui/model/Type.js +1 -1
  242. package/src/sap/ui/model/analytics/AnalyticalBinding.js +13 -7
  243. package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
  244. package/src/sap/ui/model/json/JSONModel.js +1 -1
  245. package/src/sap/ui/model/message/MessageModel.js +1 -1
  246. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  247. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  248. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  249. package/src/sap/ui/model/odata/ODataMetadata.js +16 -6
  250. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  251. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  252. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  253. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  254. package/src/sap/ui/model/odata/type/Date.js +1 -1
  255. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  256. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  257. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  258. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  259. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  260. package/src/sap/ui/model/odata/type/Double.js +1 -1
  261. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  262. package/src/sap/ui/model/odata/type/Int.js +1 -1
  263. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  264. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  265. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  266. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  267. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  268. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  269. package/src/sap/ui/model/odata/type/Single.js +1 -1
  270. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  271. package/src/sap/ui/model/odata/type/String.js +1 -1
  272. package/src/sap/ui/model/odata/type/Time.js +1 -1
  273. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  274. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  275. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  276. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  277. package/src/sap/ui/model/odata/v2/ODataListBinding.js +7 -4
  278. package/src/sap/ui/model/odata/v2/ODataModel.js +14 -10
  279. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  280. package/src/sap/ui/model/odata/v4/Context.js +1 -1
  281. package/src/sap/ui/model/odata/v4/ODataBinding.js +1 -0
  282. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +6 -1
  283. package/src/sap/ui/model/odata/v4/ODataListBinding.js +74 -11
  284. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +93 -19
  285. package/src/sap/ui/model/odata/v4/ODataModel.js +49 -8
  286. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +3 -1
  287. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +2 -1
  288. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +12 -1
  289. package/src/sap/ui/model/odata/v4/lib/_Cache.js +51 -30
  290. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +49 -31
  291. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +8 -26
  292. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  293. package/src/sap/ui/model/type/Boolean.js +1 -1
  294. package/src/sap/ui/model/type/Currency.js +1 -1
  295. package/src/sap/ui/model/type/Date.js +1 -1
  296. package/src/sap/ui/model/type/DateInterval.js +1 -1
  297. package/src/sap/ui/model/type/DateTime.js +1 -1
  298. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  299. package/src/sap/ui/model/type/FileSize.js +1 -1
  300. package/src/sap/ui/model/type/Float.js +1 -1
  301. package/src/sap/ui/model/type/Integer.js +1 -1
  302. package/src/sap/ui/model/type/String.js +1 -1
  303. package/src/sap/ui/model/type/Time.js +1 -1
  304. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  305. package/src/sap/ui/model/type/Unit.js +1 -1
  306. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  307. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  308. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  309. package/src/sap/ui/test/OpaBuilder.js +1 -1
  310. package/src/sap/ui/test/autowaiter/_promiseWaiter.js +21 -0
  311. package/src/sap/ui/test/generic/TestBase.js +1 -1
  312. package/src/sap/ui/test/starter/_utils.js +8 -1
  313. package/src/sap/ui/test/starter/createSuite.js +1 -1
  314. package/src/sap/ui/thirdparty/less.js +23 -72
  315. package/src/sap/ui/util/Storage.js +1 -1
  316. package/src/ui5loader.js +9 -4
  317. package/test/sap/ui/qunit/TestRunner.js +2 -0
@@ -3240,6 +3240,9 @@ sap.ui.define([
3240
3240
  * If no back-end request is needed, the function is not called.
3241
3241
  * @param {boolean} [bIndexIsSkip]
3242
3242
  * Whether <code>iIndex</code> is a raw $skip index
3243
+ * @param {function} [fnSeparateReceived]
3244
+ * The function is called for each completed separate property request; may be omitted only if
3245
+ * there are no separate properties
3243
3246
  * @returns {sap.ui.base.SyncPromise}
3244
3247
  * A promise to be resolved with the requested range given as an OData response object (with
3245
3248
  * "@odata.context" and the rows as an array in the property <code>value</code>, enhanced
@@ -3254,7 +3257,7 @@ sap.ui.define([
3254
3257
  * @see sap.ui.model.odata.v4.lib._Requestor#request
3255
3258
  */
3256
3259
  _CollectionCache.prototype.read = function (iIndex, iLength, iPrefetchLength, oGroupLock,
3257
- fnDataRequested, bIndexIsSkip) {
3260
+ fnDataRequested, bIndexIsSkip, fnSeparateReceived) {
3258
3261
  var iCreatedPersisted = 0,
3259
3262
  oElement,
3260
3263
  aElementsRange,
@@ -3275,7 +3278,7 @@ sap.ui.define([
3275
3278
  if (oPromise) {
3276
3279
  return oPromise.then(function () {
3277
3280
  return that.read(iIndex, iLength, iPrefetchLength, oGroupLock, fnDataRequested,
3278
- bIndexIsSkip);
3281
+ bIndexIsSkip, fnSeparateReceived);
3279
3282
  });
3280
3283
  }
3281
3284
 
@@ -3316,7 +3319,7 @@ sap.ui.define([
3316
3319
 
3317
3320
  aReadIntervals.forEach(function (oInterval) {
3318
3321
  that.requestElements(oInterval.start, oInterval.end, oGroupLock.getUnlockedCopy(),
3319
- iTransientElements, fnDataRequested);
3322
+ iTransientElements, fnDataRequested, fnSeparateReceived);
3320
3323
  fnDataRequested = undefined;
3321
3324
  });
3322
3325
 
@@ -3484,6 +3487,9 @@ sap.ui.define([
3484
3487
  * The number of transient elements within the given group
3485
3488
  * @param {function} [fnDataRequested]
3486
3489
  * The function is called when the back-end requests have been sent.
3490
+ * @param {function} [fnSeparateReceived]
3491
+ * The function is called for each completed separate property request; may be omitted only if
3492
+ * there are no separate properties
3487
3493
  * @returns {sap.ui.base.SyncPromise}
3488
3494
  * A promise which is resolved without a defined result when the request is finished and
3489
3495
  * rejected in case of error; if the request has been obsoleted by a {@link #reset} the error
@@ -3494,7 +3500,7 @@ sap.ui.define([
3494
3500
  * @private
3495
3501
  */
3496
3502
  _CollectionCache.prototype.requestElements = function (iStart, iEnd, oGroupLock,
3497
- iTransientElements, fnDataRequested) {
3503
+ iTransientElements, fnDataRequested, fnSeparateReceived) {
3498
3504
  var oPromise,
3499
3505
  oReadRequest = {
3500
3506
  iEnd : iEnd,
@@ -3544,7 +3550,7 @@ sap.ui.define([
3544
3550
  that.aReadRequests.splice(that.aReadRequests.indexOf(oReadRequest), 1);
3545
3551
  });
3546
3552
 
3547
- this.requestSeparateProperties(iStart, iEnd, oPromise);
3553
+ this.requestSeparateProperties(iStart, iEnd, oPromise, fnSeparateReceived);
3548
3554
 
3549
3555
  // Note: oPromise MUST be a SyncPromise for performance reasons, see SyncPromise#all
3550
3556
  this.fill(oPromise, iStart, iEnd);
@@ -3560,46 +3566,61 @@ sap.ui.define([
3560
3566
  * @param {number} iEnd
3561
3567
  * The index after the last element
3562
3568
  * @param {sap.ui.base.SyncPromise} oMainPromise
3563
- * A promise which is resolved when the main request is finished
3569
+ * A promise which is resolved when the main request is finished; the caller must take care of
3570
+ * error handling
3571
+ * @param {function} [fnSeparateReceived]
3572
+ * The function is called for each completed separate property request; may be omitted only if
3573
+ * there are no separate properties
3564
3574
  * @returns {Promise<void>}
3565
3575
  * A promise which is resolved without a defined result at no defined point in time
3566
3576
  *
3567
3577
  * @private
3568
3578
  */
3569
3579
  _CollectionCache.prototype.requestSeparateProperties = async function (iStart, iEnd,
3570
- oMainPromise) {
3580
+ oMainPromise, fnSeparateReceived) {
3571
3581
  if (!this.aSeparateProperties.length) {
3572
3582
  return;
3573
3583
  }
3574
3584
 
3575
3585
  // types are needed for selecting the key properties, see #getQueryString called by
3576
3586
  // #getResourcePathWithQuery
3577
- const oTypes = await this.fetchTypes();
3587
+ const mTypeForMetaPath = await this.fetchTypes();
3578
3588
  const oReadRange = {start : iStart, end : iEnd};
3579
- const aRequestPromises = this.aSeparateProperties.map((sProperty) => {
3580
- this.mSeparateProperty2ReadRequest[sProperty].push(oReadRange);
3581
- return this.oRequestor.request("GET",
3582
- this.getResourcePathWithQuery(iStart, iEnd, sProperty),
3583
- this.oRequestor.lockGroup("$single", this));
3584
- });
3589
+ this.aSeparateProperties.forEach(async (sProperty) => {
3590
+ try {
3591
+ this.mSeparateProperty2ReadRequest[sProperty].push(oReadRange);
3592
+ const oResult = await this.oRequestor.request("GET",
3593
+ this.getResourcePathWithQuery(iStart, iEnd, sProperty),
3594
+ this.oRequestor.lockGroup("$single", this));
3595
+
3596
+ let bMainFailed;
3597
+ await oMainPromise.catch(() => { /* handled by caller */
3598
+ bMainFailed = true;
3599
+ });
3585
3600
 
3586
- await oMainPromise;
3587
- aRequestPromises.forEach(async (oRequestPromise, i) => {
3588
- const oResult = await oRequestPromise;
3589
- const sProperty = this.aSeparateProperties[i];
3590
- const iRangeIndex = this.mSeparateProperty2ReadRequest[sProperty].indexOf(oReadRange);
3591
- if (iRangeIndex < 0) { // stop import after #reset
3592
- return;
3593
- }
3594
- this.mSeparateProperty2ReadRequest[sProperty].splice(iRangeIndex, 1);
3595
- this.visitResponse(oResult, oTypes, undefined, undefined, iStart);
3596
- for (const oSeparateData of oResult.value) {
3597
- const sPredicate = _Helper.getPrivateAnnotation(oSeparateData, "predicate");
3598
- const oElement = this.aElements.$byPredicate[sPredicate];
3599
- if (oElement) {
3600
- _Helper.updateSelected(this.mChangeListeners, sPredicate, oElement,
3601
- oSeparateData, [sProperty]);
3601
+ const iIndex = this.mSeparateProperty2ReadRequest[sProperty].indexOf(oReadRange);
3602
+ if (iIndex < 0) { // stop import after #reset
3603
+ return;
3604
+ }
3605
+
3606
+ this.mSeparateProperty2ReadRequest[sProperty].splice(iIndex, 1);
3607
+ if (bMainFailed) {
3608
+ return;
3609
+ }
3610
+
3611
+ this.visitResponse(oResult, mTypeForMetaPath, undefined, undefined, iStart);
3612
+ for (const oSeparateData of oResult.value) {
3613
+ const sPredicate = _Helper.getPrivateAnnotation(oSeparateData, "predicate");
3614
+ const oElement = this.aElements.$byPredicate[sPredicate];
3615
+ if (oElement) {
3616
+ _Helper.updateSelected(this.mChangeListeners, sPredicate, oElement,
3617
+ oSeparateData, [sProperty]);
3618
+ }
3602
3619
  }
3620
+ fnSeparateReceived(sProperty, iStart, iEnd);
3621
+ } catch (oError) {
3622
+ // do not clean up mSeparateProperty2ReadRequest to avoid late property requests
3623
+ fnSeparateReceived(sProperty, iStart, iEnd, oError);
3603
3624
  }
3604
3625
  });
3605
3626
  };
@@ -30,17 +30,20 @@ sap.ui.define([
30
30
  * is deleted(!) after the first <code>read</code> for a metadata document.
31
31
  * @param {boolean} [bWithCredentials]
32
32
  * Whether the XHR should be called with <code>withCredentials</code>
33
+ * @param {function} fnGetOrCreateRetryAfterPromise
34
+ * A function that returns or creates the "Retry-After" promise
33
35
  * @returns {object}
34
36
  * A new MetadataRequestor object
35
37
  */
36
38
  create : function (mHeaders, sODataVersion, bIgnoreAnnotationsFromMetadata, mQueryParams,
37
- bWithCredentials) {
39
+ bWithCredentials, fnGetOrCreateRetryAfterPromise) {
38
40
  var mUrl2Promise = {},
39
41
  sQuery = _Helper.buildQuery(mQueryParams);
40
42
 
41
43
  return {
42
44
  /**
43
- * Reads a metadata document from the given URL.
45
+ * Reads a metadata document from the given URL, taking care of "Retry-After".
46
+ *
44
47
  * @param {string} sUrl
45
48
  * The URL of a metadata document, it must not contain a query string or a
46
49
  * fragment part
@@ -86,38 +89,53 @@ sap.ui.define([
86
89
  delete mUrl2Promise[sUrl];
87
90
  } else {
88
91
  oPromise = new Promise(function (fnResolve, fnReject) {
89
- const oAjaxSettings = {
90
- method : "GET",
91
- headers : mHeaders
92
- };
93
- if (bWithCredentials) {
94
- oAjaxSettings.xhrFields = {withCredentials : true};
95
- }
92
+ function send() {
93
+ const oAjaxSettings = {
94
+ method : "GET",
95
+ headers : mHeaders
96
+ };
97
+ if (bWithCredentials) {
98
+ oAjaxSettings.xhrFields = {withCredentials : true};
99
+ }
100
+ jQuery.ajax(bAnnotations ? sUrl : sUrl + sQuery, oAjaxSettings)
101
+ .then(function (oData, _sTextStatus, jqXHR) {
102
+ var sDate = jqXHR.getResponseHeader("Date"),
103
+ sETag = jqXHR.getResponseHeader("ETag"),
104
+ oJSON = {$XML : oData},
105
+ sLastModified = jqXHR.getResponseHeader("Last-Modified");
96
106
 
97
- jQuery.ajax(bAnnotations ? sUrl : sUrl + sQuery, oAjaxSettings)
98
- .then(function (oData, _sTextStatus, jqXHR) {
99
- var sDate = jqXHR.getResponseHeader("Date"),
100
- sETag = jqXHR.getResponseHeader("ETag"),
101
- oJSON = {$XML : oData},
102
- sLastModified = jqXHR.getResponseHeader("Last-Modified");
107
+ if (sDate) {
108
+ oJSON.$Date = sDate;
109
+ }
110
+ if (sETag) {
111
+ oJSON.$ETag = sETag;
112
+ }
113
+ if (sLastModified) {
114
+ oJSON.$LastModified = sLastModified;
115
+ }
116
+ fnResolve(oJSON);
117
+ }, function (jqXHR) {
118
+ var oError
119
+ = _Helper.createError(jqXHR, "Could not load metadata");
103
120
 
104
- if (sDate) {
105
- oJSON.$Date = sDate;
106
- }
107
- if (sETag) {
108
- oJSON.$ETag = sETag;
109
- }
110
- if (sLastModified) {
111
- oJSON.$LastModified = sLastModified;
112
- }
113
- fnResolve(oJSON);
114
- }, function (jqXHR, _sTextStatus, _sErrorMessage) {
115
- var oError = _Helper.createError(jqXHR, "Could not load metadata");
121
+ if (jqXHR.status === 503
122
+ && jqXHR.getResponseHeader("Retry-After")
123
+ && fnGetOrCreateRetryAfterPromise(oError)) {
124
+ fnGetOrCreateRetryAfterPromise().then(send, fnReject);
125
+ } else {
126
+ Log.error("GET " + sUrl, oError.message,
127
+ "sap.ui.model.odata.v4.lib._MetadataRequestor");
128
+ fnReject(oError);
129
+ }
130
+ });
131
+ }
116
132
 
117
- Log.error("GET " + sUrl, oError.message,
118
- "sap.ui.model.odata.v4.lib._MetadataRequestor");
119
- fnReject(oError);
120
- });
133
+ const oRetryAfterPromise = fnGetOrCreateRetryAfterPromise();
134
+ if (oRetryAfterPromise) {
135
+ oRetryAfterPromise.then(send, fnReject);
136
+ } else {
137
+ send();
138
+ }
121
139
  if (!bAnnotations
122
140
  && mQueryParams && "sap-context-token" in mQueryParams) {
123
141
  delete mQueryParams["sap-context-token"];
@@ -91,7 +91,6 @@ sap.ui.define([
91
91
  this.oModelInterface = oModelInterface;
92
92
  this.oOptimisticBatch = null; // optimistic batch processing off
93
93
  this.sQueryParams = _Helper.buildQuery(mQueryParams); // Used for $batch and CSRF token only
94
- this.oRetryAfterPromise = null;
95
94
  this.mRunningChangeRequests = {}; // map from group ID to a SyncPromise[]
96
95
  this.iSessionTimer = 0;
97
96
  this.iSerialNumber = 0;
@@ -2082,26 +2081,9 @@ sap.ui.define([
2082
2081
  send(true);
2083
2082
  }, fnReject);
2084
2083
  } else if (jqXHR.status === 503 && jqXHR.getResponseHeader("Retry-After")
2085
- && (that.oRetryAfterPromise
2086
- || that.oModelInterface.getRetryAfterHandler())) {
2087
- if (!that.oRetryAfterPromise) {
2088
- const oRetryAfterError = _Helper.createError(jqXHR, "");
2089
- that.oRetryAfterPromise = that.oModelInterface.getRetryAfterHandler()(
2090
- oRetryAfterError);
2091
- that.oRetryAfterPromise.finally(() => {
2092
- that.oRetryAfterPromise = null;
2093
- }).catch(() => { /* catch is only needed due to finally */ });
2094
- that.oRetryAfterPromise.catch((oError) => {
2095
- // own error reason is not reported to the message model
2096
- if (oError === oRetryAfterError) {
2097
- that.oModelInterface
2098
- .reportError(oError.message, sClassName, oError);
2099
- } else {
2100
- oError.$reported = true;
2101
- }
2102
- });
2103
- }
2104
- that.oRetryAfterPromise.then(send, fnReject);
2084
+ && that.oModelInterface.getOrCreateRetryAfterPromise(
2085
+ _Helper.createError(jqXHR, ""))) {
2086
+ that.oModelInterface.getOrCreateRetryAfterPromise().then(send, fnReject);
2105
2087
  } else {
2106
2088
  sMessage = "Communication error";
2107
2089
  if (sContextId) {
@@ -2121,8 +2103,9 @@ sap.ui.define([
2121
2103
  });
2122
2104
  }
2123
2105
 
2124
- if (that.oRetryAfterPromise) {
2125
- that.oRetryAfterPromise.then(send, fnReject);
2106
+ const oRetryAfterPromise = that.oModelInterface.getOrCreateRetryAfterPromise();
2107
+ if (oRetryAfterPromise) {
2108
+ oRetryAfterPromise.then(send, fnReject);
2126
2109
  } else if (that.oSecurityTokenPromise && sMethod !== "GET") {
2127
2110
  that.oSecurityTokenPromise.then(send);
2128
2111
  } else {
@@ -2337,13 +2320,12 @@ sap.ui.define([
2337
2320
  * @param {function} oModelInterface.getOptimisticBatchEnabler
2338
2321
  * A function that returns a callback function which controls the optimistic batch handling,
2339
2322
  * see also {@link sap.ui.model.odata.v4.ODataModel#setOptimisticBatchEnabler}
2323
+ * @param {function} oModelInterface.getOrCreateRetryAfterPromise
2324
+ * A function that returns or creates the "Retry-After" promise
2340
2325
  * @param {function} oModelInterface.getReporter
2341
2326
  * A catch handler function expecting an <code>Error</code> instance. This function will call
2342
2327
  * {@link sap.ui.model.odata.v4.ODataModel#reportError} if the error has not been reported
2343
2328
  * yet
2344
- * @param {function} oModelInterface.getRetryAfterHandler
2345
- * A function that returns the "Retry-After" handler,
2346
- * see also {@link sap.ui.model.odata.v4.ODataModel#setRetryAfterHandler}
2347
2329
  * @param {function():boolean} oModelInterface.isIgnoreETag
2348
2330
  * Tells whether an entity's ETag should be actively ignored (If-Match:*) for PATCH requests.
2349
2331
  * @param {function} oModelInterface.onCreateGroup
@@ -227,7 +227,7 @@ sap.ui.define([
227
227
  *
228
228
  * @extends sap.ui.model.Model
229
229
  * @public
230
- * @version 1.130.0
230
+ * @version 1.131.0
231
231
  */
232
232
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
233
233
 
@@ -19,7 +19,7 @@ sap.ui.define(["sap/ui/core/Lib", 'sap/ui/model/SimpleType', 'sap/ui/model/Forma
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.130.0
22
+ * @version 1.131.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.model.CompositeType
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.130.0
37
+ * @version 1.131.0
38
38
  *
39
39
  * @public
40
40
  * @param {object} [oFormatOptions]
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @extends sap.ui.model.SimpleType
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.130.0
30
+ * @version 1.131.0
31
31
  *
32
32
  * @public
33
33
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.CompositeType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.130.0
28
+ * @version 1.131.0
29
29
  *
30
30
  * @alias sap.ui.model.type.DateInterval
31
31
  * @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.130.0
22
+ * @version 1.131.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.130.0
22
+ * @version 1.131.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}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.SimpleType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.130.0
28
+ * @version 1.131.0
29
29
  *
30
30
  * @public
31
31
  * @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.130.0
29
+ * @version 1.131.0
30
30
  *
31
31
  * @public
32
32
  * @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.130.0
29
+ * @version 1.131.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions]
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.SimpleType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.130.0
28
+ * @version 1.131.0
29
29
  *
30
30
  * @alias sap.ui.model.type.String
31
31
  * @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.130.0
22
+ * @version 1.131.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.130.0
22
+ * @version 1.131.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}.
@@ -49,7 +49,7 @@ sap.ui.define([
49
49
  *
50
50
  *
51
51
  * @author SAP SE
52
- * @version 1.130.0
52
+ * @version 1.131.0
53
53
  *
54
54
  * @public
55
55
  * @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.130.0
50
+ * @version 1.131.0
51
51
  *
52
52
  * @param {XMLDocument|string} oData
53
53
  * Either the URL where to load the XML from or an XML document
@@ -53,7 +53,7 @@ sap.ui.define(['sap/ui/core/Core', "sap/ui/VersionInfo", "sap/ui/core/Lib"],
53
53
  * @namespace
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.130.0
56
+ * @version 1.131.0
57
57
  *
58
58
  * @public
59
59
  * @since 1.48.0
@@ -30,7 +30,7 @@ sap.ui.define([ 'sap/ui/core/ElementRegistry', 'sap/ui/core/Control', "sap/ui/qu
30
30
  * @namespace
31
31
  *
32
32
  * @author SAP SE
33
- * @version 1.130.0
33
+ * @version 1.131.0
34
34
  *
35
35
  * @public
36
36
  * @since 1.48.0
@@ -785,7 +785,7 @@ sap.ui.define(
785
785
  * Executes the definition on the given or previously defined Opa5 instance.
786
786
  *
787
787
  * @param {sap.ui.test.Opa5} [oOpaInstance] the Opa5 instance to call {@link sap.ui.test.Opa5#waitFor} on
788
- * @returns {sap.ui.test.Opa5.Chain} an object extending a jQuery promise, corresponding to the result of {@link sap.ui.test.Opa5#waitFor}
788
+ * @returns {sap.ui.test.Opa5} an object extending a jQuery promise, corresponding to the result of {@link sap.ui.test.Opa5#waitFor}
789
789
  * @public
790
790
  */
791
791
  OpaBuilder.prototype.execute = function (oOpaInstance) {
@@ -193,6 +193,27 @@ sap.ui.define([
193
193
  }
194
194
  });
195
195
 
196
+ const fnOriginalWithResolvers = OriginalPromise.withResolvers;
197
+ WrappedPromise.withResolvers = function () {
198
+ const { promise, resolve, reject, ...rest } = fnOriginalWithResolvers.apply(this, arguments);
199
+ const mPendingPromise = _trackPromise(""); // withResolvers API does not take any arguments
200
+ const fnWrappedResolve = function wrappedResolve () {
201
+ _untrackPromise(mPendingPromise);
202
+ resolve.apply(this, arguments);
203
+ };
204
+ const fnWrappedReject = function wrappedReject() {
205
+ _untrackPromise(mPendingPromise);
206
+ reject.apply(this, arguments);
207
+ };
208
+
209
+ return {
210
+ promise,
211
+ resolve: fnWrappedResolve,
212
+ reject: fnWrappedReject,
213
+ ...rest
214
+ };
215
+ };
216
+
196
217
  // overwrite the global Promise object
197
218
  window.Promise = WrappedPromise;
198
219
 
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.base.Object
27
27
  * @abstract
28
28
  * @author SAP SE
29
- * @version 1.130.0
29
+ * @version 1.131.0
30
30
  * @since 1.100
31
31
  */
32
32
  return BaseObject.extend("sap.ui.test.generic.TestBase", {
@@ -32,7 +32,14 @@ sap.ui.define([
32
32
  }
33
33
 
34
34
  function getDefaultSuiteName() {
35
- var sName = sap.ui.loader._.guessResourceName(location.href);
35
+ var sName = sap.ui.loader._.guessResourceName(window.location.href);
36
+
37
+ // special handling for karma runner: paths starting with /base/test/ should be /base/test-resources/
38
+ if ( sName == null && window.location.pathname.startsWith("/base/test/") ) {
39
+ const altPath = window.location.origin + window.location.pathname.replace("/base/test/", "/base/test-resources/");
40
+ sName = sap.ui.loader._.guessResourceName(altPath);
41
+ }
42
+
36
43
  return sName ? sName.replace(/\.html$/, "") : null;
37
44
  }
38
45
 
@@ -134,7 +134,7 @@
134
134
 
135
135
  render(sLinkHTML).then(function() {
136
136
  // Note: we use a 0.1 second timer resolution so that the blocking div disappears quickly
137
- var count = 10 * (parseInt(utils.getAttribute("data-sap-ui-delay")) || 2) + 9;
137
+ var count = 10 * (parseInt(utils.getAttribute("data-sap-ui-delay")) || -1) + 9;
138
138
 
139
139
  function countDown() {
140
140
  if ( count === 6 ) {