@openui5/sap.ui.core
Version:
OpenUI5 Core Library sap.ui.core
223 lines (193 loc) • 7.74 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 DropInfo.
*
* @param {string} [sId] ID for the new DropInfo, generated automatically if no ID is given
* @param {object} [mSettings] Initial settings for the DropInfo
*
* @class
* Provides the configuration for drop 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.DropInfo
*/
var DropInfo = DragDropBase.extend("sap.ui.core.dnd.DropInfo", /** @lends sap.ui.core.dnd.DropInfo.prototype */ { metadata: {
library: "sap.ui.core",
interfaces: [
"sap.ui.core.dnd.IDropInfo"
],
properties: {
/**
* The aggregation name in the drop target control which is the target of this drag-and-drop action. If undefined, the entire
* control is the target. This can be handy if the target control does not have any aggregations or if the drop position within the target does not matter.
*/
targetAggregation: {type: "string", defaultValue: null, invalidate: false},
/**
* Defines the visual drop effect.
*/
dropEffect: {type: "sap.ui.core.dnd.DropEffect", defaultValue: "Move", invalidate: false},
/**
* Defines the position for the drop action, visualized by a rectangle.
*/
dropPosition: {type: "sap.ui.core.dnd.DropPosition", defaultValue: "On", invalidate: false},
/**
* Defines the layout of the droppable controls if <code>dropPosition</code> is set to <code>Between</code> or <code>OnOrBetween</code>.
*/
dropLayout: {type: "sap.ui.core.dnd.DropLayout", defaultValue: "Default", invalidate: false}
},
events: {
/**
* This event is fired when a dragged element enters a drop target.
*
* @name sap.ui.core.dnd.DropInfo#dragEnter
* @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 on which the dragged element will be dropped
* @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
*/
dragEnter: {
allowPreventDefault: true
},
/**
* This event is fired when an element is being dragged over a valid drop target.
*
* @name sap.ui.core.dnd.DropInfo#dragOver
* @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 on which the dragged element will be dropped
* @param {sap.ui.core.dnd.DragSession} oControlEvent.getParameters.dragSession The UI5 <code>dragSession</code> object that exists only during drag and drop
* @param {sap.ui.core.dnd.RelativeDropPosition} oControlEvent.getParameters.dropPosition The calculated position of the drop action relative to the <code>target</code>.
* @param {Event} oControlEvent.getParameters.browserEvent The underlying browser event
* @public
* @since 1.56
*/
dragOver: {
},
/**
* This event is fired when an element is dropped on a valid drop target, as specified by the drag-and-drop info.
*
* @name sap.ui.core.dnd.DropInfo#drop
* @event
* @param {sap.ui.base.Event} oControlEvent
* @param {sap.ui.base.EventProvider} oControlEvent.getSource
* @param {object} oControlEvent.getParameters
* @param {sap.ui.core.dnd.DragSession} oControlEvent.getParameters.dragSession The UI5 <code>dragSession</code> object that exists only during drag and drop
* @param {sap.ui.core.Element} oControlEvent.getParameters.draggedControl The element being dragged
* @param {sap.ui.core.Element} oControlEvent.getParameters.droppedControl The element being dropped
* @param {sap.ui.core.dnd.RelativeDropPosition} oControlEvent.getParameters.dropPosition The calculated position of the drop action relative to the <code>droppedControl</code>.
* @param {Event} oControlEvent.getParameters.browserEvent The underlying browser event
* @public
*/
drop: {
}
}
}});
DropInfo.prototype.getDropTarget = function() {
return this.getParent();
};
DropInfo.prototype.isDroppable = function(oControl, oEvent) {
this.sTemporaryDropPosition = "";
if (!this.getEnabled()) {
return false;
}
var oDropTarget = this.getDropTarget();
if (!oDropTarget) {
return false;
}
// droppable by default
var sTargetAggregation = this.getTargetAggregation();
if (!this.checkMetadata(oDropTarget, sTargetAggregation, "droppable")) {
return false;
}
// control itself is the drop target
var sTargetAggregation = this.getTargetAggregation();
if (oDropTarget === oControl && !sTargetAggregation) {
return true;
}
// control is in the aggregation of the drop target
if (oControl.getParent() === oDropTarget && sTargetAggregation === oControl.sParentAggregationName) {
return true;
}
// the current DOM element corresponds to the configured aggregation
if (oEvent && sTargetAggregation && oDropTarget === oControl) {
var oAggregationDomRef = oControl.getDomRefForSetting(sTargetAggregation);
if (oAggregationDomRef && oAggregationDomRef != oEvent.target && oAggregationDomRef.contains(oEvent.target)) {
// mark the event for the found aggregation name
oEvent.setMark("DragWithin", sTargetAggregation);
this.sTemporaryDropPosition = "On";
return true;
}
}
return false;
};
DropInfo.prototype.getDropPosition = function(bCheckTemporary) {
if (bCheckTemporary && this.sTemporaryDropPosition) {
return this.sTemporaryDropPosition;
}
return this.getProperty("dropPosition");
};
DropInfo.prototype.getDropLayout = function(bDetectDefault) {
var sDropLayout = this.getProperty("dropLayout");
if (!bDetectDefault || sDropLayout != "Default") {
return sDropLayout;
}
return this.getDropTarget().getMetadata().getDragDropInfo(this.getTargetAggregation()).layout;
};
DropInfo.prototype.fireDragEnter = function(oEvent) {
if (!oEvent || !oEvent.dragSession) {
return;
}
var oDragSession = oEvent.dragSession;
return this.fireEvent("dragEnter", {
dragSession: oEvent.dragSession,
browserEvent: oEvent.originalEvent,
target: oDragSession.getDropControl()
}, true);
};
DropInfo.prototype.fireDragOver = function(oEvent) {
if (!oEvent || !oEvent.dragSession) {
return;
}
var oDragSession = oEvent.dragSession;
return this.fireEvent("dragOver", {
dragSession: oEvent.dragSession,
browserEvent: oEvent.originalEvent,
target: oDragSession.getDropControl(),
dropPosition: oDragSession.getDropPosition()
});
};
DropInfo.prototype.fireDrop = function(oEvent) {
if (!oEvent || !oEvent.dragSession) {
return;
}
var oDragSession = oEvent.dragSession;
this.fireEvent("drop", {
dragSession: oEvent.dragSession,
browserEvent: oEvent.originalEvent,
dropPosition: oDragSession.getDropPosition(),
draggedControl: oDragSession.getDragControl(),
droppedControl: oDragSession.getDropControl()
});
};
return DropInfo;
});