- From: Raph Levien <raph@onan.artofcode.com>
- Date: Wed, 15 Dec 1999 12:21:19 -0800
- To: www-svg@w3.org
- Cc: Philippe Le Hegaret <plh@w3.org>
Hello SVG'ers,
Philippe Le Hegaret was kind enough to invite me to write up a
concrete proposal for a DOM event flow that would support a
Model/View/Controller architecture with multiple Views. I am very much
interested in feedback from other implementors of DOM for SVG, to make
sure that this proposal is not gratuitously different than what anyone
else is doing. At this point, I am not requesting that it be adopted
by the W3C. If implementation experience is positive, then it is easy
to imagine it being the basis for a future DOM recommendation.
My proposal follows.
Raph
Interface EventGroup
The EventGroup interface is simply a placeholder for separating the
event flows when there are multiple groups of listeners for a DOM
tree.
Event listeners can be registered without an EventGroup using the
existing EventTarget interface, or with an associated EventGroup using
the new EventTargetGroup interface. When an event is dispatched, it is
dispatched independently to each EventGroup. In particular, the
stopPropagation method of the Event interface only stops propagation
for event listeners without an associated EventGroup. Correspondingly,
the stopPropagation method of EventGrouped only stops propagatation
for event listeners within the specified EventGroup.
Interface EventTargetGroup
The EventTargetGroup interface is implemented by the same set of
objects that implement the EventTarget interface, namely all Nodes in
in implementation which supports the Event model and the EventGroup
extension.
interface EventTargetGroup {
void addEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture,
in EventGroup eventGroup);
void removeEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture,
in EventGroup eventGroup);
};
Methods
addEventListener
This method is equivalent to the addEventListener method of the
EventTarget interface, with the exception of the added eventGroup
parameter. The listener is registered with this EventGroup
associated.
Parameters
EventGroup eventGroup The EventGroup to associate with the
listener.
(all other parameters as in EventTarget::addEventListener)
removeEventListener
This method is equivalent to the removeEventListener method of the
EventTarget interface, with the exception of the added eventGroup
parameter. The listener registered with this EventGroup associated
is removed.
Parameters
EventGroup eventGroup The EventGroup associated with the
listener.
(all other parameters as in EventTarget::removeEventListener)
Interface EventGrouped
The EventGrouped interface is implemented by all Event objects.
interface EventGrouped {
void stopPropagation(EventGroup eventGroup);
};
Methods
stopPropagation
The stopPropagation method is used prevent further propagation of
an event during event flow within an EventGroup. If this method is
called by any EventListener the event will cease propagating
through the tree within the specified EventGroup. The event will
complete dispatch to all listeners on the current EventTarget
before event flow stops. This method may be used during any stage
of event flow. Event propagation for other EventGroups, or
listeners not associated with any EventGroup, is not affected.
Parameters
EventGroup eventGroup The EventGroup in which to stop event
propagation.
No Return Value
No Exceptions
Interface DocumentEventGroup
The DocumentEventGroup interface provides a mechanism by which the
user can create an EventGroup of a type supported by the
implementation. It is expected that the DocumentEvent interface will
be implemented on the same object which implements the Document
interface in an implementation which supports the EventGroup
extension.
interface DocumentEventGroup {
EventGroup createEventGroup();
};
Methods
createEventGroup
This method creates a new EventGroup for use in the
addEventListener and removeEventListener methods of the
EventTargetGroup interface.
No Parameters
Return Value
EventGroup The newly created EventGroup.
No Exceptions
Received on Wednesday, 15 December 1999 15:20:56 UTC