@openui5/sap.ui.core
Version:
OpenUI5 Core Library sap.ui.core
188 lines (164 loc) • 5.43 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2009-2023 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
sap.ui.define(["./DragDropBase"],
function(DragDropBase) {
"use strict";
/**
* Constructor for a new DragInfo.
*
* @param {string} [sId] ID for the new DragInfo, generated automatically if no ID is given
* @param {object} [mSettings] Initial settings for the DragInfo
*
* @class
* Provides the configuration for drag operations.
*
* <b>Note:</b> This configuration might be ignored due to control {@link sap.ui.core.Element.extend metadata} restrictions.
*
* @extends sap.ui.core.dnd.DragDropBase
*
* @author SAP SE
* @version 1.111.5
*
* @public
* @since 1.56
* @alias sap.ui.core.dnd.DragInfo
*/
var DragInfo = DragDropBase.extend("sap.ui.core.dnd.DragInfo", /** @lends sap.ui.core.dnd.DragInfo.prototype */ { metadata: {
library: "sap.ui.core",
interfaces: [
"sap.ui.core.dnd.IDragInfo"
],
properties: {
/**
* The name of the aggregation from which all children can be dragged. If undefined, the control itself can be dragged.
*/
sourceAggregation: {type: "string", defaultValue: null}
},
events: {
/**
* This event is fired when the user starts dragging an element.
*
* @name sap.ui.core.dnd.DragInfo#dragStart
* @event
* @param {sap.ui.base.Event} oControlEvent
* @param {sap.ui.base.EventProvider} oControlEvent.getSource
* @param {object} oControlEvent.getParameters
* @param {sap.ui.core.Element} oControlEvent.getParameters.target The target element that will be dragged
* @param {sap.ui.core.dnd.DragSession} oControlEvent.getParameters.dragSession The UI5 <code>dragSession</code> object that exists only during drag and drop
* @param {Event} oControlEvent.getParameters.browserEvent The underlying browser event
* @public
*/
dragStart: {
allowPreventDefault: true
},
/**
* This event is fired when a drag operation is being ended.
*
* @name sap.ui.core.dnd.DragInfo#dragEnd
* @event
* @param {sap.ui.base.Event} oControlEvent
* @param {sap.ui.base.EventProvider} oControlEvent.getSource
* @param {object} oControlEvent.getParameters
* @param {sap.ui.core.Element} oControlEvent.getParameters.target The target element that is being dragged
* @param {sap.ui.core.dnd.DragSession} oControlEvent.getParameters.dragSession The UI5 <code>dragSession</code> object that exists only during drag and drop
* @param {Event} oControlEvent.getParameters.browserEvent The underlying browser event
* @public
* @since 1.56
*/
dragEnd: {
}
}
}});
/**
* Provides DragInfo mixin for the subclasses that need DragInfo functionalities.
*
* @private
* @mixin
* @since 1.87
*/
DragInfo.Mixin = function() {
this.isDraggable = function(oControl) {
if (!this.getEnabled()) {
return false;
}
var oDragSource = this.getParent();
if (!oDragSource) {
return false;
}
// metadata restrictions
var sSourceAggregation = this.getSourceAggregation();
if (!this.checkMetadata(oDragSource, sSourceAggregation, "draggable")) {
return false;
}
// control itself is the drag source or
// control is in the aggregation of the drag source
if ((oDragSource === oControl && !sSourceAggregation) ||
(oControl.getParent() === oDragSource && sSourceAggregation === oControl.sParentAggregationName)) {
return oControl.isDragAllowed && !oControl.isDragAllowed(this) ? false : true;
}
return false;
};
this.fireDragStart = function(oEvent) {
if (!oEvent || !oEvent.dragSession) {
return;
}
var oDragSession = oEvent.dragSession;
return this.fireEvent("dragStart", {
dragSession: oDragSession,
browserEvent: oEvent.originalEvent,
target: oDragSession.getDragControl()
}, true);
};
this.fireDragEnd = function(oEvent) {
if (!oEvent || !oEvent.dragSession) {
return;
}
var oDragSession = oEvent.dragSession;
return this.fireEvent("dragEnd", {
dragSession: oDragSession,
browserEvent: oEvent.originalEvent,
target: oDragSession.getDragControl()
});
};
this.setEnabled = function(bEnabled) {
this.setProperty("enabled", bEnabled, false);
this.invalidateDraggables();
return this;
};
this.setParent = function() {
DragDropBase.prototype.setParent.apply(this, arguments);
this.invalidateDraggables();
return this;
};
this.setSourceAggregation = function(sSourceAggregation) {
var sOldSourceAggregation = this.getSourceAggregation();
if (sOldSourceAggregation == sSourceAggregation) {
return this;
}
sOldSourceAggregation && this.invalidateDraggables();
this.setProperty("sourceAggregation", sSourceAggregation, false);
this.invalidateDraggables();
return this;
};
this.invalidateDraggables = function() {
var oParent = this.getParent();
if (oParent && oParent.bOutput == true) {
var sSourceAggregation = this.getSourceAggregation();
if (sSourceAggregation) {
[].concat(oParent.getAggregation(sSourceAggregation)).forEach(function(oAggregation) {
if (oAggregation && oAggregation.bOutput == true) {
oAggregation.invalidate();
}
});
} else {
oParent.invalidate();
}
}
};
};
DragInfo.Mixin.apply(DragInfo.prototype);
return DragInfo;
});