Hi XBL2 geeks!
Here are a couple of more comments on the XBL2 spec.
First thing is fairly simple:
The interaction between :root and orphaned nodes is undefined. This
should arguably be fixed in the selectors spec, but XBL is the first
case where matching can be done on orphaned nodes.
The second things is bigger though:
It is undefined if -xbl-binding bindings are applied if the element or
one of its ancestors is display:none. From an implementation point of
view it is really desirable that such bindings are not applied since at
least gecko does not normally do style resolution on such nodes. We in
fact don't resolve style on even the nodes itself other than to get the
display value.
We also need to decide is if we should not apply -xbl-binding bindings
when the element itself is display:none, or only when a parent is
display:none. From an implementation point of view it probably works
fine either way, however it feels more consistent and logical from a
user point of view if this applies when the node itself is display:none,
that way we never apply -xbl-binding bindings whenever an element isn't
displayed, be it due to an ancestor or not.
A followup issue to this is if such -xbl-binding bindings are not
applied sometimes, it may appear erratic to the author that properties
are missing, potentially due to user stylesheets hiding part of the
page. This is actually partially a problem already since such bindings
won't be applied until the page is restyled.
We could deal with this several ways
A)
We could accept this and discourage authors to put API in -xbl-binding
bindings.
B)
We could ignore the <implementation> in such bindings. However this may
be a problem since it's likely that <handlers> would still be useful for
the author to do hover effects and the like, but such handlers wouldn't
have an <implementation> to interact with which would severely limit them.
C)
We could stop forwarding properties to <implementation>s of such
bindings and hide the implementation objects from the
.xblImplementations list.
I think C is preferable. But if we do that we should change the implicit
inheritance order such that CSS bindings are last in the chain (section
3.7.2). I think this is something that would be a good idea anyway since
it seems like CSS bindings are more likely to be attached and detached
often than DOM bindings.
Best Regards,
Jonas Sicking