@@ -908,9 +908,14 @@ for historical reasons.
908
908
<h3 id=interface-eventtarget>Interface {{EventTarget}}</h3>
909
909
910
910
<pre class=idl>
911
+ [Exposed=*]
912
+ interface EventTargetInternals {
913
+ attribute EventTarget parent;
914
+ };
915
+
911
916
[Exposed=*]
912
917
interface EventTarget {
913
- constructor();
918
+ constructor(optional EventTargetCallback cb );
914
919
915
920
undefined addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options = {});
916
921
undefined removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options = {});
@@ -930,6 +935,8 @@ dictionary AddEventListenerOptions : EventListenerOptions {
930
935
boolean once = false;
931
936
AbortSignal signal;
932
937
};
938
+
939
+ callback EventTargetCallback = undefined (EventTargetInternals internals);
933
940
</pre>
934
941
935
942
<p> An {{EventTarget}} object represents a target to which an <a>event</a> can be <a>dispatched</a>
@@ -939,6 +946,70 @@ when something has occurred.
939
946
<a for=/>list</a> of zero or more <a>event listeners</a> ). It is initially the empty list.
940
947
<!-- Intentionally not exported. -->
941
948
949
+ <p> Each {{EventTarget}} object has an associated <dfn for=EventTarget>attached internals</dfn> (null
950
+ or an {{EventTargetInternals}} object), initially null.
951
+
952
+ <p> Each {{EventTargetInternals}} object has an associated <dfn
953
+ for=EventTargetInternals> eventTarget</dfn> (an {{EventTarget}} object).
954
+
955
+ <p> Each {{EventTargetInternals}} object has an associated <dfn
956
+ for=EventTargetInternals> parent</dfn> (an {{EventTarget}} object).
957
+
958
+ <p> The <dfn export for=Event id=concept-eventtarget-constructor>new EventTarget(cb)</dfn> constructor steps are:
959
+
960
+ <ol>
961
+ <li><p> If <var> cb</var> is not null then:
962
+
963
+ <ol>
964
+ <li><p> Let <var> eventTargetInternals</var> a new {{EventTargetInternals}} instance.
965
+
966
+ <li><p> Set <var> eventTargetInternals</var> 's <a for=EventTargetInternals>eventTarget</a> to
967
+ <var> this</var> .
968
+
969
+ <li> <a>Invoke</a> <var> cb</var> with « <var> eventTargetInternals</var> » and with <var> this</var>
970
+ as the <a>callback this value</a> .
971
+
972
+ <li><p> Set <var> this</var> 's <a for="EventTarget">attached internals</a> to
973
+ <var> eventTargetInternals</var> .
974
+ </ol>
975
+ </ol>
976
+
977
+ <p> The <a for=EventTargetInternals>parent</a> getter steps are to return <var> this</var> 's
978
+ <a for=EventTargetInternals>parent</a> .
979
+
980
+ <p> The <a for=EventTargetInternals>parent</a> setter steps are:
981
+
982
+ <ol>
983
+ <li><p> Let <var> theParent</var> be the given value.
984
+
985
+ <li><p> Let <var> targets</var> be a new <a for=/>list</a> .
986
+
987
+ <li> Append <var> this</var> 's <a for=EventTargetInternals>eventTarget</a> to <var> targets</var> .
988
+
989
+ <li><p> Let <var> parent</var> be <var> theParent</var> .
990
+
991
+ <li>
992
+ <p> While <var> parent</var> is non-null:</p>
993
+
994
+ <ol>
995
+ <li> If <var> targets</var> <a for=set>contains</a> <var> parent</var> then <a>throw</a> a
996
+ "{{HierarchyRequestError!!exception}} " {{DOMException}} .
997
+
998
+ <li> Append <var> parent</var> to <var> targets</var> .
999
+
1000
+ <li> Let <var> parentInternals</var> be <var> parent</var> 's <a for=EventTarget>attached internals</a> .
1001
+
1002
+ <li> Set <var> parent</var> to <var> parentInternals</var> 's <a
1003
+ for=EventTargetInternals> eventTarget</a> .
1004
+
1005
+ </ol>
1006
+
1007
+ <li> Set <var> this</var> 's <a for=EventTargetInternals>eventTarget</a> <a>get the parent</a>
1008
+ algorithm to return <var> theParent</var> .
1009
+
1010
+ <li> Set <var> this</var> 's {{EventTargetInternals/parent}} to <var> theParent</var> .
1011
+ </ol>
1012
+
942
1013
<p> An <dfn export id=concept-event-listener>event listener</dfn> can be used to observe a specific
943
1014
<a>event</a> and consists of:
944
1015
0 commit comments