- From: Frank Lemanschik <notifications@github.com>
- Date: Mon, 05 Oct 2020 18:53:37 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/831/703981869@github.com>
I think we got a declarativ shadowroot already via the script tag :)
https://dev.to/frankdspeed/the-html-component-pattern-hcp-3pkp
```html
<host-element>
<template shadowroot="open">
<style>shadow styles</style>
<h2>Shadow Content</h2>
<slot></slot>
</template>
<script defer>
// Hydrate
const template = document.currentScript.previousElementSibling;
const customElement = document.currentScript.parentElement;
const shadow = customElement
.attachShadow({mode: 'open'})
.appendChild(template.content.cloneNode(true));
</script>
<h2>Light content</h2>
</host-element>
<!-- would be parsed into this DOM tree: -->
<host-element>
#shadow-root (open)
<style>shadow styles</style>
<h2>Shadow Content</h2>
<slot>
↳ <h2> reveal
</slot>
<h2>Light content</h2>
</host-element>
</html>
```
here a codepen: https://codepen.io/frank-dspeed/pen/XWKrezW?editors=1011
and while that looks complex for novice developers we could wrap that into a helper util function like
```html
<script defer>
// Hydrate
const declareShadowDom = declareIngEl=>{
const template = document.currentScript.previousElementSibling;
const customElement = document.currentScript.parentElement;
const shadow = customElement
.attachShadow({mode: 'open'})
.appendChild(template.content.cloneNode(true));
}
declareShadowDom(document.currentScript)
</script>
```
i hope you get the idea i think this is declarative the declareShadowDom can also come from a file so it gets a single like script
```html
<script src="modules/declare-shadowdom.js" defer><script>
```
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/831#issuecomment-703981869
Received on Tuesday, 6 October 2020 01:53:50 UTC