@@ -3398,6 +3398,19 @@ dictionary MutationObserverInit {
33983398   <a>attribute</a>  mutations need to be
33993399   observed and {{MutationObserverInit/attributes}}  is true
34003400   or omitted.
3401+ 
3402+    <dt> {{MutationObserverInit/elementHasAttributeNameFilter}} 
3403+    <dd> Set to a list of <a>attribute</a> 
3404+    <a for=Attr>local names</a>  (without <a for=Attr>namespace</a> ) to observe changes
3405+    to the presence of an elements <a>attributes</a> .
3406+ 
3407+    <dt> {{MutationObserverInit/elementLocalNameFilter}} 
3408+    <dd> Set to a list of <a>element</a> 
3409+    <a for=Element>local names</a>  (without <a for=Attr>namespace</a> ) to observe
3410+    changes to the presence of specific <a>element</a>  <a for=Element>local names</a> 
3411+    if not all <a>element</a>  <a for=Element>local names</a>  need to be
3412+    observed and {{MutationObserverInit/attributes}}  is true
3413+    or omitted.
34013414  </dl> 
34023415
34033416 <dt><code><var> observer</var>  . {{disconnect()}} </code> 
@@ -3437,6 +3450,14 @@ method, when invoked, must run these steps:
34373450 <var> options</var> 's {{MutationObserverInit/characterData}}  is omitted, then set
34383451 <var> options</var> 's {{MutationObserverInit/characterData}}  to true.
34393452
3453+  <li><p> If <var> options</var> 's {{MutationObserverInit/elementHasAttributeNameFilter}}  is present and
3454+  <var> options</var> 's {{MutationObserverInit/childList}}  is omitted, then set
3455+  <var> options</var> 's {{MutationObserverInit/childList}}  to true.
3456+ 
3457+  <li><p> If <var> options</var> 's {{MutationObserverInit/elementLocalNameFilter}}  is present and
3458+  <var> options</var> 's {{MutationObserverInit/childList}}  is omitted, then set
3459+  <var> options</var> 's {{MutationObserverInit/childList}}  to true.
3460+ 
34403461 <li><p> If none of <var> options</var> 's {{MutationObserverInit/childList}} ,
34413462 {{MutationObserverInit/attributes}} , and {{MutationObserverInit/characterData}}  is true, then
34423463 <a>throw</a>  a <code> TypeError</code> .
@@ -3453,6 +3474,14 @@ method, when invoked, must run these steps:
34533474 <var> options</var> 's {{MutationObserverInit/characterData}}  is false, then <a>throw</a>  a
34543475 <code> TypeError</code> .
34553476
3477+  <li><p> If <var> options</var> 's {{MutationObserverInit/elementHasAttributeNameFilter}}  is present and
3478+  <var> options</var> 's {{MutationObserverInit/childList}}  is false, then <a>throw</a>  a
3479+  <code> TypeError</code> .
3480+ 
3481+  <li><p> If <var> options</var> 's {{MutationObserverInit/elementLocalNameFilter}}  is present and
3482+  <var> options</var> 's {{MutationObserverInit/childList}}  is false, then <a>throw</a>  a
3483+  <code> TypeError</code> .
3484+ 
34563485 <li> 
34573486  <p> <a for=list>For each</a>  <var> registered</var>  of <var> target</var> 's
34583487  <a>registered observer list</a> , if <var> registered</var> 's
@@ -3594,6 +3623,60 @@ run these steps:
35943623<ol> 
35953624 <li><p> Assert: either <var> addedNodes</var>  or <var> removedNodes</var>  <a for=set>is not empty</a> .
35963625
3626+  <li><p> If either <var> options</var> 's'  {{MutationObserverInit/elementLocalNameFilter}}  or
3627+  {{MutationObserverInit/elementHasAttributeNameFilter}}  is present, then:
3628+ 
3629+  <ol> 
3630+   <li><p> Let <var> nodeAttributesList</var>  be <var> nodeAttributesList</var>  of the node's attributes, "<code> node.getAttributeNames()</code> ".
3631+ 
3632+   <li><p> Let <var> filteredAddedNodes</var>  be an empty <a for=/>list</a> .
3633+ 
3634+   <li><p> Let <var> filterRemovedNodes</var>  be an empty <a for=/>list</a> .
3635+ 
3636+   <li> 
3637+    <p> For each <var> node</var>  in <var> addedNodes</var></a> .
3638+ 
3639+    <li> 
3640+      <p> If none of the following are true
3641+ 
3642+      <ul class=brief> 
3643+       <li> if <var> options</var> 's
3644+       {{MutationObserverInit/elementLocalNameFilter}}  is present, and
3645+       "<code> node.localName</code> " is in {{MutationObserverInit/elementLocalNameFilter}} 
3646+ 
3647+       <li><var> options</var> 's {{MutationObserverInit/elementHasAttributeNameFilter}}  is
3648+       present,and <var> options</var> 's  {{MutationObserverInit/elementHasAttributeNameFilter}} 
3649+       contains any of the attribute name in <var> nodeAttributesList</var> 
3650+     </ul> 
3651+     <p> then:
3652+     <ol> 
3653+      <li><p> <a for=queue>Enqueue</a>  <var> record</var>  node in <var> filteredAddedNodes</var> 
3654+     </ol> 
3655+ 
3656+   <li><p> For each <var> node</var>  in <var> removedNodes</var></a> .
3657+     <li> 
3658+       <p> If none of the following are true
3659+       <ul class=brief> 
3660+        <li> if <var> options</var> 's
3661+         {{MutationObserverInit/elementLocalNameFilter}}  is present, and
3662+         "<code> node.localName</code> " is in {{MutationObserverInit/elementLocalNameFilter}} 
3663+       <li> if <var> options</var> 's
3664+         {{MutationObserverInit/elementHasAttributeNameFilter}}  is present,and <var> options</var> 's
3665+           {{MutationObserverInit/elementHasAttributeNameFilter}}  contains any of the attribute names
3666+         in <var> nodeAttributesList</var> 
3667+      </ul> 
3668+      <p> then:
3669+      <ol> 
3670+       <li><p> <a for=queue>Enqueue</a>  <var> record</var>  node in <var> filterRemovedNodes</var> 
3671+      </ol> 
3672+ 
3673+  <li><p> Assert: either <var> filteredAddedNodes</var>  or <var> filteredRemovedNodes</var>  <a for=set>is not empty</a> .
3674+ 
3675+  <li><p> Set <var> addedNodes</var>  to <var> filteredAddedNodes</var> 
3676+ 
3677+  <li><p> Set <var> removedNodes</var>  to <var> filteredRemovedNodes</var> 
3678+  </ol> 
3679+ 
35973680 <li><p> <a>Queue a mutation record</a>  of "<code> childList</code> " for <var> target</var>  with
35983681 null, null, null, <var> addedNodes</var> , <var> removedNodes</var> , <var> previousSibling</var> ,
35993682 and <var> nextSibling</var> .
0 commit comments