Skip to content

Commit

Permalink
Close whatwg#122: fix mutation record for a removing a node
Browse files Browse the repository at this point in the history
A node's next sibling needs to be stored before removing the node
from its parent.
  • Loading branch information
nox committed Nov 30, 2015
1 parent fb45d52 commit c843276
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
15 changes: 12 additions & 3 deletions dom.bs
Original file line number Diff line number Diff line change
Expand Up @@ -1600,6 +1600,14 @@ steps:
<var>node</var> into <var>parent</var>'s
<a>node document</a>.

<li>If <var>child</var>'s parent is null, let <var>removedNodes</var> be the empty list.

<p class="note no-backref">The above can only happen if child is node.

<li>Otherwise, remove <var>child</var> from its <var>parent</var> with the
<i>suppress observers flag</i> set and let <var>removedNodes</var> be a list
containing solely child.

<li><a>Remove</a> <var>child</var>
from its <var>parent</var> with the
<i>suppress observers flag</i> set.
Expand Down Expand Up @@ -1722,8 +1730,9 @@ steps:
<a>node document</a>, run the <a><code>NodeIterator</code> pre-removing steps</a> given
<var>node</var> and <var>iterator</var>.

<li>Let <var>oldPreviousSibling</var> be <var>node</var>'s
<a>previous sibling</a>
<li>Let <var>oldPreviousSibling</var> be <var>node</var>'s <a>previous sibling</a>.

<li>Let <var>oldNextSibling</var> be <var>node</var>'s <a>next sibling</a>.

<li>Remove <var>node</var> from its <var>parent</var>.

Expand All @@ -1742,7 +1751,7 @@ steps:
<li>If <i>suppress observers flag</i> is unset,
<a>queue a mutation record</a> of "<code>childList</code>" for
<var>parent</var> with removedNodes a list solely containing <var>node</var>,
nextSibling <var>node</var>'s <a>next sibling</a>, and previousSibling
nextSibling <var>oldNextSibling</var>, and previousSibling
<var>oldPreviousSibling</var>.
</ol>

Expand Down
12 changes: 9 additions & 3 deletions dom.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
<div class="head">
<p data-fill-with="logo"><a class="logo" href="https://whatwg.org/"> <img alt="WHATWG" height="100" src="https://resources.whatwg.org/logo-dom.svg"> </a> </p>
<h1 class="p-name no-ref allcaps" id="title">DOM</h1>
<h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Living Standard — Last Updated <time class="dt-updated" datetime="2015-11-25">25 November 2015</time></span></h2>
<h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Living Standard — Last Updated <time class="dt-updated" datetime="2015-11-30">30 November 2015</time></span></h2>
<div data-fill-with="spec-metadata">
<dl>
<dt>Participate:
Expand Down Expand Up @@ -982,6 +982,11 @@ <h4 class="heading settled" data-level="4.2.1" id="mutation-algorithms"><span cl
<li>
<p>Let <var>previousSibling</var> be <var>child</var>’s <a data-link-type="dfn" href="#concept-tree-previous-sibling">previous sibling</a>. </p>
<li><a data-link-type="dfn" href="#concept-node-adopt">Adopt</a> <var>node</var> into <var>parent</var>’s <a data-link-type="dfn" href="#concept-node-document">node document</a>.
<li>
If <var>child</var>’s parent is null, let <var>removedNodes</var> be the empty list.
<p class="note no-backref" role="note">The above can only happen if child is node. </p>
<li>Otherwise, remove <var>child</var> from its <var>parent</var> with the <i>suppress observers flag</i> set and let <var>removedNodes</var> be a list
containing solely child.
<li><a data-link-type="dfn" href="#concept-node-remove">Remove</a> <var>child</var> from its <var>parent</var> with the <i>suppress observers flag</i> set.
<li>Let <var>nodes</var> be <var>node</var>’s <a data-link-type="dfn" href="#concept-tree-child">children</a> if <var>node</var> is a <code class="idl"><a data-link-type="idl" href="#documentfragment">DocumentFragment</a></code> <a data-link-type="dfn" href="#concept-node">node</a>, and a list containing solely <var>node</var> otherwise.
<li><a data-link-type="dfn" href="#concept-node-insert">Insert</a> <var>node</var> into <var>parent</var> before <var>reference child</var> with
Expand Down Expand Up @@ -1020,13 +1025,14 @@ <h4 class="heading settled" data-level="4.2.1" id="mutation-algorithms"><span cl
<li>For each <a data-link-type="dfn" href="#concept-range">range</a> whose <a data-link-type="dfn" href="#concept-range-end-node">end node</a> is <var>parent</var> and <a data-link-type="dfn" href="#concept-range-end-offset">end offset</a> is greater than <var>index</var>, decrease its <a data-link-type="dfn" href="#concept-range-end-offset">end offset</a> by one.
<li>
<p>For each <code class="idl"><a data-link-type="idl" href="#nodeiterator">NodeIterator</a></code> object <var>iterator</var> whose <a data-link-type="dfn" href="#concept-traversal-root">root</a>’s <a data-link-type="dfn" href="#concept-node-document">node document</a> is <var>node</var>’s <a data-link-type="dfn" href="#concept-node-document">node document</a>, run the <a data-link-type="dfn" href="#nodeiterator-pre-removing-steps"><code>NodeIterator</code> pre-removing steps</a> given <var>node</var> and <var>iterator</var>. </p>
<li>Let <var>oldPreviousSibling</var> be <var>node</var>’s <a data-link-type="dfn" href="#concept-tree-previous-sibling">previous sibling</a>
<li>Let <var>oldPreviousSibling</var> be <var>node</var>’s <a data-link-type="dfn" href="#concept-tree-previous-sibling">previous sibling</a>.
<li>Let <var>oldNextSibling</var> be <var>node</var>’s <a data-link-type="dfn" href="#concept-tree-next-sibling">next sibling</a>.
<li>Remove <var>node</var> from its <var>parent</var>.
<li>Run the <a data-link-type="dfn" href="#concept-node-remove-ext">removing steps</a> with <var>node</var>, <var>parent</var>, and <var>oldPreviousSibling</var>.
<li>For each <a data-link-type="dfn" href="#concept-tree-inclusive-ancestor">inclusive ancestor</a> <var>ancestor</var> of <var>parent</var>, if <var>ancestor</var> has any <a data-link-type="dfn" href="#registered-observer">registered observers</a> whose <b>options</b>' <code class="idl"><a data-link-type="idl" href="#dom-mutationobserverinit-subtree">subtree</a></code> is true, then for each
such <a data-link-type="dfn" href="#registered-observer">registered observer</a> <var>registered</var>, append a <a data-link-type="dfn" href="#transient-registered-observer">transient registered observer</a> whose <b>observer</b> and <b>options</b> are identical to those of <var>registered</var> and <b>source</b> which is <var>registered</var> to <var>node</var>’s list of <a data-link-type="dfn" href="#registered-observer">registered observers</a>.
<li>If <i>suppress observers flag</i> is unset, <a data-link-type="dfn" href="#queue-a-mutation-record">queue a mutation record</a> of "<code>childList</code>" for <var>parent</var> with removedNodes a list solely containing <var>node</var>,
nextSibling <var>node</var>’s <a data-link-type="dfn" href="#concept-tree-next-sibling">next sibling</a>, and previousSibling <var>oldPreviousSibling</var>.
nextSibling <var>oldNextSibling</var>, and previousSibling <var>oldPreviousSibling</var>.
</ol>
<h4 class="heading settled" data-level="4.2.2" id="interface-nonelementparentnode"><span class="secno">4.2.2. </span><span class="content">Interface <code>NonElementParentNode</code></span><a class="self-link" href="#interface-nonelementparentnode"></a></h4>
<p class="note no-backref" role="note">The <code class="idl"><a data-link-type="idl" href="#dom-nonelementparentnode-getelementbyid">getElementById()</a></code> method is not
Expand Down

0 comments on commit c843276

Please sign in to comment.