dock-spawn-ts 3.11.2 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/es5/dock-spawn-ts.js +1 -1
- package/lib/js/Dialog.d.ts +7 -11
- package/lib/js/Dialog.js +8 -49
- package/lib/js/Dialog.js.map +1 -1
- package/lib/js/PanelContainer.d.ts +12 -9
- package/lib/js/PanelContainer.js +12 -6
- package/lib/js/PanelContainer.js.map +1 -1
- package/lib/js/index-min.js +3 -3
- package/lib/js/index-webcomponent-min.js +2 -2
- package/lib/js/index.d.ts +1 -0
- package/lib/js/index.js +1 -0
- package/lib/js/index.js.map +1 -1
- package/lib/js/interfaces/IContextMenuProvider.d.ts +3 -0
- package/lib/js/interfaces/IContextMenuProvider.js +2 -0
- package/lib/js/interfaces/IContextMenuProvider.js.map +1 -0
- package/package.json +1 -1
- package/src/Dialog.ts +14 -58
- package/src/PanelContainer.ts +22 -14
- package/src/index.ts +1 -0
- package/src/interfaces/IContextMenuProvider.ts +3 -0
package/src/Dialog.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { DockManager } from "./DockManager.js";
|
|
2
|
-
import {
|
|
3
|
-
import { PanelContainer } from "./PanelContainer.js";
|
|
2
|
+
import { DockNode } from "./DockNode.js";
|
|
4
3
|
import { DraggableContainer } from "./DraggableContainer.js";
|
|
5
|
-
import { ResizableContainer } from "./ResizableContainer.js";
|
|
6
4
|
import { EventHandler } from "./EventHandler.js";
|
|
5
|
+
import { PanelContainer } from "./PanelContainer.js";
|
|
6
|
+
import { Point } from "./Point.js";
|
|
7
|
+
import { ResizableContainer } from "./ResizableContainer.js";
|
|
7
8
|
import { Utils } from "./Utils.js";
|
|
8
9
|
import { Localizer } from "./i18n/Localizer.js";
|
|
9
|
-
import {
|
|
10
|
+
import { IContextMenuProvider } from "./interfaces/IContextMenuProvider.js";
|
|
10
11
|
|
|
11
|
-
export class Dialog {
|
|
12
|
+
export class Dialog implements IContextMenuProvider {
|
|
12
13
|
elementDialog: HTMLDivElement & { floatingDialog: Dialog };
|
|
13
14
|
draggable: DraggableContainer;
|
|
14
15
|
panel: PanelContainer;
|
|
@@ -24,9 +25,6 @@ export class Dialog {
|
|
|
24
25
|
keyPressHandler: EventHandler;
|
|
25
26
|
focusHandler: EventHandler;
|
|
26
27
|
grayoutParent: PanelContainer;
|
|
27
|
-
contextmenuHandler: EventHandler;
|
|
28
|
-
_ctxMenu: HTMLDivElement;
|
|
29
|
-
_windowsContextMenuCloseBound: any;
|
|
30
28
|
|
|
31
29
|
constructor(panel: PanelContainer, dockManager: DockManager, grayoutParent?: PanelContainer, disableResize?: boolean) {
|
|
32
30
|
this.panel = panel;
|
|
@@ -64,7 +62,6 @@ export class Dialog {
|
|
|
64
62
|
this.focusHandler = new EventHandler(this.elementDialog, 'focus', this.onFocus.bind(this), true);
|
|
65
63
|
this.mouseDownHandler = new EventHandler(this.elementDialog, 'pointerdown', this.onMouseDown.bind(this), true);
|
|
66
64
|
this.keyPressHandler = new EventHandler(this.elementDialog, 'keypress', this.dockManager.onKeyPressBound, true);
|
|
67
|
-
this.contextmenuHandler = new EventHandler(this.panel.elementTitle, 'contextmenu', this.oncontextMenuClicked.bind(this));
|
|
68
65
|
|
|
69
66
|
this.resize(this.panel.elementPanel.clientWidth, this.panel.elementPanel.clientHeight);
|
|
70
67
|
this.isHidden = false;
|
|
@@ -113,15 +110,12 @@ export class Dialog {
|
|
|
113
110
|
this.keyPressHandler.cancel();
|
|
114
111
|
delete this.keyPressHandler;
|
|
115
112
|
}
|
|
116
|
-
|
|
117
|
-
this.contextmenuHandler.cancel();
|
|
118
|
-
delete this.contextmenuHandler;
|
|
119
|
-
}
|
|
113
|
+
|
|
120
114
|
Utils.removeNode(this.elementDialog);
|
|
121
115
|
this.draggable.removeDecorator();
|
|
122
116
|
Utils.removeNode(this.panel.elementPanel);
|
|
123
117
|
Utils.arrayRemove(this.dockManager.context.model.dialogs, this);
|
|
124
|
-
|
|
118
|
+
this.panel.floatingDialog = undefined;
|
|
125
119
|
|
|
126
120
|
if (this.grayoutParent) {
|
|
127
121
|
this.grayoutParent.grayOut(false);
|
|
@@ -192,8 +186,8 @@ export class Dialog {
|
|
|
192
186
|
result.push(btnCloseDialog);
|
|
193
187
|
|
|
194
188
|
btnCloseDialog.onclick = () => {
|
|
189
|
+
dialog.panel.closeContextMenu();
|
|
195
190
|
dialog.panel.close();
|
|
196
|
-
dialog.closeContextMenu();
|
|
197
191
|
};
|
|
198
192
|
|
|
199
193
|
if (dialog.dockManager.config.enableBrowserWindows) {
|
|
@@ -202,55 +196,17 @@ export class Dialog {
|
|
|
202
196
|
result.push(btnNewBrowserWindow);
|
|
203
197
|
|
|
204
198
|
btnNewBrowserWindow.onclick = () => {
|
|
199
|
+
dialog.panel.closeContextMenu();
|
|
205
200
|
dialog.panel.undockToBrowserDialog();
|
|
206
|
-
dialog.closeContextMenu();
|
|
207
201
|
};
|
|
208
202
|
}
|
|
209
203
|
|
|
210
204
|
return result;
|
|
211
205
|
}
|
|
212
206
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
const menuItems = Dialog.createContextMenuContentCallback(
|
|
218
|
-
this,
|
|
219
|
-
this.dockManager.context.model.documentManagerNode.children
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
if (menuItems.length == 0) {
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
this._ctxMenu = document.createElement('div');
|
|
227
|
-
this._ctxMenu.className = 'dockspab-tab-handle-context-menu';
|
|
228
|
-
this._ctxMenu.append(...menuItems);
|
|
229
|
-
this._ctxMenu.style.left = e.pageX + "px";
|
|
230
|
-
this._ctxMenu.style.top = e.pageY + "px";
|
|
231
|
-
document.body.appendChild(this._ctxMenu);
|
|
232
|
-
this._windowsContextMenuCloseBound = this.windowsContextMenuClose.bind(this)
|
|
233
|
-
window.addEventListener('pointerup', this._windowsContextMenuCloseBound);
|
|
234
|
-
} else {
|
|
235
|
-
this.closeContextMenu();
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
closeContextMenu() {
|
|
240
|
-
if (this._ctxMenu) {
|
|
241
|
-
document.body.removeChild(this._ctxMenu);
|
|
242
|
-
delete this._ctxMenu;
|
|
243
|
-
window.removeEventListener('pointerup', this._windowsContextMenuCloseBound);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
windowsContextMenuClose(e: Event) {
|
|
248
|
-
let cp = e.composedPath();
|
|
249
|
-
for (let i in cp) {
|
|
250
|
-
let el = cp[i];
|
|
251
|
-
if (el == this._ctxMenu)
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
this.closeContextMenu();
|
|
207
|
+
public createContextMenuItems(): Node[] {
|
|
208
|
+
return Dialog.createContextMenuContentCallback(
|
|
209
|
+
this,
|
|
210
|
+
this.dockManager.context.model.documentManagerNode.children);
|
|
255
211
|
}
|
|
256
212
|
}
|
package/src/PanelContainer.ts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Utils } from "./Utils.js";
|
|
3
|
-
import { UndockInitiator } from "./UndockInitiator.js";
|
|
1
|
+
import { moveElementToNewBrowserWindow } from "./BrowserDialogHelper.js";
|
|
4
2
|
import { ContainerType } from "./ContainerType.js";
|
|
3
|
+
import { Dialog } from "./Dialog.js";
|
|
4
|
+
import { DockManager } from "./DockManager.js";
|
|
5
5
|
import { EventHandler } from "./EventHandler.js";
|
|
6
|
-
import { ISize } from "./interfaces/ISize.js";
|
|
7
|
-
import { IDockContainerWithSize } from "./interfaces/IDockContainerWithSize.js";
|
|
8
|
-
import { IState } from "./interfaces/IState.js";
|
|
9
6
|
import { Point } from "./Point.js";
|
|
10
|
-
import { IDockContainer } from "./interfaces/IDockContainer.js";
|
|
11
|
-
import { PanelType } from "./enums/PanelType.js";
|
|
12
|
-
import { Dialog } from "./Dialog.js";
|
|
13
7
|
import { TabPage } from './TabPage.js';
|
|
8
|
+
import { UndockInitiator } from "./UndockInitiator.js";
|
|
9
|
+
import { Utils } from "./Utils.js";
|
|
10
|
+
import { PanelType } from "./enums/PanelType.js";
|
|
14
11
|
import { Localizer } from "./i18n/Localizer.js";
|
|
15
|
-
import {
|
|
12
|
+
import { IContextMenuProvider } from "./interfaces/IContextMenuProvider.js";
|
|
13
|
+
import { IDockContainer } from "./interfaces/IDockContainer.js";
|
|
14
|
+
import { IDockContainerWithSize } from "./interfaces/IDockContainerWithSize.js";
|
|
15
|
+
import { ISize } from "./interfaces/ISize.js";
|
|
16
|
+
import { IState } from "./interfaces/IState.js";
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* This dock container wraps the specified element on a panel frame with a title bar and close button
|
|
19
20
|
*/
|
|
20
|
-
export class PanelContainer implements IDockContainerWithSize {
|
|
21
|
+
export class PanelContainer implements IDockContainerWithSize, IContextMenuProvider {
|
|
21
22
|
|
|
22
23
|
public closePanelContainerCallback: (panelContainer: PanelContainer) => Promise<boolean>;
|
|
23
24
|
|
|
@@ -60,6 +61,7 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
60
61
|
_hideCloseButton: boolean;
|
|
61
62
|
_grayOut: HTMLDivElement;
|
|
62
63
|
_ctxMenu: HTMLDivElement;
|
|
64
|
+
private _contextMenuProvider: IContextMenuProvider;
|
|
63
65
|
|
|
64
66
|
constructor(elementContent: HTMLElement, dockManager: DockManager, title?: string, panelType?: PanelType, hideCloseButton?: boolean) {
|
|
65
67
|
if (!title)
|
|
@@ -104,6 +106,7 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
104
106
|
this._canUndock = dockManager._undockEnabled;
|
|
105
107
|
this.eventListeners = [];
|
|
106
108
|
this._hideCloseButton = hideCloseButton;
|
|
109
|
+
this._contextMenuProvider = this;
|
|
107
110
|
this.windowsContextMenuClose = this.windowsContextMenuClose.bind(this);
|
|
108
111
|
|
|
109
112
|
this._initialize();
|
|
@@ -162,7 +165,7 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
162
165
|
this._updateTitle();
|
|
163
166
|
|
|
164
167
|
this.undockInitiator = new UndockInitiator(this.elementTitle, this.performUndockToDialog.bind(this));
|
|
165
|
-
|
|
168
|
+
this.floatingDialog = undefined;
|
|
166
169
|
|
|
167
170
|
this.mouseDownHandler = new EventHandler(this.elementPanel, 'mousedown', this.onMouseDown.bind(this));
|
|
168
171
|
this.touchDownHandler = new EventHandler(this.elementPanel, 'touchstart', this.onMouseDown.bind(this), { passive: true });
|
|
@@ -190,11 +193,15 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
190
193
|
return result;
|
|
191
194
|
}
|
|
192
195
|
|
|
196
|
+
public createContextMenuItems(): Node[] {
|
|
197
|
+
return PanelContainer.createContextMenuContentCallback(this);
|
|
198
|
+
}
|
|
199
|
+
|
|
193
200
|
oncontextMenuClicked(e: MouseEvent) {
|
|
194
201
|
e.preventDefault();
|
|
195
202
|
|
|
196
|
-
if (!this._ctxMenu
|
|
197
|
-
const menuItems =
|
|
203
|
+
if (!this._ctxMenu) {
|
|
204
|
+
const menuItems = this._contextMenuProvider.createContextMenuItems();
|
|
198
205
|
|
|
199
206
|
if (menuItems.length == 0) {
|
|
200
207
|
return;
|
|
@@ -255,6 +262,7 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
255
262
|
this._floatingDialog = value;
|
|
256
263
|
let canUndock = (this._floatingDialog === undefined);
|
|
257
264
|
this.undockInitiator.enabled = canUndock;
|
|
265
|
+
this._contextMenuProvider = value ?? this;
|
|
258
266
|
}
|
|
259
267
|
|
|
260
268
|
static async loadFromState(state: IState, dockManager: DockManager) {
|
package/src/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './enums/TabHostDirection.js';
|
|
|
3
3
|
export * from './enums/WheelTypes.js';
|
|
4
4
|
export * from './i18n/Defaults.js';
|
|
5
5
|
export * from './i18n/Localizer.js';
|
|
6
|
+
export * from './interfaces/IContextMenuProvider.js';
|
|
6
7
|
export * from './interfaces/IDockContainer.js';
|
|
7
8
|
export * from './interfaces/IDockContainerWithSize.js';
|
|
8
9
|
export * from './interfaces/ILayoutEventListener.js';
|