@@ -1794,6 +1794,18 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
1794
1794
<var>removedNode</var> and optionally <var>oldParent</var>, are defined as the following:</p>
1795
1795
1796
1796
<ol>
1797
+ <li id="node-remove-focus-fixup">
1798
+ <p>If <var>removedNode</var>'s <span>node document</span>'s <span data-x="focused area of the
1799
+ document">focused area</span> is <var>removedNode</var>, then set <var>removedNode</var>'s
1800
+ <span>node document</span>'s <span data-x="focused area of the document">focused area</span> to
1801
+ <var>removedNode</var>'s <span>node document</span>'s <span>viewport</span>.</p>
1802
+
1803
+ <p class="note">This does <em>not</em> perform the <span>unfocusing steps</span>,
1804
+ <span>focusing steps</span>, or <span>focus update steps</span>, and thus no <code
1805
+ data-x="event-blur">blur</code> or <code data-x="event-change">change</code> events are
1806
+ fired.</p>
1807
+ </li>
1808
+
1797
1809
<li><p>If <var>removedNode</var> is an element whose <span
1798
1810
data-x="concept-element-namespace">namespace</span> is the <span>HTML namespace</span>, and this
1799
1811
standard defines <span data-x="html element removing steps">HTML element removing steps</span>
@@ -59283,9 +59295,9 @@ interface <dfn interface>HTMLDialogElement</dfn> : <span>HTMLElement</span> {
59283
59295
59284
59296
<p class="note" id="note-dialog-plus-focus-fixup">This will cause the <span>focused area of the
59285
59297
document</span> to become <span>inert</span> (unless that currently focused area is a
59286
- <span>shadow-including descendant</span> of <var>subject</var>). In such cases, the <span>focus
59287
- fixup rule</ span> will kick in and reset the < span>focused area of the document</span > to the
59288
- <span>viewport</span> for now . In a couple steps we will attempt to find a better candidate to
59298
+ <span>shadow-including descendant</span> of <var>subject</var>). In such cases, the
59299
+ < span>focused area of the document</ span> will soon be <a href="#focus-fixup-rule">reset</a > to
59300
+ the <span>viewport</span>. In a couple steps we will attempt to find a better candidate to
59289
59301
focus.</p>
59290
59302
</li>
59291
59303
@@ -76995,39 +77007,14 @@ partial interface <span id="NavigatorUserActivation-partial">Navigator</span> {
76995
77007
</li>
76996
77008
</ol>
76997
77009
76998
- <p>When the <span>currently focused area of a top-level traversable</span> is somehow unfocused
76999
- without another element being explicitly focused in its stead, the user agent must
77000
- <span>immediately</span> run the <span>unfocusing steps</span> for that object.</p>
77001
-
77002
- <p class="note">The <span>unfocusing steps</span> do not always result in the focus changing,
77003
- even when applied to the <span>currently focused area of a top-level traversable</span>. For
77010
+ <p class="note">The <span>unfocusing steps</span> do not always result in the focus changing, even
77011
+ when applied to the <span>currently focused area of a top-level traversable</span>. For
77004
77012
example, if the <span>currently focused area of a top-level traversable</span> is a
77005
77013
<span>viewport</span>, then it will usually keep its focus regardless until another
77006
77014
<span>focusable area</span> is explicitly focused with the <span>focusing steps</span>.</p>
77007
77015
77008
77016
<hr>
77009
77017
77010
- <p><dfn>Focus fixup rule</dfn>: When the designated <span data-x="focused area of the
77011
- document">focused area of the document</span> is removed from that <code>Document</code> in some
77012
- way (e.g. it stops being a <span>focusable area</span>, it is removed from the DOM, it becomes
77013
- <span>inert</span>, etc.), designate the <code>Document</code>'s <span>viewport</span> to be the
77014
- new <span>focused area of the document</span>.</p>
77015
-
77016
- <p class="example">For example, this might happen because an element is removed from its
77017
- <code>Document</code>, or has a <code data-x="attr-hidden">hidden</code> attribute added. It might
77018
- also happen to an <code>input</code> element when the element gets <span
77019
- data-x="concept-fe-disabled">disabled</span>.</p>
77020
-
77021
- <p class="example">In a <code>Document</code> whose <span data-x="focused area of the
77022
- document">focused area</span> is a <code>button</code> element, removing, disabling, or hiding
77023
- that button would cause the page's new <span data-x="focused area of the document">focused
77024
- area</span> to be the <span>viewport</span> of the <code>Document</code>. This would, in turn,
77025
- be reflected through the <code
77026
- data-x="dom-documentorshadowroot-activeElement">activeElement</code> API as <span>the body
77027
- element</span>.</p>
77028
-
77029
- <hr>
77030
-
77031
77018
<p>The <dfn>focus update steps</dfn>, given an <var>old chain</var>, a <var>new chain</var>, and a <var>new focus target</var> respectively, are as
77032
77019
follows:</p>
77033
77020
@@ -77074,8 +77061,9 @@ partial interface <span id="NavigatorUserActivation-partial">Navigator</span> {
77074
77061
named <code data-x="event-blur">blur</code> at <var>blur event target</var>, with
77075
77062
<var>related blur target</var> as the related target.</p>
77076
77063
77077
- <p class="note">In some cases, e.g. if <var>entry</var> is an <code>area</code>
77078
- element's shape, a scrollable region, or a <span>viewport</span>, no event is fired.</p>
77064
+ <p class="note" id="note-sometimes-no-blur-event">In some cases, e.g. if <var>entry</var> is
77065
+ an <code>area</code> element's shape, a scrollable region, or a <span>viewport</span>, no
77066
+ event is fired.</p>
77079
77067
</li>
77080
77068
</ol>
77081
77069
</li>
@@ -99513,6 +99501,27 @@ import "https://example.com/foo/../module2.mjs";</code></pre>
99513
99501
</ol>
99514
99502
</li>
99515
99503
99504
+ <li id="focus-fixup-rule">
99505
+ <p>For each <span>fully active</span> <code>Document</code> in <var>docs</var>, if the <span
99506
+ data-x="focused area of the document">focused area</span> of that <code>Document</code> is no
99507
+ longer a <span>focusable area</span>, then run the <span>focusing steps</span> for that
99508
+ <code>Document</code>'s <span>viewport</span>.</p>
99509
+
99510
+ <p class="example">For example, this might happen because an element has the <code
99511
+ data-x="attr-hidden">hidden</code> attribute added, causing it to stop <span>being
99512
+ rendered</span>. It might also happen to an <code>input</code> element when the element gets
99513
+ <span data-x="concept-fe-disabled">disabled</span>.</p>
99514
+
99515
+ <p class="note">This will <a href="#note-sometimes-no-blur-event">usually</a> fire <code
99516
+ data-x="event-blur">blur</code> events, and possibly <code data-x="event-change">change</code>
99517
+ events.</p>
99518
+
99519
+ <p class="note">In addition to this asynchronous fixup, if the <span>focused area of the
99520
+ document</span> is removed, there is a <a href="#node-remove-focus-fixup">synchronous
99521
+ fixup</a>. That one will <em>not</em> fire <code data-x="event-blur">blur</code> or <code
99522
+ data-x="event-change">change</code> events.</p>
99523
+ </li>
99524
+
99516
99525
<li><p>For each <span>fully active</span> <code>Document</code> in <var>docs</var>, <span>run
99517
99526
the update intersection observations steps</span> for that <code>Document</code>, passing in
99518
99527
<var>now</var> as the timestamp. <ref spec=INTERSECTIONOBSERVER></p></li>
0 commit comments