We’ve added support for creating drag-n-drop objects.
Any object can be made draggable. And any object can be made a receiver of other objects. Some objects have built-in drag-n-drop support, such as table columns.
In the example, we are making a drag-and-droppable image.
let df = DG.DataFrame.fromColumns([
DG.Column.fromList(DG.TYPE.STRING,
'Character', ['Alf', 'Kate', 'Willie']),
DG.Column.fromList(DG.TYPE.INT,
'Age', [229, 45, 42]),
DG.Column.fromList(DG.TYPE.STRING,
'Actor', ['Paul Fusco', 'Anne Schedeen', 'Max Wright'])
]);
let control = ui.searchInput('', 'Drag column header or image here...');
let grid = DG.Viewer.grid(df);
let image = ui.image(
'https://datagrok.ai/img/heinlein.jpg',
200, 200,
{target: 'https://datagrok.ai', tooltipMsg: 'Drag Heinlein to Input field'}
);
// Allow dragging and dropping objects into the search field:
ui.makeDroppable(control.input, {
acceptDrop: (o) => true, // Allow to drag anything into the field
doDrop: (o, _) => { // Let's check what fell into the input field
if (o instanceof DG.Column)
control.value = o.name.toUpperCase() + ' was dropped';
else if (o instanceof HTMLDivElement)
control.value = o.style.backgroundImage;
}
});
// Let's grab and drag the object (image):
ui.makeDraggable(image, {
getDragObject: () => image,
getDragCaption: () => 'You are dragging Heinlein!'
});
ui.dialog()
.add(control)
.add(grid)
.add(image)
.show();