-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathindex.js
55 lines (48 loc) · 1.18 KB
/
index.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
/**
* @import {Root} from 'hast'
*/
import {parse, stringify} from 'comma-separated-tokens'
import {visit} from 'unist-util-visit'
const lists = new Set([
'viewport',
'keywords',
'robots',
'apple-itunes-app',
'apple-media-service-subscription'
])
/**
* Minify `content` attributes on `meta` elements.
*
* @returns
* Transform.
*/
export default function rehypeMinifyMetaContent() {
/**
* @param {Root} tree
* Tree.
* @returns {undefined}
* Nothing.
*/
return function (tree) {
visit(tree, 'element', function (node) {
if (node.tagName === 'meta') {
let value = node.properties.content
if (typeof value === 'string') {
const name = node.properties.name
if (name === 'viewport') {
value = value
.replace(/(\d+\.\d+)/, function (d) {
return String(Number(d))
})
.replace(/user-scalable=\s*yes/, '')
// Fall through.
}
if (typeof name === 'string' && lists.has(name)) {
value = stringify(parse(value), {padLeft: false})
}
node.properties.content = value
}
}
})
}
}