diff --git a/dom.bs b/dom.bs index 2f00ca5ab..494e1769c 100644 --- a/dom.bs +++ b/dom.bs @@ -482,7 +482,8 @@ empty list.
An event has an associated path. A path is a list of structs. Each struct consists of an -item (an {{EventTarget}} object), target (a +item (an {{EventTarget}} object), an +item-in-shadow-tree (a boolean), a target (a potential event target), a relatedTarget (a potential event target), a touch target list (a list @@ -751,6 +752,25 @@ method, when invoked, must run these steps:
incapable of setting {{Event/composed}}. It has to be supported for legacy content. ++partial interface Window { + [Replaceable] readonly attribute any event; // historical +}; ++ +
Each {{Window}} object has an associated current event (undefined or an +{{Event}} object). Unless stated otherwise it is undefined. + +
The event
attribute's getter, when invoked, must
+return the context object's current event.
+
+
Web developers are strongly encouraged to instead rely on the {{Event}} object passed +to event listeners, as that will result in more portable code. This attribute is not available in +workers or worklets, and is inaccurate for events dispatched in shadow trees. + +
@@ -1366,14 +1386,20 @@ for discussion). touchTargets, and a slot-in-closed-tree, run these steps:+
Let item-in-shadow-tree be false. + +
If target is a node and its root is a + shadow root, then set item-in-shadow-tree to true. +
Let root-of-closed-tree be false.
If target is a shadow root whose mode is "
closed
", then set root-of-closed-tree to true.Append a new struct to event's path - whose item is target, target is - targetOverride, relatedTarget is relatedTarget, + whose item is target, item-in-shadow-tree is + item-in-shadow-tree, target is targetOverride, + relatedTarget is relatedTarget, touch target list is touchTargets, root-of-closed-tree is root-of-closed-tree, and slot-in-closed-tree is slot-in-closed-tree. @@ -1395,17 +1421,16 @@ for discussion).
If event's stop propagation flag is set, then return. -
Let object be tuple's item. +
Initialize event's {{Event/currentTarget}} attribute to tuple's + item.
- -
Let listeners be a clone of object's - event listener list. +
Let listeners be a clone of event's + {{Event/currentTarget}} attribute value's event listener list.
This avoids event listeners added after this point from being run. Note that removal still has an effect due to the removed field. -
Initialize event's {{Event/currentTarget}} attribute to object. -
Let found be the result of running inner invoke with event, listeners, and legacyOutputDidListenersThrowFlag if given. @@ -1469,6 +1494,21 @@ for discussion). +
Let global be listener callback's + associated Realm's global object. + +
Let currentEvent be undefined. + +
- +
If global is a {{Window}} object, then: + +
+
+Set currentEvent to global's current event. + +
If tuple's item-in-shadow-tree is false, then set + global's current event to event. +
If listener's passive is true, then set event's in passive listener flag. @@ -1489,6 +1529,9 @@ for discussion).
Unset event's in passive listener flag. +
If global is a {{Window}} object, then set global's + current event to currentEvent. +
If event's stop immediate propagation flag is set, then return found.