Skip to content

Commit d979dd4

Browse files
committed
resolved alternate, added test cases and helper func
1 parent d72a24a commit d979dd4

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

lib/rules/jsx-no-target-blank.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,19 @@ function hasDynamicLink(node, linkAttribute) {
6565
}
6666
}
6767

68+
function attributeValuePossiblyRel(value) {
69+
if (
70+
typeof value === 'string'
71+
&& (
72+
(value && value.toLowerCase() === 'noreferrer')
73+
|| (value && value.toLowerCase() === 'noopener noreferrer')
74+
|| (value && value.toLowerCase() === 'noreferrer noopener')
75+
)
76+
) {
77+
return true;
78+
}
79+
}
80+
6881
function getStringFromValue(value) {
6982
if (value) {
7083
if (value.type === 'Literal') {
@@ -76,24 +89,10 @@ function getStringFromValue(value) {
7689
}
7790
const expr = value.expression;
7891
if (expr.type === 'ConditionalExpression') {
79-
if (
80-
typeof expr.consequent.value === 'string'
81-
&& (
82-
(expr.consequent.value && expr.consequent.value.toLowerCase() === 'noreferrer')
83-
|| (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noopener noreferrer')
84-
|| (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noreferrer noopener')
85-
)
86-
) {
92+
if (attributeValuePossiblyRel(expr.consequent.value)) {
8793
return expr.consequent.value;
8894
}
89-
if (
90-
typeof expr.alternate.value === 'string'
91-
&& (
92-
(expr.alternate.value && expr.alternate.value.toLowerCase() === 'noreferrer')
93-
|| (expr.alternate.value && expr.alternate.value.toLowerCase() === 'noopener noreferrer')
94-
|| (expr.consequent.value && expr.consequent.value.toLowerCase() === 'noreferrer noopener')
95-
)
96-
) {
95+
if (attributeValuePossiblyRel(expr.alternate.value)) {
9796
return expr.alternate.value;
9897
}
9998
}

tests/lib/rules/jsx-no-target-blank.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ ruleTester.run('jsx-no-target-blank', rule, {
156156
{
157157
code: '<a href={href} target="_blank" rel={isExternal ? "noopener" : "noopener noreferrer"} />',
158158
},
159+
{
160+
code: '<a href={href} target="_blank" rel={isExternal ? 3 : "noopener noreferrer"} />',
161+
},
162+
{
163+
code: '<a href={href} target="_blank" rel={isExternal ? "noopener noreferrer" : "3"} />',
164+
},
159165
]),
160166
invalid: parsers.all([
161167
{

0 commit comments

Comments
 (0)