Re: [whatwg/dom] Allow for customisation of the "get the parent" algorithm (PR #1230)

@annevk commented on this pull request.

Some initial feedback. Mainly around how to organize this. Overall I think this works, but would love to hear from @rniwa and @smaug---- especially.

> +[Exposed=*]
+interface EventTargetInternals {
+  attribute EventTarget parent;
+}
+
+callback EventTargetCallback = undefined (EventTargetInternals internals);

Nit: let's put this at the end.

> @@ -939,6 +946,34 @@ when something has occurred.
 <a for=/>list</a> of zero or more <a>event listeners</a>). It is initially the empty list.
 <!-- Intentionally not exported. -->
 
+<p>Each {{EventTarget}} object has an associated <dfn for=EventTarget>attached internals</dfn> (null
+or an {{EventTargetInternals}} object), initially null.
+<!-- Intentionally not exported. -->

No need for this comment, but I agree!

> +<p>When a <dfn export for=Event id=concept-eventtarget-constructor>constructor</dfn> of the {{EventTarget}}
+interface, or of an interface that inherits from the {{EventTarget}} interface, is invoked, these steps
+must be run, given the arguments <var>eventTargetCallback</var>:

You need to write this similar to https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller. So something like:

> The new EventTarget(callback) constructor steps are:

The argument name should match the argument name used in IDL.

> @@ -939,6 +946,34 @@ when something has occurred.
 <a for=/>list</a> of zero or more <a>event listeners</a>). It is initially the empty list.
 <!-- Intentionally not exported. -->
 
+<p>Each {{EventTarget}} object has an associated <dfn for=EventTarget>attached internals</dfn> (null
+or an {{EventTargetInternals}} object), initially null.
+<!-- Intentionally not exported. -->
+
+<p>When a <dfn export for=Event id=concept-eventtarget-constructor>constructor</dfn> of the {{EventTarget}}
+interface, or of an interface that inherits from the {{EventTarget}} interface, is invoked, these steps
+must be run, given the arguments <var>eventTargetCallback</var>:
+
+<ol>
+ <li><p>Let <var>eventTarget</var> be the result of creating a new object using this interface.

With the new-style constructor steps, creation already happened. You just need to manipulate "this".

> + <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/event listener list}} attribute to the empty list.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/parent}} attribute to null.

Aren't these the defaults already?

> +<p>Each {{EventTarget}} object has an associated <dfn for=EventTarget>attached internals</dfn> (null
+or an {{EventTargetInternals}} object), initially null.
+<!-- Intentionally not exported. -->
+
+<p>When a <dfn export for=Event id=concept-eventtarget-constructor>constructor</dfn> of the {{EventTarget}}
+interface, or of an interface that inherits from the {{EventTarget}} interface, is invoked, these steps
+must be run, given the arguments <var>eventTargetCallback</var>:
+
+<ol>
+ <li><p>Let <var>eventTarget</var> be the result of creating a new object using this interface.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/event listener list}} attribute to the empty list.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/parent}} attribute to null.
+
+ <li><p>Let <var>eventTargetInternals</var> a new {{EventTargetInternals}} instance.

Only create this when the callback is given.

> +<p>When a <dfn export for=Event id=concept-eventtarget-constructor>constructor</dfn> of the {{EventTarget}}
+interface, or of an interface that inherits from the {{EventTarget}} interface, is invoked, these steps
+must be run, given the arguments <var>eventTargetCallback</var>:
+
+<ol>
+ <li><p>Let <var>eventTarget</var> be the result of creating a new object using this interface.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/event listener list}} attribute to the empty list.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/parent}} attribute to null.
+
+ <li><p>Let <var>eventTargetInternals</var> a new {{EventTargetInternals}} instance.
+
+ <li><p>If <var>eventTargetCallback</var> is not null, then <a
+ for=/invoke-a-callback-function>invoke</a> <var>eventTargetCallback</var> with «
+  <var>eventTargetInternals</var> » and with <var>eventTarget</var> aas the <a>callback this

as*

> +
+<ol>
+ <li><p>Let <var>eventTarget</var> be the result of creating a new object using this interface.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/event listener list}} attribute to the empty list.
+
+ <li><p>Initialize <var>eventTarget</var>'s {{EventTarget/parent}} attribute to null.
+
+ <li><p>Let <var>eventTargetInternals</var> a new {{EventTargetInternals}} instance.
+
+ <li><p>If <var>eventTargetCallback</var> is not null, then <a
+ for=/invoke-a-callback-function>invoke</a> <var>eventTargetCallback</var> with «
+  <var>eventTargetInternals</var> » and with <var>eventTarget</var> aas the <a>callback this
+  value</a>.
+
+ <li><p>Set <var>eventTarget</var>'s {{Eventtarget/attached internals}} attribute to

s/attribute//

>  <p>Each {{EventTarget}} object also has an associated <dfn export>get the parent</dfn> algorithm,
-which takes an <a>event</a> <var>event</var>, and returns an {{EventTarget}} object. Unless
-specified otherwise it returns null.
+which takes an <a>event</a> <var>event</var>, and returns an {{EventTarget}}. Unless otherwise
+specified otherwise it returns the associated <a for=EventTarget>attached internals</a><a
+for=EventTargetInternals">parent</a> attribute.

I think instead we should make the `parent` setter overwrite this algorithm with an algorithm that returns the given value.

> @@ -1296,6 +1332,8 @@ property of the event being dispatched.
   <ol>
    <li><p>Let <var>touchTargets</var> be a new <a for=/>list</a>.
 
+   <li><p>Let <var>parentTargets</var> be a new <a for=/>list</a>.

Can't we inspect event's path instead?

-- 
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/pull/1230#pullrequestreview-1670185746
You are receiving this because you are subscribed to this thread.

Message ID: <whatwg/dom/pull/1230/review/1670185746@github.com>

Received on Wednesday, 11 October 2023 07:09:35 UTC