12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.paste = paste;
- var _dom = require("@testing-library/dom");
- var _utils = require("./utils");
- function isSupportedElement(element) {
- return (0, _utils.isElementType)(element, 'input') && Boolean(_utils.editableInputTypes[element.type]) || (0, _utils.isElementType)(element, 'textarea');
- }
- function paste(element, text, init, {
- initialSelectionStart,
- initialSelectionEnd
- } = {}) {
- // TODO: implement for contenteditable
- if (!isSupportedElement(element)) {
- throw new TypeError(`The given ${element.tagName} element is currently unsupported.
- A PR extending this implementation would be very much welcome at https://github.com/testing-library/user-event`);
- }
- if ((0, _utils.isDisabled)(element)) {
- return;
- }
- (0, _utils.eventWrapper)(() => element.focus()); // by default, a new element has it's selection start and end at 0
- // but most of the time when people call "paste", they expect it to paste
- // at the end of the current input value. So, if the selection start
- // and end are both the default of 0, then we'll go ahead and change
- // them to the length of the current value.
- // the only time it would make sense to pass the initialSelectionStart or
- // initialSelectionEnd is if you have an input with a value and want to
- // explicitely start typing with the cursor at 0. Not super common.
- if (element.selectionStart === 0 && element.selectionEnd === 0) {
- (0, _utils.setSelectionRange)(element, initialSelectionStart != null ? initialSelectionStart : element.value.length, initialSelectionEnd != null ? initialSelectionEnd : element.value.length);
- }
- _dom.fireEvent.paste(element, init);
- if (element.readOnly) {
- return;
- }
- text = text.substr(0, (0, _utils.getSpaceUntilMaxLength)(element));
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)(text, element);
- _dom.fireEvent.input(element, {
- inputType: 'insertFromPaste',
- target: {
- value: newValue
- }
- });
- (0, _utils.setSelectionRange)(element, // TODO: investigate why the selection caused by invalid parameters was expected
- {
- newSelectionStart,
- selectionEnd: newSelectionStart
- }, {});
- }
|