Skip to content

Commit b95b6e9

Browse files
committed
[ec36-avoid-autoplay] fix : eslint
1 parent f067a0f commit b95b6e9

File tree

2 files changed

+88
-87
lines changed

2 files changed

+88
-87
lines changed

eslint-plugin/lib/rules/avoid-autoplay.js

Lines changed: 54 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,56 +18,61 @@
1818

1919
"use strict";
2020

21-
/** @type {import('eslint').Rule.RuleModule} */
21+
/** @type {import("eslint").Rule.RuleModule} */
2222
module.exports = {
23-
meta: {
24-
type: "suggestion",
25-
docs: {
26-
description: "Disallow autoplay and enforce preload='none' for video and audio elements",
27-
category: "eco-design",
28-
recommended: "warn",
29-
},
30-
messages: {
31-
NoAutoplay: "Avoid using autoplay attribute for <video> and <audio> elements. Reference to Rule RGESN 4.1 : https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/referentiel-general-ecoconception-services-numeriques.html",
32-
EnforcePreloadNone: "Set preload='none' for <video> and <audio> elements. Reference to Rule RGESN 4.1 : https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/referentiel-general-ecoconception-services-numeriques.html",
33-
NoAutoplay_EnforcePreloadNone: "Avoid using autoplay attribute and set preload='none' for <video> and <audio> elements. Reference to Rule RGESN 4.1 : https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/referentiel-general-ecoconception-services-numeriques.html ",
34-
},
35-
schema: [],
23+
meta: {
24+
type: "suggestion",
25+
docs: {
26+
description:
27+
"Disallow autoplay and enforce preload='none' for video and audio elements",
28+
category: "eco-design",
29+
recommended: "warn",
3630
},
37-
create(context) {
38-
return {
39-
JSXOpeningElement(node) {
40-
if (node.name.name === "video" || node.name.name === "audio") {
41-
const autoplayAttr = node.attributes.find(
42-
(attr) => attr.name.name === "autoplay",
43-
);
44-
const preloadAttr = node.attributes.find(
45-
(attr) => attr.name.name === "preload",
46-
);
47-
if(autoplayAttr && (!preloadAttr || preloadAttr.value.value !== "none")) {
48-
context.report({
49-
node: autoplayAttr||preloadAttr,
50-
messageId: "NoAutoplay_EnforcePreloadNone",
51-
});
52-
}
53-
else {
54-
if (autoplayAttr) {
55-
context.report({
56-
node: autoplayAttr,
57-
messageId: "NoAutoplay",
58-
59-
});
60-
}
61-
62-
if (!preloadAttr || preloadAttr.value.value !== "none") {
63-
context.report({
64-
node: preloadAttr || node,
65-
messageId: "EnforcePreloadNone",
66-
});
67-
}
68-
}
69-
}
70-
},
71-
};
31+
messages: {
32+
NoAutoplay:
33+
"Avoid using autoplay attribute for <video> and <audio> elements. Reference to Rule RGESN 4.1 : https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/referentiel-general-ecoconception-services-numeriques.html",
34+
EnforcePreloadNone:
35+
"Set preload='none' for <video> and <audio> elements. Reference to Rule RGESN 4.1 : https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/referentiel-general-ecoconception-services-numeriques.html",
36+
NoAutoplay_EnforcePreloadNone:
37+
"Avoid using autoplay attribute and set preload='none' for <video> and <audio> elements. Reference to Rule RGESN 4.1 : https://www.arcep.fr/mes-demarches-et-services/entreprises/fiches-pratiques/referentiel-general-ecoconception-services-numeriques.html ",
7238
},
39+
schema: [],
40+
},
41+
create(context) {
42+
return {
43+
JSXOpeningElement(node) {
44+
if (node.name.name === "video" || node.name.name === "audio") {
45+
const autoplayAttr = node.attributes.find(
46+
(attr) => attr.name.name === "autoplay",
47+
);
48+
const preloadAttr = node.attributes.find(
49+
(attr) => attr.name.name === "preload",
50+
);
51+
if (
52+
autoplayAttr &&
53+
(!preloadAttr || preloadAttr.value.value !== "none")
54+
) {
55+
context.report({
56+
node: autoplayAttr || preloadAttr,
57+
messageId: "NoAutoplay_EnforcePreloadNone",
58+
});
59+
} else {
60+
if (autoplayAttr) {
61+
context.report({
62+
node: autoplayAttr,
63+
messageId: "NoAutoplay",
64+
});
65+
}
66+
67+
if (!preloadAttr || preloadAttr.value.value !== "none") {
68+
context.report({
69+
node: preloadAttr || node,
70+
messageId: "EnforcePreloadNone",
71+
});
72+
}
73+
}
74+
}
75+
},
76+
};
77+
},
7378
};

eslint-plugin/tests/lib/rules/avoid-autoplay.js

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -30,59 +30,55 @@ const RuleTester = require("eslint").RuleTester;
3030
//------------------------------------------------------------------------------
3131

3232
const ruleTester = new RuleTester({
33-
parserOptions: {
34-
ecmaVersion: 2021,
35-
sourceType: "module",
36-
ecmaFeatures: {
37-
jsx: true,
38-
},
33+
parserOptions: {
34+
ecmaVersion: 2021,
35+
sourceType: "module",
36+
ecmaFeatures: {
37+
jsx: true,
3938
},
39+
},
4040
});
4141
const expectedError1 = {
42-
messageId: "NoAutoplay",
43-
type: "JSXAttribute",
42+
messageId: "NoAutoplay",
43+
type: "JSXAttribute",
4444
};
4545
const expectedError2 = {
46-
messageId: "EnforcePreloadNone",
47-
type: "JSXAttribute",
46+
messageId: "EnforcePreloadNone",
47+
type: "JSXAttribute",
4848
};
4949
const expectedError3 = {
50-
messageId: "NoAutoplay_EnforcePreloadNone",
51-
type: "JSXAttribute",
50+
messageId: "NoAutoplay_EnforcePreloadNone",
51+
type: "JSXAttribute",
5252
};
5353

54-
5554
ruleTester.run("autoplay-audio-video-attribute-not-present", rule, {
56-
valid: [
57-
`
55+
valid: [
56+
`
5857
<audio preload="none"></audio>
5958
`,
60-
'<video preload="none"></video>',
61-
],
59+
'<video preload="none"></video>',
60+
],
6261

63-
invalid: [
64-
{
65-
code: `
62+
invalid: [
63+
{
64+
code: `
6665
<audio autoplay></audio>
6766
`,
68-
errors: [expectedError3],
69-
},
70-
{
71-
code: `
67+
errors: [expectedError3],
68+
},
69+
{
70+
code: `
7271
<video autoplay preload="auto"></video>
7372
`,
74-
errors: [expectedError3],
75-
}
76-
,
77-
{
78-
code:'<video autoplay preload="none"></video>',
79-
errors: [expectedError1],
80-
}
81-
,
82-
{
83-
code:'<audio preload="auto"></audio>',
84-
errors: [expectedError2],
85-
}
86-
87-
],
73+
errors: [expectedError3],
74+
},
75+
{
76+
code: '<video autoplay preload="none"></video>',
77+
errors: [expectedError1],
78+
},
79+
{
80+
code: '<audio preload="auto"></audio>',
81+
errors: [expectedError2],
82+
},
83+
],
8884
});

0 commit comments

Comments
 (0)