pikvm/pikvm#1563, pikvm/pikvm#1564: Customizable /api/hid/print delay

This commit is contained in:
Maxim Devaev
2025-07-28 21:00:32 +03:00
parent dc7f38a1b6
commit 9b5b6f6152
6 changed files with 38 additions and 18 deletions

View File

@@ -799,14 +799,12 @@
</table>
<table class="kv">
<tr>
<td>Slow typing:
<td>Delay between keys:
</td>
<td align="right">
<div class="switch-box">
<input type="checkbox" id="hid-pak-slow-switch">
<label for="hid-pak-slow-switch"><span class="switch-inner"></span><span class="switch"></span></label>
</div>
<td class="value-slider">
<input type="range" id="hid-pak-delay-slider">
</td>
<td class="value-number" id="hid-pak-delay-value"></td>
</tr>
<tr>
<td>Hide input text:

View File

@@ -17,7 +17,7 @@ li.right#text-dropdown
td #[select#hid-pak-keymap-selector]
table.kv
tr
+menu_switch_td2("hid-pak-slow-switch", true, false) Slow typing:
+menu_slider_td3("hid-pak-delay-slider", "hid-pak-delay-value", true) Delay between keys:
tr
+menu_switch_td2("hid-pak-secure-switch", true, false) Hide input text:
tr

View File

@@ -40,12 +40,16 @@ export function Paste(__recorder) {
});
tools.storage.bindSimpleSwitch($("hid-pak-ask-switch"), "hid.pak.ask", true);
tools.storage.bindSimpleSwitch($("hid-pak-slow-switch"), "hid.pak.slow", false);
tools.storage.bindSimpleSwitch($("hid-pak-secure-switch"), "hid.pak.secure", false, function(value) {
$("hid-pak-text").style.setProperty("-webkit-text-security", (value ? "disc" : "none"));
});
tools.slider.setParams($("hid-pak-delay-slider"), 0, 200, 20, tools.storage.getInt("hid.pak.delay", 20), function (value) {
$("hid-pak-delay-value").innerText = value + " ms";
tools.storage.setInt("hid.pak.delay", value);
});
$("hid-pak-keymap-selector").addEventListener("change", function() {
tools.storage.set("hid.pak.keymap", $("hid-pak-keymap-selector").value);
});
@@ -77,11 +81,11 @@ export function Paste(__recorder) {
tools.el.setEnabled($("hid-pak-keymap-selector"), false);
let keymap = $("hid-pak-keymap-selector").value;
let slow = $("hid-pak-slow-switch").checked;
let delay = $("hid-pak-delay-slider").value;
tools.debug(`HID: paste-as-keys ${keymap}: ${text}`);
tools.httpPost("api/hid/print", {"limit": 0, "keymap": keymap, "slow": slow}, function(http) {
tools.httpPost("api/hid/print", {"limit": 0, "keymap": keymap, "delay": delay / 1000}, function(http) {
tools.el.setEnabled($("hid-pak-text"), true);
tools.el.setEnabled($("hid-pak-button"), true);
tools.el.setEnabled($("hid-pak-keymap-selector"), true);
@@ -91,7 +95,7 @@ export function Paste(__recorder) {
} else if (http.status !== 200) {
wm.error("HID paste error", http.responseText);
} else if (http.status === 200) {
__recorder.recordPrintEvent(text, keymap, slow);
__recorder.recordPrintEvent(text, keymap, delay);
}
}, text, "text/plain", 7 * 24 * 3600);
};

View File

@@ -67,8 +67,8 @@ export function Recorder() {
__recordEvent(ev);
};
self.recordPrintEvent = function(text, keymap, slow) {
__recordEvent({"event_type": "print", "event": {"text": text, "keymap": keymap, "slow": slow}});
self.recordPrintEvent = function(text, keymap, delay) {
__recordEvent({"event_type": "print", "event": {"text": text, "keymap": keymap, "delay": delay}});
};
self.recordAtxButtonEvent = function(button) {
@@ -165,6 +165,9 @@ export function Recorder() {
if (ev.event.slow !== undefined) {
__checkType(ev.event.slow, "boolean", "Non-bool slow");
}
if (ev.event.delay !== undefined) {
__checkInt(ev.event.delay, "Non-int delay");
}
} else if (ev.event_type === "key") {
__checkType(ev.event.key, "string", "Non-string key code");
@@ -293,6 +296,9 @@ export function Recorder() {
if (ev.event.slow !== undefined) {
params["slow"] = ev.event.slow;
}
if (ev.event.delay !== undefined) {
params["delay"] = ev.event.delay / 1000;
}
tools.httpPost("api/hid/print", params, function(http) {
if (http.status === 413) {
wm.error("Too many text for paste!");