dockview-core
Version:
Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript
88 lines (87 loc) • 4.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RootDropTargetModule = exports.RootDropTargetService = void 0;
var events_1 = require("../events");
var backend_1 = require("../dnd/backend");
var dataTransfer_1 = require("../dnd/dataTransfer");
var modules_1 = require("./modules");
var DEFAULT_ROOT_OVERLAY_MODEL = {
activationSize: { type: 'pixels', value: 10 },
size: { type: 'pixels', value: 20 },
};
var RootDropTargetService = /** @class */ (function () {
function RootDropTargetService(host) {
var canDisplayOverlay = function (event, position) {
var data = (0, dataTransfer_1.getPanelData)();
if (data) {
if (data.viewId !== host.id) {
return false;
}
if (position === 'center') {
// center drop target only allowed if no panels in primary
// grid; floating panels are allowed
return host.isGridEmpty();
}
return true;
}
if (position === 'center' && !host.isGridEmpty()) {
// for external events only show the four-corner drag overlays,
// disable center so external drag events can fall through to
// the group and panel drop target handlers
return false;
}
return host.dispatchUnhandledDragOver(event, position);
};
var overlayModel = typeof host.options.dndEdges === 'object' &&
host.options.dndEdges !== null
? host.options.dndEdges
: DEFAULT_ROOT_OVERLAY_MODEL;
this._html5Target = backend_1.html5Backend.createDropTarget(host.element, {
className: 'dv-drop-target-edge',
canDisplayOverlay: canDisplayOverlay,
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
overlayModel: overlayModel,
getOverrideTarget: function () { return host.rootDropTargetOverrideTarget(); },
});
this._pointerTarget = backend_1.pointerBackend.createDropTarget(host.element, {
className: 'dv-drop-target-edge',
canDisplayOverlay: canDisplayOverlay,
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
overlayModel: overlayModel,
getOverrideTarget: function () { return host.rootDropTargetOverrideTarget(); },
});
this.onWillShowOverlay = events_1.Event.any(this._html5Target.onWillShowOverlay, this._pointerTarget.onWillShowOverlay);
this.onDrop = events_1.Event.any(this._html5Target.onDrop, this._pointerTarget.onDrop);
// Apply initial-state options now that the targets exist; setOptions
// handles dndEdges (disable + overlay model) and late changes.
this.setOptions(host.options);
}
RootDropTargetService.prototype.setOptions = function (options) {
if ('dndEdges' in options) {
var disabled = typeof options.dndEdges === 'boolean' &&
options.dndEdges === false;
this._html5Target.disabled = disabled;
this._pointerTarget.disabled = disabled;
if (typeof options.dndEdges === 'object' &&
options.dndEdges !== null) {
this._html5Target.setOverlayModel(options.dndEdges);
this._pointerTarget.setOverlayModel(options.dndEdges);
}
else {
this._html5Target.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL);
this._pointerTarget.setOverlayModel(DEFAULT_ROOT_OVERLAY_MODEL);
}
}
};
RootDropTargetService.prototype.dispose = function () {
this._html5Target.dispose();
this._pointerTarget.dispose();
};
return RootDropTargetService;
}());
exports.RootDropTargetService = RootDropTargetService;
exports.RootDropTargetModule = (0, modules_1.defineModule)({
name: 'RootDropTarget',
serviceKey: 'rootDropTargetService',
create: function (host) { return new RootDropTargetService(host); },
});