boolean preventDefault = false;
// CAPTURING_PHASE : fire event listeners from top to EventTarget
HashSet stoppedGroups = new HashSet();
HashSet toBeStoppedGroups = new HashSet();
for (int i = 0; i < minAncestor; i++) {
NodeEventTarget node = ancestors[i];
// System.err.println("\t-- CAPTURING " + e.getType() + " " + ((Node) node).getNodeName());
setCurrentTarget(es[i], node);
setEventPhase(es[i], Event.CAPTURING_PHASE);
fireImplementationEventListeners(node, es[i], true);
}
for (int i = minAncestor; i < ancestors.length; i++) {
NodeEventTarget node = ancestors[i];
// System.err.println("\t-- * CAPTURING " + e.getType() + " " + ((Node) node).getNodeName());
setCurrentTarget(es[i], node);
setEventPhase(es[i], Event.CAPTURING_PHASE);
fireImplementationEventListeners(node, es[i], true);
fireEventListeners(node, es[i], true, stoppedGroups,
toBeStoppedGroups);
fireHandlerGroupEventListeners(node, es[i], true, stoppedGroups,
toBeStoppedGroups);
preventDefault = preventDefault || es[i].getDefaultPrevented();
stoppedGroups.addAll(toBeStoppedGroups);
toBeStoppedGroups.clear();
}
// AT_TARGET : fire local event listeners
// System.err.println("\t-- * AT_TARGET " + e.getType() + " " + ((Node) target).getNodeName());
setEventPhase(e, Event.AT_TARGET);
setCurrentTarget(e, target);
fireImplementationEventListeners(target, e, false);
fireEventListeners(target, e, false, stoppedGroups,
toBeStoppedGroups);
fireHandlerGroupEventListeners(node, e, false, stoppedGroups,
toBeStoppedGroups);
stoppedGroups.addAll(toBeStoppedGroups);
toBeStoppedGroups.clear();
preventDefault = preventDefault || e.getDefaultPrevented();
// BUBBLING_PHASE : fire event listeners from target to top
if (e.getBubbles()) {
for (int i = ancestors.length - 1; i >= minAncestor; i--) {
NodeEventTarget node = ancestors[i];
// System.err.println("\t-- * BUBBLING " + e.getType() + " " + ((Node) node).getNodeName());
setCurrentTarget(es[i], node);
setEventPhase(es[i], Event.BUBBLING_PHASE);
fireImplementationEventListeners(node, es[i], false);
fireEventListeners(node, es[i], false, stoppedGroups,
toBeStoppedGroups);
fireHandlerGroupEventListeners
(node, es[i], false, stoppedGroups, toBeStoppedGroups);
preventDefault =
preventDefault || es[i].getDefaultPrevented();
stoppedGroups.addAll(toBeStoppedGroups);
toBeStoppedGroups.clear();
}
for (int i = minAncestor - 1; i >= 0; i--) {
NodeEventTarget node = ancestors[i];
// System.err.println("\t-- BUBBLING " + e.getType() + " " + ((Node) node).getNodeName());
setCurrentTarget(es[i], node);
setEventPhase(es[i], Event.BUBBLING_PHASE);
fireImplementationEventListeners(node, es[i], false);
preventDefault =