diff --git a/rules/req-submit-button/README.md b/rules/req-submit-button/README.md new file mode 100644 index 0000000..e69de29 diff --git a/rules/req-submit-button/fixture/success.html b/rules/req-submit-button/fixture/success.html new file mode 100644 index 0000000..dac16f7 --- /dev/null +++ b/rules/req-submit-button/fixture/success.html @@ -0,0 +1,50 @@ + + + + + + HTML Academy: Девайс + + + +
+ + +
+ +
+ +
+ +
+
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ + + + diff --git a/rules/req-submit-button/index.js b/rules/req-submit-button/index.js new file mode 100644 index 0000000..533da65 --- /dev/null +++ b/rules/req-submit-button/index.js @@ -0,0 +1,34 @@ +'use strict'; +const { is_tag_node, attribute_has_value } = require('@linthtml/dom-utils'); + +const formSubmitter = ['button', 'input']; + +const findSubmitters = (node) => { + let submitters = []; + if (is_tag_node(node) && formSubmitter.includes(node.name) && attribute_has_value(node, 'type', 'submit')) { + submitters.push(node); + } + if (node.children) { + for (const child of node.children) { + submitters = submitters.concat(findSubmitters(child)); + } + } + return submitters; +}; + +module.exports = { + name: 'htmlacademy/req-submit-button', + // eslint-disable-next-line camelcase + lint(node, rule_config, {report}) { + if (is_tag_node(node) && node.name === 'form') { + const submitters = findSubmitters(node); + + if(submitters.length === 0) { + report({ + position: node.loc, + message: 'Submitter inside form must have type="submit".', + }); + } + } + } +};