@@ -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+
6881function 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 }
0 commit comments