Skip to content

Commit

Permalink
Fix the set an attribute algorithm
Browse files Browse the repository at this point in the history
The concept to replace an attribute is introduced, avoiding two mutation records
to be queued in case an attribute already existed in the element when setting
an attribute in it.
  • Loading branch information
nox committed Jan 1, 2016
1 parent a97debc commit f8089df
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 7 deletions.
28 changes: 24 additions & 4 deletions dom.bs
Original file line number Diff line number Diff line change
Expand Up @@ -5151,6 +5151,26 @@ run these steps:
<li>An <a>attribute is removed</a>.
</ol>

To <dfn export id=concept-element-attributes-replace lt="replace an attribute">replace</dfn> an
<a>attribute</a> <var>oldAttr</var> by an <a>attribute</a> <var>newAttr</var>
in an <a for="/">element</a> <var>element</var>, run these steps:

<ol>
<li><p><a>Queue a mutation record</a> of "<code>attributes</code>" for <var>element</var>
with name <var>oldAttr</var>'s <a for=Attr>local name</a>,
namespace <var>oldAttr</var>'s <a for=Attr>namespace</a>,
and oldValue <var>oldAttr</var>'s <a for=Attr>value</a>.

<li><p>Replace <var>oldAttr</var> by <var>newAttr</var> in the <var>element</var>'s
<a for=Element>attribute list</a>.

<li><p>Set <var>oldAttr</var>'s <a for=Attr>element</a> to null.

<li><p>Set <var>newAttr</var>'s <a for=Attr>element</a> to <var>element</var>.

<li><p>An <a>attribute is set</a> and an <a>attribute is changed</a>.
</ol>

<hr>

To <dfn export id=concept-element-attributes-get-by-name>get an attribute by name</dfn> given a
Expand Down Expand Up @@ -5194,12 +5214,12 @@ To <dfn export id=concept-element-attributes-set>set an attribute</dfn> given an

<li><p>If <var>oldAttr</var> is <var>attr</var>, return <var>attr</var>.

<li><p>If <var>oldAttr</var> is non-null, <a lt="remove an attribute">remove</a> it from
<var>element</var>.
<li><p>If <var>oldAttr</var> is non-null, <a lt="replace an attribute">replace</a> it
by <var>attr</var> in <var>element</var>.

<li><p><a lt="append an attribute">Append</a> <var>attr</var> to <var>element</var>.
<li><p>Otherwise, <a lt="append an attribute">append</a> <var>attr</var> to <var>element</var>.

<li>Return <var>oldAttr</var>.
<li><p>Return <var>oldAttr</var>.
</ol>

To <dfn export id=concept-element-attributes-set-value>set an attribute value</dfn> for
Expand Down
24 changes: 21 additions & 3 deletions dom.html
Original file line number Diff line number Diff line change
Expand Up @@ -2750,6 +2750,21 @@ <h3 class="heading settled" data-level="4.8" id="interface-element"><span class=
<li>Set <var>attribute</var>’s <a data-link-type="dfn" href="#concept-attribute-element">element</a> to null.
<li>An <a data-link-type="dfn" href="#attribute-is-removed">attribute is removed</a>.
</ol>
<p>To <dfn data-dfn-type="dfn" data-export="" data-lt="replace an attribute" id="concept-element-attributes-replace">replace<a class="self-link" href="#concept-element-attributes-replace"></a></dfn> an <a data-link-type="dfn" href="#concept-attribute">attribute</a> <var>oldAttr</var> by an <a data-link-type="dfn" href="#concept-attribute">attribute</a> <var>newAttr</var> in an <a data-link-type="dfn" href="#concept-element">element</a> <var>element</var>, run these steps:</p>
<ol>
<li>
<p><a data-link-type="dfn" href="#queue-a-mutation-record">Queue a mutation record</a> of "<code>attributes</code>" for <var>element</var> with name <var>oldAttr</var>’s <a data-link-type="dfn" href="#concept-attribute-local-name">local name</a>,
namespace <var>oldAttr</var>’s <a data-link-type="dfn" href="#concept-attribute-namespace">namespace</a>,
and oldValue <var>oldAttr</var>’s <a data-link-type="dfn" href="#concept-attribute-value">value</a>. </p>
<li>
<p>Replace <var>oldAttr</var> by <var>newAttr</var> in the <var>element</var>’s <a data-link-type="dfn" href="#concept-element-attribute">attribute list</a>. </p>
<li>
<p>Set <var>oldAttr</var>’s <a data-link-type="dfn" href="#concept-attribute-element">element</a> to null. </p>
<li>
<p>Set <var>newAttr</var>’s <a data-link-type="dfn" href="#concept-attribute-element">element</a> to <var>element</var>. </p>
<li>
<p>An <a data-link-type="dfn" href="#attribute-is-set">attribute is set</a> and an <a data-link-type="dfn" href="#attribute-is-changed">attribute is changed</a>. </p>
</ol>
<hr>
<p>To <dfn data-dfn-type="dfn" data-export="" id="concept-element-attributes-get-by-name">get an attribute by name<a class="self-link" href="#concept-element-attributes-get-by-name"></a></dfn> given a <var>qualifiedName</var> and <a data-link-type="dfn" href="#concept-element">element</a> <var>element</var>, run these steps:</p>
<ol>
Expand All @@ -2773,10 +2788,12 @@ <h3 class="heading settled" data-level="4.8" id="interface-element"><span class=
<li>
<p>If <var>oldAttr</var> is <var>attr</var>, return <var>attr</var>. </p>
<li>
<p>If <var>oldAttr</var> is non-null, <a data-link-type="dfn" href="#concept-element-attributes-remove">remove</a> it from <var>element</var>. </p>
<p>If <var>oldAttr</var> is non-null, <a data-link-type="dfn" href="#concept-element-attributes-replace">replace</a> it
by <var>attr</var> in <var>element</var>. </p>
<li>
<p>Otherwise, <a data-link-type="dfn" href="#concept-element-attributes-append">append</a> <var>attr</var> to <var>element</var>. </p>
<li>
<p><a data-link-type="dfn" href="#concept-element-attributes-append">Append</a> <var>attr</var> to <var>element</var>. </p>
<li>Return <var>oldAttr</var>.
<p>Return <var>oldAttr</var>. </p>
</ol>
<p>To <dfn data-dfn-type="dfn" data-export="" id="concept-element-attributes-set-value">set an attribute value<a class="self-link" href="#concept-element-attributes-set-value"></a></dfn> for
an <a data-link-type="dfn" href="#concept-element">element</a> <var>element</var> using a <var>localName</var> and <var>value</var>, and an optional <var>prefix</var>, and <var>namespace</var>, run these steps:</p>
Expand Down Expand Up @@ -5113,6 +5130,7 @@ <h3 class="no-num heading settled" id="index-defined-here"><span class="content"
<li><a href="#dom-document-renamenode">renameNode()</a><span>, in §8.2</span>
<li><a href="#concept-node-replace">replace</a><span>, in §4.2.1</span>
<li><a href="#concept-node-replace-all">replace all</a><span>, in §4.2.1</span>
<li><a href="#concept-element-attributes-replace">replace an attribute</a><span>, in §4.8</span>
<li><a href="#dom-node-replacechild">replaceChild(node, child)</a><span>, in §4.4</span>
<li><a href="#concept-cd-replace">replace data</a><span>, in §4.9</span>
<li><a href="#dom-characterdata-replacedata">replaceData(offset, count, data)</a><span>, in §4.9</span>
Expand Down

0 comments on commit f8089df

Please sign in to comment.