diff --git a/bin/amphtml-update.py b/bin/amphtml-update.py index 0f29ef36901..16915981377 100755 --- a/bin/amphtml-update.py +++ b/bin/amphtml-update.py @@ -787,10 +787,10 @@ def GetMandatoryOf( attr, constraint ): Returns: A list of attributes that have that constraint name. """ - attributes = [] + attributes = set() for attr_spec in attr: if attr_spec.HasField(constraint): - attributes.append( + attributes.add( # Convert something like [src] to data-amp-bind-src. re.sub( "^\[(\S+)\]$", @@ -799,8 +799,7 @@ def GetMandatoryOf( attr, constraint ): ) ) - attributes.sort() - return attributes + return sorted(attributes) def Phpize(data, indent=0): """Helper function to convert JSON-serializable data into PHP literals. diff --git a/includes/sanitizers/class-amp-allowed-tags-generated.php b/includes/sanitizers/class-amp-allowed-tags-generated.php index 0a44e66238f..bca40da77a6 100644 --- a/includes/sanitizers/class-amp-allowed-tags-generated.php +++ b/includes/sanitizers/class-amp-allowed-tags-generated.php @@ -13,10 +13,110 @@ */ class AMP_Allowed_Tags_Generated { - private static $spec_file_revision = 961; + private static $spec_file_revision = 1012; private static $minimum_validator_revision_required = 375; private static $descendant_tag_lists = array( + 'amp-mega-menu-allowed-descendants' => array( + 'a', + 'amp-ad', + 'amp-carousel', + 'amp-embed', + 'amp-img', + 'amp-lightbox', + 'amp-list', + 'amp-video', + 'b', + 'br', + 'button', + 'col', + 'colgroup', + 'div', + 'em', + 'fieldset', + 'form', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'i', + 'input', + 'label', + 'li', + 'mark', + 'nav', + 'ol', + 'option', + 'p', + 'path', + 'section', + 'span', + 'strike', + 'strong', + 'sub', + 'sup', + 'svg', + 'table', + 'tbody', + 'td', + 'template', + 'th', + 'time', + 'title', + 'tr', + 'u', + 'ul', + ), + 'amp-nested-menu-allowed-descendants' => array( + 'a', + 'amp-accordion', + 'amp-img', + 'amp-list', + 'b', + 'br', + 'button', + 'col', + 'colgroup', + 'div', + 'em', + 'fieldset', + 'form', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'i', + 'input', + 'label', + 'li', + 'mark', + 'nav', + 'ol', + 'option', + 'p', + 'path', + 'section', + 'span', + 'strike', + 'strong', + 'sub', + 'sup', + 'svg', + 'table', + 'tbody', + 'td', + 'template', + 'th', + 'time', + 'title', + 'tr', + 'u', + 'ul', + ), 'amp-story-bookend-allowed-descendants' => array( 'script', ), @@ -107,6 +207,7 @@ class AMP_Allowed_Tags_Generated { 'small', 'solidcolor', 'span', + 'stop', 'strong', 'sub', 'sup', @@ -138,7 +239,6 @@ class AMP_Allowed_Tags_Generated { 'amp-experiment', 'amp-fit-text', 'amp-font', - 'amp-gfycat', 'amp-gist', 'amp-google-vrview-image', 'amp-img', @@ -234,6 +334,7 @@ class AMP_Allowed_Tags_Generated { 'solidcolor', 'source', 'span', + 'stop', 'strong', 'sub', 'sup', @@ -288,12 +389,9 @@ class AMP_Allowed_Tags_Generated { 'amp-fx-collection', 'amp-fx-flying-carpet', 'amp-gfycat', - 'amp-gfycat', - 'amp-gist', 'amp-gist', 'amp-google-document-embed', 'amp-google-vrview-image', - 'amp-google-vrview-image', 'amp-hulu', 'amp-ima-video', 'amp-image-slider', @@ -304,8 +402,6 @@ class AMP_Allowed_Tags_Generated { 'amp-jwplayer', 'amp-kaltura-player', 'amp-list', - 'amp-list', - 'amp-live-list', 'amp-live-list', 'amp-mathml', 'amp-megaphone', @@ -417,6 +513,7 @@ class AMP_Allowed_Tags_Generated { 'solidcolor', 'source', 'span', + 'stop', 'strong', 'sub', 'sup', @@ -467,9 +564,11 @@ class AMP_Allowed_Tags_Generated { 'maps', 'bip', 'bbmi', + 'chrome', 'itms-services', 'fb-me', 'fb-messenger', + 'feed', 'intent', 'line', 'skype', @@ -508,6 +607,7 @@ class AMP_Allowed_Tags_Generated { 'type' => array( 'value_casei' => array( 'text/html', + 'application/rss+xml', ), ), ), @@ -1326,6 +1426,7 @@ class AMP_Allowed_Tags_Generated { 'attr_spec_list' => array( 'data-amp-bind-src' => array(), 'filter' => array( + 'mandatory' => true, 'value_casei' => array( 'custom', 'fuzzy', @@ -1342,6 +1443,7 @@ class AMP_Allowed_Tags_Generated { ), 'filter-value' => array(), 'highlight-user-entry' => array(), + 'inline' => array(), 'items' => array(), 'max-entries' => array(), 'media' => array(), @@ -1351,6 +1453,7 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'query' => array(), 'src' => array( 'value_url' => array( 'allow_relative' => true, @@ -1687,6 +1790,11 @@ class AMP_Allowed_Tags_Generated { 'data-video' => array( 'value_regex' => '[0-9]+', ), + 'dock' => array( + 'requires_extension' => array( + 'amp-video-docking', + ), + ), 'media' => array(), 'noloading' => array( 'value' => array( @@ -2294,6 +2402,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'hide-keyboard-shortcuts-panel' => array( + 'value' => array( + '', + ), + ), 'highlighted' => array(), 'input-selector' => array(), 'locale' => array(), @@ -2382,6 +2495,11 @@ class AMP_Allowed_Tags_Generated { 'value_regex' => '[0-6]', ), 'format' => array(), + 'hide-keyboard-shortcuts-panel' => array( + 'value' => array( + '', + ), + ), 'highlighted' => array(), 'input-selector' => array(), 'locale' => array(), @@ -2478,6 +2596,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'hide-keyboard-shortcuts-panel' => array( + 'value' => array( + '', + ), + ), 'highlighted' => array(), 'locale' => array(), 'max' => array(), @@ -2575,6 +2698,11 @@ class AMP_Allowed_Tags_Generated { 'value_regex' => '[0-6]', ), 'format' => array(), + 'hide-keyboard-shortcuts-panel' => array( + 'value' => array( + '', + ), + ), 'highlighted' => array(), 'locale' => array(), 'max' => array(), @@ -3523,6 +3651,130 @@ class AMP_Allowed_Tags_Generated { ), ), ), + 'amp-inline-gallery' => array( + array( + 'attr_spec_list' => array( + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 5, + ), + ), + 'requires_extension' => array( + 'amp-inline-gallery', + ), + 'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery', + ), + ), + ), + 'amp-inline-gallery-pagination' => array( + array( + 'attr_spec_list' => array( + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 6, + 2, + 3, + 7, + 9, + 1, + 4, + ), + ), + 'mandatory_ancestor' => 'amp-inline-gallery', + 'requires_extension' => array( + 'amp-inline-gallery', + ), + 'spec_name' => 'amp-inline-gallery-pagination', + 'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery', + ), + ), + array( + 'attr_spec_list' => array( + 'inset' => array( + 'mandatory' => true, + ), + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 1, + ), + ), + 'mandatory_ancestor' => 'amp-inline-gallery', + 'requires_extension' => array( + 'amp-inline-gallery', + ), + 'spec_name' => 'amp-inline-gallery-pagination [inset]', + 'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery', + ), + ), + ), + 'amp-inline-gallery-thumbnails' => array( + array( + 'attr_spec_list' => array( + 'aspect-ratio-height' => array( + 'blacklisted_value_regex' => '^0+(\\.0+)?$', + 'value_regex' => '\\d+(\\.\\d+)?', + ), + 'aspect-ratio-width' => array( + 'blacklisted_value_regex' => '^0+(\\.0+)?$', + 'value_regex' => '\\d+(\\.\\d+)?', + ), + 'loop' => array( + 'value' => array( + 'true', + 'false', + ), + ), + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 6, + 2, + 3, + 7, + 9, + 1, + 4, + ), + ), + 'mandatory_ancestor' => 'amp-inline-gallery', + 'requires_extension' => array( + 'amp-inline-gallery', + ), + 'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery', + ), + ), + ), 'amp-instagram' => array( array( 'attr_spec_list' => array( @@ -3784,7 +4036,6 @@ class AMP_Allowed_Tags_Generated { 'credentials' => array(), 'data-amp-bind-is-layout-container' => array(), 'data-amp-bind-src' => array(), - 'data-amp-bind-state' => array(), 'diffable' => array( 'value' => array( '', @@ -3823,6 +4074,7 @@ class AMP_Allowed_Tags_Generated { ), ), 'template' => array(), + 'xssi-prefix' => array(), ), 'tag_spec' => array( 'amp_layout' => array( @@ -3961,6 +4213,47 @@ class AMP_Allowed_Tags_Generated { ), ), ), + 'amp-mega-menu' => array( + array( + 'attr_spec_list' => array( + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 3, + ), + ), + 'child_tags' => array( + 'child_tag_name_oneof' => array( + 'nav', + 'amp-list', + ), + 'mandatory_num_child_tags' => 1, + ), + 'descendant_tag_list' => 'amp-mega-menu-allowed-descendants', + 'reference_points' => array( + 'AMP-MEGA-MENU > AMP-LIST' => array( + 'mandatory' => false, + 'unique' => false, + ), + 'AMP-MEGA-MENU > NAV' => array( + 'mandatory' => false, + 'unique' => false, + ), + ), + 'requires_extension' => array( + 'amp-mega-menu', + ), + 'spec_url' => 'https://amp.dev/documentation/components/amp-mega-menu', + ), + ), + ), 'amp-megaphone' => array( array( 'attr_spec_list' => array( @@ -4057,8 +4350,8 @@ class AMP_Allowed_Tags_Generated { 'mandatory' => true, 'value' => array( 'curated', - 'specific', 'semantic', + 'specific', ), ), 'data-minimum-date-factor' => array(), @@ -4087,11 +4380,11 @@ class AMP_Allowed_Tags_Generated { 'tag_spec' => array( 'amp_layout' => array( 'supported_layouts' => array( - 4, 6, 2, 3, 7, + 4, ), ), 'requires_extension' => array( @@ -4132,19 +4425,61 @@ class AMP_Allowed_Tags_Generated { ), ), ), - 'amp-next-page' => array( + 'amp-nested-menu' => array( array( - 'attr_spec_list' => array(), - 'tag_spec' => array( - 'reference_points' => array( - 'AMP-NEXT-PAGE > [separator]' => array( - 'mandatory' => false, - 'unique' => true, + 'attr_spec_list' => array( + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + 'side' => array( + 'value' => array( + 'left', + 'right', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 6, ), - 'amp-next-page extension .json configuration' => array( + ), + 'descendant_tag_list' => 'amp-nested-menu-allowed-descendants', + 'mandatory_ancestor' => 'amp-sidebar', + 'requires_extension' => array( + 'amp-sidebar', + ), + 'spec_url' => 'https://amp.dev/documentation/components/amp-nested-menu', + ), + ), + ), + 'amp-next-page' => array( + array( + 'attr_spec_list' => array( + 'deep-parsing' => array(), + 'max-pages' => array(), + ), + 'tag_spec' => array( + 'reference_points' => array( + 'AMP-NEXT-PAGE > SCRIPT[type=application/json]' => array( 'mandatory' => true, 'unique' => true, ), + 'AMP-NEXT-PAGE > [footer]' => array( + 'mandatory' => false, + 'unique' => true, + ), + 'AMP-NEXT-PAGE > [recommendation-box]' => array( + 'mandatory' => false, + 'unique' => true, + ), + 'AMP-NEXT-PAGE > [separator]' => array( + 'mandatory' => false, + 'unique' => true, + ), ), 'requires_extension' => array( 'amp-next-page', @@ -4156,6 +4491,8 @@ class AMP_Allowed_Tags_Generated { ), array( 'attr_spec_list' => array( + 'deep-parsing' => array(), + 'max-pages' => array(), 'src' => array( 'blacklisted_value_regex' => '__amp_source_origin', 'mandatory' => true, @@ -4166,9 +4503,22 @@ class AMP_Allowed_Tags_Generated { ), ), ), + 'xssi-prefix' => array(), ), 'tag_spec' => array( 'reference_points' => array( + 'AMP-NEXT-PAGE > SCRIPT[type=application/json]' => array( + 'mandatory' => false, + 'unique' => true, + ), + 'AMP-NEXT-PAGE > [footer]' => array( + 'mandatory' => false, + 'unique' => true, + ), + 'AMP-NEXT-PAGE > [recommendation-box]' => array( + 'mandatory' => false, + 'unique' => true, + ), 'AMP-NEXT-PAGE > [separator]' => array( 'mandatory' => false, 'unique' => true, @@ -4190,6 +4540,8 @@ class AMP_Allowed_Tags_Generated { 'data-slot' => array( 'mandatory' => true, ), + 'deep-parsing' => array(), + 'max-pages' => array(), 'type' => array( 'mandatory' => true, 'value' => array( @@ -4199,6 +4551,18 @@ class AMP_Allowed_Tags_Generated { ), 'tag_spec' => array( 'reference_points' => array( + 'AMP-NEXT-PAGE > SCRIPT[type=application/json]' => array( + 'mandatory' => false, + 'unique' => true, + ), + 'AMP-NEXT-PAGE > [footer]' => array( + 'mandatory' => false, + 'unique' => true, + ), + 'AMP-NEXT-PAGE > [recommendation-box]' => array( + 'mandatory' => false, + 'unique' => true, + ), 'AMP-NEXT-PAGE > [separator]' => array( 'mandatory' => false, 'unique' => true, @@ -4677,6 +5041,37 @@ class AMP_Allowed_Tags_Generated { ), ), ), + 'amp-redbull-player' => array( + array( + 'attr_spec_list' => array( + 'data-param-videoid' => array( + 'mandatory' => true, + ), + 'media' => array(), + 'noloading' => array( + 'value' => array( + '', + ), + ), + ), + 'tag_spec' => array( + 'amp_layout' => array( + 'supported_layouts' => array( + 2, + 3, + 4, + 6, + 7, + 8, + 9, + ), + ), + 'requires_extension' => array( + 'amp-redbull-player', + ), + ), + ), + ), 'amp-reddit' => array( array( 'attr_spec_list' => array( @@ -4785,6 +5180,7 @@ class AMP_Allowed_Tags_Generated { 2, 3, 7, + 9, 1, 4, ), @@ -4893,6 +5289,7 @@ class AMP_Allowed_Tags_Generated { 'requires_extension' => array( 'amp-sidebar', ), + 'spec_name' => 'amp-sidebar', 'spec_url' => 'https://amp.dev/documentation/components/amp-sidebar', ), ), @@ -5291,7 +5688,6 @@ class AMP_Allowed_Tags_Generated { 'amp-geo', 'amp-pixel', 'amp-sidebar', - 'amp-story-access', 'amp-story-auto-ads', 'amp-story-bookend', 'amp-story-page', @@ -5305,30 +5701,6 @@ class AMP_Allowed_Tags_Generated { ), ), ), - 'amp-story-access' => array( - array( - 'attr_spec_list' => array( - 'media' => array(), - 'noloading' => array( - 'value' => array( - '', - ), - ), - 'type' => array( - 'value' => array( - 'blocking', - 'notification', - ), - ), - ), - 'tag_spec' => array( - 'mandatory_parent' => 'amp-story', - 'requires_extension' => array( - 'amp-access', - ), - ), - ), - ), 'amp-story-auto-ads' => array( array( 'attr_spec_list' => array(), @@ -5460,6 +5832,7 @@ class AMP_Allowed_Tags_Generated { 'blacklisted_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)', 'mandatory' => true, ), + 'next-page-no-ad' => array(), ), 'tag_spec' => array( 'child_tags' => array( @@ -5631,41 +6004,6 @@ class AMP_Allowed_Tags_Generated { ), ), ), - 'amp-user-location' => array( - array( - 'attr_spec_list' => array( - 'id' => array( - 'blacklisted_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)', - 'mandatory' => true, - ), - 'media' => array(), - 'noloading' => array( - 'value' => array( - '', - ), - ), - 'src' => array( - 'value_url' => array( - 'allow_relative' => false, - 'protocol' => array( - 'https', - ), - ), - ), - ), - 'tag_spec' => array( - 'amp_layout' => array( - 'supported_layouts' => array( - 1, - ), - ), - 'requires_extension' => array( - 'amp-user-location', - ), - 'spec_url' => 'https://amp.dev/documentation/components/amp-user-location', - ), - ), - ), 'amp-user-notification' => array( array( 'attr_spec_list' => array( @@ -6742,6 +7080,16 @@ class AMP_Allowed_Tags_Generated { 'spec_name' => 'amp-list-load-more button[load-more-clickable]', ), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'mandatory_ancestor' => 'amp-nested-menu', + 'spec_name' => 'button amp-nested-menu', + ), + ), ), 'canvas' => array( array( @@ -7283,6 +7631,25 @@ class AMP_Allowed_Tags_Generated { 'spec_name' => 'AMP-LIST DIV [fetch-error]', ), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu' => array(), + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'disallowed_ancestor' => array( + 'amp-accordion', + ), + 'mandatory_ancestor' => 'amp-nested-menu', + 'mandatory_oneof' => array( + 'amp-nested-submenu', + 'amp-nested-submenu-close', + 'amp-nested-submenu-open', + ), + 'spec_name' => 'div amp-nested-menu', + ), + ), ), 'dl' => array( array( @@ -8470,6 +8837,16 @@ class AMP_Allowed_Tags_Generated { ), 'tag_spec' => array(), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'mandatory_ancestor' => 'amp-nested-menu', + 'spec_name' => 'h2 amp-nested-menu', + ), + ), ), 'h3' => array( array( @@ -8478,6 +8855,16 @@ class AMP_Allowed_Tags_Generated { ), 'tag_spec' => array(), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'mandatory_ancestor' => 'amp-nested-menu', + 'spec_name' => 'h3 amp-nested-menu', + ), + ), ), 'h4' => array( array( @@ -8486,6 +8873,16 @@ class AMP_Allowed_Tags_Generated { ), 'tag_spec' => array(), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'mandatory_ancestor' => 'amp-nested-menu', + 'spec_name' => 'h4 amp-nested-menu', + ), + ), ), 'h5' => array( array( @@ -8494,6 +8891,16 @@ class AMP_Allowed_Tags_Generated { ), 'tag_spec' => array(), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'mandatory_ancestor' => 'amp-nested-menu', + 'spec_name' => 'h5 amp-nested-menu', + ), + ), ), 'h6' => array( array( @@ -8502,6 +8909,16 @@ class AMP_Allowed_Tags_Generated { ), 'tag_spec' => array(), ), + array( + 'attr_spec_list' => array( + 'amp-nested-submenu-close' => array(), + 'amp-nested-submenu-open' => array(), + ), + 'tag_spec' => array( + 'mandatory_ancestor' => 'amp-nested-menu', + 'spec_name' => 'h6 amp-nested-menu', + ), + ), ), 'head' => array( array( @@ -8840,7 +9257,7 @@ class AMP_Allowed_Tags_Generated { 'step' => array(), 'tabindex' => array(), 'type' => array( - 'blacklisted_value_regex' => '(^|\\s)(button|file|image|password|)(\\s|$)', + 'blacklisted_value_regex' => '(^|\\s)(file|image|password|)(\\s|$)', ), 'value' => array(), 'width' => array(), @@ -11503,6 +11920,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'src' => array( 'dispatch_key' => 2, @@ -11524,13 +11946,54 @@ class AMP_Allowed_Tags_Generated { ), ), 'tag_spec' => array( - 'mandatory' => true, + 'mandatory_alternatives' => 'amphtml engine v0.js script', 'mandatory_parent' => 'head', 'spec_name' => 'amphtml engine v0.js script', 'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml#required-markup', 'unique' => true, ), ), + array( + 'attr_spec_list' => array( + 'async' => array( + 'mandatory' => true, + 'value' => array( + '', + ), + ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), + 'nonce' => array(), + 'src' => array( + 'dispatch_key' => 2, + 'mandatory' => true, + 'value' => array( + 'https://cdn.ampproject.org/lts/v0.js', + ), + ), + 'type' => array( + 'value_casei' => array( + 'text/javascript', + ), + ), + ), + 'cdata' => array( + 'blacklisted_cdata_regex' => array( + 'error_message' => 'contents', + 'regex' => '.', + ), + ), + 'tag_spec' => array( + 'mandatory_alternatives' => 'amphtml engine v0.js script', + 'mandatory_parent' => 'head', + 'spec_name' => 'amphtml engine v0.js lts script', + 'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml#required-markup', + 'unique' => true, + ), + ), array( 'attr_spec_list' => array( 'nonce' => array(), @@ -11610,6 +12073,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11635,6 +12103,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11660,6 +12133,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11689,6 +12167,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11717,6 +12200,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11745,6 +12233,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11802,6 +12295,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11827,6 +12325,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11852,6 +12355,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11878,6 +12386,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11904,6 +12417,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11929,6 +12447,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -11980,6 +12503,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12005,6 +12533,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12055,6 +12588,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12080,6 +12618,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12105,6 +12648,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12130,6 +12678,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12155,6 +12708,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12205,6 +12763,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12230,6 +12793,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12255,6 +12823,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12308,6 +12881,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12333,6 +12911,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12358,6 +12941,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12383,6 +12971,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12408,6 +13001,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12433,6 +13031,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12459,6 +13062,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12484,6 +13092,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12535,6 +13148,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12560,6 +13178,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12585,6 +13208,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12610,6 +13238,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12635,6 +13268,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12660,6 +13298,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12685,6 +13328,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12710,6 +13358,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12761,6 +13414,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12786,6 +13444,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12811,6 +13474,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12836,6 +13504,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12861,6 +13534,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12886,6 +13564,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12911,6 +13594,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12936,6 +13624,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12961,6 +13654,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -12986,6 +13684,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13037,6 +13740,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13062,6 +13770,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13087,6 +13800,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13112,6 +13830,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13137,6 +13860,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13162,6 +13890,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13187,6 +13920,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13212,6 +13950,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13237,6 +13980,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13262,6 +14010,41 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), + 'nonce' => array(), + 'type' => array( + 'value_casei' => array( + 'text/javascript', + ), + ), + ), + 'tag_spec' => array( + 'extension_spec' => array( + 'name' => 'amp-inline-gallery', + 'requires_usage' => true, + 'version' => array( + '0.1', + ), + ), + ), + ), + array( + 'attr_spec_list' => array( + 'async' => array( + 'mandatory' => true, + 'value' => array( + '', + ), + ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13287,6 +14070,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13312,6 +14100,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13337,6 +14130,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13362,6 +14160,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13387,6 +14190,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13412,6 +14220,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13437,6 +14250,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13462,6 +14280,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13512,6 +14335,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13537,6 +14365,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13564,6 +14397,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13589,6 +14427,41 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), + 'nonce' => array(), + 'type' => array( + 'value_casei' => array( + 'text/javascript', + ), + ), + ), + 'tag_spec' => array( + 'extension_spec' => array( + 'name' => 'amp-mega-menu', + 'requires_usage' => true, + 'version' => array( + '0.1', + ), + ), + ), + ), + array( + 'attr_spec_list' => array( + 'async' => array( + 'mandatory' => true, + 'value' => array( + '', + ), + ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13614,6 +14487,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13639,6 +14517,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13664,6 +14547,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13684,6 +14572,9 @@ class AMP_Allowed_Tags_Generated { ), array( 'attr_spec_list' => array( + 'id' => array( + 'blacklisted_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)', + ), 'nonce' => array(), 'template' => array( 'dispatch_key' => 2, @@ -13728,6 +14619,41 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), + 'nonce' => array(), + 'type' => array( + 'value_casei' => array( + 'text/javascript', + ), + ), + ), + 'tag_spec' => array( + 'extension_spec' => array( + 'name' => 'amp-nested-menu', + 'requires_usage' => true, + 'version' => array( + '0.1', + ), + ), + ), + ), + array( + 'attr_spec_list' => array( + 'async' => array( + 'mandatory' => true, + 'value' => array( + '', + ), + ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13741,6 +14667,7 @@ class AMP_Allowed_Tags_Generated { 'requires_usage' => true, 'version' => array( '0.1', + '1.0', ), ), ), @@ -13760,7 +14687,7 @@ class AMP_Allowed_Tags_Generated { 'requires_extension' => array( 'amp-next-page', ), - 'spec_name' => 'amp-next-page extension .json configuration', + 'spec_name' => 'AMP-NEXT-PAGE > SCRIPT[type=application/json]', 'spec_url' => 'https://amp.dev/documentation/components/amp-next-page', ), ), @@ -13772,6 +14699,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13797,6 +14729,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13822,6 +14759,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13847,6 +14789,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13872,6 +14819,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13897,6 +14849,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13922,6 +14879,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13947,6 +14909,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13972,6 +14939,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -13997,6 +14969,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14022,6 +14999,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14047,6 +15029,41 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), + 'nonce' => array(), + 'type' => array( + 'value_casei' => array( + 'text/javascript', + ), + ), + ), + 'tag_spec' => array( + 'extension_spec' => array( + 'name' => 'amp-redbull-player', + 'requires_usage' => true, + 'version' => array( + '0.1', + ), + ), + ), + ), + array( + 'attr_spec_list' => array( + 'async' => array( + 'mandatory' => true, + 'value' => array( + '', + ), + ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14072,6 +15089,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14097,6 +15119,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14159,6 +15186,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14184,6 +15216,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14209,6 +15246,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14234,6 +15276,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14259,6 +15306,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14284,6 +15336,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14309,6 +15366,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14334,6 +15396,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14360,6 +15427,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14411,6 +15483,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14507,6 +15584,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14564,6 +15646,11 @@ class AMP_Allowed_Tags_Generated { '', ), ), + 'crossorigin' => array( + 'value' => array( + 'anonymous', + ), + ), 'nonce' => array(), 'type' => array( 'value_casei' => array( @@ -14586,28 +15673,56 @@ class AMP_Allowed_Tags_Generated { ), array( 'attr_spec_list' => array( - 'async' => array( + 'cryptokeys' => array( + 'dispatch_key' => 2, 'mandatory' => true, 'value' => array( '', ), ), - 'nonce' => array(), + 'sha-256-hash' => array( + 'mandatory' => true, + ), 'type' => array( + 'mandatory' => true, 'value_casei' => array( - 'text/javascript', + 'application/json', ), ), ), 'tag_spec' => array( - 'extension_spec' => array( - 'name' => 'amp-timeago', - 'requires_usage' => true, - 'version' => array( - '0.1', + 'mandatory_parent' => 'head', + 'requires_extension' => array( + 'amp-subscriptions', + ), + 'spec_name' => 'cryptokeys .json script', + 'unique' => true, + ), + ), + array( + 'attr_spec_list' => array( + 'ciphertext' => array( + 'dispatch_key' => 1, + 'mandatory' => true, + ), + 'type' => array( + 'mandatory' => true, + 'value_casei' => array( + 'application/octet-stream', ), ), ), + 'cdata' => array( + 'blacklisted_cdata_regex' => array( + 'error_message' => 'html comments', + 'regex' => ' + + + + + + + + + + + + + + + + + ', + null, + [ 'amp-base-carousel', 'amp-inline-gallery' ], + ], + + 'amp-mega-menu' => [ + ' + + + + ', + null, + [ 'amp-mega-menu' ], + ], + + 'amp-mega-menu-with-template' => [ + ' + + + + + + ', + null, + [ 'amp-mega-menu', 'amp-list', 'amp-mustache' ], + ], + + 'amp-mega-menu-disallowed-descendants' => [ + ' + + + + ', + ' + + + + ', + [ 'amp-mega-menu' ], + [ AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_DESCENDANT_TAG ], + ], + + 'amp-mega-menu-invalid-child' => [ + ' + +
Not allowed
+
+ ', + '', + [], + [ AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_CHILD_TAG ], + ], + + 'amp-nested-menu' => [ + ' + + + + + + + ', + null, + [ 'amp-sidebar' ], + ], + + 'amp-nested-menu-with-amp-list' => [ + ' + + + + + + + ', + null, + [ 'amp-sidebar', 'amp-list', 'amp-mustache' ], + ], + + 'amp-redbull-player' => [ + ' + + ', + null, + [ 'amp-redbull-player' ], + ], ]; } @@ -2513,6 +2914,35 @@ public function get_html_data() { [], [ AMP_Tag_And_Attribute_Sanitizer::MANDATORY_CDATA_MISSING_OR_INCORRECT ], ], + 'amp_runtime' => [ + '', + null, + [], + ], + 'amp_runtime_lts' => [ + '', + null, + [], + ], + 'amp-subscriptions' => [ + // @todo The but it is not yet supported. Support depends on todo in \AMP_Tag_And_Attribute_Sanitizer::has_parent(). + ' + + + + + + +
+ ... +
+ + + + ', + null, + [ 'amp-subscriptions' ], + ], ]; $bad_dev_mode_document = sprintf(