simulator.js 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. (function ($) {
  2. $.keyCodes = {
  3. 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,
  4. 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
  5. }
  6. $.caret = function (input, begin, end) {
  7. var npt = input.jquery && input.length > 0 ? input[0] : input, range;
  8. if (typeof begin == 'number') {
  9. if (!$(input).is(':visible')) {
  10. return;
  11. }
  12. end = (typeof end == 'number') ? end : begin;
  13. if (npt.setSelectionRange) {
  14. npt.selectionStart = begin;
  15. npt.selectionEnd = end;
  16. } else if (npt.createTextRange) {
  17. range = npt.createTextRange();
  18. range.collapse(true);
  19. range.moveEnd('character', end);
  20. range.moveStart('character', begin);
  21. range.select();
  22. }
  23. } else {
  24. if (!$(input).is(':visible')) {
  25. return { "begin": 0, "end": 0 };
  26. }
  27. if (npt.setSelectionRange) {
  28. begin = npt.selectionStart;
  29. end = npt.selectionEnd;
  30. } else if (document.selection && document.selection.createRange) {
  31. range = document.selection.createRange();
  32. begin = 0 - range.duplicate().moveStart('character', -100000);
  33. end = begin + range.text.length;
  34. }
  35. return { "begin": begin, "end": end };
  36. }
  37. };
  38. $.fn.SendKey = function (keyCode, modifier) {
  39. var sendDummyKeydown = false;
  40. if (Object.prototype.toString.call(keyCode) == '[object String]') {
  41. keyCode = keyCode.charCodeAt(0);
  42. sendDummyKeydown = true;
  43. }
  44. switch (keyCode) {
  45. case $.keyCodes.LEFT: {
  46. if (modifier == undefined) {
  47. var pos = $.caret(this);
  48. $.caret(this, pos.begin - 1);
  49. break;
  50. }
  51. }
  52. case $.keyCodes.RIGHT: {
  53. if (modifier == undefined) {
  54. var pos = $.caret(this);
  55. $.caret(this, pos.begin + 1);
  56. break;
  57. }
  58. }
  59. default: {
  60. var keydown = $.Event("keydown"),
  61. keypress = $.Event("keypress"),
  62. keyup = $.Event("keyup");
  63. if (!sendDummyKeydown) {
  64. keydown.keyCode = keyCode;
  65. if (modifier == $.keyCodes.CONTROL)
  66. keydown.ctrlKey = true;
  67. }
  68. $(this).trigger(keydown);
  69. if (!keydown.isDefaultPrevented()) {
  70. keypress.keyCode = keyCode;
  71. if (modifier == $.keyCodes.CONTROL)
  72. keypress.ctrlKey = true;
  73. $(this).trigger(keypress);
  74. if (!keypress.isDefaultPrevented()) {
  75. keyup.keyCode = keyCode;
  76. if (modifier == $.keyCodes.CONTROL)
  77. keyup.ctrlKey = true;
  78. $(this).trigger(keyup);
  79. }
  80. }
  81. }
  82. }
  83. }
  84. $.fn.Type = function (inputStr) {
  85. var $input = $(this);
  86. $.each(inputStr.split(''), function (ndx, lmnt) {
  87. $input.SendKey(lmnt);
  88. });
  89. }
  90. $.fn.paste = function (inputStr) {
  91. var $input = $(this);
  92. window.clipboardData ? window.clipboardData.setData("Text", inputStr) : $input[0]._valueSet(inputStr);
  93. $input.trigger('paste');
  94. }
  95. })(jQuery);