Re: Extending CSSOM Views matchMedium with callback

On May 10, 2010, at 8:48 AM, L. David Baron wrote:

> On Friday 2010-05-07 15:31 -0300, Luiz Agostini wrote:
>> The consensus on the W3C Extending CSSOM Views matchMedium with
>> callbacks [1] mailing list was that instead of adding individual DOM
>> events for changes to media features, we should instead make it
>> possible to get notified when a user defined media query has changed.
>> 
>> The idea was making it possible to supply a JavaScript function to the
>> styleMedia.matchMedium(...) function.
>> 
>> As no exact IDL was proposed, I came up with one myself which I think fits the
>> use-case, and implemented the feature for WebKit.
>> 
>> The result of my work became the following IDL, for which I would like
>> comments/feedback:
>> 
>>    interface MediaChangeListener {
>>        void mediaChanged(in boolean queryResult);
>>    };
>> 
>>    interface StyleMedia {
>>        readonly attribute DOMString type;
>>        boolean matchMedium(in DOMString mediaquery, in MediaChangeListener
>> listener);
>>    };
> 
> This seems reasonable to me, although I wonder if it's worth passing
> a little more information to the listener, such as (a) the original
> query or (b) the window.  Would that be useful to authors, or are
> they comfortable stuffing whatever is necessary in a closure?

This simple callback-based mechanism suffers from various problems (of the type
that add/removeEventListener were designed to solve):

1. Unclear behavior when calling matchMedium() a second time for the same query,
with a different callback.
2. No way to remove a callback
3. Lack of context on the callback

I also think that forcing authors to call matchMedium() just in order to get callbacks
when media queries change is not ideal.

It feels to me like the correct solution would be enhance CSS OM somehow to allow
authors to attach event listeners to CSSMediaRules somehow, so they can get notified
when those @media statements start or stop matching.

Simon

Received on Monday, 10 May 2010 17:28:26 UTC