- From: Jon Ferraiolo <jon.ferraiolo@adobe.com>
- Date: Tue, 24 May 2005 17:07:09 -0700
- To: Mark Birbeck <mark.birbeck@x-port.net>
- Cc: "'KONO Masahiko'" <kono.masahiko@canon.co.jp>, www-svg@w3.org
- Message-id: <6.1.1.1.2.20050524165010.04212058@mailsj-v1.corp.adobe.com>
Mark,
[As usual!] You are absolutely correct in your analysis. Thanks for
carefully describing this whole process and how events are now promiscuous
(i.e., DOM2Events "click" really means DOM3Events {"*", "click"}). I
suggest that the SVG-t 1.2 spec (and also the SVG-Full 1.2 spec) highlight
this somehow to make sure implementers and developers don't get confused
(as I was).
Also, I think there needs to be some spec changes in section 13.2
[http://www.w3.org/TR/SVGMobile12/interact.html#SVGEvents]. For example,
the SVG-t 1.2 spec says:
--------------------------------------
* SVG 1.1 names are all assumed to be in the
"http://www.w3.org/2001/xml-events" namespace. This allows SVG 1.1 content
(which did not have a notion of namespaced events) to be upwardly
compatible with SVG 1.2 (which adds a notion of namespaced events).
Therefore, the SVG 1.1 "SVGZoom" event becomes the
{"http://www.w3.org/2001/xml-events", "SVGZoom"} event in SVG 1.2.
--------------------------------------
Based on the promiscuity statements about backwards compatibility with DOM2
Events, I believe the above bullet is wrong. The old "SVGZoom" is really
{"*", "SVGZoom"}.
Jon
At 05:26 PM 5/19/2005, Mark Birbeck wrote:
>Hi Jon,
>
> > Very important issue here.
>
>Definitely.
>
>
> > Thanks for initiating discussion.
>
>Thanks for replying so quickly ;)
>
>
>I said:
> > > Let's say we register for:
> > >
> > > * click
> > > * ev:click
> > > * myns:click
> > > * yourns:click
> > >
> > >
> > > 1. If we dispatch the old DOM 2 Event "click", *all* of
>these listeners
> > > will be triggered.
>
>You replied:
> > Assuming the ev: is assigned to the XML Events namespace and myns:
>and yourns:
> > are assigned to different namespaces, then, no, if the mouse is clicked,
>then only
> > the event listeners for "click" and "ev:click" would receive the event.
>At least
> > that is my thinking based on studying the DOM3 Events spec which appears
>to retroactively
> > claim that HTML's click event when namespaced becomes ev:click.
>
>No, I'm pretty certain that this is not what happens. As you rightly say,
>the implication of the DOM 3 Events spec is that there is no longer a
>"click" event, but there is now a {"http://www.w3.org/2001/xml-events",
>"click"} event. So far so good.
>
>However, it also says that if the *listener* is registered for an event with
>no namespace (e.g., "click") OR the event generated has no namespace (e.g.,
>{null, "click"}), then the types will match, *regardless* of the namespace
>[1]:
>
> For compatibility reasons, the dispatching of an event will ignore
>namespace URIs
> if either the event or the event listener has a null namespace URI.
>
>The Note goes on to describe what this means:
>
> If a DOM Level 2 event (i.e. with a null namespace URI) is dispatched in
>the DOM
> tree, all event listeners that match the type will be triggered as
>described in
> the DOM event flow.
>
>So, say I give you an XBL document to use with your documents, and my
>document is written to use DOM 2 Events. If it dispatches good old-fashioned
>"click", *all* of the following DOM 3 Event listeners will be triggered in
>your document:
>
> * ev:click
> * myns:click
> * yourns:click
>
>as well as any DOM 2 Event listeners waiting for "click". Note that this
>means that it's not enough for you to avoid using type names from the list
>of 'core' events -- the problem is caused by any DOM 2 Event.
>
>So, just so that everything is clear, if you don't mind me
>cutting-and-pasting your words, I would say that when you say this:
>
> ...if the mouse is clicked, then only the event listeners for "click" and
> "ev:click" would receive the event...
>
>although it's what we would like, the reality is you can't say "only":
>
> ...if the mouse is clicked, then the event listeners for "click" and
> "ev:click" would receive the event, as would any other listener with
> "*:click"...
>
>
>Next the Note says this:
>
> If a DOM Level 3 event (i.e. with a namespace URI) is dispatched in the
>DOM tree,
> all event listeners with the same type and the same or null namespace URI
>will be
> triggered as described in the DOM event flow.
>
>The consequence of this is that if my XBL object is 'listening' for "click"
>to come from your document, any handlers that I have registered will be
>invoked if my code receives *any* of the following events from your
>document:
>
> * ev:click
> * myns:click
> * yourns:click
>
>as well as the DOM 2 Event "click".
>
>In other words we have {"*", "click"}, if you'll forgive my notation.
>
>
> > What I am assuming is that an implementation would create a DOM3
>Event object
> > for all events, whether the event listener uses DOM2 or DOM3 methods. For
>"click"
> > events, the namespaceURI value on the Event object would be set to
> > "http://www.w3.org/2001/xml-events".
>
>In DOM 3 Events-compliant code it would, since you would use initEventNS().
>But sticking with my example, my DOM 2 Event-compliant code will call
>initEvent() on this Event object, thus setting the namespace URI to null. If
>I then call dispatchEvent() on some target node, it would of course
>correctly trigger any listener for "click". But as I've said, it would also
>trigger any other listeners with a type of "click", even if they have
>non-null namespaces.
>
>And further, I'm saying that the "click" listener that you set up to listen
>for this "click" event would also be triggered by an event that was
>initialised with initEventNS() and dispatched as {"myns", "click"}.
>
>To put all of this a different way, it is only fully qualified event names
>(i.e., QNames) that are 100% unambiguous. Any use of unqualified names is
>ambiguous.
>
>[snip]
>
>
> > Actually, I think it all works nicely if "click" is truly
>equivalenced to
> > "ev:click", meaning that the assumed default namespace for legacy HTML and
>SVG
> > events is "ev:".
>
>But as I've tried to show, this is actually not possible to achieve -- there
>is no way I can see in the DOM Events model to make this kind of
>'equivalence' (unless the core events are in no namespace in both DOM 2
>Events and DOM 3 Events).
>
>
> > I believe that attempting to wildcard "click" to mean everything:click is
>what
> > would cause problems.
>
>Exactly!
>
>
>I have to say, I cannot see how it is possible to say that "click" ==
>"ev:click" if you are allowing DOM 2 Events and DOM 3 Events to co-exist.
>The whole "ignore namespaces" thing is an attempt to solve this problem, but
>as far as I can see it just doesn't work.
>
>(I think there are other problems with DOM 3 Events, but I'll leave those
>for a separate thread.)
>
>Regards,
>
>Mark
>
>[1]
>http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-dom2-compatibilit
>y
>
>
>Mark Birbeck
>CEO
>x-port.net Ltd.
>
>e: Mark.Birbeck@x-port.net
>t: +44 (0) 20 7689 9232
>w: http://www.formsPlayer.com/
>b: http://internet-apps.blogspot.com/
>
>Download our XForms processor from
>http://www.formsPlayer.com/
Received on Wednesday, 25 May 2005 00:07:51 UTC