Re: [whatwg] "resize" events on elements

2015-02-23 Thread David Flanagan
Yes, please! At a minimum I'd like to see this as a custom element
lifecycle callback, but a more general resize event of some sort also seems
like it would be useful. I've wanted this the most often when working with
the canvas element.

This seems like the sort of thing that would have been proposed many times
before. Is there history here? Good reasons that we do not already have a
resize event?

If not done carefully, I fear that the introduction of a resize event will
allow infinite layout loop bugs or a more benign situation where a user
change in browser window size causes a ripple effect where many
resize-sensitive components adjust their layout, affecting other
components, and everything takes a while to settle down at the new size.

I'd also note that unlike regular events that propagate up the tree, resize
notifications need to propagate down the tree from container elements to
their children.

  David

On Mon, Feb 23, 2015 at 9:34 PM, Tab Atkins Jr. 
wrote:

> On Mon, Feb 23, 2015 at 8:16 PM, Ryosuke Niwa  wrote:
> >> On Feb 23, 2015, at 5:40 PM, Dean Jackson  wrote:
> >> At the recent Houdini meeting there was a vague agreement between the
> browser engines on adding a way for elements to be notified when their size
> changes. We've run into a number of scenarios where this is extremely
> useful, and is otherwise difficult or annoying (e.g. checking your size on
> a timer).
> >>
> >> The idea was to allow the resize event on elements. I don't really care
> what the solution is, so maybe someone here can come up with a better idea
> (size observers?). And of course there are a lot of details to be worked
> out.
> >
> > I would like it be an async event on an element although we might want
> it to fire earlier than setTimeout(~, 0) to avoid FOC (maybe the same
> timing as rAF?).  I don't think end-of-microtask makes sense as that may
> force too many layouts.
>
> Yeah, you almost certainly want to tie it to rAF timing.
>
> ~TJ
>


Re: [whatwg] "resize" events on elements

2015-02-23 Thread Anne van Kesteren
On Tue, Feb 24, 2015 at 2:40 AM, Dean Jackson  wrote:
> The idea was to allow the resize event on elements. I don't really care what 
> the solution is, so maybe someone here can come up with a better idea (size 
> observers?). And of course there are a lot of details to be worked out.

It seems this should be defined by the CSS WG, no? None of the
standards WHATWG publishes have much bearing on when an element
resizes so there's no place to put "fire a resize event". I'd expect
that somewhere within a layout standard.

The only change I would expect here is a change to HTML to make sure
such an event can be animation frame synchronized.


-- 
https://annevankesteren.nl/


Re: [whatwg] "resize" events on elements

2015-02-23 Thread Tab Atkins Jr.
On Mon, Feb 23, 2015 at 8:16 PM, Ryosuke Niwa  wrote:
>> On Feb 23, 2015, at 5:40 PM, Dean Jackson  wrote:
>> At the recent Houdini meeting there was a vague agreement between the 
>> browser engines on adding a way for elements to be notified when their size 
>> changes. We've run into a number of scenarios where this is extremely 
>> useful, and is otherwise difficult or annoying (e.g. checking your size on a 
>> timer).
>>
>> The idea was to allow the resize event on elements. I don't really care what 
>> the solution is, so maybe someone here can come up with a better idea (size 
>> observers?). And of course there are a lot of details to be worked out.
>
> I would like it be an async event on an element although we might want it to 
> fire earlier than setTimeout(~, 0) to avoid FOC (maybe the same timing as 
> rAF?).  I don't think end-of-microtask makes sense as that may force too many 
> layouts.

Yeah, you almost certainly want to tie it to rAF timing.

~TJ


Re: [whatwg] "resize" events on elements

2015-02-23 Thread Michael A. Peters



On 02/23/2015 05:40 PM, Dean Jackson wrote:

At the recent Houdini meeting there was a vague agreement between the browser 
engines on adding a way for elements to be notified when their size changes. 
We've run into a number of scenarios where this is extremely useful, and is 
otherwise difficult or annoying (e.g. checking your size on a timer).

The idea was to allow the resize event on elements. I don't really care what 
the solution is, so maybe someone here can come up with a better idea (size 
observers?). And of course there are a lot of details to be worked out.

If we settle on a solution fairly soon I will implement it in WebKit nightly 
builds so people can play.

Dean



Yes, I desperately need this!

Right now I have to try to trigger off of a bunch of things that can 
change the size of the parent (e.g. a details node opening or closing) - 
it would be much easier to just have a resize event on the parent node 
itself.


Re: [whatwg] "resize" events on elements

2015-02-23 Thread Ryosuke Niwa

> On Feb 23, 2015, at 5:40 PM, Dean Jackson  wrote:
> 
> At the recent Houdini meeting there was a vague agreement between the browser 
> engines on adding a way for elements to be notified when their size changes. 
> We've run into a number of scenarios where this is extremely useful, and is 
> otherwise difficult or annoying (e.g. checking your size on a timer).
> 
> The idea was to allow the resize event on elements. I don't really care what 
> the solution is, so maybe someone here can come up with a better idea (size 
> observers?). And of course there are a lot of details to be worked out.

I would like it be an async event on an element although we might want it to 
fire earlier than setTimeout(~, 0) to avoid FOC (maybe the same timing as 
rAF?).  I don't think end-of-microtask makes sense as that may force too many 
layouts.

- R. Niwa



Re: [whatwg] Event loop processing model, and current time

2015-02-23 Thread Ryosuke Niwa

> On Feb 23, 2015, at 5:26 PM, James Robinson  wrote:
> 
> On Mon, Feb 23, 2015 at 4:57 PM, Simon Fraser  wrote:
> 
>> https://html.spec.whatwg.org/multipage/webappapis.html#processing-model-9
>> says:
>> 
>> 1. Let now be the value that would be returned by the Performance object's
>> now() method
>> 2. Let docs be the list of Document objects associated with the event loop
>> in question…
>> ...
>> 4. For each fully active Document in docs, run the resize steps for that
>> Document, passing in now as the timestamp
>> ...
>> 
>> This makes no sense, as performance.now() is per-document (it’s relative
>> to the document start time), so passing the same value to all documents in
>> the browsing context is bogus.
>> 
>> What may be intended is to “freeze” the performance.now() time in all
>> documents before processing those documents, but give each document its own
>> performance.now() time.
>> 
> 
> That is the intent.  The algorithm should grab a timestamp for each
> document "at the same time" (which is really just a matter of grabbing one
> timestamp and applying the correct offset for each document).

In that case, step 1 should probably define a list of timestamps, not the 
value.  Alternatively, "now" should be defined for each document.

- R. Niwa



[whatwg] "resize" events on elements

2015-02-23 Thread Dean Jackson
At the recent Houdini meeting there was a vague agreement between the browser 
engines on adding a way for elements to be notified when their size changes. 
We've run into a number of scenarios where this is extremely useful, and is 
otherwise difficult or annoying (e.g. checking your size on a timer).

The idea was to allow the resize event on elements. I don't really care what 
the solution is, so maybe someone here can come up with a better idea (size 
observers?). And of course there are a lot of details to be worked out.

If we settle on a solution fairly soon I will implement it in WebKit nightly 
builds so people can play.

Dean



Re: [whatwg] Event loop processing model, and current time

2015-02-23 Thread James Robinson
On Mon, Feb 23, 2015 at 4:57 PM, Simon Fraser  wrote:

> https://html.spec.whatwg.org/multipage/webappapis.html#processing-model-9
> says:
>
> 1. Let now be the value that would be returned by the Performance object's
> now() method
> 2. Let docs be the list of Document objects associated with the event loop
> in question…
> ...
> 4. For each fully active Document in docs, run the resize steps for that
> Document, passing in now as the timestamp
> ...
>
> This makes no sense, as performance.now() is per-document (it’s relative
> to the document start time), so passing the same value to all documents in
> the browsing context is bogus.
>
> What may be intended is to “freeze” the performance.now() time in all
> documents before processing those documents, but give each document its own
> performance.now() time.
>

That is the intent.  The algorithm should grab a timestamp for each
document "at the same time" (which is really just a matter of grabbing one
timestamp and applying the correct offset for each document).

- James


[whatwg] Event loop processing model, and current time

2015-02-23 Thread Simon Fraser
https://html.spec.whatwg.org/multipage/webappapis.html#processing-model-9 says:

1. Let now be the value that would be returned by the Performance object's 
now() method
2. Let docs be the list of Document objects associated with the event loop in 
question…
...
4. For each fully active Document in docs, run the resize steps for that 
Document, passing in now as the timestamp
...

This makes no sense, as performance.now() is per-document (it’s relative to the 
document start time), so passing the same value to all documents in the 
browsing context is bogus.

What may be intended is to “freeze” the performance.now() time in all documents 
before processing those documents, but give each document its own 
performance.now() time.

Simon