UNPKG

829 BJavaScriptView Raw
1const childNodes = (node) => {
2 let frag = document.createDocumentFragment()
3 while (node.firstChild) {
4 frag.appendChild(node.firstChild)
5 }
6 return frag
7}
8
9export const mergeSlots = (targetNode, sourceNode) => {
10 let namedSlots = sourceNode.querySelectorAll("slot[name]")
11
12 namedSlots.forEach((slot) => {
13 let name = slot.attributes.name.value
14 let node = targetNode.querySelector(`[slot="${name}"]`)
15 if (!node) {
16 slot.parentNode.replaceChild(childNodes(slot), slot)
17 return
18 }
19 node.removeAttribute("slot")
20 slot.parentNode.replaceChild(node, slot)
21 })
22
23 let defaultSlot = sourceNode.querySelector("slot:not([name])")
24
25 if (defaultSlot) {
26 defaultSlot.parentNode.replaceChild(
27 childNodes(targetNode.innerHTML.trim() ? targetNode : defaultSlot),
28 defaultSlot
29 )
30 }
31}