dock-spawn-ts 2.402.0 → 2.500.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/css/dock-manager-style.css +6 -1
- package/lib/es5/dock-spawn-ts.js +1 -1
- package/lib/js/Dialog.d.ts +1 -0
- package/lib/js/Dialog.js +12 -2
- package/lib/js/Dialog.js.map +1 -1
- package/lib/js/DockManager.js +12 -0
- package/lib/js/DockManager.js.map +1 -1
- package/lib/js/DraggableContainer.d.ts +3 -2
- package/lib/js/DraggableContainer.js +9 -6
- package/lib/js/DraggableContainer.js.map +1 -1
- package/lib/js/PanelContainer.d.ts +3 -0
- package/lib/js/PanelContainer.js +39 -8
- package/lib/js/PanelContainer.js.map +1 -1
- package/lib/js/ResizableContainer.js +6 -6
- package/lib/js/ResizableContainer.js.map +1 -1
- package/lib/js/TabPage.js +2 -0
- package/lib/js/TabPage.js.map +1 -1
- package/package.json +10 -10
- package/src/Dialog.ts +14 -3
- package/src/DockManager.ts +13 -0
- package/src/DraggableContainer.ts +13 -8
- package/src/PanelContainer.ts +46 -9
- package/src/ResizableContainer.ts +6 -6
- package/src/TabPage.ts +2 -0
package/lib/js/TabPage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabPage.js","sourceRoot":"","sources":["../../src/TabPage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TabPage.js","sourceRoot":"","sources":["../../src/TabPage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dock-spawn-ts",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.500.0",
|
|
4
4
|
"description": "DockSpawn Typescript Version",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "jochen.kuehner@gmx.de",
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
"start": "http-server"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@babel/cli": "^7.
|
|
14
|
-
"@babel/core": "^7.
|
|
15
|
-
"@babel/preset-env": "^7.
|
|
16
|
-
"@types/node": "^
|
|
17
|
-
"http-server": "^14.1.
|
|
18
|
-
"typescript": "^4.
|
|
19
|
-
"uglify-js": "^3.
|
|
20
|
-
"webpack": "^5.
|
|
21
|
-
"webpack-cli": "^4.
|
|
13
|
+
"@babel/cli": "^7.19.3",
|
|
14
|
+
"@babel/core": "^7.19.3",
|
|
15
|
+
"@babel/preset-env": "^7.19.4",
|
|
16
|
+
"@types/node": "^18.8.4",
|
|
17
|
+
"http-server": "^14.1.1",
|
|
18
|
+
"typescript": "^4.8.4",
|
|
19
|
+
"uglify-js": "^3.17.3",
|
|
20
|
+
"webpack": "^5.74.0",
|
|
21
|
+
"webpack-cli": "^4.10.0"
|
|
22
22
|
},
|
|
23
23
|
"main": "/lib/js/Exports.js",
|
|
24
24
|
"files": [
|
package/src/Dialog.ts
CHANGED
|
@@ -73,6 +73,7 @@ export class Dialog {
|
|
|
73
73
|
this.position = new Point(x - rect.left, y - rect.top);
|
|
74
74
|
this.elementDialog.style.left = (x - rect.left) + 'px';
|
|
75
75
|
this.elementDialog.style.top = (y - rect.top) + 'px';
|
|
76
|
+
this.panel.setDialogPosition(x, y);
|
|
76
77
|
this.dockManager.notifyOnChangeDialogPosition(this, x, y);
|
|
77
78
|
}
|
|
78
79
|
|
|
@@ -91,7 +92,7 @@ export class Dialog {
|
|
|
91
92
|
|
|
92
93
|
destroy() {
|
|
93
94
|
this.panel.lastDialogSize = { width: this.resizable.width, height: this.resizable.height };
|
|
94
|
-
|
|
95
|
+
|
|
95
96
|
if (this.focusHandler) {
|
|
96
97
|
this.focusHandler.cancel();
|
|
97
98
|
delete this.focusHandler;
|
|
@@ -132,12 +133,15 @@ export class Dialog {
|
|
|
132
133
|
}
|
|
133
134
|
|
|
134
135
|
bringToFront() {
|
|
135
|
-
this.
|
|
136
|
+
this._increaseZIndex();
|
|
137
|
+
this.elementDialog.style.zIndex = <any>this.dockManager.zIndexDialogCounter;
|
|
138
|
+
this.panel.elementContentContainer.style.zIndex = (parseInt(this.elementDialog.style.zIndex) + 1).toString();
|
|
136
139
|
this.dockManager.activePanel = this.panel;
|
|
137
140
|
}
|
|
138
141
|
|
|
139
142
|
hide() {
|
|
140
143
|
this.elementDialog.style.zIndex = '0';
|
|
144
|
+
this.panel.elementContentContainer.style.zIndex = this.elementDialog.style.zIndex;
|
|
141
145
|
this.elementDialog.style.display = 'none';
|
|
142
146
|
if (!this.isHidden) {
|
|
143
147
|
this.isHidden = true;
|
|
@@ -160,11 +164,18 @@ export class Dialog {
|
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
show() {
|
|
163
|
-
this.
|
|
167
|
+
this._increaseZIndex();
|
|
168
|
+
this.elementDialog.style.zIndex = <any>this.dockManager.zIndexDialogCounter;
|
|
169
|
+
this.panel.elementContentContainer.style.zIndex = (parseInt(this.elementDialog.style.zIndex) + 1).toString();
|
|
164
170
|
this.elementDialog.style.display = 'block';
|
|
165
171
|
if (this.isHidden) {
|
|
166
172
|
this.isHidden = false;
|
|
167
173
|
this.dockManager.notifyOnShowDialog(this);
|
|
168
174
|
}
|
|
169
175
|
}
|
|
176
|
+
|
|
177
|
+
private _increaseZIndex(){
|
|
178
|
+
// Increase by two, so the content can lay on top of the dialog
|
|
179
|
+
this.dockManager.zIndexDialogCounter += 2;
|
|
180
|
+
}
|
|
170
181
|
}
|
package/src/DockManager.ts
CHANGED
|
@@ -201,6 +201,17 @@ export class DockManager {
|
|
|
201
201
|
this.element.style.width = width + 'px';
|
|
202
202
|
this.element.style.height = height + 'px';
|
|
203
203
|
this.context.model.rootNode.container.resize(width, height);
|
|
204
|
+
|
|
205
|
+
let offsetX = 0, offsetY = 0;
|
|
206
|
+
for (let dialog of this.context.model.dialogs){
|
|
207
|
+
if(dialog.position.x > this.element.clientWidth || dialog.position.y > this.element.clientHeight){
|
|
208
|
+
if(offsetX > this.element.clientWidth || offsetY > this.element.clientHeight)
|
|
209
|
+
offsetX = 0, offsetY = 0;
|
|
210
|
+
dialog.setPosition(100 + offsetX, 100 + offsetY);
|
|
211
|
+
offsetX += 100;
|
|
212
|
+
offsetY += 100;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
204
215
|
}
|
|
205
216
|
|
|
206
217
|
/**
|
|
@@ -388,6 +399,7 @@ export class DockManager {
|
|
|
388
399
|
let panel = dialog.panel;
|
|
389
400
|
let newNode = new DockNode(panel);
|
|
390
401
|
panel.prepareForDocking();
|
|
402
|
+
panel.elementContentContainer.style.zIndex = '';
|
|
391
403
|
dialog.destroy();
|
|
392
404
|
layoutDockFunction(referenceNode, newNode);
|
|
393
405
|
// this.invalidate();
|
|
@@ -612,6 +624,7 @@ export class DockManager {
|
|
|
612
624
|
this.layoutEventListeners.forEach((listener) => {
|
|
613
625
|
if (listener.onDock) {
|
|
614
626
|
listener.onDock(this, dockNode);
|
|
627
|
+
dockNode.container.resize(dockNode.container.width, dockNode.container.height);
|
|
615
628
|
}
|
|
616
629
|
});
|
|
617
630
|
}
|
|
@@ -7,11 +7,12 @@ import { IDockContainer } from "./interfaces/IDockContainer.js";
|
|
|
7
7
|
import { ContainerType } from "./ContainerType.js";
|
|
8
8
|
import { IState } from "./interfaces/IState.js";
|
|
9
9
|
import { DockWheelItem } from "./DockWheelItem.js";
|
|
10
|
+
import { PanelContainer } from "./PanelContainer.js";
|
|
10
11
|
|
|
11
12
|
export class DraggableContainer implements IDockContainer {
|
|
12
13
|
|
|
13
14
|
dialog: Dialog;
|
|
14
|
-
delegate:
|
|
15
|
+
delegate: PanelContainer;
|
|
15
16
|
containerElement: HTMLElement;
|
|
16
17
|
dockManager: DockManager;
|
|
17
18
|
topLevelElement: HTMLElement;
|
|
@@ -26,7 +27,7 @@ export class DraggableContainer implements IDockContainer {
|
|
|
26
27
|
touchUpHandler: EventHandler;
|
|
27
28
|
private iframeEventHandlers: EventHandler[];
|
|
28
29
|
|
|
29
|
-
constructor(dialog: Dialog, delegate:
|
|
30
|
+
constructor(dialog: Dialog, delegate: PanelContainer, topLevelElement: HTMLElement, dragHandle: HTMLElement) {
|
|
30
31
|
this.dialog = dialog;
|
|
31
32
|
this.delegate = delegate;
|
|
32
33
|
this.containerElement = delegate.containerElement;
|
|
@@ -35,8 +36,8 @@ export class DraggableContainer implements IDockContainer {
|
|
|
35
36
|
this.containerType = delegate.containerType;
|
|
36
37
|
this.mouseDownHandler = new EventHandler(dragHandle, 'mousedown', this.onMouseDown.bind(this));
|
|
37
38
|
this.touchDownHandler = new EventHandler(dragHandle, 'touchstart', this.onMouseDown.bind(this));
|
|
38
|
-
this.topLevelElement.style.
|
|
39
|
-
this.topLevelElement.style.
|
|
39
|
+
this.topLevelElement.style.left = topLevelElement.offsetLeft + 'px';
|
|
40
|
+
this.topLevelElement.style.top = topLevelElement.offsetTop + 'px';
|
|
40
41
|
this.minimumAllowedChildNodes = delegate.minimumAllowedChildNodes;
|
|
41
42
|
this.iframeEventHandlers = [];
|
|
42
43
|
}
|
|
@@ -158,6 +159,7 @@ export class DraggableContainer implements IDockContainer {
|
|
|
158
159
|
|
|
159
160
|
_startDragging(event: { clientX: number, clientY: number }) {
|
|
160
161
|
this.containerElement.classList.add("draggable-dragging-active");
|
|
162
|
+
this.delegate.elementContentContainer.classList.add("draggable-dragging-active");
|
|
161
163
|
if (this.dialog.eventListener)
|
|
162
164
|
this.dialog.eventListener._onDialogDragStarted(this.dialog, event);
|
|
163
165
|
Utils.disableGlobalTextSelection(this.dockManager.config.dialogRootElement);
|
|
@@ -165,6 +167,7 @@ export class DraggableContainer implements IDockContainer {
|
|
|
165
167
|
|
|
166
168
|
_stopDragging(event) {
|
|
167
169
|
this.containerElement.classList.remove("draggable-dragging-active");
|
|
170
|
+
this.delegate.elementContentContainer.classList.remove("draggable-dragging-active");
|
|
168
171
|
if (this.dialog.eventListener)
|
|
169
172
|
this.dialog.eventListener._onDialogDragEnded(this.dialog, event);
|
|
170
173
|
Utils.enableGlobalTextSelection(this.dockManager.config.dialogRootElement);
|
|
@@ -219,9 +222,11 @@ export class DraggableContainer implements IDockContainer {
|
|
|
219
222
|
}
|
|
220
223
|
|
|
221
224
|
_performDrag(dx: number, dy: number) {
|
|
222
|
-
let left = dx + Utils.getPixels(this.topLevelElement.style.
|
|
223
|
-
let top = dy + Utils.getPixels(this.topLevelElement.style.
|
|
224
|
-
this.topLevelElement.style.
|
|
225
|
-
this.topLevelElement.style.
|
|
225
|
+
let left = dx + Utils.getPixels(this.topLevelElement.style.left);
|
|
226
|
+
let top = dy + Utils.getPixels(this.topLevelElement.style.top);
|
|
227
|
+
this.topLevelElement.style.left = left + 'px';
|
|
228
|
+
this.topLevelElement.style.top = top + 'px';
|
|
229
|
+
|
|
230
|
+
this.dialog.panel.setDialogPosition(left,top);
|
|
226
231
|
}
|
|
227
232
|
}
|
package/src/PanelContainer.ts
CHANGED
|
@@ -27,6 +27,7 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
27
27
|
name: string;
|
|
28
28
|
state: ISize;
|
|
29
29
|
elementContent: HTMLElement & { resizeHandler?: any, _dockSpawnPanelContainer: PanelContainer };
|
|
30
|
+
elementContentContainer: HTMLElement;
|
|
30
31
|
elementContentWrapper: HTMLElement;
|
|
31
32
|
dockManager: DockManager;
|
|
32
33
|
title: string;
|
|
@@ -61,7 +62,23 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
61
62
|
panelType = PanelType.panel;
|
|
62
63
|
this.panelType = panelType;
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
(<any>elementContent)._dockSpawnPanelContainer = this;
|
|
66
|
+
this.elementContent = <any>elementContent;
|
|
67
|
+
elementContent.style.position = 'absolute'
|
|
68
|
+
elementContent.style.width = '100%'
|
|
69
|
+
elementContent.style.height = '100%'
|
|
70
|
+
elementContent.style.top = '0'
|
|
71
|
+
elementContent.style.bottom = '0'
|
|
72
|
+
elementContent.hidden = false;
|
|
73
|
+
this.elementContentContainer = document.createElement('div');
|
|
74
|
+
this.elementContentContainer.className = 'panel-element-content-container';
|
|
75
|
+
this.elementContentContainer.style.position = 'absolute';
|
|
76
|
+
this.elementContentContainer.addEventListener('pointerdown', () => {
|
|
77
|
+
if(this.isDialog) this._floatingDialog.bringToFront();
|
|
78
|
+
});
|
|
79
|
+
this.elementContentContainer.appendChild(elementContent);
|
|
80
|
+
dockManager.config.dialogRootElement.appendChild(this.elementContentContainer);
|
|
81
|
+
|
|
65
82
|
this.dockManager = dockManager;
|
|
66
83
|
this.title = title;
|
|
67
84
|
this.containerType = ContainerType.panel;
|
|
@@ -187,9 +204,13 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
187
204
|
this.elementContentHost.classList.add('panel-content');
|
|
188
205
|
|
|
189
206
|
// set the size of the dialog elements based on the panel's size
|
|
190
|
-
let panelWidth = this.
|
|
191
|
-
let panelHeight = this.
|
|
207
|
+
let panelWidth = this.elementContentContainer.clientWidth;
|
|
208
|
+
let panelHeight = this.elementContentContainer.clientHeight;
|
|
192
209
|
let titleHeight = this.elementTitle.clientHeight;
|
|
210
|
+
|
|
211
|
+
this.elementContentWrapper = document.createElement("div");
|
|
212
|
+
this.elementContentWrapper.classList.add('panel-content-wrapper');
|
|
213
|
+
|
|
193
214
|
this._setPanelDimensions(panelWidth, panelHeight + titleHeight);
|
|
194
215
|
|
|
195
216
|
if (!this._hideCloseButton) {
|
|
@@ -199,10 +220,6 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
199
220
|
new EventHandler(this.elementButtonClose, 'touchstart', this.onCloseButtonClicked.bind(this));
|
|
200
221
|
}
|
|
201
222
|
|
|
202
|
-
this.elementContentWrapper = document.createElement("div");
|
|
203
|
-
this.elementContentWrapper.classList.add('panel-content-wrapper');
|
|
204
|
-
this.elementContentWrapper.appendChild(this.elementContent);
|
|
205
|
-
|
|
206
223
|
Utils.removeNode(this.elementContentWrapper);
|
|
207
224
|
this.elementContentHost.appendChild(this.elementContentWrapper);
|
|
208
225
|
|
|
@@ -333,14 +350,32 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
333
350
|
_setPanelDimensions(width: number, height: number) {
|
|
334
351
|
this.elementTitle.style.width = width + 'px';
|
|
335
352
|
this.elementContentHost.style.width = width + 'px';
|
|
336
|
-
this.
|
|
353
|
+
this.elementContentContainer.style.width = width + 'px';
|
|
337
354
|
this.elementPanel.style.width = width + 'px';
|
|
338
355
|
|
|
339
356
|
let titleBarHeight = this.elementTitle.clientHeight;
|
|
340
357
|
let contentHeight = height - titleBarHeight;
|
|
341
358
|
this.elementContentHost.style.height = contentHeight + 'px';
|
|
342
|
-
this.
|
|
359
|
+
this.elementContentContainer.style.height = contentHeight + 'px';
|
|
343
360
|
this.elementPanel.style.height = height + 'px';
|
|
361
|
+
|
|
362
|
+
if (this.elementContentContainer.parentElement != this.dockManager.config.dialogRootElement)
|
|
363
|
+
this.dockManager.config.dialogRootElement.appendChild(this.elementContentContainer);
|
|
364
|
+
const rect = this.elementContentWrapper.getBoundingClientRect();
|
|
365
|
+
this.elementContentContainer.style.left = rect.x + 'px';
|
|
366
|
+
this.elementContentContainer.style.top = rect.y + 'px';
|
|
367
|
+
this.elementContentContainer.style.width = rect.width + 'px';
|
|
368
|
+
this.elementContentContainer.style.height = rect.height + 'px';
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
setDialogPosition(x: number, y: number) {
|
|
372
|
+
this.elementContentContainer.style.left = x + 'px';
|
|
373
|
+
//todo, 25px if it is a dialog, is it always 25px? where do we know...
|
|
374
|
+
this.elementContentContainer.style.top = (y + this.elementTitle.clientHeight) + 'px';
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
setVisible(isVisible: boolean) {
|
|
378
|
+
this.elementContentContainer.style.display = isVisible ? 'block' : 'none';
|
|
344
379
|
}
|
|
345
380
|
|
|
346
381
|
setTitle(title: string) {
|
|
@@ -397,6 +432,8 @@ export class PanelContainer implements IDockContainerWithSize {
|
|
|
397
432
|
async close() {
|
|
398
433
|
let close = true;
|
|
399
434
|
|
|
435
|
+
this.dockManager.config.dialogRootElement.removeChild(this.elementContentContainer);
|
|
436
|
+
|
|
400
437
|
if (this.closePanelContainerCallback)
|
|
401
438
|
close = await this.closePanelContainerCallback(this);
|
|
402
439
|
else if (this.dockManager.closePanelContainerCallback)
|
|
@@ -35,8 +35,8 @@ export class ResizableContainer implements IDockContainer {
|
|
|
35
35
|
this.dockManager = delegate.dockManager;
|
|
36
36
|
this.topLevelElement = topLevelElement;
|
|
37
37
|
this.containerType = delegate.containerType;
|
|
38
|
-
this.topLevelElement.style.
|
|
39
|
-
this.topLevelElement.style.
|
|
38
|
+
this.topLevelElement.style.left = this.topLevelElement.offsetLeft + 'px';
|
|
39
|
+
this.topLevelElement.style.top = this.topLevelElement.offsetTop + 'px';
|
|
40
40
|
this.minimumAllowedChildNodes = delegate.minimumAllowedChildNodes;
|
|
41
41
|
this._buildResizeHandles();
|
|
42
42
|
this.readyToProcessNextResize = true;
|
|
@@ -243,8 +243,8 @@ export class ResizableContainer implements IDockContainer {
|
|
|
243
243
|
|
|
244
244
|
_performDrag(handle, dx: number, dy: number) {
|
|
245
245
|
let bounds: IThickness = {};
|
|
246
|
-
bounds.left = Utils.getPixels(this.topLevelElement.style.
|
|
247
|
-
bounds.top = Utils.getPixels(this.topLevelElement.style.
|
|
246
|
+
bounds.left = Utils.getPixels(this.topLevelElement.style.left);
|
|
247
|
+
bounds.top = Utils.getPixels(this.topLevelElement.style.top);
|
|
248
248
|
bounds.width = this.topLevelElement.clientWidth;
|
|
249
249
|
bounds.height = this.topLevelElement.clientHeight;
|
|
250
250
|
|
|
@@ -281,8 +281,8 @@ export class ResizableContainer implements IDockContainer {
|
|
|
281
281
|
bounds.width = Math.max(bounds.width, minWidth);
|
|
282
282
|
bounds.height = Math.max(bounds.height, minHeight);
|
|
283
283
|
|
|
284
|
-
this.topLevelElement.style.
|
|
285
|
-
this.topLevelElement.style.
|
|
284
|
+
this.topLevelElement.style.left = bounds.left + 'px';
|
|
285
|
+
this.topLevelElement.style.top = bounds.top + 'px';
|
|
286
286
|
|
|
287
287
|
this.resize(bounds.width, bounds.height);
|
|
288
288
|
}
|
package/src/TabPage.ts
CHANGED
|
@@ -78,6 +78,7 @@ export class TabPage {
|
|
|
78
78
|
this._initContent = true;
|
|
79
79
|
if (this.selected) {
|
|
80
80
|
this.containerElement.style.display = 'block';
|
|
81
|
+
this.panel.setVisible(true);
|
|
81
82
|
// force a resize again
|
|
82
83
|
let width = this.host.contentElement.clientWidth;
|
|
83
84
|
let height = this.host.contentElement.clientHeight;
|
|
@@ -86,6 +87,7 @@ export class TabPage {
|
|
|
86
87
|
}
|
|
87
88
|
else {
|
|
88
89
|
this.containerElement.style.display = 'none';
|
|
90
|
+
this.panel.setVisible(false);
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
|