W3C home > Mailing lists > Public > public-webapps@w3.org > April to June 2015

Re: Imperative API for Node Distribution in Shadow DOM (Revisited)

From: Ryosuke Niwa <rniwa@apple.com>
Date: Mon, 27 Apr 2015 16:55:54 -0700
Cc: Olli Pettay <olli@pettay.fi>, Anne van Kesteren <annevk@annevk.nl>, WebApps WG <public-webapps@w3.org>, Erik Bryn <erik@erikbryn.com>, Dimitri Glazkov <dglazkov@google.com>
Message-id: <015B6CBB-5EF0-4169-9D28-8E96FBDF3695@apple.com>
To: Steve Orvell <sorvell@google.com>

> On Apr 27, 2015, at 4:41 PM, Steve Orvell <sorvell@google.com> wrote:
> 
>> Again, the timing was deferred in [1] and [2] so it really depends on when each component decides to distribute.
> 
> I want to be able to create an element <x-foo> that acts like other dom elements. This element uses Shadow DOM and distribution to encapsulate its details.
> 
> Let's imagine a 3rd party user named Bob that uses <div> and <x-foo>. Bob knows he can call div.appendChild(element) and then immediately ask div.offsetHeight and know that this height includes whatever the added element should contribute to the div's height. Bob expects to be able to do this with the <x-foo> element also since it is just another element from his perspective.
> 
> How can I, the author of <x-foo>, craft my element such that I don't violate Bob's expectations? Does your proposal support this?

In order to support this use case, the author of x-foo must use some mechanism to observe changes to x-foo's child nodes and involve `distribute` synchronously.  This will become possible, for example, if we added childrenChanged lifecycle callback to custom elements.

That might be an acceptable mode of operations. If you wanted to synchronously update your insertion points, rely on custom element's lifecycle callbacks and you can only support direct children for distribution. Alternatively, if you wanted to support to distribute a non-direct-child descendent, just use mutation observers to do it at the end of a micro task.

- R. Niwa
Received on Monday, 27 April 2015 23:56:23 UTC

This archive was generated by hypermail 2.3.1 : Friday, 27 October 2017 07:27:31 UTC