keyboard.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. function touchHandler(event) {
  2. var touches = event.changedTouches,
  3. first = touches[0],
  4. type = "";
  5. switch (event.type) {
  6. case "touchstart":
  7. type = "mousedown";
  8. break;
  9. case "touchmove":
  10. type = "mousemove";
  11. break;
  12. case "touchend":
  13. type = "mouseup";
  14. break;
  15. default:
  16. return;
  17. }
  18. // initMouseEvent(type, canBubble, cancelable, view, clickCount,
  19. // screenX, screenY, clientX, clientY, ctrlKey,
  20. // altKey, shiftKey, metaKey, button, relatedTarget);
  21. var simulatedEvent = document.createEvent("MouseEvent");
  22. simulatedEvent.initMouseEvent(
  23. type,
  24. true,
  25. true,
  26. window,
  27. 1,
  28. first.screenX,
  29. first.screenY,
  30. first.clientX,
  31. first.clientY,
  32. false,
  33. false,
  34. false,
  35. false,
  36. 0 /*left*/,
  37. null
  38. );
  39. first.target.dispatchEvent(simulatedEvent);
  40. event.preventDefault();
  41. }
  42. (function init() {
  43. document.addEventListener("touchstart", touchHandler, true);
  44. document.addEventListener("touchmove", touchHandler, true);
  45. document.addEventListener("touchend", touchHandler, true);
  46. document.addEventListener("touchcancel", touchHandler, true);
  47. })();
  48. let dragging = false;
  49. $(".virtual-keyboard-window").draggable({
  50. containment: "parent",
  51. handle: ".window-top",
  52. drag: function (event, ui) {
  53. localStorage.setItem("keyboard-position", JSON.stringify(ui.position));
  54. },
  55. start: function (event, ui) {
  56. dragging = true;
  57. },
  58. stop: function (event, ui) {
  59. setTimeout(() => {
  60. dragging = false;
  61. }, 300);
  62. },
  63. });
  64. $(".keyboard-toggle").draggable({
  65. containment: "parent",
  66. drag: function (event, ui) {
  67. localStorage.setItem(
  68. "keyboard-toggle-position",
  69. JSON.stringify(ui.position)
  70. );
  71. },
  72. start: function (event, ui) {
  73. dragging = true;
  74. },
  75. stop: function (event, ui) {
  76. setTimeout(() => {
  77. dragging = false;
  78. }, 300);
  79. },
  80. });
  81. function showKeyboard() {
  82. if (dragging) return;
  83. $(".virtual-keyboard-window").show();
  84. $(".keyboard-toggle").hide();
  85. localStorage.setItem("virtual-keyboard-visible", "true");
  86. }
  87. function hideKeyboard() {
  88. if (dragging) return;
  89. $(".virtual-keyboard-window").hide();
  90. $(".keyboard-toggle").show();
  91. localStorage.setItem("virtual-keyboard-visible", "false");
  92. }
  93. $(".btn-close").click(hideKeyboard);
  94. $(".keyboard-toggle").click(showKeyboard);
  95. if (
  96. localStorage.getItem("virtual-keyboard-visible") === "true" ||
  97. localStorage.getItem("virtual-keyboard-visible") === null
  98. ) {
  99. showKeyboard();
  100. } else {
  101. hideKeyboard();
  102. }
  103. let keyboardPosition = {
  104. left: (window.innerWidth - 800) / 2,
  105. top: window.innerHeight - 300,
  106. };
  107. if (localStorage.getItem("keyboard-position")) {
  108. keyboardPosition = JSON.parse(localStorage.getItem("keyboard-position"));
  109. keyboardPosition.left = Math.min(
  110. keyboardPosition.left,
  111. window.innerWidth - 800
  112. );
  113. keyboardPosition.top = Math.min(
  114. keyboardPosition.top,
  115. window.innerHeight - 300
  116. );
  117. }
  118. $(".virtual-keyboard-window").css("left", keyboardPosition.left);
  119. $(".virtual-keyboard-window").css("top", keyboardPosition.top);
  120. let togglePosition = {
  121. left: window.innerWidth - 100,
  122. top: window.innerHeight - 100,
  123. };
  124. if (localStorage.getItem("keyboard-toggle-position")) {
  125. togglePosition = JSON.parse(
  126. localStorage.getItem("keyboard-toggle-position")
  127. );
  128. togglePosition.left = Math.min(togglePosition.left, window.innerWidth - 50);
  129. togglePosition.top = Math.min(togglePosition.top, window.innerHeight - 50);
  130. }
  131. $(".keyboard-toggle").css("left", togglePosition.left);
  132. $(".keyboard-toggle").css("top", togglePosition.top);
  133. const Keyboard = window.SimpleKeyboard.default;
  134. const keyboard = new Keyboard({
  135. onChange: (input) => onChange(input),
  136. onKeyPress: (button) => onKeyPress(button),
  137. });
  138. function onChange(input) {
  139. // document.querySelector(".input").value = input;
  140. console.log("Input changed", input);
  141. }
  142. function onKeyPress(button) {
  143. console.log("Button pressed", button);
  144. if (button === "{shift}" || button === "{lock}") {
  145. handleShift();
  146. return;
  147. }
  148. keyboard.clearInput();
  149. let key = button;
  150. if (key === ".com") {
  151. for (let char of ".com".split("")) {
  152. sendKey(char);
  153. }
  154. return;
  155. }
  156. switch (key) {
  157. case "{bksp}":
  158. key = "Backspace";
  159. break;
  160. case "{enter}":
  161. key = "Enter";
  162. break;
  163. case "{space}":
  164. key = " ";
  165. break;
  166. case "{tab}":
  167. key = "Tab";
  168. break;
  169. case "{esc}":
  170. key = "Escape";
  171. break;
  172. case "{lock}":
  173. key = "CapsLock";
  174. break;
  175. case "{shift}":
  176. key = "Shift";
  177. break;
  178. case "{alt}":
  179. key = "Alt";
  180. break;
  181. case "{ctrl}":
  182. key = "Control";
  183. break;
  184. }
  185. sendKey(key);
  186. }
  187. function sendKey(key) {
  188. let ev = new KeyboardEvent("keydown", {
  189. key,
  190. code: keyCode[key],
  191. });
  192. window.dispatchEvent(ev);
  193. }
  194. function handleShift() {
  195. let currentLayout = keyboard.options.layoutName;
  196. let shiftToggle = currentLayout === "default" ? "shift" : "default";
  197. keyboard.setOptions({
  198. layoutName: shiftToggle,
  199. });
  200. }
  201. $(".virtual-keyboard-window,.keyboard-toggle").bind(
  202. "touchstart mousedown",
  203. function (event) {
  204. event.stopPropagation();
  205. }
  206. );
  207. function saveCanvas(n) {
  208. if (n == undefined) n = 0;
  209. var canvas = document.getElementsByTagName("canvas")[n];
  210. var dataURL = canvas.toDataURL("image/png");
  211. var newTab = window.open("about:blank", "image from canvas");
  212. newTab.document.write("<img src='" + dataURL + "' alt='from canvas'/>");
  213. }