simulator.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. define([
  2. "inputmask.dependencyLib",
  3. "inputmask"
  4. ], function($, Inputmask) {
  5. $.caret = function(input, begin, end) {
  6. input = input.nodeName ? input : input[0];
  7. var range;
  8. if (typeof begin === "number") {
  9. end = (typeof end == "number") ? end : begin;
  10. // if (!$(input).is(":visible")) {
  11. // return;
  12. // }
  13. if (input.setSelectionRange) {
  14. input.selectionStart = begin;
  15. input.selectionEnd = end;
  16. } else if (window.getSelection) {
  17. range = document.createRange();
  18. if (input.firstChild === undefined) {
  19. var textNode = document.createTextNode("");
  20. input.appendChild(textNode);
  21. }
  22. range.setStart(input.firstChild, begin < input.value.length ? begin : input.value.length);
  23. range.setEnd(input.firstChild, end < input.value.length ? end : input.value.length);
  24. range.collapse(true);
  25. var sel = window.getSelection();
  26. sel.removeAllRanges();
  27. sel.addRange(range);
  28. //input.focus();
  29. } else if (input.createTextRange) {
  30. range = input.createTextRange();
  31. range.collapse(true);
  32. range.moveEnd("character", end);
  33. range.moveStart("character", begin);
  34. range.select();
  35. }
  36. } else {
  37. if (input.setSelectionRange) {
  38. begin = input.selectionStart;
  39. end = input.selectionEnd;
  40. } else if (window.getSelection) {
  41. range = window.getSelection().getRangeAt(0);
  42. if (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) {
  43. begin = range.startOffset;
  44. end = range.endOffset;
  45. }
  46. } else if (document.selection && document.selection.createRange) {
  47. range = document.selection.createRange();
  48. begin = 0 - range.duplicate().moveStart("character", -100000);
  49. end = begin + range.text.length;
  50. }
  51. /*eslint-disable consistent-return */
  52. return {
  53. "begin": begin,
  54. "end": end
  55. };
  56. /*eslint-enable consistent-return */
  57. }
  58. };
  59. $.fn = $.fn || $.prototype;
  60. $.fn.SendKey = function(keyCode, modifier) {
  61. var sendDummyKeydown = false;
  62. if (Object.prototype.toString.call(keyCode) == '[object String]') {
  63. keyCode = keyCode.charCodeAt(0);
  64. sendDummyKeydown = true;
  65. }
  66. switch (keyCode) {
  67. case Inputmask.keyCode.LEFT:
  68. {
  69. if (modifier == undefined) {
  70. var pos = $.caret(this);
  71. $.caret(this, pos.begin - 1);
  72. break;
  73. }
  74. }
  75. case Inputmask.keyCode.RIGHT:
  76. {
  77. if (modifier == undefined) {
  78. var pos = $.caret(this);
  79. $.caret(this, pos.begin + 1);
  80. break;
  81. }
  82. }
  83. default:
  84. {
  85. var keydown = $.Event("keydown"),
  86. keypress = $.Event("keypress"),
  87. keyup = $.Event("keyup");
  88. if (!sendDummyKeydown) {
  89. keydown.keyCode = keyCode;
  90. if (modifier == Inputmask.keyCode.CONTROL)
  91. keydown.ctrlKey = true;
  92. }
  93. $(this).trigger(keydown);
  94. if (!keydown.isDefaultPrevented()) {
  95. keypress.keyCode = keyCode;
  96. if (modifier == Inputmask.keyCode.CONTROL)
  97. keypress.ctrlKey = true;
  98. $(this).trigger(keypress);
  99. //if (!keypress.isDefaultPrevented()) {
  100. keyup.keyCode = keyCode;
  101. if (modifier == Inputmask.keyCode.CONTROL)
  102. keyup.ctrlKey = true;
  103. $(this).trigger(keyup);
  104. //}
  105. }
  106. }
  107. }
  108. }
  109. if (!('append' in $.fn)) {
  110. $.fn.append = function(child) {
  111. var input = this.nodeName ? this : this[0];
  112. input.insertAdjacentHTML('beforeend', child);
  113. };
  114. }
  115. if (!('remove' in $.fn)) {
  116. $.fn.remove = function() {
  117. var input = this.nodeName ? this : this[0];
  118. if (input !== undefined && input !== null) {
  119. input.parentElement.removeChild(input);
  120. input = undefined;
  121. }
  122. };
  123. }
  124. if (!('val' in $.fn)) {
  125. $.fn.val = function(value) {
  126. var input = this.nodeName ? this : this[0];
  127. if (value !== undefined) {
  128. if (input.inputmask) {
  129. input.inputmask._valueSet(value);
  130. $(input).trigger("setvalue");
  131. } else input.value = value;
  132. }
  133. return input.value;
  134. };
  135. }
  136. $.fn.Type = function(inputStr) {
  137. var input = this.nodeName ? this : this[0],
  138. $input = $(input);
  139. $.each(inputStr.split(''), function(ndx, lmnt) {
  140. $input.SendKey(lmnt);
  141. });
  142. }
  143. $.fn.paste = function(inputStr) {
  144. var input = this.nodeName ? this : this[0],
  145. $input = $(input),
  146. isRTL = input.inputmask.isRTL;
  147. window.clipboardData ? window.clipboardData.setData("Text", inputStr) : $input[0].inputmask._valueSet(isRTL ? inputStr.split('').reverse().join('') : inputStr);
  148. $input.trigger('paste');
  149. }
  150. });