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.
Files changed (38) hide show
  1. package/lib/es5/dock-spawn-ts.js +1 -1
  2. package/lib/js/Dialog.js.map +1 -1
  3. package/lib/js/DockGraphDeserializer.js.map +1 -1
  4. package/lib/js/DockLayoutEngine.js.map +1 -1
  5. package/lib/js/DockManager.js.map +1 -1
  6. package/lib/js/DockNode.js.map +1 -1
  7. package/lib/js/DockWheel.js.map +1 -1
  8. package/lib/js/DocumentTabPage.js.map +1 -1
  9. package/lib/js/DraggableContainer.js.map +1 -1
  10. package/lib/js/FillDockContainer.js.map +1 -1
  11. package/lib/js/PanelContainer.js +2 -1
  12. package/lib/js/PanelContainer.js.map +1 -1
  13. package/lib/js/ResizableContainer.js.map +1 -1
  14. package/lib/js/ResizeHandle.js.map +1 -1
  15. package/lib/js/SplitterBar.d.ts +7 -10
  16. package/lib/js/SplitterBar.js +24 -48
  17. package/lib/js/SplitterBar.js.map +1 -1
  18. package/lib/js/SplitterDockContainer.js.map +1 -1
  19. package/lib/js/SplitterPanel.js.map +1 -1
  20. package/lib/js/TabHandle.js +3 -2
  21. package/lib/js/TabHandle.js.map +1 -1
  22. package/lib/js/TabHost.js.map +1 -1
  23. package/lib/js/TabPage.js.map +1 -1
  24. package/lib/js/UndockInitiator.js.map +1 -1
  25. package/lib/js/Utils.js.map +1 -1
  26. package/lib/js/i18n/Defaults.d.ts +9 -0
  27. package/lib/js/i18n/Defaults.js +8 -0
  28. package/lib/js/i18n/Defaults.js.map +1 -0
  29. package/lib/js/i18n/Localizer.d.ts +6 -0
  30. package/lib/js/i18n/Localizer.js +17 -0
  31. package/lib/js/i18n/Localizer.js.map +1 -0
  32. package/lib/js/webcomponent/DockSpawnTsWebcomponent.js.map +1 -1
  33. package/package.json +7 -7
  34. package/src/PanelContainer.ts +2 -1
  35. package/src/SplitterBar.ts +28 -54
  36. package/src/TabHandle.ts +3 -2
  37. package/src/i18n/Defaults.ts +18 -0
  38. package/src/i18n/Localizer.ts +23 -0
@@ -8,16 +8,14 @@ export class SplitterBar {
8
8
  nextContainer: IDockContainer;
9
9
  stackedVertical: boolean;
10
10
  barElement: HTMLDivElement;
11
- mouseDownHandler: EventHandler;
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
- mouseMovedHandler: EventHandler;
18
- mouseUpHandler: EventHandler;
19
- touchMovedHandler: EventHandler;
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.mouseDownHandler = new EventHandler(this.barElement, 'mousedown', this.onMouseDown.bind(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
- onMouseDown(e: IMouseOrTouchEvent) {
40
- if (e.touches) {
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
- onMouseUp() {
41
+ onPointerUp(e: PointerEvent) {
42
+ this.barElement.releasePointerCapture(e.pointerId);
49
43
  this._stopDragging();
50
44
  }
51
45
 
52
- onMouseMovedIframe(e: IMouseOrTouchEvent, iframe: HTMLIFrameElement) {
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
- onMouseMoved(e: IMouseOrTouchEvent) {
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.mouseMovedHandler) {
127
- this.mouseMovedHandler.cancel();
128
- delete this.mouseMovedHandler;
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.mouseUpHandler) {
135
- this.mouseUpHandler.cancel();
136
- delete this.mouseUpHandler;
124
+ if (this.pointerUpHandler) {
125
+ this.pointerUpHandler.cancel();
126
+ delete this.pointerUpHandler;
137
127
  }
138
- if (this.touchUpHandler) {
139
- this.touchUpHandler.cancel();
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.onMouseMovedIframe.bind(this);
150
- this.iframeEventHandlers.push(new EventHandler(f.contentWindow, 'mousemove', (e) => mmi(e, f)));
151
- this.iframeEventHandlers.push(new EventHandler(f.contentWindow, 'mouseup', this.onMouseUp.bind(this)));
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.mouseMovedHandler) {
163
- this.mouseMovedHandler.cancel();
164
- delete this.mouseMovedHandler;
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.touchUpHandler) {
175
- this.touchUpHandler.cancel();
176
- delete this.touchUpHandler;
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 = 'Close all documents';
100
+ btnCloseAll.innerText = Localizer.getString('CloseAll');
100
101
  contextMenuContainer.append(btnCloseAll);
101
102
 
102
103
  let btnCloseAllButThis = document.createElement('div');
103
- btnCloseAllButThis.innerText = 'Close all documents but this';
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
+ }