diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php index 105c678dfc..51e7a9dcbf 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php @@ -469,7 +469,6 @@ public function register_shortcodes() { add_shortcode( Shortcodes\Release_Confirmation::SHORTCODE, array( __NAMESPACE__ . '\Shortcodes\Release_Confirmation', 'display' ) ); add_action( 'template_redirect', array( __NAMESPACE__ . '\Shortcodes\Release_Confirmation', 'template_redirect' ) ); - add_filter( 'wp_resource_hints', array( __NAMESPACE__ . '\Shortcodes\Screenshots', 'add_resource_hints' ), 10, 2 ); } /** diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/js/screenshots.js b/wordpress.org/public_html/wp-content/plugins/plugin-directory/js/screenshots.js index 231d6bc6df..ae79dcee3b 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/js/screenshots.js +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/js/screenshots.js @@ -77,9 +77,9 @@ /* * Some screenshots end up "loaded" by the browser but with zero - * natural dimensions — typically Photon returning an empty 200, - * or a partial / pending response that the network stack never - * settles. The load / error events don't always fire for those, + * natural dimensions, usually after a zero-byte or partial response + * that the network stack never settles. The load / error events + * don't always fire for those, * so re-sweep after a short delay and hide anything that's still * degenerate. The `markBroken` guard against `!complete` keeps * lazy figures past the fold safe from this sweep. diff --git a/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-screenshots.php b/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-screenshots.php index 75fbf13d73..fc4038465b 100644 --- a/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-screenshots.php +++ b/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-screenshots.php @@ -180,34 +180,6 @@ public static function strip_layout_classes( $content ) { return $processor->get_updated_html(); } - /** - * Adds preconnect / dns-prefetch hints to the Photon CDN host on - * single-plugin pages so the browser can warm up the TLS handshake - * while the page HTML is still streaming. Saves ~50–150 ms on the - * first thumbnail paint for cold visitors. Hooked from - * `class-plugin-directory.php` via the `wp_resource_hints` filter. - * - * @param array $urls Resource hint URLs already queued for $relation_type. - * @param string $relation_type One of preconnect / dns-prefetch / prerender / prefetch. - * @return array - */ - public static function add_resource_hints( $urls, $relation_type ) { - if ( ! is_singular( 'plugin' ) ) { - return $urls; - } - - if ( 'preconnect' === $relation_type ) { - $urls[] = array( - 'href' => 'https://i0.wp.com', - 'crossorigin' => 'anonymous', - ); - } elseif ( 'dns-prefetch' === $relation_type ) { - $urls[] = 'https://i0.wp.com'; - } - - return $urls; - } - /** * Enqueues the shortcode's own CSS and toggle script. Assets live * under the plugin's `css/` and `js/` directories alongside the @@ -363,14 +335,12 @@ protected static function build_image_block( $screenshot, $id, $above_fold = fal ) ); - $srcset = self::photon_srcset( $src ); - $class = 'wp-block-image size-large'; + $class = 'wp-block-image size-large'; // Record the full-resolution source and intrinsic dimensions for the - // lightbox-state repair in fix_lightbox_metadata(). The grid thumbnail - // loads a Photon-shrunk srcset candidate, so core (which has no real - // attachment to query) would otherwise enlarge that small image; this - // hands the lightbox the lossless original at its true size. + // lightbox-state repair in fix_lightbox_metadata(). Screenshot assets + // have no real attachment for core to query, so this hands the + // lightbox the original `ps.w.org` image at its true size. self::$lightbox_meta[ (int) $id ] = array( 'url' => $src, 'width' => ( is_array( $dimensions ) && ! empty( $dimensions[0] ) ) ? (int) $dimensions[0] : 'none', @@ -411,11 +381,10 @@ protected static function build_image_block( $screenshot, $id, $above_fold = fal $src ); $figure .= sprintf( - '%2$s', + '%2$s', $src, esc_attr( $alt ), $id, - $srcset, $dim_attrs, esc_attr( $priority ) ); @@ -449,11 +418,9 @@ protected static function build_image_block( $screenshot, $id, $above_fold = fal * * The empty `uploadedSrc` leaves the lightbox with no full-resolution * image to enlarge, and the `'none'` dimensions make core's view - * script fall back to the *thumbnail's* natural size — which on - * production is a Photon-shrunk srcset candidate (≤900px, often the - * 300px tile). The enlarged view therefore renders tiny. On - * environments without Photon the thumbnail is the full-resolution - * original, which is why the bug is invisible on local / staging. + * script fall back to the thumbnail's natural size. The rendered + * thumbnail may be constrained by layout, but the enlarged view should + * always use the original screenshot and its recorded dimensions. * * Core keys its lightbox metadata by a per-render `uniqid()` (exposed * on the figure's `data-wp-context`), not by the attachment id, so the @@ -461,9 +428,8 @@ protected static function build_image_block( $screenshot, $id, $above_fold = fal * rendered markup and re-set the affected fields. `wp_interactivity_state()` * merges with `array_replace_recursive()` (later call wins), and this * filter runs at priority 20 — after core's priority-15 pass — so the - * corrected values override the broken ones. `lightboxSrcset` is - * cleared so the enlarged image loads the lossless original rather than - * a capped Photon candidate. + * corrected values override the broken ones. `lightboxSrcset` is cleared + * so the enlarged image loads the original screenshot URL. * * @param string $block_content Rendered Image block markup. * @param array $parsed_block Parsed block, including `attrs['id']`. @@ -554,54 +520,6 @@ protected static function wrap_with_show_all_button( $rendered_gallery, $count ) . ''; } - /** - * Builds a Photon-powered `srcset` (and matching `sizes`) attribute string - * for a `ps.w.org` screenshot URL. Returns an empty string when the source - * URL is not on `ps.w.org`, so the original `src` is used unchanged. - * - * Plugin authors upload screenshots at full resolution but we render them - * inside a 3-column grid, so the browser otherwise downloads the full - * asset (often 300–800 KB) only to scale it down to a ~250 px tile. - * Routing the URL through `i0.wp.com` (Photon) returns a re-encoded, - * width-bound copy at ~10× smaller payload — see - * https://developer.wordpress.com/docs/photon/ for the resize/optim - * options. The grid thumbnail therefore loads a small Photon candidate; - * the lightbox is pointed back at the full-resolution `ps.w.org` original - * separately by {@see self::fix_lightbox_metadata()} so users still get - * the lossless image when they enlarge a screenshot. - * - * @param string $src Original asset URL. - * @return string Attribute fragment ready to interpolate into ``, - * including the leading space, or empty string. - */ - protected static function photon_srcset( $src ) { - if ( ! preg_match( '#^https?://ps\.w\.org/#', $src ) ) { - return ''; - } - - // Photon (i0.wp.com) only runs on production and staging. In local - // or other environments the proxy may not be reachable, which would - // leave the gallery silently empty until the cold cache warmed up. - // Fall back to the unoptimised `ps.w.org` URL there. - $env = function_exists( 'wp_get_environment_type' ) ? wp_get_environment_type() : 'production'; - if ( 'production' !== $env && 'staging' !== $env ) { - return ''; - } - - $photon_base = preg_replace( '#^https?://#', 'https://i0.wp.com/', $src ); - $widths = array( 300, 600, 900 ); - $srcset = array(); - - foreach ( $widths as $width ) { - $srcset[] = add_query_arg( 'w', $width, $photon_base ) . ' ' . $width . 'w'; - } - - return sprintf( - ' srcset="%1$s" sizes="(max-width: 599px) 50vw, 33vw"', - esc_attr( implode( ', ', $srcset ) ) - ); - } - /** * Whether the gallery should swap from brick masonry to row-aligned grid. *