@openui5/sap.ui.core 1.108.17 → 1.108.19

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 (258) hide show
  1. package/package.json +1 -1
  2. package/src/jquery.sap.global.js +1 -1
  3. package/src/jquery.sap.properties.js +1 -1
  4. package/src/jquery.sap.resources.js +1 -1
  5. package/src/jquery.sap.script.js +1 -1
  6. package/src/jquery.sap.storage.js +3 -3
  7. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  8. package/src/sap/base/util/restricted/_castArray.js +1 -1
  9. package/src/sap/base/util/restricted/_compact.js +1 -1
  10. package/src/sap/base/util/restricted/_curry.js +1 -1
  11. package/src/sap/base/util/restricted/_debounce.js +1 -1
  12. package/src/sap/base/util/restricted/_difference.js +1 -1
  13. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  14. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  15. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  16. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  17. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  18. package/src/sap/base/util/restricted/_flatten.js +1 -1
  19. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  20. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  21. package/src/sap/base/util/restricted/_intersection.js +1 -1
  22. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  23. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  24. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  25. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  26. package/src/sap/base/util/restricted/_isNil.js +1 -1
  27. package/src/sap/base/util/restricted/_max.js +1 -1
  28. package/src/sap/base/util/restricted/_merge.js +1 -1
  29. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  30. package/src/sap/base/util/restricted/_min.js +1 -1
  31. package/src/sap/base/util/restricted/_omit.js +1 -1
  32. package/src/sap/base/util/restricted/_pick.js +1 -1
  33. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  34. package/src/sap/base/util/restricted/_throttle.js +1 -1
  35. package/src/sap/base/util/restricted/_toArray.js +1 -1
  36. package/src/sap/base/util/restricted/_union.js +1 -1
  37. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  38. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  39. package/src/sap/base/util/restricted/_uniq.js +1 -1
  40. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  41. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  42. package/src/sap/base/util/restricted/_without.js +1 -1
  43. package/src/sap/base/util/restricted/_xor.js +1 -1
  44. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  45. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  46. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  47. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  48. package/src/sap/ui/Device.js +3 -3
  49. package/src/sap/ui/Global.js +4 -4
  50. package/src/sap/ui/base/Event.js +1 -1
  51. package/src/sap/ui/base/EventProvider.js +1 -1
  52. package/src/sap/ui/base/Interface.js +1 -1
  53. package/src/sap/ui/base/ManagedObject.js +1 -1
  54. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  55. package/src/sap/ui/base/Metadata.js +1 -1
  56. package/src/sap/ui/base/Object.js +1 -1
  57. package/src/sap/ui/base/ObjectPool.js +1 -1
  58. package/src/sap/ui/core/.library +1 -1
  59. package/src/sap/ui/core/BusyIndicator.js +1 -1
  60. package/src/sap/ui/core/Component.js +1 -1
  61. package/src/sap/ui/core/ComponentContainer.js +1 -1
  62. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  63. package/src/sap/ui/core/ComponentSupport.js +1 -1
  64. package/src/sap/ui/core/Configuration.js +12 -18
  65. package/src/sap/ui/core/Control.js +1 -1
  66. package/src/sap/ui/core/Core.js +4 -2
  67. package/src/sap/ui/core/CustomData.js +1 -1
  68. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  69. package/src/sap/ui/core/Element.js +1 -1
  70. package/src/sap/ui/core/ElementMetadata.js +1 -1
  71. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  72. package/src/sap/ui/core/EventBus.js +1 -1
  73. package/src/sap/ui/core/Fragment.js +1 -1
  74. package/src/sap/ui/core/HTML.js +1 -1
  75. package/src/sap/ui/core/History.js +1 -1
  76. package/src/sap/ui/core/Icon.js +1 -1
  77. package/src/sap/ui/core/IconPool.js +1 -2
  78. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  79. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  80. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  81. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  82. package/src/sap/ui/core/InvisibleText.js +1 -1
  83. package/src/sap/ui/core/Item.js +1 -1
  84. package/src/sap/ui/core/LabelEnablement.js +1 -1
  85. package/src/sap/ui/core/LayoutData.js +1 -1
  86. package/src/sap/ui/core/ListItem.js +1 -1
  87. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  88. package/src/sap/ui/core/Locale.js +1 -1
  89. package/src/sap/ui/core/LocaleData.js +1 -1
  90. package/src/sap/ui/core/Manifest.js +1 -1
  91. package/src/sap/ui/core/Message.js +1 -1
  92. package/src/sap/ui/core/RenderManager.js +1 -1
  93. package/src/sap/ui/core/Renderer.js +1 -1
  94. package/src/sap/ui/core/ResizeHandler.js +1 -1
  95. package/src/sap/ui/core/ScrollBar.js +1 -1
  96. package/src/sap/ui/core/SeparatorItem.js +1 -1
  97. package/src/sap/ui/core/Title.js +1 -1
  98. package/src/sap/ui/core/TooltipBase.js +1 -1
  99. package/src/sap/ui/core/UIArea.js +1 -1
  100. package/src/sap/ui/core/UIComponent.js +1 -1
  101. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  102. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  103. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  104. package/src/sap/ui/core/XMLComposite.js +1 -1
  105. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  106. package/src/sap/ui/core/_IconRegistry.js +84 -11
  107. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  108. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  109. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  110. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  111. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  112. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  113. package/src/sap/ui/core/format/DateFormat.js +4 -0
  114. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  115. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  116. package/src/sap/ui/core/library.js +3 -3
  117. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  118. package/src/sap/ui/core/message/Message.js +1 -1
  119. package/src/sap/ui/core/message/MessageManager.js +1 -1
  120. package/src/sap/ui/core/message/MessageParser.js +1 -1
  121. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  122. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  123. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  124. package/src/sap/ui/core/mvc/JSView.js +1 -1
  125. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  126. package/src/sap/ui/core/mvc/View.js +1 -1
  127. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  128. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  129. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  130. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  131. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  132. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  133. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  134. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  135. package/src/sap/ui/core/service/Service.js +1 -1
  136. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  137. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  138. package/src/sap/ui/core/support/Plugin.js +1 -1
  139. package/src/sap/ui/core/support/Support.js +1 -1
  140. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  141. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  142. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  143. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  144. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  145. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  146. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  147. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  148. package/src/sap/ui/core/themes/base/Icon.less +2 -2
  149. package/src/sap/ui/core/theming/ThemeHelper.js +103 -0
  150. package/src/sap/ui/core/theming/ThemeManager.js +20 -19
  151. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  152. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  153. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  154. package/src/sap/ui/core/tmpl/Template.js +1 -1
  155. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  156. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  157. package/src/sap/ui/core/util/Export.js +1 -1
  158. package/src/sap/ui/core/util/ExportCell.js +1 -1
  159. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  160. package/src/sap/ui/core/util/ExportRow.js +1 -1
  161. package/src/sap/ui/core/util/ExportType.js +1 -1
  162. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  163. package/src/sap/ui/core/util/File.js +1 -1
  164. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  165. package/src/sap/ui/core/util/MockServer.js +1 -1
  166. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  167. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  168. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  169. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  170. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  171. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  172. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  173. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  174. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  175. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  176. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  177. package/src/sap/ui/debug/ControlTree.js +1 -1
  178. package/src/sap/ui/debug/DebugEnv.js +1 -1
  179. package/src/sap/ui/debug/PropertyList.js +1 -1
  180. package/src/sap/ui/model/ClientModel.js +1 -1
  181. package/src/sap/ui/model/CompositeDataState.js +1 -1
  182. package/src/sap/ui/model/CompositeType.js +1 -1
  183. package/src/sap/ui/model/DataState.js +1 -1
  184. package/src/sap/ui/model/MetaModel.js +1 -1
  185. package/src/sap/ui/model/Model.js +1 -1
  186. package/src/sap/ui/model/SelectionModel.js +1 -1
  187. package/src/sap/ui/model/SimpleType.js +1 -1
  188. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  189. package/src/sap/ui/model/Type.js +1 -1
  190. package/src/sap/ui/model/json/JSONModel.js +1 -1
  191. package/src/sap/ui/model/message/MessageModel.js +1 -1
  192. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  193. package/src/sap/ui/model/odata/ODataListBinding.js +24 -0
  194. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  195. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  196. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  197. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  198. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  199. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  200. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  201. package/src/sap/ui/model/odata/type/Date.js +1 -1
  202. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  203. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  204. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  205. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  206. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  207. package/src/sap/ui/model/odata/type/Double.js +1 -1
  208. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  209. package/src/sap/ui/model/odata/type/Int.js +1 -1
  210. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  211. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  212. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  213. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  214. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  215. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  216. package/src/sap/ui/model/odata/type/Single.js +1 -1
  217. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  218. package/src/sap/ui/model/odata/type/String.js +1 -1
  219. package/src/sap/ui/model/odata/type/Time.js +1 -1
  220. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  221. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  222. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  223. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  224. package/src/sap/ui/model/odata/v2/ODataModel.js +1 -1
  225. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  226. package/src/sap/ui/model/odata/v4/Context.js +3 -3
  227. package/src/sap/ui/model/odata/v4/ODataBinding.js +65 -38
  228. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +5 -4
  229. package/src/sap/ui/model/odata/v4/ODataListBinding.js +7 -6
  230. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +8 -9
  231. package/src/sap/ui/model/odata/v4/ODataModel.js +1 -1
  232. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +58 -27
  233. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +5 -5
  234. package/src/sap/ui/model/odata/v4/lib/_Cache.js +11 -7
  235. package/src/sap/ui/model/odata/v4/lib/_Helper.js +5 -1
  236. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +1 -1
  237. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +3 -3
  238. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
  239. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  240. package/src/sap/ui/model/type/Boolean.js +1 -1
  241. package/src/sap/ui/model/type/Currency.js +1 -1
  242. package/src/sap/ui/model/type/Date.js +1 -1
  243. package/src/sap/ui/model/type/DateInterval.js +1 -1
  244. package/src/sap/ui/model/type/DateTime.js +1 -1
  245. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  246. package/src/sap/ui/model/type/FileSize.js +1 -1
  247. package/src/sap/ui/model/type/Float.js +1 -1
  248. package/src/sap/ui/model/type/Integer.js +1 -1
  249. package/src/sap/ui/model/type/String.js +1 -1
  250. package/src/sap/ui/model/type/Time.js +1 -1
  251. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  252. package/src/sap/ui/model/type/Unit.js +1 -1
  253. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  254. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  255. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  256. package/src/sap/ui/test/generic/TestBase.js +1 -1
  257. package/src/sap/ui/util/Mobile.js +10 -6
  258. package/src/sap/ui/util/Storage.js +1 -1
@@ -11,7 +11,6 @@ sap.ui.define([
11
11
  "./lib/_Helper",
12
12
  "sap/base/assert",
13
13
  "sap/base/Log",
14
- "sap/base/util/isEmptyObject",
15
14
  "sap/base/util/JSTokenizer",
16
15
  "sap/base/util/ObjectPath",
17
16
  "sap/ui/base/ManagedObject",
@@ -43,11 +42,11 @@ sap.ui.define([
43
42
  "sap/ui/model/odata/type/String",
44
43
  "sap/ui/model/odata/type/TimeOfDay",
45
44
  "sap/ui/thirdparty/URI"
46
- ], function (AnnotationHelper, ValueListType, _Helper, assert, Log, isEmptyObject, JSTokenizer,
47
- ObjectPath, ManagedObject, SyncPromise, BindingMode, ChangeReason, ClientListBinding,
48
- BaseContext, ContextBinding, MetaModel, PropertyBinding, OperationMode, Boolean, Byte,
49
- EdmDate, DateTimeOffset, Decimal, Double, Guid, Int16, Int32, Int64, Raw, SByte, Single,
50
- Stream, String, TimeOfDay, URI) {
45
+ ], function (AnnotationHelper, ValueListType, _Helper, assert, Log, JSTokenizer, ObjectPath,
46
+ ManagedObject, SyncPromise, BindingMode, ChangeReason, ClientListBinding, BaseContext,
47
+ ContextBinding, MetaModel, PropertyBinding, OperationMode, Boolean, Byte, EdmDate,
48
+ DateTimeOffset, Decimal, Double, Guid, Int16, Int32, Int64, Raw, SByte, Single, Stream,
49
+ String, TimeOfDay, URI) {
51
50
  "use strict";
52
51
  /*eslint max-nested-callbacks: 0 */
53
52
 
@@ -157,7 +156,7 @@ sap.ui.define([
157
156
  * @hideconstructor
158
157
  * @public
159
158
  * @since 1.37.0
160
- * @version 1.108.17
159
+ * @version 1.108.19
161
160
  */
162
161
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
163
162
  constructor : constructor
@@ -1629,7 +1628,7 @@ sap.ui.define([
1629
1628
  }
1630
1629
 
1631
1630
  if (mFormatOptions) {
1632
- if (isEmptyObject(mFormatOptions)) {
1631
+ if (_Helper.isEmptyObject(mFormatOptions)) {
1633
1632
  mFormatOptions = undefined;
1634
1633
  } else if ("parseKeepsEmptyString" in mFormatOptions
1635
1634
  && oProperty.$Type !== "Edm.String") {
@@ -3273,7 +3272,7 @@ sap.ui.define([
3273
3272
 
3274
3273
  // Each reference must have contributed at least one qualifier. So if oValueListInfo
3275
3274
  // is empty, there cannot have been a reference.
3276
- if (isEmptyObject(oValueListInfo)) {
3275
+ if (_Helper.isEmptyObject(oValueListInfo)) {
3277
3276
  throw new Error("No annotation '" + sValueListReferences.slice(1) + "' for "
3278
3277
  + sPropertyPath);
3279
3278
  }
@@ -218,7 +218,7 @@ sap.ui.define([
218
218
  * @extends sap.ui.model.Model
219
219
  * @public
220
220
  * @since 1.37.0
221
- * @version 1.108.17
221
+ * @version 1.108.19
222
222
  */
223
223
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
224
224
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -31,6 +31,7 @@ sap.ui.define([
31
31
  this.mAggregatedQueryOptions = {};
32
32
  // whether the aggregated query options are processed the first time
33
33
  this.bAggregatedQueryOptionsInitial = true;
34
+ this.mCanUseCachePromiseByChildPath = {};
34
35
  // auto-$expand/$select: promises to wait until child bindings have provided
35
36
  // their path and query options
36
37
  this.aChildCanUseCachePromises = [];
@@ -215,7 +216,7 @@ sap.ui.define([
215
216
  * @param {object} mQueryOptions - The query options to be merged
216
217
  * @param {string} sBaseMetaPath - This binding's meta path
217
218
  * @param {boolean} bCacheImmutable - Whether the cache of this binding is immutable
218
- * @param {boolean} bIsProperty - Whether the child is a property binding
219
+ * @param {boolean} [bIsProperty] - Whether the child is a property binding
219
220
  * @returns {boolean} Whether the query options can be fulfilled by this binding
220
221
  *
221
222
  * @private
@@ -229,14 +230,19 @@ sap.ui.define([
229
230
  /*
230
231
  * Recursively merges the given query options into the given aggregated query options.
231
232
  *
232
- * @param {object} mAggregatedQueryOptions The aggregated query options
233
- * @param {object} mQueryOptions0 The query options to merge into the aggregated query
234
- * options
235
- * @param {string} sMetaPath The meta path for the current $expand
236
- * @param {boolean} [bInsideExpand] Whether the given query options are inside a $expand
237
- * @param {boolean} [bAdd] Whether to add the given query options because they are in a
238
- * $expand that has not been aggregated yet
239
- * @returns {boolean} Whether the query options can be fulfilled by this binding
233
+ * @param {object} mAggregatedQueryOptions
234
+ * The aggregated query options
235
+ * @param {object} mQueryOptions0
236
+ * The query options to merge into the aggregated query options
237
+ * @param {string} [sMetaPath]
238
+ * The meta path for the current $expand (only used if cache is immutable)
239
+ * @param {boolean} [bInsideExpand]
240
+ * Whether the given query options are inside a $expand
241
+ * @param {boolean} [bAdd]
242
+ * Whether to add the given query options because they are in a $expand that has not been
243
+ * aggregated yet
244
+ * @returns {boolean}
245
+ * Whether the query options can be fulfilled by this binding
240
246
  */
241
247
  function merge(mAggregatedQueryOptions, mQueryOptions0, sMetaPath, bInsideExpand, bAdd) {
242
248
  /*
@@ -306,10 +312,13 @@ sap.ui.define([
306
312
  }
307
313
 
308
314
  if (merge(mAggregatedQueryOptionsClone, mQueryOptions, sBaseMetaPath)) {
309
- if (!bCacheImmutable) {
310
- this.mAggregatedQueryOptions = mAggregatedQueryOptionsClone;
311
- } else {
315
+ if (bCacheImmutable) {
312
316
  this.mLateQueryOptions = mAggregatedQueryOptionsClone;
317
+ } else {
318
+ this.mAggregatedQueryOptions = mAggregatedQueryOptionsClone;
319
+ if (this.mLateQueryOptions) {
320
+ merge(this.mLateQueryOptions, mQueryOptions);
321
+ }
313
322
  }
314
323
  return true;
315
324
  }
@@ -660,14 +669,14 @@ sap.ui.define([
660
669
  * @param {sap.ui.model.odata.v4.Context} oContext
661
670
  * A context of this binding which is the direct or indirect parent of the child binding.
662
671
  * Initially it is the child binding's parent context (See
663
- * {@link sap.ui.model.odata.v4.ODataBinding#fetchQueryOptionsForOwnCache}). When a binding
664
- * delegates up to its parent binding, it passes its own parent context adjusting
672
+ * {@link sap.ui.model.odata.v4.ODataBinding#fetchOrGetQueryOptionsForOwnCache}). When a
673
+ * binding delegates up to its parent binding, it passes its own parent context adjusting
665
674
  * <code>sChildPath</code> accordingly.
666
675
  * @param {string} sChildPath
667
676
  * The child binding's binding path relative to <code>oContext</code>
668
- * @param {object|sap.ui.base.SyncPromise} vChildQueryOptions
669
- * The child binding's (aggregated) query options or a promise resolving with them
670
- * @param {boolean} bIsProperty
677
+ * @param {object|sap.ui.base.SyncPromise} [vChildQueryOptions={}]
678
+ * The child binding's (aggregated) query options (if any) or a promise resolving with them
679
+ * @param {boolean} [bIsProperty]
671
680
  * Whether the child is a property binding
672
681
  * @returns {sap.ui.base.SyncPromise}
673
682
  * A promise resolved with the reduced path for the child binding if the child binding can use
@@ -682,7 +691,7 @@ sap.ui.define([
682
691
  // getBaseForPathReduction must be called early, because the (virtual) parent context may be
683
692
  // lost again when the path is needed
684
693
  var sBaseForPathReduction = this.getBaseForPathReduction(),
685
- sBaseMetaPath = _Helper.getMetaPath(oContext.getPath()),
694
+ sBaseMetaPath,
686
695
  bCacheImmutable,
687
696
  oCanUseCachePromise,
688
697
  // whether this binding is an operation or depends on one
@@ -737,6 +746,23 @@ sap.ui.define([
737
746
  return SyncPromise.resolve(sResolvedChildPath);
738
747
  }
739
748
 
749
+ oCanUseCachePromise = this.mCanUseCachePromiseByChildPath[sChildPath];
750
+ if (oCanUseCachePromise && bIsProperty) {
751
+ return oCanUseCachePromise.then(function (sOldReducedPath) {
752
+ if (!sOldReducedPath) {
753
+ return undefined;
754
+ }
755
+ // Note: sResolvedChildPath could be "/SalesOrderList('42')/SO_2_SOITEM/0/Note"
756
+ // w/ index (thus getMetaPath helps), but getStrippedMetaPath makes no difference
757
+ if (!sChildPath.includes("/")
758
+ || _Helper.getMetaPath(sOldReducedPath)
759
+ === _Helper.getMetaPath(sResolvedChildPath)) {
760
+ return sResolvedChildPath;
761
+ }
762
+ return oMetaModel.getReducedPath(sResolvedChildPath, sBaseForPathReduction);
763
+ });
764
+ }
765
+
740
766
  // Note: this.oCachePromise exists for all bindings except operation bindings; it might
741
767
  // become pending again
742
768
  bCacheImmutable = this.oCachePromise.isRejected()
@@ -744,16 +770,17 @@ sap.ui.define([
744
770
  || oContext.isKeepAlive() // kept-alive contexts have no index when not in aContexts
745
771
  || this.oCache === null
746
772
  || this.oCache && this.oCache.hasSentRequest();
773
+ sBaseMetaPath = _Helper.getMetaPath(oContext.getPath());
747
774
  aPromises = [
748
- this.doFetchQueryOptions(this.oContext),
775
+ this.doFetchOrGetQueryOptions(this.oContext),
749
776
  // After access to complete meta path of property, the metadata of all prefix paths
750
777
  // is loaded so that synchronous access in wrapChildQueryOptions via getObject is
751
- // possible
778
+ // possible - as well as #getReducedPath
752
779
  fetchPropertyAndType(),
753
780
  vChildQueryOptions
754
781
  ];
755
782
  oCanUseCachePromise = SyncPromise.all(aPromises).then(function (aResult) {
756
- var mChildQueryOptions = aResult[2],
783
+ var mChildQueryOptions = aResult[2] || {},
757
784
  mWrappedChildQueryOptions,
758
785
  mLocalQueryOptions = aResult[0],
759
786
  oProperty = aResult[1],
@@ -774,7 +801,7 @@ sap.ui.define([
774
801
  that.bHasPathReductionToParent = true;
775
802
  return that.oContext.getBinding().fetchIfChildCanUseCache(that.oContext,
776
803
  _Helper.getRelativePath(sResolvedChildPath, that.oContext.getPath()),
777
- vChildQueryOptions);
804
+ mChildQueryOptions, bIsProperty);
778
805
  }
779
806
 
780
807
  if (bDependsOnOperation || sReducedChildMetaPath === "$count"
@@ -823,8 +850,8 @@ sap.ui.define([
823
850
  if (that.oCache) {
824
851
  that.oCache.setLateQueryOptions(that.mLateQueryOptions);
825
852
  } else if (that.oCache === null) {
826
- return that.oContext.getBinding().fetchIfChildCanUseCache(that.oContext,
827
- that.sPath, SyncPromise.resolve(that.mLateQueryOptions))
853
+ return that.oContext.getBinding()
854
+ .fetchIfChildCanUseCache(that.oContext, that.sPath, that.mLateQueryOptions)
828
855
  .then(function (sPath) {
829
856
  return sPath && sReducedPath;
830
857
  });
@@ -832,6 +859,9 @@ sap.ui.define([
832
859
  }
833
860
  return sReducedPath;
834
861
  });
862
+ if (bIsProperty && !oContext.getPath().includes("($uid=")) {
863
+ this.mCanUseCachePromiseByChildPath[sChildPath] = oCanUseCachePromise;
864
+ }
835
865
  this.aChildCanUseCachePromises.push(oCanUseCachePromise);
836
866
  this.oCachePromise = SyncPromise.all([this.oCachePromise, oCanUseCachePromise])
837
867
  .then(function (aResult) {
@@ -857,6 +887,7 @@ sap.ui.define([
857
887
  that.oModel.reportError(that + ": Failed to enhance query options for "
858
888
  + "auto-$expand/$select for child " + sChildPath, sClassName, oError);
859
889
  });
890
+
860
891
  return oCanUseCachePromise;
861
892
  };
862
893
 
@@ -980,7 +1011,7 @@ sap.ui.define([
980
1011
  * @private
981
1012
  */
982
1013
  ODataParentBinding.prototype.getQueryOptionsForPath = function (sPath, oContext) {
983
- if (Object.keys(this.mParameters).length) {
1014
+ if (!_Helper.isEmptyObject(this.mParameters)) {
984
1015
  // binding has parameters -> all query options need to be defined at the binding
985
1016
  return _Helper.getQueryOptionsForPath(this.getQueryOptionsFromParameters(), sPath);
986
1017
  }
@@ -1009,8 +1040,8 @@ sap.ui.define([
1009
1040
  * @function
1010
1041
  * @name sap.ui.model.odata.v4.ODataParentBinding.getQueryOptionsFromParameters
1011
1042
  * @private
1012
- * @see sap.ui.model.odata.v4.ODataBinding#fetchQueryOptionsForOwnCache
1013
- * @see sap.ui.model.odata.v4.ODataBinding#doFetchQueryOptions
1043
+ * @see sap.ui.model.odata.v4.ODataBinding#fetchOrGetQueryOptionsForOwnCache
1044
+ * @see sap.ui.model.odata.v4.ODataBinding#doFetchOrGetQueryOptions
1014
1045
  */
1015
1046
 
1016
1047
  /**
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @mixes sap.ui.model.odata.v4.ODataBinding
43
43
  * @public
44
44
  * @since 1.37.0
45
- * @version 1.108.17
45
+ * @version 1.108.19
46
46
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
47
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
48
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -103,7 +103,7 @@ sap.ui.define([
103
103
  this.mQueryOptions = this.oModel.buildQueryOptions(_Helper.clone(mParameters),
104
104
  /*bSystemQueryOptionsAllowed*/sPath.endsWith("$count"));
105
105
  this.vValue = undefined;
106
- // BEWARE: #doFetchQueryOptions uses #isRoot which relies on this.oContext!
106
+ // BEWARE: #doFetchOrGetQueryOptions uses #isRoot which relies on this.oContext!
107
107
  this.fetchCache(oContext);
108
108
  oModel.bindingCreated(this);
109
109
  }
@@ -401,10 +401,10 @@ sap.ui.define([
401
401
 
402
402
  /**
403
403
  * @override
404
- * @see sap.ui.model.odata.v4.ODataBinding#doFetchQueryOptions
404
+ * @see sap.ui.model.odata.v4.ODataBinding#doFetchOrGetQueryOptions
405
405
  */
406
- ODataPropertyBinding.prototype.doFetchQueryOptions = function () {
407
- return this.isRoot() ? SyncPromise.resolve(this.mQueryOptions) : SyncPromise.resolve({});
406
+ ODataPropertyBinding.prototype.doFetchOrGetQueryOptions = function () {
407
+ return this.isRoot() ? this.mQueryOptions : undefined;
408
408
  };
409
409
 
410
410
  /**
@@ -10,10 +10,9 @@ sap.ui.define([
10
10
  "./_Helper",
11
11
  "./_Requestor",
12
12
  "sap/base/Log",
13
- "sap/base/util/isEmptyObject",
14
13
  "sap/ui/base/SyncPromise",
15
14
  "sap/ui/model/odata/ODataUtils"
16
- ], function (_GroupLock, _Helper, _Requestor, Log, isEmptyObject, SyncPromise, ODataUtils) {
15
+ ], function (_GroupLock, _Helper, _Requestor, Log, SyncPromise, ODataUtils) {
17
16
  "use strict";
18
17
  /*eslint max-nested-callbacks: 0 */
19
18
 
@@ -877,7 +876,7 @@ sap.ui.define([
877
876
  }
878
877
  }
879
878
 
880
- if (!this.mLateQueryOptions) {
879
+ if (!(this.mLateQueryOptions || this.mQueryOptions && this.mQueryOptions.$select)) {
881
880
  return false; // no autoExpandSelect
882
881
  }
883
882
 
@@ -890,10 +889,15 @@ sap.ui.define([
890
889
  aUpdateProperties = [sRequestedPropertyPath];
891
890
 
892
891
  sFullResourceMetaPath = _Helper.buildPath(this.sMetaPath, sResourceMetaPath);
892
+ mQueryOptions = this.mLateQueryOptions
893
+ || { // ensure that $select precedes $expand in the resulting query
894
+ $select : this.mQueryOptions.$select,
895
+ $expand : this.mQueryOptions.$expand
896
+ };
893
897
  // sRequestedPropertyPath is also a metapath because the binding does not accept a path with
894
898
  // a collection-valued navigation property for a late property
895
899
  mQueryOptions = _Helper.intersectQueryOptions(
896
- _Helper.getQueryOptionsForPath(this.mLateQueryOptions, sResourcePath),
900
+ _Helper.getQueryOptionsForPath(mQueryOptions, sResourcePath),
897
901
  [sRequestedPropertyPath], this.oRequestor.getModelInterface().fetchMetadata,
898
902
  sFullResourceMetaPath);
899
903
  if (!mQueryOptions) {
@@ -1130,7 +1134,7 @@ sap.ui.define([
1130
1134
  /**
1131
1135
  * Returns this cache's query options.
1132
1136
  *
1133
- * @returns {object} The query options
1137
+ * @returns {object|undefined} The query options, if any
1134
1138
  *
1135
1139
  * @public
1136
1140
  * @see #setQueryOptions
@@ -1190,7 +1194,7 @@ sap.ui.define([
1190
1194
  * @see #registerChangeListener
1191
1195
  */
1192
1196
  _Cache.prototype.hasChangeListeners = function () {
1193
- return !isEmptyObject(this.mChangeListeners);
1197
+ return !_Helper.isEmptyObject(this.mChangeListeners);
1194
1198
  };
1195
1199
 
1196
1200
  /**
@@ -3741,7 +3745,7 @@ sap.ui.define([
3741
3745
  if (oData) {
3742
3746
  sHttpMethod = oData["X-HTTP-Method"] || sHttpMethod;
3743
3747
  delete oData["X-HTTP-Method"];
3744
- if (this.oRequestor.isActionBodyOptional() && !Object.keys(oData).length) {
3748
+ if (this.oRequestor.isActionBodyOptional() && _Helper.isEmptyObject(oData)) {
3745
3749
  oData = undefined;
3746
3750
  }
3747
3751
  }
@@ -1688,6 +1688,10 @@ sap.ui.define([
1688
1688
  && !mParameters.$$aggregation.hierarchyQualifier;
1689
1689
  },
1690
1690
 
1691
+ // Trampoline property to allow for mocking function module in unit tests.
1692
+ // @see sap.base.util.isEmptyObject
1693
+ isEmptyObject : isEmptyObject,
1694
+
1691
1695
  /**
1692
1696
  * Tells whether the value is a safe integer.
1693
1697
  *
@@ -2502,7 +2506,7 @@ sap.ui.define([
2502
2506
  }
2503
2507
  }
2504
2508
  if (!oProperty || oProperty.$kind === "Property") {
2505
- if (Object.keys(mChildQueryOptions).length > 0) {
2509
+ if (!isEmptyObject(mChildQueryOptions)) {
2506
2510
  Log.error("Failed to enhance query options for auto-$expand/$select as the"
2507
2511
  + " child binding has query options, but its path '" + sChildMetaPath
2508
2512
  + "' points to a structural property",
@@ -477,7 +477,7 @@ sap.ui.define([
477
477
  _Requestor.prototype.checkForOpenRequests = function () {
478
478
  var that = this;
479
479
 
480
- if (Object.keys(this.mRunningChangeRequests).length // running change requests
480
+ if (!_Helper.isEmptyObject(this.mRunningChangeRequests) // running change requests
481
481
  || Object.keys(this.mBatchQueue).some(function (sGroupId) { // pending requests
482
482
  return that.mBatchQueue[sGroupId].some(function (vRequest) {
483
483
  return Array.isArray(vRequest) ? vRequest.length : true;
@@ -611,7 +611,7 @@ sap.ui.define([
611
611
  sClassName);
612
612
  }
613
613
  });
614
- if (aResult.length > 0) {
614
+ if (aResult.length) {
615
615
  oSemantics.type = {EnumMember : aResult.join(" ")};
616
616
  }
617
617
  }
@@ -690,7 +690,7 @@ sap.ui.define([
690
690
  sTarget = sEntityContainerName + "/" + sEntitySetName;
691
691
  mAnnotations = _Helper.merge(this.convertedV2Annotations[sTarget] || {},
692
692
  this.mEntityType2EntitySetAnnotation[oEntitySet.$Type]);
693
- if (Object.keys(mAnnotations).length) {
693
+ if (!_Helper.isEmptyObject(mAnnotations)) {
694
694
  this.convertedV2Annotations[sTarget] = mAnnotations;
695
695
  }
696
696
  }
@@ -698,7 +698,7 @@ sap.ui.define([
698
698
 
699
699
  if (this.schema.$Annotations) {
700
700
  this.mergeAnnotations(this.convertedV2Annotations, this.schema.$Annotations);
701
- } else if (Object.keys(this.convertedV2Annotations).length > 0) {
701
+ } else if (!_Helper.isEmptyObject(this.convertedV2Annotations)) {
702
702
  this.schema.$Annotations = this.convertedV2Annotations;
703
703
  }
704
704
  this.convertedV2Annotations = {}; // reset schema annotations for next schema
@@ -760,7 +760,7 @@ sap.ui.define([
760
760
 
761
761
  // only if all (nested) query options are processed, all selects are known
762
762
  aSelects = Object.keys(mSelects);
763
- if (aSelects.length > 0) {
763
+ if (aSelects.length) {
764
764
  if (!mQueryOptions.$select) {
765
765
  aSelects.push("*");
766
766
  }
@@ -229,7 +229,7 @@ sap.ui.define([
229
229
  *
230
230
  * @extends sap.ui.model.Model
231
231
  * @public
232
- * @version 1.108.17
232
+ * @version 1.108.19
233
233
  */
234
234
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
235
235
 
@@ -19,7 +19,7 @@ sap.ui.define(['sap/ui/model/SimpleType', 'sap/ui/model/FormatException', 'sap/u
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.17
22
+ * @version 1.108.19
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @extends sap.ui.model.CompositeType
33
33
  *
34
34
  * @author SAP SE
35
- * @version 1.108.17
35
+ * @version 1.108.19
36
36
  *
37
37
  * @public
38
38
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.108.17
29
+ * @version 1.108.19
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @extends sap.ui.model.CompositeType
34
34
  *
35
35
  * @author SAP SE
36
- * @version 1.108.17
36
+ * @version 1.108.19
37
37
  *
38
38
  * @public
39
39
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.17
22
+ * @version 1.108.19
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.17
22
+ * @version 1.108.19
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.108.17
27
+ * @version 1.108.19
28
28
  *
29
29
  * @public
30
30
  * @param {object} [oFormatOptions] formatting options. Supports the same options as {@link sap.ui.core.format.FileSizeFormat.getInstance FileSizeFormat.getInstance}
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.108.17
29
+ * @version 1.108.19
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.NumberFormat NumberFormat}.
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.108.17
29
+ * @version 1.108.19
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.NumberFormat NumberFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.108.17
27
+ * @version 1.108.19
28
28
  *
29
29
  * @alias sap.ui.model.type.String
30
30
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.17
22
+ * @version 1.108.19
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.108.17
22
+ * @version 1.108.19
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -48,7 +48,7 @@ sap.ui.define([
48
48
  *
49
49
  *
50
50
  * @author SAP SE
51
- * @version 1.108.17
51
+ * @version 1.108.19
52
52
  *
53
53
  * @public
54
54
  * @param {object} [oFormatOptions]
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.model.ClientModel
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.108.17
50
+ * @version 1.108.19
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"],
53
53
  * @namespace
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.108.17
56
+ * @version 1.108.19
57
57
  *
58
58
  * @public
59
59
  * @since 1.48.0
@@ -27,7 +27,7 @@ sap.ui.define([ 'sap/ui/core/Element', 'sap/ui/core/Control', 'sap/ui/core/Core'
27
27
  * @namespace
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.108.17
30
+ * @version 1.108.19
31
31
  *
32
32
  * @public
33
33
  * @since 1.48.0
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.base.Object
25
25
  * @abstract
26
26
  * @author SAP SE
27
- * @version 1.108.17
27
+ * @version 1.108.19
28
28
  * @since 1.100
29
29
  */
30
30
  return BaseObject.extend("sap.ui.test.generic.TestBase", {
@@ -105,6 +105,8 @@ sap.ui.define(['sap/ui/Device', 'sap/base/Log', 'sap/base/util/extend', 'sap/ui/
105
105
  mobileWebAppCapable: "default"
106
106
  }, options);
107
107
 
108
+ var bAppleMobileDevice = Device.os.ios || (Device.os.macintosh && Device.browser.mobile);
109
+
108
110
  // en-/disable automatic link generation for phone numbers
109
111
  if (options.preventPhoneNumberDetection) {
110
112
  // iOS specific meta tag
@@ -126,15 +128,17 @@ sap.ui.define(['sap/ui/Device', 'sap/base/Log', 'sap/base/util/extend', 'sap/ui/
126
128
  // UI) and auto zoom (browser zooms in the UI automatically under some circumtances, for example when an
127
129
  // input gets the focus and the font-size of the input is less than 16px on iOS) functionalities on the
128
130
  // mobile platform, but there's some difference between the mobile platforms:
129
- // * iOS: This does not disable manual zoom in Safari and it only disables the auto zoom function. In
130
- // Chrome browser on iOS, it does disable the manual zoom but since Chrome on iOS isn't in the support
131
- // matrix, we can ignore this.
131
+ // * Apple mobile device: This does not disable manual zoom in Safari and it only disables the auto
132
+ // zoom function. In Chrome browser on iOS, it does disable the manual zoom but since Chrome on iOS
133
+ // isn't in the support matrix, we can ignore this. The "Request Desktop Website" is turned on by
134
+ // default on iPad, therefore we need to check the (macintosh + touch) combination to detect the iPad
135
+ // with "Request Desktop Website" turned on to disable the auto zoom.
132
136
  // * other mobile platform: it does disable the manual zoom option but there's no auto zoom function.
133
- // So we need to remove the maximum-scale=1.0:
137
+ // So we need to remove the maximum-scale=1.0:
134
138
  //
135
139
  // Therefore we need to add the additional settings (maximum-scale and user-scalable) only for iOS
136
140
  // platform
137
- if (Device.os.ios) {
141
+ if (bAppleMobileDevice) {
138
142
  sMeta += ", maximum-scale=1.0, user-scalable=no";
139
143
  }
140
144
 
@@ -155,7 +159,7 @@ sap.ui.define(['sap/ui/Device', 'sap/base/Log', 'sap/base/util/extend', 'sap/ui/
155
159
  });
156
160
  }
157
161
 
158
- if (options.preventScroll && (Device.os.ios || (Device.os.mac && Device.browser.mobile))) {
162
+ if (options.preventScroll && bAppleMobileDevice) {
159
163
  _ready().then(function() {
160
164
  document.documentElement.style.position = "fixed";
161
165
  document.documentElement.style.overflow = "hidden";
@@ -250,7 +250,7 @@ sap.ui.define(["sap/base/assert"], function (assert) {
250
250
  *
251
251
  * @enum {string}
252
252
  * @public
253
- * @version 1.108.17
253
+ * @version 1.108.19
254
254
  */
255
255
  Storage.Type = {
256
256
  /**