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
"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]); |
|
} |