Skip to content

Commit fa2bcb5

Browse files
Merge pull request #64 from htmlacademy/feature/req-meta-viewport
req-meta-viewport
2 parents ea75e6d + b4de5ec commit fa2bcb5

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

rules/req-meta-viewport/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# htmlacademy/req-meta-viewport
2+
3+
Правило проверяет наличие `<meta name="viewport" content="width=device-width,initial-scale=1">` в `<head>`. Правило принимает значения `true` или `false`
4+
5+
## true
6+
В `<head>` находится `<meta name="viewport" content="width=device-width,initial-scale=1">`.
7+
8+
Проблемными считаются следующие шаблоны:
9+
```html
10+
<head>
11+
...
12+
</head>
13+
```
14+
15+
Следующие шаблоны **не** считаются проблемами:
16+
```html
17+
<head>
18+
<meta name="viewport" content="width=device-width,initial-scale=1">
19+
</head>
20+
```
21+

rules/req-meta-viewport/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const { is_tag_node, attribute_has_value } = require("@linthtml/dom-utils");
2+
3+
module.exports = {
4+
name: "htmlacademy/req-meta-viewport",
5+
lint(node, rule_config, { report }) {
6+
if (is_tag_node(node) && node.name === "head" ) {
7+
const metaViewport = node.children.filter((child) =>
8+
child.name === "meta" && attribute_has_value(child, 'name', 'viewport')
9+
);
10+
const hasViewport = metaViewport.some((meta) => {
11+
return attribute_has_value(meta, 'content', /width=device-width,.*initial-scale=1|initial-scale=1,.*width=device-width/);
12+
});
13+
if (hasViewport === false) {
14+
report({
15+
position: node.loc,
16+
message: `The <head> tag should have a <meta name="viewport"> attribute.`,
17+
});
18+
}
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)