@markuplint/html-spec 3.8.0 → 3.10.0

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
@@ -145,9 +145,6 @@
145
145
  "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/xmp",
146
146
  "https://developer.mozilla.org/en-US/docs/Web/SVG/Element",
147
147
  "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/a",
148
- "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/altGlyph",
149
- "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/altGlyphDef",
150
- "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/altGlyphItem",
151
148
  "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate",
152
149
  "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateMotion",
153
150
  "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animateTransform",
@@ -1948,7 +1945,7 @@
1948
1945
  },
1949
1946
  {
1950
1947
  "name": "article",
1951
- "description": "A section of a page that consists of a composition that forms an independent part of a document, page, or site.\n\nAn article is not a navigational landmark, but can be nested to form a discussion where assistive technologies could pay attention to article nesting to assist the user in following the discussion. An article could be a forum post, a magazine or newspaper article, a web log entry, a user-submitted comment, or any other independent item of content. It is independent in that its contents could stand alone, for example in syndication. However, the element is still associated with its ancestors; for instance, contact information that applies to a parent body element still covers the article as well. When nesting articles, the child articles represent content that is related to the content of the parent article. For instance, a web log entry on a site that accepts user-submitted comments could represent the comments as articles nested within the article for the web log entry. Author, heading, date, or other information associated with an article does not apply to nested articles.\n\nWhen the user navigates to an element assigned the role of article, assistive technologies that typically intercept standard keyboard events SHOULD switch to document browsing mode, as opposed to passing keyboard events through to the web application. Assistive technologies MAY provide a feature allowing the user to navigate the hierarchy of any nested article elements.\n\nWhen an article is in the context of a feed, the author MAY specify values for aria-posinset and aria-setsize.",
1948
+ "description": "A section of a page that consists of a composition that forms an independent part of a document, page, or site.\n\nAn article is not a navigational landmark, but can be nested to form a discussion where assistive technologies could pay attention to article nesting to assist the user in following the discussion. An article could be a forum post, a magazine or newspaper article, a web log entry, a user-submitted comment, or any other independent item of content. It is independent in that its contents could stand alone, for example in syndication. However, the element is still associated with its ancestors; for instance, contact information that applies to a parent body element still covers the article as well. When nesting articles, the child articles represent content that is related to the content of the parent article. For instance, a web log entry on a site that accepts user-submitted comments could represent the comments as articles nested within the article for the web log entry. Author, heading, date, or other information associated with an article does not apply to nested articles.\n\nWhen the user navigates to an element assigned the role of article, assistive technologies that typically intercept standard keyboard events SHOULD switch to document browsing mode, as opposed to passing keyboard events through to the web application. Some assistive technologies provide a feature allowing the user to navigate the hierarchy of any nested article elements.\n\nWhen an article is in the context of a feed, the author MAY specify values for aria-posinset and aria-setsize.",
1952
1949
  "generalization": ["document"],
1953
1950
  "requiredContextRole": [],
1954
1951
  "requiredOwnedElements": [],
@@ -4986,7 +4983,7 @@
4986
4983
  },
4987
4984
  {
4988
4985
  "name": "form",
4989
- "description": "A landmark region that contains a collection of items and objects that, as a whole, combine to create a form. See related search.\n\nA form can contain a mix of host language form controls, scripted controls, and hyperlinks. Authors are reminded to use native host language semantics to create form controls whenever possible. If the purpose of a form is to submit search criteria, authors SHOULD use the search role instead of the generic form role.\n\nAuthors MUST give each element with role form a brief label that describes the purpose of the form. Authors SHOULD reference a visible label with aria-labelledby if a visible label is present. Authors SHOULD include the label inside of a heading whenever possible. The heading MAY be an instance of the standard host language heading element or an instance of an element with role heading.\n\nIf an author uses a script to submit a form based on a user action that would otherwise not trigger an onsubmit event (for example, a form submission triggered by the user changing a form element's value), the author SHOULD provide the user with advance notification of the behavior.\n\nAssistive technologies SHOULD enable users to quickly navigate to elements with role form. User agents SHOULD treat elements with role form and have an accessible name as navigational landmarks. User agents MAY enable users to quickly navigate to elements with role form.",
4986
+ "description": "A landmark region that contains a collection of items and objects that, as a whole, combine to create a form. See related search.\n\nA form can contain a mix of host language form controls, scripted controls, and hyperlinks. Authors are reminded to use native host language semantics to create form controls whenever possible. If the purpose of a form is to submit search criteria, authors SHOULD use the search role instead of the generic form role.\n\nAuthors MUST give each element with role form a brief label that describes the purpose of the form. Authors SHOULD reference a visible label with aria-labelledby if a visible label is present. Authors SHOULD include the label inside of a heading whenever possible. The heading MAY be an instance of the standard host language heading element or an instance of an element with role heading.\n\nIf an author uses a script to submit a form based on a user action that would otherwise not trigger an onsubmit event (for example, a form submission triggered by the user changing a form element's value), the author SHOULD provide the user with advance notification of the behavior.\n\nAssistive technologies SHOULD enable users to quickly navigate to elements with role form. User agents SHOULD treat elements with role form and an accessible name as navigational landmarks. User agents MAY enable users to quickly navigate to elements with role form.",
4990
4987
  "generalization": ["landmark"],
4991
4988
  "requiredContextRole": [],
4992
4989
  "requiredOwnedElements": [],
@@ -5206,7 +5203,7 @@
5206
5203
  "description": "A composite widget containing a collection of one or more rows with one or more cells where some or all cells in the grid are focusable by using methods of two-dimensional navigation, such as directional arrow keys.\n\nThe grid role does not imply a specific visual, e.g., tabular, presentation. It describes relationships among elements. It can be used for purposes as simple as grouping a collection of checkboxes or navigation links or as complex as creating a full-featured spreadsheet application.\n\nThe cell elements of a grid have role gridcell. Authors MAY designate a cell as a row or column header by using either the rowheader or columnheader role in lieu of the gridcell role. Authors MUST ensure elements with role gridcell, columnheader, or rowheader are owned by elements with role row, which are in turn owned by an element with role rowgroup, or grid.\n\nTo be keyboard accessible, authors SHOULD manage focus of descendants of a grid as described in Managing Focus. When a user is navigating the grid content with a keyboard, authors SHOULD set focus as follows:\n\nAuthors SHOULD provide a mechanism for changing to an interaction or edit mode that allows users to navigate and interact with content contained inside a focusable cell if that focusable cell contains any of the following:\n\nFor example, if a cell in a spreadsheet contains a combobox or editable text, the Enter key might be used to activate a cell interaction or editing mode when that cell has focus so the directional arrow keys can be used to operate the contained combobox or textbox. Depending on the implementation, pressing Enter again, Tab, Escape, or another key might switch the application back to the grid navigation mode.\n\nAuthors MAY use a gridcell to display the result of a formula, which could be editable by the user. In a spreadsheet application, for example, a gridcell might show a value calculated from a formula until the user activates the gridcell for editing when a textbox appears in the gridcell containing the formula in an editable state.\n\nIf aria-readonly is set on an element with role grid, user agents MUST propagate the value to all gridcell elements owned by the grid and expose the value in the accessibility API. An author MAY override the propagated value of aria-readonly for an individual gridcell element.\n\nIn a grid that provides cell content editing functions, if the content of a focusable gridcell element is not editable, authors MAY set aria-readonly to true on the gridcell element. However, the value of aria-readonly, whether specified for a grid or individual cells, only indicates whether the content contained in cells is editable. It does not represent availability of functions for navigating or manipulating the grid itself.\n\nAn unspecified value for aria-readonly does not imply that a grid or a gridcell contains editable content. For example, if a grid presents a collection of elements that are not editable, such as a collection of link elements representing dates in a datepicker, it is not necessary for the author to specify a value for aria-readonly.\n\nAuthors MAY indicate that a focusable gridcell is selectable as the object of an action with the aria-selected attribute. If the grid allows multiple gridcells to be selected, the author SHOULD set aria-multiselectable to true on the element with role grid.\n\nSince WAI-ARIA can augment an element of the host language, a grid can reuse the elements and attributes of a native table, such as an HTML table element. For example, if an author applies the grid role to an HTML table element, the author does not need to apply the row and gridcell roles to the descendant HTML tr and td elements because the user agent will automatically make the appropriate translations. When the author is reusing a native host language table element and needs a gridcell element to span multiple rows or columns, the author SHOULD apply the appropriate host language attributes instead of WAI-ARIA aria-rowspan or aria-colspan properties.\n\nSee the WAI-ARIA Authoring Practices for additional details on implementing grid design patterns.",
5207
5204
  "generalization": ["composite", "table"],
5208
5205
  "requiredContextRole": [],
5209
- "requiredOwnedElements": ["row", "rowgroup > row"],
5206
+ "requiredOwnedElements": ["caption", "row", "rowgroup > row"],
5210
5207
  "accessibleNameRequired": true,
5211
5208
  "accessibleNameFromAuthor": true,
5212
5209
  "accessibleNameFromContent": false,
@@ -7218,7 +7215,8 @@
7218
7215
  "group > menuitemcheckbox",
7219
7216
  "menuitem",
7220
7217
  "menuitemcheckbox",
7221
- "menuitemradio"
7218
+ "menuitemradio",
7219
+ "separator"
7222
7220
  ],
7223
7221
  "accessibleNameRequired": false,
7224
7222
  "accessibleNameFromAuthor": true,
@@ -7346,7 +7344,8 @@
7346
7344
  "group > menuitemcheckbox",
7347
7345
  "menuitem",
7348
7346
  "menuitemcheckbox",
7349
- "menuitemradio"
7347
+ "menuitemradio",
7348
+ "separator"
7350
7349
  ],
7351
7350
  "accessibleNameRequired": false,
7352
7351
  "accessibleNameFromAuthor": true,
@@ -7842,7 +7841,7 @@
7842
7841
  },
7843
7842
  {
7844
7843
  "name": "meter",
7845
- "description": "An element that represents a scalar measurement within a known range, or a fractional value. See related progressbar.\n\nAuthors MAY set aria-valuemin and aria-valuemax to indicate the minimum and maximum values for the meter. Otherwise, their implicit values follow the same rules as <input[type=\"range\"]> in [HTML]:\n\nThe value of aria-valuenow MUST NOT fall below or exceed the computed values of aria-valuemin and aria-valuemax, respectively.\n\nAuthors SHOULD NOT use the meter role to indicate progress; the progressbar role exists to address that need.\n\nPresently, there are no WAI-ARIA properties corresponding to the low, optimum, and high attributes supported on the <meter> element in [HTML]. The addition of these properties will be considered for ARIA version 1.3.",
7844
+ "description": "An element that represents a scalar measurement within a known range, or a fractional value. See related progressbar.\n\nAuthors MAY set aria-valuemin and aria-valuemax to indicate the minimum and maximum values for the meter. Otherwise, their implicit values follow the same rules as <input type=\"range\"> in HTML:\n\nThe value of aria-valuenow MUST NOT fall below or exceed the computed values of aria-valuemin and aria-valuemax, respectively.\n\nAuthors SHOULD NOT use the meter role to indicate progress; the progressbar role exists to address that need.\n\nPresently, there are no WAI-ARIA properties corresponding to the low, optimum, and high attributes supported on the <meter> element in HTML. The addition of these properties will be considered for ARIA version 1.3.",
7846
7845
  "generalization": ["range"],
7847
7846
  "requiredContextRole": [],
7848
7847
  "requiredOwnedElements": [],
@@ -8539,7 +8538,7 @@
8539
8538
  },
8540
8539
  {
8541
8540
  "name": "presentation",
8542
- "description": "An element whose implicit native role semantics will not be mapped to the accessibility API. See synonym none.\n\nIn ARIA 1.1, the working group introduced none as a synonym to the presentation role, due to author confusion surrounding the intended meaning of the word \"presentation\" or \"presentational.\" Many individuals erroneously consider role=\"presentation\" to be synonymous with aria-hidden=\"true\", and we believe role=\"none\" conveys the actual meaning more unambiguously.\n\nThe intended use is when an element is used to change the look of the page but does not have all the functional, interactive, or structural relevance implied by the element type, or can be used to provide for an accessible fallback in older browsers that do not support WAI-ARIA.\n\nExample use cases:\n\nFor any element with a role of presentation and which is not focusable, the user agent MUST NOT expose the implicit native semantics of the element (the role and its states and properties) to accessibility APIs. However, the user agent MUST expose content and descendant elements that do not have an explicit or inherited role of presentation. Thus, the presentation role causes a given element to be treated as having no role or to be removed from the accessibility tree, but does not cause the content contained within the element to be removed from the accessibility tree.\n\nFor example, the following two markup snippets will be exposed similarly to an accessibility API.\n\nIn HTML, the <img> element is treated as a single entity regardless of the type of image file. Consequently, using role=\"presentation\" or role=\"none\" on an HTML img is equivalent to using aria-hidden=\"true\". In order to make the image contents accessible, authors can embed the object using an <object> or <iframe> element, or use inline SVG code, and follow the accessibility guidelines for the image content.\n\nAuthors SHOULD NOT provide meaningful alternative text (for example, use alt=\"\" in HTML) when the presentation role is applied to an image.\n\nIn the following code sample, the containing img and is appropriately labeled by the caption paragraph. In this example the img element can be marked as presentation because the role and the text alternatives are provided by the containing element.\n\nIn the following code sample, because the anchor (HTML a element) is acting as the treeitem, the list item (HTML li element) is assigned an explicit WAI-ARIA role of presentation to override the user agent's implicit native semantics for list items.\n\nThe presentation role is used on an element that has implicit native semantics, meaning that there is a default accessibility API role for the element. Some elements are only complete when additional descendant elements are provided. For example, in HTML, table elements (matching the table role) require tr descendants (which have an implicit row role), which in turn require th or td children (the columnheader or rowheader and cell roles, respectively). Similarly, lists require list item children. The descendant elements that complete the semantics of an element are described in WAI-ARIA as required owned elements.\n\nWhen an explicit or inherited role of presentation is applied to an element with the implicit semantic of a WAI-ARIA role that has required owned elements, in addition to the element with the explicit role of presentation, the user agent MUST apply an inherited role of presentation to any owned elements that do not have an explicit role defined. Also, when an explicit or inherited role of presentation is applied to a host language element which has required children as defined by the host language specification, in addition to the element with the explicit role of presentation, the user agent MUST apply an inherited role of presentation to any required children that do not have an explicit role defined.\n\nFor any element with an explicit or inherited role of presentation and which is not focusable, user agents MUST ignore role-specific WAI-ARIA states and properties for that element. For example, in HTML, a ul or ol element with a role of presentation will have the implicit native semantics of its li elements removed because the list role to which the ul or ol corresponds has a required owned element of listitem. Likewise, the implicit native semantics of an HTML table element's thead/tbody/tfoot/tr/th/td descendants will also be removed, because the HTML specification indicates that these are required structural descendants of the table element.\n\nOnly the implicit native semantics of elements that correspond to WAI-ARIA required owned elements are removed. All other content remains intact, including nested tables or lists, unless those elements also have an explicit role of presentation specified.\n\nFor example, according to an accessibility API, the following markup elements would appear to have identical role semantics (no roles) and identical content.\n\nThere are other WAI-ARIA roles with required children for which this situation is applicable (e.g., radiogroups and listboxes), but tables and lists are the most common real-world cases in which the presentation inheritance is likely to apply.\n\nFor any element with an explicit or inherited role of presentation, user agents MUST apply an inherited role of presentation to all host-language-specific labeling elements for the presentational element. For example, a table element with a role of presentation will have the implicit native semantics of its caption element removed, because the caption is merely a label for the presentational table.\n\nInformation about resolving conflicts in the presentation role has been moved to Handling Author Errors",
8541
+ "description": "An element whose implicit native role semantics will not be mapped to the accessibility API. See synonym none.\n\nIn ARIA 1.1, the working group introduced none as a synonym to the presentation role, due to author confusion surrounding the intended meaning of the word \"presentation\" or \"presentational.\" Many individuals erroneously consider role=\"presentation\" to be synonymous with aria-hidden=\"true\", and we believe role=\"none\" conveys the actual meaning more unambiguously.\n\nThe intended use is when an element is used to change the look of the page but does not have all the functional, interactive, or structural relevance implied by the element type, or can be used to provide for an accessible fallback in older browsers that do not support WAI-ARIA.\n\nExample use cases:\n\nFor any element with a role of presentation and which is not focusable, the user agent MUST NOT expose the implicit native semantics of the element (the role and its states and properties) to accessibility APIs. However, the user agent MUST expose content and descendant elements that do not have an explicit or inherited role of presentation. Thus, the presentation role causes a given element to be treated as having no role or to be removed from the accessibility tree, but does not cause the content contained within the element to be removed from the accessibility tree.\n\nFor example, the following two markup snippets will be exposed similarly to an accessibility API.\n\nIn HTML, the <img> element is treated as a single entity regardless of the type of image file. Consequently, using role=\"presentation\" or role=\"none\" on an HTML img is equivalent to using aria-hidden=\"true\". In order to make the image contents accessible, authors can embed the object using an <object> or <iframe> element, or use inline SVG code, and follow the accessibility guidelines for the image content.\n\nAuthors SHOULD NOT provide meaningful alternative text (for example, use alt=\"\" in HTML) when the presentation role is applied to an image.\n\nIn the following code sample, the containing img and is appropriately labeled by the caption paragraph. In this example the img element can be marked as presentation because the role and the text alternatives are provided by the containing element.\n\nIn the following code sample, because the anchor (HTML a element) is acting as the treeitem, the list item (HTML li element) is assigned an explicit WAI-ARIA role of presentation to override the user agent's implicit native semantics for list items.\n\nThe presentation role is used on an element that has implicit native semantics, meaning that there is a default accessibility API role for the element. Some elements are only complete when additional descendant elements are provided. For example, in HTML, table elements (matching the table role) require tr descendants (which have an implicit row role), which in turn require th or td children (the columnheader or rowheader and cell roles, respectively). Similarly, lists require list item children. The descendant elements that complete the semantics of an element are described in WAI-ARIA as Allowed Accessibility Child Roles.\n\nWhen an explicit or inherited role of presentation is applied to an element with the implicit semantic of a WAI-ARIA role that has Allowed Accessibility Child Roles, in addition to the element with the explicit role of presentation, the user agent MUST apply an inherited role of presentation to any owned elements that do not have an explicit role defined. Also, when an explicit or inherited role of presentation is applied to a host language element which has specifically allowed children as defined by the host language specification, in addition to the element with the explicit role of presentation, the user agent MUST apply an inherited role of presentation to any specifically allowed children that do not have an explicit role defined.\n\nFor any element with an explicit or inherited role of presentation and which is not focusable, user agents MUST ignore role-specific WAI-ARIA states and properties for that element. For example, in HTML, a ul or ol element with a role of presentation will have the implicit native semantics of its li elements removed because the list role to which the ul or ol corresponds has an Allowed Accessibility Child Role of listitem. Likewise, the implicit native semantics of an HTML table element's thead/tbody/tfoot/tr/th/td descendants will also be removed, because the HTML specification indicates that these are required structural descendants of the table element.\n\nOnly the implicit native semantics of elements that correspond to WAI-ARIA Allowed Accessibility Child Roles are removed. All other content remains intact, including nested tables or lists, unless those elements also have an explicit role of presentation specified.\n\nFor example, according to an accessibility API, the following markup elements would appear to have identical role semantics (no roles) and identical content.\n\nThere are other WAI-ARIA roles with specific allowed children for which this situation is applicable (e.g., feeds and listboxes), but tables and lists are the most common real-world cases in which the presentation inheritance is likely to apply.\n\nFor any element with an explicit or inherited role of presentation, user agents MUST apply an inherited role of presentation to all host-language-specific labeling elements for the presentational element. For example, a table element with a role of presentation will have the implicit native semantics of its caption element removed, because the caption is merely a label for the presentational table.\n\nInformation about resolving conflicts in the presentation role has been moved to Handling Author Errors",
8543
8542
  "generalization": ["structure"],
8544
8543
  "requiredContextRole": [],
8545
8544
  "requiredOwnedElements": [],
@@ -8645,7 +8644,7 @@
8645
8644
  },
8646
8645
  {
8647
8646
  "name": "progressbar",
8648
- "description": "An element that displays the progress status for tasks that take a long time.\n\nA progressbar indicates that the user's request has been received and the application is making progress toward completing the requested action.\n\nAuthors MAY set aria-valuemin and aria-valuemax to indicate the minimum and maximum progress indicator values. Otherwise, their implicit values follow the same rules as <input[type=\"range\"]> in [HTML]:\n\n\n\nThe author SHOULD supply a value for aria-valuenow unless the value is indeterminate, in which case the author SHOULD omit the aria-valuenow attribute. Authors SHOULD update this value when the visual progress indicator is updated. If the progressbar is describing the loading progress of a particular region of a page, authors SHOULD both use aria-describedby to reference the progressbar status, and set the aria-busy attribute to true on the region until it is finished loading. It is not possible for the user to alter the value of a progressbar because it is always read-only.\n\nAssistive technologies generally will render the value of aria-valuenow as a percent of a range between the value of aria-valuemin and aria-valuemax, unless aria-valuetext is specified.",
8647
+ "description": "An element that displays the progress status for tasks that take a long time.\n\nA progressbar indicates that the user's request has been received and the application is making progress toward completing the requested action.\n\nAuthors MAY set aria-valuemin and aria-valuemax to indicate the minimum and maximum progress indicator values. Otherwise, their implicit values follow the same rules as <input type=\"range\"> in HTML:\n\n\n\nThe author SHOULD supply a value for aria-valuenow unless the value is indeterminate, in which case the author SHOULD omit the aria-valuenow attribute. Authors SHOULD update this value when the visual progress indicator is updated. If the progressbar is describing the loading progress of a particular region of a page, authors SHOULD both use aria-describedby to reference the progressbar status, and set the aria-busy attribute to true on the region until it is finished loading. It is not possible for the user to alter the value of a progressbar because it is always read-only.\n\nAssistive technologies generally will render the value of aria-valuenow as a percent of a range between the value of aria-valuemin and aria-valuemax, unless aria-valuetext is specified.",
8649
8648
  "generalization": ["range", "widget"],
8650
8649
  "requiredContextRole": [],
8651
8650
  "requiredOwnedElements": [],
@@ -8903,7 +8902,7 @@
8903
8902
  "description": "A group of radio buttons.\n\nA radiogroup is a type of select list that can only have a single entry checked at any one time. Authors SHOULD enforce that only one radio button in a group can be checked at the same time. When one item in the group is checked, the previously checked item becomes unchecked (its aria-checked attribute becomes false).",
8904
8903
  "generalization": ["select"],
8905
8904
  "requiredContextRole": [],
8906
- "requiredOwnedElements": ["radio"],
8905
+ "requiredOwnedElements": [],
8907
8906
  "accessibleNameRequired": true,
8908
8907
  "accessibleNameFromAuthor": true,
8909
8908
  "accessibleNameFromContent": false,
@@ -9150,7 +9149,7 @@
9150
9149
  },
9151
9150
  {
9152
9151
  "name": "region",
9153
- "description": "A landmark containing content that is relevant to a specific, author-specified purpose and sufficiently important that users will likely want to be able to navigate to the section easily and to have it listed in a summary of the page. Such a page summary could be generated dynamically by a user agent or assistive technology.\n\nAuthors SHOULD limit use of the region role to sections containing content with a purpose that is not accurately described by one of the other landmark roles, such as main, complementary, or navigation.\n\nAuthors MUST give each element with role region a brief label that describes the purpose of the content in the region. Authors SHOULD reference a visible label with aria-labelledby if a visible label is present. Authors SHOULD include the label inside of a heading whenever possible. The heading MAY be an instance of the standard host language heading element or an instance of an element with role heading.\n\nAssistive technologies SHOULD enable users to quickly navigate to elements with role region. User agents SHOULD treat elements with role region and have an accessible name as navigational landmarks. User agents MAY enable users to quickly navigate to elements with role region.",
9152
+ "description": "A landmark containing content that is relevant to a specific, author-specified purpose and sufficiently important that users will likely want to be able to navigate to the section easily and to have it listed in a summary of the page. Such a page summary could be generated dynamically by a user agent or assistive technology.\n\nAuthors SHOULD limit use of the region role to sections containing content with a purpose that is not accurately described by one of the other landmark roles, such as main, complementary, or navigation.\n\nAuthors MUST give each element with role region a brief label that describes the purpose of the content in the region. Authors SHOULD reference a visible label with aria-labelledby if a visible label is present. Authors SHOULD include the label inside of a heading whenever possible. The heading MAY be an instance of the standard host language heading element or an instance of an element with role heading.\n\nAssistive technologies SHOULD enable users to quickly navigate to elements with role region. User agents SHOULD treat elements with role region and an accessible name as navigational landmarks. User agents MAY enable users to quickly navigate to elements with role region.",
9154
9153
  "generalization": ["landmark"],
9155
9154
  "requiredContextRole": [],
9156
9155
  "requiredOwnedElements": [],
@@ -9769,7 +9768,7 @@
9769
9768
  },
9770
9769
  {
9771
9770
  "name": "scrollbar",
9772
- "description": "A graphical object that controls the scrolling of content within a viewing area, regardless of whether the content is fully displayed within the viewing area.\n\nA scrollbar represents the current value and range of possible values via the size of the scrollbar and position of the thumb with respect to the visible range of the orientation (horizontal or vertical) it controls. Its orientation represents the orientation of the scrollbar and the scrolling effect on the viewing area controlled by the scrollbar. It is typically possible to add to or subtract from the current value by using directional keys such as arrow keys.\n\nAuthors MUST set the aria-controls attribute on the scrollbar element to reference the scrollable area it controls.\n\nAuthors MAY set aria-valuemin and aria-valuemax to indicate the minimum and maximum thumb position. Otherwise, their implicit values follow the same rules as <input[type=\"range\"]> in [HTML]:\n\nAuthors MUST set the aria-valuenow attribute to indicate the current thumb position. If aria-valuenow is missing or has an unexpected value, browsers MAY implement the repair techniques specified in the section describing handling author errors in states and properties, which are equivalent to the repair techniques for <input[type=\"range\"]> in [HTML].\n\nElements with the role scrollbar have an implicit aria-orientation value of vertical.\n\nAssistive technologies generally will render the value of aria-valuenow as a percent of a range between the value of aria-valuemin and aria-valuemax, unless aria-valuetext is specified. It is best to set the values for aria-valuemin, aria-valuemax, and aria-valuenow in a manner that is appropriate for this calculation.",
9771
+ "description": "A graphical object that controls the scrolling of content within a viewing area, regardless of whether the content is fully displayed within the viewing area.\n\nA scrollbar represents the current value and range of possible values via the size of the scrollbar and position of the thumb with respect to the visible range of the orientation (horizontal or vertical) it controls. Its orientation represents the orientation of the scrollbar and the scrolling effect on the viewing area controlled by the scrollbar. It is typically possible to add to or subtract from the current value by using directional keys such as arrow keys.\n\nAuthors MUST set the aria-controls attribute on the scrollbar element to reference the scrollable area it controls.\n\nAuthors MAY set aria-valuemin and aria-valuemax to indicate the minimum and maximum thumb position. Otherwise, their implicit values follow the same rules as <input type=\"range\"> in HTML:\n\nAuthors MUST set the aria-valuenow attribute to indicate the current thumb position. If aria-valuenow is missing or has an unexpected value, browsers MAY implement the repair techniques specified in the section describing handling author errors in states and properties, which are equivalent to the repair techniques for <input type=\"range\"> in HTML.\n\nElements with the role scrollbar have an implicit aria-orientation value of vertical.\n\nAssistive technologies generally will render the value of aria-valuenow as a percent of a range between the value of aria-valuemin and aria-valuemax, unless aria-valuetext is specified. It is best to set the values for aria-valuemin, aria-valuemax, and aria-valuenow in a manner that is appropriate for this calculation.",
9773
9772
  "generalization": ["range", "widget"],
9774
9773
  "requiredContextRole": [],
9775
9774
  "requiredOwnedElements": [],
@@ -10627,7 +10626,7 @@
10627
10626
  },
10628
10627
  {
10629
10628
  "name": "slider",
10630
- "description": "An input where the user selects a value from within a given range.\n\nA slider represents the current value and range of possible values via the size of the slider and position of the thumb. It is typically possible to add to or subtract from the current value by using directional keys such as arrow keys.\n\nAuthors MAY set the aria-valuemin and aria-valuemax attributes. Otherwise, their implicit values follow the same rules as <input[type=\"range\"]> in [HTML]:\n\nAuthors MUST set the aria-valuenow attribute. If aria-valuenow is missing or has an unexpected value, browsers MAY implement the repair techniques specified in the section describing handling author errors in states and properties, which are equivalent to the repair techniques for <input[type=\"range\"]> in [HTML].\n\nElements with the role slider have an implicit aria-orientation value of horizontal.",
10629
+ "description": "An input where the user selects a value from within a given range.\n\nA slider represents the current value and range of possible values via the size of the slider and position of the thumb. It is typically possible to add to or subtract from the current value by using directional keys such as arrow keys.\n\nAuthors MAY set the aria-valuemin and aria-valuemax attributes. Otherwise, their implicit values follow the same rules as <input type=\"range\"> in HTML:\n\nAuthors MUST set the aria-valuenow attribute. If aria-valuenow is missing or has an unexpected value, browsers MAY implement the repair techniques specified in the section describing handling author errors in states and properties, which are equivalent to the repair techniques for <input type=\"range\"> in HTML.\n\nElements with the role slider have an implicit aria-orientation value of horizontal.",
10631
10630
  "generalization": ["input", "range"],
10632
10631
  "requiredContextRole": [],
10633
10632
  "requiredOwnedElements": [],
@@ -11790,10 +11789,10 @@
11790
11789
  },
11791
11790
  {
11792
11791
  "name": "table",
11793
- "description": "A section containing data arranged in rows and columns. See related grid.\n\nThe table role is intended for tabular containers which are not interactive. If the tabular container maintains a selection state, provides its own two-dimensional navigation, or allows the user to rearrange or otherwise manipulate its contents or the display thereof, authors SHOULD use grid or treegrid instead.\n\nAuthors SHOULD prefer the use of the host language's semantics for table whenever possible, such as the <table> element in [HTML].",
11792
+ "description": "A section containing data arranged in rows and columns. See related grid.\n\nThe table role is intended for tabular containers which are not interactive. If the tabular container maintains a selection state, provides its own two-dimensional navigation, or allows the user to rearrange or otherwise manipulate its contents or the display thereof, authors SHOULD use grid or treegrid instead.\n\nAuthors SHOULD prefer the use of the host language's semantics for table whenever possible, such as the <table> element in HTML.",
11794
11793
  "generalization": ["section"],
11795
11794
  "requiredContextRole": [],
11796
- "requiredOwnedElements": ["row", "rowgroup > row"],
11795
+ "requiredOwnedElements": ["caption", "row", "rowgroup > row"],
11797
11796
  "accessibleNameRequired": true,
11798
11797
  "accessibleNameFromAuthor": true,
11799
11798
  "accessibleNameFromContent": false,
@@ -12378,7 +12377,7 @@
12378
12377
  },
12379
12378
  {
12380
12379
  "name": "time",
12381
- "description": "An element that represents a specific point in time.\n\nAt the present time, there are no WAI-ARIA properties corresponding to the datetime attribute supported on <time> in [HTML]. The addition of this property will be considered for ARIA version 1.3.\n\nAuthors SHOULD limit text contents to a valid date- or time-related string, or apply this future datetime-equivalent property to the element which has role time.\n\nExamples of valid date- or time-related strings as text contents of an element with the time role:",
12380
+ "description": "An element that represents a specific point in time.\n\nAt the present time, there are no WAI-ARIA properties corresponding to the datetime attribute supported on <time> in HTML. The addition of this property will be considered for ARIA version 1.3.\n\nAuthors SHOULD limit text contents to a valid date- or time-related string, or apply this future datetime-equivalent property to the element which has role time.\n\nExamples of valid date- or time-related strings as text contents of an element with the time role:",
12382
12381
  "generalization": ["section"],
12383
12382
  "requiredContextRole": [],
12384
12383
  "requiredOwnedElements": [],
@@ -12958,7 +12957,7 @@
12958
12957
  "description": "A grid whose rows can be expanded and collapsed in the same manner as for a tree.\n\nIf aria-readonly is set on an element with role treegrid, user agents MUST propagate the value to all gridcell elements owned by the treegrid and expose the value in the accessibility API. An author MAY override the propagated value of aria-readonly for an individual gridcell element.\n\nWhen the aria-readonly attribute is applied to a focusable gridcell, it indicates whether the content contained in the gridcell is editable. The aria-readonly attribute does not represent availability of functions for navigating or manipulating the treegrid itself.\n\nIn a treegrid that provides content editing functions, if the content of a focusable gridcell element is not editable, authors MAY set aria-readonly to true on the gridcell element. However, if a treegrid presents a collection of elements that do not support aria-readonly, such as a collection of link elements, it is not necessary for the author to specify a value for aria-readonly.\n\nTo be keyboard accessible, authors SHOULD manage focus of descendants for all instances of this role, as described in Managing Focus.",
12959
12958
  "generalization": ["grid", "tree"],
12960
12959
  "requiredContextRole": [],
12961
- "requiredOwnedElements": ["row", "rowgroup > row"],
12960
+ "requiredOwnedElements": ["caption", "row", "rowgroup > row"],
12962
12961
  "accessibleNameRequired": true,
12963
12962
  "accessibleNameFromAuthor": true,
12964
12963
  "accessibleNameFromContent": false,
@@ -13471,7 +13470,6 @@
13471
13470
  "type": "property",
13472
13471
  "value": "true/false",
13473
13472
  "enum": [],
13474
- "defaultValue": "false",
13475
13473
  "isGlobal": true,
13476
13474
  "valueDescriptions": {
13477
13475
  "false": "Assistive technologies will present only the changed node or nodes.",
@@ -35455,7 +35453,7 @@
35455
35453
  {
35456
35454
  "name": "applet",
35457
35455
  "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
35458
- "description": "The obsolete HTML Applet Element (<applet>) embeds a Java applet into the document; this element has been deprecated in favor of <object>.",
35456
+ "description": "",
35459
35457
  "categories": [],
35460
35458
  "contentModel": {
35461
35459
  "contents": true
@@ -35467,68 +35465,7 @@
35467
35465
  "omission": false,
35468
35466
  "obsolete": true,
35469
35467
  "globalAttrs": {},
35470
- "attributes": {
35471
- "align": {
35472
- "description": "This attribute is used to position the applet on the page relative to content that might flow around it. The HTML 4.01 specification defines values of bottom, left, middle, right, and top, whereas Microsoft and Netscape also might support absbottom, absmiddle, baseline, center, and texttop.",
35473
- "deprecated": true
35474
- },
35475
- "alt": {
35476
- "description": "This attribute causes a descriptive text alternate to be displayed on browsers that do not support Java. Page designers should also remember that content enclosed within the <applet> element may also be rendered as alternative text.",
35477
- "deprecated": true
35478
- },
35479
- "archive": {
35480
- "description": "This attribute refers to an archived or compressed version of the applet and its associated class files, which might help reduce download time.",
35481
- "deprecated": true
35482
- },
35483
- "code": {
35484
- "description": "This attribute specifies the URL of the applet's class file to be loaded and executed. Applet filenames are identified by a .class filename extension. The URL specified by code might be relative to the codebase attribute.",
35485
- "deprecated": true
35486
- },
35487
- "codebase": {
35488
- "description": "This attribute gives the absolute or relative URL of the directory where applets' .class files referenced by the code attribute are stored.",
35489
- "deprecated": true
35490
- },
35491
- "datafld": {
35492
- "description": "This attribute, supported by Internet Explorer 4 and higher, specifies the column name from the data source object that supplies the bound data. This attribute might be used to specify the various <param> elements passed to the Java applet.",
35493
- "deprecated": true
35494
- },
35495
- "datasrc": {
35496
- "description": "Like datafld, this attribute is used for data binding under Internet Explorer 4. It indicates the id of the data source object that supplies the data that is bound to the <param> elements associated with the applet.",
35497
- "deprecated": true
35498
- },
35499
- "height": {
35500
- "description": "This attribute specifies the height, in pixels, that the applet needs.",
35501
- "deprecated": true
35502
- },
35503
- "hspace": {
35504
- "description": "This attribute specifies additional horizontal space, in pixels, to be reserved on either side of the applet.",
35505
- "deprecated": true
35506
- },
35507
- "mayscript": {
35508
- "description": "In the Netscape implementation, this attribute allows access to an applet by programs in a scripting language embedded in the document.",
35509
- "deprecated": true
35510
- },
35511
- "name": {
35512
- "description": "This attribute assigns a name to the applet so that it can be identified by other resources; particularly scripts.",
35513
- "deprecated": true
35514
- },
35515
- "object": {
35516
- "description": "This attribute specifies the URL of a serialized representation of an applet.",
35517
- "deprecated": true
35518
- },
35519
- "src": {
35520
- "description": "As defined for Internet Explorer 4 and higher, this attribute specifies a URL for an associated file for the applet. The meaning and use is unclear and not part of the HTML standard.",
35521
- "deprecated": true
35522
- },
35523
- "vspace": {
35524
- "description": "This attribute specifies additional vertical space, in pixels, to be reserved above and below the applet.",
35525
- "deprecated": true
35526
- },
35527
- "width": {
35528
- "description": "This attribute specifies in pixels the width that the applet needs.",
35529
- "deprecated": true
35530
- }
35531
- }
35468
+ "attributes": {}
35532
35469
  },
35533
35470
  {
35534
35471
  "name": "area",
@@ -35822,7 +35759,7 @@
35822
35759
  {
35823
35760
  "name": "basefont",
35824
35761
  "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
35825
- "description": "CSS Fonts is a module of CSS that defines font-related properties and how font resources are loaded. It lets you define the style of a font, such as its family, size and weight, line height, and the glyph variants to use when multiple are available for a single character.",
35762
+ "description": "The CSS fonts module defines font-related properties and how font resources are loaded. It lets you define the style of a font, such as its family, size and weight, line height, and the glyph variants to use when multiple are available for a single character.",
35826
35763
  "categories": [],
35827
35764
  "contentModel": {
35828
35765
  "contents": true
@@ -35899,7 +35836,7 @@
35899
35836
  {
35900
35837
  "name": "bgsound",
35901
35838
  "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
35902
- "description": "The <bgsound> HTML element is deprecated. It sets up a sound file to play in the background while the page is used; use <audio> instead.",
35839
+ "description": "The <audio> HTML element is used to embed sound content in documents. It may contain one or more audio sources, represented using the src attribute or the <source> element: the browser will choose the most suitable one. It can also be the destination for streamed media, using a MediaStream.",
35903
35840
  "categories": [],
35904
35841
  "contentModel": {
35905
35842
  "contents": true
@@ -35912,17 +35849,35 @@
35912
35849
  "obsolete": true,
35913
35850
  "globalAttrs": {},
35914
35851
  "attributes": {
35915
- "balance": {
35916
- "description": "This attribute defines a number between -10,000 and +10,000 that determines how the volume will be divided between the speakers."
35852
+ "autoplay": {
35853
+ "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."
35854
+ },
35855
+ "controls": {
35856
+ "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."
35857
+ },
35858
+ "controlslist": {
35859
+ "description": "The controlslist attribute, when specified, helps the browser select what controls to show for the audio element whenever the browser shows its own set of controls (that is, when the controls attribute is specified). The allowed values are nodownload, nofullscreen and noremoteplayback.",
35860
+ "experimental": true,
35861
+ "nonStandard": true
35862
+ },
35863
+ "crossorigin": {
35864
+ "description": "This enumerated attribute indicates whether to use CORS to fetch the related audio file. CORS-enabled resources can be reused in the <canvas> element without being tainted. The allowed values are: anonymous Sends a cross-origin request without a credential. In other words, it sends the Origin: HTTP header without a cookie, X.509 certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (by not setting the Access-Control-Allow-Origin: HTTP header), the resource will be tainted, and its usage restricted. use-credentials Sends a cross-origin request with a credential. In other words, it sends the Origin: HTTP header with a cookie, a certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (through Access-Control-Allow-Credentials: HTTP header), the resource will be tainted and its usage restricted. When not present, the resource is fetched without a CORS request (i.e. without sending the Origin: HTTP header), preventing its non-tainted use in <canvas> elements. If invalid, it is handled as if the enumerated keyword anonymous was used. See CORS settings attributes for additional information."
35865
+ },
35866
+ "disableremoteplayback": {
35867
+ "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 this proposed specification for more information. Note: In Safari, you can use x-webkit-airplay=\"deny\" as a fallback.",
35868
+ "experimental": true
35917
35869
  },
35918
35870
  "loop": {
35919
- "description": "This attribute indicates the number of times a sound is to be played and either has a numeric value or the keyword infinite."
35871
+ "description": "A Boolean attribute: if specified, the audio player will automatically seek back to the start upon reaching the end of the audio."
35920
35872
  },
35921
- "src": {
35922
- "description": "This attribute specifies the URL of the sound file to be played, which must be one of the following types: .wav, .au, or .mid."
35873
+ "muted": {
35874
+ "description": "A Boolean attribute that indicates whether the audio will be initially silenced. Its default value is false."
35875
+ },
35876
+ "preload": {
35877
+ "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."
35923
35878
  },
35924
- "volume": {
35925
- "description": "This attribute defines a number between -10,000 and 0 that determines the loudness of a page's background sound."
35879
+ "src": {
35880
+ "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."
35926
35881
  }
35927
35882
  }
35928
35883
  },
@@ -35946,7 +35901,7 @@
35946
35901
  {
35947
35902
  "name": "blink",
35948
35903
  "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
35949
- "description": "The <blink> HTML element is a non-standard element which causes the enclosed text to flash slowly.",
35904
+ "description": "",
35950
35905
  "categories": [],
35951
35906
  "contentModel": {
35952
35907
  "contents": true
@@ -36246,7 +36201,7 @@
36246
36201
  "description": "This Boolean attribute specifies that the button should have input focus when the page loads. Only one element in a document can have this attribute."
36247
36202
  },
36248
36203
  "disabled": {
36249
- "description": "This Boolean attribute prevents the user from interacting with the button: it cannot be pressed or focused. Firefox, unlike other browsers, persists the dynamic disabled state of a <button> across page loads. To control this feature, use the [autocomplete]] (#autocomplete) attribute."
36204
+ "description": "This Boolean attribute prevents the user from interacting with the button: it cannot be pressed or focused. Firefox, unlike other browsers, persists the dynamic disabled state of a <button> across page loads. To control this feature, use the autocomplete attribute."
36250
36205
  },
36251
36206
  "form": {
36252
36207
  "description": "The <form> element to associate the button with (its form owner). The value of this attribute must be the id of a <form> in the same document. (If this attribute is not set, the <button> is associated with its ancestor <form> element, if any.) This attribute lets you associate <button> elements to <form>s anywhere in the document, not just inside a <form>. It can also override an ancestor <form> element."
@@ -38942,7 +38897,7 @@
38942
38897
  {
38943
38898
  "name": "keygen",
38944
38899
  "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
38945
- "description": "The <keygen> HTML element exists to facilitate generation of key material, and submission of the public key as part of an HTML form. This mechanism is designed for use with Web-based certificate management systems. It is expected that the <keygen> element will be used in an HTML form along with other information needed to construct a certificate request, and that the result of the process will be a signed certificate.",
38900
+ "description": "",
38946
38901
  "categories": [],
38947
38902
  "contentModel": {
38948
38903
  "contents": true
@@ -38954,26 +38909,7 @@
38954
38909
  "omission": false,
38955
38910
  "obsolete": true,
38956
38911
  "globalAttrs": {},
38957
- "attributes": {
38958
- "autofocus": {
38959
- "description": "This Boolean attribute lets you specify that the control should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form element in a document can have the autofocus attribute, which is a Boolean."
38960
- },
38961
- "challenge": {
38962
- "description": "A challenge string that is submitted along with the public key. Defaults to an empty string if not specified."
38963
- },
38964
- "disabled": {
38965
- "description": "This Boolean attribute indicates that the form control is not available for interaction."
38966
- },
38967
- "form": {
38968
- "description": "The form element that this element is associated with (its form owner). The value of the attribute must be an id of a <form> element in the same document. If this attribute is not specified, this element must be a descendant of a <form> element. This attribute enables you to place <keygen> elements anywhere within a document, not just as descendants of their form elements."
38969
- },
38970
- "keytype": {
38971
- "description": "The type of key generated. The default value is RSA."
38972
- },
38973
- "name": {
38974
- "description": "The name of the control, which is submitted with the form data."
38975
- }
38976
- }
38912
+ "attributes": {}
38977
38913
  },
38978
38914
  {
38979
38915
  "name": "label",
@@ -40752,7 +40688,7 @@
40752
40688
  "contentModel": {
40753
40689
  "contents": [
40754
40690
  {
40755
- "zeroOrMore": ["option", "optgroup"]
40691
+ "zeroOrMore": ["option", "optgroup", "hr", "#script-supporting"]
40756
40692
  }
40757
40693
  ]
40758
40694
  },
@@ -40929,7 +40865,7 @@
40929
40865
  {
40930
40866
  "name": "spacer",
40931
40867
  "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
40932
- "description": "The <spacer> HTML element is an obsolete HTML element which allowed insertion of empty spaces on pages. It was devised by Netscape to accomplish the same effect as a single-pixel layout image, which was something web designers used to use to add white spaces to web pages without actually using an image. However, <spacer> is no longer supported by any major browser and the same effects can now be achieved using simple CSS.",
40868
+ "description": "",
40933
40869
  "categories": [],
40934
40870
  "contentModel": {
40935
40871
  "contents": true
@@ -40941,28 +40877,12 @@
40941
40877
  "omission": false,
40942
40878
  "obsolete": true,
40943
40879
  "globalAttrs": {},
40944
- "attributes": {
40945
- "align": {
40946
- "description": "This attribute determines alignment of spacer. Possible values are left, right and center."
40947
- },
40948
- "height": {
40949
- "description": "This attribute can be used for defining height of spacer in pixels when type is block."
40950
- },
40951
- "size": {
40952
- "description": "This attribute can be used for defining size of spacer in pixels when type is horizontal or vertical."
40953
- },
40954
- "type": {
40955
- "description": "This attribute determines type of spacer. Possible values are horizontal, vertical and block."
40956
- },
40957
- "width": {
40958
- "description": "This attribute can be used for defining width of spacer in pixels when type is block."
40959
- }
40960
- }
40880
+ "attributes": {}
40961
40881
  },
40962
40882
  {
40963
40883
  "name": "span",
40964
40884
  "cite": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span",
40965
- "description": "The <span> HTML element is a generic inline container for phrasing content, which does not inherently represent anything. It can be used to group elements for styling purposes (using the class or id attributes), or because they share attribute values, such as lang. It should be used only when no other semantic element is appropriate. <span> is very much like a <div> element, but <div> is a block-level element whereas a <span> is an inline element.",
40885
+ "description": "The <span> HTML element is a generic inline container for phrasing content, which does not inherently represent anything. It can be used to group elements for styling purposes (using the class or id attributes), or because they share attribute values, such as lang. It should be used only when no other semantic element is appropriate. <span> is very much like a <div> element, but <div> is a block-level element whereas a <span> is an inline-level element.",
40966
40886
  "categories": ["#flow", "#phrasing"],
40967
40887
  "contentModel": {
40968
40888
  "contents": [
@@ -42054,10 +41974,6 @@
42054
41974
  "#HTMLLinkAndFetchingAttrs": ["crossorigin"]
42055
41975
  },
42056
41976
  "attributes": {
42057
- "autopictureinpicture": {
42058
- "description": "A Boolean attribute which if true indicates that the element should automatically toggle picture-in-picture mode when the user switches back and forth between this document and another document or application.",
42059
- "experimental": true
42060
- },
42061
41977
  "autoplay": {
42062
41978
  "description": "A Boolean attribute; if specified, the video automatically begins to play back as soon as it can do so without stopping to finish loading the data. 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. 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. In some browsers (e.g. Chrome 70.0) autoplay doesn't work if no muted attribute is present."
42063
41979
  },
@@ -42311,92 +42227,6 @@
42311
42227
  }
42312
42228
  }
42313
42229
  },
42314
- {
42315
- "name": "svg:altGlyph",
42316
- "namespace": "http://www.w3.org/2000/svg",
42317
- "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
42318
- "description": "The <altGlyph> SVG element allows sophisticated selection of the glyphs used to render its child character data.",
42319
- "categories": [],
42320
- "contentModel": {
42321
- "contents": true
42322
- },
42323
- "aria": {
42324
- "permittedRoles": true,
42325
- "implicitRole": false
42326
- },
42327
- "omission": false,
42328
- "obsolete": true,
42329
- "globalAttrs": {},
42330
- "attributes": {
42331
- "dx": {
42332
- "description": "This attribute indicates a shift along the x-axis on the position of the element. Value type: <list-of-coordinates> ; Default value: Relative x-coordinate of ancestor <text> or <tspan>; Animatable: yes",
42333
- "deprecated": true
42334
- },
42335
- "dy": {
42336
- "description": "This attribute indicates a shift along the x-axis on the position of the element. Value type: <list-of-coordinates> ; Default value: Relative y-coordinate of ancestor <text> or <tspan>; Animatable: yes",
42337
- "deprecated": true
42338
- },
42339
- "format": {
42340
- "description": "The format of the given font. Value type: <string> ; Default value: none; Animatable: no",
42341
- "deprecated": true
42342
- },
42343
- "glyphRef": {
42344
- "description": "The glyph identifier, the format of which is dependent on the format defined by the format attribute of the given font. Value type: <string> ; Default value: none; Animatable: no",
42345
- "deprecated": true
42346
- },
42347
- "rotate": {
42348
- "description": "This attribute defines the supplemental rotation that will be applied to the element. Value type: <list-of-numbers> ; Default value: none; Animatable: yes (non-additive)",
42349
- "deprecated": true
42350
- },
42351
- "x": {
42352
- "description": "This attribute defines the corresponding absolute x-coordinates for rendering the element. Value type: <list-of-coordinates> ; Default value: Absolute x-coordinate of ancestor <text> or <tspan>; Animatable: yes",
42353
- "deprecated": true
42354
- },
42355
- "xlink:href": {
42356
- "description": "An <iri> reference either to a <glyph> element in an SVG document or to an <altGlyphDef> element. If the reference is to a <glyph> element and that glyph is available, then that glyph is rendered instead of the character(s) that are inside of the <altGlyph> element. If the reference is to an <altGlyphDef> element, then if an appropriate set of alternate glyphs is located from processing the <altGlyphDef> element, then those alternate glyphs are rendered instead of the character(s) that are inside of the <altGlyph> element. Value type: <iri> ; Default value: none; Animatable: no"
42357
- },
42358
- "y": {
42359
- "description": "This attribute defines the corresponding absolute y-coordinates for rendering the element. Value type: <list-of-coordinates> ; Default value: Absolute y-coordinate of ancestor <text> or <tspan>; Animatable: yes",
42360
- "deprecated": true
42361
- }
42362
- }
42363
- },
42364
- {
42365
- "name": "svg:altGlyphDef",
42366
- "namespace": "http://www.w3.org/2000/svg",
42367
- "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
42368
- "description": "The <altGlyphDef> SVG element defines a substitution representation for glyphs.",
42369
- "categories": [],
42370
- "contentModel": {
42371
- "contents": true
42372
- },
42373
- "aria": {
42374
- "permittedRoles": true,
42375
- "implicitRole": false
42376
- },
42377
- "omission": false,
42378
- "obsolete": true,
42379
- "globalAttrs": {},
42380
- "attributes": {}
42381
- },
42382
- {
42383
- "name": "svg:altGlyphItem",
42384
- "namespace": "http://www.w3.org/2000/svg",
42385
- "cite": "https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features",
42386
- "description": "The <altGlyphItem> element provides a set of candidates for glyph substitution by the <altGlyph> element.",
42387
- "categories": [],
42388
- "contentModel": {
42389
- "contents": true
42390
- },
42391
- "aria": {
42392
- "permittedRoles": true,
42393
- "implicitRole": false
42394
- },
42395
- "omission": false,
42396
- "obsolete": true,
42397
- "globalAttrs": {},
42398
- "attributes": {}
42399
- },
42400
42230
  {
42401
42231
  "name": "svg:animate",
42402
42232
  "namespace": "http://www.w3.org/2000/svg",
@@ -43022,7 +42852,7 @@
43022
42852
  "name": "svg:discard",
43023
42853
  "namespace": "http://www.w3.org/2000/svg",
43024
42854
  "cite": "https://developer.mozilla.org/en-US/docs/Web/SVG/Element/discard",
43025
- "description": "The <discard> SVG element allows authors to specify the time at which particular elements are to be discarded, thereby reducing the resources required by an SVG user agent. This is particularly useful to help SVG viewers conserve memory while displaying long-running documents.",
42855
+ "description": "",
43026
42856
  "categories": [],
43027
42857
  "contentModel": {
43028
42858
  "contents": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markuplint/html-spec",
3
- "version": "3.8.0",
3
+ "version": "3.10.0",
4
4
  "description": "A specification of HTML Living Standard for markuplint",
5
5
  "repository": "git@github.com:markuplint/markuplint.git",
6
6
  "author": "Yusuke Hirao <yusukehirao@me.com>",
@@ -12,24 +12,16 @@
12
12
  "access": "public"
13
13
  },
14
14
  "scripts": {
15
- "gen": "ts-node gen/index.ts; prettier --write index.json"
15
+ "gen": "npm-run-all gen:*",
16
+ "gen:build": "node build.mjs",
17
+ "gen:prettier": "prettier --write index.json"
16
18
  },
17
19
  "devDependencies": {
18
- "@markuplint/test-tools": "3.3.0",
19
- "@types/cheerio": "^0.22.31",
20
- "@types/cli-progress": "^3.11.0",
21
- "@types/node-fetch": "2",
22
- "ajv": "^8.11.2",
23
- "cheerio": "^1.0.0-rc.12",
24
- "cli-progress": "^3.11.2",
25
- "fast-xml-parser": "^4.2.2",
26
- "glob": "^10.2.2",
27
- "node-fetch": "3.3.1",
28
- "strip-json-comments": "3",
29
- "type-fest": "^3.8.0"
20
+ "@markuplint/spec-generator": "3.10.0",
21
+ "@markuplint/test-tools": "3.5.0"
30
22
  },
31
23
  "dependencies": {
32
- "@markuplint/ml-spec": "3.8.0"
24
+ "@markuplint/ml-spec": "3.10.0"
33
25
  },
34
- "gitHead": "adc6e432cccba7cfad0dc8bf9f92e5aaf1107359"
26
+ "gitHead": "9547b8dca20736a93e4d01af2d61bee314ba5718"
35
27
  }
@@ -0,0 +1,87 @@
1
+ const { readFile } = require('node:fs/promises');
2
+ const path = require('node:path');
3
+
4
+ const { resolveNamespace, getAttrSpecsByNames } = require('@markuplint/ml-spec');
5
+ const { glob } = require('@markuplint/test-tools');
6
+ const Ajv = require('ajv');
7
+ const strip = require('strip-json-comments');
8
+
9
+ const htmlSpec = require('../index');
10
+
11
+ const schemas = {
12
+ element: {
13
+ $id: '@markuplint/ml-spec/schemas/element.schema.json',
14
+ ...require('@markuplint/ml-spec/schemas/element.schema.json'),
15
+ },
16
+ aria: {
17
+ $id: '@markuplint/ml-spec/schemas/aria.schema.json',
18
+ ...require('@markuplint/ml-spec/schemas/aria.schema.json'),
19
+ },
20
+ contentModels: {
21
+ $id: '@markuplint/ml-spec/schemas/content-models.schema.json',
22
+ ...require('@markuplint/ml-spec/schemas/content-models.schema.json'),
23
+ },
24
+ globalAttributes: {
25
+ $id: '@markuplint/ml-spec/schemas/global-attributes.schema.json',
26
+ ...require('@markuplint/ml-spec/schemas/global-attributes.schema.json'),
27
+ },
28
+ attributes: {
29
+ $id: '@markuplint/ml-spec/schemas/attributes.schema.json',
30
+ ...require('@markuplint/ml-spec/schemas/attributes.schema.json'),
31
+ },
32
+ types: {
33
+ $id: '@markuplint/types/types.schema.json',
34
+ ...require('../../types/types.schema.json'),
35
+ },
36
+ };
37
+
38
+ test('structure', () => {
39
+ htmlSpec.specs.forEach(el => {
40
+ const { localName, namespaceURI } = resolveNamespace(el.name);
41
+ try {
42
+ getAttrSpecsByNames(localName, namespaceURI, htmlSpec);
43
+ } catch (e) {
44
+ throw el;
45
+ }
46
+ });
47
+ });
48
+
49
+ describe('schema', () => {
50
+ const map = [
51
+ [
52
+ 'spec.*.json',
53
+ new Ajv({
54
+ schemas: [
55
+ schemas.element,
56
+ schemas.aria,
57
+ schemas.contentModels,
58
+ schemas.globalAttributes,
59
+ schemas.attributes,
60
+ schemas.types,
61
+ ],
62
+ }).getSchema(schemas.element.$id),
63
+ path.resolve(__dirname, 'spec.*.json'),
64
+ ],
65
+ [
66
+ 'spec-common.attributes.json',
67
+ new Ajv({
68
+ schemas: [schemas.globalAttributes, schemas.attributes, schemas.types],
69
+ }).getSchema(schemas.globalAttributes.$id),
70
+ path.resolve(__dirname, 'spec-common.attributes.json'),
71
+ ],
72
+ ];
73
+
74
+ for (const [testName, validator, targetFiles] of map) {
75
+ test(testName, async () => {
76
+ const files = await glob(targetFiles);
77
+ for (const jsonPath of files) {
78
+ const json = JSON.parse(strip(await readFile(jsonPath, { encoding: 'utf-8' })));
79
+ const isValid = validator(json);
80
+ if (!isValid) {
81
+ throw new Error(`${path.basename(jsonPath)} is invalid (${validator.schemaEnv.baseId})`);
82
+ }
83
+ }
84
+ expect(testName).toBe(testName);
85
+ });
86
+ }
87
+ });