@markuplint/html-spec 5.0.0-rc.1 → 5.0.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.json CHANGED
@@ -753,6 +753,18 @@
753
753
  "onwebkittransitionend": {
754
754
  "type": "FunctionBody",
755
755
  "deprecated": true
756
+ },
757
+ "ontouchstart": {
758
+ "type": "FunctionBody"
759
+ },
760
+ "ontouchend": {
761
+ "type": "FunctionBody"
762
+ },
763
+ "ontouchmove": {
764
+ "type": "FunctionBody"
765
+ },
766
+ "ontouchcancel": {
767
+ "type": "FunctionBody"
756
768
  }
757
769
  },
758
770
  "#HTMLLinkAndFetchingAttrs": {
@@ -811,7 +823,7 @@
811
823
  }
812
824
  },
813
825
  "integrity": {
814
- "type": "Any"
826
+ "type": "SRIHash"
815
827
  },
816
828
  "media": {
817
829
  "type": "<media-query-list>"
@@ -12755,18 +12767,14 @@
12755
12767
  "requiredContextRole": [],
12756
12768
  "requiredOwnedElements": [],
12757
12769
  "accessibleNameRequired": false,
12758
- "accessibleNameFromAuthor": true,
12759
- "accessibleNameFromContent": true,
12760
- "accessibleNameProhibited": false,
12770
+ "accessibleNameFromAuthor": false,
12771
+ "accessibleNameFromContent": false,
12772
+ "accessibleNameProhibited": true,
12761
12773
  "ownedProperties": [
12762
12774
  {
12763
12775
  "name": "aria-atomic",
12764
12776
  "inherited": true
12765
12777
  },
12766
- {
12767
- "name": "aria-braillelabel",
12768
- "inherited": true
12769
- },
12770
12778
  {
12771
12779
  "name": "aria-brailleroledescription",
12772
12780
  "inherited": true
@@ -12835,14 +12843,6 @@
12835
12843
  "name": "aria-keyshortcuts",
12836
12844
  "inherited": true
12837
12845
  },
12838
- {
12839
- "name": "aria-label",
12840
- "inherited": true
12841
- },
12842
- {
12843
- "name": "aria-labelledby",
12844
- "inherited": true
12845
- },
12846
12846
  {
12847
12847
  "name": "aria-live",
12848
12848
  "inherited": true
@@ -12860,7 +12860,7 @@
12860
12860
  "inherited": true
12861
12861
  }
12862
12862
  ],
12863
- "prohibitedProperties": []
12863
+ "prohibitedProperties": ["aria-braillelabel", "aria-label", "aria-labelledby"]
12864
12864
  },
12865
12865
  {
12866
12866
  "name": "tree",
@@ -48954,7 +48954,8 @@
48954
48954
  {
48955
48955
  "oneOrMore": ":model(flow):not(address, :model(heading), :model(sectioning), header, foooter, :has(address, :model(heading), :model(sectioning), header, foooter))"
48956
48956
  }
48957
- ]
48957
+ ],
48958
+ "forbiddenAncestors": ["address"]
48958
48959
  },
48959
48960
  "aria": {
48960
48961
  "implicitRole": "group",
@@ -49194,11 +49195,11 @@
49194
49195
  "#GlobalEventAttrs": true,
49195
49196
  "#HTMLEmbededAndMediaContentAttrs": ["src", "preload", "autoplay", "loop", "muted", "controls"],
49196
49197
  "#HTMLGlobalAttrs": true,
49197
- "#HTMLLinkAndFetchingAttrs": ["crossorigin"]
49198
+ "#HTMLLinkAndFetchingAttrs": ["crossorigin", "loading"]
49198
49199
  },
49199
49200
  "attributes": {
49200
49201
  "autoplay": {
49201
- "description": "A Boolean attribute: if specified, the audio will automatically begin playback as soon as it can do so, without waiting for the entire audio file to finish downloading. Note: Sites that automatically play audio (or videos with an audio track) can be an unpleasant experience for users, so should be avoided when possible. If you must offer autoplay functionality, you should make it opt-in (requiring a user to specifically enable it). However, this can be useful when creating media elements whose source will be set at a later time, under user control. See our autoplay guide for additional information about how to properly use autoplay."
49202
+ "description": "A Boolean attribute: if specified, the audio will automatically begin playback as soon as it can do so, without waiting for the entire audio file to finish downloading. Note: Sites that automatically play audio (or videos with an audio track) can be an unpleasant experience for users, so should be avoided when possible. If you must offer autoplay functionality, you should make it opt-in (requiring a user to specifically enable it). However, this can be useful when creating media elements whose source will be set at a later time, under user control. See our autoplay guide for additional information about how to properly use autoplay. Note: Audio with the loading=\"lazy\" attribute set will not start downloading and autoplaying until the controls for the media are near or within the viewport. Lazy-loaded audio without the controls attribute will not autoplay."
49202
49203
  },
49203
49204
  "controls": {
49204
49205
  "description": "If this attribute is present, the browser will offer controls to allow the user to control audio playback, including volume, seeking, and pause/resume playback."
@@ -49212,6 +49213,10 @@
49212
49213
  "disableremoteplayback": {
49213
49214
  "description": "A Boolean attribute used to disable the capability of remote playback in devices that are attached using wired (HDMI, DVI, etc.) and wireless technologies (Miracast, Chromecast, DLNA, AirPlay, etc.). See the proposed Remote Playback API specification for more information. In Safari, you can use x-webkit-airplay=\"deny\" as a fallback."
49214
49215
  },
49216
+ "loading": {
49217
+ "description": "Indicates how the browser should load the audio: eager Loads the audio immediately, regardless of whether or not the audio is currently within the visible viewport (this is the default value). lazy Defers loading the audio until the controls reach a calculated distance from the viewport, as defined by the browser. Note: In order for audio elements to intersect visibly with the viewport, they need to be visible. Browsers use the controls attribute to make audio elements visible, so it's needed for lazy loading. Lazy-loaded audio without the controls attribute will not load. Lazy loading avoids the network and storage bandwidth required to handle the audio until it's reasonably certain that it will be needed. This improves the performance in most typical use cases. Lazy-loaded audio located in the visual viewport may not yet be downloaded when the Window load event is fired. This is because the event is fired based on eager-loaded audio only — lazy-loaded audio is not considered even if it is located within the visual viewport upon initial page load. Loading is only deferred when JavaScript is enabled. This is an anti-tracking measure, because if a user agent supported lazy loading when scripting is disabled, it would still be possible for a site to track a user's approximate scroll position throughout a session, by strategically placing audio in a page's markup such that a server can track how many audio requests are made and when. Note: The loading=\"lazy\" attribute also impacts the autoplay attribute as described in that section of this page.",
49218
+ "experimental": false
49219
+ },
49215
49220
  "loop": {
49216
49221
  "description": "A Boolean attribute: if specified, the audio player will automatically seek back to the start upon reaching the end of the audio."
49217
49222
  },
@@ -49219,7 +49224,7 @@
49219
49224
  "description": "A Boolean attribute that indicates whether the audio will be initially silenced. Its default value is false."
49220
49225
  },
49221
49226
  "preload": {
49222
- "description": "This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience. It may have one of the following values: none: Indicates that the audio should not be preloaded. metadata: Indicates that only audio metadata (e.g., length) is fetched. auto: Indicates that the whole audio file can be downloaded, even if the user is not expected to use it. empty string: A synonym of the auto value. The default value is different for each browser. The spec advises it to be set to metadata. Note: The autoplay attribute has precedence over preload. If autoplay is specified, the browser would obviously need to start downloading the audio for playback. The browser is not forced by the specification to follow the value of this attribute; it is a mere hint."
49227
+ "description": "This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience. It may have one of the following values: none: Indicates that the audio should not be preloaded. metadata: Indicates that only audio metadata (e.g., length) is fetched. auto: Indicates that the whole audio file can be downloaded, even if the user is not expected to use it. empty string: A synonym of the auto value. The default value is different for each browser. The spec advises it to be set to metadata. Note: Audio with the loading=\"lazy\" attribute set will only apply the preload behavior once the audio controls are near or within the viewport. The autoplay attribute has precedence over preload. If autoplay is specified, the browser would obviously need to start downloading the audio for playback. The browser is not forced by the specification to follow the value of this attribute; it is a mere hint."
49223
49228
  },
49224
49229
  "src": {
49225
49230
  "description": "The URL of the audio to embed. This is subject to HTTP access controls. This is optional; you may instead use the <source> element within the audio block to specify the audio to embed."
@@ -49357,7 +49362,8 @@
49357
49362
  },
49358
49363
  "attributes": {
49359
49364
  "dir": {
49360
- "description": "The direction in which text should be rendered in this element's contents. Possible values are: ltr: Indicates that the text should go in a left-to-right direction. rtl: Indicates that the text should go in a right-to-left direction."
49365
+ "description": "The direction in which text should be rendered in this element's contents. Possible values are: ltr: Indicates that the text should go in a left-to-right direction. rtl: Indicates that the text should go in a right-to-left direction.",
49366
+ "required": true
49361
49367
  }
49362
49368
  }
49363
49369
  },
@@ -49498,11 +49504,11 @@
49498
49504
  "deprecated": true
49499
49505
  },
49500
49506
  "bottommargin": {
49501
- "description": "The margin of the bottom of the body. Use the CSS margin-bottom property (or the logical margin-block-end property) instead.",
49507
+ "description": "Ignored.",
49502
49508
  "deprecated": true
49503
49509
  },
49504
49510
  "leftmargin": {
49505
- "description": "The margin of the left of the body. Use the CSS margin-left property (or the logical margin-inline-start property) instead.",
49511
+ "description": "The margin of the left and right of the body. Use the CSS margin-left and margin-right properties (or the logical margin-inline property) instead.",
49506
49512
  "deprecated": true
49507
49513
  },
49508
49514
  "link": {
@@ -49564,7 +49570,7 @@
49564
49570
  "type": "FunctionBody"
49565
49571
  },
49566
49572
  "rightmargin": {
49567
- "description": "The margin of the right of the body. Use the CSS margin-right property or the logical margin-inline-end property) instead.",
49573
+ "description": "Ignored.",
49568
49574
  "deprecated": true
49569
49575
  },
49570
49576
  "text": {
@@ -49572,7 +49578,7 @@
49572
49578
  "deprecated": true
49573
49579
  },
49574
49580
  "topmargin": {
49575
- "description": "The margin of the top of the body. Use the CSS margin-top property (or the logical margin-block-start property) instead.",
49581
+ "description": "The margin of the top and bottom of the body. Use the CSS margin-top and margin-bottom properties (or the logical margin-block property) instead.",
49576
49582
  "deprecated": true
49577
49583
  },
49578
49584
  "vlink": {
@@ -50364,7 +50370,7 @@
50364
50370
  "choice": [
50365
50371
  [
50366
50372
  {
50367
- "oneOrMore": [
50373
+ "zeroOrMore": [
50368
50374
  {
50369
50375
  "zeroOrMore": ":model(script-supporting)"
50370
50376
  },
@@ -50661,7 +50667,8 @@
50661
50667
  {
50662
50668
  "oneOrMore": ":model(flow):not(header, footer, :has(header, footer))"
50663
50669
  }
50664
- ]
50670
+ ],
50671
+ "forbiddenAncestors": ["header", "footer"]
50665
50672
  },
50666
50673
  "aria": {
50667
50674
  "implicitRole": "contentinfo",
@@ -51052,7 +51059,8 @@
51052
51059
  {
51053
51060
  "oneOrMore": ":model(flow):not(header, footer, :has(header, footer))"
51054
51061
  }
51055
- ]
51062
+ ],
51063
+ "forbiddenAncestors": ["header", "footer"]
51056
51064
  },
51057
51065
  "aria": {
51058
51066
  "implicitRole": "banner",
@@ -51304,7 +51312,7 @@
51304
51312
  "description": "The height of the frame in CSS pixels. Default is 150."
51305
51313
  },
51306
51314
  "loading": {
51307
- "description": "Indicates when the browser should load the iframe: eager Load the iframe immediately on page load (this is the default value). lazy Defer loading of the iframe until it reaches a calculated distance from the visual viewport, as defined by the browser. The intent is to avoid using the network and storage bandwidth required to fetch the frame until the browser is reasonably certain that it will be needed. This improves the performance and cost in most typical use cases, in particular by reducing initial page load times. Note: Loading is only deferred when JavaScript is enabled. This is an anti-tracking measure."
51315
+ "description": "Indicates when the browser should load the iframe: eager Load the iframe immediately on page load (this is the default value). lazy Defer loading of the iframe until it reaches a calculated distance from the visual viewport, as defined by the browser. The intent is to avoid using the network and storage bandwidth required to fetch the frame until the browser is reasonably certain that it will be needed. This improves the performance and cost in most typical use cases, in particular by reducing initial page load times. Loading is only deferred when JavaScript is enabled. This is an anti-tracking measure, because if a user agent supported lazy loading when scripting is disabled, it would still be possible for a site to track a user's approximate scroll position throughout a session, by strategically placing iframes in a page's markup such that a server can track how many iframes are requested and when."
51308
51316
  },
51309
51317
  "longdesc": {
51310
51318
  "description": "A URL of a long description of the frame's content. Due to widespread misuse, this is not helpful for non-visual browsers.",
@@ -51503,7 +51511,7 @@
51503
51511
  "condition": "a[href] img"
51504
51512
  },
51505
51513
  "loading": {
51506
- "description": "Indicates how the browser should load the image: eager Loads the image immediately, regardless of whether or not the image is currently within the visible viewport (this is the default value). lazy Defers loading the image until it reaches a calculated distance from the viewport, as defined by the browser. The intent is to avoid the network and storage bandwidth needed to handle the image until it's reasonably certain that it will be needed. This generally improves the performance of the content in most typical use cases. While explicit width and height attributes are recommended for all images to avoid layout shift, they are especially important for lazy-loaded ones. Lazy-loaded images will never be loaded if they do not intersect a visible part of an element, even if loading them would change that, because unloaded images have a width and height of 0. It creates an even more disruptive user experience when the content visible in the viewport reflows in the middle of reading it. The load event is fired after eager-loaded images have been fetched and processed, but before lazy-laded ones are, even if the lazy-loaded images are located within the visual viewport immediately upon initial page load. These images are still loaded as soon as layout completes; they just don't affect the timing of the load event. That means that when load fires, it's possible that any lazy-loaded images located in the visual viewport may not yet be visible. Loading is only deferred when JavaScript is enabled. This is an anti-tracking measure, because if a user agent supported lazy loading when scripting is disabled, it would still be possible for a site to track a user's approximate scroll position throughout a session, by strategically placing images in a page's markup such that a server can track how many images are requested and when."
51514
+ "description": "Indicates how the browser should load the image: eager Loads the image immediately, regardless of whether or not the image is currently within the visible viewport (this is the default value). lazy Defers loading the image until it reaches a calculated distance from the viewport, as defined by the browser. Lazy loading avoids the network and storage bandwidth required to handle the image until it's reasonably certain that it will be needed. This improves the performance in most typical use cases. While explicit width and height attributes are recommended for all images to avoid layout shift, they are especially important for lazy-loaded ones. Lazy-loaded images will never be loaded if they do not intersect a visible part of an element, even if loading them would change that, because unloaded images have a width and height of 0. It creates an even more disruptive user experience when the content visible in the viewport reflows in the middle of reading it. Lazy-loaded images located in the visual viewport may not yet be visible when the Window load event is fired. This is because the event is fired based on eager-loaded images lazy-loaded images are not considered even if they are located within the visual viewport upon initial page load. Loading is only deferred when JavaScript is enabled. This is an anti-tracking measure, because if a user agent supported lazy loading when scripting is disabled, it would still be possible for a site to track a user's approximate scroll position throughout a session, by strategically placing images in a page's markup such that a server can track how many images are requested and when."
51507
51515
  },
51508
51516
  "longdesc": {
51509
51517
  "description": "A link to a more detailed description of the image. Possible values are a URL or an element id. Note: This attribute is considered obsolete in the HTML spec. It has an uncertain future; authors should use a WAI-ARIA alternative such as aria-describedby or aria-details.",
@@ -51560,14 +51568,18 @@
51560
51568
  "permittedRoles": [
51561
51569
  "checkbox",
51562
51570
  "combobox",
51571
+ "gridcell",
51563
51572
  "link",
51564
51573
  "menuitem",
51565
51574
  "menuitemcheckbox",
51566
51575
  "menuitemradio",
51567
51576
  "option",
51568
51577
  "radio",
51578
+ "separator",
51579
+ "slider",
51569
51580
  "switch",
51570
- "tab"
51581
+ "tab",
51582
+ "treeitem"
51571
51583
  ]
51572
51584
  },
51573
51585
  "[type='checkbox' i]": {
@@ -51650,7 +51662,21 @@
51650
51662
  },
51651
51663
  "[type='image' i]": {
51652
51664
  "implicitRole": "button",
51653
- "permittedRoles": ["link", "menuitem", "menuitemcheckbox", "menuitemradio", "radio", "switch"]
51665
+ "permittedRoles": [
51666
+ "checkbox",
51667
+ "gridcell",
51668
+ "link",
51669
+ "menuitem",
51670
+ "menuitemcheckbox",
51671
+ "menuitemradio",
51672
+ "option",
51673
+ "radio",
51674
+ "separator",
51675
+ "slider",
51676
+ "switch",
51677
+ "tab",
51678
+ "treeitem"
51679
+ ]
51654
51680
  },
51655
51681
  "[type='month' i]": {
51656
51682
  "implicitRole": false,
@@ -51756,11 +51782,22 @@
51756
51782
  },
51757
51783
  "[type='reset' i]": {
51758
51784
  "implicitRole": "button",
51759
- "permittedRoles": false,
51760
- "properties": {
51761
- "global": true,
51762
- "role": "button"
51763
- }
51785
+ "permittedRoles": [
51786
+ "checkbox",
51787
+ "combobox",
51788
+ "gridcell",
51789
+ "link",
51790
+ "menuitem",
51791
+ "menuitemcheckbox",
51792
+ "menuitemradio",
51793
+ "option",
51794
+ "radio",
51795
+ "separator",
51796
+ "slider",
51797
+ "switch",
51798
+ "tab",
51799
+ "treeitem"
51800
+ ]
51764
51801
  },
51765
51802
  "[type='search' i]:not([list])": {
51766
51803
  "implicitRole": "searchbox",
@@ -51772,11 +51809,22 @@
51772
51809
  },
51773
51810
  "[type='submit' i]": {
51774
51811
  "implicitRole": "button",
51775
- "permittedRoles": false,
51776
- "properties": {
51777
- "global": true,
51778
- "role": "button"
51779
- }
51812
+ "permittedRoles": [
51813
+ "checkbox",
51814
+ "combobox",
51815
+ "gridcell",
51816
+ "link",
51817
+ "menuitem",
51818
+ "menuitemcheckbox",
51819
+ "menuitemradio",
51820
+ "option",
51821
+ "radio",
51822
+ "separator",
51823
+ "slider",
51824
+ "switch",
51825
+ "tab",
51826
+ "treeitem"
51827
+ ]
51780
51828
  },
51781
51829
  "[type='tel' i]:not([list])": {
51782
51830
  "implicitRole": "textbox",
@@ -51832,6 +51880,7 @@
51832
51880
  "[type='button' i]": {
51833
51881
  "implicitRole": "button",
51834
51882
  "permittedRoles": [
51883
+ "checkbox",
51835
51884
  "link",
51836
51885
  "menuitem",
51837
51886
  "menuitemcheckbox",
@@ -51919,12 +51968,15 @@
51919
51968
  "[type='image' i]": {
51920
51969
  "implicitRole": "button",
51921
51970
  "permittedRoles": [
51971
+ "checkbox",
51922
51972
  "link",
51923
51973
  "menuitem",
51924
51974
  "menuitemcheckbox",
51925
51975
  "menuitemradio",
51976
+ "option",
51926
51977
  "radio",
51927
- "switch"
51978
+ "switch",
51979
+ "tab"
51928
51980
  ]
51929
51981
  },
51930
51982
  "[type='month' i]": {
@@ -52031,11 +52083,17 @@
52031
52083
  },
52032
52084
  "[type='reset' i]": {
52033
52085
  "implicitRole": "button",
52034
- "permittedRoles": false,
52035
- "properties": {
52036
- "global": true,
52037
- "role": "button"
52038
- }
52086
+ "permittedRoles": [
52087
+ "checkbox",
52088
+ "link",
52089
+ "menuitem",
52090
+ "menuitemcheckbox",
52091
+ "menuitemradio",
52092
+ "option",
52093
+ "radio",
52094
+ "switch",
52095
+ "tab"
52096
+ ]
52039
52097
  },
52040
52098
  "[type='search' i]:not([list])": {
52041
52099
  "implicitRole": "searchbox",
@@ -52047,11 +52105,17 @@
52047
52105
  },
52048
52106
  "[type='submit' i]": {
52049
52107
  "implicitRole": "button",
52050
- "permittedRoles": false,
52051
- "properties": {
52052
- "global": true,
52053
- "role": "button"
52054
- }
52108
+ "permittedRoles": [
52109
+ "checkbox",
52110
+ "link",
52111
+ "menuitem",
52112
+ "menuitemcheckbox",
52113
+ "menuitemradio",
52114
+ "option",
52115
+ "radio",
52116
+ "switch",
52117
+ "tab"
52118
+ ]
52055
52119
  },
52056
52120
  "[type='tel' i]:not([list])": {
52057
52121
  "implicitRole": "textbox",
@@ -52495,7 +52559,46 @@
52495
52559
  },
52496
52560
  "value": {
52497
52561
  "description": "The input control's value. When specified in the HTML, this is the initial value, and from then on it can be altered or retrieved at any time using JavaScript to access the respective HTMLInputElement object's value property. The value attribute is always optional, though should be considered mandatory for checkbox, radio, and hidden.",
52498
- "type": "Any"
52562
+ "type": [
52563
+ {
52564
+ "condition": "[type='color' i]",
52565
+ "type": "SimpleColor"
52566
+ },
52567
+ {
52568
+ "condition": "[type='url' i]",
52569
+ "type": "URL"
52570
+ },
52571
+ {
52572
+ "condition": "[type='email' i]",
52573
+ "type": "Email"
52574
+ },
52575
+ {
52576
+ "condition": ["[type='number' i]", "[type='range' i]"],
52577
+ "type": {
52578
+ "type": "float"
52579
+ }
52580
+ },
52581
+ {
52582
+ "condition": "[type='date' i]",
52583
+ "type": "DateString"
52584
+ },
52585
+ {
52586
+ "condition": "[type='month' i]",
52587
+ "type": "MonthString"
52588
+ },
52589
+ {
52590
+ "condition": "[type='week' i]",
52591
+ "type": "WeekString"
52592
+ },
52593
+ {
52594
+ "condition": "[type='time' i]",
52595
+ "type": "TimeString"
52596
+ },
52597
+ {
52598
+ "condition": "[type='datetime-local' i]",
52599
+ "type": "LocalDateTimeString"
52600
+ }
52601
+ ]
52499
52602
  },
52500
52603
  "webkitdirectory": {
52501
52604
  "description": "The Boolean webkitdirectory attribute, if present, indicates that only directories should be available to be selected by the user in the file picker interface. See HTMLInputElement.webkitdirectory for additional details and examples. Though originally implemented only for WebKit-based browsers, webkitdirectory is also usable in Microsoft Edge as well as Firefox 50 and later. However, even though it has relatively broad support, it is still not standard and should not be used unless you have no alternative.",
@@ -52735,23 +52838,30 @@
52735
52838
  "attributes": {
52736
52839
  "as": {
52737
52840
  "description": "This attribute is required when rel=\"preload\" has been set on the <link> element, optional when rel=\"modulepreload\" has been set, and otherwise should not be used. It specifies the type of content being loaded by the <link>, which is necessary for request matching, application of correct content security policy, and setting of correct Accept request header. Furthermore, rel=\"preload\" uses this as a signal for request prioritization. The table below lists the valid values for this attribute and the elements or resources they apply to. Value Applies To audio <audio> elements document <iframe> and <frame> elements embed <embed> elements fetch fetch, XHR Note: This value also requires <link> to contain the crossorigin attribute, see CORS-enabled fetches. font CSS @font-face Note: This value also requires <link> to contain the crossorigin attribute, see CORS-enabled fetches. image <img> and <picture> elements with srcset or imageset attributes, SVG <image> elements, CSS *-image rules json modulepreload destinations. object <object> elements script <script> elements, Worker importScripts, and modulepreload destinations. style <link rel=stylesheet> elements, CSS @import and modulepreload destinations. track <track> elements video <video> elements worker Worker, SharedWorker",
52738
- "type": {
52739
- "enum": [
52740
- "audioworklet",
52741
- "fetch",
52742
- "font",
52743
- "image",
52744
- "json",
52745
- "paintworklet",
52746
- "script",
52747
- "serviceworker",
52748
- "sharedworker",
52749
- "style",
52750
- "track",
52751
- "worker"
52752
- ]
52753
- },
52754
- "condition": ["[rel='preload' i]", "[rel='modulepreload' i]"]
52841
+ "type": [
52842
+ {
52843
+ "condition": "[rel~='preload' i]",
52844
+ "type": {
52845
+ "enum": ["fetch", "font", "image", "script", "style", "track"]
52846
+ }
52847
+ },
52848
+ {
52849
+ "condition": "[rel~='modulepreload' i]",
52850
+ "type": {
52851
+ "enum": [
52852
+ "audioworklet",
52853
+ "json",
52854
+ "paintworklet",
52855
+ "script",
52856
+ "serviceworker",
52857
+ "sharedworker",
52858
+ "style",
52859
+ "worker"
52860
+ ]
52861
+ }
52862
+ }
52863
+ ],
52864
+ "condition": ["[rel~='preload' i]", "[rel~='modulepreload' i]"]
52755
52865
  },
52756
52866
  "blocking": {
52757
52867
  "description": "This attribute explicitly indicates that certain operations should be blocked until specific conditions are met. It must only be used when the rel attribute contains the expect or stylesheet keywords. With rel=\"expect\", it indicates that operations should be blocked until a specific DOM node has been parsed. With rel=\"stylesheet\", it indicates that operations should be blocked until an external stylesheet and its critical subresources have been fetched and applied to the document. The operations that are to be blocked must be a space-separated list of blocking tokens listed below. Currently there is only one token: render: The rendering of content on the screen is blocked. Note: Only link elements in the document's <head> can possibly block rendering. By default, a link element with rel=\"stylesheet\" in the <head> blocks rendering when the browser discovers it during parsing. If such a link element is added dynamically via script, you must additionally set blocking = \"render\" for it to block rendering.",
@@ -52875,7 +52985,8 @@
52875
52985
  {
52876
52986
  "oneOrMore": ":model(flow)"
52877
52987
  }
52878
- ]
52988
+ ],
52989
+ "forbiddenAncestors": ["article", "aside", "footer", "header", "nav"]
52879
52990
  },
52880
52991
  "aria": {
52881
52992
  "implicitRole": "main",
@@ -53561,7 +53672,7 @@
53561
53672
  },
53562
53673
  "label": {
53563
53674
  "description": "The name of the group of options, which the browser can use when labeling the options in the user interface. This attribute is mandatory if this element is used.",
53564
- "type": "Any",
53675
+ "type": "NoEmptyAny",
53565
53676
  "required": true
53566
53677
  }
53567
53678
  }
@@ -53574,7 +53685,7 @@
53574
53685
  "contentModel": {
53575
53686
  "contents": [
53576
53687
  {
53577
- "optional": "#text"
53688
+ "require": "#nonEmptyText"
53578
53689
  }
53579
53690
  ],
53580
53691
  "conditional": [
@@ -53590,6 +53701,14 @@
53590
53701
  }
53591
53702
  ]
53592
53703
  },
53704
+ {
53705
+ "condition": "datalist > :scope",
53706
+ "contents": [
53707
+ {
53708
+ "optional": "#text"
53709
+ }
53710
+ ]
53711
+ },
53593
53712
  {
53594
53713
  "condition": "datalist > [label]",
53595
53714
  "contents": [
@@ -54162,7 +54281,10 @@
54162
54281
  "async": {
54163
54282
  "description": "For classic scripts, if the async attribute is present, then the classic script will be fetched in parallel to parsing and evaluated as soon as it is available. For module scripts, if the async attribute is present then the scripts and all their dependencies will be fetched in parallel to parsing and evaluated as soon as they are available. Warning: This attribute must not be used if the src attribute is absent (i.e., for inline scripts) for classic scripts, in this case it would have no effect. This attribute allows the elimination of parser-blocking JavaScript where the browser would have to load and evaluate scripts before continuing to parse. defer has a similar effect in this case. If the attribute is specified with the defer attribute, the element will act as if only the async attribute is specified. This is a boolean attribute: the presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value. See Browser compatibility for notes on browser support. See also Async scripts for asm.js.",
54164
54283
  "type": "Boolean",
54165
- "condition": ["[src]", "[type='module' i]"],
54284
+ "condition": [
54285
+ ":not([type='importmap' i]):not([type='speculationrules' i])[src]",
54286
+ "[type='module' i]"
54287
+ ],
54166
54288
  "ineffective": ":not([src]):not([type='module' i])"
54167
54289
  },
54168
54290
  "attributionsrc": {
@@ -54177,11 +54299,13 @@
54177
54299
  },
54178
54300
  "separator": "space",
54179
54301
  "unique": true
54180
- }
54302
+ },
54303
+ "condition": ":not([type='importmap' i]):not([type='speculationrules' i])"
54181
54304
  },
54182
54305
  "charset": {
54183
54306
  "description": "If present, its value must be an ASCII case-insensitive match for utf-8. It's unnecessary to specify the charset attribute, because documents must use UTF-8, and the script element inherits its character encoding from the document.",
54184
- "deprecated": true
54307
+ "deprecated": true,
54308
+ "condition": "[src]"
54185
54309
  },
54186
54310
  "crossorigin": {
54187
54311
  "description": "Normal script elements pass minimal information to the window.onerror for scripts which do not pass the standard CORS checks. To allow error logging for sites which use a separate domain for static media, use this attribute. See CORS settings attributes for a more descriptive explanation of its valid arguments."
@@ -54189,7 +54313,7 @@
54189
54313
  "defer": {
54190
54314
  "description": "This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded event. Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has loaded and finished evaluating. Warning: This attribute must not be used if the src attribute is absent (i.e., for inline scripts), in this case it would have no effect. The defer attribute has no effect on module scripts — they defer by default. Scripts with the defer attribute will execute in the order in which they appear in the document. This attribute allows the elimination of parser-blocking JavaScript where the browser would have to load and evaluate scripts before continuing to parse. async has a similar effect in this case. If the attribute is specified with the async attribute, the element will act as if only the async attribute is specified.",
54191
54315
  "type": "Boolean",
54192
- "condition": "[src]",
54316
+ "condition": ":not([type='importmap' i]):not([type='speculationrules' i])[src]",
54193
54317
  "ineffective": ["[type='module' i]", ":not([src])", "[async]"]
54194
54318
  },
54195
54319
  "fetchpriority": {
@@ -54197,7 +54321,7 @@
54197
54321
  },
54198
54322
  "integrity": {
54199
54323
  "description": "This attribute contains inline metadata that a user agent can use to verify that a fetched resource has been delivered without unexpected manipulation. The attribute must not be specified when the src attribute is absent. See Subresource Integrity.",
54200
- "condition": "[src]"
54324
+ "condition": ":not([type='importmap' i]):not([type='speculationrules' i])[src]"
54201
54325
  },
54202
54326
  "language": {
54203
54327
  "description": "Like the type attribute, this attribute identifies the scripting language in use. Unlike the type attribute, however, this attribute's possible values were never standardized. The type attribute should be used instead.",
@@ -54207,7 +54331,7 @@
54207
54331
  "nomodule": {
54208
54332
  "description": "This Boolean attribute is set to indicate that the script should not be executed in browsers that support ES modules — in effect, this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code.",
54209
54333
  "type": "Boolean",
54210
- "condition": ":not([type='module' i])"
54334
+ "condition": ":not([type='module' i]):not([type='importmap' i]):not([type='speculationrules' i])"
54211
54335
  },
54212
54336
  "nonce": {
54213
54337
  "description": "A cryptographic nonce (number used once) to allow scripts in a script-src Content-Security-Policy. The server must generate a unique nonce value each time it transmits a policy. It is critical to provide a nonce that cannot be guessed as bypassing a resource's policy is otherwise trivial."
@@ -54217,14 +54341,15 @@
54217
54341
  },
54218
54342
  "src": {
54219
54343
  "description": "This attribute specifies the URI of an external script; this can be used as an alternative to embedding a script directly within a document.",
54220
- "type": "URL"
54344
+ "type": "URL",
54345
+ "condition": ":not([type='importmap' i]):not([type='speculationrules' i])"
54221
54346
  },
54222
54347
  "type": {
54223
54348
  "description": "This attribute indicates the type of script represented. The value of this attribute will be one of the following: Attribute is not set (default), an empty string, or a JavaScript MIME type Indicates that the script is a \"classic script\", containing JavaScript code. Authors are encouraged to omit the attribute if the script refers to JavaScript code rather than specify a MIME type. JavaScript MIME types are listed in the IANA media types specification. importmap This value indicates that the body of the element contains an import map. The import map is a JSON object that developers can use to control how the browser resolves module specifiers when importing JavaScript modules. module This value causes the code to be treated as a JavaScript module. The processing of the script contents is deferred. The charset and defer attributes have no effect. For information on using module, see our JavaScript modules guide. Unlike classic scripts, module scripts require the use of the CORS protocol for cross-origin fetching. speculationrules Experimental This value indicates that the body of the element contains speculation rules. Speculation rules take the form of a JSON object that determine what resources should be prefetched or prerendered by the browser. This is part of the Speculation Rules API. Any other value The embedded content is treated as a data block, and won't be processed by the browser. Developers must use a valid MIME type that is not a JavaScript MIME type to denote data blocks. All of the other attributes will be ignored, including the src attribute.",
54224
54349
  "type": [
54225
54350
  "MIMEType",
54226
54351
  {
54227
- "enum": ["module", "importmap"],
54352
+ "enum": ["module", "importmap", "speculationrules"],
54228
54353
  "caseInsensitive": true
54229
54354
  }
54230
54355
  ]
@@ -55388,7 +55513,7 @@
55388
55513
  "contentModel": {
55389
55514
  "contents": [
55390
55515
  {
55391
- "require": "#text"
55516
+ "require": "#nonEmptyText"
55392
55517
  }
55393
55518
  ]
55394
55519
  },
@@ -55461,7 +55586,8 @@
55461
55586
  "description": "The <track> HTML element is used as a child of the media elements, <audio> and <video>. Each track element lets you specify a timed text track (or time-based data) that can be displayed in parallel with the media element, for example to overlay subtitles or closed captions on top of a video or alongside audio tracks. Multiple tracks can be specified for a media element, containing different kinds of timed text data, or timed text data that has been translated for different locales. The data that is used will either be the track that has been set to be the default, or a kind and translation based on user preferences. The tracks are formatted in WebVTT format (.vtt files) — Web Video Text Tracks.",
55462
55587
  "categories": [],
55463
55588
  "contentModel": {
55464
- "contents": false
55589
+ "contents": false,
55590
+ "uniqueAttrs": ["default"]
55465
55591
  },
55466
55592
  "aria": {
55467
55593
  "implicitRole": false,
@@ -55689,11 +55815,11 @@
55689
55815
  "width"
55690
55816
  ],
55691
55817
  "#HTMLGlobalAttrs": true,
55692
- "#HTMLLinkAndFetchingAttrs": ["crossorigin"]
55818
+ "#HTMLLinkAndFetchingAttrs": ["crossorigin", "loading"]
55693
55819
  },
55694
55820
  "attributes": {
55695
55821
  "autoplay": {
55696
- "description": "A Boolean attribute; if specified, the video automatically begins to play back as soon as it can without stopping to finish loading the data. Note: Modern browsers block audio (or videos with an unmuted audio track) from autoplaying, as sites that automatically play audio can be an unpleasant experience for users. See our autoplay guide for additional information about how to properly use autoplay. To disable video autoplay, autoplay=\"false\" will not work; the video will autoplay if the attribute is there in the <video> tag at all. To remove autoplay, the attribute needs to be removed altogether."
55822
+ "description": "A Boolean attribute; if specified, the video automatically begins to play back as soon as it can without stopping to finish loading the data. Note: Modern browsers block audio (or videos with an unmuted audio track) from autoplaying, as sites that automatically play audio can be an unpleasant experience for users. See our autoplay guide for additional information about how to properly use autoplay. To disable video autoplay, autoplay=\"false\" will not work; the video will autoplay if the attribute is there in the <video> tag at all. To remove autoplay, the attribute needs to be removed altogether. Note: Videos with the loading=\"lazy\" attribute set will not start downloading and autoplaying until the element is near or within the viewport."
55697
55823
  },
55698
55824
  "controls": {
55699
55825
  "description": "If this attribute is present, the browser will offer controls to allow the user to control video playback, including volume, seeking, and pause/resume playback."
@@ -55722,6 +55848,10 @@
55722
55848
  "height": {
55723
55849
  "description": "The height of the video's display area, in CSS pixels (absolute values only; no percentages)."
55724
55850
  },
55851
+ "loading": {
55852
+ "description": "Indicates how the browser should load the video (including any poster image): eager Loads the video immediately, regardless of whether or not the video is currently within the visible viewport (this is the default value). lazy Defers loading the video until it reaches a calculated distance from the viewport, as defined by the browser. Lazy loading avoids the network and storage bandwidth required to handle the video until it's reasonably certain that it will be needed. This improves the performance in most typical use cases. While explicit width and height attributes are recommended for all videos to avoid layout shift, they are especially important for lazy-loaded ones. Lazy-loaded videos will never be loaded if they do not intersect a visible part of an element, even if loading them would change that, because unloaded videos have a width and height of 0. It creates an even more disruptive user experience when the content visible in the viewport reflows in the middle of reading it. Lazy-loaded videos located in the visual viewport may not yet be visible when the Window load event is fired. This is because the event is fired based on eager-loaded videos — lazy-loaded videos are not considered even if they are located within the visual viewport upon initial page load. Loading is only deferred when JavaScript is enabled. This is an anti-tracking measure, because if a user agent supported lazy loading when scripting is disabled, it would still be possible for a site to track a user's approximate scroll position throughout a session, by strategically placing videos in a page's markup such that a server can track how many videos are requested and when. Note: The loading=\"lazy\" attribute also impacts the autoplay, poster, and preload attributes, as described in each of those sections of the page.",
55853
+ "experimental": false
55854
+ },
55725
55855
  "loop": {
55726
55856
  "description": "A Boolean attribute; if specified, the browser will automatically seek back to the start upon reaching the end of the video."
55727
55857
  },
@@ -55733,11 +55863,11 @@
55733
55863
  "type": "Boolean"
55734
55864
  },
55735
55865
  "poster": {
55736
- "description": "A URL for an image to be shown while the video is downloading. If this attribute isn't specified, nothing is displayed until the first frame is available, then the first frame is shown as the poster frame.",
55866
+ "description": "A URL for an image to be shown while the video is downloading. If this attribute isn't specified, nothing is displayed until the first frame is available, then the first frame is shown as the poster frame. Note: Videos with the loading=\"lazy\" attribute set will only download the poster resource once the video is near or within the viewport.",
55737
55867
  "type": "URL"
55738
55868
  },
55739
55869
  "preload": {
55740
- "description": "This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience regarding what content is loaded before the video is played. It may have one of the following values: none: Indicates that the video should not be preloaded. metadata: Indicates that only video metadata (e.g., length) is fetched. auto: Indicates that the whole video file can be downloaded, even if the user is not expected to use it. empty string: A synonym of the auto value. The default value is different for each browser. The spec advises it to be set to metadata. Note: The autoplay attribute has precedence over preload. If autoplay is specified, the browser would obviously need to start downloading the video for playback. The specification does not force the browser to follow the value of this attribute; it is a mere hint."
55870
+ "description": "This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience regarding what content is loaded before the video is played. It may have one of the following values: none: Indicates that the video should not be preloaded. metadata: Indicates that only video metadata (e.g., length) is fetched. auto: Indicates that the whole video file can be downloaded, even if the user is not expected to use it. empty string: A synonym of the auto value. The default value is different for each browser. The spec advises it to be set to metadata. Note: Videos with the loading=\"lazy\" attribute set will only apply the preload behavior once the video is near or within the viewport. The autoplay attribute has precedence over preload. If autoplay is specified, the browser would obviously need to start downloading the video for playback. The specification does not force the browser to follow the value of this attribute; it is a mere hint."
55741
55871
  },
55742
55872
  "src": {
55743
55873
  "description": "The URL of the video to embed. This is optional; you may instead use the <source> element within the video block to specify the video to embed."
@@ -57439,7 +57569,7 @@
57439
57569
  },
57440
57570
  "attributes": {
57441
57571
  "keyPoints": {
57442
- "description": "This attribute indicate, in the range [0,1], how far is the object along the path for each keyTimes associated values. Value type: <number>*; Default value: none; Animatable: no",
57572
+ "description": "This attribute indicates, in the range [0,1], how far the object is along the path for each associated value in keyTimes. Value type: <number>*; Default value: none; Animatable: no",
57443
57573
  "type": "<key-points>"
57444
57574
  },
57445
57575
  "origin": {
@@ -61426,7 +61556,7 @@
61426
61556
  "defaultValue": "120%"
61427
61557
  },
61428
61558
  "mask-type": {
61429
- "description": "This attribute defines the mask mode for the contents for the contents of the <mask>. Value type: alpha | luminance; Default value: luminance; Animatable: yes"
61559
+ "description": "This attribute defines the mask mode for the contents of the <mask>. Value type: alpha | luminance; Default value: luminance; Animatable: yes"
61430
61560
  },
61431
61561
  "maskContentUnits": {
61432
61562
  "description": "This attribute defines the coordinate system for the contents of the <mask>. Value type: userSpaceOnUse | objectBoundingBox; Default value: userSpaceOnUse; Animatable: yes",