Re: Selectors API IDL Issues

On 2011-04-02 07:20, Cameron McCormack wrote:
> Lachlan Hunt:
>>> [Supplemental]
>>> interface Element {
>>> Element querySelector(in DOMString selectors, in optional any
>>> ...
>>> }
>>
>> This adds another method to Element.prototype
>>
>>> [NoInterfaceObject]
>>> interface NodeSelector {
>>> Element querySelector(in DOMString selectors, in optional any
>>> ...
>>> };
>>> Element implements NodeSelector
>
> Boris Zbarsky:
>> This adds a new interface called NodeSelector and says that any
>> instance of Element must implement this interface.

Right, I get that much, but that mail I linked to previously claimed 
this difference was somehow observable from scripts, but I don't see 
how.  Since [NoInterfaceObject] means that no script can possibly see 
whether or not NodeSelector really exists, from a black box perspective 
I don't see how that has any effect on the implementation.

>> But it does not add to Element.prototype; the method goes on the
>> mixin prototype object.

If that's the case, if the spec uses [NoInterfaceObject] and 
'implements', does that mean the spec will disagree with WebKit, Gecko, 
IE and Opera's implementation of selectors API?  AFAICS, all of them 
expose the querySelector* methods on Element.prototype.

See this:

http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Afor%20(var%20prop%20in%20Element.prototype)%20%7B%0D%0A%20%20if%20(prop%20%3D%3D%20%22querySelector%22%20%7C%7C%20prop%20%3D%3D%20%22querySelectorAll%22)%20w(prop)%0D%0A%7D%0D%0A%3C%2Fscript%3E

Check the log at the bottom, where it shows all four browsers find 
querySelector/querySelectorAll in Element.prototype.

>> See http://www.w3.org/TR/WebIDL/#host-object-mixin-prototype
>
> Boris is right, that’s the difference, as it currently stands in Web IDL
> (forgetting for a moment that [Supplemental] isn’t defined).
>
> What I will do in the near future is implement the proposed changes to remove
> multiple inheritance from Web IDL and add the “mixin prototype” concept,
> which will allow you to specify the augment-an-existing-prototype
> behaviour that [Supplemental] would have given you.

OK, what I need to know is before Chaals and I proceed with taking the 
spec to PR, should I a) wait for you to make these changes and then make 
whatever relevant IDL changes to Selectors API, or b) just use 
[NoInterfaceObject] and "foo implements NodeSelector" and publish that?

-- 
Lachlan Hunt - Opera Software
http://lachy.id.au/
http://www.opera.com/

Received on Saturday, 2 April 2011 09:46:42 UTC