Skip to content

Commit

Permalink
Add definition for composed live range
Browse files Browse the repository at this point in the history
  • Loading branch information
dizhang168 committed Dec 17, 2024
1 parent 10dbae4 commit 8a726bb
Showing 1 changed file with 50 additions and 19 deletions.
69 changes: 50 additions & 19 deletions dom.bs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ urlPrefix: https://www.w3.org/TR/xml-names/#NT-
text: QName; url: QName
url: https://w3c.github.io/DOM-Parsing/#dom-range-createcontextualfragment
type: method; text: createContextualFragment(); for: Range
url: https://w3c.github.io/selection-api/#dom-selection-getrangeat
type: method; text: getRangeAt(); for: Range
type: interface
url: https://w3c.github.io/touch-events/#idl-def-touchevent
text: TouchEvent
Expand Down Expand Up @@ -3027,6 +3029,14 @@ optional <i>suppress observers flag</i>, run these steps:
<li><p>For each <a>live range</a> whose <a for=range>end node</a> is an <a>inclusive descendant</a>
of <var>node</var>, set its <a for=range>end</a> to (<var>parent</var>, <var>index</var>).

<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>).

<li><p>For each <a>live range</a> whose <a for=range>start node</a> is <var>parent</var> and
<a for=range>start offset</a> is greater than <var>index</var>, decrease its
<a for=range>start offset</a> by 1.
Expand Down Expand Up @@ -5743,7 +5753,8 @@ are:
<hr>

<p>The <dfn method for=Document><code>createRange()</code></dfn> method steps are to return a new
<a>live range</a> with (<a>this</a>, 0) as its <a for=range>start</a> an <a for=range>end</a>.
{{Range}} <a>live range</a> with (<a>this</a>, 0) as its <a for=range>start</a> and <a
for=range>end</a>.

<p class=note>The {{Range/Range()}} constructor can be used instead.

Expand Down Expand Up @@ -7878,11 +7889,11 @@ range.setEnd(secondText, 4)
<a>node tree</a> above cannot be represented by a <a>range</a>. <a>Ranges</a> are only useful for
<a for=/>nodes</a>.

<p>{{Range}} objects, unlike {{StaticRange}} objects, are affected by mutations to the
<a>node tree</a>. Therefore they are also known as <a>live ranges</a>. Such mutations will not
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
tree</a>. Therefore they are <a>live ranges</a>. Such mutations will not 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 class=note>See the <a for=/>insert</a> and <a for=/>remove</a> algorithms, the
{{Node/normalize()}} method, and the <a>replace data</a> and <a lt="split a Text node">split</a>
Expand Down Expand Up @@ -8109,12 +8120,22 @@ interface Range : AbstractRange {
};
</pre>

<p>Objects implementing the {{Range}} interface are known as
<dfn export id=concept-live-range>live ranges</dfn>.
<p>A <dfn export id=concept-live-range>live range</dfn> is a <a>range</a> that is affected by
mutations to the <a>node tree</a>.</p>

<p>Objects implementing the {{Range}} interface are <a>live ranges</a>.

<p class=note>Algorithms that modify a <a>tree</a> (in particular the <a for=/>insert</a>,
<a for=/>remove</a>, <a>replace data</a>, and <a lt="split a Text node">split</a> algorithms) modify
<a>live ranges</a> associated with that <a>tree</a>.
<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
id=concept-composed-live-range-cached-live-range for="composed live range">cached live
range</dfn>.</p>

<p class=note>The <a>cached live range</a> is used to maintain backward compatibility with the
{{getRangeAt}} API.</p>

<p>The <dfn export id=concept-range-root for="live range">root</dfn> of a <a>live range</a> is the
<a for=tree>root</a> of its <a for=range>start node</a>.
Expand Down Expand Up @@ -8184,7 +8205,7 @@ but not its <a for=range>end node</a>, or vice versa.

<dl class=domintro>
<dt><code><var>range</var> = new <a constructor>Range()</a></code>
<dd>Returns a new <a>live range</a>.
<dd>Returns a new {{Range}} <a>live range</a>.
</dl>

<p>The <dfn constructor for=Range lt="Range()"><code>new Range()</code></dfn> constructor steps are
Expand Down Expand Up @@ -8249,6 +8270,10 @@ steps:

<li>Set <var>range</var>'s
<a for=range>start</a> to <var>bp</var>.

<li>If <var>range</var> is the associated <a>cached live range</a> of a <a>composed live
range</a> <var>composed live range</var>, set <var>composed live range</var>’s <a
for="range">start</a> to <var>bp</var>.
</ol>
<dt>If these steps were invoked as "set the end"
<dd>
Expand All @@ -8264,6 +8289,10 @@ steps:

<li>Set <var>range</var>'s
<a for=range>end</a> to <var>bp</var>.

<li>If <var>range</var> is the associated <a>cached live range</a> of a <a>composed live range</a>
<var>composed live range</var>, set <var>composed live range</var>’s <a for="range">end</a> to
<var>bp</var>.
</ol>
</dl>
</ol>
Expand Down Expand Up @@ -8544,8 +8573,8 @@ method steps are:
(<var>new node</var>, <var>new offset</var>).
</ol>

<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:

<ol>
<li><p>Let <var>fragment</var> be a new {{DocumentFragment}} <a for=/>node</a> whose
Expand Down Expand Up @@ -8721,7 +8750,7 @@ method steps are:
<li><a>Append</a> <var>clone</var>
to <var>fragment</var>.

<li>Let <var>subrange</var> be a new <a>live range</a>
<li>Let <var>subrange</var> be a new {{Range}} <a>live range</a>
whose <a for=range>start</a> is
(<var>original start node</var>, <var>original start offset</var>) and
whose <a for=range>end</a> is
Expand Down Expand Up @@ -8775,7 +8804,7 @@ method steps are:
<li><a>Append</a> <var>clone</var>
to <var>fragment</var>.

<li>Let <var>subrange</var> be a new <a>live range</a>
<li>Let <var>subrange</var> be a new {{Range}} <a>live range</a>
whose <a for=range>start</a> is
(<var>last partially contained child</var>, 0) and whose
<a for=range>end</a> is
Expand All @@ -8800,7 +8829,7 @@ result of <a for="live range">extracting</a> <a>this</a>.

<p>To
<dfn export id=concept-range-clone for="live range" lt="clone the contents|cloning the contents">clone the contents</dfn>
of a <a>live range</a> <var>range</var>, run these steps:
of a {{Range}} <a>live range</a> <var>range</var>, run these steps:

<ol>
<li><p>Let <var>fragment</var> be a new {{DocumentFragment}} <a for=/>node</a> whose
Expand Down Expand Up @@ -8928,7 +8957,7 @@ of a <a>live range</a> <var>range</var>, run these steps:
<li><a>Append</a> <var>clone</var>
to <var>fragment</var>.

<li>Let <var>subrange</var> be a new <a>live range</a>
<li>Let <var>subrange</var> be a new {{Range}} <a>live range</a>
whose <a for=range>start</a> is
(<var>original start node</var>, <var>original start offset</var>) and
whose <a for=range>end</a> is
Expand Down Expand Up @@ -8986,7 +9015,7 @@ of a <a>live range</a> <var>range</var>, run these steps:
<li><a>Append</a> <var>clone</var>
to <var>fragment</var>.

<li>Let <var>subrange</var> be a new <a>live range</a>
<li>Let <var>subrange</var> be a new {{Range}} <a>live range</a>
whose <a for=range>start</a> is
(<var>last partially contained child</var>, 0) and whose
<a for=range>end</a> is
Expand All @@ -9006,7 +9035,7 @@ of a <a>live range</a> <var>range</var>, run these steps:
result of <a for="live range">cloning the contents</a> of <a>this</a>.

<p>To <dfn export id=concept-range-insert for="live range">insert</dfn> a <a for=/>node</a>
<var>node</var> into a <a>live range</a> <var>range</var>, run these steps:
<var>node</var> into a {{Range}} <a>live range</a> <var>range</var>, run these steps:

<ol>
<li>If <var>range</var>'s <a for=range>start node</a> is a {{ProcessingInstruction}} or {{Comment}}
Expand Down Expand Up @@ -9156,7 +9185,8 @@ check first thing, which matches everyone but Firefox.
</ol>

<p>The <dfn method for=Range><code>cloneRange()</code></dfn> method steps are to return a new
<a>live range</a> with the same <a for=range>start</a> and <a for=range>end</a> as <a>this</a>.
{{Range}} <a>live range</a> with the same <a for=range>start</a> and <a for=range>end</a> as
<a>this</a>.

<p>The <dfn method for=Range><code>detach()</code></dfn> method steps are to do nothing.
<span class=note>Its functionality (disabling a {{Range}} object) was removed, but the method itself
Expand Down Expand Up @@ -10408,6 +10438,7 @@ David Håsäther,
David Hyatt,
Deepak Sherveghar,
Dethe Elza,
Di Zhang,
Dimitri Glazkov,
Domenic Denicola,
Dominic Cooney,
Expand Down

0 comments on commit 8a726bb

Please sign in to comment.