-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreplaceSlotsContent.js
29 lines (22 loc) · 1000 Bytes
/
replaceSlotsContent.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
const {parseHTML} = require('linkedom');
const defaultSlotName = 'default';
const replaceTemplatesSlotsContents = require("./replaceTemplatesSlotsContents");
const getFragmentOuterHtml = require("./getFragmentOuterHtml");
function replaceSlotsContent(baseTemplate, slotsContents) {
const {document} = parseHTML(baseTemplate);
const slots = document.querySelectorAll('slot');
const slotsLength = slots.length;
for (let i = 0; i < slotsLength; i++) {
let slot = slots.item(i);
let slotAttributes = slot.attributes;
let nameAttribute = slotAttributes.getNamedItem('name');
let slotName = nameAttribute ? nameAttribute.value : defaultSlotName;
if (slotsContents[slotName] === undefined) {
continue;
}
slot.innerHTML = slotsContents[slotName];
}
replaceTemplatesSlotsContents(document, slotsContents, replaceSlotsContent);
return getFragmentOuterHtml(document);
}
module.exports = replaceSlotsContent;