From 3380451bc89ca732379a8dbe0b622ebfab27c27a Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Wed, 4 Sep 2019 16:49:42 -0700 Subject: [PATCH 01/22] Revert "Suppress admin bar from being shown during validation requests" This reverts commit d83bb25761f5990039ae669438731e5ced59c2df from #2500. --- includes/validation/class-amp-validation-manager.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/includes/validation/class-amp-validation-manager.php b/includes/validation/class-amp-validation-manager.php index 844b3c97972..822f6f83867 100644 --- a/includes/validation/class-amp-validation-manager.php +++ b/includes/validation/class-amp-validation-manager.php @@ -227,15 +227,6 @@ function( $query_vars ) { } if ( self::$should_locate_sources ) { - /* - * Always suppress the admin bar from being shown when performing a validation request. This ensures that - * user-initiated validation requests perform the same as validation requests initiated by the WP-CLI - * command `wp amp validate-site`, which does so as an unauthenticated user. Unauthenticated users should - * not be shown the admin bar, and normal site visitors who read AMP content (such as via an AMP Cache) are - * not authenticated, so it doesn't make sense to include the admin bar when doing validation. - */ - add_filter( 'show_admin_bar', '__return_false', PHP_INT_MAX ); - self::add_validation_error_sourcing(); } } From e3d4f574b1651c800a31491ce7e9c8c86f7b63c9 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Wed, 4 Sep 2019 17:39:52 -0700 Subject: [PATCH 02/22] Skip sanitizing admin bar (and removing it) in favor of ignoring (in dev mode) * Eliminate need for keeping forked version of admin-bar.css in plugin. * Automatically add data-ampdevmode attributes to scripts and styles that depend on the admin bar, excluding them from being sanitized out of the document. * Skip processing stylesheets that have data-ampdevmode attributes. --- .stylelintignore | 1 - assets/css/src/admin-bar.css | 1181 ----------------- includes/class-amp-theme-support.php | 135 +- .../sanitizers/class-amp-base-sanitizer.php | 2 + .../sanitizers/class-amp-style-sanitizer.php | 114 +- tests/php/test-amp-style-sanitizer.php | 10 +- tests/php/test-class-amp-theme-support.php | 9 +- 7 files changed, 127 insertions(+), 1325 deletions(-) delete mode 100644 assets/css/src/admin-bar.css diff --git a/.stylelintignore b/.stylelintignore index cf59a35757b..f9fee8e99b0 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,5 +1,4 @@ /assets/css/*.css -/assets/css/src/admin-bar.css /bin /build /tests diff --git a/assets/css/src/admin-bar.css b/assets/css/src/admin-bar.css deleted file mode 100644 index 383b7e8c207..00000000000 --- a/assets/css/src/admin-bar.css +++ /dev/null @@ -1,1181 +0,0 @@ -/* -This is forked from core's admin-bar.css from WP 5.3-alpha at 160fc055da156248277513dd5256fbcc66faa5a7. - -https://github.com/WordPress/wordpress-develop/blob/160fc055da156248277513dd5256fbcc66faa5a7/src/wp-includes/css/admin-bar.css - -- References to .hover have been replaced with :focus-within (which is not supported in IE11). -- Universal selector properties have been removed which interferes with AMP shadow elements. -*/ - -#wpadminbar * { - height: auto; - width: auto; - margin: 0; - padding: 0; - /* Removed because interferes with amp-img>img: position: static; */ - text-shadow: none; - text-transform: none; - letter-spacing: normal; - font-size: 13px; - font-weight: 400; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - line-height: 2.46153846; - border-radius: 0; - box-sizing: content-box; - transition: none; - -webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */ - -moz-osx-font-smoothing: auto; /* Prevent Firefox from inheriting from themes that use other values */ -} - -.rtl #wpadminbar * { - font-family: Tahoma, sans-serif; -} - -html:lang(he-il) .rtl #wpadminbar * { - font-family: Arial, sans-serif; -} - -#wpadminbar .ab-empty-item { - cursor: default; -} - -#wpadminbar .ab-empty-item, -#wpadminbar a.ab-item, -#wpadminbar > #wp-toolbar span.ab-label, -#wpadminbar > #wp-toolbar span.noticon { - color: #eee; -} - -#wpadminbar #wp-admin-bar-site-name a.ab-item, -#wpadminbar #wp-admin-bar-my-sites a.ab-item { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -#wpadminbar ul li:before, -#wpadminbar ul li:after { - content: normal; -} - -#wpadminbar a, -#wpadminbar a:hover, -#wpadminbar a img, -#wpadminbar a img:hover { - border: none; - text-decoration: none; - background: none; -} - -#wpadminbar a:focus, -#wpadminbar a:active, -#wpadminbar input[type="text"], -#wpadminbar input[type="password"], -#wpadminbar input[type="number"], -#wpadminbar input[type="search"], -#wpadminbar input[type="email"], -#wpadminbar input[type="url"], -#wpadminbar select, -#wpadminbar textarea, -#wpadminbar div { - box-shadow: none; -} - -#wpadminbar a:focus { - /* Inherits transparent outline only visible in Windows High Contrast mode */ - outline-offset: -1px; -} - -#wpadminbar { - direction: ltr; - color: #ccc; - font-size: 13px; - font-weight: 400; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - line-height: 2.46153846; - height: 32px; - position: fixed; - top: 0; - left: 0; - width: 100%; - min-width: 600px; /* match the min-width of the body in wp-admin/css/common.css */ - z-index: 99999; - background: #23282d; -} - -#wpadminbar .ab-sub-wrapper, -#wpadminbar ul, -#wpadminbar ul li { - background: none; - clear: none; - list-style: none; - margin: 0; - padding: 0; - position: relative; - text-indent: 0; - z-index: 99999; -} - -#wpadminbar ul#wp-admin-bar-root-default>li { - margin-right: 0; -} - -#wpadminbar .quicklinks ul { - text-align: left; -} - -#wpadminbar li { - float: left; -} - -#wpadminbar .ab-empty-item { - outline: none; -} - -#wpadminbar .quicklinks .ab-top-secondary > li { - float: right; -} - -#wpadminbar .quicklinks a, -#wpadminbar .quicklinks .ab-empty-item, -#wpadminbar .shortlink-input { - height: 32px; - display: block; - padding: 0 10px; - margin: 0; -} - -#wpadminbar .quicklinks > ul > li > a { - padding: 0 8px 0 7px; -} - -#wpadminbar .menupop .ab-sub-wrapper, -#wpadminbar .shortlink-input { - margin: 0; - padding: 0; - box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - background: #32373c; - display: none; - position: absolute; - float: none; -} - -#wpadminbar.ie7 .menupop .ab-sub-wrapper, -#wpadminbar.ie7 .shortlink-input { - top: 32px; - left: 0; -} - -#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { - min-width: 100%; -} - -#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper { - right: 0; - left: auto; -} - -#wpadminbar .ab-submenu { - padding: 6px 0; -} - -#wpadminbar .selected .shortlink-input { - display: block; -} - -#wpadminbar .quicklinks .menupop ul li { - float: none; -} - -#wpadminbar .quicklinks .menupop ul li a strong { - font-weight: 600; -} - -#wpadminbar .quicklinks .menupop ul li .ab-item, -#wpadminbar .quicklinks .menupop ul li a strong, -#wpadminbar .quicklinks .menupop:focus-within ul li .ab-item, -#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item, -#wpadminbar .shortlink-input { - line-height: 2; - height: 26px; - white-space: nowrap; - min-width: 140px; -} - -#wpadminbar .shortlink-input { - width: 200px; -} - -#wpadminbar.nojs li:hover > .ab-sub-wrapper, -#wpadminbar li:focus-within > .ab-sub-wrapper { - display: block; -} - -#wpadminbar .menupop li:hover > .ab-sub-wrapper, -#wpadminbar .menupop li:focus-within > .ab-sub-wrapper { - margin-left: 100%; - margin-top: -32px; -} - -#wpadminbar .ab-top-secondary .menupop li:hover > .ab-sub-wrapper, -#wpadminbar .ab-top-secondary .menupop li:focus-within > .ab-sub-wrapper { - margin-left: 0; - left: inherit; - right: 100%; -} - -#wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus, -#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, -#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item, -#wpadminbar .ab-top-menu > li:focus-within > .ab-item { - background: #32373c; - color: #00b9eb; -} -#wpadminbar .ab-top-menu > li:focus-within > .ab-item { - background: #32373c; - color: #00b9eb; -} - -#wpadminbar:not(.mobile) > #wp-toolbar li:hover span.ab-label, -#wpadminbar > #wp-toolbar li:focus-within span.ab-label, -#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label { - color: #00b9eb; -} - -#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, -#wpadminbar .ab-icon, -#wpadminbar .ab-item:before, -.wp-admin-bar-arrow { - position: relative; - float: left; - font: normal 20px/1 dashicons; - speak: none; - padding: 4px 0; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - background-image: none !important; - margin-right: 6px; -} - -#wpadminbar .ab-icon:before, -#wpadminbar .ab-item:before, -#wpadminbar #adminbarsearch:before { - color: #a0a5aa; - color: rgba(240, 245, 250, 0.6); -} - -#wpadminbar .ab-icon:before, -#wpadminbar .ab-item:before, -#wpadminbar #adminbarsearch:before { - position: relative; - transition: all .1s ease-in-out; -} - -#wpadminbar .ab-label { - display: inline-block; - height: 32px; -} - -#wpadminbar .ab-submenu .ab-item { - color: #b4b9be; - color: rgba(240, 245, 250, 0.7); -} - -#wpadminbar .quicklinks .menupop ul li a, -#wpadminbar .quicklinks .menupop ul li a strong, -#wpadminbar .quicklinks .menupop:focus-within ul li a, -#wpadminbar.nojs .quicklinks .menupop:hover ul li a { - color: #b4b9be; - color: rgba(240, 245, 250, 0.7); -} - -#wpadminbar .quicklinks .menupop ul li a:hover, -#wpadminbar .quicklinks .menupop ul li a:focus, -#wpadminbar .quicklinks .menupop ul li a:hover strong, -#wpadminbar .quicklinks .menupop ul li a:focus strong, -#wpadminbar .quicklinks .ab-sub-wrapper .menupop:focus-within > a, -#wpadminbar .quicklinks .menupop:focus-within ul li a:hover, -#wpadminbar .quicklinks .menupop:focus-within ul li a:focus, -#wpadminbar .quicklinks .menupop:focus-within ul li div[tabindex]:hover, -#wpadminbar .quicklinks .menupop:focus-within ul li div[tabindex]:focus, -#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, -#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, -#wpadminbar li:hover .ab-icon:before, -#wpadminbar li:hover .ab-item:before, -#wpadminbar li a:focus .ab-icon:before, -#wpadminbar li .ab-item:focus:before, -#wpadminbar li .ab-item:focus .ab-icon:before, -#wpadminbar li:focus-within .ab-icon:before, -#wpadminbar li:focus-within .ab-item:before, -#wpadminbar li:hover #adminbarsearch:before, -#wpadminbar li #adminbarsearch.adminbar-focused:before { - color: #00b9eb; -} - -#wpadminbar.mobile .quicklinks .ab-icon:before, -#wpadminbar.mobile .quicklinks .ab-item:before { - color: #b4b9be; -} - -#wpadminbar.mobile .quicklinks :focus-within .ab-icon:before, -#wpadminbar.mobile .quicklinks :focus-within .ab-item:before { - color: #00b9eb; -} - -#wpadminbar .menupop .menupop > .ab-item .wp-admin-bar-arrow:before, -#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { - position: absolute; - font: normal 17px/1 dashicons; - speak: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -#wpadminbar .menupop .menupop > .ab-item { - display: block; - padding-right: 2em; -} - -#wpadminbar .menupop .menupop > .ab-item .wp-admin-bar-arrow:before { - top: 1px; - right: 10px; - padding: 4px 0; - content: "\f139"; - color: inherit; -} - -#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item { - padding-left: 2em; - padding-right: 1em; -} - -#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item .wp-admin-bar-arrow:before { - top: 1px; - left: 6px; - content: "\f141"; -} - -#wpadminbar .quicklinks .menupop ul.ab-sub-secondary { - display: block; - position: relative; - right: auto; - margin: 0; - box-shadow: none; -} - -#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, -#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { - background: #464b50; -} - -#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover, -#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a { - color: #00b9eb; -} - -#wpadminbar .quicklinks a span#ab-updates { - background: #eee; - color: #32373c; - display: inline; - padding: 2px 5px; - font-size: 10px; - font-weight: 600; - border-radius: 10px; -} - -#wpadminbar .quicklinks a:hover span#ab-updates { - background: #fff; - color: #000; -} - -#wpadminbar .ab-top-secondary { - float: right; -} - -#wpadminbar ul li:last-child, -#wpadminbar ul li:last-child .ab-item { - box-shadow: none; -} - -/** - * Recovery Mode - */ -#wpadminbar #wp-admin-bar-recovery-mode { - color: #fff; - background-color: #ca4a1f; -} - -#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode:focus-within >.ab-item, -#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus, -#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item, -#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus { - color: #fff; - background-color: #c0461e; -} - -/** - * My Account - */ -#wp-admin-bar-my-account > ul { - min-width: 198px; -} - -#wp-admin-bar-my-account > .ab-item:before { - content: "\f110"; - top: 2px; - float: right; - margin-left: 6px; - margin-right: 0; -} - -#wp-admin-bar-my-account.with-avatar > .ab-item:before { - display: none; - content: none; -} - -#wp-admin-bar-my-account.with-avatar > ul { - min-width: 270px; -} - -#wpadminbar.ie8 #wp-admin-bar-my-account.with-avatar .ab-item { - white-space: nowrap; -} - -#wpadminbar #wp-admin-bar-user-actions > li { - margin-left: 16px; - margin-right: 16px; -} - -#wpadminbar #wp-admin-bar-user-actions.ab-submenu { - padding: 6px 0 12px; -} - -#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { - margin-left: 88px; -} - -#wpadminbar #wp-admin-bar-user-info { - margin-top: 6px; - margin-bottom: 15px; - height: auto; - background: none; -} - -#wp-admin-bar-user-info .avatar { - position: absolute; - left: -72px; - top: 4px; - width: 64px; - height: 64px; -} - -#wpadminbar #wp-admin-bar-user-info a { - background: none; - height: auto; -} - -#wpadminbar #wp-admin-bar-user-info span { - background: none; - padding: 0; - height: 18px; -} - -#wpadminbar #wp-admin-bar-user-info .display-name, -#wpadminbar #wp-admin-bar-user-info .username { - display: block; -} - -#wpadminbar #wp-admin-bar-user-info .username { - color: #a0a5aa; - font-size: 11px; -} - -#wpadminbar #wp-admin-bar-my-account.with-avatar > .ab-empty-item img, -#wpadminbar #wp-admin-bar-my-account.with-avatar > a img { - width: 16px; /* Was auto. */ - height: 16px; - padding: 0; - border: 1px solid #82878c; - background: #eee; - line-height: 1.84615384; - vertical-align: middle; - margin: -4px 0 0 6px; - float: none; - display: inline-block; /* Was inline. */ -} - -#wpadminbar.ie8 #wp-admin-bar-my-account.with-avatar > .ab-empty-item img, -#wpadminbar.ie8 #wp-admin-bar-my-account.with-avatar > a img { - width: 16px; /* Was auto. */ -} - -/** - * WP Logo - */ -#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { - width: 15px; - height: 20px; - margin-right: 0; - padding: 6px 0 5px; -} - -#wpadminbar #wp-admin-bar-wp-logo > .ab-item { - padding: 0 7px; -} - -#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { - content: "\f120"; - top: 2px; -} - -/* - * My Sites & Site Title - */ -#wpadminbar .quicklinks li .blavatar { - float: left; - font: normal 16px/1 dashicons !important; - speak: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - color: #eee; -} - -#wpadminbar .quicklinks li a:hover .blavatar, -#wpadminbar .quicklinks li a:focus .blavatar, -#wpadminbar .quicklinks .ab-sub-wrapper .menupop:focus-within > a .blavatar { - color: #00b9eb; -} - -#wpadminbar .quicklinks li .blavatar:before { - content: "\f120"; - height: 16px; - width: 16px; - display: inline-block; - margin: 6px 8px 0 -2px; -} - -#wpadminbar #wp-admin-bar-appearance { - margin-top: -12px; -} - -#wpadminbar #wp-admin-bar-my-sites > .ab-item:before, -#wpadminbar #wp-admin-bar-site-name > .ab-item:before { - content: "\f541"; - top: 2px; -} - -#wpadminbar #wp-admin-bar-customize > .ab-item:before { - content: "\f540"; - top: 2px; -} - - -#wpadminbar #wp-admin-bar-edit > .ab-item:before { - content: "\f464"; - top: 2px; -} - -#wpadminbar #wp-admin-bar-site-name > .ab-item:before { - content: "\f226"; -} - -.wp-admin #wpadminbar #wp-admin-bar-site-name > .ab-item:before { - content: "\f102"; -} - - - -/** - * Comments - */ -#wpadminbar #wp-admin-bar-comments .ab-icon { - margin-right: 6px; -} - -#wpadminbar #wp-admin-bar-comments .ab-icon:before { - content: "\f101"; - top: 3px; -} - -#wpadminbar #wp-admin-bar-comments .count-0 { - opacity: .5; -} - -/** - * New Content - */ -#wpadminbar #wp-admin-bar-new-content .ab-icon:before { - content: "\f132"; - top: 4px; -} - -/** - * Updates - */ -#wpadminbar #wp-admin-bar-updates .ab-icon:before { - content: "\f463"; - top: 2px; -} - -/** - * Search - */ -#wpadminbar.ie8 #wp-admin-bar-search { - display: block; - min-width: 32px; -} -#wpadminbar #wp-admin-bar-search .ab-item { - padding: 0; - background: transparent; -} - -#wpadminbar #adminbarsearch { - position: relative; - height: 32px; - padding: 0 2px; - z-index: 1; -} - -#wpadminbar #adminbarsearch:before { - position: absolute; - top: 6px; - left: 5px; - z-index: 20; - font: normal 20px/1 dashicons !important; - content: "\f179"; - speak: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* The admin bar search field needs to reset many styles that might be inherited from the active Theme CSS. See ticket #40313. */ -#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { - display: inline-block; - float: none; - position: relative; - z-index: 30; - font-size: 13px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - line-height: 1.84615384; - text-indent: 0; - height: 24px; - width: 24px; - max-width: none; - padding: 0 3px 0 24px; - margin: 0; - color: #ccc; - background-color: rgba(255, 255, 255, 0); - border: none; - outline: none; - cursor: pointer; - box-shadow: none; - box-sizing: border-box; - transition-duration: 400ms; - transition-property: width, background; - transition-timing-function: ease; -} - -#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { - z-index: 10; - color: #000; - width: 200px; - background-color: rgba(255, 255, 255, 0.9); - cursor: text; - border: 0; -} - -#wpadminbar.ie7 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { - margin-top: 3px; - width: 120px; -} - -#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { - /* IE8 z-index bug with transparent / empty elements - fill in with an encoded transparent GIF */ - background: transparent 0 0 repeat scroll url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} - -/* IE8 doesn't redraw the pseudo elements unless you make a change to the content */ -#wpadminbar.ie8 #adminbarsearch.adminbar-focused:before { - content: "\f179 "; /* extra space */ -} - -#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { - background: #fff; - z-index: -1; -} - -#wpadminbar #adminbarsearch .adminbar-button { - display: none; -} - -/** - * Customize support classes - */ -.no-customize-support .hide-if-no-customize, -.customize-support .hide-if-customize, -.no-customize-support #wpadminbar .hide-if-no-customize, -.no-customize-support.wp-core-ui .hide-if-no-customize, -.no-customize-support .wp-core-ui .hide-if-no-customize, -.customize-support #wpadminbar .hide-if-customize, -.customize-support.wp-core-ui .hide-if-customize, -.customize-support .wp-core-ui .hide-if-customize { - display: none; -} - -/* Skip link */ -#wpadminbar .screen-reader-text, -#wpadminbar .screen-reader-text span { - border: 0; - clip: rect(1px, 1px, 1px, 1px); - -webkit-clip-path: inset(50%); - clip-path: inset(50%); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - word-wrap: normal !important; -} - -#wpadminbar .screen-reader-shortcut { - position: absolute; - top: -1000em; -} - -#wpadminbar .screen-reader-shortcut:focus { - left: 6px; - top: 7px; - height: auto; - width: auto; - display: block; - font-size: 14px; - font-weight: 600; - padding: 15px 23px 14px; - background: #f1f1f1; - color: #0073aa; - z-index: 100000; - line-height: normal; - text-decoration: none; - box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); -} - -/** - * IE 6-targeted rules - */ -* html #wpadminbar { - overflow: hidden; - position: absolute; -} - -* html #wpadminbar .quicklinks ul li a { - float: left; -} - -* html #wpadminbar .menupop a span { - background-image: none; -} - -/* No @font-face support */ -.no-font-face #wpadminbar ul.ab-top-menu > li > a.ab-item { - display: block; - width: 45px; - text-align: center; - overflow: hidden; - margin: 0 3px; -} - -.no-font-face #wpadminbar #wp-admin-bar-my-sites > .ab-item, -.no-font-face #wpadminbar #wp-admin-bar-site-name > .ab-item, -.no-font-face #wpadminbar #wp-admin-bar-edit > .ab-item { - text-indent: 0; -} - -.no-font-face #wpadminbar .ab-icon, -.no-font-face #wpadminbar .ab-icon:before, -.no-font-face #wpadminbar a.ab-item:before, -.no-font-face #wpadminbar #wp-admin-bar-wp-logo > .ab-item { - display: none !important; -} - -.no-font-face #wpadminbar ul.ab-top-menu > li > a > span.ab-label { - display: inline; -} - -.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon { - display: inline !important; -} - -.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before { - content: "Menu"; - font: 14px/45px sans-serif !important; - display: inline-block !important; - color: #fff; -} - -.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item { - color: #fff; -} -/* End no @font-face */ - -@media screen and (max-width: 782px) { - /* Toolbar Touchification*/ - html #wpadminbar { - height: 46px; - min-width: 240px; /* match the min-width of the body in wp-admin/css/common.css */ - } - - #wpadminbar * { - font-size: 14px; - font-weight: 400; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - line-height: 2.28571428; - } - - #wpadminbar .quicklinks > ul > li > a, - #wpadminbar .quicklinks .ab-empty-item { - padding: 0; - height: 46px; - line-height: 3.28571428; - width: auto; - } - - #wpadminbar .ab-icon { - font: 40px/1 dashicons !important; - margin: 0; - padding: 0; - width: 52px; - height: 46px; - text-align: center; - } - - #wpadminbar .ab-icon:before { - text-align: center; - } - - #wpadminbar .ab-submenu { - padding: 0; - } - - #wpadminbar #wp-admin-bar-site-name a.ab-item, - #wpadminbar #wp-admin-bar-my-sites a.ab-item, - #wpadminbar #wp-admin-bar-my-account a.ab-item { - text-overflow: clip; - } - - #wpadminbar .quicklinks .menupop ul li .ab-item, - #wpadminbar .quicklinks .menupop ul li a strong, - #wpadminbar .quicklinks .menupop:focus-within ul li .ab-item, - #wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item, - #wpadminbar .shortlink-input { - line-height: 1.6; - } - - #wpadminbar .ab-label { - display: none; - } - - #wpadminbar .menupop li:hover > .ab-sub-wrapper, - #wpadminbar .menupop li:focus-within > .ab-sub-wrapper { - margin-top: -46px; - } - - #wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item { - padding-right: 30px; - } - - #wpadminbar .menupop .menupop > .ab-item:before { - top: 10px; - right: 6px; - } - - #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item { - font-size: 16px; - padding: 8px 16px; - } - - #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty { - display: none; - } - - /* WP logo */ - #wpadminbar #wp-admin-bar-wp-logo > .ab-item { - padding: 0; - } - - #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { - padding: 0; - width: 52px; - height: 46px; - text-align: center; - vertical-align: top; - } - - #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { - font: 28px/1 dashicons !important; - top: -3px; - } - - #wpadminbar .ab-icon, - #wpadminbar .ab-item:before { - padding: 0; - } - - /* My Sites and "Site Title" menu */ - #wpadminbar #wp-admin-bar-my-sites > .ab-item, - #wpadminbar #wp-admin-bar-site-name > .ab-item, - #wpadminbar #wp-admin-bar-customize > .ab-item, - #wpadminbar #wp-admin-bar-edit > .ab-item, - #wpadminbar #wp-admin-bar-my-account > .ab-item { - text-indent: 100%; - white-space: nowrap; - overflow: hidden; - width: 52px; - padding: 0; - color: #a0a5aa; /* @todo not needed? this text is hidden */ - position: relative; - } - - #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, - #wpadminbar .ab-icon, - #wpadminbar .ab-item:before { - padding: 0; - margin-right: 0; - } - - #wpadminbar #wp-admin-bar-edit > .ab-item:before, - #wpadminbar #wp-admin-bar-my-sites > .ab-item:before, - #wpadminbar #wp-admin-bar-site-name > .ab-item:before, - #wpadminbar #wp-admin-bar-customize > .ab-item:before, - #wpadminbar #wp-admin-bar-my-account > .ab-item:before { - display: block; - text-indent: 0; - font: normal 32px/1 dashicons; - speak: none; - top: 7px; - width: 52px; - text-align: center; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - #wpadminbar #wp-admin-bar-appearance { - margin-top: 0; - } - - #wpadminbar .quicklinks li .blavatar:before { - display: none; - } - - /* Search */ - #wpadminbar #wp-admin-bar-search { - display: none; - } - - /* New Content */ - #wpadminbar #wp-admin-bar-new-content .ab-icon:before { - top: 0; - line-height: 1.33333333; - height: 46px !important; - text-align: center; - width: 52px; - display: block; - } - - /* Updates */ - #wpadminbar #wp-admin-bar-updates { - text-align: center; - } - - #wpadminbar #wp-admin-bar-updates .ab-icon:before { - top: 3px; - } - - /* Comments */ - #wpadminbar #wp-admin-bar-comments .ab-icon { - margin: 0; - } - - #wpadminbar #wp-admin-bar-comments .ab-icon:before { - display: block; - font-size: 34px; - height: 46px; - line-height: 1.38235294; - top: 0; - } - - /* My Account */ - #wpadminbar #wp-admin-bar-my-account > a { - position: relative; - white-space: nowrap; - text-indent: 150%; /* More than 100% indention is needed since this element has padding */ - width: 28px; - padding: 0 10px; - overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */ - } - - #wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { - position: absolute; - top: 13px; - right: 10px; - width: 26px; - height: 26px; - } - - #wpadminbar #wp-admin-bar-user-actions.ab-submenu { - padding: 0; - } - - #wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar { - display: none; - } - - #wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { - margin: 0; - } - - #wpadminbar #wp-admin-bar-user-info .display-name { - height: auto; - font-size: 16px; - line-height: 1.5; - color: #eee; - } - - #wpadminbar #wp-admin-bar-user-info a { - padding-top: 4px; - } - - #wpadminbar #wp-admin-bar-user-info .username { - line-height: 0.8 !important; - margin-bottom: -2px; - } - - /* Show only default top level items */ - #wp-toolbar > ul > li { - display: none; - } - - #wpadminbar li#wp-admin-bar-menu-toggle, - #wpadminbar li#wp-admin-bar-wp-logo, - #wpadminbar li#wp-admin-bar-my-sites, - #wpadminbar li#wp-admin-bar-updates, - #wpadminbar li#wp-admin-bar-site-name, - #wpadminbar li#wp-admin-bar-customize, - #wpadminbar li#wp-admin-bar-new-content, - #wpadminbar li#wp-admin-bar-edit, - #wpadminbar li#wp-admin-bar-comments, - #wpadminbar li#wp-admin-bar-my-account { - display: block; - } - - /* Allow dropdown list items to appear normally */ - #wpadminbar li:hover ul li, - #wpadminbar li:focus-within ul li, - #wpadminbar li:hover ul li:hover ul li { - display: list-item; - } - - /* Override default min-width so dropdown lists aren't stretched - to 100% viewport width at responsive sizes. */ - #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - } - - #wpadminbar ul#wp-admin-bar-root-default > li { - margin-right: 0; - } - - /* Experimental fix for touch toolbar dropdown positioning */ - #wpadminbar .ab-top-menu, - #wpadminbar .ab-top-secondary, - #wpadminbar #wp-admin-bar-wp-logo, - #wpadminbar #wp-admin-bar-my-sites, - #wpadminbar #wp-admin-bar-site-name, - #wpadminbar #wp-admin-bar-updates, - #wpadminbar #wp-admin-bar-comments, - #wpadminbar #wp-admin-bar-new-content, - #wpadminbar #wp-admin-bar-edit, - #wpadminbar #wp-admin-bar-my-account { - position: static; - } - - #wpadminbar #wp-admin-bar-my-account { - float: right; - } - - .network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account { - margin-right: 0; - } - - /* Realign arrows on taller responsive submenus */ - - #wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { - top: 10px; - left: 0; - } -} - -/* Smartphone */ -@media screen and (max-width: 600px) { - /* Removed: #wpadminbar { position: absolute; } */ - - #wp-responsive-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 400; - } - - #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { - width: 100%; - left: 0; - } - - #wpadminbar .menupop .menupop > .ab-item:before { - display: none; - } - - #wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper { - margin-left: 0; - } - - #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { - margin: 0; - width: 100%; - top: auto; - left: auto; - position: relative; - } - - #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item { - font-size: 16px; - padding: 6px 15px 19px 30px; - } - - #wpadminbar li:hover ul li ul li { - display: list-item; - } - - #wpadminbar li#wp-admin-bar-wp-logo, - #wpadminbar li#wp-admin-bar-updates { - display: none; - } - - /* Make submenus full-width at this size */ - - #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { - position: static; - box-shadow: none; - } -} - -/* Very narrow screens */ -@media screen and (max-width: 400px) { - #wpadminbar li#wp-admin-bar-comments { - display: none; - } -} diff --git a/includes/class-amp-theme-support.php b/includes/class-amp-theme-support.php index 799a6ec4354..98c074cfe55 100644 --- a/includes/class-amp-theme-support.php +++ b/includes/class-amp-theme-support.php @@ -1346,43 +1346,39 @@ public static function filter_cancel_comment_reply_link( $formatted_link, $link, * @since 1.0 */ public static function init_admin_bar() { + add_filter( 'script_loader_tag', [ __CLASS__, 'filter_admin_bar_style_loader_tag' ], 10, 2 ); + add_filter( 'style_loader_tag', [ __CLASS__, 'filter_admin_bar_script_loader_tag' ], 10, 2 ); - // Replace admin-bar.css in core with forked version which makes use of :focus-within among other change for AMP-compat. - wp_styles()->registered['admin-bar']->src = amp_get_asset_url( 'css/admin-bar.css' ); - wp_styles()->registered['admin-bar']->ver = AMP__VERSION; - - // Remove any possible '.min' to avoid RTL failing to generate the href for admin-bar-rtl.css, which does not currently have a minified version in the AMP plugin. - wp_styles()->registered['admin-bar']->extra['suffix'] = ''; - - // Remove script which is almost entirely made obsolete by :focus-inside in the forked admin-bar.css. - wp_dequeue_script( 'admin-bar' ); - - // Remove customize support script since not valid AMP. - add_action( - 'admin_bar_menu', - static function() { - remove_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' ); - }, - 41 - ); - - // Convert admin bar bump callback into an inline style for admin-bar. See \WP_Admin_Bar::initialize(). + // Inject the data-ampdevmode attribute into the admin bar bump style. See \WP_Admin_Bar::initialize(). if ( current_theme_supports( 'admin-bar' ) ) { $admin_bar_args = get_theme_support( 'admin-bar' ); $header_callback = $admin_bar_args[0]['callback']; } else { $header_callback = '_admin_bar_bump_cb'; } - remove_action( 'wp_head', $header_callback ); + $header_callback_priority = has_filter( 'wp_head', $header_callback ); if ( '__return_false' !== $header_callback ) { - ob_start(); - $header_callback(); - $style = ob_get_clean(); - $data = trim( preg_replace( '#]*>(.*)#is', '$1', $style ) ); // See wp_add_inline_style(). - wp_add_inline_style( 'admin-bar', $data ); + remove_action( 'wp_head', $header_callback, $header_callback_priority ); + add_action( + 'wp_head', + function () use ( $header_callback ) { + ob_start(); + $header_callback(); + $style = ob_get_clean(); + echo preg_replace( '/<[a-z0-9\-]+(?=\s|>)/i', '$0 data-ampdevmode ', $style ); // phpcs:ignore + }, + $header_callback_priority + ); } // Emulate customize support script in PHP, to assume Customizer. + add_action( + 'admin_bar_menu', + static function() { + remove_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' ); + }, + 41 + ); add_filter( 'body_class', static function( $body_classes ) { @@ -1397,6 +1393,57 @@ static function( $body_classes ) { ); } + /** + * Recursively determine if a given dependency depends on another. + * + * @param WP_Dependencies $dependencies Dependencies. + * @param string $current_handle Current handle. + * @param string $dependency_handle Dependency handle. + * @return bool Whether the current handle is a dependency of the dependency handle. + */ + protected static function has_dependency( WP_Dependencies $dependencies, $current_handle, $dependency_handle ) { + if ( $current_handle === $dependency_handle ) { + return true; + } + if ( ! isset( $dependencies->registered[ $current_handle ] ) ) { + return false; + } + foreach ( $dependencies->registered[ $current_handle ]->deps as $handle ) { + if ( self::has_dependency( $dependencies, $handle, $dependency_handle ) ) { + return true; + } + } + return false; + } + + /** + * Add data-ampdevmode attribute to any enqueued style that depends on the admin-bar. + * + * @param string $tag The link tag for the enqueued style. + * @param string $handle The style's registered handle. + * @return string Tag. + */ + public static function filter_admin_bar_style_loader_tag( $tag, $handle ) { + if ( self::has_dependency( wp_styles(), $handle, 'admin-bar' ) ) { + $tag = preg_replace( '/<[a-z0-9\-]+(?=\s|>)/i', '$0 data-ampdevmode ', $tag ); + } + return $tag; + } + + /** + * Add data-ampdevmode attribute to any enqueued script that depends on the admin-bar. + * + * @param string $tag The `