termites 1.0.19 → 1.0.21
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/package.json +1 -1
- package/server.js +21 -14
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -717,17 +717,12 @@ class TermitesServer {
|
|
|
717
717
|
<button data-mod="ctrl" class="mod-btn">Ctrl</button>
|
|
718
718
|
<button data-mod="alt" class="mod-btn">Alt</button>
|
|
719
719
|
<div class="sep"></div>
|
|
720
|
-
<button data-key="ArrowUp">↑</button>
|
|
721
|
-
<button data-key="ArrowDown">↓</button>
|
|
722
720
|
<button data-key="ArrowLeft">←</button>
|
|
723
721
|
<button data-key="ArrowRight">→</button>
|
|
722
|
+
<button data-key="ArrowUp">↑</button>
|
|
723
|
+
<button data-key="ArrowDown">↓</button>
|
|
724
724
|
<div class="sep"></div>
|
|
725
725
|
<button data-seq="/">/</button>
|
|
726
|
-
<button data-seq="\\x03">^C</button>
|
|
727
|
-
<button data-seq="\\x04">^D</button>
|
|
728
|
-
<button data-seq="\\x1a">^Z</button>
|
|
729
|
-
<button data-seq="\\x0c">^L</button>
|
|
730
|
-
<div class="sep"></div>
|
|
731
726
|
<button id="copy-btn">Copy</button>
|
|
732
727
|
<button id="paste-btn">Paste</button>
|
|
733
728
|
<button id="select-btn" class="mod-btn">Select</button>
|
|
@@ -1037,17 +1032,23 @@ class TermitesServer {
|
|
|
1037
1032
|
btn.addEventListener('click', handler);
|
|
1038
1033
|
});
|
|
1039
1034
|
|
|
1040
|
-
// Copy button - copy selection
|
|
1041
|
-
document.getElementById('copy-btn')
|
|
1035
|
+
// Copy button - copy selection
|
|
1036
|
+
const copyBtn = document.getElementById('copy-btn');
|
|
1037
|
+
const handleCopy = async (e) => {
|
|
1038
|
+
e.preventDefault();
|
|
1042
1039
|
const selection = term.getSelection();
|
|
1043
1040
|
if (selection) {
|
|
1044
1041
|
await navigator.clipboard.writeText(selection);
|
|
1045
1042
|
term.clearSelection();
|
|
1046
1043
|
}
|
|
1047
|
-
}
|
|
1044
|
+
};
|
|
1045
|
+
copyBtn.addEventListener('touchstart', handleCopy, { passive: false });
|
|
1046
|
+
copyBtn.addEventListener('click', handleCopy);
|
|
1048
1047
|
|
|
1049
1048
|
// Paste button
|
|
1050
|
-
document.getElementById('paste-btn')
|
|
1049
|
+
const pasteBtn = document.getElementById('paste-btn');
|
|
1050
|
+
const handlePaste = async (e) => {
|
|
1051
|
+
e.preventDefault();
|
|
1051
1052
|
try {
|
|
1052
1053
|
const text = await navigator.clipboard.readText();
|
|
1053
1054
|
if (text && ws?.readyState === WebSocket.OPEN && selectedClientId) {
|
|
@@ -1057,14 +1058,18 @@ class TermitesServer {
|
|
|
1057
1058
|
console.error('Paste failed:', e);
|
|
1058
1059
|
}
|
|
1059
1060
|
term.focus();
|
|
1060
|
-
}
|
|
1061
|
+
};
|
|
1062
|
+
pasteBtn.addEventListener('touchstart', handlePaste, { passive: false });
|
|
1063
|
+
pasteBtn.addEventListener('click', handlePaste);
|
|
1061
1064
|
|
|
1062
1065
|
// Select mode button - enables touch selection
|
|
1063
1066
|
let selectMode = false;
|
|
1064
1067
|
const selectBtn = document.getElementById('select-btn');
|
|
1065
1068
|
const termContainer = document.getElementById('terminal-container');
|
|
1066
1069
|
|
|
1067
|
-
|
|
1070
|
+
const toggleSelectMode = (e) => {
|
|
1071
|
+
e.preventDefault();
|
|
1072
|
+
e.stopPropagation();
|
|
1068
1073
|
selectMode = !selectMode;
|
|
1069
1074
|
selectBtn.classList.toggle('active', selectMode);
|
|
1070
1075
|
termContainer.style.touchAction = selectMode ? 'none' : '';
|
|
@@ -1076,7 +1081,9 @@ class TermitesServer {
|
|
|
1076
1081
|
termContainer.classList.remove('select-mode');
|
|
1077
1082
|
term.clearSelection();
|
|
1078
1083
|
}
|
|
1079
|
-
}
|
|
1084
|
+
};
|
|
1085
|
+
selectBtn.addEventListener('touchstart', toggleSelectMode, { passive: false });
|
|
1086
|
+
selectBtn.addEventListener('click', toggleSelectMode);
|
|
1080
1087
|
|
|
1081
1088
|
// Handle touch selection
|
|
1082
1089
|
let touchStartPos = null;
|