@openui5/sap.ui.core 1.129.0 → 1.130.1
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.
- package/THIRDPARTY.txt +1 -1
- package/package.json +1 -1
- package/src/jquery.sap.global.js +7 -7
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +3 -3
- package/src/jquery.sap.trace.js +18 -18
- package/src/sap/base/Event.js +1 -1
- package/src/sap/base/Eventing.js +1 -1
- package/src/sap/base/config.js +1 -1
- package/src/sap/base/future.js +10 -2
- package/src/sap/base/i18n/LanguageTag.js +1 -1
- package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +3 -3
- package/src/sap/ui/base/BindingParser.js +1 -3
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +4 -9
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/core/.library +2 -2
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/Component.js +32 -130
- package/src/sap/ui/core/ComponentContainer.js +2 -2
- package/src/sap/ui/core/ComponentHooks.js +174 -0
- package/src/sap/ui/core/ComponentMetadata.js +1 -1
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +1 -1
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +2 -2
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/Element.js +6 -2
- package/src/sap/ui/core/ElementMetadata.js +1 -1
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/Fragment.js +6 -5
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +1 -1
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +2 -15
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +43 -37
- package/src/sap/ui/core/Manifest.js +2 -2
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/RenderManager.js +41 -32
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/StaticArea.js +0 -1
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +1 -1
- package/src/sap/ui/core/UIComponent.js +3 -3
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +3 -3
- package/src/sap/ui/core/_IconRegistry.js +1 -1
- package/src/sap/ui/core/cldr/ar.json +5 -1
- package/src/sap/ui/core/cldr/ar_EG.json +5 -1
- package/src/sap/ui/core/cldr/ar_SA.json +5 -1
- package/src/sap/ui/core/cldr/bg.json +4 -0
- package/src/sap/ui/core/cldr/ca.json +4 -0
- package/src/sap/ui/core/cldr/cnr.json +4 -0
- package/src/sap/ui/core/cldr/cs.json +4 -0
- package/src/sap/ui/core/cldr/cy.json +4 -0
- package/src/sap/ui/core/cldr/da.json +4 -0
- package/src/sap/ui/core/cldr/de.json +4 -0
- package/src/sap/ui/core/cldr/de_AT.json +4 -0
- package/src/sap/ui/core/cldr/de_CH.json +4 -0
- package/src/sap/ui/core/cldr/el.json +4 -0
- package/src/sap/ui/core/cldr/el_CY.json +4 -0
- package/src/sap/ui/core/cldr/en.json +4 -0
- package/src/sap/ui/core/cldr/en_AU.json +4 -0
- package/src/sap/ui/core/cldr/en_GB.json +4 -0
- package/src/sap/ui/core/cldr/en_HK.json +5 -1
- package/src/sap/ui/core/cldr/en_IE.json +4 -0
- package/src/sap/ui/core/cldr/en_IN.json +5 -1
- package/src/sap/ui/core/cldr/en_NZ.json +4 -0
- package/src/sap/ui/core/cldr/en_PG.json +4 -0
- package/src/sap/ui/core/cldr/en_SG.json +5 -1
- package/src/sap/ui/core/cldr/en_ZA.json +4 -0
- package/src/sap/ui/core/cldr/es.json +4 -0
- package/src/sap/ui/core/cldr/es_AR.json +4 -0
- package/src/sap/ui/core/cldr/es_BO.json +4 -0
- package/src/sap/ui/core/cldr/es_CL.json +4 -0
- package/src/sap/ui/core/cldr/es_CO.json +4 -0
- package/src/sap/ui/core/cldr/es_MX.json +4 -0
- package/src/sap/ui/core/cldr/es_PE.json +4 -0
- package/src/sap/ui/core/cldr/es_UY.json +4 -0
- package/src/sap/ui/core/cldr/es_VE.json +4 -0
- package/src/sap/ui/core/cldr/et.json +4 -0
- package/src/sap/ui/core/cldr/fa.json +6 -3
- package/src/sap/ui/core/cldr/fi.json +4 -0
- package/src/sap/ui/core/cldr/fr.json +4 -0
- package/src/sap/ui/core/cldr/fr_BE.json +4 -0
- package/src/sap/ui/core/cldr/fr_CA.json +4 -0
- package/src/sap/ui/core/cldr/fr_CH.json +4 -0
- package/src/sap/ui/core/cldr/fr_LU.json +4 -0
- package/src/sap/ui/core/cldr/he.json +6 -3
- package/src/sap/ui/core/cldr/hi.json +5 -1
- package/src/sap/ui/core/cldr/hr.json +4 -0
- package/src/sap/ui/core/cldr/hu.json +4 -0
- package/src/sap/ui/core/cldr/id.json +5 -1
- package/src/sap/ui/core/cldr/it.json +4 -0
- package/src/sap/ui/core/cldr/it_CH.json +4 -0
- package/src/sap/ui/core/cldr/ja.json +5 -1
- package/src/sap/ui/core/cldr/kk.json +4 -0
- package/src/sap/ui/core/cldr/ko.json +5 -1
- package/src/sap/ui/core/cldr/lt.json +4 -0
- package/src/sap/ui/core/cldr/lv.json +4 -0
- package/src/sap/ui/core/cldr/mk.json +4 -0
- package/src/sap/ui/core/cldr/ms.json +5 -1
- package/src/sap/ui/core/cldr/nb.json +5 -2
- package/src/sap/ui/core/cldr/nl.json +4 -0
- package/src/sap/ui/core/cldr/nl_BE.json +4 -0
- package/src/sap/ui/core/cldr/pl.json +4 -0
- package/src/sap/ui/core/cldr/pt.json +4 -0
- package/src/sap/ui/core/cldr/pt_PT.json +4 -0
- package/src/sap/ui/core/cldr/ro.json +4 -0
- package/src/sap/ui/core/cldr/ru.json +4 -0
- package/src/sap/ui/core/cldr/ru_UA.json +4 -0
- package/src/sap/ui/core/cldr/sk.json +4 -0
- package/src/sap/ui/core/cldr/sl.json +4 -0
- package/src/sap/ui/core/cldr/sr.json +4 -0
- package/src/sap/ui/core/cldr/sr_Latn.json +6 -2
- package/src/sap/ui/core/cldr/sv.json +4 -0
- package/src/sap/ui/core/cldr/th.json +5 -1
- package/src/sap/ui/core/cldr/tr.json +5 -1
- package/src/sap/ui/core/cldr/uk.json +4 -0
- package/src/sap/ui/core/cldr/vi.json +4 -0
- package/src/sap/ui/core/cldr/zh_CN.json +5 -1
- package/src/sap/ui/core/cldr/zh_HK.json +6 -3
- package/src/sap/ui/core/cldr/zh_SG.json +6 -3
- package/src/sap/ui/core/cldr/zh_TW.json +5 -1
- package/src/sap/ui/core/date/UI5Date.js +1 -1
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/fieldhelp/FieldHelp.js +5 -7
- package/src/sap/ui/core/fieldhelp/FieldHelpCustomData.js +88 -0
- package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +22 -26
- package/src/sap/ui/core/format/FormatUtils.js +1 -1
- package/src/sap/ui/core/format/NumberFormat.js +16 -27
- package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
- package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +5 -7
- package/src/sap/ui/core/library.support.js +10 -1
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +1 -1
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +1 -1
- package/src/sap/ui/core/messagebundle.properties +6 -12
- package/src/sap/ui/core/messagebundle_ar.properties +3 -6
- package/src/sap/ui/core/messagebundle_bg.properties +3 -6
- package/src/sap/ui/core/messagebundle_ca.properties +3 -6
- package/src/sap/ui/core/messagebundle_cnr.properties +3 -6
- package/src/sap/ui/core/messagebundle_cs.properties +3 -6
- package/src/sap/ui/core/messagebundle_cy.properties +3 -6
- package/src/sap/ui/core/messagebundle_da.properties +3 -6
- package/src/sap/ui/core/messagebundle_de.properties +3 -6
- package/src/sap/ui/core/messagebundle_el.properties +3 -6
- package/src/sap/ui/core/messagebundle_en.properties +3 -6
- package/src/sap/ui/core/messagebundle_en_GB.properties +3 -6
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +3 -6
- package/src/sap/ui/core/messagebundle_es.properties +3 -6
- package/src/sap/ui/core/messagebundle_es_MX.properties +3 -6
- package/src/sap/ui/core/messagebundle_et.properties +3 -6
- package/src/sap/ui/core/messagebundle_fi.properties +3 -6
- package/src/sap/ui/core/messagebundle_fr.properties +3 -6
- package/src/sap/ui/core/messagebundle_fr_CA.properties +3 -6
- package/src/sap/ui/core/messagebundle_hi.properties +3 -6
- package/src/sap/ui/core/messagebundle_hr.properties +3 -6
- package/src/sap/ui/core/messagebundle_hu.properties +3 -6
- package/src/sap/ui/core/messagebundle_id.properties +3 -6
- package/src/sap/ui/core/messagebundle_it.properties +53 -56
- package/src/sap/ui/core/messagebundle_iw.properties +3 -6
- package/src/sap/ui/core/messagebundle_ja.properties +3 -6
- package/src/sap/ui/core/messagebundle_kk.properties +3 -6
- package/src/sap/ui/core/messagebundle_ko.properties +3 -6
- package/src/sap/ui/core/messagebundle_lt.properties +3 -6
- package/src/sap/ui/core/messagebundle_lv.properties +3 -6
- package/src/sap/ui/core/messagebundle_mk.properties +3 -6
- package/src/sap/ui/core/messagebundle_ms.properties +3 -6
- package/src/sap/ui/core/messagebundle_nl.properties +3 -6
- package/src/sap/ui/core/messagebundle_no.properties +4 -7
- package/src/sap/ui/core/messagebundle_pl.properties +3 -6
- package/src/sap/ui/core/messagebundle_pt.properties +3 -6
- package/src/sap/ui/core/messagebundle_pt_PT.properties +3 -6
- package/src/sap/ui/core/messagebundle_ro.properties +3 -6
- package/src/sap/ui/core/messagebundle_ru.properties +3 -6
- package/src/sap/ui/core/messagebundle_sh.properties +3 -6
- package/src/sap/ui/core/messagebundle_sk.properties +3 -6
- package/src/sap/ui/core/messagebundle_sl.properties +3 -6
- package/src/sap/ui/core/messagebundle_sr.properties +3 -6
- package/src/sap/ui/core/messagebundle_sv.properties +3 -6
- package/src/sap/ui/core/messagebundle_th.properties +3 -6
- package/src/sap/ui/core/messagebundle_tr.properties +3 -6
- package/src/sap/ui/core/messagebundle_uk.properties +3 -6
- package/src/sap/ui/core/messagebundle_vi.properties +3 -6
- package/src/sap/ui/core/messagebundle_zh_CN.properties +3 -6
- package/src/sap/ui/core/messagebundle_zh_TW.properties +3 -6
- package/src/sap/ui/core/mvc/Controller.js +2 -2
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/View.js +3 -3
- package/src/sap/ui/core/mvc/XMLView.js +2 -2
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/routing/Route.js +4 -4
- package/src/sap/ui/core/routing/Router.js +5 -5
- package/src/sap/ui/core/routing/Targets.js +3 -3
- package/src/sap/ui/core/routing/async/Target.js +1 -1
- package/src/sap/ui/core/routing/async/Targets.js +2 -2
- package/src/sap/ui/core/rules/App.support.js +13 -2
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +1 -1
- package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
- package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
- package/src/sap/ui/core/theming/Parameters.js +6 -6
- package/src/sap/ui/core/theming/ThemeHelper.js +16 -13
- package/src/sap/ui/core/theming/ThemeManager.js +1 -1
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +1 -1
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +1 -1
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- package/src/sap/ui/core/webc/WebComponent.js +1 -1
- package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/dom/findTabbable.js +10 -1
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/ClientTreeBinding.js +32 -19
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/Context.js +0 -2
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/ListBinding.js +19 -0
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/TreeBinding.js +21 -17
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +4 -4
- package/src/sap/ui/model/json/JSONModel.js +12 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
- package/src/sap/ui/model/odata/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +106 -19
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +1 -1
- package/src/sap/ui/model/odata/type/Date.js +1 -1
- package/src/sap/ui/model/odata/type/DateTime.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/ui/model/odata/type/Decimal.js +1 -1
- package/src/sap/ui/model/odata/type/Double.js +1 -1
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +1 -1
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +1 -1
- package/src/sap/ui/model/odata/type/ODataType.js +1 -1
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +1 -1
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +1 -1
- package/src/sap/ui/model/odata/type/Time.js +1 -1
- package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
- package/src/sap/ui/model/odata/type/Unit.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataModel.js +33 -2
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/Context.js +62 -13
- package/src/sap/ui/model/odata/v4/ODataBinding.js +4 -0
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +58 -81
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +20 -10
- package/src/sap/ui/model/odata/v4/ODataModel.js +65 -11
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +75 -8
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +13 -4
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +106 -10
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +62 -4
- package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +49 -31
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +22 -28
- package/src/sap/ui/model/odata/v4/lib/_TreeState.js +51 -30
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +3 -2
- package/src/sap/ui/model/type/DateInterval.js +3 -2
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/performance/trace/FESR.js +19 -10
- package/src/sap/ui/performance/trace/Interaction.js +45 -659
- package/src/sap/ui/performance/trace/_InteractionImpl.js +705 -0
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/TestUtils.js +6 -5
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/test/gherkin/opa5TestHarness.js +6 -2
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/sap/ui/util/_enforceNoReturnValue.js +1 -1
- package/src/ui5loader.js +1 -1
|
@@ -3,54 +3,12 @@
|
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
/*global HTMLScriptElement */
|
|
8
6
|
sap.ui.define([
|
|
9
|
-
|
|
10
|
-
"sap/ui/performance/XHRInterceptor",
|
|
11
|
-
"sap/ui/performance/trace/FESRHelper",
|
|
12
|
-
"sap/base/util/LoaderExtensions",
|
|
13
|
-
"sap/base/util/now",
|
|
14
|
-
"sap/base/util/uid",
|
|
15
|
-
"sap/base/Log",
|
|
16
|
-
"sap/ui/thirdparty/URI"
|
|
17
|
-
], function(Measurement, XHRInterceptor, FESRHelper, LoaderExtensions, now, uid, Log, URI) {
|
|
18
|
-
|
|
7
|
+
], function() {
|
|
19
8
|
"use strict";
|
|
20
9
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
INTERACTION = "INTERACTION",
|
|
24
|
-
isNavigation = false,
|
|
25
|
-
aInteractions = [],
|
|
26
|
-
oPendingInteraction,
|
|
27
|
-
mCompressedMimeTypes = {
|
|
28
|
-
"application/zip": true,
|
|
29
|
-
"application/vnd.rar": true,
|
|
30
|
-
"application/gzip": true,
|
|
31
|
-
"application/x-tar": true,
|
|
32
|
-
"application/java-archive": true,
|
|
33
|
-
"image/jpeg": true,
|
|
34
|
-
"application/pdf": true
|
|
35
|
-
},
|
|
36
|
-
sCompressedExtensions = "zip,rar,arj,z,gz,tar,lzh,cab,hqx,ace,jar,ear,war,jpg,jpeg,pdf,gzip";
|
|
37
|
-
let bInitialized = false,
|
|
38
|
-
iResetCurrentBrowserEventTimer;
|
|
39
|
-
|
|
40
|
-
function isCORSRequest(sUrl) {
|
|
41
|
-
var sHost = new URI(sUrl.toString()).host();
|
|
42
|
-
// url is relative or with same host
|
|
43
|
-
return sHost && sHost !== HOST;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function hexToAscii(sValue) {
|
|
47
|
-
var hex = sValue.toString();
|
|
48
|
-
var str = '';
|
|
49
|
-
for (var n = 0; n < hex.length; n += 2) {
|
|
50
|
-
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
|
|
51
|
-
}
|
|
52
|
-
return str.trim();
|
|
53
|
-
}
|
|
10
|
+
let bInteractionActive = false;
|
|
11
|
+
let oInteractionImpl;
|
|
54
12
|
|
|
55
13
|
/**
|
|
56
14
|
* The SAP Statistics for OData
|
|
@@ -99,324 +57,6 @@ sap.ui.define([
|
|
|
99
57
|
* @property {string} rootId The root context ID
|
|
100
58
|
*/
|
|
101
59
|
|
|
102
|
-
function createMeasurement(iTime) {
|
|
103
|
-
return {
|
|
104
|
-
event: "startup", // event which triggered interaction - default is startup interaction
|
|
105
|
-
trigger: "undetermined", // control which triggered interaction
|
|
106
|
-
component: "undetermined", // component or app identifier
|
|
107
|
-
appVersion: "undetermined", // application version as from app descriptor
|
|
108
|
-
start: iTime || performance.timeOrigin, // interaction start - page timeOrigin if initial
|
|
109
|
-
end: 0, // interaction end
|
|
110
|
-
navigation: 0, // sum over all navigation times
|
|
111
|
-
roundtrip: 0, // time from first request sent to last received response end - without gaps and ignored overlap
|
|
112
|
-
processing: 0, // client processing time
|
|
113
|
-
duration: 0, // interaction duration
|
|
114
|
-
requests: [], // Performance API requests during interaction
|
|
115
|
-
measurements: [], // Measurements
|
|
116
|
-
sapStatistics: [], // SAP Statistics for OData
|
|
117
|
-
requestTime: 0, // sum over all requests in the interaction (oPendingInteraction.requests[0].responseEnd-oPendingInteraction.requests[0].requestStart)
|
|
118
|
-
networkTime: 0, // request time minus server time from the header
|
|
119
|
-
bytesSent: 0, // sum over all requests bytes
|
|
120
|
-
bytesReceived: 0, // sum over all response bytes
|
|
121
|
-
requestCompression: "X", // ok per default, if compression does not match SAP rules we report an empty string
|
|
122
|
-
busyDuration: 0, // summed GlobalBusyIndicator duration during this interaction
|
|
123
|
-
id: uid(), //Interaction ID
|
|
124
|
-
passportAction: "undetermined_startup_0", //default PassportAction for startup
|
|
125
|
-
rootId: undefined // root context ID
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function isCompleteMeasurement(oMeasurement) {
|
|
130
|
-
if (oMeasurement.start > oPendingInteraction.start && oMeasurement.end < oPendingInteraction.end) {
|
|
131
|
-
return oMeasurement;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Check if request is initiated by XHR, comleted and timeframe of request is within timeframe of current interaction
|
|
137
|
-
*
|
|
138
|
-
* @param {object} oRequestTiming PerformanceResourceTiming as retrieved by performance.getEntryByType("resource")
|
|
139
|
-
* @return {boolean} true if the request is a completed XHR with started and ended within the current interaction
|
|
140
|
-
* @private
|
|
141
|
-
*/
|
|
142
|
-
function isValidInteractionXHR(oRequestTiming) {
|
|
143
|
-
// if the request has been completed it has complete timing figures)
|
|
144
|
-
var bComplete = oRequestTiming.startTime > 0 &&
|
|
145
|
-
oRequestTiming.startTime <= oRequestTiming.requestStart &&
|
|
146
|
-
oRequestTiming.requestStart <= oRequestTiming.responseEnd;
|
|
147
|
-
|
|
148
|
-
var bPartOfInteraction = oPendingInteraction.start <= (performance.timeOrigin + oRequestTiming.requestStart) &&
|
|
149
|
-
oPendingInteraction.end >= (performance.timeOrigin + oRequestTiming.responseEnd);
|
|
150
|
-
|
|
151
|
-
return bPartOfInteraction && bComplete && oRequestTiming.initiatorType === "xmlhttprequest";
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function aggregateRequestTiming(oRequest) {
|
|
155
|
-
// aggregate navigation and roundtrip with respect to requests overlapping and times w/o requests (gaps)
|
|
156
|
-
this.end = oRequest.responseEnd > this.end ? oRequest.responseEnd : this.end;
|
|
157
|
-
// sum up request time as a grand total over all requests
|
|
158
|
-
oPendingInteraction.requestTime += (oRequest.responseEnd - oRequest.startTime);
|
|
159
|
-
|
|
160
|
-
// if there is a gap between requests we add the times to the aggrgate and shift the lower limits
|
|
161
|
-
if (this.roundtripHigherLimit <= oRequest.startTime) {
|
|
162
|
-
oPendingInteraction.navigation += (this.navigationHigherLimit - this.navigationLowerLimit);
|
|
163
|
-
oPendingInteraction.roundtrip += (this.roundtripHigherLimit - this.roundtripLowerLimit);
|
|
164
|
-
this.navigationLowerLimit = oRequest.startTime;
|
|
165
|
-
this.roundtripLowerLimit = oRequest.startTime;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// shift the limits if this request was completed later than the earlier requests
|
|
169
|
-
if (oRequest.responseEnd > this.roundtripHigherLimit) {
|
|
170
|
-
this.roundtripHigherLimit = oRequest.responseEnd;
|
|
171
|
-
}
|
|
172
|
-
if (oRequest.requestStart > this.navigationHigherLimit) {
|
|
173
|
-
this.navigationHigherLimit = oRequest.requestStart;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function aggregateRequestTimings(aRequests) {
|
|
178
|
-
var oTimings = {
|
|
179
|
-
start: aRequests[0].startTime,
|
|
180
|
-
end: aRequests[0].responseEnd,
|
|
181
|
-
navigationLowerLimit: aRequests[0].startTime,
|
|
182
|
-
navigationHigherLimit: aRequests[0].requestStart,
|
|
183
|
-
roundtripLowerLimit: aRequests[0].startTime,
|
|
184
|
-
roundtripHigherLimit: aRequests[0].responseEnd
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
// aggregate all timings by operating on the oTimings object
|
|
188
|
-
aRequests.forEach(aggregateRequestTiming, oTimings);
|
|
189
|
-
oPendingInteraction.navigation += (oTimings.navigationHigherLimit - oTimings.navigationLowerLimit);
|
|
190
|
-
oPendingInteraction.roundtrip += (oTimings.roundtripHigherLimit - oTimings.roundtripLowerLimit);
|
|
191
|
-
|
|
192
|
-
// calculate average network time per request
|
|
193
|
-
if (oPendingInteraction.networkTime) {
|
|
194
|
-
var iTotalNetworkTime = oPendingInteraction.requestTime - oPendingInteraction.networkTime;
|
|
195
|
-
oPendingInteraction.networkTime = iTotalNetworkTime / aRequests.length;
|
|
196
|
-
} else {
|
|
197
|
-
oPendingInteraction.networkTime = 0;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
function finalizeInteraction(iTime) {
|
|
202
|
-
if (oPendingInteraction) {
|
|
203
|
-
var aAllRequestTimings = performance.getEntriesByType("resource");
|
|
204
|
-
var oFinshedInteraction;
|
|
205
|
-
oPendingInteraction.end = iTime;
|
|
206
|
-
oPendingInteraction.processing = iTime - oPendingInteraction.start;
|
|
207
|
-
oPendingInteraction.duration = oPendingInteraction.processing;
|
|
208
|
-
oPendingInteraction.requests = aAllRequestTimings.filter(isValidInteractionXHR);
|
|
209
|
-
oPendingInteraction.completeRoundtrips = 0;
|
|
210
|
-
oPendingInteraction.measurements = Measurement.filterMeasurements(isCompleteMeasurement, true);
|
|
211
|
-
if (oPendingInteraction.requests.length > 0) {
|
|
212
|
-
aggregateRequestTimings(oPendingInteraction.requests);
|
|
213
|
-
}
|
|
214
|
-
oPendingInteraction.completeRoundtrips = oPendingInteraction.requests.length;
|
|
215
|
-
|
|
216
|
-
// calculate real processing time if any processing took place
|
|
217
|
-
// cannot be negative as then requests took longer than processing
|
|
218
|
-
var iProcessing = oPendingInteraction.processing - oPendingInteraction.navigation - oPendingInteraction.roundtrip;
|
|
219
|
-
oPendingInteraction.processing = iProcessing > -1 ? iProcessing : 0;
|
|
220
|
-
|
|
221
|
-
oPendingInteraction.completed = true;
|
|
222
|
-
|
|
223
|
-
// Duration threshold 2 in order to filter not performance relevant interactions such as liveChange
|
|
224
|
-
if (oPendingInteraction.semanticStepName || oPendingInteraction.duration >= 2 || oPendingInteraction.requests.length > 0 || isNavigation) {
|
|
225
|
-
aInteractions.push(oPendingInteraction);
|
|
226
|
-
oFinshedInteraction = aInteractions[aInteractions.length - 1];
|
|
227
|
-
if (Log.isLoggable()) {
|
|
228
|
-
Log.debug("Interaction step finished: trigger: " + oPendingInteraction.trigger + "; duration: " + oPendingInteraction.duration + "; requests: " + oPendingInteraction.requests.length, "Interaction.js");
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
// Execute onInteractionFinished always in case function exist to enable cleanup in FESR independent of filtering
|
|
232
|
-
if (Interaction.onInteractionFinished) {
|
|
233
|
-
Interaction.onInteractionFinished(oFinshedInteraction);
|
|
234
|
-
}
|
|
235
|
-
Object.freeze(oPendingInteraction);
|
|
236
|
-
oPendingInteraction = null;
|
|
237
|
-
oCurrentBrowserEvent = null;
|
|
238
|
-
isNavigation = false;
|
|
239
|
-
bMatched = false;
|
|
240
|
-
bPerfectMatch = false;
|
|
241
|
-
clearTimeout(iResetCurrentBrowserEventTimer);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// component determination - heuristic
|
|
246
|
-
function createOwnerComponentInfo(oSrcElement) {
|
|
247
|
-
var sId, sVersion;
|
|
248
|
-
if (oSrcElement) {
|
|
249
|
-
var Component, oComponent;
|
|
250
|
-
Component = sap.ui.require("sap/ui/core/Component");
|
|
251
|
-
if (Component) {
|
|
252
|
-
while (oSrcElement && oSrcElement.getParent) {
|
|
253
|
-
oComponent = Component.getOwnerComponentFor(oSrcElement);
|
|
254
|
-
if (oComponent || oSrcElement instanceof Component) {
|
|
255
|
-
oComponent = oComponent || oSrcElement;
|
|
256
|
-
var oApp = oComponent.getManifestEntry("sap.app");
|
|
257
|
-
// get app id or module name for FESR
|
|
258
|
-
sId = oApp && oApp.id || oComponent.getMetadata().getName();
|
|
259
|
-
sVersion = oApp && oApp.applicationVersion && oApp.applicationVersion.version;
|
|
260
|
-
}
|
|
261
|
-
oSrcElement = oSrcElement.getParent();
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
return {
|
|
266
|
-
id: sId ? sId : "undetermined",
|
|
267
|
-
version: sVersion ? sVersion : ""
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
var bInteractionActive = false,
|
|
272
|
-
oCurrentBrowserEvent,
|
|
273
|
-
oBrowserElement,
|
|
274
|
-
bMatched = false,
|
|
275
|
-
bPerfectMatch = false,
|
|
276
|
-
iInteractionStepTimer,
|
|
277
|
-
bIdle = false,
|
|
278
|
-
bSuspended = false,
|
|
279
|
-
iInteractionCounter = 0,
|
|
280
|
-
descScriptSrc = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, "src");
|
|
281
|
-
|
|
282
|
-
/* As UI5 resources gets also loaded via script tags we need to
|
|
283
|
-
* intercept this kind of loading as well. We assume that changing the
|
|
284
|
-
* 'src' property indicates a resource loading via a script tag. In some cases
|
|
285
|
-
* the src property will be updated multiple times, so we should intercept
|
|
286
|
-
* the same script tag only once (dataset.sapUiCoreInteractionHandled)
|
|
287
|
-
*/
|
|
288
|
-
function interceptScripts() {
|
|
289
|
-
Object.defineProperty(HTMLScriptElement.prototype, "src", {
|
|
290
|
-
set: function(val) {
|
|
291
|
-
var fnDone;
|
|
292
|
-
|
|
293
|
-
if (!this.dataset.sapUiCoreInteractionHandled) {
|
|
294
|
-
fnDone = Interaction.notifyAsyncStep();
|
|
295
|
-
this.addEventListener("load", function() {
|
|
296
|
-
fnDone();
|
|
297
|
-
});
|
|
298
|
-
this.addEventListener("error" , function() {
|
|
299
|
-
fnDone();
|
|
300
|
-
});
|
|
301
|
-
this.dataset.sapUiCoreInteractionHandled = "true";
|
|
302
|
-
}
|
|
303
|
-
descScriptSrc.set.call(this, val);
|
|
304
|
-
},
|
|
305
|
-
get: descScriptSrc.get
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
function registerXHROverrides() {
|
|
310
|
-
// store the byte size of the body
|
|
311
|
-
XHRInterceptor.register(INTERACTION, "send" ,function() {
|
|
312
|
-
if (this.pendingInteraction) {
|
|
313
|
-
// double string length for byte length as in js characters are stored as 16 bit ints
|
|
314
|
-
this.pendingInteraction.bytesSent += arguments[0] ? arguments[0].length : 0;
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
// store request header size
|
|
319
|
-
XHRInterceptor.register(INTERACTION, "setRequestHeader", function(sHeader, sValue) {
|
|
320
|
-
// count request header length consistent to what getAllResponseHeaders().length would return
|
|
321
|
-
if (!this.requestHeaderLength) {
|
|
322
|
-
this.requestHeaderLength = 0;
|
|
323
|
-
}
|
|
324
|
-
// assume request header byte size
|
|
325
|
-
this.requestHeaderLength += (sHeader + "").length + (sValue + "").length;
|
|
326
|
-
|
|
327
|
-
});
|
|
328
|
-
|
|
329
|
-
// register the response handler for data collection
|
|
330
|
-
XHRInterceptor.register(INTERACTION, "open", function (sMethod, sUrl, bAsync) {
|
|
331
|
-
var sEpp,
|
|
332
|
-
sAction,
|
|
333
|
-
sRootContextID;
|
|
334
|
-
|
|
335
|
-
function handleInteraction(fnDone) {
|
|
336
|
-
if (this.readyState === 4) {
|
|
337
|
-
fnDone();
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
// we only need to take care of requests when we have a running interaction
|
|
341
|
-
if (oPendingInteraction) {
|
|
342
|
-
var bIsNoCorsRequest = !isCORSRequest(sUrl);
|
|
343
|
-
// only use Interaction for non CORS requests
|
|
344
|
-
if (bIsNoCorsRequest) {
|
|
345
|
-
//only track if FESR.clientID == EPP.Action && FESR.rootContextID == EPP.rootContextID
|
|
346
|
-
sEpp = Interaction.passportHeader.get(this);
|
|
347
|
-
if (sEpp && sEpp.length >= 370) {
|
|
348
|
-
sAction = hexToAscii(sEpp.substring(150, 230));
|
|
349
|
-
if (parseInt(sEpp.substring(8, 10), 16) > 2) { // version number > 2 --> extended passport
|
|
350
|
-
sRootContextID = sEpp.substring(372, 404);
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
if (!sEpp || sAction && sRootContextID && oPendingInteraction.passportAction.endsWith(sAction)) {
|
|
354
|
-
this.addEventListener("readystatechange", handleResponse.bind(this, oPendingInteraction.id));
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
// arguments at position 2 is indicatior whether request is async or not
|
|
358
|
-
// readystatechange must not be used for sync CORS request since it does not work properly
|
|
359
|
-
// this is especially necessary in case request was not started by LoaderExtension
|
|
360
|
-
// bAsync is by default true, therefore we need to check eplicitly for value 'false'
|
|
361
|
-
if (bIsNoCorsRequest || bAsync !== false) {
|
|
362
|
-
// notify async step for all XHRs (even CORS requests)
|
|
363
|
-
this.addEventListener("readystatechange", handleInteraction.bind(this, Interaction.notifyAsyncStep()));
|
|
364
|
-
}
|
|
365
|
-
// assign the current interaction to the xhr for later response header retrieval.
|
|
366
|
-
this.pendingInteraction = oPendingInteraction;
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// check if SAP compression rules are fulfilled
|
|
373
|
-
function checkCompression(sURL, sContentEncoding, sContentType, sContentLength) {
|
|
374
|
-
//remove hashes and queries + find extension (last . segment)
|
|
375
|
-
var fileExtension = sURL.split('.').pop().split(/\#|\?/)[0];
|
|
376
|
-
|
|
377
|
-
if (sContentEncoding === 'gzip' ||
|
|
378
|
-
sContentEncoding === 'br' ||
|
|
379
|
-
sContentType in mCompressedMimeTypes ||
|
|
380
|
-
(fileExtension && sCompressedExtensions.indexOf(fileExtension) !== -1) ||
|
|
381
|
-
sContentLength < 1024) {
|
|
382
|
-
return true;
|
|
383
|
-
} else {
|
|
384
|
-
return false;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
// response handler which uses the custom properties we added to the xhr to retrieve information from the response headers
|
|
389
|
-
function handleResponse(sId) {
|
|
390
|
-
if (this.readyState === 4) {
|
|
391
|
-
if (this.pendingInteraction && !this.pendingInteraction.completed && oPendingInteraction.id === sId) {
|
|
392
|
-
// enrich interaction with information
|
|
393
|
-
var sContentLength = this.getResponseHeader("content-length"),
|
|
394
|
-
bCompressed = checkCompression(this.responseURL, this.getResponseHeader("content-encoding"), this.getResponseHeader("content-type"), sContentLength),
|
|
395
|
-
sFesrec = this.getResponseHeader("sap-perf-fesrec");
|
|
396
|
-
this.pendingInteraction.bytesReceived += sContentLength ? parseInt(sContentLength) : 0;
|
|
397
|
-
this.pendingInteraction.bytesReceived += this.getAllResponseHeaders().length;
|
|
398
|
-
this.pendingInteraction.bytesSent += this.requestHeaderLength || 0;
|
|
399
|
-
// this should be true only if all responses are compressed
|
|
400
|
-
this.pendingInteraction.requestCompression = bCompressed && (this.pendingInteraction.requestCompression !== false);
|
|
401
|
-
// sap-perf-fesrec header contains milliseconds
|
|
402
|
-
this.pendingInteraction.networkTime += sFesrec ? Math.round(parseFloat(sFesrec, 10) / 1000) : 0;
|
|
403
|
-
var sSapStatistics = this.getResponseHeader("sap-statistics");
|
|
404
|
-
if (sSapStatistics) {
|
|
405
|
-
var aTimings = performance.getEntriesByType("resource");
|
|
406
|
-
this.pendingInteraction.sapStatistics.push({
|
|
407
|
-
// add response url for mapping purposes
|
|
408
|
-
url: this.responseURL,
|
|
409
|
-
statistics: sSapStatistics,
|
|
410
|
-
timing: aTimings ? aTimings[aTimings.length - 1] : undefined
|
|
411
|
-
});
|
|
412
|
-
}
|
|
413
|
-
delete this.requestHeaderLength;
|
|
414
|
-
delete this.pendingInteraction;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
420
60
|
/**
|
|
421
61
|
* Provides base functionality for interaction detection heuristics & API.
|
|
422
62
|
|
|
@@ -449,11 +89,7 @@ sap.ui.define([
|
|
|
449
89
|
* @since 1.76
|
|
450
90
|
*/
|
|
451
91
|
getAll : function(bFinalize) {
|
|
452
|
-
|
|
453
|
-
// force the finalization of the currently pending interaction
|
|
454
|
-
Interaction.end(true);
|
|
455
|
-
}
|
|
456
|
-
return aInteractions;
|
|
92
|
+
return [];
|
|
457
93
|
},
|
|
458
94
|
|
|
459
95
|
/**
|
|
@@ -472,15 +108,7 @@ sap.ui.define([
|
|
|
472
108
|
* @since 1.76
|
|
473
109
|
*/
|
|
474
110
|
filter : function(fnFilter) {
|
|
475
|
-
|
|
476
|
-
if (fnFilter) {
|
|
477
|
-
for (var i = 0, l = aInteractions.length; i < l; i++) {
|
|
478
|
-
if (fnFilter(aInteractions[i])) {
|
|
479
|
-
aFilteredInteractions.push(aInteractions[i]);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
return aFilteredInteractions;
|
|
111
|
+
return [];
|
|
484
112
|
},
|
|
485
113
|
/**
|
|
486
114
|
* Gets the incomplete pending interaction.
|
|
@@ -490,7 +118,7 @@ sap.ui.define([
|
|
|
490
118
|
* @private
|
|
491
119
|
*/
|
|
492
120
|
getPending : function() {
|
|
493
|
-
return
|
|
121
|
+
return undefined;
|
|
494
122
|
},
|
|
495
123
|
|
|
496
124
|
/**
|
|
@@ -498,9 +126,7 @@ sap.ui.define([
|
|
|
498
126
|
*
|
|
499
127
|
* @private
|
|
500
128
|
*/
|
|
501
|
-
clear : function() {
|
|
502
|
-
aInteractions = [];
|
|
503
|
-
},
|
|
129
|
+
clear : function() {},
|
|
504
130
|
|
|
505
131
|
/**
|
|
506
132
|
* Start an interaction measurements.
|
|
@@ -510,44 +136,7 @@ sap.ui.define([
|
|
|
510
136
|
* @static
|
|
511
137
|
* @private
|
|
512
138
|
*/
|
|
513
|
-
start : function(sType, oSrcElement) {
|
|
514
|
-
var iTime = now();
|
|
515
|
-
|
|
516
|
-
if (oPendingInteraction) {
|
|
517
|
-
finalizeInteraction(iTime);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
//reset async counter/timer
|
|
521
|
-
if (iInteractionStepTimer) {
|
|
522
|
-
clearTimeout(iInteractionStepTimer);
|
|
523
|
-
}
|
|
524
|
-
iInteractionCounter = 0;
|
|
525
|
-
|
|
526
|
-
// clear request timings for new interaction
|
|
527
|
-
if (performance.clearResourceTimings) {
|
|
528
|
-
performance.clearResourceTimings();
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
var oComponentInfo = createOwnerComponentInfo(oSrcElement);
|
|
532
|
-
|
|
533
|
-
// setup new pending interaction
|
|
534
|
-
oPendingInteraction = createMeasurement(bInitialized ? iTime : undefined);
|
|
535
|
-
oPendingInteraction.event = sType;
|
|
536
|
-
oPendingInteraction.component = oComponentInfo.id;
|
|
537
|
-
oPendingInteraction.appVersion = oComponentInfo.version;
|
|
538
|
-
if (oSrcElement && oSrcElement.getId) {
|
|
539
|
-
oPendingInteraction.trigger = oSrcElement.getId();
|
|
540
|
-
oPendingInteraction.semanticStepName = FESRHelper.getSemanticStepname(oSrcElement, sType);
|
|
541
|
-
}
|
|
542
|
-
/*eslint-disable no-console */
|
|
543
|
-
if (Log.isLoggable(null, "sap.ui.Performance")) {
|
|
544
|
-
console.time("INTERACTION: " + oPendingInteraction.trigger + " - " + oPendingInteraction.event);
|
|
545
|
-
}
|
|
546
|
-
/*eslint-enable no-console */
|
|
547
|
-
if (Log.isLoggable()) {
|
|
548
|
-
Log.debug("Interaction step started: trigger: " + oPendingInteraction.trigger + "; type: " + oPendingInteraction.event, "Interaction.js");
|
|
549
|
-
}
|
|
550
|
-
},
|
|
139
|
+
start : function(sType, oSrcElement) {},
|
|
551
140
|
|
|
552
141
|
/**
|
|
553
142
|
* End an interaction measurements.
|
|
@@ -556,24 +145,7 @@ sap.ui.define([
|
|
|
556
145
|
* @static
|
|
557
146
|
* @private
|
|
558
147
|
*/
|
|
559
|
-
end : function(bForce) {
|
|
560
|
-
if (oPendingInteraction) {
|
|
561
|
-
if (bForce) {
|
|
562
|
-
/*eslint-disable no-console */
|
|
563
|
-
if (Log.isLoggable(null, "sap.ui.Performance")) {
|
|
564
|
-
console.timeEnd("INTERACTION: " + oPendingInteraction.trigger + " - " + oPendingInteraction.event);
|
|
565
|
-
}
|
|
566
|
-
/*eslint-enable no-console */
|
|
567
|
-
finalizeInteraction(oPendingInteraction.preliminaryEnd || now());
|
|
568
|
-
if (Log.isLoggable()) {
|
|
569
|
-
Log.debug("Interaction ended...");
|
|
570
|
-
}
|
|
571
|
-
} else {
|
|
572
|
-
// set provisionary processing time from start to end and calculate later
|
|
573
|
-
oPendingInteraction.preliminaryEnd = now();
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
},
|
|
148
|
+
end : function(bForce) {},
|
|
577
149
|
|
|
578
150
|
/**
|
|
579
151
|
* Returns true if the interaction detection was enabled explicitly, or implicitly along with fesr.
|
|
@@ -591,25 +163,28 @@ sap.ui.define([
|
|
|
591
163
|
* Enables the interaction tracking.
|
|
592
164
|
*
|
|
593
165
|
* @param {boolean} bActive State of the interaction detection
|
|
594
|
-
*
|
|
166
|
+
* @returns {Promise} Resolves when FESR is active
|
|
595
167
|
* @static
|
|
596
168
|
* @public
|
|
597
169
|
* @since 1.76
|
|
598
170
|
*/
|
|
599
|
-
setActive : function(bActive) {
|
|
171
|
+
setActive : async function(bActive) {
|
|
600
172
|
bInteractionActive = bActive;
|
|
601
173
|
if (bActive) {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
174
|
+
await new Promise((resolve, reject) => {
|
|
175
|
+
sap.ui.require([
|
|
176
|
+
"sap/ui/performance/trace/_InteractionImpl"
|
|
177
|
+
], (
|
|
178
|
+
_InteractionImpl
|
|
179
|
+
) => {
|
|
180
|
+
Object.assign(Interaction, _InteractionImpl);
|
|
181
|
+
oInteractionImpl = _InteractionImpl;
|
|
182
|
+
oInteractionImpl._setActive(bActive);
|
|
183
|
+
resolve();
|
|
184
|
+
}, reject);
|
|
185
|
+
});
|
|
186
|
+
} else {
|
|
187
|
+
oInteractionImpl?._setActive(bActive);
|
|
613
188
|
}
|
|
614
189
|
},
|
|
615
190
|
|
|
@@ -617,33 +192,21 @@ sap.ui.define([
|
|
|
617
192
|
* Mark interaction as navigation related
|
|
618
193
|
* @private
|
|
619
194
|
*/
|
|
620
|
-
notifyNavigation: function() {
|
|
621
|
-
isNavigation = true;
|
|
622
|
-
},
|
|
195
|
+
notifyNavigation: function() {},
|
|
623
196
|
|
|
624
197
|
/**
|
|
625
198
|
* Start tracking busy time for a Control
|
|
626
|
-
* @param {sap.ui.core.Control} oControl
|
|
199
|
+
* @param {sap.ui.core.Control} oControl Start tracking of busy duration for the given control
|
|
627
200
|
* @private
|
|
628
201
|
*/
|
|
629
|
-
notifyShowBusyIndicator : function(oControl) {
|
|
630
|
-
oControl._sapui_fesr_fDelayedStartTime = now() + oControl.getBusyIndicatorDelay();
|
|
631
|
-
},
|
|
202
|
+
notifyShowBusyIndicator : function(oControl) {},
|
|
632
203
|
|
|
633
204
|
/**
|
|
634
205
|
* End tracking busy time for a Control
|
|
635
|
-
* @param {sap.ui.core.Control} oControl
|
|
206
|
+
* @param {sap.ui.core.Control} oControl End tracking of busy duration for the given control
|
|
636
207
|
* @private
|
|
637
208
|
*/
|
|
638
|
-
notifyHideBusyIndicator : function(oControl) {
|
|
639
|
-
if (oControl._sapui_fesr_fDelayedStartTime) {
|
|
640
|
-
// The busy indicator shown duration d is calculated with:
|
|
641
|
-
// d = "time busy indicator was hidden" - "time busy indicator was requested" - "busy indicator delay"
|
|
642
|
-
var fBusyIndicatorShownDuration = now() - oControl._sapui_fesr_fDelayedStartTime;
|
|
643
|
-
Interaction.addBusyDuration((fBusyIndicatorShownDuration > 0) ? fBusyIndicatorShownDuration : 0);
|
|
644
|
-
delete oControl._sapui_fesr_fDelayedStartTime;
|
|
645
|
-
}
|
|
646
|
-
},
|
|
209
|
+
notifyHideBusyIndicator : function(oControl) {},
|
|
647
210
|
|
|
648
211
|
/**
|
|
649
212
|
* This method starts the actual interaction measurement when all criteria are met. As it is the starting point
|
|
@@ -656,94 +219,7 @@ sap.ui.define([
|
|
|
656
219
|
* @static
|
|
657
220
|
* @private
|
|
658
221
|
*/
|
|
659
|
-
notifyStepStart : function(sEventId, oElement, bForce) {
|
|
660
|
-
if (bInteractionActive) {
|
|
661
|
-
var sType,
|
|
662
|
-
elem,
|
|
663
|
-
sClosestSemanticStepName;
|
|
664
|
-
|
|
665
|
-
if ((!oPendingInteraction && oCurrentBrowserEvent) || bForce) {
|
|
666
|
-
if (bForce) {
|
|
667
|
-
sType = "startup";
|
|
668
|
-
} else {
|
|
669
|
-
sType = sEventId;
|
|
670
|
-
}
|
|
671
|
-
Interaction.start(sType, oElement);
|
|
672
|
-
oPendingInteraction = Interaction.getPending();
|
|
673
|
-
|
|
674
|
-
// update pending interaction infos
|
|
675
|
-
if (oPendingInteraction && !oPendingInteraction.completed && Interaction.onInteractionStarted) {
|
|
676
|
-
oPendingInteraction.passportAction = Interaction.onInteractionStarted(oPendingInteraction, bForce);
|
|
677
|
-
}
|
|
678
|
-
// Interaction.start will delete oCurrentBrowserEvent in case there is an oPendingInteraction
|
|
679
|
-
// (notifyStepStart is called with parameter bForce)
|
|
680
|
-
// Conscious decision to not move the coding because this shouldn't be a productive scenario
|
|
681
|
-
if (oCurrentBrowserEvent) {
|
|
682
|
-
oBrowserElement = oCurrentBrowserEvent.srcControl;
|
|
683
|
-
}
|
|
684
|
-
// if browser event matches the first control event we take it for trigger/event determination (step name)
|
|
685
|
-
sClosestSemanticStepName = FESRHelper.getSemanticStepname(oBrowserElement, sEventId);
|
|
686
|
-
if (oElement && oElement.getId && oBrowserElement && oElement.getId() === oBrowserElement.getId()) {
|
|
687
|
-
bPerfectMatch = true;
|
|
688
|
-
} else if (sClosestSemanticStepName) {
|
|
689
|
-
oPendingInteraction.trigger = oBrowserElement.getId();
|
|
690
|
-
oPendingInteraction.semanticStepName = sClosestSemanticStepName;
|
|
691
|
-
bPerfectMatch = true;
|
|
692
|
-
} else {
|
|
693
|
-
elem = oBrowserElement;
|
|
694
|
-
while (elem && elem.getParent()) {
|
|
695
|
-
elem = elem.getParent();
|
|
696
|
-
if (oElement.getId() === elem.getId()) {
|
|
697
|
-
// Stop looking for better fitting control in case the current browser event source control
|
|
698
|
-
// is already child of the control event which triggers the interaction because all other
|
|
699
|
-
// control events most likely does not suit better.
|
|
700
|
-
// Example: Click on image of an button will not pass the previous if
|
|
701
|
-
// (oElement.getId() !== oBrowserElement.getId() ==> btn !== btn-img).
|
|
702
|
-
// In case the button is part of an popover and the click on the button closes the popover,
|
|
703
|
-
// the coding below overwrites the button control id with the popover control id in case we
|
|
704
|
-
// don't stop here.
|
|
705
|
-
// Only look for better fitting control in case browser and control event does not fit at all
|
|
706
|
-
bMatched = true;
|
|
707
|
-
break;
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
oCurrentBrowserEvent = null;
|
|
712
|
-
isNavigation = false;
|
|
713
|
-
iResetCurrentBrowserEventTimer = setTimeout(function() {
|
|
714
|
-
//cleanup internal registry after actual call stack.
|
|
715
|
-
oCurrentBrowserEvent = null;
|
|
716
|
-
}, 0);
|
|
717
|
-
bIdle = false;
|
|
718
|
-
Interaction.notifyStepEnd(true); // Start timer to end Interaction in case there is no timing relevant action e.g. rendering, request
|
|
719
|
-
} else if (oPendingInteraction && oBrowserElement && !bPerfectMatch) {
|
|
720
|
-
// if browser event matches one of the next control events we take it for trigger/event determination (step name)
|
|
721
|
-
elem = oBrowserElement;
|
|
722
|
-
sClosestSemanticStepName = FESRHelper.getSemanticStepname(oBrowserElement, sEventId);
|
|
723
|
-
if (elem && oElement.getId() === elem.getId()) {
|
|
724
|
-
oPendingInteraction.trigger = oElement.getId();
|
|
725
|
-
oPendingInteraction.semanticStepName = sClosestSemanticStepName;
|
|
726
|
-
oPendingInteraction.event = sEventId;
|
|
727
|
-
bPerfectMatch = true;
|
|
728
|
-
} else if (sClosestSemanticStepName) {
|
|
729
|
-
oPendingInteraction.trigger = oBrowserElement.getId();
|
|
730
|
-
oPendingInteraction.semanticStepName = sClosestSemanticStepName;
|
|
731
|
-
bPerfectMatch = true;
|
|
732
|
-
} else if (!bMatched) {
|
|
733
|
-
while (elem && elem.getParent()) {
|
|
734
|
-
elem = elem.getParent();
|
|
735
|
-
if (oElement.getId() === elem.getId()) {
|
|
736
|
-
oPendingInteraction.trigger = oElement.getId();
|
|
737
|
-
oPendingInteraction.semanticStepName = FESRHelper.getSemanticStepname(oElement, sEventId);
|
|
738
|
-
oPendingInteraction.event = sEventId;
|
|
739
|
-
//if we find no direct match we consider the last control event for the trigger/event (step name)
|
|
740
|
-
break;
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
},
|
|
222
|
+
notifyStepStart : function(sEventId, oElement, bForce) {},
|
|
747
223
|
|
|
748
224
|
/**
|
|
749
225
|
* Register async operation, that is relevant for a running interaction.
|
|
@@ -754,26 +230,7 @@ sap.ui.define([
|
|
|
754
230
|
* @private
|
|
755
231
|
*/
|
|
756
232
|
notifyAsyncStep : function(sStepName) {
|
|
757
|
-
|
|
758
|
-
/*eslint-disable no-console */
|
|
759
|
-
if (Log.isLoggable(null, "sap.ui.Performance") && sStepName) {
|
|
760
|
-
console.time(sStepName);
|
|
761
|
-
}
|
|
762
|
-
/*eslint-enable no-console */
|
|
763
|
-
var sInteractionId = oPendingInteraction.id;
|
|
764
|
-
delete oPendingInteraction.preliminaryEnd; // Delete prelimanry end to force current timestamp of finalization
|
|
765
|
-
Interaction.notifyAsyncStepStart();
|
|
766
|
-
return function() {
|
|
767
|
-
Interaction.notifyAsyncStepEnd(sInteractionId);
|
|
768
|
-
/*eslint-disable no-console */
|
|
769
|
-
if (Log.isLoggable(null, "sap.ui.Performance") && sStepName) {
|
|
770
|
-
console.timeEnd(sStepName);
|
|
771
|
-
}
|
|
772
|
-
/*eslint-enable no-console */
|
|
773
|
-
};
|
|
774
|
-
} else {
|
|
775
|
-
return function() {};
|
|
776
|
-
}
|
|
233
|
+
return () => {};
|
|
777
234
|
},
|
|
778
235
|
|
|
779
236
|
/**
|
|
@@ -781,64 +238,24 @@ sap.ui.define([
|
|
|
781
238
|
*
|
|
782
239
|
* @private
|
|
783
240
|
*/
|
|
784
|
-
notifyAsyncStepStart : function() {
|
|
785
|
-
if (oPendingInteraction) {
|
|
786
|
-
iInteractionCounter++;
|
|
787
|
-
clearTimeout(iInteractionStepTimer);
|
|
788
|
-
bIdle = false;
|
|
789
|
-
if (Log.isLoggable()) {
|
|
790
|
-
Log.debug("Interaction relevant step started - Number of pending steps: " + iInteractionCounter);
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
},
|
|
241
|
+
notifyAsyncStepStart : function() {},
|
|
794
242
|
|
|
795
243
|
/**
|
|
796
244
|
* Ends a running interaction relevant step by decreasing the internal count.
|
|
797
245
|
*
|
|
246
|
+
* @param {string} [sId] An internal step Id used for logging.
|
|
798
247
|
* @private
|
|
799
248
|
*/
|
|
800
|
-
notifyAsyncStepEnd : function(sId) {
|
|
801
|
-
if (oPendingInteraction && sId === oPendingInteraction.id) {
|
|
802
|
-
iInteractionCounter--;
|
|
803
|
-
Interaction.notifyStepEnd(true);
|
|
804
|
-
if (Log.isLoggable()) {
|
|
805
|
-
Log.debug("Interaction relevant step stopped - Number of pending steps: " + iInteractionCounter);
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
},
|
|
249
|
+
notifyAsyncStepEnd : function(sId) {},
|
|
809
250
|
|
|
810
251
|
/**
|
|
811
252
|
* This method ends the started interaction measurement.
|
|
812
253
|
*
|
|
813
254
|
* @static
|
|
255
|
+
* @param {boolean} bCheckIdle Whether cheking for idle time or not
|
|
814
256
|
* @private
|
|
815
257
|
*/
|
|
816
|
-
notifyStepEnd : function(bCheckIdle) {
|
|
817
|
-
if (bInteractionActive && !bSuspended) {
|
|
818
|
-
if (iInteractionCounter === 0 || !bCheckIdle) {
|
|
819
|
-
if (bIdle || !bCheckIdle) {
|
|
820
|
-
Interaction.end(true);
|
|
821
|
-
if (Log.isLoggable()) {
|
|
822
|
-
Log.debug("Interaction stopped");
|
|
823
|
-
}
|
|
824
|
-
bIdle = false;
|
|
825
|
-
} else {
|
|
826
|
-
Interaction.end(); //set preliminary end time
|
|
827
|
-
bIdle = true;
|
|
828
|
-
if (iInteractionStepTimer) {
|
|
829
|
-
clearTimeout(iInteractionStepTimer);
|
|
830
|
-
}
|
|
831
|
-
// There are control events using a debouncing mechanism for e.g. suggest event (see sap.m.Input)
|
|
832
|
-
// A common debounce treshhold (also used by sap.m.Input) is 300ms therefore we use setTimeout
|
|
833
|
-
// with 301ms to end the Interaction after execution of the debounced event
|
|
834
|
-
iInteractionStepTimer = setTimeout(Interaction.notifyStepEnd, 301);
|
|
835
|
-
if (Log.isLoggable()) {
|
|
836
|
-
Log.debug("Interaction check for idle time - Number of pending steps: " + iInteractionCounter);
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
},
|
|
258
|
+
notifyStepEnd : function(bCheckIdle) {},
|
|
842
259
|
|
|
843
260
|
/**
|
|
844
261
|
* This method notifies if a relevant event has been triggered.
|
|
@@ -847,9 +264,7 @@ sap.ui.define([
|
|
|
847
264
|
* @static
|
|
848
265
|
* @private
|
|
849
266
|
*/
|
|
850
|
-
notifyEventStart : function(oEvent) {
|
|
851
|
-
oCurrentBrowserEvent = bInteractionActive ? oEvent : null;
|
|
852
|
-
},
|
|
267
|
+
notifyEventStart : function(oEvent) {},
|
|
853
268
|
|
|
854
269
|
/**
|
|
855
270
|
* This method notifies if a scroll event has been triggered. Some controls require this special treatment,
|
|
@@ -869,30 +284,7 @@ sap.ui.define([
|
|
|
869
284
|
* @static
|
|
870
285
|
* @private
|
|
871
286
|
*/
|
|
872
|
-
notifyEventEnd : function() {
|
|
873
|
-
if (oCurrentBrowserEvent) {
|
|
874
|
-
// End interaction when a new potential interaction starts
|
|
875
|
-
if (oCurrentBrowserEvent.type.match(/^(mousedown|touchstart|keydown)$/)) {
|
|
876
|
-
Interaction.end(/*bForce*/true);
|
|
877
|
-
}
|
|
878
|
-
// Clean up oCurrentBrowserEvent at the end to prevent dangling events
|
|
879
|
-
// Since oCurrentBrowser event is prerequisite to start an event we need to
|
|
880
|
-
// clean dangling browser events to avoid creating interactions based on these events
|
|
881
|
-
// e.g. The user clicks first somewhere on the UI on a control without press handler.
|
|
882
|
-
// After that the user scrolls in a table and triggers implicit requests via paging.
|
|
883
|
-
// This combination will create an interaction based on the first browser event,
|
|
884
|
-
// created and not cleaned up by the first click within the UI
|
|
885
|
-
if (this.eventEndTimer) {
|
|
886
|
-
clearTimeout(this.eventEndTimer);
|
|
887
|
-
}
|
|
888
|
-
this.eventEndTimer = setTimeout(function() {
|
|
889
|
-
oCurrentBrowserEvent = null;
|
|
890
|
-
delete this.eventEndTimer;
|
|
891
|
-
// There are events fired within a timeout with delay. Cleanup after 10ms
|
|
892
|
-
// to hopefully prevent cleaning up to early (before control event was fired)
|
|
893
|
-
}.bind(this), 10);
|
|
894
|
-
}
|
|
895
|
-
},
|
|
287
|
+
notifyEventEnd : function() {},
|
|
896
288
|
|
|
897
289
|
/**
|
|
898
290
|
* A hook which is called when an interaction is started.
|
|
@@ -916,26 +308,20 @@ sap.ui.define([
|
|
|
916
308
|
* from the actual owner component of the trigger control, which is still the previous component.
|
|
917
309
|
*
|
|
918
310
|
* @static
|
|
311
|
+
* @param {string} sComponentName The name of the component for the actual step.
|
|
919
312
|
* @private
|
|
920
313
|
*/
|
|
921
|
-
setStepComponent : function(sComponentName) {
|
|
922
|
-
if (bInteractionActive && oPendingInteraction && sComponentName && !oPendingInteraction.stepComponent) {
|
|
923
|
-
oPendingInteraction.stepComponent = sComponentName;
|
|
924
|
-
}
|
|
925
|
-
},
|
|
314
|
+
setStepComponent : function(sComponentName) {},
|
|
926
315
|
|
|
927
316
|
/**
|
|
928
317
|
* @param {float} iDuration Increase busy duration of pending interaction by this value
|
|
929
318
|
* @static
|
|
930
319
|
* @private
|
|
931
320
|
*/
|
|
932
|
-
addBusyDuration : function (iDuration) {
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
}
|
|
937
|
-
oPendingInteraction.busyDuration += iDuration;
|
|
938
|
-
}
|
|
321
|
+
addBusyDuration : function (iDuration) {},
|
|
322
|
+
|
|
323
|
+
setFESR : function(oFESR) {
|
|
324
|
+
oInteractionImpl?._setFESR(oFESR);
|
|
939
325
|
}
|
|
940
326
|
};
|
|
941
327
|
|