Re: [whatwg/dom] Introduce `moveBefore()` state-preserving atomic move API (PR #1307)

@domfarolino commented on this pull request.



> + <li><p>Let <var>oldParent</var> be <var>node</var>'s <a for=tree>parent</a>.
+
+ <li><p><a>Assert</a>: <var>oldParent</var> is non-null.
+
+ <li><p>Let <var>index</var> be <var>node</var>'s <a for=tree>index</a>.
+
+ <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.</p>
+
+  <p class="note">Note that unlike the traditional <a for=/ lt="remove">removal</a> case, we do not
+  need to update <a>live range</a> state when their <a for=range>start node</a> or
+  <a for=range>end node</a> is an <a>inclusive descendant</a> of the <var>node</var>. This is
+  because said <a>nodes</a> do not get removed from their <a>tree</a>, so ranges associated with
+  them stay intact.</p>

Ooof, OK then the spec indeed does leave ranges in a bad state, since what this PR allows (wrt `Range` + `moveBefore()`) is not possible with `Range` today. Great catch, @smaug----. In that case, I think the best way to deal with this would be to, during `moveBefore()`, detect if the moved node is the inclusive ancestor of a start or end boundary point of any range, and if that boundary point crosses its corresponding start/end, and collapse the node at the other boundary point. How does that sound to you?

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

Message ID: <whatwg/dom/pull/1307/review/2428038507@github.com>

Received on Monday, 11 November 2024 19:53:58 UTC