- From: Mayank via GitHub <sysbot+gh@w3.org>
- Date: Sun, 17 Mar 2024 01:50:42 +0000
- To: public-css-archive@w3.org
Some assorted thoughts:
The primary use case cited is for adopting `document.styleSheets`, but this will also enable adopting stylesheets from a parent shadow-root (which is equally useful!)
```js
const parentRoot = el.shadowRoot.host.getRootNode();
el.shadowRoot.adoptedStyleSheets.push(
  ...parentRoot.styleSheets,
  ...parentRoot.adoptedStyleSheets,
);
```
---
I think there is (or should be) a difference between "constructed" stylesheets and "adoptable" stylesheets.
The `@import` restriction could continue to apply to *constructed* stylesheets, but does not need to apply to other adoptable stylesheets.
---
Should there be an easier way to feature detect?
Currently I can see a `try`/`catch` way of polyfilling.
```js
function requiresConstructing() {
  try {
    const doc = document.implementation.createHTMLDocument();
    doc.body.appendChild(doc.createElement("style");
    doc.adoptedStyleSheets = doc.styleSheets;
    return false;
  } catch {
    return true;
  }
}
```
```js
el.shadowRoot.adoptedStyleSheets.push(
  ...constructIfNecessary(document.styleSheets),
  ...document.adoptedStyleSheets,
);
function constructIfNecessary(styleSheets) {
  if (!requiresConstructing()) return styleSheets;
  return Array.from(styleSheets).map(styleSheet => {
    const sheet = new CSSStyleSheet();
    sheet.replace(stringifyStyleSheet(styleSheet));
    return sheet;
  });
}
```
(using `stringifyStyleSheet` helper from #7171)
---
Should there be a way to adopt stylesheets not just once, but "forever"?
If I understand correctly, `adoptedStyleSheets.push(...document.styleSheets)` is taking a snapshot of `document.styleSheets` at the time it's called. `styleSheets` could change in the future, and it's probably desirable to propagate those changes into wherever they are adopted.
-- 
GitHub Notification of comment by mayank99
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/10013#issuecomment-2002269431 using your GitHub account
-- 
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Sunday, 17 March 2024 01:50:43 UTC