@@ -5187,17 +5187,13 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
5187
5187
5188
5188
<p>Some attributes, called <dfn data-x="enumerated attribute" data-lt="enumerated attribute"
5189
5189
export>enumerated attributes</dfn>, take on a finite set of states. The state for such an
5190
- attribute is derived by combining the attribute's value, a set of keyword/state mappings given in
5191
- the specification of each attribute, and two possible special states that can also be given in the
5192
- specification of the attribute. These special states are the <dfn><i>invalid value
5193
- default</i></dfn> and the <dfn><i>missing value default</i></dfn>.</p>
5190
+ attribute is derived by combining the attribute's value, a set of keyword/state mappings, and
5191
+ three possible special states that can also be given in the specification of the attribute. These
5192
+ special states are the <dfn><i>invalid value default</i></dfn>, the <dfn><i>missing value
5193
+ default</i></dfn>, and the <dfn><i>empty value default</i></dfn>.</p>
5194
5194
5195
5195
<p class="note">Multiple keywords can map to the same state.</p>
5196
5196
5197
- <p class="note">The empty string can be a valid keyword. Note that the <i data-x="missing value
5198
- default">missing value default</i> applies only when the attribute is <em>missing</em>, not when
5199
- it is present with an empty string value.</p>
5200
-
5201
5197
<p>To determine the state of an attribute, use the following steps:</p>
5202
5198
5203
5199
<ol>
@@ -5216,6 +5212,10 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
5216
5212
<li><p>If the attribute's value is an <span>ASCII case-insensitive</span> match for one of the
5217
5213
keywords defined for the attribute, then return the state represented by that keyword.</p></li>
5218
5214
5215
+ <li><p>If the attribute has an <i data-x="empty value default">empty value default</i> state
5216
+ defined and the attribute's value is the empty string, then return that <i data-x="empty value
5217
+ default">empty value default</i> state.</p></li>
5218
+
5219
5219
<li><p>If the attribute has an <i data-x="invalid value default">invalid value default</i> state
5220
5220
defined, then return that <i data-x="invalid value default">invalid value default</i>
5221
5221
state.</p></li>
@@ -5224,8 +5224,14 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
5224
5224
</ol>
5225
5225
5226
5226
<p>For authoring conformance purposes, if an enumerated attribute is specified, the attribute's
5227
- value must be an <span>ASCII case-insensitive</span> match for one of the conforming keywords for
5228
- that attribute, with no leading or trailing whitespace.</p>
5227
+ value must be one of:</p>
5228
+
5229
+ <ul>
5230
+ <li><p>An <span>ASCII case-insensitive</span> match for one of the conforming keywords for that
5231
+ attribute, with no leading or trailing whitespace.</p></li>
5232
+ <li><p>The empty string and the attribute must have an <i data-x="empty value default">empty
5233
+ value default</i> defined.</p></li>
5234
+ </ul>
5229
5235
5230
5236
<p>For <span data-x="reflect">reflection</span> purposes, states which have any keywords mapping
5231
5237
to them are said to have a <dfn>canonical keyword</dfn>. This is determined as follows:</p>
@@ -7625,13 +7631,11 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
7625
7631
<tbody>
7626
7632
<tr>
7627
7633
<td><dfn attr-value for="audio/crossorigin,video/crossorigin,img/crossorigin,link/crossorigin,script/crossorigin"><code data-x="attr-crossorigin-anonymous-keyword">anonymous</code></dfn>
7628
- <td rowspan=2 ><dfn data-x="attr-crossorigin-anonymous">Anonymous</dfn>
7629
- <td rowspan=2 ><span data-x="concept-request">Requests</span> for the element will have their
7634
+ <td><dfn data-x="attr-crossorigin-anonymous">Anonymous</dfn>
7635
+ <td><span data-x="concept-request">Requests</span> for the element will have their
7630
7636
<span data-x="concept-request-mode">mode</span> set to "<code data-x="">cors</code>" and their
7631
7637
<span data-x="concept-request-credentials-mode">credentials mode</span> set to "<code
7632
7638
data-x="">same-origin</code>".
7633
- <tr>
7634
- <td>(the empty string)
7635
7639
<tr>
7636
7640
<td><dfn attr-value for="audio/crossorigin,video/crossorigin,img/crossorigin,link/crossorigin,script/crossorigin"><code data-x="attr-crossorigin-use-credentials-keyword">use-credentials</code></dfn>
7637
7641
<td><dfn data-x="attr-crossorigin-use-credentials">Use Credentials</dfn>
@@ -7643,8 +7647,8 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
7643
7647
7644
7648
<p>The attribute's <i data-x="missing value default">missing value default</i> is the <dfn
7645
7649
data-x="attr-crossorigin-none">No CORS</dfn> state, and its <i data-x="invalid value
7646
- default">invalid value default</i> is the <span
7647
- data-x="attr-crossorigin-anonymous">Anonymous</span> state.</p>
7650
+ default">invalid value default</i> and <i data-x="empty value default">empty value default</i> are
7651
+ both the <span data-x="attr-crossorigin-anonymous">Anonymous</span> state.</p>
7648
7652
7649
7653
<p>The majority of fetches governed by <span data-x="CORS settings attribute">CORS settings
7650
7654
attributes</span> will be done via the <span>create a potential-CORS request</span> algorithm.</p>
@@ -13890,10 +13894,8 @@ Transport Protocol">HTTP</abbr> today.</p></code></pre> <!-- DO NOT REWRAP
13890
13894
<tr>
13891
13895
<td><dfn attr-value for="html-global/translate"><code
13892
13896
data-x="attr-translate-yes-keyword">yes</code></dfn>
13893
- <td rowspan=2><dfn data-x="attr-translate-yes-state">Yes</dfn>
13894
- <td rowspan=2>Sets <span>translation mode</span> to <span>translate-enabled</span>.
13895
- <tr>
13896
- <td>(the empty string)
13897
+ <td><dfn data-x="attr-translate-yes-state">Yes</dfn>
13898
+ <td>Sets <span>translation mode</span> to <span>translate-enabled</span>.
13897
13899
<tr>
13898
13900
<td><dfn attr-value for="html-global/translate"><code
13899
13901
data-x="attr-translate-no-keyword">no</code></dfn>
@@ -13903,7 +13905,9 @@ Transport Protocol">HTTP</abbr> today.</p></code></pre> <!-- DO NOT REWRAP
13903
13905
13904
13906
<p>The attribute's <i data-x="missing value default">missing value default</i> and <i
13905
13907
data-x="invalid value default">invalid value default</i> are both the <dfn
13906
- data-x="attr-translate-inherit-state">Inherit</dfn> state.</p>
13908
+ data-x="attr-translate-inherit-state">Inherit</dfn> state, and its <i data-x="empty value
13909
+ default">empty value default</i> is the <span data-x="attr-translate-yes-state">Yes</span>
13910
+ state.</p>
13907
13911
13908
13912
<p>Each element (even non-HTML elements) has a <dfn>translation mode</dfn>, which is in either the
13909
13913
<span>translate-enabled</span> state or the <span>no-translate</span> state. If an <span
@@ -37731,10 +37735,8 @@ interface <dfn interface>MediaError</dfn> {
37731
37735
<tr>
37732
37736
<td><dfn attr-value for="audio/preload,video/preload"><code
37733
37737
data-x="attr-media-preload-auto">auto</code></dfn>
37734
- <td rowspan=2><dfn data-x="attr-media-preload-auto-state">Automatic</dfn>
37735
- <td rowspan=2>Hints to the user agent that the user agent can put the user's needs first without risk to the server, up to and including optimistically downloading the entire resource.
37736
- <tr>
37737
- <td>(the empty string)
37738
+ <td><dfn data-x="attr-media-preload-auto-state">Automatic</dfn>
37739
+ <td>Hints to the user agent that the user agent can put the user's needs first without risk to the server, up to and including optimistically downloading the entire resource.
37738
37740
<tr>
37739
37741
<td><dfn attr-value for="audio/preload,video/preload"><code
37740
37742
data-x="attr-media-preload-none">none</code></dfn>
@@ -37749,6 +37751,9 @@ interface <dfn interface>MediaError</dfn> {
37749
37751
When the media resource is playing, hints to the user agent that bandwidth is to be considered scarce, e.g. suggesting throttling the download so that the media data is obtained at the slowest possible rate that still maintains consistent playback.
37750
37752
</table>
37751
37753
37754
+ <p>The attribute's <i data-x="empty value default">empty value default</i> is the <span
37755
+ data-x="attr-media-preload-auto-state">Automatic</span> state.</p>
37756
+
37752
37757
<p>The attribute's <i data-x="missing value default">missing value default</i> and <i
37753
37758
data-x="invalid value default">invalid value default</i> are both
37754
37759
<span>implementation-defined</span>, though the <span
@@ -80348,10 +80353,8 @@ END:VCARD</pre>
80348
80353
<tbody>
80349
80354
<tr>
80350
80355
<td><dfn attr-value for="html-global/hidden"><code data-x="attr-hidden-hidden">hidden</code></dfn>
80351
- <td rowspan=2><dfn data-x="attr-hidden-hidden-state">Hidden</dfn>
80352
- <td rowspan=2>Will not be rendered.
80353
- <tr>
80354
- <td>(the empty string)
80356
+ <td><dfn data-x="attr-hidden-hidden-state">Hidden</dfn>
80357
+ <td>Will not be rendered.
80355
80358
<tr>
80356
80359
<td><dfn attr-value for="html-global/hidden"><code data-x="attr-hidden-until-found">until-found</code></dfn>
80357
80360
<td><dfn data-x="attr-hidden-until-found-state">Hidden Until Found</dfn>
@@ -80361,8 +80364,8 @@ END:VCARD</pre>
80361
80364
80362
80365
<p>The attribute's <i data-x="missing value default">missing value default</i> is the <dfn
80363
80366
data-x="attr-hidden-not-hidden-state">Not Hidden</dfn> state, and its <i data-x="invalid value
80364
- default">invalid value default</i> is the <span data-x="attr-hidden-hidden-state">Hidden</span>
80365
- state.</p>
80367
+ default">invalid value default</i> and <i data-x="empty value default">empty value default</i> are
80368
+ both the <span data-x="attr-hidden-hidden-state">Hidden</span> state.</p>
80366
80369
80367
80370
<p>When an element has the <code data-x="attr-hidden">hidden</code> attribute in the <span
80368
80371
data-x="attr-hidden-hidden-state">Hidden</span> state, it indicates that the element is not yet, or
@@ -83359,10 +83362,8 @@ addShortcutKeyLabel(document.getElementById('c'));</code></pre>
83359
83362
<tr>
83360
83363
<td><dfn attr-value for="html-global/contenteditable"><code
83361
83364
data-x="attr-contenteditable-true">true</code></dfn>
83362
- <td rowspan=2><dfn data-x="attr-contenteditable-true-state">True</dfn>
83363
- <td rowspan=2>The element is editable.
83364
- <tr>
83365
- <td>(the empty string)
83365
+ <td><dfn data-x="attr-contenteditable-true-state">True</dfn>
83366
+ <td>The element is editable.
83366
83367
<tr>
83367
83368
<td><dfn attr-value for="html-global/contenteditable"><code
83368
83369
data-x="attr-contenteditable-false">false</code></dfn>
@@ -83379,7 +83380,9 @@ addShortcutKeyLabel(document.getElementById('c'));</code></pre>
83379
83380
<p>The attribute's <i data-x="missing value default">missing value default</i> and <i
83380
83381
data-x="invalid value default">invalid value default</i> are both the <dfn
83381
83382
data-x="attr-contenteditable-inherit-state">Inherit</dfn> state. The inherit state indicates that
83382
- the element is editable (or not) based on the parent element's state.</p>
83383
+ the element is editable (or not) based on the parent element's state. The attribute's <i
83384
+ data-x="empty value default">empty value default</i> is the <span
83385
+ data-x="attr-contenteditable-true-state">True</span> state.</p>
83383
83386
83384
83387
<div class="example">
83385
83388
<p>For example, consider a page that has a <code>form</code> and a <code>textarea</code> to
@@ -83647,10 +83650,8 @@ body { display:none }
83647
83650
<tr>
83648
83651
<td><dfn attr-value for="html-global/spellcheck"><code
83649
83652
data-x="attr-spellcheck-true">true</code></dfn>
83650
- <td rowspan=2><dfn data-x="attr-spellcheck-true-state">True</dfn>
83651
- <td rowspan=2>Spelling and grammar will be checked.
83652
- <tr>
83653
- <td>(the empty string)
83653
+ <td><dfn data-x="attr-spellcheck-true-state">True</dfn>
83654
+ <td>Spelling and grammar will be checked.
83654
83655
<tr>
83655
83656
<td><dfn attr-value for="html-global/spellcheck"><code
83656
83657
data-x="attr-spellcheck-false">false</code></dfn>
@@ -83662,7 +83663,9 @@ body { display:none }
83662
83663
data-x="invalid value default">invalid value default</i> are both the <dfn
83663
83664
data-x="attr-spellcheck-default-state">Default</dfn> state. The default state indicates that the
83664
83665
element is to act according to a default behavior, possibly based on the parent element's own
83665
- <code data-x="attr-spellcheck">spellcheck</code> state, as defined below.</p>
83666
+ <code data-x="attr-spellcheck">spellcheck</code> state, as defined below. The attribute's <i
83667
+ data-x="empty value default">empty value default</i> is the <span
83668
+ data-x="attr-spellcheck-true-state">True</span> state.</p>
83666
83669
83667
83670
<div w-nodev>
83668
83671
@@ -83839,11 +83842,9 @@ body { display:none }
83839
83842
<tr>
83840
83843
<td><dfn attr-value for="html-global/writingsuggestions"><code
83841
83844
data-x="attr-writingsuggestions-true">true</code></dfn>
83842
- <td rowspan="2" ><dfn data-x="attr-writingsuggestions-true-state">True</dfn>
83843
- <td rowspan="2" >Writing suggestions should be offered on this element.
83845
+ <td><dfn data-x="attr-writingsuggestions-true-state">True</dfn>
83846
+ <td>Writing suggestions should be offered on this element.
83844
83847
</tr>
83845
- <tr>
83846
- <td>(the empty string)
83847
83848
<tr>
83848
83849
<td><dfn attr-value for="html-global/writingsuggestions"><code
83849
83850
data-x="attr-writingsuggestions-false">false</code></dfn>
@@ -83858,7 +83859,8 @@ body { display:none }
83858
83859
element's own <code data-x="attr-writingsuggestions">writingsuggestions</code> state, as defined
83859
83860
below.</p>
83860
83861
83861
- <p>The attribute's <i data-x="invalid value default">invalid value default</i> is the <span
83862
+ <p>The attribute's <i data-x="invalid value default">invalid value default</i> and <i
83863
+ data-x="empty value default">empty value default</i> are both the <span
83862
83864
data-x="attr-writingsuggestions-true-state">True</span> state.</p>
83863
83865
83864
83866
<dl class="domintro">
@@ -84190,21 +84192,19 @@ body { display:none }
84190
84192
<tr>
84191
84193
<td><dfn attr-value for="html-global/autocorrect"><code
84192
84194
data-x="attr-autocorrect-on">on</code></dfn>
84193
- <td rowspan="2" ><dfn data-x="concept-autocorrection-on">on</dfn>
84194
- <td rowspan="2" >The user agent is permitted to automatically correct spelling errors while the user types.
84195
+ <td><dfn data-x="concept-autocorrection-on">on</dfn>
84196
+ <td>The user agent is permitted to automatically correct spelling errors while the user types.
84195
84197
Whether spelling is automatically corrected while typing left is for the user agent to decide,
84196
84198
and may depend on the element as well as the user's preferences.
84197
- <tr>
84198
- <td>(the empty string)
84199
84199
<tr>
84200
84200
<td><dfn attr-value for="html-global/autocorrect"><code data-x="attr-autocorrect-off">off</code></dfn>
84201
84201
<td><dfn data-x="concept-autocorrection-off">off</dfn>
84202
84202
<td>The user agent is not allowed to automatically correct spelling while the user types.
84203
84203
</table>
84204
84204
84205
- <p>The attribute's <i data-x="invalid value default">invalid value default</i> and <i
84206
- data-x="missing value default">missing value default</i> are both the <span
84207
- data-x="concept-autocorrection-on">on</span> state.</p>
84205
+ <p>The attribute's <i data-x="invalid value default">invalid value default</i>, <i data-x="missing
84206
+ value default">missing value default</i>, and <i data-x="empty value default">empty value
84207
+ default</i> are all the <span data-x="concept-autocorrection-on">on</span> state.</p>
84208
84208
84209
84209
<p>The <dfn attribute for="HTMLElement"><code data-x="dom-autocorrect">autocorrect</code></dfn>
84210
84210
getter steps are: return true if the element's <span>used autocorrection state</span> is <span
@@ -87367,11 +87367,9 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> {
87367
87367
<tr>
87368
87368
<td><dfn attr-value for="html-global/popover"><code
87369
87369
data-x="attr-popover-auto">auto</code></dfn>
87370
- <td rowspan=2 ><dfn data-x="attr-popover-auto-state">Auto</dfn>
87371
- <td rowspan=2 >Closes other popovers when opened; has <span data-x="popover light dismiss">light
87370
+ <td><dfn data-x="attr-popover-auto-state">Auto</dfn>
87371
+ <td>Closes other popovers when opened; has <span data-x="popover light dismiss">light
87372
87372
dismiss</span> and responds to <span data-x="close request">close requests</span>.
87373
- <tr>
87374
- <td>(the empty string)
87375
87373
<tr>
87376
87374
<td><dfn attr-value for="html-global/popover"><code
87377
87375
data-x="attr-popover-manual">manual</code></dfn>
@@ -87391,9 +87389,10 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> {
87391
87389
</table>
87392
87390
87393
87391
<p>The attribute's <i data-x="missing value default">missing value default</i> is the <dfn
87394
- data-x="attr-popover-none-state">No Popover</dfn> state, and its <i data-x="invalid value
87392
+ data-x="attr-popover-none-state">No Popover</dfn> state, its <i data-x="invalid value
87395
87393
default">invalid value default</i> is the <span data-x="attr-popover-manual-state">Manual</span>
87396
- state.</p>
87394
+ state, and its <i data-x="empty value default">empty value default</i> is the <span
87395
+ data-x="attr-popover-auto-state">Auto</span> state.</p>
87397
87396
87398
87397
<p>The <dfn attribute for="HTMLElement"><code data-x="dom-popover">popover</code></dfn> IDL
87399
87398
attribute must <span>reflect</span> the <span data-x="attr-popover">popover</span> attribute,
0 commit comments