clay-server 2.29.3 → 2.29.4-beta.1
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/public/modules/terminal.js +26 -20
- package/package.json +1 -1
|
@@ -13,6 +13,22 @@ var altActive = false;
|
|
|
13
13
|
var isTouchDevice = "ontouchstart" in window;
|
|
14
14
|
var viewportHandler = null;
|
|
15
15
|
var resizeObserver = null;
|
|
16
|
+
|
|
17
|
+
function disposeTab(tab) {
|
|
18
|
+
if (tab._webglAddon) {
|
|
19
|
+
try { tab._webglAddon.dispose(); } catch (e) {}
|
|
20
|
+
tab._webglAddon = null;
|
|
21
|
+
}
|
|
22
|
+
if (tab.xterm) {
|
|
23
|
+
tab.xterm.dispose();
|
|
24
|
+
tab.xterm = null;
|
|
25
|
+
}
|
|
26
|
+
tab.fitAddon = null;
|
|
27
|
+
if (tab.bodyEl && tab.bodyEl.parentNode) {
|
|
28
|
+
tab.bodyEl.parentNode.removeChild(tab.bodyEl);
|
|
29
|
+
tab.bodyEl = null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
16
32
|
var toolbarBound = false;
|
|
17
33
|
var termCtxMenu = null;
|
|
18
34
|
|
|
@@ -356,7 +372,13 @@ function createXtermForTab(tab) {
|
|
|
356
372
|
// Must be loaded after xterm.open() so the rendering context is available.
|
|
357
373
|
if (typeof WebglAddon !== "undefined") {
|
|
358
374
|
try {
|
|
359
|
-
|
|
375
|
+
var webgl = new WebglAddon.WebglAddon();
|
|
376
|
+
webgl.onContextLoss(function () {
|
|
377
|
+
webgl.dispose();
|
|
378
|
+
tab._webglAddon = null;
|
|
379
|
+
});
|
|
380
|
+
xterm.loadAddon(webgl);
|
|
381
|
+
tab._webglAddon = webgl;
|
|
360
382
|
} catch (e) {
|
|
361
383
|
// WebGL not available, fall back to DOM renderer
|
|
362
384
|
}
|
|
@@ -663,12 +685,7 @@ export function handleTermList(msg) {
|
|
|
663
685
|
for (var id of tabs.keys()) {
|
|
664
686
|
if (!serverIds.has(id)) {
|
|
665
687
|
var removed = tabs.get(id);
|
|
666
|
-
|
|
667
|
-
removed.xterm.dispose();
|
|
668
|
-
}
|
|
669
|
-
if (removed.bodyEl && removed.bodyEl.parentNode) {
|
|
670
|
-
removed.bodyEl.parentNode.removeChild(removed.bodyEl);
|
|
671
|
-
}
|
|
688
|
+
disposeTab(removed);
|
|
672
689
|
tabs.delete(id);
|
|
673
690
|
}
|
|
674
691
|
}
|
|
@@ -733,10 +750,7 @@ export function handleTermClosed(msg) {
|
|
|
733
750
|
if (!msg.id) return;
|
|
734
751
|
var tab = tabs.get(msg.id);
|
|
735
752
|
if (tab) {
|
|
736
|
-
|
|
737
|
-
if (tab.bodyEl && tab.bodyEl.parentNode) {
|
|
738
|
-
tab.bodyEl.parentNode.removeChild(tab.bodyEl);
|
|
739
|
-
}
|
|
753
|
+
disposeTab(tab);
|
|
740
754
|
tabs.delete(msg.id);
|
|
741
755
|
|
|
742
756
|
if (activeTabId === msg.id) {
|
|
@@ -760,15 +774,7 @@ export function handleTermClosed(msg) {
|
|
|
760
774
|
export function resetTerminals() {
|
|
761
775
|
// Dispose all xterm instances (server state survives, client re-syncs via term_list)
|
|
762
776
|
for (var tab of tabs.values()) {
|
|
763
|
-
|
|
764
|
-
tab.xterm.dispose();
|
|
765
|
-
tab.xterm = null;
|
|
766
|
-
tab.fitAddon = null;
|
|
767
|
-
}
|
|
768
|
-
if (tab.bodyEl && tab.bodyEl.parentNode) {
|
|
769
|
-
tab.bodyEl.parentNode.removeChild(tab.bodyEl);
|
|
770
|
-
tab.bodyEl = null;
|
|
771
|
-
}
|
|
777
|
+
disposeTab(tab);
|
|
772
778
|
}
|
|
773
779
|
tabs.clear();
|
|
774
780
|
activeTabId = null;
|