Sha256: f2826178666235ec2c212b11b359317076f481ca4fc3d96a2cf137c1b17c3888

Contents?: true

Size: 2 KB

Versions: 271

Compression:

Stored size: 2 KB

Contents

// Select and textarea is always allowed
if (virtualNode.props.nodeName !== 'input') {
	return true;
}

const number = ['text', 'search', 'number'];
const url = ['text', 'search', 'url'];
const allowedTypesMap = {
	bday: ['text', 'search', 'date'],
	email: ['text', 'search', 'email'],
	'cc-exp': ['text', 'search', 'month'],
	'street-address': ['text'], // Issue: https://github.com/dequelabs/axe-core/issues/1161
	tel: ['text', 'search', 'tel'],
	'cc-exp-month': number,
	'cc-exp-year': number,
	'transaction-amount': number,
	'bday-day': number,
	'bday-month': number,
	'bday-year': number,
	'new-password': ['text', 'search', 'password'],
	'current-password': ['text', 'search', 'password'],
	url: url,
	photo: url,
	impp: url
};

if (typeof options === 'object') {
	// Merge in options
	Object.keys(options).forEach(key => {
		if (!allowedTypesMap[key]) {
			allowedTypesMap[key] = [];
		}
		allowedTypesMap[key] = allowedTypesMap[key].concat(options[key]);
	});
}

const autocomplete = virtualNode.attr('autocomplete');
const autocompleteTerms = autocomplete
	.split(/\s+/g)
	.map(term => term.toLowerCase());

const purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];
if (axe.commons.text.autocomplete.stateTerms.includes(purposeTerm)) {
	return true;
}

const allowedTypes = allowedTypesMap[purposeTerm];

/**
 * Note:
 * Inconsistent response for `node.type` across browsers, hence resolving and sanitizing using getAttribute
 * Example:
 * Firefox returns `node.type` as `text` for `type='month'`
 *
 * Reference HTML Spec - https://html.spec.whatwg.org/multipage/input.html#the-input-element to filter allowed values for `type`
 * and sanitize (https://html.spec.whatwg.org/multipage/input.html#value-sanitization-algorithm)
 */
let type = virtualNode.hasAttr('type')
	? axe.commons.text.sanitize(virtualNode.attr('type')).toLowerCase()
	: 'text';
type = axe.utils.validInputTypes().includes(type) ? type : 'text';

if (typeof allowedTypes === 'undefined') {
	return type === 'text';
}

return allowedTypes.includes(type);

Version data entries

271 entries across 271 versions & 1 rubygems

Version Path
govuk_publishing_components-30.4.1 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-30.4.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-30.3.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-30.2.1 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-30.2.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-30.1.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-30.0.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.15.3 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.15.2 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.15.1 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.15.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.14.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.13.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.12.1 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.12.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.11.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.10.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.9.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.8.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js
govuk_publishing_components-29.7.0 node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js