Skip to content

Commit 4a83d34

Browse files
committed
Prepare for OpaqueRange
Introduce NodeRange between AbstractRange and StaticRange/Range and move *Container members there. Also make it possible for NodeRange and a future OpaqueRange to return different values for *Offset and collapsed members by making them return the result of an internal algorithm. We keep start/end/start node/etc. on AbstractRange as OpaqueRange will need those to be the same (it will be manipulated just like live ranges are). Technically OpaqueRange is a node range as well, this is just not exposed to the outside world.
1 parent 0300825 commit 4a83d34

1 file changed

Lines changed: 58 additions & 21 deletions

File tree

dom.bs

Lines changed: 58 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8684,9 +8684,7 @@ be between 0 and the <a>boundary point</a>'s <a for="boundary point">node</a>'s
86848684
<pre class=idl>
86858685
[Exposed=Window]
86868686
interface AbstractRange {
8687-
readonly attribute Node startContainer;
86888687
readonly attribute unsigned long startOffset;
8689-
readonly attribute Node endContainer;
86908688
readonly attribute unsigned long endOffset;
86918689
readonly attribute boolean collapsed;
86928690
};
@@ -8714,16 +8712,16 @@ interface AbstractRange {
87148712
<a for=range>end node</a> and its <a for=range>start offset</a> is its <a for=range>end offset</a>.
87158713
</div>
87168714

8717-
<dl class=domintro>
8718-
<dt><code><var>node</var> = <var>range</var> . <a attribute for=AbstractRange>startContainer</a></code>
8719-
<dd>Returns <var>range</var>'s <a for=range>start node</a>.
8715+
<p>Each <a>range</a> has associated
8716+
<dfn for=AbstractRange export>get start offset</dfn> steps,
8717+
<dfn for=AbstractRange export>get end offset</dfn> steps, and
8718+
<dfn for=AbstractRange export>get collapsed</dfn> steps, which are to be defined by a
8719+
subclass.
87208720

8721+
<dl class=domintro>
87218722
<dt><code><var>offset</var> = <var>range</var> . <a attribute for=AbstractRange>startOffset</a></code>
87228723
<dd>Returns <var>range</var>'s <a for=range>start offset</a>.
87238724

8724-
<dt><code><var>node</var> = <var>range</var> . <a attribute for=AbstractRange>endContainer</a></code>
8725-
<dd>Returns <var>range</var>'s <a for=range>end node</a>.
8726-
87278725
<dt><code><var>offset</var> = <var>range</var> . <a attribute for=AbstractRange>endOffset</a></code>
87288726
<dd>Returns <var>range</var>'s <a for=range>end offset</a>.
87298727

@@ -8732,29 +8730,68 @@ interface AbstractRange {
87328730
</dl>
87338731

87348732
<div algorithm>
8735-
<p>The
8736-
<dfn id=dom-range-startcontainer attribute for=AbstractRange><code>startContainer</code></dfn>
8737-
getter steps are to return <a>this</a>'s <a for=range>start node</a>.
8733+
<p>The <dfn id=dom-range-startoffset attribute for=AbstractRange><code>startOffset</code></dfn>
8734+
getter steps are to return the result of running <a>this</a>'s
8735+
<a for=AbstractRange>get start offset</a>.
87388736
</div>
87398737

87408738
<div algorithm>
8741-
<p>The <dfn id=dom-range-startoffset attribute for=AbstractRange><code>startOffset</code></dfn>
8742-
getter steps are to return <a>this</a>'s <a for=range>start offset</a>.
8739+
<p>The <dfn id=dom-range-endoffset attribute for=AbstractRange><code>endOffset</code></dfn>
8740+
getter steps are to return the result of running <a>this</a>'s
8741+
<a for=AbstractRange>get end offset</a>.
87438742
</div>
87448743

87458744
<div algorithm>
8746-
<p>The <dfn id=dom-range-endcontainer attribute for=AbstractRange><code>endContainer</code></dfn>
8747-
getter steps are to return <a>this</a>'s <a for=range>end node</a>.
8745+
<p>The <dfn id=dom-range-collapsed attribute for=AbstractRange><code>collapsed</code></dfn>
8746+
getter steps are to return the result of running <a>this</a>'s
8747+
<a for=AbstractRange>get collapsed</a>.
87488748
</div>
87498749

8750+
8751+
<h3 id=interface-noderange>Interface {{NodeRange}}</h3>
8752+
8753+
<pre class=idl>
8754+
[Exposed=Window]
8755+
interface NodeRange : AbstractRange {
8756+
readonly attribute Node startContainer;
8757+
readonly attribute Node endContainer;
8758+
};
8759+
</pre>
8760+
8761+
<dl class=domintro>
8762+
<dt><code><var>node</var> = <var>range</var> . <a attribute for=NodeRange>startContainer</a></code>
8763+
<dd>Returns <var>range</var>'s <a for=range>start node</a>.
8764+
8765+
<dt><code><var>node</var> = <var>range</var> . <a attribute for=NodeRange>endContainer</a></code>
8766+
<dd>Returns <var>range</var>'s <a for=range>end node</a>.
8767+
</dl>
8768+
87508769
<div algorithm>
8751-
<p>The <dfn id=dom-range-endoffset attribute for=AbstractRange><code>endOffset</code></dfn>
8752-
getter steps are to return <a>this</a>'s <a for=range>end offset</a>.
8770+
<p>The <a for=AbstractRange>get start offset</a> steps are to return <a>this</a>'s
8771+
<a for=range>start offset</a>.
87538772
</div>
87548773

87558774
<div algorithm>
8756-
<p>The <dfn id=dom-range-collapsed attribute for=AbstractRange><code>collapsed</code></dfn>
8757-
getter steps are to return true if <a>this</a> is <a for=range>collapsed</a>; otherwise false.
8775+
<p>The <a for=AbstractRange>get end offset</a> steps are to return <a>this</a>'s
8776+
<a for=range>end offset</a>.
8777+
</div>
8778+
8779+
<div algorithm>
8780+
<p>The <a for=AbstractRange>get collapsed</a> steps are to return true if <a>this</a> is
8781+
<a for=range>collapsed</a>; otherwise false.
8782+
</div>
8783+
8784+
<hr>
8785+
8786+
<div algorithm>
8787+
<p>The
8788+
<dfn id=dom-range-startcontainer attribute for=NodeRange><code>startContainer</code></dfn>
8789+
getter steps are to return <a>this</a>'s <a for=range>start node</a>.
8790+
</div>
8791+
8792+
<div algorithm>
8793+
<p>The <dfn id=dom-range-endcontainer attribute for=NodeRange><code>endContainer</code></dfn>
8794+
getter steps are to return <a>this</a>'s <a for=range>end node</a>.
87588795
</div>
87598796

87608797

@@ -8769,7 +8806,7 @@ dictionary StaticRangeInit {
87698806
};
87708807

87718808
[Exposed=Window]
8772-
interface StaticRange : AbstractRange {
8809+
interface StaticRange : NodeRange {
87738810
constructor(StaticRangeInit init);
87748811
};
87758812
</pre>
@@ -8819,7 +8856,7 @@ constructor steps are:
88198856

88208857
<pre class=idl>
88218858
[Exposed=Window]
8822-
interface Range : AbstractRange {
8859+
interface Range : NodeRange {
88238860
constructor();
88248861

88258862
readonly attribute Node commonAncestorContainer;

0 commit comments

Comments
 (0)