simulator.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. var keyCodes = {
  2. ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108,
  3. NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91
  4. }
  5. function caret(input, begin, end) {
  6. var npt = input.jquery && input.length > 0 ? input[0] : input, range;
  7. if (typeof begin == 'number') {
  8. if (!$(input).is(':visible')) {
  9. return;
  10. }
  11. end = (typeof end == 'number') ? end : begin;
  12. if (npt.setSelectionRange) {
  13. npt.selectionStart = begin;
  14. npt.selectionEnd = end;
  15. } else if (npt.createTextRange) {
  16. range = npt.createTextRange();
  17. range.collapse(true);
  18. range.moveEnd('character', end);
  19. range.moveStart('character', begin);
  20. range.select();
  21. }
  22. } else {
  23. if (!$(input).is(':visible')) {
  24. return { "begin": 0, "end": 0 };
  25. }
  26. if (npt.setSelectionRange) {
  27. begin = npt.selectionStart;
  28. end = npt.selectionEnd;
  29. } else if (document.selection && document.selection.createRange) {
  30. range = document.selection.createRange();
  31. begin = 0 - range.duplicate().moveStart('character', -100000);
  32. end = begin + range.text.length;
  33. }
  34. return { "begin": begin, "end": end };
  35. }
  36. };
  37. $.fn.SendKey = function (keyCode, modifier) {
  38. var sendDummyKeydown = false;
  39. if (Object.prototype.toString.call(keyCode) == '[object String]') {
  40. keyCode = keyCode.charCodeAt(0);
  41. sendDummyKeydown = true;
  42. }
  43. switch (keyCode) {
  44. case keyCodes.LEFT: {
  45. if (modifier == undefined) {
  46. var pos = caret(this);
  47. caret(this, pos.begin - 1);
  48. break;
  49. }
  50. }
  51. case keyCodes.RIGHT: {
  52. if (modifier == undefined) {
  53. var pos = caret(this);
  54. caret(this, pos.begin + 1);
  55. break;
  56. }
  57. }
  58. default: {
  59. var keydown = $.Event("keydown"),
  60. keypress = $.Event("keypress"),
  61. keyup = $.Event("keyup");
  62. if (!sendDummyKeydown) {
  63. keydown.keyCode = keyCode;
  64. if (modifier == keyCodes.CONTROL)
  65. keydown.ctrlKey = true;
  66. }
  67. $(this).trigger(keydown);
  68. if (!keydown.isDefaultPrevented()) {
  69. keypress.keyCode = keyCode;
  70. if (modifier == keyCodes.CONTROL)
  71. keypress.ctrlKey = true;
  72. $(this).trigger(keypress);
  73. if (!keypress.isDefaultPrevented()) {
  74. keyup.keyCode = keyCode;
  75. if (modifier == keyCodes.CONTROL)
  76. keyup.ctrlKey = true;
  77. $(this).trigger(keyup);
  78. }
  79. }
  80. }
  81. }
  82. }
  83. $.fn.Type = function (inputStr) {
  84. var $input = $(this);
  85. $.each(inputStr.split(''), function (ndx, lmnt) {
  86. $input.SendKey(lmnt);
  87. });
  88. }
  89. $.fn.paste = function (inputStr) {
  90. var $input = $(this);
  91. $input[0]._valueSet(inputStr);
  92. $input.trigger('paste');
  93. }