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([
{