Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add definition for composed live range #1342

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

dizhang168
Copy link

@dizhang168 dizhang168 commented Dec 17, 2024

As discussed at TPAC 2024, the specification for the new getComposedRanges() API need the introduction of the new definition "Composed live range" [1], which should react to mutations. This PR attempts to define that new concept. Once landed, we will add the spec language that uses composed live range in the Selection API. An overview of the spec changes necessary can be found at [2].

[1] w3c/selection-api#2 (comment)
[2] https://github.com/dizhang168/shadow-dom-selection/blob/main/selection-api-spec-changes.md

(See WHATWG Working Mode: Changes for more details.)


Preview | Diff

@domfarolino domfarolino self-requested a review December 19, 2024 18:40
@domfarolino domfarolino added the agenda+ To be discussed at a triage meeting label Jan 16, 2025
Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@smaug---- you should review this as well in due course. And @rniwa too I suspect.

Comment on lines +3032 to +3038
<li><p>For each <a>composed live range</a> whose <a for=range>start node</a> is a
<a>shadow-including inclusive descendant</a> of <var>node</var>, set its <a for=range>start</a> to
(<var>parent</var>, <var>index</var>).

<li><p>For each <a>composed live range</a> whose <a for=range>end node</a> is an
<a>shadow-including inclusive descendant</a> of <var>node</var>, set its <a for=range>end</a> to
(<var>parent</var>, <var>index</var>).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will need to be rebased once we land moveBefore().

However, I also think this needs to be reconciled with the "for each live range" above as we don't want to do duplicate work.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this update the cached live range as well?

Comment on lines +5756 to +5757
{{Range}} <a>live range</a> with (<a>this</a>, 0) as its <a for=range>start</a> and <a
for=range>end</a>.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say "Range object" here. We also don't wrap in phrasing elements.

invalidate them and will try to ensure that it still represents the same piece of content.
Necessarily, a <a>live range</a> might itself be modified as part of the mutation to the
<a>node tree</a> when, e.g., part of the content it represents is mutated.
<p>{{Range}} objects, unlike {{StaticRange}} objects, are affected by mutations to the <a>node
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No wrapping in phrasing elements. (Please check the rest of the diff yourself for this.)

<a>live ranges</a> associated with that <a>tree</a>.</p>

<p>A <dfn export id=concept-composed-live-range>composed live range</dfn> is a <a>live range</a>
that has one associated {{Range}} object - <dfn export
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to use "—".

<p>To <dfn export id=concept-range-extract for="live range">extract</dfn> a <a>live range</a>
<var>range</var>, run these steps:
<p>To <dfn export id=concept-range-extract for="live range">extract</dfn> a {{Range}} <a>live
range</a> <var>range</var>, run these steps:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would use Range object again here.

<p>A <dfn export id=concept-composed-live-range>composed live range</dfn> is a <a>live range</a>
that has one associated {{Range}} object - <dfn export
id=concept-composed-live-range-cached-live-range for="composed live range">cached live
range</dfn>.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this called cached live range?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
agenda+ To be discussed at a triage meeting
Development

Successfully merging this pull request may close these issues.

3 participants