dock-spawn-ts 2.523.2 → 2.525.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.js.map +1 -1
- package/lib/js/DockGraphDeserializer.js.map +1 -1
- package/lib/js/DockLayoutEngine.js.map +1 -1
- package/lib/js/DockManager.js.map +1 -1
- package/lib/js/DockNode.js.map +1 -1
- package/lib/js/DockWheel.js.map +1 -1
- package/lib/js/DocumentTabPage.js.map +1 -1
- package/lib/js/DraggableContainer.js.map +1 -1
- package/lib/js/FillDockContainer.js.map +1 -1
- package/lib/js/PanelContainer.js +2 -1
- package/lib/js/PanelContainer.js.map +1 -1
- package/lib/js/ResizableContainer.js.map +1 -1
- package/lib/js/ResizeHandle.js.map +1 -1
- package/lib/js/SplitterBar.d.ts +7 -10
- package/lib/js/SplitterBar.js +24 -48
- package/lib/js/SplitterBar.js.map +1 -1
- package/lib/js/SplitterDockContainer.js.map +1 -1
- package/lib/js/SplitterPanel.js.map +1 -1
- package/lib/js/TabHandle.js +3 -2
- package/lib/js/TabHandle.js.map +1 -1
- package/lib/js/TabHost.js.map +1 -1
- package/lib/js/TabPage.js.map +1 -1
- package/lib/js/UndockInitiator.js.map +1 -1
- package/lib/js/Utils.js.map +1 -1
- package/lib/js/i18n/Defaults.d.ts +9 -0
- package/lib/js/i18n/Defaults.js +8 -0
- package/lib/js/i18n/Defaults.js.map +1 -0
- package/lib/js/i18n/Localizer.d.ts +6 -0
- package/lib/js/i18n/Localizer.js +17 -0
- package/lib/js/i18n/Localizer.js.map +1 -0
- package/lib/js/webcomponent/DockSpawnTsWebcomponent.js.map +1 -1
- package/package.json +7 -7
- package/src/PanelContainer.ts +2 -1
- package/src/SplitterBar.ts +28 -54
- package/src/TabHandle.ts +3 -2
- package/src/i18n/Defaults.ts +18 -0
- package/src/i18n/Localizer.ts +23 -0
package/src/SplitterBar.ts
CHANGED
|
@@ -8,16 +8,14 @@ export class SplitterBar {
|
|
|
8
8
|
nextContainer: IDockContainer;
|
|
9
9
|
stackedVertical: boolean;
|
|
10
10
|
barElement: HTMLDivElement;
|
|
11
|
-
|
|
12
|
-
touchDownHandler: EventHandler;
|
|
11
|
+
pointerDownHandler: EventHandler;
|
|
13
12
|
minPanelSize: number;
|
|
14
13
|
readyToProcessNextDrag: boolean;
|
|
15
14
|
dockSpawnResizedEvent: CustomEvent<{}>;
|
|
16
15
|
previousMouseEvent: { x: number, y: number };
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
touchUpHandler: EventHandler;
|
|
16
|
+
pointerMovedHandler: EventHandler;
|
|
17
|
+
pointerUpHandler: EventHandler;
|
|
18
|
+
|
|
21
19
|
private iframeEventHandlers: EventHandler[];
|
|
22
20
|
|
|
23
21
|
constructor(previousContainer: IDockContainer, nextContainer: IDockContainer, stackedVertical: boolean) {
|
|
@@ -28,28 +26,24 @@ export class SplitterBar {
|
|
|
28
26
|
this.stackedVertical = stackedVertical;
|
|
29
27
|
this.barElement = document.createElement('div');
|
|
30
28
|
this.barElement.classList.add(stackedVertical ? 'splitbar-horizontal' : 'splitbar-vertical');
|
|
31
|
-
this.
|
|
32
|
-
this.touchDownHandler = new EventHandler(this.barElement, 'touchstart', this.onMouseDown.bind(this));
|
|
29
|
+
this.pointerDownHandler = new EventHandler(this.barElement, 'pointerdown', this.onPointerDown.bind(this));
|
|
33
30
|
this.minPanelSize = 50; // TODO: Get from container configuration
|
|
34
31
|
this.readyToProcessNextDrag = true;
|
|
35
32
|
this.dockSpawnResizedEvent = new CustomEvent("DockSpawnResizedEvent", { composed: true, bubbles: true });
|
|
36
33
|
this.iframeEventHandlers = [];
|
|
37
34
|
}
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (e.touches.length > 1)
|
|
42
|
-
return;
|
|
43
|
-
e = e.touches[0];
|
|
44
|
-
}
|
|
36
|
+
onPointerDown(e: PointerEvent) {
|
|
37
|
+
this.barElement.setPointerCapture(e.pointerId);
|
|
45
38
|
this._startDragging(e);
|
|
46
39
|
}
|
|
47
40
|
|
|
48
|
-
|
|
41
|
+
onPointerUp(e: PointerEvent) {
|
|
42
|
+
this.barElement.releasePointerCapture(e.pointerId);
|
|
49
43
|
this._stopDragging();
|
|
50
44
|
}
|
|
51
45
|
|
|
52
|
-
|
|
46
|
+
onPointerMovedIframe(e: IMouseOrTouchEvent, iframe: HTMLIFrameElement) {
|
|
53
47
|
if (e.changedTouches != null) {
|
|
54
48
|
e = e.changedTouches[0];
|
|
55
49
|
}
|
|
@@ -57,7 +51,7 @@ export class SplitterBar {
|
|
|
57
51
|
this.handleMoveEvent({ x: e.clientX + posIf.x, y: e.clientY + posIf.y });
|
|
58
52
|
}
|
|
59
53
|
|
|
60
|
-
|
|
54
|
+
onPointerMoved(e: IMouseOrTouchEvent) {
|
|
61
55
|
if (e.changedTouches != null) {
|
|
62
56
|
e = e.changedTouches[0];
|
|
63
57
|
}
|
|
@@ -123,34 +117,22 @@ export class SplitterBar {
|
|
|
123
117
|
|
|
124
118
|
_startDragging(e: IMouseOrTouchEvent) {
|
|
125
119
|
Utils.disableGlobalTextSelection(this.previousContainer.dockManager.config.dialogRootElement);
|
|
126
|
-
if (this.
|
|
127
|
-
this.
|
|
128
|
-
delete this.
|
|
129
|
-
}
|
|
130
|
-
if (this.touchMovedHandler) {
|
|
131
|
-
this.touchMovedHandler.cancel();
|
|
132
|
-
delete this.touchMovedHandler;
|
|
120
|
+
if (this.pointerMovedHandler) {
|
|
121
|
+
this.pointerMovedHandler.cancel();
|
|
122
|
+
delete this.pointerMovedHandler;
|
|
133
123
|
}
|
|
134
|
-
if (this.
|
|
135
|
-
this.
|
|
136
|
-
delete this.
|
|
124
|
+
if (this.pointerUpHandler) {
|
|
125
|
+
this.pointerUpHandler.cancel();
|
|
126
|
+
delete this.pointerUpHandler;
|
|
137
127
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
delete this.touchUpHandler;
|
|
141
|
-
}
|
|
142
|
-
this.mouseMovedHandler = new EventHandler(window, 'mousemove', this.onMouseMoved.bind(this));
|
|
143
|
-
this.mouseUpHandler = new EventHandler(window, 'mouseup', this.onMouseUp.bind(this));
|
|
144
|
-
this.touchMovedHandler = new EventHandler(window, 'touchmove', this.onMouseMoved.bind(this));
|
|
145
|
-
this.touchUpHandler = new EventHandler(window, 'touchend', this.onMouseUp.bind(this));
|
|
128
|
+
this.pointerMovedHandler = new EventHandler(window, 'pointermove', this.onPointerMoved.bind(this));
|
|
129
|
+
this.pointerUpHandler = new EventHandler(window, 'pointerup', this.onPointerUp.bind(this));
|
|
146
130
|
|
|
147
131
|
if (this.previousContainer.dockManager.iframes) {
|
|
148
132
|
for (let f of this.previousContainer.dockManager.iframes) {
|
|
149
|
-
let mmi = this.
|
|
150
|
-
this.iframeEventHandlers.push(new EventHandler(f.contentWindow, '
|
|
151
|
-
this.iframeEventHandlers.push(new EventHandler(f.contentWindow, '
|
|
152
|
-
this.iframeEventHandlers.push(new EventHandler(f.contentWindow, 'touchmove', (e) => mmi(e, f)));
|
|
153
|
-
this.iframeEventHandlers.push(new EventHandler(f.contentWindow, 'touchend', this.onMouseUp.bind(this)));
|
|
133
|
+
let mmi = this.onPointerMovedIframe.bind(this);
|
|
134
|
+
this.iframeEventHandlers.push(new EventHandler(f.contentWindow, 'pointermove', (e) => mmi(e, f)));
|
|
135
|
+
this.iframeEventHandlers.push(new EventHandler(f.contentWindow, 'pointerup', this.onPointerUp.bind(this)));
|
|
154
136
|
}
|
|
155
137
|
}
|
|
156
138
|
|
|
@@ -159,21 +141,13 @@ export class SplitterBar {
|
|
|
159
141
|
|
|
160
142
|
_stopDragging() {
|
|
161
143
|
Utils.enableGlobalTextSelection(this.previousContainer.dockManager.config.dialogRootElement);
|
|
162
|
-
if (this.
|
|
163
|
-
this.
|
|
164
|
-
delete this.
|
|
165
|
-
}
|
|
166
|
-
if (this.touchMovedHandler) {
|
|
167
|
-
this.touchMovedHandler.cancel();
|
|
168
|
-
delete this.touchMovedHandler;
|
|
169
|
-
}
|
|
170
|
-
if (this.mouseUpHandler) {
|
|
171
|
-
this.mouseUpHandler.cancel();
|
|
172
|
-
delete this.mouseUpHandler;
|
|
144
|
+
if (this.pointerMovedHandler) {
|
|
145
|
+
this.pointerMovedHandler.cancel();
|
|
146
|
+
delete this.pointerMovedHandler;
|
|
173
147
|
}
|
|
174
|
-
if (this.
|
|
175
|
-
this.
|
|
176
|
-
delete this.
|
|
148
|
+
if (this.pointerUpHandler) {
|
|
149
|
+
this.pointerUpHandler.cancel();
|
|
150
|
+
delete this.pointerUpHandler;
|
|
177
151
|
}
|
|
178
152
|
for (let e of this.iframeEventHandlers) {
|
|
179
153
|
e.cancel();
|
package/src/TabHandle.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { EventHandler } from "./EventHandler.js";
|
|
|
5
5
|
import { Utils } from "./Utils.js";
|
|
6
6
|
import { PanelType } from "./enums/PanelType.js";
|
|
7
7
|
import { DockNode } from "./DockNode.js";
|
|
8
|
+
import { Localizer } from "./i18n/Localizer.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* A tab handle represents the tab button on the tab strip
|
|
@@ -96,11 +97,11 @@ export class TabHandle {
|
|
|
96
97
|
|
|
97
98
|
static createContextMenuContentCallback = (tabHandle: TabHandle, contextMenuContainer: HTMLDivElement, documentMangerNodes: DockNode[]) => {
|
|
98
99
|
let btnCloseAll = document.createElement('div');
|
|
99
|
-
btnCloseAll.innerText = '
|
|
100
|
+
btnCloseAll.innerText = Localizer.getString('CloseAll');
|
|
100
101
|
contextMenuContainer.append(btnCloseAll);
|
|
101
102
|
|
|
102
103
|
let btnCloseAllButThis = document.createElement('div');
|
|
103
|
-
btnCloseAllButThis.innerText = '
|
|
104
|
+
btnCloseAllButThis.innerText = Localizer.getString('CloseAllButThis');
|
|
104
105
|
contextMenuContainer.append(btnCloseAllButThis);
|
|
105
106
|
|
|
106
107
|
btnCloseAll.onclick = () => {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type TranslationKey = keyof typeof Defaults;
|
|
2
|
+
|
|
3
|
+
export type GetLocalizerParameters<K extends TranslationKey> = K extends keyof LocalizerParameters
|
|
4
|
+
? LocalizerParameters[K]
|
|
5
|
+
: [];
|
|
6
|
+
|
|
7
|
+
export const Defaults = {
|
|
8
|
+
'CloseAll': 'Close all documents',
|
|
9
|
+
'CloseAllButThis': 'Close all documents but this',
|
|
10
|
+
'DefaultPanelName': 'Panel'
|
|
11
|
+
//Example of parameterized translation
|
|
12
|
+
// 'CloseWithName': 'Close tab {0}'
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export interface LocalizerParameters {
|
|
16
|
+
// Example
|
|
17
|
+
// 'CloseWithName': [tabName: string]
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Defaults, GetLocalizerParameters, TranslationKey } from "./Defaults.js";
|
|
2
|
+
|
|
3
|
+
function formatString(template: string, ...params: any[]): string {
|
|
4
|
+
return template.replace(/{(\d+)}/g, (_match: string, n: string) => {
|
|
5
|
+
const index = Number.parseInt(n);
|
|
6
|
+
return params[index].toString();
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class Localizer {
|
|
11
|
+
public static configure(getTemplateString: (key: TranslationKey) => string | null): void {
|
|
12
|
+
Localizer._getTemplateString = getTemplateString;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public static getString<K extends TranslationKey>(key: K, ...params: GetLocalizerParameters<K>): string {
|
|
16
|
+
return formatString(
|
|
17
|
+
Localizer._getTemplateString?.(key) ?? Defaults[key],
|
|
18
|
+
...params
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private static _getTemplateString?: (key: TranslationKey) => string | null;
|
|
23
|
+
}
|