You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.5 KiB
50 lines
1.5 KiB
2 years ago
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.getSpaceUntilMaxLength = getSpaceUntilMaxLength;
|
||
|
|
||
|
var _isElementType = require("../misc/isElementType");
|
||
|
|
||
|
var _getValue = require("./getValue");
|
||
|
|
||
|
var maxLengthSupportedTypes;
|
||
|
|
||
|
(function (maxLengthSupportedTypes) {
|
||
|
maxLengthSupportedTypes["email"] = "email";
|
||
|
maxLengthSupportedTypes["password"] = "password";
|
||
|
maxLengthSupportedTypes["search"] = "search";
|
||
|
maxLengthSupportedTypes["telephone"] = "telephone";
|
||
|
maxLengthSupportedTypes["text"] = "text";
|
||
|
maxLengthSupportedTypes["url"] = "url";
|
||
|
})(maxLengthSupportedTypes || (maxLengthSupportedTypes = {}));
|
||
|
|
||
|
function getSpaceUntilMaxLength(element) {
|
||
|
const value = (0, _getValue.getValue)(element);
|
||
|
/* istanbul ignore if */
|
||
|
|
||
|
if (value === null) {
|
||
|
return undefined;
|
||
|
}
|
||
|
|
||
|
const maxLength = getSanitizedMaxLength(element);
|
||
|
return maxLength ? maxLength - value.length : undefined;
|
||
|
} // can't use .maxLength property because of a jsdom bug:
|
||
|
// https://github.com/jsdom/jsdom/issues/2927
|
||
|
|
||
|
|
||
|
function getSanitizedMaxLength(element) {
|
||
|
var _element$getAttribute;
|
||
|
|
||
|
if (!supportsMaxLength(element)) {
|
||
|
return undefined;
|
||
|
}
|
||
|
|
||
|
const attr = (_element$getAttribute = element.getAttribute('maxlength')) != null ? _element$getAttribute : '';
|
||
|
return /^\d+$/.test(attr) && Number(attr) >= 0 ? Number(attr) : undefined;
|
||
|
}
|
||
|
|
||
|
function supportsMaxLength(element) {
|
||
|
return (0, _isElementType.isElementType)(element, 'textarea') || (0, _isElementType.isElementType)(element, 'input') && Boolean(maxLengthSupportedTypes[element.type]);
|
||
|
}
|