virtual-keypad 5.14.3 → 5.15.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.
@@ -95,7 +95,7 @@
95
95
  let starting_alphabet = [
96
96
  ..."ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".split(""),
97
97
  ];
98
- const ctrl = ["RETURN", "SPACE"];
98
+ const ctrl = ["RETURN", "SPACE", "SKIP BLOCK"];
99
99
  let alphabet = [...starting_alphabet, ...ctrl];
100
100
 
101
101
  let keypad_options = {
@@ -106,6 +106,7 @@
106
106
  targetElementId: "display", // id of the the div where messages should be displayed
107
107
  visualResponseFeedback: false,
108
108
  onErrorReconnectMessage: "Custom error message",
109
+ controlButtons: ctrl,
109
110
  };
110
111
  let ondata_callback = (data) => {
111
112
  receiver.displayUpdate(`[data] ${data.response}`, true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virtual-keypad",
3
- "version": "5.14.3",
3
+ "version": "5.15.0",
4
4
  "description": "User response at a distance. Simple utility to summon forth a virtual keypad webapp.",
5
5
  "main": "dist/main.js",
6
6
  "directories": {
package/src/keypad.js CHANGED
@@ -16,6 +16,7 @@ class Keypad extends KeypadPeer {
16
16
  });
17
17
  this.startTime = Date.now();
18
18
  this.receiverPeerId = null;
19
+ this.controlButtons = keypadParameters.controlButtons ?? ["SPACE", "RETURN"];
19
20
 
20
21
  const parametersFromURL = this.parseParams(
21
22
  new URLSearchParams(window.location.search),
@@ -64,6 +65,7 @@ class Keypad extends KeypadPeer {
64
65
  case "KeypadParameters":
65
66
  this.alphabet = data.alphabet;
66
67
  this.font = data.font;
68
+ this.controlButtons = data.controlButtons;
67
69
  this.onErrorReconnectMessage = data.onErrorReconnectMessage;
68
70
  this.#populateKeypad();
69
71
  break;
@@ -81,13 +83,14 @@ class Keypad extends KeypadPeer {
81
83
  break;
82
84
  case "Update":
83
85
  // Keypad has received data to update the keypad
84
- if (!data.hasOwnProperty("alphabet") && !data.hasOwnProperty("font")) {
86
+ if (!data.hasOwnProperty("alphabet") && !data.hasOwnProperty("font") && !data.hasOwnProperty("controlButtons")) {
85
87
  console.error(
86
88
  'Error in parsing data received! Must set "alphabet" or "font" properties',
87
89
  );
88
90
  } else {
89
91
  this.alphabet = data.alphabet ?? this.alphabet;
90
92
  this.font = data.font ?? this.font;
93
+ this.controlButtons = data.controlButtons ?? this.controlButtons;
91
94
  }
92
95
  this.#populateKeypad();
93
96
  break;
@@ -250,12 +253,12 @@ class Keypad extends KeypadPeer {
250
253
  button.addEventListener("mouseup", (e) => {
251
254
  e.preventDefault();
252
255
  console.log("mouseup event: ", e);
253
- switch (e.toElement.className) {
256
+ switch (e.target.className) {
254
257
  case "response-button-label noselect":
255
- buttonResponseFn(e.toElement.parentElement); // e.target.click();
258
+ buttonResponseFn(e.target.parentElement);
256
259
  break;
257
260
  case "response-button":
258
- buttonResponseFn(e.toElement); // e.target.click();
261
+ buttonResponseFn(e.target);
259
262
  break;
260
263
  }
261
264
  });
@@ -290,7 +293,7 @@ class Keypad extends KeypadPeer {
290
293
  // Add the label to the button
291
294
  button.appendChild(buttonLabel);
292
295
  // Add the labeled-button to the HTML
293
- if (["SPACE", "RETURN"].includes(symbol.toUpperCase())) {
296
+ if (this.controlButtons.includes(symbol.toUpperCase())) {
294
297
  document.querySelector("#keypad-control-keys").appendChild(button);
295
298
  } else {
296
299
  document.querySelector("#keypad-keys").appendChild(button);
package/src/keypadPeer.js CHANGED
@@ -30,11 +30,11 @@ export class KeypadPeer {
30
30
  // TODO add support for ttd (ms)
31
31
  this.ttd = parameters.hasOwnProperty("ttd")
32
32
  ? parameters.hasOwnProperty("ttd")
33
- : 8000;
33
+ : 60000;
34
34
  // TODO add support for heartRate (ms)
35
35
  this.heartbeatIntervalMs = parameters.hasOwnProperty("heartRate")
36
36
  ? parameters.hasOwnProperty("heartRate")
37
- : 2000;
37
+ : 10000;
38
38
  this.lastHeartbeat = performance.now();
39
39
  this.heartBeatInterval = undefined;
40
40
  this.heartCheckInterval = undefined;
package/src/maxKeySize.js CHANGED
@@ -79,15 +79,19 @@ export const applyMaxKeySize = (numberOfKeys) => {
79
79
  let controlKeyFontSize = Infinity;
80
80
  let keyFontSize;
81
81
  let j = 0;
82
+
83
+ const numControlKeys = controlKeyElemsMask.filter(x => x).length;
84
+
82
85
  keyElems.forEach((k, i) => {
83
86
  k.style.position = "fixed";
84
87
  const controlKey = controlKeyElemsMask[i];
85
88
  let top, left, width;
86
89
  if (controlKey) {
87
90
  top = heightPx - keyHeightPx;
88
- width = widthPx / 2 - margin;
91
+ width = (widthPx / numControlKeys) - margin;
89
92
  const m = margin * 0.5;
90
- left = k.id.toLowerCase().includes("space") ? m : m + width + margin;
93
+ const controlKeyIndex = controlKeys.length;
94
+ left = m + controlKeyIndex * (width + margin);
91
95
 
92
96
  const f = getLargeFontSize(k, width, keyHeightPx - margin);
93
97
  controlKeyFontSize = Math.min(f, controlKeyFontSize);
package/src/receiver.js CHANGED
@@ -30,6 +30,7 @@ class Receiver extends KeypadPeer {
30
30
 
31
31
  this.alphabet = this.checkAlphabet(keypadParameters["alphabet"]); // What symbols to display on the keys
32
32
  this.font = keypadParameters["font"]; // What fontface to display the symbols in
33
+ this.controlButtons = keypadParameters["controlButtons"];
33
34
  this.onErrorReconnectMessage =
34
35
  keypadParameters.onErrorReconnectMessage ??
35
36
  "Connection lost. Please reconnect...";
@@ -226,6 +227,7 @@ class Receiver extends KeypadPeer {
226
227
  this.conn.send({
227
228
  message: "KeypadParameters",
228
229
  alphabet: this.alphabet,
230
+ controlButtons: this.controlButtons,
229
231
  font: this.font,
230
232
  onErrorReconnectMessage: this.onErrorReconnectMessage,
231
233
  });