diff --git a/lib/rules/jsx-no-target-blank.js b/lib/rules/jsx-no-target-blank.js index e957fb509a..d83abc53fd 100644 --- a/lib/rules/jsx-no-target-blank.js +++ b/lib/rules/jsx-no-target-blank.js @@ -65,6 +65,19 @@ function hasDynamicLink(node, linkAttribute) { } } +function attributeValuePossiblyRel(value) { + if ( + typeof value === 'string' + && ( + (value && value.toLowerCase() === 'noreferrer') + || (value && value.toLowerCase() === 'noopener noreferrer') + || (value && value.toLowerCase() === 'noreferrer noopener') + ) + ) { + return true; + } +} + function getStringFromValue(value) { if (value) { if (value.type === 'Literal') { @@ -76,24 +89,10 @@ function getStringFromValue(value) { } const expr = value.expression; if (expr.type === 'ConditionalExpression') { - if ( - typeof expr.consequent.value === 'string' - && ( - (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noreferrer') - || (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noopener noreferrer') - || (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noreferrer noopener') - ) - ) { + if (attributeValuePossiblyRel(expr.consequent.value)) { return expr.consequent.value; } - if ( - typeof expr.alternate.value === 'string' - && ( - (expr.alternate.value && expr.alternate.value.toLowerCase() === 'noreferrer') - || (expr.alternate.value && expr.alternate.value.toLowerCase() === 'noopener noreferrer') - || (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noreferrer noopener') - ) - ) { + if (attributeValuePossiblyRel(expr.alternate.value)) { return expr.alternate.value; } } diff --git a/tests/lib/rules/jsx-no-target-blank.js b/tests/lib/rules/jsx-no-target-blank.js index aad51048d4..e110f72698 100644 --- a/tests/lib/rules/jsx-no-target-blank.js +++ b/tests/lib/rules/jsx-no-target-blank.js @@ -156,6 +156,12 @@ ruleTester.run('jsx-no-target-blank', rule, { { code: '', }, + { + code: '', + }, + { + code: '', + }, ]), invalid: parsers.all([ {