Slots Without Shadow Dom

index.js
  1. Slots Without Shadow Domain
// Custom Template/Slot without Shadow DOM
// template refers to <template></template>
// context refers to stuff inside <your-custom-element> <span slot='bork'>🍭</span> </your-custom-element>
// overall flow of operation translates to YOUR-HTML = TEMPLATE(CONTEXT)
// a map of all <slot name='bork'> elements, where key is the name attribute, and value the <slot name='bork'> node;
consttemplate=newMap(Array.from(this.querySelectorAll('slot').values()).map(i=>[i.name,i]));
// an array of [[name, element]] where name is the slot attribute of html element <span slot='bork'>🍭</span>
constcontext=Array.from(this.querySelectorAll(':scope > *[slot]').values()).map(i=>[i.slot,i]);
console.log(context)
// traverse context, the list of elements with slot='*' property
// name is taken from context (see above)
// element is the thing we want to replace <slot> with
for(const[slotName,element]ofcontext){
// slot is the <slot name='bork'> referenced by <span slot='bork'>🍭</span> inside your custom element
constslot=template.get(slotName);
// if template had the slot bork, replace the entire <slot name='bork'>*</slot> with <span slot='bork'>🍭</span>
if(slot)slot.parentElement.replaceChild(element,slot);// Syntax: replacedNode = parentNode.replaceChild(newChild, oldChild);
// remove the remove slot='bork' from <span slot='bork'>🍭</span>
// NOTE: THIS IS NON SPEC, YOU SHOULD COMMENT THIS OUT FOR FUTURE COMPAT
// element.removeAttribute('slot');
}

It would be handy, if we could choose between using shadow DOM and a simpler version without it. In the similar way we attach slots in connectedCallback, we could import the component itself into the the main document. Here is a very crude example of the custom element without shadowDOM.

Dominus
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Slots Without Shadow Domain

  1. Play 30+ FREE 3-reel and 5-reel slots! Exciting bonus games and prizes to win, just click on a slot machine to play!
  2. Free Slots – Play 7780+ Free Online Casino Games. You’ve just discovered the biggest online, free slots library. Like thousands of slots players who use VegasSlotsOnline.com every day, you now have instant access to over 7780 free online slots that you can play right here.