maxLength.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.getSpaceUntilMaxLength = getSpaceUntilMaxLength;
  6. var _isElementType = require("../misc/isElementType");
  7. var _getValue = require("./getValue");
  8. var maxLengthSupportedTypes;
  9. (function (maxLengthSupportedTypes) {
  10. maxLengthSupportedTypes["email"] = "email";
  11. maxLengthSupportedTypes["password"] = "password";
  12. maxLengthSupportedTypes["search"] = "search";
  13. maxLengthSupportedTypes["telephone"] = "telephone";
  14. maxLengthSupportedTypes["text"] = "text";
  15. maxLengthSupportedTypes["url"] = "url";
  16. })(maxLengthSupportedTypes || (maxLengthSupportedTypes = {}));
  17. function getSpaceUntilMaxLength(element) {
  18. const value = (0, _getValue.getValue)(element);
  19. /* istanbul ignore if */
  20. if (value === null) {
  21. return undefined;
  22. }
  23. const maxLength = getSanitizedMaxLength(element);
  24. return maxLength ? maxLength - value.length : undefined;
  25. } // can't use .maxLength property because of a jsdom bug:
  26. // https://github.com/jsdom/jsdom/issues/2927
  27. function getSanitizedMaxLength(element) {
  28. var _element$getAttribute;
  29. if (!supportsMaxLength(element)) {
  30. return undefined;
  31. }
  32. const attr = (_element$getAttribute = element.getAttribute('maxlength')) != null ? _element$getAttribute : '';
  33. return /^\d+$/.test(attr) && Number(attr) >= 0 ? Number(attr) : undefined;
  34. }
  35. function supportsMaxLength(element) {
  36. return (0, _isElementType.isElementType)(element, 'textarea') || (0, _isElementType.isElementType)(element, 'input') && Boolean(maxLengthSupportedTypes[element.type]);
  37. }