Add reference target#10995
Conversation
|
@annevk, @domenic, this isn't quite ready to land yet as there are still a few open questions to sort out (at least WICG/webcomponents#1087 and WICG/webcomponents#1093), plus missing implementor positions. But I don't expect most of the mechanics in this PR to change, so I think it would be great to get feedback on whether the approach we've used here is agreeable. See also whatwg/dom#1353 Thanks! |
|
There's also a WIP PR against ARIA to account for these changes: w3c/aria#2474 There are some open questions being discussed there on exactly how to refer to the HTML concepts, since ARIA needs to be language-independent, but it will certainly refer to these spec concepts in some form. |
This concept is used to propagate events into the source's tree under certain circumstances.
lukewarlow
left a comment
There was a problem hiding this comment.
This should be updated to make use of the new [Reflect] syntax.
Thanks @lukewarlow! Fixed now (it wouldn't let me merge the suggestions directly due to merge conflicts). |
|
I'm not sure how GitHub actually lets you dismiss change suggestions but consider this me dropping my change suggestions as they've been resolved :) |
keithamus
left a comment
There was a problem hiding this comment.
I've done an initial review pass, got about half way, but I thought I'd provide my review commentary so far because I think if I continue I may end up repeating themes.
Some meta commentary:
- I think another formatting pass needs to be done.
- I am a little worried about the retargeting steps, I wonder if this can be simplified to avoid retargeting and to resolve a reference target where necessary.
| <span>tree</span>.</p> | ||
| a valid <span>single element reference</span> attribute | ||
| <span data-x="single-element-reference-refers-to">referring to</span> a <code>form</code> | ||
| element.</p> |
There was a problem hiding this comment.
This isn't perhaps super clear. I think this means that the final element from single element reference should be a form element
There was a problem hiding this comment.
That's right. I'm not really sure of a clearer way to put it.
There was a problem hiding this comment.
I wonder if this all works well for the Developer Edition of the standard as now we're phrasing conformance requirements in terms of algorithms aimed at implementers?
alice
left a comment
There was a problem hiding this comment.
I had to apply all the code suggestions manually, because I foolishly pushed my changes before I'd applied them.
…d make some tweaks in the Reflection section
…d attr target element(s) and unresolved attr target element(s)
c2f6fb2 to
368bb7b
Compare
…ndclark/reference-target
|
@annevk , @keithamus, @smaug----, this is ready for another round of review. I'd like to see if Chromium can ship this soon, so I want to make sure any remaining concerns are captured first. Thanks! Note that I've incorporated the event propagation change discussed in WICG/webcomponents#1098 into this PR. cc @alice |
| <code>Element</code>, then with <var>attr</var> being the <span>reflected content attribute | ||
| name</span>:</p> | ||
| <p>If a <span>reflected IDL attribute</span> has the type <code>Element</code>, then with | ||
| <var>attr</var> being the <span>reflected content attribute name</span>:</p> |
There was a problem hiding this comment.
Even if we remove inheritance I'm pretty sure we have to handle ?.
| slot (or map of additional fields) is required to properly specify this.</p> | ||
|
|
||
| <p>The <code data-x="dom-ToggleEvent-source">source</code> attribute defines the <span | ||
| data-x="concept-event-source">source</span> for a <code>ToggleEvent</code>.</p> |
There was a problem hiding this comment.
This is too much action-at-a-distance. We need to actually define this at dispatch time.
There was a problem hiding this comment.
Acknowledged. I'll work on this.
|
Alice, Jake, Olli, and I discussed the event model again. Here's the concrete proposal:
|
Currently if a shadow root's reference target doesn't match any ID in the shadow, any element-reflecting IDL attributes (e.g. popoverTargetElement) referring to the shadow host will return null. Recent thinking in [1] and the current state of the spec PR [2] is that these should still reflect the shadow host, same as if the reference target pointed to a matching element. Update the Chromium implementation and tests to match this updated behavior. As it turns out, this also slightly simplifies the implementation. [1] WICG/webcomponents#1114 [2] whatwg/html#10995 Bug: 346835896 Change-Id: Ic321d5dffc1800fc081e9edfbb46524acc63a8be
Currently if a shadow root's reference target doesn't match any ID in the shadow, any element-reflecting IDL attributes (e.g. popoverTargetElement) referring to the shadow host will return null. Recent thinking in [1] and the current state of the spec PR [2] is that these should still reflect the shadow host, same as if the reference target pointed to a matching element. Update the Chromium implementation and tests to match this updated behavior. As it turns out, this also slightly simplifies the implementation. [1] WICG/webcomponents#1114 [2] whatwg/html#10995 Bug: 346835896 Change-Id: Ic321d5dffc1800fc081e9edfbb46524acc63a8be Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7883837 Reviewed-by: Mason Freed <masonf@chromium.org> Commit-Queue: Dan Clark <daniec@microsoft.com> Cr-Commit-Position: refs/heads/main@{#1638691}
Currently if a shadow root's reference target doesn't match any ID in the shadow, any element-reflecting IDL attributes (e.g. popoverTargetElement) referring to the shadow host will return null. Recent thinking in [1] and the current state of the spec PR [2] is that these should still reflect the shadow host, same as if the reference target pointed to a matching element. Update the Chromium implementation and tests to match this updated behavior. As it turns out, this also slightly simplifies the implementation. [1] WICG/webcomponents#1114 [2] whatwg/html#10995 Bug: 346835896 Change-Id: Ic321d5dffc1800fc081e9edfbb46524acc63a8be Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7883837 Reviewed-by: Mason Freed <masonf@chromium.org> Commit-Queue: Dan Clark <daniec@microsoft.com> Cr-Commit-Position: refs/heads/main@{#1638691}
|
@annevk I think this basically makes sense. There are a couple details I'm unclear on about setting the event to composed.
|
Currently if a shadow root's reference target doesn't match any ID in the shadow, any element-reflecting IDL attributes (e.g. popoverTargetElement) referring to the shadow host will return null. Recent thinking in [1] and the current state of the spec PR [2] is that these should still reflect the shadow host, same as if the reference target pointed to a matching element. Update the Chromium implementation and tests to match this updated behavior. As it turns out, this also slightly simplifies the implementation. [1] WICG/webcomponents#1114 [2] whatwg/html#10995 Bug: 346835896 Change-Id: Ic321d5dffc1800fc081e9edfbb46524acc63a8be Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7883837 Reviewed-by: Mason Freed <masonf@chromium.org> Commit-Queue: Dan Clark <daniec@microsoft.com> Cr-Commit-Position: refs/heads/main@{#1638691}
|
@dandclark thanks, for 1) I think our assessment is that websites are highly unlikely to rely on the Fire an event does run into whatwg/dom#1328 which I think @keithamus wanted to look into, but should probably not block this. Maybe we want to add a source comment ( |
Reference Target allows authors to specify an element inside a shadow root to be the target of any ID references referring to the host element. This would enable IDREF attributes such as for and aria-labelledby to refer to elements inside a component's shadow DOM while maintaining encapsulation of the internal details of the shadow DOM.
See the reference target explainer.
At a high level, the spec change consists of these parts:
get-the-attr-associated-elementalgorithm (and its array-of-elements form) to follow reference target.get-the-attr-associated-element.See also the corresponding whatwg/dom#1353 which adds the definition of reference target used in this PR.
(See WHATWG Working Mode: Changes for more details.)
/common-dom-interfaces.html ( diff )
/common-microsyntaxes.html ( diff )
/dom.html ( diff )
/form-control-infrastructure.html ( diff )
/form-elements.html ( diff )
/forms.html ( diff )
/iframe-embed-object.html ( diff )
/index.html ( diff )
/indices.html ( diff )
/infrastructure.html ( diff )
/input.html ( diff )
/interaction.html ( diff )
/microdata.html ( diff )
/parsing.html ( diff )
/popover.html ( diff )
/scripting.html ( diff )
/tables.html ( diff )