- From: Hajime Morrita <morrita@google.com>
- Date: Fri, 18 Oct 2013 14:24:20 +0900
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: Sudarshan <sudarshan.p@samsung.com>, Ryosuke Niwa <rniwa@apple.com>, Webapps WG <public-webapps@w3.org>
- Message-ID: <CALzNm5rH253FMOVkADZZKybTVOO90UGPuAXAtJUe7EZtkrRi_A@mail.gmail.com>
B looks fine. We don't have to rush into the API addition though. The API is just a shortcut of a tree traversal and easy to polyfill. It won't too late to design this after hearing some concrete usecases. Also, we need to extend this rough idea to take reprojection (<content> and <shadow>) into account. I hope projection-proficient people like Dimitri and Hayato help to do that. On Fri, Oct 18, 2013 at 1:15 PM, Jonas Sicking <jonas@sicking.cc> wrote: > > On Oct 17, 2013 6:48 PM, "Hajime Morrita" <morrita@google.com> wrote: > > > > > > > > > > On Fri, Oct 18, 2013 at 3:56 AM, Jonas Sicking <jonas@sicking.cc> wrote: > >> > >> On Thu, Oct 17, 2013 at 1:55 AM, Hajime Morrita <morrita@google.com> > wrote: > >> > > >> > > >> > > >> > On Thu, Oct 17, 2013 at 5:01 PM, Ryosuke Niwa <rniwa@apple.com> > wrote: > >> >> > >> >> On Oct 16, 2013, at 9:47 PM, Hajime Morrita <morrita@google.com> > wrote: > >> >> > >> >> D. "H[ello Shado]w World" - selection spans outside to inside. > >> >> > >> >> > >> >> Suppose we allowed this selection. Then how does one go about > pasting this > >> >> content elsewhere? > >> >> > >> >> Most likely, whatever other content editable area, mail client, or > some > >> >> random app (e.g. MS Word) into which the user is going to paste > wouldn’t > >> >> support shadow DOM and most certainly wouldn’t have the component the > >> >> original page happened to have. > >> > > >> > > >> > We have to define how Range.cloneContents() or extractContents() works > >> > against shadow-selecting range, assuming selection is built on top of > DOM > >> > Range. This doesn't seem that complicated. As cloned element drops its > >> > shadow, these range-generated nodes won't have shadow either. > >> > >> Oh, sounds like you are suggesting that we expand the Range API such > >> that it can have awareness of spanning parts of a shadow DOM tree. > >> While still keeping the existing endpoints "in the same root"? > >> > >> That like that idea! > > > > > > No, that isn't what I meant. I just want to make it explicit that Range > API works well with shadow trees. > > However it happened to be taken by you in some interesting way, and I'm > fine with this ;-) > > > > So what does this mean? > > > > The "subranges" property exposes the selections of containing > ShadowRoots? That sounds reasonable. > > > > Although I don't think Blink supports this in short term because it only > has per-document selection and doesn't have per-tree ones, > > it is rather a lack of features which can be improved eventually than > something totally incompatible and hurting the Web. > > > > Let me confirm what we're talking about. > > > > 1. Each shadow tree has its own selection. Each selection spans nodes in > the owning tree only. > > 2. User initiated selection operation (like dragging) can operate > multiple selections in different trees seamlessly > > as if it is single selection crossing boundaries. > > 3. Range and/or Selection API could expose sub-selections/sub-ranges of > containing trees. > > > > Going back to the example, > > > > > C. "H[ello Shadow Worl]d" - selection stays outside shadow, but its > range contains a node with shadow. > > > > This turns something like > > > > C2: "H[ello (Shadow) Worl]d" - There are two selections - "[]" for > outside tree and "()" for inside tree. > > > > And this this one > > > > > D. "H[ello Shado]w World" - selection spans outside to inside. > > > > turns > > > > D2: "H[ello] (Shado)w World" > > > > Is is correct? > > Yes! > > I think there are at least three ways we could expose these inner ranges: > > A) Separate function in the selection API for getting "shadow ranges". > B) Extension to the Range object for getting sub-"shadow ranges". > C) Through the existing multi-range support in the selection API. > > C has the advantage that no range or selection API changes are needed. But > has the downside that it makes it messy to associate which ranges are > subranges of other ranges. > > B has the advantage that it works anywhere where Range objects are used. > But the downside is that it makes Ranges more complicated. > > A has the advantage that it keeps Ranges simple. > > I think I'm leaning towards B personally. I don't think the added > complexity to Range objects is a big deal. Anywhere where Ranges are used > you'd likely want to deal with shadow trees in one way or another. > > / Jonas > -- morrita
Received on Friday, 18 October 2013 05:24:48 UTC