File tree Expand file tree Collapse file tree 7 files changed +52
-6
lines changed Expand file tree Collapse file tree 7 files changed +52
-6
lines changed Original file line number Diff line number Diff line change 28
28
"node/no-missing-import" : " error" ,
29
29
"node/no-unpublished-import" : " error" ,
30
30
"vue/html-indent" : [" error" , 4 ],
31
- "vue/max-attributes-per-line" : " off"
31
+ "vue/max-attributes-per-line" : " off" ,
32
+
33
+ "require-noopener" : " error"
32
34
}
33
35
}
Original file line number Diff line number Diff line change 2
2
"eslint.validate" : [
3
3
" javascript" ,
4
4
{"autoFix" : true , "language" : " vue" }
5
- ]
5
+ ],
6
+ "eslint.options" : {
7
+ "rulePaths" : [" eslint-rules" ]
8
+ }
6
9
}
Original file line number Diff line number Diff line change
1
+ {
2
+ "root" : true ,
3
+ "extends" : [
4
+ " mysticatea" ,
5
+ " mysticatea/node"
6
+ ],
7
+ "rules" : {
8
+ "no-console" : " off"
9
+ }
10
+ }
Original file line number Diff line number Diff line change
1
+ "use strict"
2
+
3
+ module . exports = ( context ) =>
4
+ context . parserServices . defineTemplateBodyVisitor ( {
5
+ "VElement[name='a']" ( node ) {
6
+ const attributes = node . startTag . attributes
7
+ const hasTargetBlank = attributes . some ( attribute =>
8
+ ! attribute . directive &&
9
+ attribute . key . name === "target" &&
10
+ attribute . value != null &&
11
+ attribute . value . value === "_blank"
12
+ )
13
+ const hasRelNoopener = attributes . some ( attribute =>
14
+ ! attribute . directive &&
15
+ attribute . key . name === "rel" &&
16
+ attribute . value != null &&
17
+ attribute . value . value === "noopener"
18
+ )
19
+
20
+ if ( hasTargetBlank && ! hasRelNoopener ) {
21
+ context . report ( {
22
+ node : node . startTag ,
23
+ message : "Use 'rel=\"noopener\" to open new tab." ,
24
+ * fix ( fixer ) {
25
+ const lastAttribute = attributes [ attributes . length - 1 ]
26
+ yield fixer . insertTextAfter ( lastAttribute , " rel=\"noopener\"" )
27
+ } ,
28
+ } )
29
+ }
30
+ } ,
31
+ } )
Original file line number Diff line number Diff line change 2
2
<div class =" app__root" >
3
3
<div class =" app__header" >
4
4
<div class =" app__header-title" >
5
- Playground for <a href =" https://github.com/vuejs/eslint-plugin-vue#readme" target =" _blank" >eslint-plugin-vue</a >.
5
+ Playground for <a href =" https://github.com/vuejs/eslint-plugin-vue#readme" target =" _blank" rel = " noopener " >eslint-plugin-vue</a >.
6
6
</div >
7
7
<label class =" app__header-option-item" >
8
8
<select v-model.number =" indentSize" >
54
54
v-for =" (v, name) in versions"
55
55
:key =" name"
56
56
>
57
- <a :href =" 'https://github.com/' + v.repo" target =" _blank" >{{ name }}</a >
57
+ <a :href =" 'https://github.com/' + v.repo" target =" _blank" rel = " noopener " >{{ name }}</a >
58
58
v{{ v.version }}
59
59
</div >
60
60
</div >
Original file line number Diff line number Diff line change 14
14
:key =" i"
15
15
>
16
16
<md-icon kind =" warning" />
17
- {{ m.line }}:{{ m.column }}{{ space(m) }}{{ m.message }} (<a :href =" url(m.ruleId)" target =" _blank" v-if =" m.ruleId != null" >{{ m.ruleId }}</a ><span v-else >FATAL</span >)
17
+ {{ m.line }}:{{ m.column }}{{ space(m) }}{{ m.message }} (<a :href =" url(m.ruleId)" target =" _blank" v-if =" m.ruleId != null" rel = " noopener " >{{ m.ruleId }}</a ><span v-else >FATAL</span >)
18
18
</li >
19
19
</ul >
20
20
</template >
Original file line number Diff line number Diff line change 42
42
<div class =" rule-select-category__rule-name" >
43
43
{{ stripPrefix(rule.name) }}
44
44
</div >
45
- <a class =" rule-select-category__rule-link" :href =" url(rule.name)" target =" _blank" >
45
+ <a class =" rule-select-category__rule-link" :href =" url(rule.name)" target =" _blank" rel = " noopener " >
46
46
<md-icon kind =" launch" title =" Open document" />
47
47
</a >
48
48
</label >
You can’t perform that action at this time.
0 commit comments