mirror of
https://github.com/mathuo/dockview
synced 2025-10-03 14:38:10 +00:00
temp
This commit is contained in:
parent
26f2908b39
commit
a637ca714b
@ -1,14 +1,15 @@
|
|||||||
|
import { MutableDisposable } from '..';
|
||||||
import { getElementsByTagName } from '../dom';
|
import { getElementsByTagName } from '../dom';
|
||||||
import { addDisposableListener, Emitter } from '../events';
|
import { addDisposableListener, Emitter } from '../events';
|
||||||
import { CompositeDisposable, IDisposable } from '../lifecycle';
|
import { CompositeDisposable, IDisposable } from '../lifecycle';
|
||||||
|
|
||||||
export abstract class DragHandler extends CompositeDisposable {
|
export abstract class DragHandler extends CompositeDisposable {
|
||||||
private iframes: HTMLElement[] = [];
|
private readonly disposable = new MutableDisposable();
|
||||||
|
|
||||||
private readonly _onDragStart = new Emitter<void>();
|
private readonly _onDragStart = new Emitter<void>();
|
||||||
readonly onDragStart = this._onDragStart.event;
|
readonly onDragStart = this._onDragStart.event;
|
||||||
|
|
||||||
private disposable: IDisposable | undefined;
|
private iframes: HTMLElement[] = [];
|
||||||
|
|
||||||
constructor(private readonly el: HTMLElement) {
|
constructor(private readonly el: HTMLElement) {
|
||||||
super();
|
super();
|
||||||
@ -32,8 +33,11 @@ export abstract class DragHandler extends CompositeDisposable {
|
|||||||
this.el.classList.add('dragged');
|
this.el.classList.add('dragged');
|
||||||
setTimeout(() => this.el.classList.remove('dragged'), 0);
|
setTimeout(() => this.el.classList.remove('dragged'), 0);
|
||||||
|
|
||||||
this.disposable?.dispose();
|
this.disposable.value = this.getData();
|
||||||
this.disposable = this.getData();
|
|
||||||
|
if (event.dataTransfer) {
|
||||||
|
event.dataTransfer.effectAllowed = 'move';
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
addDisposableListener(this.el, 'dragend', (ev) => {
|
addDisposableListener(this.el, 'dragend', (ev) => {
|
||||||
for (const iframe of this.iframes) {
|
for (const iframe of this.iframes) {
|
||||||
@ -41,8 +45,7 @@ export abstract class DragHandler extends CompositeDisposable {
|
|||||||
}
|
}
|
||||||
this.iframes = [];
|
this.iframes = [];
|
||||||
|
|
||||||
this.disposable?.dispose();
|
this.disposable.dispose();
|
||||||
this.disposable = undefined;
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
import { addDisposableListener, Emitter, Event } from '../events';
|
import { addDisposableListener, Emitter, Event } from '../events';
|
||||||
import { CompositeDisposable } from '../lifecycle';
|
import { CompositeDisposable, IDisposable } from '../lifecycle';
|
||||||
import {
|
import {
|
||||||
getPanelData,
|
getPanelData,
|
||||||
LocalSelectionTransfer,
|
LocalSelectionTransfer,
|
||||||
PanelTransfer,
|
PanelTransfer,
|
||||||
} from '../dnd/dataTransfer';
|
} from '../dnd/dataTransfer';
|
||||||
import { getElementsByTagName, toggleClass } from '../dom';
|
import { toggleClass } from '../dom';
|
||||||
import { IDockviewComponent } from '../dockview/dockviewComponent';
|
import { IDockviewComponent } from '../dockview/dockviewComponent';
|
||||||
import { ITabRenderer } from './types';
|
import { ITabRenderer } from './types';
|
||||||
import { IGroupPanel } from './groupPanel';
|
import { IGroupPanel } from './groupPanel';
|
||||||
import { GroupviewPanel } from './groupviewPanel';
|
import { GroupviewPanel } from './groupviewPanel';
|
||||||
import { DroptargetEvent, Droptarget } from '../dnd/droptarget';
|
import { DroptargetEvent, Droptarget } from '../dnd/droptarget';
|
||||||
import { DockviewDropTargets } from './dnd';
|
import { DockviewDropTargets } from './dnd';
|
||||||
|
import { DragHandler } from '../dnd/abstractDragHandler';
|
||||||
|
|
||||||
export enum MouseEventKind {
|
export enum MouseEventKind {
|
||||||
CLICK = 'CLICK',
|
CLICK = 'CLICK',
|
||||||
@ -19,15 +20,15 @@ export enum MouseEventKind {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface LayoutMouseEvent {
|
export interface LayoutMouseEvent {
|
||||||
kind: MouseEventKind;
|
readonly kind: MouseEventKind;
|
||||||
event: MouseEvent;
|
readonly event: MouseEvent;
|
||||||
panel?: IGroupPanel;
|
readonly panel?: IGroupPanel;
|
||||||
tab?: boolean;
|
readonly tab?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ITab {
|
export interface ITab {
|
||||||
panelId: string;
|
readonly panelId: string;
|
||||||
element: HTMLElement;
|
readonly element: HTMLElement;
|
||||||
setContent: (element: ITabRenderer) => void;
|
setContent: (element: ITabRenderer) => void;
|
||||||
onChanged: Event<LayoutMouseEvent>;
|
onChanged: Event<LayoutMouseEvent>;
|
||||||
onDrop: Event<DroptargetEvent>;
|
onDrop: Event<DroptargetEvent>;
|
||||||
@ -35,8 +36,8 @@ export interface ITab {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class Tab extends CompositeDisposable implements ITab {
|
export class Tab extends CompositeDisposable implements ITab {
|
||||||
private _element: HTMLElement;
|
private readonly _element: HTMLElement;
|
||||||
private droptarget: Droptarget;
|
private readonly droptarget: Droptarget;
|
||||||
private content?: ITabRenderer;
|
private content?: ITabRenderer;
|
||||||
|
|
||||||
private readonly _onChanged = new Emitter<LayoutMouseEvent>();
|
private readonly _onChanged = new Emitter<LayoutMouseEvent>();
|
||||||
@ -45,19 +46,14 @@ export class Tab extends CompositeDisposable implements ITab {
|
|||||||
private readonly _onDropped = new Emitter<DroptargetEvent>();
|
private readonly _onDropped = new Emitter<DroptargetEvent>();
|
||||||
readonly onDrop: Event<DroptargetEvent> = this._onDropped.event;
|
readonly onDrop: Event<DroptargetEvent> = this._onDropped.event;
|
||||||
|
|
||||||
private readonly panelTransfer =
|
|
||||||
LocalSelectionTransfer.getInstance<PanelTransfer>();
|
|
||||||
|
|
||||||
public get element() {
|
public get element() {
|
||||||
return this._element;
|
return this._element;
|
||||||
}
|
}
|
||||||
|
|
||||||
private iframes: HTMLElement[] = [];
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public panelId: string,
|
public readonly panelId: string,
|
||||||
private readonly accessor: IDockviewComponent,
|
accessor: IDockviewComponent,
|
||||||
private group: GroupviewPanel
|
private readonly group: GroupviewPanel
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
@ -69,42 +65,32 @@ export class Tab extends CompositeDisposable implements ITab {
|
|||||||
this._element.draggable = true;
|
this._element.draggable = true;
|
||||||
|
|
||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
addDisposableListener(this._element, 'dragstart', (event) => {
|
new (class Handler extends DragHandler {
|
||||||
this.iframes = [
|
private readonly panelTransfer =
|
||||||
...getElementsByTagName('iframe'),
|
LocalSelectionTransfer.getInstance<PanelTransfer>();
|
||||||
...getElementsByTagName('webview'),
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const iframe of this.iframes) {
|
|
||||||
iframe.style.pointerEvents = 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
this.element.classList.add('dragged');
|
|
||||||
setTimeout(() => this.element.classList.remove('dragged'), 0);
|
|
||||||
|
|
||||||
|
getData(): IDisposable {
|
||||||
this.panelTransfer.setData(
|
this.panelTransfer.setData(
|
||||||
[
|
[new PanelTransfer(accessor.id, group.id, panelId)],
|
||||||
new PanelTransfer(
|
|
||||||
this.accessor.id,
|
|
||||||
this.group.id,
|
|
||||||
this.panelId
|
|
||||||
),
|
|
||||||
],
|
|
||||||
PanelTransfer.prototype
|
PanelTransfer.prototype
|
||||||
);
|
);
|
||||||
|
|
||||||
if (event.dataTransfer) {
|
return {
|
||||||
event.dataTransfer.effectAllowed = 'move';
|
dispose: () => {
|
||||||
|
this.panelTransfer.clearData(
|
||||||
|
PanelTransfer.prototype
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}),
|
|
||||||
addDisposableListener(this._element, 'dragend', (ev) => {
|
|
||||||
for (const iframe of this.iframes) {
|
|
||||||
iframe.style.pointerEvents = 'auto';
|
|
||||||
}
|
|
||||||
this.iframes = [];
|
|
||||||
|
|
||||||
this.panelTransfer.clearData(PanelTransfer.prototype);
|
public dispose(): void {
|
||||||
}),
|
//
|
||||||
|
}
|
||||||
|
})(this._element)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.addDisposables(
|
||||||
addDisposableListener(this._element, 'mousedown', (event) => {
|
addDisposableListener(this._element, 'mousedown', (event) => {
|
||||||
if (event.defaultPrevented) {
|
if (event.defaultPrevented) {
|
||||||
return;
|
return;
|
||||||
|
@ -48,6 +48,7 @@ export class MutableDisposable implements IDisposable {
|
|||||||
public dispose() {
|
public dispose() {
|
||||||
if (this._disposable) {
|
if (this._disposable) {
|
||||||
this._disposable.dispose();
|
this._disposable.dispose();
|
||||||
|
this._disposable = Disposable.NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user