-
Notifications
You must be signed in to change notification settings - Fork 8
/
no-event-shorthand.js
126 lines (123 loc) · 2.29 KB
/
no-event-shorthand.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
'use strict';
const rule = require( '../../src/rules/no-event-shorthand' );
const RuleTester = require( '../../tools/rule-tester' );
const ruleTester = new RuleTester();
const ajaxEvents = [
'ajaxStart',
'ajaxStop',
'ajaxComplete',
'ajaxError',
'ajaxSuccess',
'ajaxSend'
];
const forbidden = [
// Browser
'error',
'resize',
'scroll',
'unload',
// Form
'blur',
'change',
'focus',
'focusin',
'focusout',
'select',
'submit',
// Keyboard
'keydown',
'keypress',
'keyup',
// Mouse
'click',
'contextmenu',
'dblclick',
'hover',
'mousedown',
'mouseenter',
'mouseleave',
'mousemove',
'mouseout',
'mouseover',
'mouseup',
...ajaxEvents
];
const valid = [];
const invalid = [];
forbidden.forEach( ( method ) => {
const error = 'Prefer .on or .trigger to .' + method;
valid.push(
{
code: method + '()',
docgen: false
},
{
code: '$.' + method + '()',
docgen: false
},
{
code: '[].' + method + '()',
docgen: false
},
{
code: '$div.on("' + method + '", fn)'
},
{
code: '$div.trigger("' + method + '")'
},
{
code: '$method(x).' + method + '()',
docgen: false
},
{
code: 'div.' + method,
docgen: false
}
);
invalid.push(
{
code: '$("div").' + method + '(handler)',
errors: [ error ],
output: '$("div").on("' + method + '", handler)'
},
{
code: '$div.' + method + '()',
errors: [ error ],
output: '$div.trigger("' + method + '")'
},
{
code: 'this.prop.$div.' + method + '(handler)',
errors: [ error ],
output: 'this.prop.$div.on("' + method + '", handler)',
docgen: false
},
{
code: '$("div").first().' + method + '()',
errors: [ error ],
output: '$("div").first().trigger("' + method + '")',
docgen: false
},
{
code: '$("div").append($("input").' + method + '())',
errors: [ error ],
output: '$("div").append($("input").trigger("' + method + '"))',
docgen: false
}
);
} );
valid.push(
// Don't conflict with Ajax load
'$div.load( "url", handler )',
...ajaxEvents.map( ( eventName ) => ( {
code: '$div.' + eventName + '()',
options: [ { allowAjaxEvents: true } ]
} ) ),
...ajaxEvents.map( ( eventName ) => ( {
code: '$div.on("' + eventName + '", fn)',
options: [ { allowAjaxEvents: true } ]
} ) )
);
ruleTester.run( 'no-event-shorthand', rule, {
valid,
invalid
} );