Re: [WICG/webcomponents] Selection APIs for Shadow DOM (#79)

> Like I've stated elsewhere, `getComposedRange` should take shadow roots as arguments regardless of whether they're open or not. This is particularly important because otherwise, a code which is supposed to work with nodes within a given shadow root (of a specific component) can accidentally stumble upon nodes inside other shadow roots.

Thanks for the comment. The reason I didn't want to do that was ergonomics. It seems like it would make this API very hard to use:

```javascript
// Do full tree walk to find all shadow roots
let allRoots = [];
document.body.querySelectorAll('elements-that-support-shadowroots').forEach(e => {
  if (e.shadowRoot)
    allRoots.push(e.shadowRoot);
});

// Now, see where the selection is
let range = getComposedRange(allRoots);
```

I can definitely see the case for needing to provide **closed** roots, to avoid leaking them. But requiring the developer to "tell" us where all of the open roots are just seems like extra work, to avoid leaking something that is already public.

**What do developers think about this?** Perhaps the ergonomics aren't as bad as I think? Perhaps the concern (accidentally seeing nodes inside of "unknown" shadow roots) is a valid/good concern?

Perhaps, if that turns out to be a common developer concern, we could add some API (subject to bikeshedding) to **optionally** restrict to just the provided roots?

```javascript
let rangeInKnownElementsOnly = getComposedRange({onlyIncludeTheseRoots: roots});
let rangeAnywhere = getComposedRange();
```


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/WICG/webcomponents/issues/79#issuecomment-937320917

Received on Wednesday, 6 October 2021 23:26:24 UTC