-
Notifications
You must be signed in to change notification settings - Fork 160
Expand file tree
/
Copy pathBase.js
More file actions
35 lines (28 loc) · 876 Bytes
/
Base.js
File metadata and controls
35 lines (28 loc) · 876 Bytes
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
import HEML, { createMetaElement } from '@heml/utils' // eslint-disable-line no-unused-vars
import Meta from './Meta'
import isAbsoluteUrl from 'is-absolute-url'
import { resolve } from 'url'
import { has, first } from 'lodash'
export default createMetaElement('base', {
parent: [ 'head' ],
children: false,
unique: true,
defaultAttrs: { href: '' },
render (attrs, contents) {
Meta.set('base', attrs.href)
return false
},
preRender ({ $ }) {
const base = first($.findNodes('base'))
if (base) {
const baseUrl = base.attr('href')
$('[href], [src]')
.each((i, node) => {
const attr = has(node.attribs, 'href') ? 'href' : 'src'
if (has(node.attribs, attr) && !isAbsoluteUrl(node.attribs[attr])) {
node.attribs[attr] = resolve(baseUrl, node.attribs[attr])
}
})
}
}
})