@openui5/sap.ui.core 1.93.3 → 1.96.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.eslintrc.json +13 -2
  2. package/.reuse/dep5 +6 -11
  3. package/THIRDPARTY.txt +10 -16
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +5 -2
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +1 -1
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +3 -3
  10. package/src/jquery.sap.stubs.js +2 -1
  11. package/src/jquery.sap.trace.js +2 -1
  12. package/src/sap/base/i18n/ResourceBundle.js +6 -2
  13. package/src/sap/base/strings/whitespaceReplacer.js +52 -0
  14. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  15. package/src/sap/base/util/restricted/_castArray.js +1 -1
  16. package/src/sap/base/util/restricted/_compact.js +1 -1
  17. package/src/sap/base/util/restricted/_curry.js +1 -1
  18. package/src/sap/base/util/restricted/_debounce.js +1 -1
  19. package/src/sap/base/util/restricted/_difference.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  21. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_flatten.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_intersection.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  30. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  32. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  33. package/src/sap/base/util/restricted/_isNil.js +1 -1
  34. package/src/sap/base/util/restricted/_max.js +1 -1
  35. package/src/sap/base/util/restricted/_merge.js +1 -1
  36. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  37. package/src/sap/base/util/restricted/_min.js +1 -1
  38. package/src/sap/base/util/restricted/_omit.js +1 -1
  39. package/src/sap/base/util/restricted/_pick.js +1 -1
  40. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  41. package/src/sap/base/util/restricted/_throttle.js +1 -1
  42. package/src/sap/base/util/restricted/_toArray.js +1 -1
  43. package/src/sap/base/util/restricted/_union.js +1 -1
  44. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  45. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  46. package/src/sap/base/util/restricted/_uniq.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  48. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  49. package/src/sap/base/util/restricted/_without.js +1 -1
  50. package/src/sap/base/util/restricted/_xor.js +1 -1
  51. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  52. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  54. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  55. package/src/sap/ui/Device.js +37 -42
  56. package/src/sap/ui/Global.js +8 -7
  57. package/src/sap/ui/base/DataType.js +14 -8
  58. package/src/sap/ui/base/Event.js +1 -1
  59. package/src/sap/ui/base/EventProvider.js +1 -1
  60. package/src/sap/ui/base/ExpressionParser.js +9 -6
  61. package/src/sap/ui/base/Interface.js +3 -49
  62. package/src/sap/ui/base/ManagedObject.js +12 -7
  63. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  64. package/src/sap/ui/base/Metadata.js +1 -1
  65. package/src/sap/ui/base/Object.js +49 -4
  66. package/src/sap/ui/base/ObjectPool.js +1 -1
  67. package/src/sap/ui/base/syncXHRFix.js +2 -1
  68. package/src/sap/ui/core/.library +5 -5
  69. package/src/sap/ui/core/AppCacheBuster.js +4 -4
  70. package/src/sap/ui/core/BusyIndicator.js +1 -11
  71. package/src/sap/ui/core/Component.js +300 -140
  72. package/src/sap/ui/core/ComponentContainer.js +24 -8
  73. package/src/sap/ui/core/ComponentMetadata.js +14 -3
  74. package/src/sap/ui/core/ComponentSupport.js +1 -1
  75. package/src/sap/ui/core/Configuration.js +67 -31
  76. package/src/sap/ui/core/Control.js +1 -1
  77. package/src/sap/ui/core/Core.js +103 -25
  78. package/src/sap/ui/core/CustomData.js +1 -1
  79. package/src/sap/ui/core/CustomizingConfiguration.js +35 -260
  80. package/src/sap/ui/core/DeclarativeSupport.js +3 -2
  81. package/src/sap/ui/core/Element.js +1 -1
  82. package/src/sap/ui/core/ElementMetadata.js +4 -2
  83. package/src/sap/ui/core/EnabledPropagator.js +91 -73
  84. package/src/sap/ui/core/EventBus.js +1 -1
  85. package/src/sap/ui/core/ExtensionPoint.js +7 -14
  86. package/src/sap/ui/core/Fragment.js +30 -32
  87. package/src/sap/ui/core/HTML.js +1 -1
  88. package/src/sap/ui/core/History.js +1 -1
  89. package/src/sap/ui/core/Icon.js +7 -8
  90. package/src/sap/ui/core/IconPool.js +26 -1097
  91. package/src/sap/ui/core/IconRenderer.js +6 -6
  92. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  93. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  94. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  95. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  96. package/src/sap/ui/core/InvisibleText.js +1 -1
  97. package/src/sap/ui/core/Item.js +1 -1
  98. package/src/sap/ui/core/LabelEnablement.js +1 -1
  99. package/src/sap/ui/core/LayoutData.js +1 -1
  100. package/src/sap/ui/core/ListItem.js +1 -1
  101. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  102. package/src/sap/ui/core/Locale.js +26 -4
  103. package/src/sap/ui/core/LocaleData.js +1 -1
  104. package/src/sap/ui/core/Manifest.js +4 -61
  105. package/src/sap/ui/core/Message.js +1 -1
  106. package/src/sap/ui/core/Patcher.js +27 -3
  107. package/src/sap/ui/core/Placeholder.js +28 -15
  108. package/src/sap/ui/core/RenderManager.js +36 -6
  109. package/src/sap/ui/core/Renderer.js +13 -3
  110. package/src/sap/ui/core/ResizeHandler.js +1 -1
  111. package/src/sap/ui/core/ScrollBar.js +2 -2
  112. package/src/sap/ui/core/SeparatorItem.js +1 -1
  113. package/src/sap/ui/core/ShortcutHintsMixin.js +14 -7
  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 +42 -16
  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 +2 -2
  122. package/src/sap/ui/core/XMLCompositeMetadata.js +2 -2
  123. package/src/sap/ui/core/XMLTemplateProcessor.js +116 -41
  124. package/src/sap/ui/core/_IconRegistry.js +1148 -0
  125. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  126. package/src/sap/ui/core/delegate/ScrollEnablement.js +6 -3
  127. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  128. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  129. package/src/sap/ui/core/dnd/DragInfo.js +2 -2
  130. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  131. package/src/sap/ui/core/format/NumberFormat.js +16 -1
  132. package/src/sap/ui/core/hyphenation/Hyphenation.js +73 -221
  133. package/src/sap/ui/core/hyphenation/HyphenationTestingWords.js +11 -10
  134. package/src/sap/ui/core/library.js +3 -3
  135. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  136. package/src/sap/ui/core/message/Message.js +1 -1
  137. package/src/sap/ui/core/message/MessageManager.js +13 -15
  138. package/src/sap/ui/core/message/MessageParser.js +1 -1
  139. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  140. package/src/sap/ui/core/messagebundle_de.properties +1 -1
  141. package/src/sap/ui/core/messagebundle_fr.properties +1 -1
  142. package/src/sap/ui/core/messagebundle_it.properties +1 -1
  143. package/src/sap/ui/core/messagebundle_pl.properties +1 -1
  144. package/src/sap/ui/core/messagebundle_th.properties +2 -2
  145. package/src/sap/ui/core/mvc/Controller.js +38 -19
  146. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +30 -32
  147. package/src/sap/ui/core/mvc/ControllerMetadata.js +18 -18
  148. package/src/sap/ui/core/mvc/HTMLView.js +2 -2
  149. package/src/sap/ui/core/mvc/JSONView.js +2 -2
  150. package/src/sap/ui/core/mvc/JSView.js +2 -2
  151. package/src/sap/ui/core/mvc/TemplateView.js +2 -2
  152. package/src/sap/ui/core/mvc/View.js +58 -85
  153. package/src/sap/ui/core/mvc/XMLView.js +2 -2
  154. package/src/sap/ui/core/mvc/XMLViewRenderer.js +17 -20
  155. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  156. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  157. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  158. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  159. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  160. package/src/sap/ui/core/routing/History.js +10 -2
  161. package/src/sap/ui/core/routing/Router.js +8 -1
  162. package/src/sap/ui/core/routing/Target.js +13 -0
  163. package/src/sap/ui/core/routing/Targets.js +13 -2
  164. package/src/sap/ui/core/routing/async/Route.js +1 -1
  165. package/src/sap/ui/core/routing/async/Target.js +353 -259
  166. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  167. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  168. package/src/sap/ui/core/service/Service.js +1 -1
  169. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  170. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  171. package/src/sap/ui/core/support/BootSupportTool.js +11 -0
  172. package/src/sap/ui/core/support/InteractionTree.css +4 -0
  173. package/src/sap/ui/core/support/Plugin.js +1 -1
  174. package/src/sap/ui/core/support/Support.js +1 -1
  175. package/src/sap/ui/core/support/ViewInfo.css +599 -0
  176. package/src/sap/ui/core/support/controls/InteractionTree.js +352 -222
  177. package/src/sap/ui/core/support/controls/ObjectViewer.js +3 -41
  178. package/src/sap/ui/core/support/controls/TimelineOverview.js +49 -24
  179. package/src/sap/ui/core/support/controls/TreeViewer.js +12 -58
  180. package/src/sap/ui/core/support/plugins/ControlTree.js +59 -68
  181. package/src/sap/ui/core/support/plugins/Debugging.js +9 -11
  182. package/src/sap/ui/core/support/plugins/Interaction.js +2 -2
  183. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  184. package/src/sap/ui/core/support/plugins/Performance.js +147 -75
  185. package/src/sap/ui/core/support/plugins/Selector.js +19 -24
  186. package/src/sap/ui/core/support/plugins/TechInfo.js +5 -5
  187. package/src/sap/ui/core/support/plugins/Trace.js +95 -32
  188. package/src/sap/ui/core/support/plugins/ViewInfo.js +9 -73
  189. package/src/sap/ui/core/support/support.css +109 -14
  190. package/src/sap/ui/core/support/support.html +6 -2
  191. package/src/sap/ui/core/support/techinfo/TechnicalInfo.fragment.xml +1 -0
  192. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +149 -72
  193. package/src/sap/ui/core/themes/base/Icon.less +9 -0
  194. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  195. package/src/sap/ui/core/theming/Parameters.js +6 -4
  196. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  197. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  198. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  199. package/src/sap/ui/core/tmpl/Template.js +10 -28
  200. package/src/sap/ui/core/tmpl/TemplateControl.js +4 -4
  201. package/src/sap/ui/core/tmpl/_parsePath.js +35 -0
  202. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  203. package/src/sap/ui/core/util/DraftEnabledMockServer.js +9 -4
  204. package/src/sap/ui/core/util/Export.js +1 -1
  205. package/src/sap/ui/core/util/ExportCell.js +1 -1
  206. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  207. package/src/sap/ui/core/util/ExportRow.js +1 -1
  208. package/src/sap/ui/core/util/ExportType.js +1 -1
  209. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  210. package/src/sap/ui/core/util/File.js +1 -1
  211. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  212. package/src/sap/ui/core/util/MockServer.js +5 -5
  213. package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +3 -2
  214. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  215. package/src/sap/ui/core/util/XMLPreprocessor.js +11 -12
  216. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +136 -63
  217. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +170 -153
  218. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +424 -293
  219. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  220. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  221. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  222. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  223. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  224. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  225. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  226. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  227. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  228. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  229. package/src/sap/ui/debug/ControlTree.js +10 -4
  230. package/src/sap/ui/debug/DebugEnv.js +3 -4
  231. package/src/sap/ui/debug/Highlighter.js +8 -2
  232. package/src/sap/ui/debug/PropertyList.css +55 -0
  233. package/src/sap/ui/debug/PropertyList.js +111 -182
  234. package/src/sap/ui/model/Binding.js +174 -118
  235. package/src/sap/ui/model/ClientContextBinding.js +1 -1
  236. package/src/sap/ui/model/ClientListBinding.js +1 -3
  237. package/src/sap/ui/model/ClientModel.js +4 -4
  238. package/src/sap/ui/model/ClientPropertyBinding.js +4 -2
  239. package/src/sap/ui/model/ClientTreeBinding.js +15 -9
  240. package/src/sap/ui/model/ClientTreeBindingAdapter.js +28 -23
  241. package/src/sap/ui/model/CompositeBinding.js +98 -77
  242. package/src/sap/ui/model/CompositeDataState.js +2 -2
  243. package/src/sap/ui/model/CompositeType.js +2 -2
  244. package/src/sap/ui/model/Context.js +4 -2
  245. package/src/sap/ui/model/ContextBinding.js +6 -14
  246. package/src/sap/ui/model/DataState.js +2 -2
  247. package/src/sap/ui/model/Filter.js +255 -53
  248. package/src/sap/ui/model/FilterOperator.js +1 -1
  249. package/src/sap/ui/model/FilterProcessor.js +27 -17
  250. package/src/sap/ui/model/FilterType.js +1 -1
  251. package/src/sap/ui/model/ListBinding.js +180 -117
  252. package/src/sap/ui/model/MetaModel.js +4 -9
  253. package/src/sap/ui/model/Model.js +345 -294
  254. package/src/sap/ui/model/PropertyBinding.js +92 -58
  255. package/src/sap/ui/model/SelectionModel.js +2 -2
  256. package/src/sap/ui/model/SimpleType.js +2 -2
  257. package/src/sap/ui/model/Sorter.js +1 -1
  258. package/src/sap/ui/model/SorterProcessor.js +1 -1
  259. package/src/sap/ui/model/StaticBinding.js +1 -1
  260. package/src/sap/ui/model/TreeAutoExpandMode.js +2 -2
  261. package/src/sap/ui/model/TreeBinding.js +1 -1
  262. package/src/sap/ui/model/TreeBindingAdapter.js +251 -100
  263. package/src/sap/ui/model/TreeBindingCompatibilityAdapter.js +16 -9
  264. package/src/sap/ui/model/TreeBindingUtils.js +1 -0
  265. package/src/sap/ui/model/Type.js +1 -1
  266. package/src/sap/ui/model/analytics/AnalyticalBinding.js +8 -4
  267. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +1 -1
  268. package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +1 -1
  269. package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
  270. package/src/sap/ui/model/analytics/ODataModelAdapter.js +1 -1
  271. package/src/sap/ui/model/analytics/odata4analytics.js +34 -25
  272. package/src/sap/ui/model/base/ManagedObjectModel.js +4 -0
  273. package/src/sap/ui/model/json/JSONListBinding.js +8 -5
  274. package/src/sap/ui/model/json/JSONModel.js +24 -15
  275. package/src/sap/ui/model/json/JSONPropertyBinding.js +4 -3
  276. package/src/sap/ui/model/json/JSONTreeBinding.js +1 -1
  277. package/src/sap/ui/model/message/MessageListBinding.js +6 -3
  278. package/src/sap/ui/model/message/MessageModel.js +23 -15
  279. package/src/sap/ui/model/message/MessagePropertyBinding.js +2 -2
  280. package/src/sap/ui/model/odata/AnnotationHelper.js +1 -1
  281. package/src/sap/ui/model/odata/AnnotationParser.js +1 -1
  282. package/src/sap/ui/model/odata/CountMode.js +1 -1
  283. package/src/sap/ui/model/odata/Filter.js +1 -1
  284. package/src/sap/ui/model/odata/ODataAnnotations.js +2 -2
  285. package/src/sap/ui/model/odata/ODataContextBinding.js +1 -1
  286. package/src/sap/ui/model/odata/ODataListBinding.js +1 -1
  287. package/src/sap/ui/model/odata/ODataMessageParser.js +2 -2
  288. package/src/sap/ui/model/odata/ODataMetaModel.js +5 -3
  289. package/src/sap/ui/model/odata/ODataMetadata.js +2 -2
  290. package/src/sap/ui/model/odata/ODataModel.js +8 -7
  291. package/src/sap/ui/model/odata/ODataPropertyBinding.js +1 -1
  292. package/src/sap/ui/model/odata/ODataTreeBinding.js +65 -33
  293. package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +1 -1
  294. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +2 -2
  295. package/src/sap/ui/model/odata/ODataUtils.js +13 -11
  296. package/src/sap/ui/model/odata/OperationMode.js +1 -1
  297. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +1 -1
  298. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  299. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  300. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  301. package/src/sap/ui/model/odata/type/Date.js +1 -1
  302. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  303. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  304. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  305. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  306. package/src/sap/ui/model/odata/type/Double.js +1 -1
  307. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  308. package/src/sap/ui/model/odata/type/Int.js +1 -1
  309. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  310. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  311. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  312. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  313. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  314. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  315. package/src/sap/ui/model/odata/type/Single.js +1 -1
  316. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  317. package/src/sap/ui/model/odata/type/String.js +1 -1
  318. package/src/sap/ui/model/odata/type/Time.js +1 -1
  319. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  320. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  321. package/src/sap/ui/model/odata/v2/Context.js +81 -9
  322. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +3 -3
  323. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +39 -49
  324. package/src/sap/ui/model/odata/v2/ODataListBinding.js +236 -73
  325. package/src/sap/ui/model/odata/v2/ODataModel.js +314 -164
  326. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +110 -97
  327. package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +129 -0
  328. package/src/sap/ui/model/odata/v4/Context.js +6 -3
  329. package/src/sap/ui/model/odata/v4/ODataBinding.js +5 -6
  330. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +117 -40
  331. package/src/sap/ui/model/odata/v4/ODataListBinding.js +95 -15
  332. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +44 -31
  333. package/src/sap/ui/model/odata/v4/ODataModel.js +86 -78
  334. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +47 -28
  335. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -7
  336. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +10 -3
  337. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +8 -1
  338. package/src/sap/ui/model/odata/v4/lib/_Cache.js +24 -16
  339. package/src/sap/ui/model/odata/v4/lib/_Helper.js +32 -30
  340. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +52 -17
  341. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +2 -2
  342. package/src/sap/ui/model/resource/ResourceModel.js +6 -2
  343. package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
  344. package/src/sap/ui/model/type/Boolean.js +2 -2
  345. package/src/sap/ui/model/type/Currency.js +2 -2
  346. package/src/sap/ui/model/type/Date.js +9 -3
  347. package/src/sap/ui/model/type/DateInterval.js +4 -2
  348. package/src/sap/ui/model/type/DateTime.js +2 -2
  349. package/src/sap/ui/model/type/DateTimeInterval.js +2 -2
  350. package/src/sap/ui/model/type/FileSize.js +4 -2
  351. package/src/sap/ui/model/type/Float.js +4 -2
  352. package/src/sap/ui/model/type/Integer.js +4 -2
  353. package/src/sap/ui/model/type/String.js +2 -2
  354. package/src/sap/ui/model/type/Time.js +2 -2
  355. package/src/sap/ui/model/type/TimeInterval.js +2 -2
  356. package/src/sap/ui/model/type/Unit.js +14 -7
  357. package/src/sap/ui/model/xml/XMLListBinding.js +15 -9
  358. package/src/sap/ui/model/xml/XMLModel.js +70 -41
  359. package/src/sap/ui/model/xml/XMLPropertyBinding.js +4 -4
  360. package/src/sap/ui/model/xml/XMLTreeBinding.js +5 -4
  361. package/src/sap/ui/performance/trace/Interaction.js +30 -15
  362. package/src/sap/ui/performance/trace/initTraces.js +1 -1
  363. package/src/sap/ui/qunit/QUnitUtils.js +3 -2
  364. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  365. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +9 -11
  366. package/src/sap/ui/test/TestUtils.js +11 -4
  367. package/src/sap/ui/test/actions/Drag.js +6 -2
  368. package/src/sap/ui/test/actions/Drop.js +6 -2
  369. package/src/sap/ui/test/actions/EnterText.js +6 -0
  370. package/src/sap/ui/test/actions/Press.js +6 -0
  371. package/src/sap/ui/test/actions/Scroll.js +6 -0
  372. package/src/sap/ui/test/autowaiter/_resourceWaiter.js +4 -4
  373. package/src/sap/ui/test/launchers/componentLauncher.js +0 -4
  374. package/src/sap/ui/test/matchers/I18NText.js +29 -11
  375. package/src/sap/ui/test/opaQunit.js +5 -0
  376. package/src/sap/ui/thirdparty/crossroads.js +6 -4
  377. package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly.js +1196 -0
  378. package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly_Loader.js +797 -0
  379. package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.asm.js +108 -127
  380. package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.wasm +0 -0
  381. package/src/sap/ui/thirdparty/hyphenopoly/patterns/bg.hpb +0 -0
  382. package/src/sap/ui/thirdparty/hyphenopoly/patterns/ca.hpb +0 -0
  383. package/src/sap/ui/thirdparty/hyphenopoly/patterns/da.hpb +0 -0
  384. package/src/sap/ui/thirdparty/hyphenopoly/patterns/de.hpb +0 -0
  385. package/src/sap/ui/thirdparty/hyphenopoly/patterns/el-monoton.hpb +0 -0
  386. package/src/sap/ui/thirdparty/hyphenopoly/patterns/en-us.hpb +0 -0
  387. package/src/sap/ui/thirdparty/hyphenopoly/patterns/es.hpb +0 -0
  388. package/src/sap/ui/thirdparty/hyphenopoly/patterns/et.hpb +0 -0
  389. package/src/sap/ui/thirdparty/hyphenopoly/patterns/fi.hpb +0 -0
  390. package/src/sap/ui/thirdparty/hyphenopoly/patterns/fr.hpb +0 -0
  391. package/src/sap/ui/thirdparty/hyphenopoly/patterns/hi.hpb +0 -0
  392. package/src/sap/ui/thirdparty/hyphenopoly/patterns/hr.hpb +0 -0
  393. package/src/sap/ui/thirdparty/hyphenopoly/patterns/hu.hpb +0 -0
  394. package/src/sap/ui/thirdparty/hyphenopoly/patterns/it.hpb +0 -0
  395. package/src/sap/ui/thirdparty/hyphenopoly/patterns/lt.hpb +0 -0
  396. package/src/sap/ui/thirdparty/hyphenopoly/patterns/nb-no.hpb +0 -0
  397. package/src/sap/ui/thirdparty/hyphenopoly/patterns/nl.hpb +0 -0
  398. package/src/sap/ui/thirdparty/hyphenopoly/patterns/pt.hpb +0 -0
  399. package/src/sap/ui/thirdparty/hyphenopoly/patterns/ru.hpb +0 -0
  400. package/src/sap/ui/thirdparty/hyphenopoly/patterns/sl.hpb +0 -0
  401. package/src/sap/ui/thirdparty/hyphenopoly/patterns/sv.hpb +0 -0
  402. package/src/sap/ui/thirdparty/hyphenopoly/patterns/th.hpb +0 -0
  403. package/src/sap/ui/thirdparty/hyphenopoly/patterns/tr.hpb +0 -0
  404. package/src/sap/ui/thirdparty/hyphenopoly/patterns/uk.hpb +0 -0
  405. package/src/sap/ui/thirdparty/jquery.js +9 -1
  406. package/src/sap/ui/thirdparty/qunit-2.js +1 -1
  407. package/src/sap/ui/thirdparty/qunit.js +1 -1
  408. package/src/sap/ui/util/Mobile.js +2 -20
  409. package/src/sap/ui/util/Storage.js +1 -1
  410. package/src/sap/ui/util/isCrossOriginURL.js +16 -6
  411. package/src/sap-ui-core-nojQuery.js +1 -1
  412. package/src/sap-ui-core.js +1 -1
  413. package/src/sap-ui-debug.js +3 -17
  414. package/ui5.yaml +5 -2
  415. package/src/sap/ui/core/support/plugins/MessageTest.js +0 -96
  416. package/src/sap/ui/thirdparty/hyphenopoly/hyphenopoly.bundle.js +0 -860
@@ -228,7 +228,7 @@ sap.ui.define([
228
228
  * @extends sap.ui.base.ManagedObject
229
229
  * @abstract
230
230
  * @author SAP SE
231
- * @version 1.93.3
231
+ * @version 1.96.2
232
232
  * @alias sap.ui.core.Component
233
233
  * @since 1.9.2
234
234
  */
@@ -383,6 +383,64 @@ sap.ui.define([
383
383
  }
384
384
  });
385
385
 
386
+ /**
387
+ * Helper function to retrieve owner (extension) component holding the customizing configuration.
388
+ * @param {string|sap.ui.core.Component|sap.ui.base.ManagedObject} vObject Component Id, component instance or ManagedObject
389
+ * @throws {Error} If 'getExtensionComponent' function is given, but does not return an instance.
390
+ * @returns {sap.ui.core.Component|undefined} The owner component or <code>undefined</code>
391
+ */
392
+ function getCustomizingComponent(vObject) {
393
+ var oComponent, sComponentId;
394
+
395
+ if (!sap.ui.getCore().getConfiguration().getDisableCustomizing()) {
396
+ if (typeof vObject === "string") {
397
+ sComponentId = vObject;
398
+ } else if (vObject && typeof vObject.isA === "function" && !vObject.isA("sap.ui.core.Component")) {
399
+ sComponentId = Component.getOwnerIdFor(vObject);
400
+ } else {
401
+ oComponent = vObject;
402
+ }
403
+
404
+ if (sComponentId) {
405
+ oComponent = Component.get(sComponentId);
406
+ }
407
+
408
+ if (oComponent) {
409
+ if (oComponent.getExtensionComponent) {
410
+ oComponent = oComponent.getExtensionComponent();
411
+ if (!oComponent) {
412
+ throw new Error("getExtensionComponent() must return an instance.");
413
+ }
414
+ }
415
+ }
416
+ }
417
+ return oComponent;
418
+ }
419
+
420
+ /**
421
+ * @param {string|sap.ui.base.ManagedObject|sap.ui.core.Component} vObject Either Component Id, ManagedObject or component instance
422
+ * @param {object} mOptions Info object to retrieve the customizing config
423
+ * @param {object} mOptions.type Either <code>sap.ui.viewExtension</code>, <code>sap.ui.controllerReplacement</code>, <code>sap.ui.viewReplacement</code>, <code>sap.ui.viewModification</code> or <code>sap.ui.controllerExtension</code>
424
+ * @param {object} mOptions.name Name of the customizing configuration
425
+ * @param {object} [mOptions.extensionName] If type <code>sap.ui.viewExtension</code>, the extension name must be provided
426
+ * @param {object} oExtInfo Config object containing the view/fragment and extension name
427
+ * @throws {Error} If 'getExtensionComponent' function is given, but does not return an instance.
428
+ * @returns {object|undefined} Object containing the customizing config or <code>undefined</code>
429
+ * @static
430
+ * @private ui5-restricted sap.ui.core
431
+ */
432
+ Component.getCustomizing = function(vObject, mOptions) {
433
+ var sType = mOptions.type,
434
+ sPath = "/sap.ui5/extends/extensions/" + sType + "/" + mOptions.name;
435
+
436
+ if (sType === "sap.ui.viewExtensions") {
437
+ sPath += "/" + mOptions.extensionName;
438
+ }
439
+
440
+ var oComponent = getCustomizingComponent(vObject);
441
+ return oComponent ? oComponent._getManifestEntry(sPath, true) : undefined;
442
+ };
443
+
386
444
  /**
387
445
  * Returns the metadata for the Component class.
388
446
  *
@@ -803,14 +861,20 @@ sap.ui.define([
803
861
  */
804
862
  Component.prototype.getEventBus = function() {
805
863
  if (!this._oEventBus) {
806
- var sClassName = this.getMetadata().getName();
807
- Log.warning("Synchronous loading of EventBus, due to #getEventBus() call on Component '" + sClassName + "'.", "SyncXHR", null, function() {
808
- return {
809
- type: "SyncXHR",
810
- name: sClassName
811
- };
812
- });
813
- var EventBus = sap.ui.requireSync("sap/ui/core/EventBus");
864
+ var EventBus = sap.ui.require("sap/ui/core/EventBus");
865
+ if (!EventBus) {
866
+ var sClassName = this.getMetadata().getName();
867
+ Log.warning("Synchronous loading of EventBus, due to #getEventBus() call on Component '" + sClassName + "'.", "SyncXHR", null, function() {
868
+ return {
869
+ type: "SyncXHR",
870
+ name: sClassName
871
+ };
872
+ });
873
+ // We don't expect the application to use this API anymore (see Dev-Guide)
874
+ // For the application it is recommended to declare the EventBus via sap.ui.require or sap.ui.define
875
+ EventBus = sap.ui.requireSync("sap/ui/core/EventBus"); // legacy-relevant
876
+ }
877
+
814
878
  this._oEventBus = new EventBus();
815
879
 
816
880
  if (!this.isActive()) {
@@ -868,10 +932,18 @@ sap.ui.define([
868
932
  * @private
869
933
  */
870
934
  Component.prototype._initComponentModels = function(mModels, mDataSources, mCacheTokens) {
935
+ var sComponentName = this.getManifestObject().getComponentName();
871
936
 
872
- var mAllModelConfigurations = Component._createManifestModelConfigurations({
937
+ var mAllModelConfigs = Component._findManifestModelClasses({
873
938
  models: mModels,
874
939
  dataSources: mDataSources,
940
+ componentName: sComponentName
941
+ });
942
+ Component._loadManifestModelClasses(mAllModelConfigs, sComponentName);
943
+
944
+ var mAllModelConfigurations = Component._createManifestModelConfigurations({
945
+ models: mAllModelConfigs,
946
+ dataSources: mDataSources,
875
947
  component: this,
876
948
  mergeParent: true,
877
949
  cacheTokens: mCacheTokens,
@@ -892,7 +964,7 @@ sap.ui.define([
892
964
  }
893
965
 
894
966
  // create all models which are not created, yet.
895
- var mCreatedModels = Component._createManifestModels(mModelConfigurations, this.toString());
967
+ var mCreatedModels = Component._createManifestModels(mModelConfigurations, sComponentName);
896
968
  for (sModelName in mCreatedModels) {
897
969
  // keep the model instance to be able to destroy the created models on component destroy
898
970
  this._mManifestModels[sModelName] = mCreatedModels[sModelName];
@@ -1299,8 +1371,7 @@ sap.ui.define([
1299
1371
  if (mConfig.async === true) {
1300
1372
  return Component.create(mConfig);
1301
1373
  } else {
1302
- // use deprecated factory for sync use case only
1303
- return sap.ui.component(mConfig);
1374
+ return sap.ui.component(mConfig); // legacy-relevant: use deprecated factory for sync use case only
1304
1375
  }
1305
1376
  }
1306
1377
 
@@ -1367,6 +1438,102 @@ sap.ui.define([
1367
1438
 
1368
1439
  };
1369
1440
 
1441
+ Component._findManifestModelClasses = function(mOptions) {
1442
+ if (!mOptions.models) {
1443
+ // skipping model creation because of missing sap.ui5 models manifest entry
1444
+ return null;
1445
+ }
1446
+
1447
+ var mConfig = {
1448
+
1449
+ // ui5 model definitions
1450
+ models: mOptions.models,
1451
+
1452
+ // optional dataSources from "sap.app" manifest
1453
+ dataSources: mOptions.dataSources || {},
1454
+
1455
+ // to identify where the dataSources/models have been originally defined
1456
+ origin: {
1457
+ dataSources: {},
1458
+ models: {}
1459
+ }
1460
+ };
1461
+
1462
+ var sLogComponentName = mOptions.componentName;
1463
+ var mModelConfigurations = {};
1464
+
1465
+ // create a model for each ["sap.ui5"]["models"] entry
1466
+ for (var sModelName in mConfig.models) {
1467
+
1468
+ var oModelConfig = mConfig.models[sModelName];
1469
+
1470
+ // normalize dataSource shorthand, e.g.
1471
+ // "myModel": "myDataSource" => "myModel": { dataSource: "myDataSource" }
1472
+ if (typeof oModelConfig === 'string') {
1473
+ oModelConfig = {
1474
+ dataSource: oModelConfig
1475
+ };
1476
+ }
1477
+
1478
+ // check for referenced dataSource entry and read out settings/uri/type
1479
+ // if not already provided in model config
1480
+ if (oModelConfig.dataSource) {
1481
+
1482
+ var oDataSource = mConfig.dataSources && mConfig.dataSources[oModelConfig.dataSource];
1483
+ if (typeof oDataSource === 'object') {
1484
+
1485
+ // default type is OData
1486
+ if (oDataSource.type === undefined) {
1487
+ oDataSource.type = 'OData';
1488
+ }
1489
+
1490
+ var sODataVersion;
1491
+
1492
+ // read out type and translate to model class
1493
+ // (only if no model type was set to allow overriding)
1494
+ if (!oModelConfig.type) {
1495
+ switch (oDataSource.type) {
1496
+ case 'OData':
1497
+ sODataVersion = oDataSource.settings && oDataSource.settings.odataVersion;
1498
+ if (sODataVersion === "4.0") {
1499
+ oModelConfig.type = 'sap.ui.model.odata.v4.ODataModel';
1500
+ } else if (!sODataVersion || sODataVersion === "2.0") {
1501
+ // 2.0 is the default in case no version is provided
1502
+ oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1503
+ } else {
1504
+ Log.error('Component Manifest: Provided OData version "' + sODataVersion + '" in ' +
1505
+ 'dataSource "' + oModelConfig.dataSource + '" for model "' + sModelName + '" is unknown. ' +
1506
+ 'Falling back to default model type "sap.ui.model.odata.v2.ODataModel".',
1507
+ '["sap.app"]["dataSources"]["' + oModelConfig.dataSource + '"]', sLogComponentName);
1508
+ oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1509
+ }
1510
+ break;
1511
+ case 'JSON':
1512
+ oModelConfig.type = 'sap.ui.model.json.JSONModel';
1513
+ break;
1514
+ case 'XML':
1515
+ oModelConfig.type = 'sap.ui.model.xml.XMLModel';
1516
+ break;
1517
+ default:
1518
+ // for custom dataSource types, the class should already be specified in the sap.ui5 models config
1519
+ }
1520
+ }
1521
+ }
1522
+ }
1523
+
1524
+ // model type is required!
1525
+ if (!oModelConfig.type) {
1526
+ Log.error("Component Manifest: Missing \"type\" for model \"" + sModelName + "\"", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1527
+ continue;
1528
+ }
1529
+
1530
+ // Add final configuration to result map
1531
+ mModelConfigurations[sModelName] = oModelConfig;
1532
+ }
1533
+
1534
+ return mModelConfigurations;
1535
+ };
1536
+
1370
1537
  /**
1371
1538
  * Creates model configurations by processing "/sap.app/dataSources" and "/sap.ui5/models" manifest entries.
1372
1539
  * Result can be handed over to {@link sap.ui.core.Component._createManifestModels} in order to create instances.
@@ -1387,7 +1554,7 @@ sap.ui.define([
1387
1554
  var oManifest = mOptions.manifest || oComponent.getManifestObject();
1388
1555
  var bMergeParent = mOptions.mergeParent;
1389
1556
  var mCacheTokens = mOptions.cacheTokens || {};
1390
- var sLogComponentName = oComponent ? oComponent.toString() : oManifest.getComponentName();
1557
+ var sLogComponentName = oComponent ? oComponent.getMetadata().getComponentName() : oManifest.getComponentName();
1391
1558
  var oConfig = sap.ui.getCore().getConfiguration();
1392
1559
  var aActiveTerminologies = mOptions.activeTerminologies;
1393
1560
 
@@ -1433,6 +1600,22 @@ sap.ui.define([
1433
1600
  for (var sModelName in mConfig.models) {
1434
1601
 
1435
1602
  var oModelConfig = mConfig.models[sModelName];
1603
+ var fnClass = sap.ui.require(oModelConfig.type.replace(/\./g, "/"));
1604
+ if (!fnClass) {
1605
+ fnClass = ObjectPath.get(oModelConfig.type);
1606
+ }
1607
+ // class could not be loaded by _loadManifestModelClasses
1608
+ if (!fnClass) {
1609
+ Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be found", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1610
+ continue;
1611
+ }
1612
+ var oClassMetadata = fnClass.getMetadata();
1613
+
1614
+ var bIsV1Model = oClassMetadata.isA("sap.ui.model.odata.ODataModel");
1615
+ var bIsV2Model = oClassMetadata.isA("sap.ui.model.odata.v2.ODataModel");
1616
+ var bIsV4Model = oClassMetadata.isA("sap.ui.model.odata.v4.ODataModel");
1617
+ var bIsResourceModel = oClassMetadata.isA("sap.ui.model.resource.ResourceModel");
1618
+
1436
1619
  var bIsDataSourceUri = false;
1437
1620
  var mMetadataUrlParams = null;
1438
1621
 
@@ -1456,42 +1639,8 @@ sap.ui.define([
1456
1639
  oDataSource.type = 'OData';
1457
1640
  }
1458
1641
 
1459
- var sODataVersion;
1460
-
1461
- // read out type and translate to model class
1462
- // (only if no model type was set to allow overriding)
1463
- if (!oModelConfig.type) {
1464
- switch (oDataSource.type) {
1465
- case 'OData':
1466
- sODataVersion = oDataSource.settings && oDataSource.settings.odataVersion;
1467
- if (sODataVersion === "4.0") {
1468
- oModelConfig.type = 'sap.ui.model.odata.v4.ODataModel';
1469
- } else if (!sODataVersion || sODataVersion === "2.0") {
1470
- // 2.0 is the default in case no version is provided
1471
- oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1472
- } else {
1473
- Log.error('Component Manifest: Provided OData version "' + sODataVersion + '" in ' +
1474
- 'dataSource "' + oModelConfig.dataSource + '" for model "' + sModelName + '" is unknown. ' +
1475
- 'Falling back to default model type "sap.ui.model.odata.v2.ODataModel".',
1476
- '["sap.app"]["dataSources"]["' + oModelConfig.dataSource + '"]', sLogComponentName);
1477
- oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1478
- }
1479
- break;
1480
- case 'JSON':
1481
- oModelConfig.type = 'sap.ui.model.json.JSONModel';
1482
- break;
1483
- case 'XML':
1484
- oModelConfig.type = 'sap.ui.model.xml.XMLModel';
1485
- break;
1486
- default:
1487
- // for custom dataSource types, the class should already be specified in the sap.ui5 models config
1488
- }
1489
- }
1490
-
1491
1642
  // pass OData service version (e.g. "2.0"), if specified, to the OData V4 model
1492
- if (oModelConfig.type === 'sap.ui.model.odata.v4.ODataModel'
1493
- && oDataSource.settings
1494
- && oDataSource.settings.odataVersion) {
1643
+ if (bIsV4Model && oDataSource.settings && oDataSource.settings.odataVersion) {
1495
1644
  oModelConfig.settings = oModelConfig.settings || {};
1496
1645
  oModelConfig.settings.odataVersion = oDataSource.settings.odataVersion;
1497
1646
  }
@@ -1536,20 +1685,16 @@ sap.ui.define([
1536
1685
 
1537
1686
  var oAnnotationUri = new URI(oAnnotation.uri);
1538
1687
 
1539
- if (oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel' ||
1540
- oModelConfig.type === 'sap.ui.model.odata.v4.ODataModel') {
1688
+ if (bIsV2Model || bIsV4Model) {
1689
+ /* eslint-disable no-loop-func */
1690
+ ["sap-language", "sap-client"].forEach(function(sName) {
1691
+ if (!oAnnotationUri.hasQuery(sName) && oConfig.getSAPParam(sName)) {
1692
+ oAnnotationUri.setQuery(sName, oConfig.getSAPParam(sName));
1693
+ }
1694
+ });
1695
+ /* eslint-enable no-loop-func */
1541
1696
 
1542
1697
  var sCacheTokenForAnnotation = mCacheTokens.dataSources && mCacheTokens.dataSources[oAnnotation.uri];
1543
- if (sCacheTokenForAnnotation || oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel') {
1544
- /* eslint-disable no-loop-func */
1545
- ["sap-language", "sap-client"].forEach(function(sName) {
1546
- if (!oAnnotationUri.hasQuery(sName) && oConfig.getSAPParam(sName)) {
1547
- oAnnotationUri.setQuery(sName, oConfig.getSAPParam(sName));
1548
- }
1549
- });
1550
- /* eslint-enable no-loop-func */
1551
- }
1552
-
1553
1698
  if (sCacheTokenForAnnotation) {
1554
1699
  Component._applyCacheToken(oAnnotationUri, {
1555
1700
  cacheToken: sCacheTokenForAnnotation,
@@ -1576,24 +1721,16 @@ sap.ui.define([
1576
1721
  }
1577
1722
  }
1578
1723
 
1579
- // model type is required!
1580
- if (!oModelConfig.type) {
1581
- Log.error("Component Manifest: Missing \"type\" for model \"" + sModelName + "\"", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1582
- continue;
1583
- }
1584
-
1585
1724
  // set mode of old ODataModel to "json" (default is xml).
1586
1725
  // as the automatic model creation is a new feature, this is not incompatible here
1587
- if (oModelConfig.type === 'sap.ui.model.odata.ODataModel' &&
1588
- (!oModelConfig.settings || oModelConfig.settings.json === undefined)) {
1726
+ if (bIsV1Model && (!oModelConfig.settings || oModelConfig.settings.json === undefined)) {
1589
1727
  // do not overwrite the flag if it was explicitly defined!
1590
-
1591
1728
  oModelConfig.settings = oModelConfig.settings || {};
1592
1729
  oModelConfig.settings.json = true;
1593
1730
  }
1594
1731
 
1595
1732
  // Check resource models for bundleUrl configuration
1596
- if (oModelConfig.type === "sap.ui.model.resource.ResourceModel") {
1733
+ if (bIsResourceModel) {
1597
1734
  if (oModelConfig.uri && oModelConfig.settings && oModelConfig.settings.bundleUrl) {
1598
1735
  Log.warning("Defining both model uri and bundleUrl is not supported. Only model uri will be resolved.");
1599
1736
  }
@@ -1621,8 +1758,7 @@ sap.ui.define([
1621
1758
  if (oModelConfig.dataSource) {
1622
1759
  addSapParams(oUri);
1623
1760
 
1624
- if (oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel' ||
1625
- oModelConfig.type === 'sap.ui.model.odata.v4.ODataModel') {
1761
+ if (bIsV2Model || bIsV4Model) {
1626
1762
 
1627
1763
  var oModelDataSource = mConfig.dataSources && mConfig.dataSources[oModelConfig.dataSource];
1628
1764
  var sCacheToken = mCacheTokens.dataSources && mCacheTokens.dataSources[oModelDataSource.uri];
@@ -1633,7 +1769,7 @@ sap.ui.define([
1633
1769
  && !oUri.hasQuery('sap-language')
1634
1770
  && oConfig.getSAPParam('sap-language');
1635
1771
 
1636
- if ((bNeedsLanguage && oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel') || sCacheToken) {
1772
+ if (bNeedsLanguage || sCacheToken) {
1637
1773
  // Lazy initialize settings and metadataUrlParams objects
1638
1774
  oModelConfig.settings = oModelConfig.settings || {};
1639
1775
  mMetadataUrlParams = oModelConfig.settings.metadataUrlParams = oModelConfig.settings.metadataUrlParams || {};
@@ -1661,17 +1797,12 @@ sap.ui.define([
1661
1797
  // set model specific "uri" property names which should be used to map "uri" to model specific constructor
1662
1798
  // (only if it wasn't specified before)
1663
1799
  if (oModelConfig.uriSettingName === undefined) {
1664
- switch (oModelConfig.type) {
1665
- case 'sap.ui.model.odata.ODataModel':
1666
- case 'sap.ui.model.odata.v2.ODataModel':
1667
- case 'sap.ui.model.odata.v4.ODataModel':
1668
- oModelConfig.uriSettingName = 'serviceUrl';
1669
- break;
1670
- case 'sap.ui.model.resource.ResourceModel':
1671
- oModelConfig.uriSettingName = 'bundleUrl';
1672
- break;
1673
- default:
1674
- // default 'undefined' is already set in this case
1800
+ if (bIsV1Model || bIsV2Model || bIsV4Model) {
1801
+ oModelConfig.uriSettingName = 'serviceUrl';
1802
+ } else if (bIsResourceModel) {
1803
+ oModelConfig.uriSettingName = 'bundleUrl';
1804
+ } else {
1805
+ // default 'undefined' is already set in this case
1675
1806
  }
1676
1807
  }
1677
1808
 
@@ -1692,9 +1823,9 @@ sap.ui.define([
1692
1823
  // lazy load the ODataUtils if systemParameter is given
1693
1824
  var bAddOrigin = false;
1694
1825
  var ODataUtils;
1695
- if (sSystemParameter && ["sap.ui.model.odata.ODataModel", "sap.ui.model.odata.v2.ODataModel"].indexOf(oModelConfig.type) != -1) {
1826
+ if (sSystemParameter && (bIsV1Model || bIsV2Model)) {
1696
1827
  bAddOrigin = true;
1697
- ODataUtils = sap.ui.requireSync("sap/ui/model/odata/ODataUtils");
1828
+ ODataUtils = sap.ui.require("sap/ui/model/odata/ODataUtils");
1698
1829
  }
1699
1830
 
1700
1831
  // include "uri" property in "settings" object, depending on "uriSettingName"
@@ -1751,7 +1882,7 @@ sap.ui.define([
1751
1882
  // resolve the bundleUrl of the enhancing resource bundle relative to
1752
1883
  // the component (default) or relative to manifest, e.g.:
1753
1884
  // bundleUrlRelativeTo: 'component|manifest'
1754
- if (oModelConfig.type === 'sap.ui.model.resource.ResourceModel' && oModelConfig.settings) {
1885
+ if (bIsResourceModel && oModelConfig.settings) {
1755
1886
  if (aActiveTerminologies) {
1756
1887
  oModelConfig.settings.activeTerminologies = aActiveTerminologies;
1757
1888
  }
@@ -1778,6 +1909,21 @@ sap.ui.define([
1778
1909
  return mModelConfigurations;
1779
1910
  };
1780
1911
 
1912
+ Component._loadManifestModelClasses = function(mModelConfigurations, sLogComponentName) {
1913
+ for (var sModelName in mModelConfigurations) {
1914
+ var oModelConfig = mModelConfigurations[sModelName];
1915
+
1916
+ // load model class and log error message if it couldn't be loaded.
1917
+ // error gets caught to continue creating the other models and not breaking the execution here
1918
+ try {
1919
+ sap.ui.requireSync(oModelConfig.type.replace(/\./g, "/"));
1920
+ } catch (oError) {
1921
+ Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be loaded. " + oError, "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1922
+ continue;
1923
+ }
1924
+ }
1925
+ };
1926
+
1781
1927
  /**
1782
1928
  * Creates model instances using a configuration provided by {@link sap.ui.core.Component._createManifestModelConfigurations}.
1783
1929
  *
@@ -1791,24 +1937,9 @@ sap.ui.define([
1791
1937
  for (var sModelName in mModelConfigurations) {
1792
1938
  var oModelConfig = mModelConfigurations[sModelName];
1793
1939
 
1794
- // load model class and log error message if it couldn't be loaded.
1795
- // error gets caught to continue creating the other models and not breaking the execution here
1796
- try {
1797
- sap.ui.requireSync(oModelConfig.type.replace(/\./g, "/"));
1798
- } catch (oError) {
1799
- Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be loaded. " + oError, "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1800
- continue;
1801
- }
1802
-
1803
- // TODO: We don't use the return value of sap.ui.requireSync here yet.
1804
1940
  // The tests for the Model creation make use of a constructor stub,
1805
1941
  // and this only works from the global namespace export.
1806
1942
  var fnModelClass = ObjectPath.get(oModelConfig.type);
1807
- if (!fnModelClass) {
1808
- // this could be the case if the required module doesn't register itself in the defined namespace
1809
- Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be found", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1810
- continue;
1811
- }
1812
1943
 
1813
1944
  // create arguments array with leading "null" value so that it can be passed to the apply function
1814
1945
  var aArgs = [null].concat(oModelConfig.settings || []);
@@ -1845,7 +1976,7 @@ sap.ui.define([
1845
1976
  * @param {string[]} [aActiveTerminologies] optional list of active terminologies
1846
1977
  * @returns {object} object with two maps, see above
1847
1978
  */
1848
- function getPreloadModelConfigsFromManifest(oManifest, oComponentData, mCacheTokens, aActiveTerminologies) {
1979
+ function getPreloadModelConfigsFromManifest(oManifest) {
1849
1980
  var mModelConfigs = {
1850
1981
  afterManifest: {},
1851
1982
  afterPreload: {}
@@ -1854,14 +1985,11 @@ sap.ui.define([
1854
1985
  // deep clone is needed as manifest only returns a read-only copy (frozen object)
1855
1986
  var oManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
1856
1987
  var oManifestModels = merge({}, oManifest.getEntry("/sap.ui5/models"));
1857
-
1858
- var mAllModelConfigurations = Component._createManifestModelConfigurations({
1988
+ var sComponentName = oManifest.getComponentName();
1989
+ var mAllModelConfigurations = Component._findManifestModelClasses({
1859
1990
  models: oManifestModels,
1860
1991
  dataSources: oManifestDataSources,
1861
- manifest: oManifest,
1862
- componentData: oComponentData,
1863
- cacheTokens: mCacheTokens,
1864
- activeTerminologies: aActiveTerminologies
1992
+ componentName: sComponentName
1865
1993
  });
1866
1994
 
1867
1995
  // Read internal URI parameter to enable model preload for testing purposes
@@ -1880,14 +2008,13 @@ sap.ui.define([
1880
2008
  if (!mModelConfig.preload && aPreloadModels && aPreloadModels.indexOf(sModelName) > -1 ) {
1881
2009
  mModelConfig.preload = true;
1882
2010
  Log.warning("FOR TESTING ONLY!!! Activating preload for model \"" + sModelName + "\" (" + mModelConfig.type + ")",
1883
- oManifest.getComponentName(), "sap.ui.core.Component");
2011
+ sComponentName, "sap.ui.core.Component");
1884
2012
  }
1885
2013
 
1886
2014
  // ResourceModels with async=false should be always loaded beforehand to get rid of sync requests under the hood (regardless of the "preload" flag)
1887
2015
  if (mModelConfig.type === "sap.ui.model.resource.ResourceModel" &&
1888
- Array.isArray(mModelConfig.settings) &&
1889
- mModelConfig.settings.length > 0 &&
1890
- mModelConfig.settings[0].async !== true
2016
+ (!mModelConfig.settings ||
2017
+ mModelConfig.settings.async !== true)
1891
2018
  ) {
1892
2019
  // Use separate config object for ResourceModels as the resourceBundle might be
1893
2020
  // part of the Component-preload which isn't available when the regular "preloaded"-models are created
@@ -1896,11 +2023,14 @@ sap.ui.define([
1896
2023
  // Only create models:
1897
2024
  // - which are flagged for preload (mModelConfig.preload) or configured via internal URI param (see above)
1898
2025
  // - in case the model class is already loaded (otherwise log a warning)
2026
+ // We check for the moduleState here instead of a simple sap.ui.require probing, because it captures the following cases:
2027
+ // - modules defined in a preload (via predefine) are "available, but not executed"
2028
+ // - modules which are already loaded/executed
1899
2029
  if (sap.ui.loader._.getModuleState(mModelConfig.type.replace(/\./g, "/") + ".js")) {
1900
2030
  mModelConfigs.afterManifest[sModelName] = mModelConfig;
1901
2031
  } else {
1902
2032
  Log.warning("Can not preload model \"" + sModelName + "\" as required class has not been loaded: \"" + mModelConfig.type + "\"",
1903
- oManifest.getComponentName(), "sap.ui.core.Component");
2033
+ sComponentName, "sap.ui.core.Component");
1904
2034
  }
1905
2035
  }
1906
2036
 
@@ -2254,9 +2384,9 @@ sap.ui.define([
2254
2384
  if (typeof vConfig === 'string') {
2255
2385
  Log.warning("Do not use deprecated function 'sap.ui.component' (" + vConfig + ") + for Component instance lookup. " +
2256
2386
  "Use 'Component.get' instead", "sap.ui.component", null, fnLogProperties.bind(null, vConfig));
2257
- // when only a string is given then this function behaves like a
2387
+ // when only a string is given, then this function behaves like a
2258
2388
  // getter and returns an existing component instance
2259
- return sap.ui.getCore().getComponent(vConfig);
2389
+ return Component.get(vConfig);
2260
2390
  }
2261
2391
 
2262
2392
  if (vConfig.async) {
@@ -2499,7 +2629,7 @@ sap.ui.define([
2499
2629
  */
2500
2630
  Component.get = function (sId) {
2501
2631
  // lookup and return the component
2502
- return sap.ui.getCore().getComponent(sId);
2632
+ return Component.registry.get(sId);
2503
2633
  };
2504
2634
 
2505
2635
  /**
@@ -2591,7 +2721,7 @@ sap.ui.define([
2591
2721
  sManifestUrl,
2592
2722
  oManifest,
2593
2723
  mModels,
2594
- mModelConfigs,
2724
+ mPreloadModelConfigs,
2595
2725
  fnCallLoadComponentCallback;
2596
2726
 
2597
2727
  function createSanitizedManifest( oRawManifestJSON, mOptions ) {
@@ -2998,14 +3128,26 @@ sap.ui.define([
2998
3128
  // create "afterPreload" models in parallel to loading the component preload (below)
2999
3129
  if (mOptions.createModels) {
3000
3130
  collect(oManifest.then(function(oManifest) {
3131
+ var sComponentName = oManifest.getComponentName();
3001
3132
  // Calculate configurations of preloaded models once the manifest is available
3002
- mModelConfigs = getPreloadModelConfigsFromManifest(oManifest, oConfig.componentData, hints.cacheTokens, aActiveTerminologies);
3133
+ mPreloadModelConfigs = getPreloadModelConfigsFromManifest(oManifest);
3003
3134
 
3004
- return oManifest;
3005
- }).then(function(oManifest) {
3006
3135
  // Create preloaded models directly after the manifest has been loaded
3007
- if (Object.keys(mModelConfigs.afterManifest).length > 0) {
3008
- mModels = Component._createManifestModels(mModelConfigs.afterManifest, oManifest.getComponentName());
3136
+ if (Object.keys(mPreloadModelConfigs.afterManifest).length > 0) {
3137
+ Component._loadManifestModelClasses(mPreloadModelConfigs.afterManifest, sComponentName);
3138
+
3139
+ // deep clone is needed as manifest only returns a read-only copy (frozen object)
3140
+ var oManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
3141
+ var mAllModelConfigurations = Component._createManifestModelConfigurations({
3142
+ models: mPreloadModelConfigs.afterManifest,
3143
+ dataSources: oManifestDataSources,
3144
+ manifest: oManifest,
3145
+ componentData: oConfig.componentData,
3146
+ cacheTokens: hints.cacheTokens,
3147
+ activeTerminologies: aActiveTerminologies
3148
+ });
3149
+
3150
+ mModels = Component._createManifestModels(mAllModelConfigurations, sComponentName);
3009
3151
  }
3010
3152
 
3011
3153
  return oManifest;
@@ -3034,7 +3176,7 @@ sap.ui.define([
3034
3176
  return null;
3035
3177
  }
3036
3178
 
3037
- var aResourceModelNames = Object.keys(mModelConfigs.afterPreload);
3179
+ var aResourceModelNames = Object.keys(mPreloadModelConfigs.afterPreload);
3038
3180
 
3039
3181
  if (aResourceModelNames.length === 0) {
3040
3182
  return null;
@@ -3049,8 +3191,20 @@ sap.ui.define([
3049
3191
  resolve(ResourceModel);
3050
3192
  }, reject);
3051
3193
  }).then(function(ResourceModel) {
3194
+
3195
+ // deep clone is needed as manifest only returns a read-only copy (frozen object)
3196
+ var oManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
3197
+ var mAfterPreloadModelConfigurations = Component._createManifestModelConfigurations({
3198
+ models: mPreloadModelConfigs.afterPreload,
3199
+ dataSources: oManifestDataSources,
3200
+ manifest: oManifest,
3201
+ componentData: oConfig.componentData,
3202
+ cacheTokens: hints.cacheTokens,
3203
+ activeTerminologies: aActiveTerminologies
3204
+ });
3205
+
3052
3206
  function loadResourceBundle(sModelName) {
3053
- var mModelConfig = mModelConfigs.afterPreload[sModelName];
3207
+ var mModelConfig = mAfterPreloadModelConfigurations[sModelName];
3054
3208
  if (Array.isArray(mModelConfig.settings) && mModelConfig.settings.length > 0) {
3055
3209
  var mModelSettings = mModelConfig.settings[0]; // first argument is the config map
3056
3210
 
@@ -3081,19 +3235,19 @@ sap.ui.define([
3081
3235
 
3082
3236
  // If the resource bundle can't be loaded, the resource model will be skipped.
3083
3237
  // But once the component instance gets created, the model will be tried to created again.
3084
- delete mModelConfigs.afterPreload[sModelName];
3238
+ delete mAfterPreloadModelConfigurations[sModelName];
3085
3239
  });
3086
3240
  } else {
3087
3241
  // Can't load bundle as no settings are defined.
3088
- // Should not happen as those models won't be part of "mModelConfigs.afterPreload"
3242
+ // Should not happen as those models won't be part of "afterPreload"
3089
3243
  return Promise.resolve();
3090
3244
  }
3091
3245
  }
3092
3246
 
3093
3247
  // Load all ResourceBundles for all models in parallel
3094
3248
  return Promise.all(aResourceModelNames.map(loadResourceBundle)).then(function() {
3095
- if (Object.keys(mModelConfigs.afterPreload).length > 0) {
3096
- var mResourceModels = Component._createManifestModels(mModelConfigs.afterPreload, oManifest.getComponentName());
3249
+ if (Object.keys(mAfterPreloadModelConfigurations).length > 0) {
3250
+ var mResourceModels = Component._createManifestModels(mAfterPreloadModelConfigurations, oManifest.getComponentName());
3097
3251
  if (!mModels) {
3098
3252
  mModels = {};
3099
3253
  }
@@ -3250,23 +3404,29 @@ sap.ui.define([
3250
3404
  aModuleNames.push(sViewClass);
3251
3405
  }
3252
3406
 
3253
- // lookup router class
3407
+ // lookup and loading of the router / targets and views class
3408
+ // prevents synchronous loading in UIComponent#init
3254
3409
  var oRouting = oManifest.getEntry("/sap.ui5/routing");
3255
- if (oRouting && oRouting.routes) {
3256
- var sRouterClass = oManifest.getEntry("/sap.ui5/routing/config/routerClass") || "sap.ui.core.routing.Router";
3257
- var sRouterClassModule = sRouterClass.replace(/\./g, "/");
3258
- aModuleNames.push(sRouterClassModule);
3410
+ if (oRouting) {
3411
+ if (oRouting.routes) {
3412
+ var sRouterClass = oManifest.getEntry("/sap.ui5/routing/config/routerClass") || "sap.ui.core.routing.Router";
3413
+ var sRouterClassModule = sRouterClass.replace(/\./g, "/");
3414
+ aModuleNames.push(sRouterClassModule);
3415
+ } else if (oRouting.targets) {
3416
+ var sTargetClass = oManifest.getEntry("/sap.ui5/routing/config/targetsClass") || "sap.ui.core.routing.Targets";
3417
+ var sTargetClassModule = sTargetClass.replace(/\./g, "/");
3418
+ aModuleNames.push(sTargetClassModule);
3419
+ aModuleNames.push("sap/ui/core/routing/Views");
3420
+ }
3259
3421
  }
3260
3422
 
3261
3423
  // lookup model classes
3262
3424
  var mManifestModels = merge({}, oManifest.getEntry("/sap.ui5/models"));
3263
3425
  var mManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
3264
- var mAllModelConfigurations = Component._createManifestModelConfigurations({
3426
+ var mAllModelConfigurations = Component._findManifestModelClasses({
3265
3427
  models: mManifestModels,
3266
3428
  dataSources: mManifestDataSources,
3267
- manifest: oManifest,
3268
- cacheTokens: hints.cacheTokens,
3269
- activeTerminologies: aActiveTerminologies
3429
+ componentName: oManifest.getComponentName()
3270
3430
  });
3271
3431
  for (var mModelName in mAllModelConfigurations) {
3272
3432
  if (!mAllModelConfigurations.hasOwnProperty(mModelName)) {
@@ -3355,7 +3515,7 @@ sap.ui.define([
3355
3515
 
3356
3516
  // synchronously load the controller class, prepare and return it
3357
3517
  return prepareControllerClass(
3358
- sap.ui.requireSync( getControllerModuleName() )
3518
+ sap.ui.requireSync( getControllerModuleName() ) // legacy-relevant: Sync path
3359
3519
  );
3360
3520
  }
3361
3521