@openui5/sap.ui.core 1.96.2 → 1.98.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +62 -3
- package/.reuse/dep5 +26 -31
- package/THIRDPARTY.txt +15 -21
- package/package.json +1 -1
- package/src/jquery.sap.act.js +1 -1
- package/src/jquery.sap.dom.js +1 -1
- package/src/jquery.sap.encoder.js +1 -1
- package/src/jquery.sap.events.js +1 -1
- package/src/jquery.sap.global.js +2 -2
- package/src/jquery.sap.history.js +1 -1
- package/src/jquery.sap.keycodes.js +1 -1
- package/src/jquery.sap.mobile.js +1 -9
- package/src/jquery.sap.promise.js +1 -1
- package/src/jquery.sap.properties.js +2 -2
- package/src/jquery.sap.resources.js +3 -3
- package/src/jquery.sap.script.js +2 -2
- package/src/jquery.sap.sjax.js +1 -1
- package/src/jquery.sap.storage.js +4 -4
- package/src/jquery.sap.strings.js +1 -1
- package/src/jquery.sap.stubs.js +1 -1
- package/src/jquery.sap.trace.js +1 -1
- package/src/jquery.sap.ui.js +1 -1
- package/src/jquery.sap.xml.js +1 -1
- package/src/sap/base/Log.js +1 -1
- package/src/sap/base/assert.js +1 -1
- package/src/sap/base/i18n/ResourceBundle.js +1 -1
- package/src/sap/base/security/URLListValidator.js +1 -1
- package/src/sap/base/security/URLWhitelist.js +1 -1
- package/src/sap/base/security/encodeCSS.js +1 -1
- package/src/sap/base/security/encodeJS.js +1 -1
- package/src/sap/base/security/encodeURL.js +1 -1
- package/src/sap/base/security/encodeURLParameters.js +1 -1
- package/src/sap/base/security/encodeXML.js +1 -1
- package/src/sap/base/security/sanitizeHTML.js +1 -1
- package/src/sap/base/strings/camelize.js +1 -1
- package/src/sap/base/strings/capitalize.js +1 -1
- package/src/sap/base/strings/escapeRegExp.js +1 -1
- package/src/sap/base/strings/formatMessage.js +1 -1
- package/src/sap/base/strings/hash.js +1 -1
- package/src/sap/base/strings/hyphenate.js +1 -1
- package/src/sap/base/strings/toHex.js +1 -1
- package/src/sap/base/strings/whitespaceReplacer.js +1 -1
- package/src/sap/base/util/Deferred.js +1 -1
- package/src/sap/base/util/JSTokenizer.js +1 -1
- package/src/sap/base/util/LoaderExtensions.js +1 -1
- package/src/sap/base/util/ObjectPath.js +1 -1
- package/src/sap/base/util/Properties.js +1 -1
- package/src/sap/base/util/UriParameters.js +1 -1
- package/src/sap/base/util/Version.js +1 -1
- package/src/sap/base/util/_merge.js +1 -1
- package/src/sap/base/util/array/diff.js +1 -1
- package/src/sap/base/util/array/uniqueSort.js +1 -1
- package/src/sap/base/util/deepClone.js +1 -1
- package/src/sap/base/util/deepEqual.js +1 -1
- package/src/sap/base/util/deepExtend.js +1 -1
- package/src/sap/base/util/defineCoupledProperty.js +1 -1
- package/src/sap/base/util/defineLazyProperty.js +1 -1
- package/src/sap/base/util/each.js +1 -1
- package/src/sap/base/util/extend.js +1 -1
- package/src/sap/base/util/includes.js +1 -1
- package/src/sap/base/util/isEmptyObject.js +1 -1
- package/src/sap/base/util/isPlainObject.js +1 -1
- package/src/sap/base/util/merge.js +1 -1
- package/src/sap/base/util/now.js +1 -1
- package/src/sap/base/util/resolveReference.js +1 -1
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +2 -2
- package/src/sap/base/util/restricted/_compact.js +2 -2
- package/src/sap/base/util/restricted/_curry.js +2 -2
- package/src/sap/base/util/restricted/_debounce.js +2 -2
- package/src/sap/base/util/restricted/_difference.js +2 -2
- package/src/sap/base/util/restricted/_differenceBy.js +2 -2
- package/src/sap/base/util/restricted/_differenceWith.js +2 -2
- package/src/sap/base/util/restricted/_flatMap.js +2 -2
- package/src/sap/base/util/restricted/_flatMapDeep.js +2 -2
- package/src/sap/base/util/restricted/_flatMapDepth.js +2 -2
- package/src/sap/base/util/restricted/_flatten.js +2 -2
- package/src/sap/base/util/restricted/_flattenDeep.js +2 -2
- package/src/sap/base/util/restricted/_flattenDepth.js +2 -2
- package/src/sap/base/util/restricted/_intersection.js +2 -2
- package/src/sap/base/util/restricted/_intersectionBy.js +2 -2
- package/src/sap/base/util/restricted/_intersectionWith.js +2 -2
- package/src/sap/base/util/restricted/_isEqual.js +2 -2
- package/src/sap/base/util/restricted/_isEqualWith.js +2 -2
- package/src/sap/base/util/restricted/_isNil.js +2 -2
- package/src/sap/base/util/restricted/_max.js +2 -2
- package/src/sap/base/util/restricted/_merge.js +2 -2
- package/src/sap/base/util/restricted/_mergeWith.js +2 -2
- package/src/sap/base/util/restricted/_min.js +2 -2
- package/src/sap/base/util/restricted/_omit.js +2 -2
- package/src/sap/base/util/restricted/_pick.js +2 -2
- package/src/sap/base/util/restricted/_pickBy.js +2 -2
- package/src/sap/base/util/restricted/_throttle.js +2 -2
- package/src/sap/base/util/restricted/_toArray.js +2 -2
- package/src/sap/base/util/restricted/_union.js +2 -2
- package/src/sap/base/util/restricted/_unionBy.js +2 -2
- package/src/sap/base/util/restricted/_unionWith.js +2 -2
- package/src/sap/base/util/restricted/_uniq.js +2 -2
- package/src/sap/base/util/restricted/_uniqBy.js +2 -2
- package/src/sap/base/util/restricted/_uniqWith.js +2 -2
- package/src/sap/base/util/restricted/_without.js +2 -2
- package/src/sap/base/util/restricted/_xor.js +2 -2
- package/src/sap/base/util/restricted/_xorBy.js +2 -2
- package/src/sap/base/util/restricted/_xorWith.js +2 -2
- package/src/sap/base/util/restricted/_zipObject.js +2 -2
- package/src/sap/base/util/restricted/_zipObjectDeep.js +2 -2
- package/src/sap/base/util/uid.js +1 -1
- package/src/sap/base/util/values.js +1 -1
- package/src/sap/ui/Device.js +82 -170
- package/src/sap/ui/Global.js +12 -17
- package/src/sap/ui/VersionInfo.js +1 -1
- package/src/sap/ui/base/BindingParser.js +1 -1
- package/src/sap/ui/base/DataType.js +1 -1
- package/src/sap/ui/base/Event.js +2 -2
- package/src/sap/ui/base/EventProvider.js +2 -2
- package/src/sap/ui/base/Exception.js +1 -1
- package/src/sap/ui/base/ExpressionParser.js +1 -1
- package/src/sap/ui/base/Interface.js +2 -2
- package/src/sap/ui/base/ManagedObject.js +20 -9
- package/src/sap/ui/base/ManagedObjectMetadata.js +2 -2
- package/src/sap/ui/base/ManagedObjectObserver.js +1 -1
- package/src/sap/ui/base/ManagedObjectRegistry.js +1 -1
- package/src/sap/ui/base/Metadata.js +2 -4
- package/src/sap/ui/base/Object.js +2 -2
- package/src/sap/ui/base/ObjectPool.js +2 -2
- package/src/sap/ui/base/SyncPromise.js +1 -1
- package/src/sap/ui/base/syncXHRFix.js +1 -1
- package/src/sap/ui/core/.library +2 -28
- package/src/sap/ui/core/AppCacheBuster.js +5 -5
- package/src/sap/ui/core/BlockLayerUtils.js +1 -1
- package/src/sap/ui/core/BusyIndicator.js +2 -2
- package/src/sap/ui/core/BusyIndicatorUtils.js +2 -2
- package/src/sap/ui/core/CalendarType.js +1 -1
- package/src/sap/ui/core/CommandExecution.js +1 -1
- package/src/sap/ui/core/Component.js +32 -10
- package/src/sap/ui/core/ComponentContainer.js +2 -2
- package/src/sap/ui/core/ComponentContainerRenderer.js +1 -1
- package/src/sap/ui/core/ComponentMetadata.js +2 -2
- package/src/sap/ui/core/ComponentSupport.js +2 -2
- package/src/sap/ui/core/Configuration.js +3 -5
- package/src/sap/ui/core/ContextMenuSupport.js +1 -1
- package/src/sap/ui/core/Control.js +4 -4
- package/src/sap/ui/core/Core.js +3 -6
- package/src/sap/ui/core/CustomData.js +2 -2
- package/src/sap/ui/core/CustomStyleClassSupport.js +1 -1
- package/src/sap/ui/core/DeclarativeSupport.js +2 -2
- package/src/sap/ui/core/Element.js +4 -7
- package/src/sap/ui/core/ElementMetadata.js +2 -2
- package/src/sap/ui/core/EnabledPropagator.js +2 -2
- package/src/sap/ui/core/EventBus.js +2 -2
- package/src/sap/ui/core/ExtensionPoint.js +1 -1
- package/src/sap/ui/core/FocusHandler.js +1 -1
- package/src/sap/ui/core/Fragment.js +2 -2
- package/src/sap/ui/core/HTML.js +4 -4
- package/src/sap/ui/core/HTMLRenderer.js +1 -1
- package/src/sap/ui/core/History.js +2 -2
- package/src/sap/ui/core/Icon.js +3 -4
- package/src/sap/ui/core/IconPool.js +1 -1
- package/src/sap/ui/core/IconRenderer.js +1 -1
- package/src/sap/ui/core/IndicationColorSupport.js +2 -2
- package/src/sap/ui/core/IntervalTrigger.js +2 -2
- package/src/sap/ui/core/InvisibleMessage.js +2 -2
- package/src/sap/ui/core/InvisibleRenderer.js +2 -2
- package/src/sap/ui/core/InvisibleText.js +2 -2
- package/src/sap/ui/core/Item.js +2 -2
- package/src/sap/ui/core/LabelEnablement.js +2 -2
- package/src/sap/ui/core/LayoutData.js +2 -2
- package/src/sap/ui/core/ListItem.js +2 -2
- package/src/sap/ui/core/LocalBusyIndicator.js +2 -2
- package/src/sap/ui/core/LocalBusyIndicatorRenderer.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicatorSupport.js +2 -2
- package/src/sap/ui/core/Locale.js +2 -2
- package/src/sap/ui/core/LocaleData.js +4 -4
- package/src/sap/ui/core/Manifest.js +2 -2
- package/src/sap/ui/core/Message.js +2 -2
- package/src/sap/ui/core/Patcher.js +1 -1
- package/src/sap/ui/core/Placeholder.js +29 -29
- package/src/sap/ui/core/Popup.js +2 -2
- package/src/sap/ui/core/RenderManager.js +4 -4
- package/src/sap/ui/core/Renderer.js +2 -2
- package/src/sap/ui/core/ResizeHandler.js +2 -2
- package/src/sap/ui/core/ScrollBar.js +5 -4
- package/src/sap/ui/core/ScrollBarRenderer.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +2 -2
- package/src/sap/ui/core/Shortcut.js +1 -1
- package/src/sap/ui/core/ShortcutHint.js +1 -1
- package/src/sap/ui/core/ShortcutHintsMixin.js +1 -1
- package/src/sap/ui/core/StashedControlSupport.js +1 -1
- package/src/sap/ui/core/ThemeCheck.js +3 -3
- package/src/sap/ui/core/Title.js +2 -2
- package/src/sap/ui/core/TooltipBase.js +3 -3
- package/src/sap/ui/core/UIArea.js +4 -4
- package/src/sap/ui/core/UIComponent.js +2 -2
- package/src/sap/ui/core/UIComponentMetadata.js +2 -2
- package/src/sap/ui/core/ValueStateSupport.js +2 -2
- package/src/sap/ui/core/VariantLayoutData.js +2 -2
- package/src/sap/ui/core/XMLComposite.js +2 -2
- package/src/sap/ui/core/XMLCompositeMetadata.js +2 -2
- package/src/sap/ui/core/XMLTemplateProcessor.js +27 -6
- package/src/sap/ui/core/_IconRegistry.js +1 -1
- package/src/sap/ui/core/cache/CacheManager.js +1 -1
- package/src/sap/ui/core/cache/CacheManagerNOP.js +1 -1
- package/src/sap/ui/core/cache/LRUPersistentCache.js +5 -3
- package/src/sap/ui/core/date/Buddhist.js +1 -1
- package/src/sap/ui/core/date/Gregorian.js +1 -1
- package/src/sap/ui/core/date/Islamic.js +1 -1
- package/src/sap/ui/core/date/Japanese.js +1 -1
- package/src/sap/ui/core/date/Persian.js +1 -1
- package/src/sap/ui/core/date/UniversalDate.js +1 -1
- package/src/sap/ui/core/date/UniversalDateUtils.js +206 -3
- package/src/sap/ui/core/date/_Calendars.js +1 -1
- package/src/sap/ui/core/delegate/ItemNavigation.js +2 -2
- package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
- package/src/sap/ui/core/designtime/ComponentContainer.designtime.js +1 -1
- package/src/sap/ui/core/designtime/CustomData.designtime.js +1 -1
- package/src/sap/ui/core/designtime/Icon.designtime.js +1 -1
- package/src/sap/ui/core/designtime/UIComponent.designtime.js +1 -1
- package/src/sap/ui/core/designtime/library.designtime.js +1 -1
- package/src/sap/ui/core/designtime/mvc/ControllerExtensionTemplate.js +1 -1
- package/src/sap/ui/core/designtime/mvc/View.designtime.js +1 -1
- package/src/sap/ui/core/designtime/mvc/XMLView.designtime.js +1 -1
- package/src/sap/ui/core/dnd/DragAndDrop.js +3 -3
- package/src/sap/ui/core/dnd/DragDropBase.js +2 -2
- package/src/sap/ui/core/dnd/DragDropInfo.js +2 -2
- package/src/sap/ui/core/dnd/DragInfo.js +2 -2
- package/src/sap/ui/core/dnd/DropInfo.js +2 -2
- package/src/sap/ui/core/format/DateFormat.js +45 -9
- package/src/sap/ui/core/format/FileSizeFormat.js +1 -1
- package/src/sap/ui/core/format/ListFormat.js +1 -1
- package/src/sap/ui/core/format/NumberFormat.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +2 -2
- package/src/sap/ui/core/hyphenation/HyphenationTestingWords.js +1 -1
- package/src/sap/ui/core/library.js +46 -9
- package/src/sap/ui/core/library.support.js +1 -1
- package/src/sap/ui/core/message/ControlMessageProcessor.js +6 -6
- package/src/sap/ui/core/message/Message.js +2 -2
- package/src/sap/ui/core/message/MessageManager.js +2 -2
- package/src/sap/ui/core/message/MessageMixin.js +3 -2
- package/src/sap/ui/core/message/MessageParser.js +2 -2
- package/src/sap/ui/core/message/MessageProcessor.js +23 -13
- package/src/sap/ui/core/messagebundle_fr.properties +7 -7
- package/src/sap/ui/core/messagebundle_it.properties +1 -1
- package/src/sap/ui/core/messagebundle_no.properties +4 -4
- package/src/sap/ui/core/messagebundle_ru.properties +21 -21
- package/src/sap/ui/core/mvc/Controller.js +5 -5
- package/src/sap/ui/core/mvc/ControllerExtension.js +1 -1
- package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
- package/src/sap/ui/core/mvc/ControllerMetadata.js +1 -1
- package/src/sap/ui/core/mvc/EventHandlerResolver.js +1 -1
- package/src/sap/ui/core/mvc/HTMLView.js +2 -2
- package/src/sap/ui/core/mvc/HTMLViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +3 -2
- package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +2 -2
- package/src/sap/ui/core/mvc/JSViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/OverrideExecution.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +2 -2
- package/src/sap/ui/core/mvc/TemplateViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/View.js +3 -2
- package/src/sap/ui/core/mvc/ViewRenderer.js +1 -1
- package/src/sap/ui/core/mvc/ViewType.js +1 -1
- package/src/sap/ui/core/mvc/XMLProcessingMode.js +1 -1
- package/src/sap/ui/core/mvc/XMLView.js +17 -4
- package/src/sap/ui/core/mvc/XMLViewRenderer.js +1 -1
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +2 -2
- package/src/sap/ui/core/plugin/LessSupport.js +2 -2
- package/src/sap/ui/core/plugin/TemplatingSupport.js +2 -2
- package/src/sap/ui/core/postmessage/Bus.js +2 -2
- package/src/sap/ui/core/postmessage/confirmationDialog.js +2 -2
- package/src/sap/ui/core/routing/HashChanger.js +1 -1
- package/src/sap/ui/core/routing/HashChangerBase.js +1 -1
- package/src/sap/ui/core/routing/History.js +1 -1
- package/src/sap/ui/core/routing/Route.js +7 -7
- package/src/sap/ui/core/routing/Router.js +4 -3
- package/src/sap/ui/core/routing/RouterHashChanger.js +1 -1
- package/src/sap/ui/core/routing/Target.js +1 -1
- package/src/sap/ui/core/routing/TargetCache.js +1 -1
- package/src/sap/ui/core/routing/Targets.js +18 -14
- package/src/sap/ui/core/routing/Views.js +1 -1
- package/src/sap/ui/core/routing/async/Route.js +1 -1
- package/src/sap/ui/core/routing/async/Target.js +1 -1
- package/src/sap/ui/core/routing/async/TargetCache.js +1 -1
- package/src/sap/ui/core/routing/async/Targets.js +1 -1
- package/src/sap/ui/core/routing/sync/Route.js +1 -1
- package/src/sap/ui/core/routing/sync/Target.js +1 -1
- package/src/sap/ui/core/routing/sync/TargetCache.js +1 -1
- package/src/sap/ui/core/routing/sync/Targets.js +1 -1
- package/src/sap/ui/core/rules/App.support.js +1 -1
- package/src/sap/ui/core/rules/Config.support.js +1 -1
- package/src/sap/ui/core/rules/CoreHelper.support.js +1 -1
- package/src/sap/ui/core/rules/Misc.support.js +52 -2
- package/src/sap/ui/core/rules/Model.support.js +96 -9
- package/src/sap/ui/core/rules/Rendering.support.js +2 -5
- package/src/sap/ui/core/rules/Theming.support.js +1 -1
- package/src/sap/ui/core/rules/View.support.js +15 -47
- package/src/sap/ui/core/search/OpenSearchProvider.js +2 -2
- package/src/sap/ui/core/search/SearchProvider.js +2 -2
- package/src/sap/ui/core/service/Service.js +2 -2
- package/src/sap/ui/core/service/ServiceFactory.js +2 -2
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +2 -2
- package/src/sap/ui/core/support/BootSupportTool.js +1 -1
- package/src/sap/ui/core/support/Hotkeys.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +3 -3
- package/src/sap/ui/core/support/RuleEngineOpaExtension.js +1 -2
- package/src/sap/ui/core/support/Support.js +2 -2
- package/src/sap/ui/core/support/ToolsAPI.js +1 -1
- package/src/sap/ui/core/support/bootstrapFallback.js +1 -1
- package/src/sap/ui/core/support/controls/InteractionSlider.js +1 -1
- package/src/sap/ui/core/support/controls/InteractionTree.js +1 -1
- package/src/sap/ui/core/support/controls/ObjectViewer.js +1 -1
- package/src/sap/ui/core/support/controls/TimelineOverview.js +1 -1
- package/src/sap/ui/core/support/controls/TreeViewer.js +2 -2
- package/src/sap/ui/core/support/debugReboot.js +1 -1
- package/src/sap/ui/core/support/plugins/Breakpoint.js +1 -1
- package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
- package/src/sap/ui/core/support/plugins/Debugging.js +1 -1
- package/src/sap/ui/core/support/plugins/Interaction.js +2 -2
- package/src/sap/ui/core/support/plugins/LocalStorage.js +2 -2
- package/src/sap/ui/core/support/plugins/Performance.js +2 -3
- package/src/sap/ui/core/support/plugins/Selector.js +2 -2
- package/src/sap/ui/core/support/plugins/TechInfo.js +2 -2
- package/src/sap/ui/core/support/plugins/Trace.js +2 -2
- package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -2
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +3 -7
- package/src/sap/ui/core/support/techinfo/moduleTreeHelper.js +1 -1
- package/src/sap/ui/core/support/trace/E2eTraceLib.js +4 -4
- package/src/sap/ui/core/support/trace/EppLib.js +1 -1
- package/src/sap/ui/core/support/usage/EventBroadcaster.js +1 -1
- package/src/sap/ui/core/syncStyleClass.js +1 -1
- package/src/sap/ui/core/themes/base/library.source.less +1 -1
- package/src/sap/ui/core/themes/base/parameterClasses.less +21 -21
- package/src/sap/ui/core/themes/sap_hcb/library.source.less +1 -1
- package/src/sap/ui/core/theming/Parameters.js +23 -143
- package/src/sap/ui/core/theming/ThemeHelper.js +27 -38
- package/src/sap/ui/core/tmpl/DOMAttribute.js +2 -2
- package/src/sap/ui/core/tmpl/DOMElement.js +2 -2
- package/src/sap/ui/core/tmpl/DOMElementRenderer.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +2 -2
- package/src/sap/ui/core/tmpl/Template.js +2 -2
- package/src/sap/ui/core/tmpl/TemplateControl.js +2 -2
- package/src/sap/ui/core/tmpl/TemplateControlRenderer.js +1 -1
- package/src/sap/ui/core/tmpl/_parsePath.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +2 -2
- package/src/sap/ui/core/util/DraftEnabledMockServer.js +22 -17
- package/src/sap/ui/core/util/Export.js +2 -2
- package/src/sap/ui/core/util/ExportCell.js +2 -2
- package/src/sap/ui/core/util/ExportColumn.js +2 -2
- package/src/sap/ui/core/util/ExportRow.js +2 -2
- package/src/sap/ui/core/util/ExportType.js +2 -2
- package/src/sap/ui/core/util/ExportTypeCSV.js +2 -2
- package/src/sap/ui/core/util/File.js +2 -2
- package/src/sap/ui/core/util/LibraryInfo.js +2 -2
- package/src/sap/ui/core/util/MockServer.js +140 -43
- package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +1 -1
- package/src/sap/ui/core/util/PasteHelper.js +2 -2
- package/src/sap/ui/core/util/ResponsivePaddingsEnablement.js +1 -1
- package/src/sap/ui/core/util/ShortcutHelper.js +1 -1
- package/src/sap/ui/core/util/XMLPreprocessor.js +1 -1
- package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +5 -1
- package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +31 -21
- package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +1 -1
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +2 -2
- package/src/sap/ui/core/util/serializer/Serializer.js +2 -2
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +2 -2
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +2 -2
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +2 -2
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +2 -2
- package/src/sap/ui/core/util/serializer/delegate/XML.js +2 -2
- package/src/sap/ui/core/ws/ReadyState.js +2 -2
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +2 -2
- package/src/sap/ui/core/ws/WebSocket.js +2 -2
- package/src/sap/ui/debug/ControlTree.js +2 -2
- package/src/sap/ui/debug/DebugEnv.js +2 -2
- package/src/sap/ui/debug/Highlighter.js +1 -1
- package/src/sap/ui/debug/LogViewer.js +1 -1
- package/src/sap/ui/debug/PropertyList.js +2 -2
- package/src/sap/ui/dom/containsOrEquals.js +1 -1
- package/src/sap/ui/dom/denormalizeScrollBeginRTL.js +1 -1
- package/src/sap/ui/dom/denormalizeScrollLeftRTL.js +1 -1
- package/src/sap/ui/dom/getComputedStyleFix.js +1 -1
- package/src/sap/ui/dom/getFirstEditableInput.js +1 -1
- package/src/sap/ui/dom/getOwnerWindow.js +1 -1
- package/src/sap/ui/dom/getScrollbarSize.js +1 -1
- package/src/sap/ui/dom/includeScript.js +1 -1
- package/src/sap/ui/dom/includeStylesheet.js +1 -1
- package/src/sap/ui/dom/isHidden.js +1 -1
- package/src/sap/ui/dom/jquery/Aria.js +1 -1
- package/src/sap/ui/dom/jquery/Focusable.js +1 -1
- package/src/sap/ui/dom/jquery/Selection.js +1 -1
- package/src/sap/ui/dom/jquery/Selectors.js +1 -1
- package/src/sap/ui/dom/jquery/control.js +1 -1
- package/src/sap/ui/dom/jquery/cursorPos.js +1 -1
- package/src/sap/ui/dom/jquery/getSelectedText.js +1 -1
- package/src/sap/ui/dom/jquery/hasTabIndex.js +1 -1
- package/src/sap/ui/dom/jquery/parentByAttribute.js +1 -1
- package/src/sap/ui/dom/jquery/rect.js +1 -1
- package/src/sap/ui/dom/jquery/rectContains.js +1 -1
- package/src/sap/ui/dom/jquery/scrollLeftRTL.js +1 -1
- package/src/sap/ui/dom/jquery/scrollRightRTL.js +1 -1
- package/src/sap/ui/dom/jquery/selectText.js +1 -1
- package/src/sap/ui/dom/jquery/zIndex.js +1 -1
- package/src/sap/ui/dom/units/Rem.js +1 -1
- package/src/sap/ui/events/ControlEvents.js +1 -1
- package/src/sap/ui/events/F6Navigation.js +1 -1
- package/src/sap/ui/events/KeyCodes.js +1 -1
- package/src/sap/ui/events/PasteEventFix.js +1 -1
- package/src/sap/ui/events/PseudoEvents.js +1 -1
- package/src/sap/ui/events/TouchToMouseMapping.js +1 -1
- package/src/sap/ui/events/checkMouseEnterOrLeave.js +1 -1
- package/src/sap/ui/events/isMouseEventDelayed.js +1 -1
- package/src/sap/ui/events/isSpecialKey.js +1 -1
- package/src/sap/ui/events/jquery/EventExtension.js +1 -1
- package/src/sap/ui/events/jquery/EventSimulation.js +4 -14
- package/src/sap/ui/events/jquery/EventTriggerHook.js +1 -1
- package/src/sap/ui/model/Binding.js +1 -1
- package/src/sap/ui/model/BindingMode.js +1 -1
- package/src/sap/ui/model/ChangeReason.js +2 -2
- package/src/sap/ui/model/ClientContextBinding.js +1 -1
- package/src/sap/ui/model/ClientListBinding.js +8 -1
- package/src/sap/ui/model/ClientModel.js +7 -6
- package/src/sap/ui/model/ClientPropertyBinding.js +1 -1
- package/src/sap/ui/model/ClientTreeBinding.js +1 -1
- package/src/sap/ui/model/ClientTreeBindingAdapter.js +2 -2
- package/src/sap/ui/model/CompositeBinding.js +1 -1
- package/src/sap/ui/model/CompositeDataState.js +27 -5
- package/src/sap/ui/model/CompositeType.js +2 -2
- package/src/sap/ui/model/Context.js +1 -1
- package/src/sap/ui/model/ContextBinding.js +1 -1
- package/src/sap/ui/model/DataState.js +28 -7
- package/src/sap/ui/model/Filter.js +1 -1
- package/src/sap/ui/model/FilterOperator.js +1 -1
- package/src/sap/ui/model/FilterProcessor.js +1 -1
- package/src/sap/ui/model/FilterType.js +1 -1
- package/src/sap/ui/model/FormatException.js +1 -1
- package/src/sap/ui/model/ListBinding.js +25 -6
- package/src/sap/ui/model/MetaModel.js +3 -3
- package/src/sap/ui/model/Model.js +7 -12
- package/src/sap/ui/model/ParseException.js +1 -1
- package/src/sap/ui/model/PropertyBinding.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +2 -2
- package/src/sap/ui/model/SimpleType.js +2 -2
- package/src/sap/ui/model/Sorter.js +1 -1
- package/src/sap/ui/model/SorterProcessor.js +1 -1
- package/src/sap/ui/model/StaticBinding.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +2 -2
- package/src/sap/ui/model/TreeBinding.js +1 -1
- package/src/sap/ui/model/TreeBindingAdapter.js +1 -3
- package/src/sap/ui/model/TreeBindingCompatibilityAdapter.js +1 -1
- package/src/sap/ui/model/TreeBindingUtils.js +3 -1
- package/src/sap/ui/model/Type.js +2 -2
- package/src/sap/ui/model/ValidateException.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +52 -35
- package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +17 -19
- package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +1 -1
- package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +3 -16
- package/src/sap/ui/model/analytics/odata4analytics.js +1 -1
- package/src/sap/ui/model/base/ManagedObjectModel.js +1 -1
- package/src/sap/ui/model/json/JSONListBinding.js +1 -1
- package/src/sap/ui/model/json/JSONModel.js +8 -8
- package/src/sap/ui/model/json/JSONPropertyBinding.js +2 -2
- package/src/sap/ui/model/json/JSONTreeBinding.js +1 -1
- package/src/sap/ui/model/message/MessageListBinding.js +1 -1
- package/src/sap/ui/model/message/MessageModel.js +4 -4
- package/src/sap/ui/model/message/MessagePropertyBinding.js +2 -2
- package/src/sap/ui/model/odata/AnnotationHelper.js +3 -3
- package/src/sap/ui/model/odata/AnnotationParser.js +5 -3
- package/src/sap/ui/model/odata/CountMode.js +1 -1
- package/src/sap/ui/model/odata/Filter.js +1 -1
- package/src/sap/ui/model/odata/MessageScope.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +2 -2
- package/src/sap/ui/model/odata/ODataContextBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataListBinding.js +62 -39
- package/src/sap/ui/model/odata/ODataMessageParser.js +3 -3
- package/src/sap/ui/model/odata/ODataMetaModel.js +4 -4
- package/src/sap/ui/model/odata/ODataMetadata.js +137 -86
- package/src/sap/ui/model/odata/ODataModel.js +443 -216
- package/src/sap/ui/model/odata/ODataPropertyBinding.js +8 -6
- package/src/sap/ui/model/odata/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +28 -18
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +441 -261
- package/src/sap/ui/model/odata/ODataUtils.js +25 -10
- package/src/sap/ui/model/odata/OperationMode.js +1 -1
- package/src/sap/ui/model/odata/UpdateMethod.js +1 -1
- package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +4 -3
- package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +12 -10
- package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +8 -6
- package/src/sap/ui/model/odata/type/Boolean.js +2 -2
- package/src/sap/ui/model/odata/type/Byte.js +2 -2
- package/src/sap/ui/model/odata/type/Currency.js +2 -2
- package/src/sap/ui/model/odata/type/Date.js +2 -2
- package/src/sap/ui/model/odata/type/DateTime.js +2 -2
- package/src/sap/ui/model/odata/type/DateTimeBase.js +2 -2
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +2 -2
- package/src/sap/ui/model/odata/type/Decimal.js +6 -2
- package/src/sap/ui/model/odata/type/Double.js +2 -2
- package/src/sap/ui/model/odata/type/Guid.js +2 -2
- package/src/sap/ui/model/odata/type/Int.js +2 -2
- package/src/sap/ui/model/odata/type/Int16.js +2 -2
- package/src/sap/ui/model/odata/type/Int32.js +2 -2
- package/src/sap/ui/model/odata/type/Int64.js +2 -2
- package/src/sap/ui/model/odata/type/ODataType.js +2 -2
- package/src/sap/ui/model/odata/type/Raw.js +2 -2
- package/src/sap/ui/model/odata/type/SByte.js +2 -2
- package/src/sap/ui/model/odata/type/Single.js +2 -2
- package/src/sap/ui/model/odata/type/Stream.js +2 -2
- package/src/sap/ui/model/odata/type/String.js +2 -2
- package/src/sap/ui/model/odata/type/Time.js +2 -2
- package/src/sap/ui/model/odata/type/TimeOfDay.js +2 -2
- package/src/sap/ui/model/odata/type/Unit.js +2 -2
- package/src/sap/ui/model/odata/type/UnitMixin.js +2 -3
- package/src/sap/ui/model/odata/v2/BatchMode.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +99 -15
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -2
- package/src/sap/ui/model/odata/v2/ODataContextBinding.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +389 -149
- package/src/sap/ui/model/odata/v2/ODataModel.js +233 -134
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +163 -90
- package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +118 -8
- package/src/sap/ui/model/odata/v4/AnnotationHelper.js +6 -6
- package/src/sap/ui/model/odata/v4/Context.js +164 -36
- package/src/sap/ui/model/odata/v4/ODataBinding.js +91 -41
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +184 -61
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +398 -129
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +44 -41
- package/src/sap/ui/model/odata/v4/ODataModel.js +28 -12
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +70 -80
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +26 -23
- package/src/sap/ui/model/odata/v4/ODataUtils.js +6 -6
- package/src/sap/ui/model/odata/v4/SubmitMode.js +1 -2
- package/src/sap/ui/model/odata/v4/ValueListType.js +1 -2
- package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +19 -20
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +4 -6
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +6 -5
- package/src/sap/ui/model/odata/v4/lib/_Batch.js +22 -21
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +247 -103
- package/src/sap/ui/model/odata/v4/lib/_ConcatHelper.js +1 -1
- package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +2 -2
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +50 -20
- package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +61 -60
- package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +2 -2
- package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +1 -1
- package/src/sap/ui/model/odata/v4/lib/_Parser.js +53 -44
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +42 -24
- package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +148 -148
- package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +14 -13
- package/src/sap/ui/model/odata/v4/lib/_V4MetadataConverter.js +67 -68
- package/src/sap/ui/model/resource/ResourceModel.js +2 -2
- package/src/sap/ui/model/resource/ResourcePropertyBinding.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +2 -2
- package/src/sap/ui/model/type/Currency.js +2 -2
- package/src/sap/ui/model/type/Date.js +2 -2
- package/src/sap/ui/model/type/DateInterval.js +2 -2
- package/src/sap/ui/model/type/DateTime.js +2 -2
- package/src/sap/ui/model/type/DateTimeInterval.js +2 -2
- package/src/sap/ui/model/type/FileSize.js +2 -2
- package/src/sap/ui/model/type/Float.js +2 -2
- package/src/sap/ui/model/type/Integer.js +2 -2
- package/src/sap/ui/model/type/String.js +2 -2
- package/src/sap/ui/model/type/Time.js +2 -2
- package/src/sap/ui/model/type/TimeInterval.js +2 -2
- package/src/sap/ui/model/type/Unit.js +2 -2
- package/src/sap/ui/model/xml/XMLListBinding.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +6 -6
- package/src/sap/ui/model/xml/XMLPropertyBinding.js +2 -2
- package/src/sap/ui/model/xml/XMLTreeBinding.js +1 -1
- package/src/sap/ui/performance/BeaconRequest.js +1 -1
- package/src/sap/ui/performance/Measurement.js +1 -1
- package/src/sap/ui/performance/XHRInterceptor.js +1 -1
- package/src/sap/ui/performance/trace/FESR.js +1 -1
- package/src/sap/ui/performance/trace/Interaction.js +1 -1
- package/src/sap/ui/performance/trace/Passport.js +1 -1
- package/src/sap/ui/performance/trace/initTraces.js +1 -1
- package/src/sap/ui/qunit/QUnitUtils.js +1 -1
- package/src/sap/ui/qunit/qunit-2-css.js +1 -1
- package/src/sap/ui/qunit/qunit-coverage.js +1 -1
- package/src/sap/ui/qunit/qunit-css.js +1 -1
- package/src/sap/ui/qunit/qunit-junit.js +1 -1
- package/src/sap/ui/qunit/qunit-redirect.js +1 -1
- package/src/sap/ui/qunit/sinon-qunit-bridge.js +1 -1
- package/src/sap/ui/qunit/utils/ControlIterator.js +2 -2
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +2 -2
- package/src/sap/ui/qunit/utils/createAndAppendDiv.js +1 -1
- package/src/sap/ui/qunit/utils/waitForThemeApplied.js +1 -1
- package/src/sap/ui/security/FrameOptions.js +1 -1
- package/src/sap/ui/test/BlanketReporter.js +2 -2
- package/src/sap/ui/test/BranchTracking.js +1 -1
- package/src/sap/ui/test/Opa.js +1 -1
- package/src/sap/ui/test/Opa5.js +1 -1
- package/src/sap/ui/test/OpaBuilder.js +1 -1
- package/src/sap/ui/test/OpaExtension.js +1 -1
- package/src/sap/ui/test/OpaPlugin.js +1 -1
- package/src/sap/ui/test/PageObjectFactory.js +1 -1
- package/src/sap/ui/test/RecordReplay.js +1 -1
- package/src/sap/ui/test/RecorderHotkeyListener.js +1 -1
- package/src/sap/ui/test/TestUtils.js +3 -3
- package/src/sap/ui/test/_BrowserLogCollector.js +1 -1
- package/src/sap/ui/test/_ControlFinder.js +1 -1
- package/src/sap/ui/test/_LogCollector.js +2 -2
- package/src/sap/ui/test/_OpaLogger.js +1 -1
- package/src/sap/ui/test/_OpaUriParameterParser.js +1 -1
- package/src/sap/ui/test/_ParameterValidator.js +1 -1
- package/src/sap/ui/test/_UsageReport.js +1 -1
- package/src/sap/ui/test/_ValidationParameters.js +1 -1
- package/src/sap/ui/test/actions/Action.js +12 -3
- package/src/sap/ui/test/actions/Drag.js +1 -1
- package/src/sap/ui/test/actions/Drop.js +1 -1
- package/src/sap/ui/test/actions/EnterText.js +1 -1
- package/src/sap/ui/test/actions/Press.js +80 -4
- package/src/sap/ui/test/actions/Scroll.js +1 -1
- package/src/sap/ui/test/autowaiter/WaiterBase.js +1 -1
- package/src/sap/ui/test/autowaiter/_UIUpdatesWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_XHRWaiter.js +2 -2
- package/src/sap/ui/test/autowaiter/_autoWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_autoWaiterAsync.js +1 -1
- package/src/sap/ui/test/autowaiter/_moduleWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_navigationContainerWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_promiseWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_resourceWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_timeoutWaiter.js +1 -1
- package/src/sap/ui/test/autowaiter/_utils.js +1 -1
- package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +111 -0
- package/src/sap/ui/test/gherkin/GherkinTestGenerator.js +1 -1
- package/src/sap/ui/test/gherkin/StepDefinitions.js +1 -1
- package/src/sap/ui/test/gherkin/dataTableUtils.js +1 -1
- package/src/sap/ui/test/gherkin/opa5TestHarness.js +1 -1
- package/src/sap/ui/test/gherkin/qUnitTestHarness.js +1 -1
- package/src/sap/ui/test/gherkin/simpleGherkinParser.js +1 -1
- package/src/sap/ui/test/launchers/componentLauncher.js +1 -1
- package/src/sap/ui/test/launchers/iFrameLauncher.js +1 -1
- package/src/sap/ui/test/matchers/AggregationContainsPropertyEqual.js +1 -1
- package/src/sap/ui/test/matchers/AggregationEmpty.js +1 -1
- package/src/sap/ui/test/matchers/AggregationFilled.js +1 -1
- package/src/sap/ui/test/matchers/AggregationLengthEquals.js +1 -1
- package/src/sap/ui/test/matchers/Ancestor.js +1 -1
- package/src/sap/ui/test/matchers/BindingPath.js +1 -1
- package/src/sap/ui/test/matchers/Descendant.js +1 -1
- package/src/sap/ui/test/matchers/I18NText.js +1 -1
- package/src/sap/ui/test/matchers/Interactable.js +1 -1
- package/src/sap/ui/test/matchers/LabelFor.js +1 -1
- package/src/sap/ui/test/matchers/Matcher.js +1 -1
- package/src/sap/ui/test/matchers/MatcherFactory.js +1 -1
- package/src/sap/ui/test/matchers/Properties.js +1 -1
- package/src/sap/ui/test/matchers/PropertyStrictEquals.js +1 -1
- package/src/sap/ui/test/matchers/Sibling.js +1 -1
- package/src/sap/ui/test/matchers/Visible.js +1 -1
- package/src/sap/ui/test/matchers/_Busy.js +1 -1
- package/src/sap/ui/test/matchers/_Editable.js +1 -1
- package/src/sap/ui/test/matchers/_Enabled.js +1 -1
- package/src/sap/ui/test/matchers/_Visitor.js +1 -1
- package/src/sap/ui/test/matchers/matchers.js +1 -1
- package/src/sap/ui/test/opaQunit.js +1 -1
- package/src/sap/ui/test/pipelines/ActionPipeline.js +1 -1
- package/src/sap/ui/test/pipelines/MatcherPipeline.js +1 -1
- package/src/sap/ui/test/pipelines/PipelineFactory.js +1 -1
- package/src/sap/ui/test/qunitPause.js +1 -1
- package/src/sap/ui/test/selectors/_BindingPath.js +1 -1
- package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +1 -1
- package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
- package/src/sap/ui/test/selectors/_ControlType.js +1 -1
- package/src/sap/ui/test/selectors/_DropdownItem.js +1 -1
- package/src/sap/ui/test/selectors/_GlobalID.js +1 -1
- package/src/sap/ui/test/selectors/_LabelFor.js +1 -1
- package/src/sap/ui/test/selectors/_Properties.js +1 -1
- package/src/sap/ui/test/selectors/_Selector.js +1 -1
- package/src/sap/ui/test/selectors/_TableRowItem.js +1 -1
- package/src/sap/ui/test/selectors/_ViewID.js +1 -1
- package/src/sap/ui/test/selectors/_selectors.js +1 -1
- package/src/sap/ui/test/starter/_configureLoader.js +1 -1
- package/src/sap/ui/test/starter/_setupAndStart.js +1 -1
- package/src/sap/ui/test/starter/_utils.js +1 -1
- package/src/sap/ui/test/starter/createSuite.js +4 -4
- package/src/sap/ui/test/starter/runTest.js +1 -1
- package/src/sap/ui/thirdparty/RequestRecorder.js +1 -1
- package/src/sap/ui/thirdparty/caja-html-sanitizer.js +1 -1
- package/src/sap/ui/thirdparty/jquery-mobile-custom.js +3 -6
- package/src/sap/ui/util/ActivityDetection.js +1 -1
- package/src/sap/ui/util/Mobile.js +29 -40
- package/src/sap/ui/util/Storage.js +2 -2
- package/src/sap/ui/util/XMLHelper.js +54 -31
- package/src/sap/ui/util/_FeatureDetection.js +1 -1
- package/src/sap/ui/util/defaultLinkTypes.js +1 -1
- package/src/sap/ui/util/isCrossOriginURL.js +1 -1
- package/src/sap/ui/util/openWindow.js +1 -1
- package/src/sap-ui-boot.js +1 -1
- package/src/sap-ui-core-nojQuery.js +1 -1
- package/src/sap-ui-core.js +1 -1
- package/src/sap-ui-debug.js +1 -1
- package/src/ui5loader-autoconfig.js +1 -1
- package/src/ui5loader.js +10 -10
- package/ui5.yaml +244 -1
- package/src/sap/ui/core/CustomizingConfiguration.js +0 -47
- package/src/sap/ui/thirdparty/baseuri.js +0 -1
- package/src/sap/ui/thirdparty/es6-object-assign.js +0 -1
- package/src/sap/ui/thirdparty/es6-promise.js +0 -1
- package/src/sap/ui/thirdparty/es6-shim-nopromise.js +0 -1
- package/src/sap/ui/thirdparty/es6-string-methods.js +0 -1
- package/src/sap/ui/thirdparty/flexie.js +0 -1
- package/src/sap/ui/thirdparty/unorm.js +0 -1
- package/src/sap/ui/thirdparty/unormdata.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* OpenUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -35,6 +35,7 @@ sap.ui.define([
|
|
|
35
35
|
mSupportedEvents = {
|
|
36
36
|
AggregatedDataStateChange : true,
|
|
37
37
|
change : true,
|
|
38
|
+
createActivate : true,
|
|
38
39
|
createCompleted : true,
|
|
39
40
|
createSent : true,
|
|
40
41
|
dataReceived : true,
|
|
@@ -68,15 +69,15 @@ sap.ui.define([
|
|
|
68
69
|
* @author SAP SE
|
|
69
70
|
* @class List binding for an OData V4 model.
|
|
70
71
|
* An event handler can only be attached to this binding for the following events:
|
|
71
|
-
* 'AggregatedDataStateChange', 'change', '
|
|
72
|
-
* 'dataRequested', 'DataStateChange', 'patchCompleted', 'patchSent', and
|
|
73
|
-
* other events, an error is thrown.
|
|
72
|
+
* 'AggregatedDataStateChange', 'change', 'createActivate', 'createCompleted', 'createSent',
|
|
73
|
+
* 'dataReceived', 'dataRequested', 'DataStateChange', 'patchCompleted', 'patchSent', and
|
|
74
|
+
* 'refresh'. For other events, an error is thrown.
|
|
74
75
|
* @extends sap.ui.model.ListBinding
|
|
75
76
|
* @hideconstructor
|
|
76
77
|
* @mixes sap.ui.model.odata.v4.ODataParentBinding
|
|
77
78
|
* @public
|
|
78
79
|
* @since 1.37.0
|
|
79
|
-
* @version 1.
|
|
80
|
+
* @version 1.98.0
|
|
80
81
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
|
|
81
82
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
|
|
82
83
|
* @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
|
|
@@ -110,10 +111,13 @@ sap.ui.define([
|
|
|
110
111
|
this.checkBindingParameters(mParameters, ["$$aggregation", "$$canonicalPath",
|
|
111
112
|
"$$groupId", "$$operationMode", "$$ownRequest", "$$patchWithoutSideEffects",
|
|
112
113
|
"$$sharedRequest", "$$updateGroupId"]);
|
|
114
|
+
// number of active (client-side) created contexts in aContexts
|
|
115
|
+
this.iActiveContexts = 0;
|
|
113
116
|
this.aApplicationFilters = _Helper.toArray(vFilters);
|
|
114
117
|
this.sChangeReason = oModel.bAutoExpandSelect && !mParameters.$$aggregation
|
|
115
118
|
? "AddVirtualContext"
|
|
116
119
|
: undefined;
|
|
120
|
+
this.iCreatedContexts = 0; // number of (client-side) created contexts in aContexts
|
|
117
121
|
this.oDiff = undefined;
|
|
118
122
|
this.aFilters = [];
|
|
119
123
|
this.sGroupId = mParameters.$$groupId;
|
|
@@ -122,6 +126,14 @@ sap.ui.define([
|
|
|
122
126
|
? null
|
|
123
127
|
: Context.createNewContext(oModel, this, sPath);
|
|
124
128
|
this.sOperationMode = mParameters.$$operationMode || oModel.sOperationMode;
|
|
129
|
+
// map<string,sap.ui.model.odata.v4.Context>
|
|
130
|
+
// Maps a string path to a v4.Context with that path. A context may either be
|
|
131
|
+
// - an element of this.aContexts (then it knows its index) or
|
|
132
|
+
// - a value of this.mPreviousContextsByPath.
|
|
133
|
+
// Contexts which have previously been part of this.aContexts are parked here for
|
|
134
|
+
// reuse (and thus still remember their index) and get destroyed by
|
|
135
|
+
// #destroyPreviousContexts after the next call to #createContexts.
|
|
136
|
+
// A kept-alive context may be parked here for a longer time, with undefined index.
|
|
125
137
|
this.mPreviousContextsByPath = {};
|
|
126
138
|
this.aPreviousData = [];
|
|
127
139
|
this.bSharedRequest = mParameters.$$sharedRequest || oModel.bSharedRequests;
|
|
@@ -147,6 +159,32 @@ sap.ui.define([
|
|
|
147
159
|
|
|
148
160
|
asODataParentBinding(ODataListBinding.prototype);
|
|
149
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Attach event handler <code>fnFunction</code> to the 'createActivate' event of this binding.
|
|
164
|
+
*
|
|
165
|
+
* @param {function} fnFunction The function to call when the event occurs
|
|
166
|
+
* @param {object} [oListener] Object on which to call the given function
|
|
167
|
+
*
|
|
168
|
+
* @public
|
|
169
|
+
* @since 1.98.0
|
|
170
|
+
*/
|
|
171
|
+
ODataListBinding.prototype.attachCreateActivate = function (fnFunction, oListener) {
|
|
172
|
+
this.attachEvent("createActivate", fnFunction, oListener);
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Detach event handler <code>fnFunction</code> from the 'createActivate' event of this binding.
|
|
177
|
+
*
|
|
178
|
+
* @param {function} fnFunction The function to call when the event occurs
|
|
179
|
+
* @param {object} [oListener] Object on which to call the given function
|
|
180
|
+
*
|
|
181
|
+
* @public
|
|
182
|
+
* @since 1.98.0
|
|
183
|
+
*/
|
|
184
|
+
ODataListBinding.prototype.detachCreateActivate = function (fnFunction, oListener) {
|
|
185
|
+
this.detachEvent("createActivate", fnFunction, oListener);
|
|
186
|
+
};
|
|
187
|
+
|
|
150
188
|
/**
|
|
151
189
|
* Attach event handler <code>fnFunction</code> to the 'createCompleted' event of this binding.
|
|
152
190
|
*
|
|
@@ -204,24 +242,32 @@ sap.ui.define([
|
|
|
204
242
|
/**
|
|
205
243
|
* Deletes the entity identified by the edit URL.
|
|
206
244
|
*
|
|
207
|
-
* @param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
|
|
208
|
-
* A lock for the group ID to be used for the DELETE request;
|
|
209
|
-
*
|
|
245
|
+
* @param {sap.ui.model.odata.v4.lib._GroupLock} [oGroupLock]
|
|
246
|
+
* A lock for the group ID to be used for the DELETE request; w/o a lock, no DELETE is sent.
|
|
247
|
+
* For a transient entity, the lock is ignored (use NULL)!
|
|
210
248
|
* @param {string} sEditUrl
|
|
211
|
-
* The edit URL to be used for the DELETE request
|
|
249
|
+
* The entity's edit URL to be used for the DELETE request; w/o a lock, this is mostly
|
|
250
|
+
* ignored.
|
|
212
251
|
* @param {sap.ui.model.odata.v4.Context} oContext
|
|
213
252
|
* The context to be deleted
|
|
214
253
|
* @param {object} [oETagEntity]
|
|
215
254
|
* An entity with the ETag of the binding for which the deletion was requested. This is
|
|
216
255
|
* provided if the deletion is delegated from a context binding with empty path to a list
|
|
217
|
-
* binding.
|
|
256
|
+
* binding. W/o a lock, this is ignored.
|
|
257
|
+
* @param {boolean} [bDoNotRequestCount]
|
|
258
|
+
* Whether not to request the new count from the server; useful in case of
|
|
259
|
+
* {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
|
|
260
|
+
* unchanged; w/o a lock this should be true
|
|
218
261
|
* @returns {Promise}
|
|
219
262
|
* A promise which is resolved without a result in case of success, or rejected with an
|
|
220
263
|
* instance of <code>Error</code> in case of failure.
|
|
264
|
+
* @throws {Error}
|
|
265
|
+
* If the cache promise for this binding is not yet fulfilled, or if the cache is shared
|
|
221
266
|
*
|
|
222
267
|
* @private
|
|
223
268
|
*/
|
|
224
|
-
ODataListBinding.prototype._delete = function (oGroupLock, sEditUrl, oContext, oETagEntity
|
|
269
|
+
ODataListBinding.prototype._delete = function (oGroupLock, sEditUrl, oContext, oETagEntity,
|
|
270
|
+
bDoNotRequestCount) {
|
|
225
271
|
var bDestroy,
|
|
226
272
|
bFireChange = false,
|
|
227
273
|
sPath = oContext.iIndex === undefined
|
|
@@ -231,7 +277,7 @@ sap.ui.define([
|
|
|
231
277
|
bReadCount = false,
|
|
232
278
|
that = this;
|
|
233
279
|
|
|
234
|
-
return this.deleteFromCache(oGroupLock, sEditUrl, sPath, oETagEntity,
|
|
280
|
+
return this.deleteFromCache(oGroupLock, sEditUrl, sPath, oETagEntity, bDoNotRequestCount,
|
|
235
281
|
function (iIndex, aEntities) {
|
|
236
282
|
var sContextPath, sPredicate, sResolvedPath, i$skipIndex, i;
|
|
237
283
|
|
|
@@ -241,7 +287,7 @@ sap.ui.define([
|
|
|
241
287
|
}
|
|
242
288
|
if (oContext.created()) {
|
|
243
289
|
// happens only for a created context that is not transient anymore
|
|
244
|
-
that.destroyCreated(oContext
|
|
290
|
+
that.destroyCreated(oContext);
|
|
245
291
|
bFireChange = true;
|
|
246
292
|
} else if (iIndex >= 0) {
|
|
247
293
|
// prepare all contexts for deletion
|
|
@@ -288,7 +334,8 @@ sap.ui.define([
|
|
|
288
334
|
|
|
289
335
|
if (bReadCount) {
|
|
290
336
|
that.iMaxLength = that.fetchValue("$count", undefined, true).getResult()
|
|
291
|
-
- that.
|
|
337
|
+
- that.iActiveContexts;
|
|
338
|
+
|
|
292
339
|
// Note: Although we know that oContext is not in aContexts, a "change" event needs
|
|
293
340
|
// to be fired in order to notify the control about the new length, for example, to
|
|
294
341
|
// update the 'More' button or the scrollbar.
|
|
@@ -437,6 +484,18 @@ sap.ui.define([
|
|
|
437
484
|
* @since 1.37.0
|
|
438
485
|
*/
|
|
439
486
|
|
|
487
|
+
/**
|
|
488
|
+
* The 'createActivate' event is fired when a property is changed on a context in an 'inactive'
|
|
489
|
+
* state (see {@link #create}). The context then changes its state to 'transient'.
|
|
490
|
+
*
|
|
491
|
+
* @param {sap.ui.base.Event} oEvent The event object
|
|
492
|
+
* @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
|
|
493
|
+
*
|
|
494
|
+
* @event sap.ui.model.odata.v4.ODataListBinding#createActivate
|
|
495
|
+
* @public
|
|
496
|
+
* @since 1.98.0
|
|
497
|
+
*/
|
|
498
|
+
|
|
440
499
|
/**
|
|
441
500
|
* The 'createCompleted' event is fired when the back end has responded to a POST request
|
|
442
501
|
* triggered for a {@link #create} on this binding. For each 'createSent' event, a
|
|
@@ -627,6 +686,9 @@ sap.ui.define([
|
|
|
627
686
|
if (this.mParameters.$$aggregation) {
|
|
628
687
|
throw new Error("Unsupported $$aggregation at " + this);
|
|
629
688
|
}
|
|
689
|
+
if (this.bSharedRequest) {
|
|
690
|
+
throw new Error("Unsupported $$sharedRequest at " + this);
|
|
691
|
+
}
|
|
630
692
|
};
|
|
631
693
|
|
|
632
694
|
/**
|
|
@@ -645,7 +707,8 @@ sap.ui.define([
|
|
|
645
707
|
iCount = this.oCache.collapse(
|
|
646
708
|
_Helper.getRelativePath(oContext.getPath(), this.oHeaderContext.getPath())),
|
|
647
709
|
iModelIndex = oContext.getModelIndex(),
|
|
648
|
-
i,
|
|
710
|
+
i,
|
|
711
|
+
that = this;
|
|
649
712
|
|
|
650
713
|
if (iCount > 0) {
|
|
651
714
|
aContexts.splice(iModelIndex + 1, iCount).forEach(function (oContext) {
|
|
@@ -719,22 +782,36 @@ sap.ui.define([
|
|
|
719
782
|
* @param {boolean} [bAtEnd]
|
|
720
783
|
* Whether the entity is inserted at the end of the list. When creating multiple entities,
|
|
721
784
|
* this parameter must have the same value for each entity. Supported since 1.66.0
|
|
785
|
+
* @param {boolean} [bInactive]
|
|
786
|
+
* Create an inactive context. Such a context will only be sent to the server after the first
|
|
787
|
+
* property update. From then on it behaves like any other created context. This parameter is
|
|
788
|
+
* experimental and its implementation may still change. Do not use it in productive code yet.
|
|
789
|
+
* Supported since 1.97.0
|
|
722
790
|
* @returns {sap.ui.model.odata.v4.Context}
|
|
723
791
|
* The context object for the created entity; its method
|
|
724
792
|
* {@link sap.ui.model.odata.v4.Context#created} returns a promise that is resolved when the
|
|
725
793
|
* creation is finished
|
|
726
|
-
* @throws {Error}
|
|
727
|
-
*
|
|
728
|
-
*
|
|
729
|
-
*
|
|
730
|
-
*
|
|
794
|
+
* @throws {Error} If
|
|
795
|
+
* <ul>
|
|
796
|
+
* <li> the binding's root binding is suspended,
|
|
797
|
+
* <li> a relative binding is unresolved,
|
|
798
|
+
* <li> entities are created both at the start and at the end,
|
|
799
|
+
* <li> <code>bAtEnd</code> is <code>true</code> and the binding does not know the final
|
|
800
|
+
* length,
|
|
801
|
+
* <li> <code>bInactive</code> is <code>true</code> and the update group ID does not have
|
|
802
|
+
* {@link sap.ui.model.odata.v4.SubmitMode.Auto}.
|
|
803
|
+
* <li> <code>bInactive</code> is <code>true</code>, the list binding is relative and does
|
|
804
|
+
* not use the <code>$$ownRequest</code> parameter
|
|
805
|
+
* (see {@link sap.ui.model.odata.v4.ODataModel#bindList})
|
|
806
|
+
* </ul>
|
|
731
807
|
* @public
|
|
732
808
|
* @since 1.43.0
|
|
733
809
|
*/
|
|
734
|
-
ODataListBinding.prototype.create = function (oInitialData, bSkipRefresh, bAtEnd) {
|
|
810
|
+
ODataListBinding.prototype.create = function (oInitialData, bSkipRefresh, bAtEnd, bInactive) {
|
|
735
811
|
var oContext,
|
|
736
812
|
oCreatePathPromise = this.fetchResourcePath(),
|
|
737
813
|
oCreatePromise,
|
|
814
|
+
sGroupId = this.getUpdateGroupId(),
|
|
738
815
|
oGroupLock,
|
|
739
816
|
sResolvedPath = this.getResolvedPath(),
|
|
740
817
|
sTransientPredicate = "($uid=" + uid() + ")",
|
|
@@ -755,11 +832,25 @@ sap.ui.define([
|
|
|
755
832
|
if (this.bCreatedAtEnd !== undefined && this.bCreatedAtEnd !== bAtEnd) {
|
|
756
833
|
throw new Error("Creating entities at the start and at the end is not supported.");
|
|
757
834
|
}
|
|
835
|
+
|
|
836
|
+
if (bInactive) {
|
|
837
|
+
if (this.isRelative() && !this.mParameters.$$ownRequest) {
|
|
838
|
+
throw new Error("Missing $$ownRequest at " + this);
|
|
839
|
+
}
|
|
840
|
+
if (!this.oModel.isAutoGroup(sGroupId)) {
|
|
841
|
+
throw new Error("bInactive only supported for update group with SubmitMode.Auto: "
|
|
842
|
+
+ this);
|
|
843
|
+
}
|
|
844
|
+
sGroupId = "$inactive." + sGroupId;
|
|
845
|
+
} else {
|
|
846
|
+
this.iActiveContexts += 1;
|
|
847
|
+
}
|
|
848
|
+
|
|
758
849
|
this.bCreatedAtEnd = bAtEnd;
|
|
759
850
|
|
|
760
851
|
// only for createInCache
|
|
761
|
-
oGroupLock = this.lockGroup(
|
|
762
|
-
that.destroyCreated(oContext
|
|
852
|
+
oGroupLock = this.lockGroup(sGroupId, true, true, function () {
|
|
853
|
+
that.destroyCreated(oContext);
|
|
763
854
|
return Promise.resolve().then(function () {
|
|
764
855
|
// Fire the change asynchronously so that Cache#delete is finished and #getContexts
|
|
765
856
|
// can read the data synchronously. This is important for extended change detection.
|
|
@@ -806,7 +897,7 @@ sap.ui.define([
|
|
|
806
897
|
|
|
807
898
|
this.iCreatedContexts += 1;
|
|
808
899
|
oContext = Context.create(this.oModel, this, sTransientPath, -this.iCreatedContexts,
|
|
809
|
-
oCreatePromise);
|
|
900
|
+
oCreatePromise, bInactive);
|
|
810
901
|
this.aContexts.unshift(oContext);
|
|
811
902
|
this._fireChange({reason : ChangeReason.Add});
|
|
812
903
|
|
|
@@ -840,7 +931,8 @@ sap.ui.define([
|
|
|
840
931
|
sPredicate,
|
|
841
932
|
aPreviousPaths,
|
|
842
933
|
bStartBeyondRange = iStart > this.aContexts.length,
|
|
843
|
-
i,
|
|
934
|
+
i,
|
|
935
|
+
that = this;
|
|
844
936
|
|
|
845
937
|
/*
|
|
846
938
|
* Shrinks contexts to the new length, destroys unneeded contexts
|
|
@@ -877,7 +969,9 @@ sap.ui.define([
|
|
|
877
969
|
// reuse the previous context, unless it is created and persisted
|
|
878
970
|
delete this.mPreviousContextsByPath[sContextPath];
|
|
879
971
|
if (oContext.isTransient() && !this.iCreatedContexts) {
|
|
880
|
-
this
|
|
972
|
+
// this can only happen in bindings w/o cache, where all created contexts
|
|
973
|
+
// are active
|
|
974
|
+
this.iCreatedContexts = this.iActiveContexts = -oContext.iIndex;
|
|
881
975
|
} else {
|
|
882
976
|
oContext.iIndex = i$skipIndex;
|
|
883
977
|
}
|
|
@@ -895,7 +989,7 @@ sap.ui.define([
|
|
|
895
989
|
}
|
|
896
990
|
if (iCount !== undefined) { // server count is available or "non-empty short read"
|
|
897
991
|
this.bLengthFinal = true;
|
|
898
|
-
this.iMaxLength = iCount - this.
|
|
992
|
+
this.iMaxLength = iCount - this.iActiveContexts;
|
|
899
993
|
shrinkContexts();
|
|
900
994
|
} else {
|
|
901
995
|
if (!aResults.length) { // "empty short read"
|
|
@@ -955,21 +1049,22 @@ sap.ui.define([
|
|
|
955
1049
|
};
|
|
956
1050
|
|
|
957
1051
|
/**
|
|
958
|
-
* Removes the given context for a created entity from the list of contexts and destroys it
|
|
1052
|
+
* Removes the given context for a created entity from the list of contexts and destroys it
|
|
1053
|
+
* later so that the control has time to handle the context's dependent bindings before.
|
|
959
1054
|
*
|
|
960
1055
|
* @param {sap.ui.model.odata.v4.Context} oContext
|
|
961
1056
|
* The context instance for the created entity to be destroyed
|
|
962
|
-
* @param {boolean} bDestroyLater
|
|
963
|
-
* Whether to destroy the context later so that the control has time to handle the context's
|
|
964
|
-
* dependent bindings before.
|
|
965
1057
|
*
|
|
966
1058
|
* @private
|
|
967
1059
|
*/
|
|
968
|
-
ODataListBinding.prototype.destroyCreated = function (oContext
|
|
1060
|
+
ODataListBinding.prototype.destroyCreated = function (oContext) {
|
|
969
1061
|
var iIndex = oContext.getModelIndex(),
|
|
970
1062
|
i;
|
|
971
1063
|
|
|
972
1064
|
this.iCreatedContexts -= 1;
|
|
1065
|
+
if (!oContext.isInactive()) {
|
|
1066
|
+
this.iActiveContexts -= 1;
|
|
1067
|
+
}
|
|
973
1068
|
for (i = 0; i < iIndex; i += 1) {
|
|
974
1069
|
this.aContexts[i].iIndex += 1;
|
|
975
1070
|
}
|
|
@@ -977,7 +1072,22 @@ sap.ui.define([
|
|
|
977
1072
|
this.bCreatedAtEnd = undefined;
|
|
978
1073
|
}
|
|
979
1074
|
this.aContexts.splice(iIndex, 1);
|
|
980
|
-
|
|
1075
|
+
this.destroyLater(oContext);
|
|
1076
|
+
// The path of all contexts in aContexts after the removed one is untouched, still points to
|
|
1077
|
+
// the same data, hence no checkUpdate is needed.
|
|
1078
|
+
};
|
|
1079
|
+
|
|
1080
|
+
/**
|
|
1081
|
+
* Destroys the given context later so that the control has time to handle the context's
|
|
1082
|
+
* dependent bindings before.
|
|
1083
|
+
*
|
|
1084
|
+
* @param {sap.ui.model.odata.v4.Context} oContext
|
|
1085
|
+
* The context instance to be destroyed
|
|
1086
|
+
*
|
|
1087
|
+
* @private
|
|
1088
|
+
*/
|
|
1089
|
+
ODataListBinding.prototype.destroyLater = function (oContext) {
|
|
1090
|
+
if (this.iCurrentEnd) {
|
|
981
1091
|
// Add the context to mPreviousContextsByPath although it definitely won't be reused.
|
|
982
1092
|
// Then it is destroyed later, but only if there is a listener (iCurrentEnd is set by
|
|
983
1093
|
// getContexts and mPreviousContextsByPath is only cleared when getContexts is called)
|
|
@@ -985,8 +1095,6 @@ sap.ui.define([
|
|
|
985
1095
|
} else {
|
|
986
1096
|
oContext.destroy();
|
|
987
1097
|
}
|
|
988
|
-
// The path of all contexts in aContexts after the removed one is untouched, still points to
|
|
989
|
-
// the same data, hence no checkUpdate is needed.
|
|
990
1098
|
};
|
|
991
1099
|
|
|
992
1100
|
/**
|
|
@@ -1022,10 +1130,45 @@ sap.ui.define([
|
|
|
1022
1130
|
* @see sap.ui.model.odata.v4.ODataBinding#doCreateCache
|
|
1023
1131
|
*/
|
|
1024
1132
|
ODataListBinding.prototype.doCreateCache = function (sResourcePath, mQueryOptions, oContext,
|
|
1025
|
-
sDeepResourcePath) {
|
|
1026
|
-
|
|
1133
|
+
sDeepResourcePath, bOldCacheReadOnly, oOldCache) {
|
|
1134
|
+
var sBindingPath,
|
|
1135
|
+
aKeptElementPaths,
|
|
1136
|
+
oCache,
|
|
1137
|
+
that = this;
|
|
1138
|
+
|
|
1139
|
+
if (oOldCache && oOldCache.getResourcePath() === sResourcePath
|
|
1140
|
+
&& oOldCache.$deepResourcePath === sDeepResourcePath) {
|
|
1141
|
+
sBindingPath = this.oHeaderContext.getPath();
|
|
1142
|
+
aKeptElementPaths = Object.keys(this.mPreviousContextsByPath).filter(function (sPath) {
|
|
1143
|
+
return that.mPreviousContextsByPath[sPath].isKeepAlive();
|
|
1144
|
+
});
|
|
1145
|
+
|
|
1146
|
+
if (!bOldCacheReadOnly && (aKeptElementPaths.length || this.iCreatedContexts)) {
|
|
1147
|
+
oOldCache.reset(aKeptElementPaths.map(function (sPath) {
|
|
1148
|
+
return _Helper.getRelativePath(sPath, sBindingPath);
|
|
1149
|
+
}));
|
|
1150
|
+
// Note: #inheritQueryOptions as called below should not matter in case of own
|
|
1151
|
+
// requests, which are a precondition for kept-alive elements
|
|
1152
|
+
oOldCache.setQueryOptions(mQueryOptions, true);
|
|
1153
|
+
|
|
1154
|
+
return oOldCache;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
oCache = _AggregationCache.create(this.oModel.oRequestor, sResourcePath, sDeepResourcePath,
|
|
1027
1159
|
this.mParameters.$$aggregation, this.inheritQueryOptions(mQueryOptions, oContext),
|
|
1028
1160
|
this.oModel.bAutoExpandSelect, this.bSharedRequest);
|
|
1161
|
+
|
|
1162
|
+
if (aKeptElementPaths && aKeptElementPaths.length) {
|
|
1163
|
+
oCache.setLateQueryOptions(oOldCache.getLateQueryOptions());
|
|
1164
|
+
aKeptElementPaths.forEach(function (sPath) {
|
|
1165
|
+
oCache.addKeptElement(
|
|
1166
|
+
oOldCache.getValue(_Helper.getRelativePath(sPath, sBindingPath)));
|
|
1167
|
+
that.mPreviousContextsByPath[sPath].checkUpdate(); // add change listeners
|
|
1168
|
+
});
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
return oCache;
|
|
1029
1172
|
};
|
|
1030
1173
|
|
|
1031
1174
|
/**
|
|
@@ -1043,6 +1186,65 @@ sap.ui.define([
|
|
|
1043
1186
|
});
|
|
1044
1187
|
};
|
|
1045
1188
|
|
|
1189
|
+
/**
|
|
1190
|
+
* Replaces the given old context with a new one for the given element and key predicate,
|
|
1191
|
+
* placing the new one at the same index and returning it. If a context for the given key
|
|
1192
|
+
* predicate already exists, it is reused. A newly created context will be kept-alive if the old
|
|
1193
|
+
* context was, and then it will share the <code>fnOnBeforeDestroy</code> method - but it will
|
|
1194
|
+
* be called with the new context as first argument.
|
|
1195
|
+
*
|
|
1196
|
+
* @param {sap.ui.model.odata.v4.Context} oOldContext - The old context
|
|
1197
|
+
* @param {object} oElement - The element data
|
|
1198
|
+
* @param {string} sPredicate - The key predicate
|
|
1199
|
+
* @returns {sap.ui.model.odata.v4.Context} - The new context
|
|
1200
|
+
* @throws {Error} If a reused context is already part of the collection (has an index), except
|
|
1201
|
+
* if it is the same instance as the given old context
|
|
1202
|
+
*
|
|
1203
|
+
* @private
|
|
1204
|
+
*/
|
|
1205
|
+
ODataListBinding.prototype.doReplaceWith = function (oOldContext, oElement, sPredicate) {
|
|
1206
|
+
var iIndex = oOldContext.iIndex,
|
|
1207
|
+
bKeepAlive = oOldContext.isKeepAlive(),
|
|
1208
|
+
bNew,
|
|
1209
|
+
fnOnBeforeDestroy = oOldContext.fnOnBeforeDestroy,
|
|
1210
|
+
fnOnBeforeDestroyClone,
|
|
1211
|
+
sPath = this.oHeaderContext.getPath() + sPredicate,
|
|
1212
|
+
oResult = this.mPreviousContextsByPath[sPath];
|
|
1213
|
+
|
|
1214
|
+
if (oResult) {
|
|
1215
|
+
if (oResult === oOldContext) {
|
|
1216
|
+
return oResult; // shortcut
|
|
1217
|
+
}
|
|
1218
|
+
if (oResult.iIndex !== undefined) {
|
|
1219
|
+
throw new Error("Unexpected index: " + oResult);
|
|
1220
|
+
}
|
|
1221
|
+
oResult.iIndex = iIndex;
|
|
1222
|
+
delete this.mPreviousContextsByPath[sPath];
|
|
1223
|
+
} else {
|
|
1224
|
+
oResult = Context.create(this.oModel, this, sPath, iIndex);
|
|
1225
|
+
bNew = true;
|
|
1226
|
+
}
|
|
1227
|
+
oOldContext.iIndex = undefined;
|
|
1228
|
+
this.aContexts[iIndex] = oResult;
|
|
1229
|
+
this.oCache.doReplaceWith(iIndex, oElement);
|
|
1230
|
+
if (bKeepAlive) {
|
|
1231
|
+
this.mPreviousContextsByPath[oOldContext.getPath()] = oOldContext;
|
|
1232
|
+
if (bNew) {
|
|
1233
|
+
if (fnOnBeforeDestroy) {
|
|
1234
|
+
fnOnBeforeDestroyClone
|
|
1235
|
+
= (fnOnBeforeDestroy.$original || fnOnBeforeDestroy).bind(null, oResult);
|
|
1236
|
+
fnOnBeforeDestroyClone.$original = fnOnBeforeDestroy;
|
|
1237
|
+
}
|
|
1238
|
+
oResult.setKeepAlive(true, fnOnBeforeDestroyClone);
|
|
1239
|
+
}
|
|
1240
|
+
} else {
|
|
1241
|
+
this.destroyLater(oOldContext);
|
|
1242
|
+
}
|
|
1243
|
+
this._fireChange({reason : ChangeReason.Change});
|
|
1244
|
+
|
|
1245
|
+
return oResult;
|
|
1246
|
+
};
|
|
1247
|
+
|
|
1046
1248
|
/**
|
|
1047
1249
|
* @override
|
|
1048
1250
|
* @see sap.ui.model.odata.v4.ODataParentBinding#doSetProperty
|
|
@@ -1055,7 +1257,7 @@ sap.ui.define([
|
|
|
1055
1257
|
* @param {sap.ui.model.odata.v4.Context} oContext
|
|
1056
1258
|
* The context corresponding to the group node
|
|
1057
1259
|
* @returns {sap.ui.base.SyncPromise}
|
|
1058
|
-
* A promise that is resolved when the expand is
|
|
1260
|
+
* A promise that is resolved when the expand is successful and rejected when it fails
|
|
1059
1261
|
* @throws {Error}
|
|
1060
1262
|
* If the binding's root binding is suspended
|
|
1061
1263
|
*
|
|
@@ -1107,43 +1309,6 @@ sap.ui.define([
|
|
|
1107
1309
|
});
|
|
1108
1310
|
};
|
|
1109
1311
|
|
|
1110
|
-
/**
|
|
1111
|
-
* Creates a cache for this binding if a cache is needed and updates <code>oCachePromise</code>.
|
|
1112
|
-
* Copies the data for kept-alive contexts and the late query options from the old cache to the
|
|
1113
|
-
* new one.
|
|
1114
|
-
*
|
|
1115
|
-
* @private
|
|
1116
|
-
*/
|
|
1117
|
-
// @override sap.ui.model.odata.v4.ODataBinding#fetchCache
|
|
1118
|
-
ODataListBinding.prototype.fetchCache = function () {
|
|
1119
|
-
var oOldCache = this.oCache,
|
|
1120
|
-
sBindingPath = this.getResolvedPath(),
|
|
1121
|
-
bKeptDataAdded,
|
|
1122
|
-
that = this;
|
|
1123
|
-
|
|
1124
|
-
asODataParentBinding.prototype.fetchCache.apply(this, arguments);
|
|
1125
|
-
|
|
1126
|
-
if (oOldCache) {
|
|
1127
|
-
this.oCachePromise.then(function (oCache) {
|
|
1128
|
-
Object.keys(that.mPreviousContextsByPath).forEach(function (sPath) {
|
|
1129
|
-
var oContext = that.mPreviousContextsByPath[sPath];
|
|
1130
|
-
|
|
1131
|
-
if (oContext.isKeepAlive()) {
|
|
1132
|
-
// either absolute or $$ownRequest === true
|
|
1133
|
-
// ->has own cache, see #checkKeepAlive
|
|
1134
|
-
oCache.addKeptElement(
|
|
1135
|
-
oOldCache.getValue(_Helper.getRelativePath(sPath, sBindingPath)));
|
|
1136
|
-
oContext.checkUpdate(); // add change listeners
|
|
1137
|
-
bKeptDataAdded = true;
|
|
1138
|
-
}
|
|
1139
|
-
});
|
|
1140
|
-
if (bKeptDataAdded) {
|
|
1141
|
-
oCache.setLateQueryOptions(oOldCache.getLateQueryOptions());
|
|
1142
|
-
}
|
|
1143
|
-
}); // no catch; if the new cache can't be created, data for kept-alive contexts is lost
|
|
1144
|
-
}
|
|
1145
|
-
};
|
|
1146
|
-
|
|
1147
1312
|
/**
|
|
1148
1313
|
* Fetches the data and creates contexts for the given range.
|
|
1149
1314
|
*
|
|
@@ -1325,32 +1490,32 @@ sap.ui.define([
|
|
|
1325
1490
|
sValue = setCase(_Helper.formatLiteral(oFilter.oValue1, sEdmType));
|
|
1326
1491
|
|
|
1327
1492
|
switch (oFilter.sOperator) {
|
|
1328
|
-
case FilterOperator.BT
|
|
1493
|
+
case FilterOperator.BT:
|
|
1329
1494
|
sFilter = sFilterPath + " ge " + sValue + " and " + sFilterPath + " le "
|
|
1330
1495
|
+ setCase(_Helper.formatLiteral(oFilter.oValue2, sEdmType));
|
|
1331
1496
|
break;
|
|
1332
|
-
case FilterOperator.NB
|
|
1497
|
+
case FilterOperator.NB:
|
|
1333
1498
|
sFilter = wrap(sFilterPath + " lt " + sValue + " or " + sFilterPath + " gt "
|
|
1334
1499
|
+ setCase(_Helper.formatLiteral(oFilter.oValue2, sEdmType)), bWithinAnd);
|
|
1335
1500
|
break;
|
|
1336
|
-
case FilterOperator.EQ
|
|
1337
|
-
case FilterOperator.GE
|
|
1338
|
-
case FilterOperator.GT
|
|
1339
|
-
case FilterOperator.LE
|
|
1340
|
-
case FilterOperator.LT
|
|
1341
|
-
case FilterOperator.NE
|
|
1501
|
+
case FilterOperator.EQ:
|
|
1502
|
+
case FilterOperator.GE:
|
|
1503
|
+
case FilterOperator.GT:
|
|
1504
|
+
case FilterOperator.LE:
|
|
1505
|
+
case FilterOperator.LT:
|
|
1506
|
+
case FilterOperator.NE:
|
|
1342
1507
|
sFilter = sFilterPath + " " + oFilter.sOperator.toLowerCase() + " " + sValue;
|
|
1343
1508
|
break;
|
|
1344
|
-
case FilterOperator.Contains
|
|
1345
|
-
case FilterOperator.EndsWith
|
|
1346
|
-
case FilterOperator.NotContains
|
|
1347
|
-
case FilterOperator.NotEndsWith
|
|
1348
|
-
case FilterOperator.NotStartsWith
|
|
1349
|
-
case FilterOperator.StartsWith
|
|
1509
|
+
case FilterOperator.Contains:
|
|
1510
|
+
case FilterOperator.EndsWith:
|
|
1511
|
+
case FilterOperator.NotContains:
|
|
1512
|
+
case FilterOperator.NotEndsWith:
|
|
1513
|
+
case FilterOperator.NotStartsWith:
|
|
1514
|
+
case FilterOperator.StartsWith:
|
|
1350
1515
|
sFilter = oFilter.sOperator.toLowerCase().replace("not", "not ")
|
|
1351
1516
|
+ "(" + sFilterPath + "," + sValue + ")";
|
|
1352
1517
|
break;
|
|
1353
|
-
default
|
|
1518
|
+
default:
|
|
1354
1519
|
throw new Error("Unsupported operator: " + oFilter.sOperator);
|
|
1355
1520
|
}
|
|
1356
1521
|
return sFilter;
|
|
@@ -1499,10 +1664,11 @@ sap.ui.define([
|
|
|
1499
1664
|
};
|
|
1500
1665
|
|
|
1501
1666
|
/**
|
|
1502
|
-
* Filters the list with the given filters.
|
|
1667
|
+
* Filters the list with the given filters. Since 1.97.0, if filters are unchanged, no request
|
|
1668
|
+
* is sent, regardless of pending changes.
|
|
1503
1669
|
*
|
|
1504
|
-
* If there are pending changes an error is thrown. Use
|
|
1505
|
-
* there are pending changes. If there are
|
|
1670
|
+
* If there are pending changes that cannot be ignored, an error is thrown. Use
|
|
1671
|
+
* {@link #hasPendingChanges} to check if there are such pending changes. If there are, call
|
|
1506
1672
|
* {@link sap.ui.model.odata.v4.ODataModel#submitBatch} to submit the changes or
|
|
1507
1673
|
* {@link sap.ui.model.odata.v4.ODataModel#resetChanges} to reset the changes before calling
|
|
1508
1674
|
* {@link #filter}.
|
|
@@ -1543,8 +1709,10 @@ sap.ui.define([
|
|
|
1543
1709
|
* @returns {this}
|
|
1544
1710
|
* <code>this</code> to facilitate method chaining
|
|
1545
1711
|
* @throws {Error}
|
|
1546
|
-
* If there are pending changes or if an unsupported operation mode is
|
|
1547
|
-
* {@link sap.ui.model.odata.v4.ODataModel#bindList})
|
|
1712
|
+
* If there are pending changes that cannot be ignored or if an unsupported operation mode is
|
|
1713
|
+
* used (see {@link sap.ui.model.odata.v4.ODataModel#bindList}). Since 1.97.0, pending changes
|
|
1714
|
+
* are ignored if they relate to a
|
|
1715
|
+
* {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
|
|
1548
1716
|
*
|
|
1549
1717
|
* @public
|
|
1550
1718
|
* @see sap.ui.model.ListBinding#filter
|
|
@@ -1553,17 +1721,25 @@ sap.ui.define([
|
|
|
1553
1721
|
*/
|
|
1554
1722
|
// @override sap.ui.model.ListBinding#filter
|
|
1555
1723
|
ODataListBinding.prototype.filter = function (vFilters, sFilterType) {
|
|
1724
|
+
var aFilters = _Helper.toArray(vFilters);
|
|
1725
|
+
|
|
1556
1726
|
if (this.sOperationMode !== OperationMode.Server) {
|
|
1557
1727
|
throw new Error("Operation mode has to be sap.ui.model.odata.OperationMode.Server");
|
|
1558
1728
|
}
|
|
1559
|
-
|
|
1729
|
+
|
|
1730
|
+
if (sFilterType === FilterType.Control && _Helper.deepEqual(aFilters, this.aFilters)
|
|
1731
|
+
|| _Helper.deepEqual(aFilters, this.aApplicationFilters)) {
|
|
1732
|
+
return this;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
if (this.hasPendingChanges(true)) {
|
|
1560
1736
|
throw new Error("Cannot filter due to pending changes");
|
|
1561
1737
|
}
|
|
1562
1738
|
|
|
1563
1739
|
if (sFilterType === FilterType.Control) {
|
|
1564
|
-
this.aFilters =
|
|
1740
|
+
this.aFilters = aFilters;
|
|
1565
1741
|
} else {
|
|
1566
|
-
this.aApplicationFilters =
|
|
1742
|
+
this.aApplicationFilters = aFilters;
|
|
1567
1743
|
}
|
|
1568
1744
|
|
|
1569
1745
|
if (this.isRootBindingSuspended()) {
|
|
@@ -1583,6 +1759,40 @@ sap.ui.define([
|
|
|
1583
1759
|
return this;
|
|
1584
1760
|
};
|
|
1585
1761
|
|
|
1762
|
+
/**
|
|
1763
|
+
* Fires the 'createActivate' event.
|
|
1764
|
+
*
|
|
1765
|
+
* @param {sap.ui.model.odata.v4.Context} _oContext
|
|
1766
|
+
* The context being activated
|
|
1767
|
+
*
|
|
1768
|
+
* @private
|
|
1769
|
+
*/
|
|
1770
|
+
ODataListBinding.prototype.fireCreateActivate = function (_oContext) {
|
|
1771
|
+
this.iActiveContexts += 1;
|
|
1772
|
+
this.fireEvent("createActivate");
|
|
1773
|
+
};
|
|
1774
|
+
|
|
1775
|
+
/**
|
|
1776
|
+
* Returns all current contexts of this list binding in no special order. Just like
|
|
1777
|
+
* {@link #getCurrentContexts}, this method does not request any data from a back end and does
|
|
1778
|
+
* not change the binding's state. In contrast to {@link #getCurrentContexts}, it does not only
|
|
1779
|
+
* return those contexts that were last requested by a control, but all contexts that are
|
|
1780
|
+
* currently available in the binding, including kept-alive contexts. To filter out kept-alive
|
|
1781
|
+
* contexts that are not part of the list, you could check whether the index is
|
|
1782
|
+
* <code>undefined</code>, as described in {@link sap.ui.model.odata.v4.Context#getIndex}.
|
|
1783
|
+
*
|
|
1784
|
+
* @returns {sap.ui.model.odata.v4.Context[]}
|
|
1785
|
+
* All current contexts of this list binding, in no special order
|
|
1786
|
+
*
|
|
1787
|
+
* @public
|
|
1788
|
+
* @since 1.98.0
|
|
1789
|
+
*/
|
|
1790
|
+
ODataListBinding.prototype.getAllCurrentContexts = function () {
|
|
1791
|
+
return this.aContexts.filter(function (oContext) {
|
|
1792
|
+
return oContext;
|
|
1793
|
+
}).concat(Object.values(this.mPreviousContextsByPath));
|
|
1794
|
+
};
|
|
1795
|
+
|
|
1586
1796
|
/**
|
|
1587
1797
|
* Returns already created binding contexts for all entities in this list binding for the range
|
|
1588
1798
|
* determined by the given start index <code>iStart</code> and <code>iLength</code>.
|
|
@@ -2112,7 +2322,7 @@ sap.ui.define([
|
|
|
2112
2322
|
if (sOrderbyQueryOption) {
|
|
2113
2323
|
aOrderbyOptions.push(sOrderbyQueryOption);
|
|
2114
2324
|
}
|
|
2115
|
-
return aOrderbyOptions.join(
|
|
2325
|
+
return aOrderbyOptions.join(",");
|
|
2116
2326
|
};
|
|
2117
2327
|
|
|
2118
2328
|
/**
|
|
@@ -2169,7 +2379,7 @@ sap.ui.define([
|
|
|
2169
2379
|
if (this.oCache === undefined) {
|
|
2170
2380
|
// as long as cache is not yet known there can be only changes caused by created
|
|
2171
2381
|
// entities; sPath does not matter
|
|
2172
|
-
return this.
|
|
2382
|
+
return this.iActiveContexts > 0;
|
|
2173
2383
|
}
|
|
2174
2384
|
return asODataParentBinding.prototype.hasPendingChangesForPath.apply(this, arguments);
|
|
2175
2385
|
};
|
|
@@ -2298,7 +2508,8 @@ sap.ui.define([
|
|
|
2298
2508
|
}
|
|
2299
2509
|
|
|
2300
2510
|
// add the context binding's query options as late query options
|
|
2301
|
-
if (!this.aggregateQueryOptions(mEntityQueryOptions,
|
|
2511
|
+
if (!this.aggregateQueryOptions(mEntityQueryOptions, _Helper.getMetaPath(sEntityPath),
|
|
2512
|
+
/*bImmutable*/true)) {
|
|
2302
2513
|
throw new Error(oEntityContext + ": could not move the entity. Probably a list binding"
|
|
2303
2514
|
+ " w/o $$ownRequest depends on it");
|
|
2304
2515
|
}
|
|
@@ -2310,7 +2521,7 @@ sap.ui.define([
|
|
|
2310
2521
|
oCache.addKeptElement(oEntity);
|
|
2311
2522
|
// setKeepAlive looks into the cache, so this had to wait
|
|
2312
2523
|
oEntityContext.setKeepAlive(true);
|
|
2313
|
-
oEntityContext.checkUpdate();
|
|
2524
|
+
oEntityContext.checkUpdate(); // create listeners in this binding's cache
|
|
2314
2525
|
});
|
|
2315
2526
|
};
|
|
2316
2527
|
|
|
@@ -2324,6 +2535,7 @@ sap.ui.define([
|
|
|
2324
2535
|
|
|
2325
2536
|
function onRemove(sPredicate) {
|
|
2326
2537
|
var sPath = that.getResolvedPath();
|
|
2538
|
+
|
|
2327
2539
|
that.mPreviousContextsByPath[sPath + sPredicate].resetKeepAlive();
|
|
2328
2540
|
}
|
|
2329
2541
|
|
|
@@ -2350,16 +2562,21 @@ sap.ui.define([
|
|
|
2350
2562
|
|
|
2351
2563
|
this.createReadGroupLock(sGroupId, this.isRoot());
|
|
2352
2564
|
return this.oCachePromise.then(function (oCache) {
|
|
2353
|
-
var
|
|
2565
|
+
var iActiveContexts = that.iActiveContexts,
|
|
2566
|
+
iCreatedContexts = that.iCreatedContexts,
|
|
2354
2567
|
aDependentBindings,
|
|
2355
2568
|
oKeptElementsPromise,
|
|
2356
2569
|
oPromise = that.oRefreshPromise;
|
|
2357
2570
|
|
|
2358
2571
|
if (oCache && !oPromise) { // do not refresh twice
|
|
2359
2572
|
that.removeCachesAndMessages(sResourcePathPrefix);
|
|
2360
|
-
that.fetchCache(that.oContext, false, /*bKeepQueryOptions*/true);
|
|
2573
|
+
that.fetchCache(that.oContext, false, /*bKeepQueryOptions*/true, bKeepCacheOnError);
|
|
2361
2574
|
oKeptElementsPromise = that.oCachePromise.then(function (oNewCache) {
|
|
2362
2575
|
return oNewCache.refreshKeptElements(that.lockGroup(sGroupId), onRemove);
|
|
2576
|
+
}).catch(function (oError) {
|
|
2577
|
+
that.oModel.reportError("Failed to refresh kept-alive elements", sClassName,
|
|
2578
|
+
oError);
|
|
2579
|
+
throw oError;
|
|
2363
2580
|
});
|
|
2364
2581
|
if (that.iCurrentEnd > 0) {
|
|
2365
2582
|
oPromise = that.createRefreshPromise().catch(function (oError) {
|
|
@@ -2370,6 +2587,7 @@ sap.ui.define([
|
|
|
2370
2587
|
if (!that.bRelative || oCache.getResourcePath() === sResourcePath) {
|
|
2371
2588
|
that.oCache = oCache;
|
|
2372
2589
|
that.oCachePromise = SyncPromise.resolve(oCache);
|
|
2590
|
+
that.iActiveContexts = iActiveContexts;
|
|
2373
2591
|
that.iCreatedContexts = iCreatedContexts;
|
|
2374
2592
|
oCache.setActive(true);
|
|
2375
2593
|
that._fireChange({reason : ChangeReason.Change});
|
|
@@ -2381,7 +2599,7 @@ sap.ui.define([
|
|
|
2381
2599
|
}
|
|
2382
2600
|
// Note: after reset the dependent bindings cannot be found any more
|
|
2383
2601
|
aDependentBindings = that.getDependentBindings();
|
|
2384
|
-
that.reset(ChangeReason.Refresh); // this may reset that.oRefreshPromise
|
|
2602
|
+
that.reset(ChangeReason.Refresh, true); // this may reset that.oRefreshPromise
|
|
2385
2603
|
return SyncPromise.all(
|
|
2386
2604
|
refreshAll(aDependentBindings).concat(oPromise, oKeptElementsPromise,
|
|
2387
2605
|
// Update after refresh event, otherwise $count is fetched before the request
|
|
@@ -2498,7 +2716,7 @@ sap.ui.define([
|
|
|
2498
2716
|
fireDataReceived({data : {}});
|
|
2499
2717
|
oBinding.assertSameCache(oCache);
|
|
2500
2718
|
if (!bDestroyed) { // do not update destroyed context
|
|
2501
|
-
aUpdatePromises.push(oContext.
|
|
2719
|
+
aUpdatePromises.push(oContext.checkUpdateInternal());
|
|
2502
2720
|
if (bAllowRemoval) {
|
|
2503
2721
|
aUpdatePromises.push(
|
|
2504
2722
|
oContext.refreshDependentBindings(sResourcePathPrefix,
|
|
@@ -2653,7 +2871,7 @@ sap.ui.define([
|
|
|
2653
2871
|
oMessage.getTargets().forEach(function (sTarget) {
|
|
2654
2872
|
var sPredicate = sTarget.slice(sResolvedPath.length).split("/")[0];
|
|
2655
2873
|
|
|
2656
|
-
if (!sPredicate.startsWith("($uid=")) {
|
|
2874
|
+
if (sPredicate && !sPredicate.startsWith("($uid=")) {
|
|
2657
2875
|
mPredicates[sPredicate] = true;
|
|
2658
2876
|
}
|
|
2659
2877
|
});
|
|
@@ -2772,23 +2990,49 @@ sap.ui.define([
|
|
|
2772
2990
|
* A change reason; if given, a refresh event with this reason is fired and the next
|
|
2773
2991
|
* getContexts() fires a change event with this reason. Change reason "change" is ignored
|
|
2774
2992
|
* as long as the binding is still empty.
|
|
2993
|
+
* @param {boolean} [bDropTransient]
|
|
2994
|
+
* Whether transient contexts shall also be dropped, not just created persisted ones
|
|
2775
2995
|
*
|
|
2776
2996
|
* @private
|
|
2777
2997
|
*/
|
|
2778
|
-
ODataListBinding.prototype.reset = function (sChangeReason) {
|
|
2779
|
-
var
|
|
2998
|
+
ODataListBinding.prototype.reset = function (sChangeReason, bDropTransient) {
|
|
2999
|
+
var oContext,
|
|
3000
|
+
bEmpty = this.iCurrentEnd === 0,
|
|
3001
|
+
iTransient = 0,
|
|
3002
|
+
i,
|
|
2780
3003
|
that = this;
|
|
2781
3004
|
|
|
3005
|
+
if (bDropTransient) {
|
|
3006
|
+
this.iActiveContexts = 0;
|
|
3007
|
+
this.iCreatedContexts = 0;
|
|
3008
|
+
}
|
|
2782
3009
|
if (this.aContexts) { // allow initial call from c'tor via #applyParameters
|
|
2783
|
-
this.aContexts.forEach(function (oContext) {
|
|
3010
|
+
this.aContexts.slice(this.iCreatedContexts).forEach(function (oContext) {
|
|
2784
3011
|
that.mPreviousContextsByPath[oContext.getPath()] = oContext;
|
|
2785
3012
|
});
|
|
3013
|
+
for (i = 0; i < this.iCreatedContexts; i += 1) {
|
|
3014
|
+
oContext = this.aContexts[i];
|
|
3015
|
+
if (oContext.isTransient()) {
|
|
3016
|
+
this.aContexts[iTransient] = oContext;
|
|
3017
|
+
iTransient += 1;
|
|
3018
|
+
} else { // Note: "created persisted" elements must be active
|
|
3019
|
+
this.iActiveContexts -= 1;
|
|
3020
|
+
this.mPreviousContextsByPath[oContext.getPath()] = oContext;
|
|
3021
|
+
}
|
|
3022
|
+
}
|
|
3023
|
+
for (i = 0; i < iTransient; i += 1) {
|
|
3024
|
+
this.aContexts[i].iIndex = i - iTransient;
|
|
3025
|
+
}
|
|
3026
|
+
// Note: no strict need to keep the reference here
|
|
3027
|
+
this.aContexts.length = this.iCreatedContexts = iTransient;
|
|
3028
|
+
} else {
|
|
3029
|
+
this.aContexts = [];
|
|
3030
|
+
}
|
|
3031
|
+
if (!this.iCreatedContexts) {
|
|
3032
|
+
// true if contexts have been created at the end, false if contexts have been created at
|
|
3033
|
+
// the start, undefined if there are no created contexts
|
|
3034
|
+
this.bCreatedAtEnd = undefined;
|
|
2786
3035
|
}
|
|
2787
|
-
this.aContexts = [];
|
|
2788
|
-
this.iCreatedContexts = 0; // number of (client-side) created contexts in aContexts
|
|
2789
|
-
// true if contexts have been created at the end, false if contexts have been created at the
|
|
2790
|
-
// start, undefined if there are no created contexts
|
|
2791
|
-
this.bCreatedAtEnd = undefined;
|
|
2792
3036
|
// the range of array indices for getCurrentContexts
|
|
2793
3037
|
this.iCurrentBegin = this.iCurrentEnd = 0;
|
|
2794
3038
|
// upper boundary for server-side list length (based on observations so far)
|
|
@@ -2846,7 +3090,8 @@ sap.ui.define([
|
|
|
2846
3090
|
aBindings.forEach(function (oDependentBinding) {
|
|
2847
3091
|
// do not call checkUpdate in dependent property bindings if the cache of this
|
|
2848
3092
|
// binding is reset and the binding has not yet fired a change event
|
|
2849
|
-
oDependentBinding.resumeInternal(!bRefresh,
|
|
3093
|
+
oDependentBinding.resumeInternal(!bRefresh,
|
|
3094
|
+
!!sResumeChangeReason && !oDependentBinding.oContext.isKeepAlive());
|
|
2850
3095
|
});
|
|
2851
3096
|
if (this.sChangeReason === "AddVirtualContext") {
|
|
2852
3097
|
// In a refresh event the table would ignore the result -> no virtual context -> no
|
|
@@ -2931,10 +3176,13 @@ sap.ui.define([
|
|
|
2931
3176
|
* separate row after all children, when a group level node is expanded (since 1.86.0);
|
|
2932
3177
|
* <code>true</code> for bottom only, <code>false</code> for top and bottom, the default is
|
|
2933
3178
|
* top only (that is, as part of the group level node)
|
|
2934
|
-
* @throws {Error}
|
|
2935
|
-
*
|
|
2936
|
-
*
|
|
2937
|
-
*
|
|
3179
|
+
* @throws {Error} If
|
|
3180
|
+
* <ul>
|
|
3181
|
+
* <li> the given data aggregation object is unsupported,
|
|
3182
|
+
* <li> the <code>$apply</code> system query option has been specified explicitly before,
|
|
3183
|
+
* <li> the binding has a kept-alive context,
|
|
3184
|
+
* <li> there are pending changes
|
|
3185
|
+
* </ul>
|
|
2938
3186
|
* @example <caption>First group level is product category including subtotals for the net
|
|
2939
3187
|
* amount in display currency. On leaf level, transaction currency is used as an additional
|
|
2940
3188
|
* dimension and the net amount is averaged.</caption>
|
|
@@ -2960,9 +3208,19 @@ sap.ui.define([
|
|
|
2960
3208
|
ODataListBinding.prototype.setAggregation = function (oAggregation) {
|
|
2961
3209
|
var mParameters;
|
|
2962
3210
|
|
|
3211
|
+
function hasKeptAliveContext(aContexts) {
|
|
3212
|
+
return aContexts.some(function (oContext) {
|
|
3213
|
+
return oContext && oContext.isKeepAlive();
|
|
3214
|
+
});
|
|
3215
|
+
}
|
|
3216
|
+
|
|
2963
3217
|
if (this.hasPendingChanges()) {
|
|
2964
3218
|
throw new Error("Cannot set $$aggregation due to pending changes");
|
|
2965
3219
|
}
|
|
3220
|
+
if (hasKeptAliveContext(this.aContexts)
|
|
3221
|
+
|| hasKeptAliveContext(Object.values(this.mPreviousContextsByPath))) {
|
|
3222
|
+
throw new Error("Cannot set $$aggregation due to a kept-alive context");
|
|
3223
|
+
}
|
|
2966
3224
|
|
|
2967
3225
|
mParameters = Object.assign({}, this.mParameters);
|
|
2968
3226
|
if (oAggregation === undefined) {
|
|
@@ -2989,7 +3247,8 @@ sap.ui.define([
|
|
|
2989
3247
|
// @override sap.ui.model.Binding#setContext
|
|
2990
3248
|
ODataListBinding.prototype.setContext = function (oContext) {
|
|
2991
3249
|
var sResolvedPath,
|
|
2992
|
-
i,
|
|
3250
|
+
i,
|
|
3251
|
+
that = this;
|
|
2993
3252
|
|
|
2994
3253
|
if (this.oContext !== oContext) {
|
|
2995
3254
|
if (this.bRelative) {
|
|
@@ -3048,10 +3307,11 @@ sap.ui.define([
|
|
|
3048
3307
|
/**
|
|
3049
3308
|
* Sort the entries represented by this list binding according to the given sorters.
|
|
3050
3309
|
* The sorters are stored at this list binding and they are used for each following data
|
|
3051
|
-
* request.
|
|
3310
|
+
* request. Since 1.97.0, if sorters are unchanged, no request is sent, regardless of pending
|
|
3311
|
+
* changes.
|
|
3052
3312
|
*
|
|
3053
|
-
* If there are pending changes an error is thrown. Use
|
|
3054
|
-
* there are pending changes. If there are
|
|
3313
|
+
* If there are pending changes that cannot be ignored, an error is thrown. Use
|
|
3314
|
+
* {@link #hasPendingChanges} to check if there are such pending changes. If there are, call
|
|
3055
3315
|
* {@link sap.ui.model.odata.v4.ODataModel#submitBatch} to submit the changes or
|
|
3056
3316
|
* {@link sap.ui.model.odata.v4.ODataModel#resetChanges} to reset the changes before calling
|
|
3057
3317
|
* {@link #sort}.
|
|
@@ -3064,8 +3324,10 @@ sap.ui.define([
|
|
|
3064
3324
|
* @returns {this}
|
|
3065
3325
|
* <code>this</code> to facilitate method chaining
|
|
3066
3326
|
* @throws {Error}
|
|
3067
|
-
* If there are pending changes or if an unsupported operation mode is
|
|
3068
|
-
* {@link sap.ui.model.odata.v4.ODataModel#bindList}).
|
|
3327
|
+
* If there are pending changes that cannot be ignored or if an unsupported operation mode is
|
|
3328
|
+
* used (see {@link sap.ui.model.odata.v4.ODataModel#bindList}). Since 1.97.0, pending changes
|
|
3329
|
+
* are ignored if they relate to a
|
|
3330
|
+
* {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding.
|
|
3069
3331
|
*
|
|
3070
3332
|
* @public
|
|
3071
3333
|
* @see sap.ui.model.ListBinding#sort
|
|
@@ -3073,14 +3335,21 @@ sap.ui.define([
|
|
|
3073
3335
|
*/
|
|
3074
3336
|
// @override sap.ui.model.ListBinding#sort
|
|
3075
3337
|
ODataListBinding.prototype.sort = function (vSorters) {
|
|
3338
|
+
var aSorters = _Helper.toArray(vSorters);
|
|
3339
|
+
|
|
3076
3340
|
if (this.sOperationMode !== OperationMode.Server) {
|
|
3077
3341
|
throw new Error("Operation mode has to be sap.ui.model.odata.OperationMode.Server");
|
|
3078
3342
|
}
|
|
3079
|
-
|
|
3343
|
+
|
|
3344
|
+
if (_Helper.deepEqual(aSorters, this.aSorters)) {
|
|
3345
|
+
return this;
|
|
3346
|
+
}
|
|
3347
|
+
|
|
3348
|
+
if (this.hasPendingChanges(true)) {
|
|
3080
3349
|
throw new Error("Cannot sort due to pending changes");
|
|
3081
3350
|
}
|
|
3082
3351
|
|
|
3083
|
-
this.aSorters =
|
|
3352
|
+
this.aSorters = aSorters;
|
|
3084
3353
|
|
|
3085
3354
|
if (this.isRootBindingSuspended()) {
|
|
3086
3355
|
this.setResumeChangeReason(ChangeReason.Sort);
|
|
@@ -3138,7 +3407,7 @@ sap.ui.define([
|
|
|
3138
3407
|
* @param {string} [aAggregation[].as]
|
|
3139
3408
|
* Measures only: The alias, that is the name of the dynamic property used for aggregation of
|
|
3140
3409
|
* this measure; see "3.1.1 Keyword as" (since 1.55.0)
|
|
3141
|
-
* @returns {object}
|
|
3410
|
+
* @returns {object|undefined}
|
|
3142
3411
|
* The return object contains a property <code>measureRangePromise</code> if and only if at
|
|
3143
3412
|
* least one measure has requested a minimum or maximum value; its value is a
|
|
3144
3413
|
* promise which resolves with the measure range map as soon as data has been received; the
|