simulator.js 4.9 KB

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