From c399654df66a7c3f91eb652aaaa0ad36adc7302d Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 17 Jan 2024 14:30:47 +0000 Subject: [PATCH 001/157] I18N: Prevent PHP warning in `WP_Textdomain_Registry`. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevents a warning upon cache invalidation after language pack updates if the arguments don’t have the expected format. Follow-up to [57287], [57290], [57298], [57299]. See #58919. git-svn-id: https://develop.svn.wordpress.org/trunk@57303 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-textdomain-registry.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-textdomain-registry.php b/src/wp-includes/class-wp-textdomain-registry.php index 8ff8ad0ae23de..54f5f15c4d069 100644 --- a/src/wp-includes/class-wp-textdomain-registry.php +++ b/src/wp-includes/class-wp-textdomain-registry.php @@ -228,7 +228,11 @@ public function get_language_files_from_path( $path ) { * @return void */ public function invalidate_mo_files_cache( $upgrader, $hook_extra ) { - if ( 'translation' !== $hook_extra['type'] || array() === $hook_extra['translations'] ) { + if ( + ! isset( $hook_extra['type'] ) || + 'translation' !== $hook_extra['type'] || + array() === $hook_extra['translations'] + ) { return; } From a64c96fe9f12308c209008a748d43d697c98782e Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 17 Jan 2024 17:58:09 +0000 Subject: [PATCH 002/157] Twenty Twenty-Four: Remove extra tab character inside the text domain. Follow-up to [57281]. Props sabernhardt. Fixes #60245. git-svn-id: https://develop.svn.wordpress.org/trunk@57304 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentytwentyfour/patterns/hidden-portfolio-hero.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-content/themes/twentytwentyfour/patterns/hidden-portfolio-hero.php b/src/wp-content/themes/twentytwentyfour/patterns/hidden-portfolio-hero.php index b0922d2ec27f4..1af3e7dbd17c1 100644 --- a/src/wp-content/themes/twentytwentyfour/patterns/hidden-portfolio-hero.php +++ b/src/wp-content/themes/twentytwentyfour/patterns/hidden-portfolio-hero.php @@ -13,7 +13,7 @@
-

Leia Acosta, a passionate photographer who finds inspiration in capturing the fleeting beauty of life.', 'twentytwentyfour ' ) ); ?>

+

Leia Acosta, a passionate photographer who finds inspiration in capturing the fleeting beauty of life.', 'twentytwentyfour' ) ); ?>

From 0b7165e60d4c0d8c22c1fd736ed8a5335a8f4439 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Wed, 17 Jan 2024 18:54:36 +0000 Subject: [PATCH 003/157] I18N: Fix duplicate `determine_locale()` tests added in [57286]. Props johnbillion. See #58696. git-svn-id: https://develop.svn.wordpress.org/trunk@57305 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/l10n/determineLocale.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/l10n/determineLocale.php b/tests/phpunit/tests/l10n/determineLocale.php index 3a675dc515098..ca8c0bafeccb7 100644 --- a/tests/phpunit/tests/l10n/determineLocale.php +++ b/tests/phpunit/tests/l10n/determineLocale.php @@ -300,11 +300,11 @@ public function test_language_param_installing_incorrect_string() { } public function test_wp_local_package_global_not_installing() { - $_REQUEST['language'] = 'de_DE'; + $GLOBALS['wp_local_package'] = 'de_DE'; $this->assertSame( 'en_US', determine_locale() ); } public function test_wp_local_package_global_installing() { - $_REQUEST['language'] = 'de_DE'; + $GLOBALS['wp_local_package'] = 'de_DE'; wp_installing( true ); $this->assertSame( 'de_DE', determine_locale() ); } From e707e37f23dcb6723ba3cea22d45f8f35ef95deb Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Wed, 17 Jan 2024 21:34:24 +0000 Subject: [PATCH 004/157] Embeds: Ensure the deprecated function `print_emoji_styles` isn't used Ensure that the proper new function wp_enqueue_emoji_styles is used in embeds. Follow-up to: [56194]. Props peterwilsoncc, bobbingwide, hellofromTonya. Fixes #59892. See: #58775. git-svn-id: https://develop.svn.wordpress.org/trunk@57306 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/default-filters.php | 1 + tests/phpunit/tests/oembed/template.php | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index 9cb447181aefd..7ebc3a1d3bfe1 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -687,6 +687,7 @@ add_action( 'embed_head', 'wp_robots' ); add_action( 'embed_head', 'rel_canonical' ); add_action( 'embed_head', 'locale_stylesheet', 30 ); +add_action( 'enqueue_embed_scripts', 'wp_enqueue_emoji_styles' ); add_action( 'embed_content_meta', 'print_embed_comments_button' ); add_action( 'embed_content_meta', 'print_embed_sharing_button' ); diff --git a/tests/phpunit/tests/oembed/template.php b/tests/phpunit/tests/oembed/template.php index 12092ff66999f..fca6aadd95d3a 100644 --- a/tests/phpunit/tests/oembed/template.php +++ b/tests/phpunit/tests/oembed/template.php @@ -10,8 +10,6 @@ public function set_up() { global $wp_scripts; $wp_scripts = null; - - remove_action( 'wp_print_styles', 'print_emoji_styles' ); } public function tear_down() { From d4a77a394c1bc8e73ae093744d74b509e8c45189 Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Thu, 18 Jan 2024 18:38:23 +0000 Subject: [PATCH 005/157] Build/Test Tools: Fix unstable query tests. Three `WP_Query` tests could randomly fail due to an undefined order because two test posts were using the exact same `post_date`. Props boonebgorges, flixos90. Fixes #60288. git-svn-id: https://develop.svn.wordpress.org/trunk@57308 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/query/results.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/phpunit/tests/query/results.php b/tests/phpunit/tests/query/results.php index 40d05a4d9f52d..412d02fe83be6 100644 --- a/tests/phpunit/tests/query/results.php +++ b/tests/phpunit/tests/query/results.php @@ -156,7 +156,7 @@ public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) { self::$post_ids[] = $factory->post->create( array( 'post_title' => 'no-comments', - 'post_date' => '2009-10-01 00:00:00', + 'post_date' => '2009-10-15 00:00:00', ) ); self::$post_ids[] = $factory->post->create( From 0c7b78e99da9094a72a050c32657d084526b37dd Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Jan 2024 22:12:01 +0000 Subject: [PATCH 006/157] Docs: Fix several typos in inline comments. Follow-up to [7747], [27419], [55155]. Props shailu25, sabernhardt. Fixes #60285. git-svn-id: https://develop.svn.wordpress.org/trunk@57309 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/Text/Diff.php | 2 +- src/wp-includes/class-wp-customize-widgets.php | 4 ++-- src/wp-includes/global-styles-and-settings.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/Text/Diff.php b/src/wp-includes/Text/Diff.php index 40dba1a4a37cf..eee4e4f8ea531 100644 --- a/src/wp-includes/Text/Diff.php +++ b/src/wp-includes/Text/Diff.php @@ -296,7 +296,7 @@ class Text_MappedDiff extends Text_Diff { /** * Computes a diff between sequences of strings. * - * This can be used to compute things like case-insensitve diffs, or diffs + * This can be used to compute things like case-insensitive diffs, or diffs * which ignore changes in white-space. * * @param array $from_lines An array of strings. diff --git a/src/wp-includes/class-wp-customize-widgets.php b/src/wp-includes/class-wp-customize-widgets.php index c8a00c741ff8a..8c822ea28f1f5 100644 --- a/src/wp-includes/class-wp-customize-widgets.php +++ b/src/wp-includes/class-wp-customize-widgets.php @@ -823,7 +823,7 @@ public function enqueue_scripts() { ); foreach ( $settings['registeredWidgets'] as &$registered_widget ) { - unset( $registered_widget['callback'] ); // May not be JSON-serializeable. + unset( $registered_widget['callback'] ); // May not be JSON-serializable. } $wp_scripts->add_data( @@ -1308,7 +1308,7 @@ public function export_preview_data() { ); foreach ( $settings['registeredWidgets'] as &$registered_widget ) { - unset( $registered_widget['callback'] ); // May not be JSON-serializeable. + unset( $registered_widget['callback'] ); // May not be JSON-serializable. } wp_print_inline_script_tag( sprintf( 'var _wpWidgetCustomizerPreviewSettings = %s;', wp_json_encode( $settings ) ) diff --git a/src/wp-includes/global-styles-and-settings.php b/src/wp-includes/global-styles-and-settings.php index acca33be1e844..6ccf02f5776b1 100644 --- a/src/wp-includes/global-styles-and-settings.php +++ b/src/wp-includes/global-styles-and-settings.php @@ -54,7 +54,7 @@ function wp_get_global_settings( $path = array(), $context = array() ) { * is always fresh from the potential modifications done via hooks * that can use dynamic data (modify the stylesheet depending on some option, * settings depending on user permissions, etc.). - * See some of the existing hooks to modify theme.json behaviour: + * See some of the existing hooks to modify theme.json behavior: * https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/ * * A different alternative considered was to invalidate the cache upon certain From c5fff20a8fb88b7dcf7af08f6395c663272d17c3 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Fri, 19 Jan 2024 00:42:48 +0000 Subject: [PATCH 007/157] Media: Redirect inactive attachement pages for logged-out users. Ensure logged out users are redirected to the media file when attachment pages are inactive. This removes the `read_post` capability check from the canonical redirects as anonymous users lack the permission. Follow-up to [56657], [56658], [56711]. Props afercia, aristath, chesio, joppuyo, jorbin, lakshmananphp, poena, sergeybiryukov. Fixes #59866. See #57913. git-svn-id: https://develop.svn.wordpress.org/trunk@57310 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/canonical.php | 17 +++++--- tests/phpunit/tests/canonical.php | 68 +++++++++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 9 deletions(-) diff --git a/src/wp-includes/canonical.php b/src/wp-includes/canonical.php index 0b94791fd9b45..2935a72662e32 100644 --- a/src/wp-includes/canonical.php +++ b/src/wp-includes/canonical.php @@ -550,13 +550,20 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $is_attachment_redirect = false; if ( is_attachment() && ! get_option( 'wp_attachment_pages_enabled' ) ) { - $attachment_id = get_query_var( 'attachment_id' ); + $attachment_id = get_query_var( 'attachment_id' ); + $attachment_post = get_post( $attachment_id ); + $attachment_parent_id = $attachment_post ? $attachment_post->post_parent : 0; - if ( current_user_can( 'read_post', $attachment_id ) ) { - $redirect_url = wp_get_attachment_url( $attachment_id ); - - $is_attachment_redirect = true; + /* + * If an attachment is attached to a post, it inherits the parent post's status. Fetch the + * parent post to check its status later. + */ + if ( $attachment_parent_id ) { + $redirect_obj = get_post( $attachment_parent_id ); } + $redirect_url = wp_get_attachment_url( $attachment_id ); + + $is_attachment_redirect = true; } $redirect['query'] = preg_replace( '#^\??&*?#', '', $redirect['query'] ); diff --git a/tests/phpunit/tests/canonical.php b/tests/phpunit/tests/canonical.php index 35bde13937dc3..cfc8bc42da3c0 100644 --- a/tests/phpunit/tests/canonical.php +++ b/tests/phpunit/tests/canonical.php @@ -407,23 +407,83 @@ public function test_feed_canonical_with_not_exists_query() { } /** + * Test canonical redirects for attachment pages when the option is disabled. + * * @ticket 57913 + * @ticket 59866 + * + * @dataProvider data_canonical_attachment_page_redirect_with_option_disabled */ - public function test_canonical_attachment_page_redirect_with_option_disabled() { + public function test_canonical_attachment_page_redirect_with_option_disabled( $expected, $user = null, $parent_post_status = '' ) { add_filter( 'pre_option_wp_attachment_pages_enabled', '__return_false' ); + if ( '' !== $parent_post_status ) { + $parent_post_id = self::factory()->post->create( + array( + 'post_status' => $parent_post_status, + ) + ); + } else { + $parent_post_id = 0; + } + $filename = DIR_TESTDATA . '/images/test-image.jpg'; $contents = file_get_contents( $filename ); $upload = wp_upload_bits( wp_basename( $filename ), null, $contents ); - $attachment_id = $this->_make_attachment( $upload ); + $attachment_id = $this->_make_attachment( $upload, $parent_post_id ); + $attachment_url = wp_get_attachment_url( $attachment_id ); $attachment_page = get_permalink( $attachment_id ); + // Set as anonymous/logged out user. + if ( null !== $user ) { + wp_set_current_user( $user ); + } + $this->go_to( $attachment_page ); - $url = redirect_canonical( $attachment_page, false ); - $expected = wp_get_attachment_url( $attachment_id ); + $url = redirect_canonical( $attachment_page, false ); + if ( is_string( $expected ) ) { + $expected = str_replace( '%%attachment_url%%', $attachment_url, $expected ); + } $this->assertSame( $expected, $url ); } + + /** + * Data provider for test_canonical_attachment_page_redirect_with_option_disabled(). + * + * @return array[] + */ + public function data_canonical_attachment_page_redirect_with_option_disabled() { + return array( + 'logged out user, no parent' => array( + '%%attachment_url%%', + 0, + ), + 'logged in user, no parent' => array( + '%%attachment_url%%', + ), + 'logged out user, private parent' => array( + null, + 0, + 'private', + ), + 'logged in user, private parent' => array( + '%%attachment_url%%', + null, + 'private', + ), + 'logged out user, public parent' => array( + '%%attachment_url%%', + 0, + 'publish', + ), + 'logged in user, public parent' => array( + '%%attachment_url%%', + null, + 'publish', + ), + ); + } } From 32876848301f26abeb59a93023eb64ac2cc7d1b1 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 19 Jan 2024 17:36:18 +0000 Subject: [PATCH 008/157] Twenty Twenty: Move the Inter font declaration to a separate file and enqueue the file. This allows the font to be dequeued by a child theme or plugin. Props poena, markhowellsmead, nielslange, Otto42, SGr33n, mukesh27, joemcgill. Fixes #48630. git-svn-id: https://develop.svn.wordpress.org/trunk@57311 602fd350-edb4-49c9-b593-d223f7449a82 --- .../assets/css/editor-style-block-rtl.css | 22 ------------------ .../assets/css/editor-style-block.css | 22 ------------------ .../assets/css/editor-style-classic-rtl.css | 22 ------------------ .../assets/css/editor-style-classic.css | 22 ------------------ .../twentytwenty/assets/css/font-inter.css | 23 +++++++++++++++++++ .../themes/twentytwenty/functions.php | 10 ++++++++ 6 files changed, 33 insertions(+), 88 deletions(-) create mode 100644 src/wp-content/themes/twentytwenty/assets/css/font-inter.css diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css index fcc5246aff2cf..b4dfac35c0a2a 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block-rtl.css @@ -44,28 +44,6 @@ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format("woff"); } -/* ---------------------------------------------- -Inter variable font. Usage: - -@supports (font-variation-settings: normal) { - html { font-family: "Inter var", sans-serif; } -} ----------------------------------------------- */ - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: normal; - src: url(../fonts/inter/Inter-upright-var.woff2) format("woff2"); -} - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: italic; - src: url(../fonts/inter/Inter-italic-var.woff2) format("woff2"); -} - /* Structure --------------------------------- */ .wp-block { diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css index ffe0b803343de..eb498e149047b 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-block.css @@ -44,28 +44,6 @@ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format("woff"); } -/* ---------------------------------------------- -Inter variable font. Usage: - -@supports (font-variation-settings: normal) { - html { font-family: "Inter var", sans-serif; } -} ----------------------------------------------- */ - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: normal; - src: url(../fonts/inter/Inter-upright-var.woff2) format("woff2"); -} - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: italic; - src: url(../fonts/inter/Inter-italic-var.woff2) format("woff2"); -} - /* Structure --------------------------------- */ .wp-block { diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic-rtl.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic-rtl.css index de2d9f87ddb76..a87a965c099d6 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic-rtl.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic-rtl.css @@ -18,28 +18,6 @@ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format("woff"); } -/* ---------------------------------------------- -Inter variable font. Usage: - -@supports (font-variation-settings: normal) { - html { font-family: "Inter var", sans-serif; } -} ----------------------------------------------- */ - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: normal; - src: url(../fonts/inter/Inter-upright-var.woff2) format("woff2"); -} - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: italic; - src: url(../fonts/inter/Inter-italic-var.woff2) format("woff2"); -} - /* Structure --------------------------------- */ body#tinymce.wp-editor.content { /* stylelint-disable-line no-duplicate-selectors */ diff --git a/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic.css b/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic.css index d471b3723382c..28d487d659b67 100644 --- a/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic.css +++ b/src/wp-content/themes/twentytwenty/assets/css/editor-style-classic.css @@ -18,28 +18,6 @@ src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAA0AAAAACDQAAALTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCahEICjx3CywAATYCJANUBCAFhiEHgWwbXQfILgpsY+rQRRARwyAs6uL7pxzYhxEE+32b3aeHmifR6tklkS9hiZA0ewkqGRJE+H7/+6378ASViK/PGeavqJyOzsceKi1s3BCiQsiOdn1r/RBgIJYEgCUhbm/8/8/h4saPssnTNkkiWUBrTRtjmQSajw3Ui3pZ3LYDPD+XG2C3JA/yKAS8/rU5eNfuGqRf4eNNgV4YAlIIgxglEkWe6FYpq10+wi3g+/nUgvgPFczNrz/RsTgVm/zfbPuHZlsuQECxuyqBcQwKFBjFgKO8AqP4bAN9tFJtnM9xPcbNjeXS/x1wY/xU52f5W/X1+9cnH4YwKIaoRRAkUkj/YlAAeF/624foiIDBgBmgQBeGAyhBljUPZUm/l2dTvmpqcBDUOHdbPZWd8JsBAsGr4w8/EDn82/bUPx4eh0YNrQTBuHO2FjQEAGBwK0DeI37DpQVqdERS4gZBhpeUhWCfLFz7J99aEBgsJCHvUGAdAPp4IADDCAPCEFMGpMZ9AQpTfQtQGhLbGVBZFV8BaqNyP68oTZgHNj3M8kBPfXTTC9t90UuzYhy9ciH0grVlOcqyCytisvbsERsEYztiznR0WCrmTksJwbSNK6fd1Rvr25I9oLvctUoEbNOmXJbqgYgPXEHJ82IUsrCnpkxh23F1rfZ2zcRnJYoXtauB3VTFkFXQg3uoZYD5qE0kdjDtoDoF1h2bulGmev5HbYhbrjtohQSRI4aNOkffIcT+d3v6atpaYh3JvPoQsztCcqvaBkppDSPcQ3bw3KaCBo1f5CJWTZEgW3LjLofYg51MaVezrx8xZitYbQ9KYeoRaqQdVLwSEfrKXLK1otCWOKNdR/YwYAfon5Yk8O2MJfSD10dPGA5PIJJQMkah0ugMJiv6x4Dm7LEa8xnrRGGGLAg4sAlbsA07sAt76DOsXKO3hIjtIlpnnFrt1qW4kh6NhS83P/6HB/fl1SMAAA==) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUQAA0AAAAACDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE9AAAABwAAAAchf5yU0dERUYAAATYAAAAHAAAAB4AJwAbT1MvMgAAAaAAAABJAAAAYJAcgU5jbWFwAAACIAAAAF4AAAFqUUxBZ2dhc3AAAATQAAAACAAAAAgAAAAQZ2x5ZgAAApAAAAAyAAAAPL0n8y9oZWFkAAABMAAAADAAAAA2Fi93Z2hoZWEAAAFgAAAAHQAAACQOSgWaaG10eAAAAewAAAAzAAAAVC7TAQBsb2NhAAACgAAAABAAAAAsAOQBAm1heHAAAAGAAAAAHQAAACAAWQALbmFtZQAAAsQAAAF6AAADIYvD/Adwb3N0AAAEQAAAAI4AAADsapk2o3jaY2BkYGAA4ov5mwzj+W2+MnCzXwCKMNzgCBSB0LfbQDQ7AxuI4mBgAlEAFKQIRHjaY2BkYGD3+NvCwMDBAALsDAyMDKhAFAA3+wH3AAAAeNpjYGRgYBBl4GBgYgABEMnIABJzAPMZAAVmAGUAAAB42mNgZlJhnMDAysDCKsKygYGBYRqEZtrDYMT4D8gHSmEHjgUFOQwODAqqf9g9/rYwMLB7MNUAhRlBcsxBrMlASoGBEQAj8QtyAAAAeNrjYGBkAAGmWQwMjO8gmBnIZ2NA0ExAzNjAAFYJVn0ASBsD6VAIDZb7AtELAgANIgb9AHjaY2BgYGaAYBkGRgYQSAHyGMF8FgYPIM3HwMHAxMDGoMCwQIFLQV8hXvXP//9AcRCfAcb///h/ygPW+w/vb7olBjUHCTCyMcAFGZmABBO6AogThgZgIUsXAEDcEzcAAHjaY2BgECMCyoEgACZaAed42mNgYmRgYGBnYGNgYAZSDJqMgorCgoqCjECRXwwNrCAKSP5mAAFGBiRgyAAAi/YFBQAAeNqtkc1OwkAUhU/5M25cEhcsZick0AwlBJq6MWwgJkAgYV/KAA2lJeUn+hY+gktXvpKv4dLTMqKycGHsTZNv7px7z50ZAFd4hYHjdw1Ls4EiHjVncIFnzVnc4F1zDkWjrzmPW+NNcwGlzIRKI3fJlUyrEjZQxb3mDH2fNGfRx4vmHKqG0JzHg6E0F9DOlFBGBxUI1GEzLNT4S0aLuTtsGAEUuYcQHkyg3KmIum1bNUvKlrjbbAIleqHHnS4iSudpQcySMYtdFiXlAxzSbAwfMxK6kZoHKhbjjespMTioOPZnzI+4ucCeTVyKMVKLfeAS6vSWaTinuZwzyy/Dc7vaed+6KaV0kukdPUk6yOcctZPvvxxqksq2lEW8RvHjMEO2FCl/zy6p3NEm0R9OFSafJdldc4QVeyaaObMBO0/5cCaa6d9Ggyubxire+lEojscdjoWUR1xGOy8KD8mG2ZLO2l2paDc3A39qmU2z2W5YNv5+u79e6QfGJY/hAAB42m3NywrCMBQE0DupWp/1AYI7/6DEaLQu66Mrd35BKUWKJSlFv1+rue4cGM7shgR981qSon+ZNwUJ8iDgoYU2OvDRRQ99DDDECAHGmGCKmf80hZSx/Kik/LliFbtmN6xmt+yOjdg9GztV4tROnRwX/Bsaaw51nt4Lc7tWaZYHp/MlzKx51LZs5htNri+2AAAAAQAB//8AD3jaY2BkYGDgAWIxIGZiYARCESBmAfMYAAR6AEMAAAABAAAAANXtRbgAAAAA2AhRFAAAAADYCNuG) format("woff"); } -/* ---------------------------------------------- -Inter variable font. Usage: - -@supports (font-variation-settings: normal) { - html { font-family: "Inter var", sans-serif; } -} ----------------------------------------------- */ - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: normal; - src: url(../fonts/inter/Inter-upright-var.woff2) format("woff2"); -} - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ - font-style: italic; - src: url(../fonts/inter/Inter-italic-var.woff2) format("woff2"); -} - /* Structure --------------------------------- */ body#tinymce.wp-editor.content { /* stylelint-disable-line no-duplicate-selectors */ diff --git a/src/wp-content/themes/twentytwenty/assets/css/font-inter.css b/src/wp-content/themes/twentytwenty/assets/css/font-inter.css new file mode 100644 index 0000000000000..658db43fc0fab --- /dev/null +++ b/src/wp-content/themes/twentytwenty/assets/css/font-inter.css @@ -0,0 +1,23 @@ +/* ---------------------------------------------- +Inter variable font. Usage: + +@supports (font-variation-settings: normal) { + html { font-family: 'Inter var', sans-serif; } +} +---------------------------------------------- */ + +@font-face { + font-family: "Inter var"; + font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ + font-style: normal; + font-display: swap; + src: url(../fonts/inter/Inter-upright-var.woff2) format("woff2"); +} + +@font-face { + font-family: "Inter var"; + font-weight: 100 900; /* stylelint-disable-line font-weight-notation */ + font-style: italic; + font-display: swap; + src: url(../fonts/inter/Inter-italic-var.woff2) format("woff2"); +} diff --git a/src/wp-content/themes/twentytwenty/functions.php b/src/wp-content/themes/twentytwenty/functions.php index 3f1a556d1dcaa..549191f12dccc 100644 --- a/src/wp-content/themes/twentytwenty/functions.php +++ b/src/wp-content/themes/twentytwenty/functions.php @@ -182,6 +182,7 @@ function twentytwenty_theme_support() { * Register and Enqueue Styles. * * @since Twenty Twenty 1.0 + * @since Twenty Twenty 2.6 Enqueue the CSS file for the variable font. */ function twentytwenty_register_styles() { @@ -190,6 +191,9 @@ function twentytwenty_register_styles() { wp_enqueue_style( 'twentytwenty-style', get_stylesheet_uri(), array(), $theme_version ); wp_style_add_data( 'twentytwenty-style', 'rtl', 'replace' ); + // Enqueue the CSS file for the variable font, Inter. + wp_enqueue_style( 'twentytwenty-fonts', get_theme_file_uri( '/assets/css/font-inter.css' ), array(), wp_get_theme()->get( 'Version' ), 'all' ); + // Add output of Customizer settings as inline style. $customizer_css = twentytwenty_get_customizer_css( 'front-end' ); if ( $customizer_css ) { @@ -417,6 +421,7 @@ function twentytwenty_sidebar_registration() { * * @since Twenty Twenty 1.0 * @since Twenty Twenty 2.4 Removed a script related to the obsolete Squared style of Button blocks. + * @since Twenty Twenty 2.6 Enqueue the CSS file for the variable font. */ function twentytwenty_block_editor_styles() { @@ -430,6 +435,9 @@ function twentytwenty_block_editor_styles() { wp_add_inline_style( 'twentytwenty-block-editor-styles', $customizer_css ); } + // Enqueue the CSS file for the variable font, Inter. + wp_enqueue_style( 'twentytwenty-fonts', get_theme_file_uri( '/assets/css/font-inter.css' ), array(), wp_get_theme()->get( 'Version' ), 'all' ); + // Add inline style for non-latin fonts. $custom_css = TwentyTwenty_Non_Latin_Languages::get_non_latin_css( 'block-editor' ); if ( $custom_css ) { @@ -447,11 +455,13 @@ function twentytwenty_block_editor_styles() { * Enqueue classic editor styles. * * @since Twenty Twenty 1.0 + * @since Twenty Twenty 2.6 Enqueue the CSS file for the variable font. */ function twentytwenty_classic_editor_styles() { $classic_editor_styles = array( '/assets/css/editor-style-classic.css', + '/assets/css/font-inter.css' ); add_editor_style( $classic_editor_styles ); From d17afcc9dd04f4935be2e749daed574de2c13646 Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Fri, 19 Jan 2024 17:37:05 +0000 Subject: [PATCH 009/157] Bootstrap/Load: Introduce functions to check whether WordPress is serving a REST API request. This changeset introduces two functions: * `wp_is_serving_rest_request()` returns a boolean for whether WordPress is serving an actual REST API request. * `wp_is_rest_endpoint()` returns a boolean for whether a WordPress REST API endpoint is currently being used. While this is always the case if `wp_is_serving_rest_request()` returns `true`, the function additionally covers the scenario of internal REST API requests, i.e. where WordPress calls a REST API endpoint within the same request. Both functions should only be used after the `parse_request` action. All relevant manual checks have been adjusted to use one of the new functions, depending on the use-case. They were all using the same constant check so far, while in fact some of them were intending to check for an actual REST API request while others were intending to check for REST endpoint usage. A new filter `wp_is_rest_endpoint` can be used to alter the return value of the `wp_is_rest_endpoint()` function. Props lots.0.logs, TimothyBlynJacobs, flixos90, joehoyle, peterwilsoncc, swissspidy, SergeyBiryukov, pento, mikejolley, iandunn, hellofromTonya, Cybr, petitphp. Fixes #42061. git-svn-id: https://develop.svn.wordpress.org/trunk@57312 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-query.php | 2 +- src/wp-includes/deprecated.php | 2 +- src/wp-includes/functions.php | 21 +++++- src/wp-includes/load.php | 4 ++ src/wp-includes/rest-api.php | 37 ++++++++++- .../rest-api/class-wp-rest-server.php | 32 ++++++++- .../class-wp-rest-attachments-controller.php | 4 +- .../class-wp-rest-url-details-controller.php | 2 +- src/wp-includes/script-loader.php | 2 +- src/wp-includes/user.php | 1 + .../tests/rest-api/wpIsRestEndpoint.php | 66 +++++++++++++++++++ 11 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 tests/phpunit/tests/rest-api/wpIsRestEndpoint.php diff --git a/src/wp-includes/class-wp-query.php b/src/wp-includes/class-wp-query.php index e6a3e6b743450..f683a52bd1080 100644 --- a/src/wp-includes/class-wp-query.php +++ b/src/wp-includes/class-wp-query.php @@ -1027,7 +1027,7 @@ public function parse_query( $query = '' ) { } if ( ! ( $this->is_singular || $this->is_archive || $this->is_search || $this->is_feed - || ( defined( 'REST_REQUEST' ) && REST_REQUEST && $this->is_main_query() ) + || ( wp_is_serving_rest_request() && $this->is_main_query() ) || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_robots || $this->is_favicon ) ) { $this->is_home = true; } diff --git a/src/wp-includes/deprecated.php b/src/wp-includes/deprecated.php index e63708f91bb50..ec7b33f360396 100644 --- a/src/wp-includes/deprecated.php +++ b/src/wp-includes/deprecated.php @@ -5436,7 +5436,7 @@ function _wp_theme_json_webfonts_handler() { $settings = WP_Theme_JSON_Resolver::get_merged_data()->get_settings(); // If in the editor, add webfonts defined in variations. - if ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { + if ( is_admin() || wp_is_rest_endpoint() ) { $variations = WP_Theme_JSON_Resolver::get_style_variations(); foreach ( $variations as $variation ) { // Skip if fontFamilies are not defined in the variation. diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index a3a5e56bfad18..ff55251d7d760 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -3718,7 +3718,7 @@ function wp_die( $message = '', $title = '', $args = array() ) { * @param callable $callback Callback function name. */ $callback = apply_filters( 'wp_die_json_handler', '_json_wp_die_handler' ); - } elseif ( defined( 'REST_REQUEST' ) && REST_REQUEST && wp_is_jsonp_request() ) { + } elseif ( wp_is_serving_rest_request() && wp_is_jsonp_request() ) { /** * Filters the callback for killing WordPress execution for JSONP REST requests. * @@ -4441,7 +4441,7 @@ function _wp_json_prepare_data( $value ) { * @param int $flags Optional. Options to be passed to json_encode(). Default 0. */ function wp_send_json( $response, $status_code = null, $flags = 0 ) { - if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { + if ( wp_is_serving_rest_request() ) { _doing_it_wrong( __FUNCTION__, sprintf( @@ -4697,6 +4697,23 @@ function _mce_set_direction( $mce_init ) { return $mce_init; } +/** + * Determines whether WordPress is currently serving a REST API request. + * + * The function relies on the 'REST_REQUEST' global. As such, it only returns true when an actual REST _request_ is + * being made. It does not return true when a REST endpoint is hit as part of another request, e.g. for preloading a + * REST response. See {@see wp_is_rest_endpoint()} for that purpose. + * + * This function should not be called until the {@see 'parse_request'} action, as the constant is only defined then, + * even for an actual REST request. + * + * @since 6.5.0 + * + * @return bool True if it's a WordPress REST API request, false otherwise. + */ +function wp_is_serving_rest_request() { + return defined( 'REST_REQUEST' ) && REST_REQUEST; +} /** * Converts smiley code to the icon graphic file equivalent. diff --git a/src/wp-includes/load.php b/src/wp-includes/load.php index 520902cdd64ba..0dbbc187cfce2 100644 --- a/src/wp-includes/load.php +++ b/src/wp-includes/load.php @@ -598,6 +598,10 @@ function wp_debug_mode() { error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); } + /* + * The 'REST_REQUEST' check here is optimistic as the constant is most + * likely not set at this point even if it is in fact a REST request. + */ if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || defined( 'MS_FILES_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() || wp_is_json_request() diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index 61e324e801445..2631a6663fe92 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -209,7 +209,7 @@ function rest_api_register_rewrites() { * @since 4.4.0 */ function rest_api_default_filters() { - if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { + if ( wp_is_serving_rest_request() ) { // Deprecated reporting. add_action( 'deprecated_function_run', 'rest_handle_deprecated_function', 10, 3 ); add_filter( 'deprecated_function_trigger_error', '__return_false' ); @@ -3389,3 +3389,38 @@ static function ( $status, $error_data ) { return new WP_REST_Response( $data, $status ); } + +/** + * Checks whether a REST API endpoint request is currently being handled. + * + * This may be a standalone REST API request, or an internal request dispatched from within a regular page load. + * + * @since 6.5.0 + * + * @global WP_REST_Server $wp_rest_server REST server instance. + * + * @return bool True if a REST endpoint request is currently being handled, false otherwise. + */ +function wp_is_rest_endpoint() { + /* @var WP_REST_Server $wp_rest_server */ + global $wp_rest_server; + + // Check whether this is a standalone REST request. + $is_rest_endpoint = wp_is_serving_rest_request(); + if ( ! $is_rest_endpoint ) { + // Otherwise, check whether an internal REST request is currently being handled. + $is_rest_endpoint = isset( $wp_rest_server ) + && $wp_rest_server->is_dispatching(); + } + + /** + * Filters whether a REST endpoint request is currently being handled. + * + * This may be a standalone REST API request, or an internal request dispatched from within a regular page load. + * + * @since 6.5.0 + * + * @param bool $is_request_endpoint Whether a REST endpoint request is currently being handled. + */ + return (bool) apply_filters( 'wp_is_rest_endpoint', $is_rest_endpoint ); +} diff --git a/src/wp-includes/rest-api/class-wp-rest-server.php b/src/wp-includes/rest-api/class-wp-rest-server.php index 6838579ce8609..861f5115e6ae9 100644 --- a/src/wp-includes/rest-api/class-wp-rest-server.php +++ b/src/wp-includes/rest-api/class-wp-rest-server.php @@ -87,6 +87,14 @@ class WP_REST_Server { */ protected $embed_cache = array(); + /** + * Stores request objects that are currently being handled. + * + * @since 6.5.0 + * @var array + */ + protected $dispatching_requests = array(); + /** * Instantiates the REST server. * @@ -983,6 +991,8 @@ public function get_route_options( $route ) { * @return WP_REST_Response Response returned by the callback. */ public function dispatch( $request ) { + $this->dispatching_requests[] = $request; + /** * Filters the pre-calculated result of a REST API dispatch request. * @@ -1008,6 +1018,7 @@ public function dispatch( $request ) { $result = $this->error_to_response( $result ); } + array_pop( $this->dispatching_requests ); return $result; } @@ -1015,7 +1026,9 @@ public function dispatch( $request ) { $matched = $this->match_request_to_handler( $request ); if ( is_wp_error( $matched ) ) { - return $this->error_to_response( $matched ); + $response = $this->error_to_response( $matched ); + array_pop( $this->dispatching_requests ); + return $response; } list( $route, $handler ) = $matched; @@ -1040,7 +1053,22 @@ public function dispatch( $request ) { } } - return $this->respond_to_request( $request, $route, $handler, $error ); + $response = $this->respond_to_request( $request, $route, $handler, $error ); + array_pop( $this->dispatching_requests ); + return $response; + } + + /** + * Returns whether the REST server is currently dispatching / responding to a request. + * + * This may be a standalone REST API request, or an internal request dispatched from within a regular page load. + * + * @since 6.5.0 + * + * @return bool Whether the REST server is currently handling a request. + */ + public function is_dispatching() { + return (bool) $this->dispatching_requests; } /** diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php index 7367c0fc57a07..c7da6d068b29d 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php @@ -201,7 +201,7 @@ public function create_item( $request ) { wp_after_insert_post( $attachment, false, null ); - if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { + if ( wp_is_serving_rest_request() ) { /* * Set a custom header with the attachment_id. * Used by the browser/client to resume creating image sub-sizes after a PHP fatal error. @@ -630,7 +630,7 @@ public function edit_media_item( $request ) { update_post_meta( $new_attachment_id, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); } - if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { + if ( wp_is_serving_rest_request() ) { /* * Set a custom header with the attachment_id. * Used by the browser/client to resume creating image sub-sizes after a PHP fatal error. diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php index c9ac6675d093f..7dcc4d79236a1 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php @@ -128,7 +128,7 @@ public function get_item_schema() { * * @since 5.9.0 * - * @param WP_REST_REQUEST $request Full details about the request. + * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error The parsed details as a response object. WP_Error if there are errors. */ public function parse_url_details( $request ) { diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 8886cb587b170..6425afe87425d 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -2586,7 +2586,7 @@ function wp_should_load_block_editor_scripts_and_styles() { * @return bool Whether separate assets will be loaded. */ function wp_should_load_separate_core_block_assets() { - if ( is_admin() || is_feed() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { + if ( is_admin() || is_feed() || wp_is_rest_endpoint() ) { return false; } diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index 5dbff2b929b2e..5d8cd9f57c64c 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -333,6 +333,7 @@ function wp_authenticate_application_password( $input_user, $username, $password return $input_user; } + // The 'REST_REQUEST' check here may happen too early for the constant to be available. $is_api_request = ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ); /** diff --git a/tests/phpunit/tests/rest-api/wpIsRestEndpoint.php b/tests/phpunit/tests/rest-api/wpIsRestEndpoint.php new file mode 100644 index 0000000000000..b46749310ab7b --- /dev/null +++ b/tests/phpunit/tests/rest-api/wpIsRestEndpoint.php @@ -0,0 +1,66 @@ +assertFalse( wp_is_rest_endpoint() ); + } + + /** + * Tests that `wp_is_rest_endpoint()` relies on whether the global REST server is dispatching. + * + * @ticket 42061 + */ + public function test_wp_is_rest_endpoint_via_global() { + global $wp_rest_server; + + $wp_rest_server = new Spy_REST_Server(); + do_action( 'rest_api_init', $wp_rest_server ); + + // The presence of a REST server itself won't set this to true. + $this->assertFalse( wp_is_rest_endpoint() ); + + // Set up filter to record value during dispatching. + $result_within_request = null; + add_filter( + 'rest_pre_dispatch', + function ( $result ) use ( &$result_within_request ) { + $result_within_request = wp_is_rest_endpoint(); + return $result; + } + ); + + /* + * Dispatch a request (doesn't matter that it's invalid). + * This already is completed after this method call. + */ + $wp_rest_server->dispatch( new WP_REST_Request() ); + + // Within that request, the function should have returned true. + $this->assertTrue( $result_within_request ); + + // After the dispatching, the function should return false again. + $this->assertFalse( wp_is_rest_endpoint() ); + } + + /** + * Tests that `wp_is_rest_endpoint()` returns a result enforced via filter. + * + * @ticket 42061 + */ + public function test_wp_is_rest_endpoint_via_filter() { + add_filter( 'wp_is_rest_endpoint', '__return_true' ); + $this->assertTrue( wp_is_rest_endpoint() ); + } +} From 27ac620c7a2855cfd885f7993f1b12cf7d576c20 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 19 Jan 2024 18:24:36 +0000 Subject: [PATCH 010/157] Twenty Twenty: Add missing comma in `twentytwenty_classic_editor_styles()`. This resolves a WPCS error: {{{ There should be a comma after the last array item in a multi-line array. }}} Follow-up to [57311]. See #48630. git-svn-id: https://develop.svn.wordpress.org/trunk@57313 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentytwenty/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-content/themes/twentytwenty/functions.php b/src/wp-content/themes/twentytwenty/functions.php index 549191f12dccc..2ce8fffb77bac 100644 --- a/src/wp-content/themes/twentytwenty/functions.php +++ b/src/wp-content/themes/twentytwenty/functions.php @@ -461,7 +461,7 @@ function twentytwenty_classic_editor_styles() { $classic_editor_styles = array( '/assets/css/editor-style-classic.css', - '/assets/css/font-inter.css' + '/assets/css/font-inter.css', ); add_editor_style( $classic_editor_styles ); From ecbd1376a6c322f20ccccc6133933d13fc3c3356 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 19 Jan 2024 19:01:29 +0000 Subject: [PATCH 011/157] HTML API: Add support for HR element. Adds support for the following HTML elements to the HTML Processor: - HR Previously, this element was not supported and the HTML Processor would bail when encountering it. Now, with this patch, it will proceed to parse an HTML document when encountering one. Developed in WordPress/wordpress-develop#5897 Props jonsurrell, dmsnell Fixes #60283 git-svn-id: https://develop.svn.wordpress.org/trunk@57314 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 14 ++++++++++++-- tests/phpunit/tests/html-api/wpHtmlProcessor.php | 1 - .../html-api/wpHtmlProcessorBreadcrumbs.php | 1 - .../html-api/wpHtmlProcessorSemanticRules.php | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index cce26a60c5350..910c1f24f1b18 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -109,7 +109,7 @@ * - Media elements: AUDIO, CANVAS, FIGCAPTION, FIGURE, IMG, MAP, PICTURE, VIDEO. * - Paragraph: P. * - Phrasing elements: ABBR, BDI, BDO, CITE, DATA, DEL, DFN, INS, MARK, OUTPUT, Q, SAMP, SUB, SUP, TIME, VAR. - * - Sectioning elements: ARTICLE, ASIDE, NAV, SECTION. + * - Sectioning elements: ARTICLE, ASIDE, HR, NAV, SECTION. * - Templating elements: SLOT. * - Text decoration: RUBY. * - Deprecated elements: ACRONYM, BLINK, CENTER, DIR, ISINDEX, MULTICOL, NEXTID, SPACER. @@ -941,6 +941,17 @@ private function step_in_body() { $this->reconstruct_active_formatting_elements(); $this->insert_html_element( $this->state->current_token ); return true; + + /* + * > A start tag whose tag name is "hr" + */ + case '+HR': + if ( $this->state->stack_of_open_elements->has_p_in_button_scope() ) { + $this->close_a_p_element(); + } + $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; + return true; } /* @@ -977,7 +988,6 @@ private function step_in_body() { case 'FRAME': case 'FRAMESET': case 'HEAD': - case 'HR': case 'HTML': case 'IFRAME': case 'INPUT': diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index d9f1357b5c66f..d1f0767e9ce13 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -173,7 +173,6 @@ public function data_unsupported_special_in_body_tags() { 'FRAME' => array( 'FRAME' ), 'FRAMESET' => array( 'FRAMESET' ), 'HEAD' => array( 'HEAD' ), - 'HR' => array( 'HR' ), 'HTML' => array( 'HTML' ), 'IFRAME' => array( 'IFRAME' ), 'INPUT' => array( 'INPUT' ), diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 15d38d6f70c6c..c16d38146acb3 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -175,7 +175,6 @@ public function data_unsupported_elements() { 'FRAME', 'FRAMESET', 'HEAD', - 'HR', 'HTML', 'IFRAME', 'INPUT', diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php index c1adf9a71a3f8..ba9640f2efdc7 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php @@ -224,6 +224,22 @@ public function test_in_body_button_with_button_in_scope_as_ancestor() { $this->assertSame( array( 'HTML', 'BODY', 'BUTTON' ), $p->get_breadcrumbs(), 'Failed to produce expected DOM nesting for third button.' ); } + /** + * Verifies that HR closes an open p tag + * + * @ticket 60283 + */ + public function test_in_body_hr_element_closes_open_p_tag() { + $processor = WP_HTML_Processor::create_fragment( '


' ); + + $processor->next_tag( 'HR' ); + $this->assertSame( + array( 'HTML', 'BODY', 'HR' ), + $processor->get_breadcrumbs(), + 'Expected HR to be a direct child of the BODY, having closed the open P element.' + ); + } + /** * Verifies that H1 through H6 elements close an open P element. * From 5815624ead21b4e105f3ddb09a9657ad84da654f Mon Sep 17 00:00:00 2001 From: Joe McGill Date: Fri, 19 Jan 2024 20:52:06 +0000 Subject: [PATCH 012/157] Editor: Support deferred block variation initialization on the server. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When registering blocks on the server using `register_block_type()` or similar functions, a set of block type variations can also be registered. However, in some cases building this variation data during block registration can be an expensive process, which is not needed in most contexts. To address this problem, this adds support to the `WP_Block_Type` object for a new property, `variation_callback`, which can be used to register a callback for building variation data only when the block variations data is needed. The `WP_Block_Type::variations` property has been changed to a private property that is now accessed through the magic `__get()` method. The magic getter makes use of a new public method, `WP_Block_Type::get_variations` which will build variations from a registered callback if variations have not already been built. Props spacedmonkey, thekt12, Mamaduka, gaambo, gziolo, mukesh27, joemcgill. Fixes #59969. git-svn-id: https://develop.svn.wordpress.org/trunk@57315 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-block-type.php | 53 ++++- tests/phpunit/tests/blocks/wpBlockType.php | 192 ++++++++++++++++++ .../rest-api/rest-block-type-controller.php | 29 +++ 3 files changed, 272 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/class-wp-block-type.php b/src/wp-includes/class-wp-block-type.php index 9caa366032a75..6ad8ebcd6790e 100644 --- a/src/wp-includes/class-wp-block-type.php +++ b/src/wp-includes/class-wp-block-type.php @@ -113,9 +113,18 @@ class WP_Block_Type { * Block variations. * * @since 5.8.0 - * @var array[] + * @since 6.5.0 Only accessible through magic getter. null by default. + * @var array[]|null */ - public $variations = array(); + private $variations = null; + + /** + * Block variations callback. + * + * @since 6.5.0 + * @var callable|null + */ + public $variation_callback = null; /** * Custom CSS selectors for theme.json style generation. @@ -296,6 +305,7 @@ class WP_Block_Type { * @type array|null $supports Supported features. * @type array|null $example Structured data for the block preview. * @type callable|null $render_callback Block type render callback. + * @type callable|null $variation_callback Block type variations callback. * @type array|null $attributes Block type attributes property schemas. * @type string[] $uses_context Context values inherited by blocks of this type. * @type string[]|null $provides_context Context provided by blocks of this type. @@ -325,6 +335,10 @@ public function __construct( $block_type, $args = array() ) { * null when value not found, or void when unknown property name provided. */ public function __get( $name ) { + if ( 'variations' === $name ) { + return $this->get_variations(); + } + if ( ! in_array( $name, $this->deprecated_properties, true ) ) { return; } @@ -353,6 +367,10 @@ public function __get( $name ) { * or false otherwise. */ public function __isset( $name ) { + if ( 'variations' === $name ) { + return true; + } + if ( ! in_array( $name, $this->deprecated_properties, true ) ) { return false; } @@ -372,6 +390,11 @@ public function __isset( $name ) { * @param mixed $value Property value. */ public function __set( $name, $value ) { + if ( 'variations' === $name ) { + $this->variations = $value; + return; + } + if ( ! in_array( $name, $this->deprecated_properties, true ) ) { $this->{$name} = $value; return; @@ -540,4 +563,30 @@ public function get_attributes() { $this->attributes : array(); } + + /** + * Get block variations. + * + * @since 6.5.0 + * + * @return array[] + */ + public function get_variations() { + if ( ! isset( $this->variations ) ) { + $this->variations = array(); + if ( is_callable( $this->variation_callback ) ) { + $this->variations = call_user_func( $this->variation_callback ); + } + } + + /** + * Filters the registered variations for a block type. + * + * @since 6.5.0 + * + * @param array $variations Array of registered variations for a block type. + * @param WP_Block_Type $block_type The full block type object. + */ + return apply_filters( 'get_block_type_variations', $this->variations, $this ); + } } diff --git a/tests/phpunit/tests/blocks/wpBlockType.php b/tests/phpunit/tests/blocks/wpBlockType.php index d2c7a13e6b345..b826faf575946 100644 --- a/tests/phpunit/tests/blocks/wpBlockType.php +++ b/tests/phpunit/tests/blocks/wpBlockType.php @@ -460,4 +460,196 @@ public function data_block_version() { array( '', 0 ), ); } + + /** + * @ticket 59969 + */ + public function test_variation_callback() { + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variation_callback' => array( $this, 'mock_variation_callback' ), + ) + ); + + $this->assertSameSets( $this->mock_variation_callback(), $block_type->variations ); + } + + /** + * @ticket 59969 + * @covers WP_Block_Type::get_variations + */ + public function test_get_variations() { + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variation_callback' => array( $this, 'mock_variation_callback' ), + ) + ); + + $this->assertSameSets( $this->mock_variation_callback(), $block_type->get_variations() ); + } + + /** + * @ticket 59969 + */ + public function test_variations_precedence_over_callback() { + $test_variations = array( 'name' => 'test1' ); + + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variations' => $test_variations, + 'variation_callback' => array( $this, 'mock_variation_callback' ), + ) + ); + + // If the variations are defined, the callback should not be used. + $this->assertSameSets( $test_variations, $block_type->variations ); + } + + /** + * @ticket 59969 + */ + public function test_variations_callback_are_lazy_loaded() { + $callback_called = false; + + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variation_callback' => function () use ( &$callback_called ) { + $callback_called = true; + return $this->mock_variation_callback(); + }, + ) + ); + + $this->assertSame( false, $callback_called, 'The callback should not be called before the variations are accessed.' ); + $block_type->variations; // access the variations. + $this->assertSame( true, $callback_called, 'The callback should be called when the variations are accessed.' ); + } + + /** + * @ticket 59969 + * @covers WP_Block_Type::get_variations + */ + public function test_variations_precedence_over_callback_post_registration() { + $test_variations = array( 'name' => 'test1' ); + $callback_called = false; + + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variation_callback' => function () use ( &$callback_called ) { + $callback_called = true; + return $this->mock_variation_callback(); + }, + ) + ); + $block_type->variations = $test_variations; + + // If the variations are defined after registration but before first access, the callback should not override it. + $this->assertSameSets( $test_variations, $block_type->get_variations(), 'Variations are same as variations set' ); + $this->assertSame( false, $callback_called, 'The callback was never called.' ); + } + + /** + * @ticket 59969 + * @covers WP_Block_Type::get_variations + */ + public function test_variations_callback_happens_only_once() { + $callback_count = 0; + + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variation_callback' => function () use ( &$callback_count ) { + $callback_count++; + return $this->mock_variation_callback(); + }, + ) + ); + + $this->assertSame( 0, $callback_count, 'The callback should not be called before the variations are accessed.' ); + $block_type->get_variations(); // access the variations. + $this->assertSame( 1, $callback_count, 'The callback should be called when the variations are accessed.' ); + $block_type->get_variations(); // access the variations again. + $this->assertSame( 1, $callback_count, 'The callback should not be called again.' ); + } + + /** + * Test filter function for get_block_type_variations filter. + * + * @param array $variations Block variations before filter. + * @param WP_Block_Type $block_type Block type. + * + * @return array Block variations after filter. + */ + public function filter_test_variations( $variations, $block_type ) { + return array( array( 'name' => 'test1' ) ); + } + + /** + * @ticket 59969 + */ + public function test_get_block_type_variations_filter_with_variation_callback() { + // Filter will override the variations obtained from the callback. + add_filter( 'get_block_type_variations', array( $this, 'filter_test_variations' ), 10, 2 ); + $expected_variations = array( array( 'name' => 'test1' ) ); + + $callback_called = false; + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variation_callback' => function () use ( &$callback_called ) { + $callback_called = true; + return $this->mock_variation_callback(); + }, + ) + ); + + $obtained_variations = $block_type->variations; // access the variations. + + $this->assertSame( true, $callback_called, 'The callback should be called when the variations are accessed.' ); + $this->assertSameSets( $obtained_variations, $expected_variations, 'The variations obtained from the callback should be filtered.' ); + } + + /** + * @ticket 59969 + */ + public function test_get_block_type_variations_filter_variations() { + // Filter will override the variations set during registration. + add_filter( 'get_block_type_variations', array( $this, 'filter_test_variations' ), 10, 2 ); + $expected_variations = array( array( 'name' => 'test1' ) ); + + $block_type = new WP_Block_Type( + 'test/block', + array( + 'title' => 'Test title', + 'variations' => $this->mock_variation_callback(), + ) + ); + + $obtained_variations = $block_type->variations; // access the variations. + $this->assertSameSets( $obtained_variations, $expected_variations, 'The variations that was initially set should be filtered.' ); + } + + /** + * Mock variation callback. + * + * @return array + */ + public function mock_variation_callback() { + return array( + array( 'name' => 'var1' ), + array( 'name' => 'var2' ), + ); + } } diff --git a/tests/phpunit/tests/rest-api/rest-block-type-controller.php b/tests/phpunit/tests/rest-api/rest-block-type-controller.php index 8b49d2c034a20..59c77e03b68b2 100644 --- a/tests/phpunit/tests/rest-api/rest-block-type-controller.php +++ b/tests/phpunit/tests/rest-api/rest-block-type-controller.php @@ -734,6 +734,35 @@ protected function check_block_type_object( $block_type, $data, $links ) { } } + /** + * @ticket 59969 + */ + public function test_variation_callback() { + $block_type = 'test/block'; + $settings = array( + 'title' => true, + 'variation_callback' => array( $this, 'mock_variation_callback' ), + ); + register_block_type( $block_type, $settings ); + wp_set_current_user( self::$admin_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/block-types/' . $block_type ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertSameSets( $this->mock_variation_callback(), $data['variations'] ); + } + + /** + * Mock variation callback. + * + * @return array + */ + public function mock_variation_callback() { + return array( + array( 'name' => 'var1' ), + array( 'name' => 'var2' ), + ); + } + /** * The create_item() method does not exist for block types. * From 91e51f92a8c2c5e81b2a08cf2600615612cc5ab5 Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 19 Jan 2024 21:40:01 +0000 Subject: [PATCH 013/157] HTML API: Add support for BR, EMBED, & other tags. Adds support for the following HTML elements to the HTML Processor: - AREA, BR, EMBED, KEYGEN, WBR - Only the opening BR tag is supported, as the invalid closer `
` involves more complicated rules, to be implemented later. Previously, these elements were not supported and the HTML Processor would bail when encountering them. With this patch it will proceed to parse an HTML document when encountering those tags as long as other normal conditions don't cause it to bail (such as complicated format reconstruction rules). Props jonsurrell, dmsnell Fixes #60283 git-svn-id: https://develop.svn.wordpress.org/trunk@57316 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 31 +++++-- .../tests/html-api/wpHtmlProcessor.php | 85 +++++++++++++++++-- .../html-api/wpHtmlProcessorBreadcrumbs.php | 5 -- .../html-api/wpHtmlProcessorSemanticRules.php | 25 ++++++ 4 files changed, 127 insertions(+), 19 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 910c1f24f1b18..34443a50bb5dd 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -102,17 +102,17 @@ * - Containers: ADDRESS, BLOCKQUOTE, DETAILS, DIALOG, DIV, FOOTER, HEADER, MAIN, MENU, SPAN, SUMMARY. * - Custom elements: All custom elements are supported. :) * - Form elements: BUTTON, DATALIST, FIELDSET, LABEL, LEGEND, METER, PROGRESS, SEARCH. - * - Formatting elements: B, BIG, CODE, EM, FONT, I, SMALL, STRIKE, STRONG, TT, U. + * - Formatting elements: B, BIG, CODE, EM, FONT, I, SMALL, STRIKE, STRONG, TT, U, WBR. * - Heading elements: H1, H2, H3, H4, H5, H6, HGROUP. * - Links: A. * - Lists: DD, DL, DT, LI, OL, LI. - * - Media elements: AUDIO, CANVAS, FIGCAPTION, FIGURE, IMG, MAP, PICTURE, VIDEO. - * - Paragraph: P. - * - Phrasing elements: ABBR, BDI, BDO, CITE, DATA, DEL, DFN, INS, MARK, OUTPUT, Q, SAMP, SUB, SUP, TIME, VAR. + * - Media elements: AUDIO, CANVAS, EMBED, FIGCAPTION, FIGURE, IMG, MAP, PICTURE, VIDEO. + * - Paragraph: BR, P. + * - Phrasing elements: AREA, ABBR, BDI, BDO, CITE, DATA, DEL, DFN, INS, MARK, OUTPUT, Q, SAMP, SUB, SUP, TIME, VAR. * - Sectioning elements: ARTICLE, ASIDE, HR, NAV, SECTION. * - Templating elements: SLOT. * - Text decoration: RUBY. - * - Deprecated elements: ACRONYM, BLINK, CENTER, DIR, ISINDEX, MULTICOL, NEXTID, SPACER. + * - Deprecated elements: ACRONYM, BLINK, CENTER, DIR, ISINDEX, KEYGEN, MULTICOL, NEXTID, SPACER. * * ### Supported markup * @@ -934,12 +934,28 @@ private function step_in_body() { $this->run_adoption_agency_algorithm(); return true; + /* + * > An end tag whose tag name is "br" + * > Parse error. Drop the attributes from the token, and act as described in the next + * > entry; i.e. act as if this was a "br" start tag token with no attributes, rather + * > than the end tag token that it actually is. + */ + case '-BR': + $this->last_error = self::ERROR_UNSUPPORTED; + throw new WP_HTML_Unsupported_Exception( 'Closing BR tags require unimplemented special handling.' ); + /* * > A start tag whose tag name is one of: "area", "br", "embed", "img", "keygen", "wbr" */ + case '+AREA': + case '+BR': + case '+EMBED': case '+IMG': + case '+KEYGEN': + case '+WBR': $this->reconstruct_active_formatting_elements(); $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; return true; /* @@ -977,13 +993,11 @@ private function step_in_body() { case 'BASEFONT': case 'BGSOUND': case 'BODY': - case 'BR': case 'CAPTION': case 'COL': case 'COLGROUP': case 'DD': case 'DT': - case 'EMBED': case 'FORM': case 'FRAME': case 'FRAMESET': @@ -991,7 +1005,6 @@ private function step_in_body() { case 'HTML': case 'IFRAME': case 'INPUT': - case 'KEYGEN': case 'LI': case 'LINK': case 'LISTING': @@ -1031,7 +1044,6 @@ private function step_in_body() { case 'TR': case 'TRACK': case 'UL': - case 'WBR': case 'XMP': $this->last_error = self::ERROR_UNSUPPORTED; throw new WP_HTML_Unsupported_Exception( "Cannot process {$tag_name} element." ); @@ -1692,6 +1704,7 @@ public static function is_void( $tag_name ) { 'IMG' === $tag_name || 'INPUT' === $tag_name || 'LINK' === $tag_name || + 'KEYGEN' === $tag_name || // Obsolete but still treated as void. 'META' === $tag_name || 'SOURCE' === $tag_name || 'TRACK' === $tag_name || diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index d1f0767e9ce13..c556d7e36a76f 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -132,6 +132,86 @@ public function test_fails_to_reconstruct_formatting_elements() { $this->assertFalse( $p->next_tag( 'EM' ), 'Should have aborted before finding second EM as it required reconstructing the first EM.' ); } + /** + * Ensure non-nesting tags do not nest. + * + * @ticket 60283 + * + * @covers WP_HTML_Processor::step_in_body + * @covers WP_HTML_Processor::is_void + * + * @dataProvider data_void_tags + * + * @param string $tag_name Name of void tag under test. + */ + public function test_cannot_nest_void_tags( $tag_name ) { + $processor = WP_HTML_Processor::create_fragment( "<{$tag_name}>
" ); + + /* + * This HTML represents the same as the following HTML, + * assuming that it were provided `` as the tag: + * + * + * + * + *
+ * + * + */ + + $found_tag = $processor->next_tag(); + + if ( WP_HTML_Processor::ERROR_UNSUPPORTED === $processor->get_last_error() ) { + $this->markTestSkipped( "Tag {$tag_name} is not supported." ); + } + + $this->assertTrue( + $found_tag, + "Could not find first {$tag_name}." + ); + + $this->assertSame( + array( 'HTML', 'BODY', $tag_name ), + $processor->get_breadcrumbs(), + 'Found incorrect nesting of first element.' + ); + + $this->assertTrue( + $processor->next_tag(), + 'Should have found the DIV as the second tag.' + ); + + $this->assertSame( + array( 'HTML', 'BODY', 'DIV' ), + $processor->get_breadcrumbs(), + "DIV should have been a sibling of the {$tag_name}." + ); + } + + /** + * Data provider. + * + * @return array[] + */ + public function data_void_tags() { + return array( + 'AREA' => array( 'AREA' ), + 'BASE' => array( 'BASE' ), + 'BR' => array( 'BR' ), + 'COL' => array( 'COL' ), + 'EMBED' => array( 'EMBED' ), + 'HR' => array( 'HR' ), + 'IMG' => array( 'IMG' ), + 'INPUT' => array( 'INPUT' ), + 'KEYGEN' => array( 'KEYGEN' ), + 'LINK' => array( 'LINK' ), + 'META' => array( 'META' ), + 'SOURCE' => array( 'SOURCE' ), + 'TRACK' => array( 'TRACK' ), + 'WBR' => array( 'WBR' ), + ); + } + /** * Ensures that special handling of unsupported tags is cleaned up * as handling is implemented. Otherwise there's risk of leaving special @@ -159,16 +239,13 @@ public function test_step_in_body_fails_on_unsupported_tags( $tag_name ) { public function data_unsupported_special_in_body_tags() { return array( 'APPLET' => array( 'APPLET' ), - 'AREA' => array( 'AREA' ), 'BASE' => array( 'BASE' ), 'BASEFONT' => array( 'BASEFONT' ), 'BGSOUND' => array( 'BGSOUND' ), 'BODY' => array( 'BODY' ), - 'BR' => array( 'BR' ), 'CAPTION' => array( 'CAPTION' ), 'COL' => array( 'COL' ), 'COLGROUP' => array( 'COLGROUP' ), - 'EMBED' => array( 'EMBED' ), 'FORM' => array( 'FORM' ), 'FRAME' => array( 'FRAME' ), 'FRAMESET' => array( 'FRAMESET' ), @@ -176,7 +253,6 @@ public function data_unsupported_special_in_body_tags() { 'HTML' => array( 'HTML' ), 'IFRAME' => array( 'IFRAME' ), 'INPUT' => array( 'INPUT' ), - 'KEYGEN' => array( 'KEYGEN' ), 'LINK' => array( 'LINK' ), 'LISTING' => array( 'LISTING' ), 'MARQUEE' => array( 'MARQUEE' ), @@ -213,7 +289,6 @@ public function data_unsupported_special_in_body_tags() { 'TITLE' => array( 'TITLE' ), 'TR' => array( 'TR' ), 'TRACK' => array( 'TRACK' ), - 'WBR' => array( 'WBR' ), 'XMP' => array( 'XMP' ), ); } diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index c16d38146acb3..7da3730910cf5 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -162,15 +162,12 @@ public function test_fails_when_encountering_unsupported_tag( $html ) { public function data_unsupported_elements() { $unsupported_elements = array( 'APPLET', // Deprecated. - 'AREA', 'BASE', 'BGSOUND', // Deprecated; self-closing if self-closing flag provided, otherwise normal. 'BODY', - 'BR', 'CAPTION', 'COL', 'COLGROUP', - 'EMBED', 'FORM', 'FRAME', 'FRAMESET', @@ -178,7 +175,6 @@ public function data_unsupported_elements() { 'HTML', 'IFRAME', 'INPUT', - 'KEYGEN', // Deprecated; void. 'LINK', 'LISTING', // Deprecated, use PRE instead. 'MARQUEE', // Deprecated. @@ -213,7 +209,6 @@ public function data_unsupported_elements() { 'TITLE', 'TR', 'TRACK', - 'WBR', 'XMP', // Deprecated, use PRE instead. ); diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php index ba9640f2efdc7..c0bd9d9c75084 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorSemanticRules.php @@ -392,4 +392,29 @@ public function test_in_body_any_other_end_tag_with_unclosed_non_special_element $this->assertSame( 'DIV', $p->get_tag(), "Expected to find DIV element, but found {$p->get_tag()} instead." ); $this->assertSame( array( 'HTML', 'BODY', 'DIV', 'DIV' ), $p->get_breadcrumbs(), 'Failed to produce expected DOM nesting: SPAN should be closed and DIV should be its sibling.' ); } + + /** + * Ensures that support isn't accidentally partially added for the closing BR tag `
`. + * + * This tag closer has special rules and support shouldn't be added without implementing full support. + * + * > An end tag whose tag name is "br" + * > Parse error. Drop the attributes from the token, and act as described in the next entry; + * > i.e. act as if this was a "br" start tag token with no attributes, rather than the end + * > tag token that it actually is. + * + * When this handling is implemented, this test should be removed. It's not incorporated + * into the existing unsupported tag behavior test because the opening tag is supported; + * only the closing tag isn't. + * + * @covers WP_HTML_Processor::step_in_body + * + * @ticket 60283 + */ + public function test_br_end_tag_unsupported() { + $p = WP_HTML_Processor::create_fragment( '
' ); + + $this->assertFalse( $p->next_tag(), 'Found a BR tag that should not be handled.' ); + $this->assertSame( WP_HTML_Processor::ERROR_UNSUPPORTED, $p->get_last_error() ); + } } From 85de4aa70dd4f02d1aeb87277b65535438530bcd Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Fri, 19 Jan 2024 22:05:37 +0000 Subject: [PATCH 014/157] HTML API: Add support for PRE and LISTING elements. Adds support for the following HTML elements to the HTML Processor: - PRE, LISTING Previously, these elements were not supported and the HTML Processor would bail when encountering them. Now, with this patch applied, it will proceed to parse an HTML document when encountering those tags. Developed in WordPress/wordpress-develop#5903 Props jonsurrell, dmsnell Fixes #60283 git-svn-id: https://develop.svn.wordpress.org/trunk@57317 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 20 +++++++++++++++---- .../tests/html-api/wpHtmlProcessor.php | 2 -- .../html-api/wpHtmlProcessorBreadcrumbs.php | 2 -- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 34443a50bb5dd..65fcfbe236ee5 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -102,7 +102,7 @@ * - Containers: ADDRESS, BLOCKQUOTE, DETAILS, DIALOG, DIV, FOOTER, HEADER, MAIN, MENU, SPAN, SUMMARY. * - Custom elements: All custom elements are supported. :) * - Form elements: BUTTON, DATALIST, FIELDSET, LABEL, LEGEND, METER, PROGRESS, SEARCH. - * - Formatting elements: B, BIG, CODE, EM, FONT, I, SMALL, STRIKE, STRONG, TT, U, WBR. + * - Formatting elements: B, BIG, CODE, EM, FONT, I, PRE, SMALL, STRIKE, STRONG, TT, U, WBR. * - Heading elements: H1, H2, H3, H4, H5, H6, HGROUP. * - Links: A. * - Lists: DD, DL, DT, LI, OL, LI. @@ -112,7 +112,7 @@ * - Sectioning elements: ARTICLE, ASIDE, HR, NAV, SECTION. * - Templating elements: SLOT. * - Text decoration: RUBY. - * - Deprecated elements: ACRONYM, BLINK, CENTER, DIR, ISINDEX, KEYGEN, MULTICOL, NEXTID, SPACER. + * - Deprecated elements: ACRONYM, BLINK, CENTER, DIR, ISINDEX, KEYGEN, LISTING, MULTICOL, NEXTID, SPACER. * * ### Supported markup * @@ -684,10 +684,12 @@ private function step_in_body() { case '-FOOTER': case '-HEADER': case '-HGROUP': + case '-LISTING': case '-MAIN': case '-MENU': case '-NAV': case '-OL': + case '-PRE': case '-SEARCH': case '-SECTION': case '-SUMMARY': @@ -732,6 +734,18 @@ private function step_in_body() { $this->insert_html_element( $this->state->current_token ); return true; + /* + * > A start tag whose tag name is one of: "pre", "listing" + */ + case '+PRE': + case '+LISTING': + if ( $this->state->stack_of_open_elements->has_p_in_button_scope() ) { + $this->close_a_p_element(); + } + $this->insert_html_element( $this->state->current_token ); + $this->state->frameset_ok = false; + return true; + /* * > An end tag whose tag name is one of: "h1", "h2", "h3", "h4", "h5", "h6" */ @@ -1007,7 +1021,6 @@ private function step_in_body() { case 'INPUT': case 'LI': case 'LINK': - case 'LISTING': case 'MARQUEE': case 'MATH': case 'META': @@ -1021,7 +1034,6 @@ private function step_in_body() { case 'OPTION': case 'PARAM': case 'PLAINTEXT': - case 'PRE': case 'RB': case 'RP': case 'RT': diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessor.php b/tests/phpunit/tests/html-api/wpHtmlProcessor.php index c556d7e36a76f..2e17b1a9a0df2 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessor.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessor.php @@ -254,7 +254,6 @@ public function data_unsupported_special_in_body_tags() { 'IFRAME' => array( 'IFRAME' ), 'INPUT' => array( 'INPUT' ), 'LINK' => array( 'LINK' ), - 'LISTING' => array( 'LISTING' ), 'MARQUEE' => array( 'MARQUEE' ), 'MATH' => array( 'MATH' ), 'META' => array( 'META' ), @@ -267,7 +266,6 @@ public function data_unsupported_special_in_body_tags() { 'OPTION' => array( 'OPTION' ), 'PARAM' => array( 'PARAM' ), 'PLAINTEXT' => array( 'PLAINTEXT' ), - 'PRE' => array( 'PRE' ), 'RB' => array( 'RB' ), 'RP' => array( 'RP' ), 'RT' => array( 'RT' ), diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 7da3730910cf5..4e769ab2ca293 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -176,7 +176,6 @@ public function data_unsupported_elements() { 'IFRAME', 'INPUT', 'LINK', - 'LISTING', // Deprecated, use PRE instead. 'MARQUEE', // Deprecated. 'MATH', 'META', @@ -188,7 +187,6 @@ public function data_unsupported_elements() { 'OPTGROUP', 'OPTION', 'PLAINTEXT', // Neutralized. - 'PRE', 'RB', // Neutralized. 'RP', 'RT', From 3d154d7a0fafedc615f50e39ceea1c1b0a6723c4 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Fri, 19 Jan 2024 23:58:08 +0000 Subject: [PATCH 015/157] Media: Revert [57310]. This commit reintroduced a minor data exposure issue. Props swissspidy. See #59866, #57913. git-svn-id: https://develop.svn.wordpress.org/trunk@57318 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/canonical.php | 17 +++----- tests/phpunit/tests/canonical.php | 68 ++----------------------------- 2 files changed, 9 insertions(+), 76 deletions(-) diff --git a/src/wp-includes/canonical.php b/src/wp-includes/canonical.php index 2935a72662e32..0b94791fd9b45 100644 --- a/src/wp-includes/canonical.php +++ b/src/wp-includes/canonical.php @@ -550,20 +550,13 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $is_attachment_redirect = false; if ( is_attachment() && ! get_option( 'wp_attachment_pages_enabled' ) ) { - $attachment_id = get_query_var( 'attachment_id' ); - $attachment_post = get_post( $attachment_id ); - $attachment_parent_id = $attachment_post ? $attachment_post->post_parent : 0; + $attachment_id = get_query_var( 'attachment_id' ); - /* - * If an attachment is attached to a post, it inherits the parent post's status. Fetch the - * parent post to check its status later. - */ - if ( $attachment_parent_id ) { - $redirect_obj = get_post( $attachment_parent_id ); - } - $redirect_url = wp_get_attachment_url( $attachment_id ); + if ( current_user_can( 'read_post', $attachment_id ) ) { + $redirect_url = wp_get_attachment_url( $attachment_id ); - $is_attachment_redirect = true; + $is_attachment_redirect = true; + } } $redirect['query'] = preg_replace( '#^\??&*?#', '', $redirect['query'] ); diff --git a/tests/phpunit/tests/canonical.php b/tests/phpunit/tests/canonical.php index cfc8bc42da3c0..35bde13937dc3 100644 --- a/tests/phpunit/tests/canonical.php +++ b/tests/phpunit/tests/canonical.php @@ -407,83 +407,23 @@ public function test_feed_canonical_with_not_exists_query() { } /** - * Test canonical redirects for attachment pages when the option is disabled. - * * @ticket 57913 - * @ticket 59866 - * - * @dataProvider data_canonical_attachment_page_redirect_with_option_disabled */ - public function test_canonical_attachment_page_redirect_with_option_disabled( $expected, $user = null, $parent_post_status = '' ) { + public function test_canonical_attachment_page_redirect_with_option_disabled() { add_filter( 'pre_option_wp_attachment_pages_enabled', '__return_false' ); - if ( '' !== $parent_post_status ) { - $parent_post_id = self::factory()->post->create( - array( - 'post_status' => $parent_post_status, - ) - ); - } else { - $parent_post_id = 0; - } - $filename = DIR_TESTDATA . '/images/test-image.jpg'; $contents = file_get_contents( $filename ); $upload = wp_upload_bits( wp_basename( $filename ), null, $contents ); - $attachment_id = $this->_make_attachment( $upload, $parent_post_id ); - $attachment_url = wp_get_attachment_url( $attachment_id ); + $attachment_id = $this->_make_attachment( $upload ); $attachment_page = get_permalink( $attachment_id ); - // Set as anonymous/logged out user. - if ( null !== $user ) { - wp_set_current_user( $user ); - } - $this->go_to( $attachment_page ); - $url = redirect_canonical( $attachment_page, false ); - if ( is_string( $expected ) ) { - $expected = str_replace( '%%attachment_url%%', $attachment_url, $expected ); - } + $url = redirect_canonical( $attachment_page, false ); + $expected = wp_get_attachment_url( $attachment_id ); $this->assertSame( $expected, $url ); } - - /** - * Data provider for test_canonical_attachment_page_redirect_with_option_disabled(). - * - * @return array[] - */ - public function data_canonical_attachment_page_redirect_with_option_disabled() { - return array( - 'logged out user, no parent' => array( - '%%attachment_url%%', - 0, - ), - 'logged in user, no parent' => array( - '%%attachment_url%%', - ), - 'logged out user, private parent' => array( - null, - 0, - 'private', - ), - 'logged in user, private parent' => array( - '%%attachment_url%%', - null, - 'private', - ), - 'logged out user, public parent' => array( - '%%attachment_url%%', - 0, - 'publish', - ), - 'logged in user, public parent' => array( - '%%attachment_url%%', - null, - 'publish', - ), - ); - } } From edcc85c31ca676d04e61862b5f23ce5fa278d31f Mon Sep 17 00:00:00 2001 From: Dennis Snell Date: Sat, 20 Jan 2024 00:13:19 +0000 Subject: [PATCH 016/157] HTML API: Cleanup tests and list of void elements. This patch adds newly supported elements to tests that should have been updated in recent PRs, but which were merged without that. Those PRs removed failing tests showing that the elements were unsupported, but did not add the elements to the list of supported ones. It also removes some elements from the special-exclusion list of unsupported IN BODY elements. These did not present in failing tests because earlier conditions in the switch structure caught the tags before hitting the default block. Finally it adds some missing elements to the list of void elements. These elements are not listed as void in the HTML specification because they are deprecated. However, they are treated as void for the sake of HTML serialization and the parsing rules indicate that they behave as void elements, so it's safe to list them within the HTML API as void. Developed in WordPress/wordpress-develop#5913 Fixes #60307 git-svn-id: https://develop.svn.wordpress.org/trunk@57319 602fd350-edb4-49c9-b593-d223f7449a82 --- .../html-api/class-wp-html-processor.php | 10 ++++------ .../tests/html-api/wpHtmlProcessorBreadcrumbs.php | 14 ++++++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/html-api/class-wp-html-processor.php b/src/wp-includes/html-api/class-wp-html-processor.php index 65fcfbe236ee5..58d34b2833eaa 100644 --- a/src/wp-includes/html-api/class-wp-html-processor.php +++ b/src/wp-includes/html-api/class-wp-html-processor.php @@ -1002,7 +1002,6 @@ private function step_in_body() { */ switch ( $tag_name ) { case 'APPLET': - case 'AREA': case 'BASE': case 'BASEFONT': case 'BGSOUND': @@ -1010,8 +1009,6 @@ private function step_in_body() { case 'CAPTION': case 'COL': case 'COLGROUP': - case 'DD': - case 'DT': case 'FORM': case 'FRAME': case 'FRAMESET': @@ -1019,7 +1016,6 @@ private function step_in_body() { case 'HTML': case 'IFRAME': case 'INPUT': - case 'LI': case 'LINK': case 'MARQUEE': case 'MATH': @@ -1029,7 +1025,6 @@ private function step_in_body() { case 'NOFRAMES': case 'NOSCRIPT': case 'OBJECT': - case 'OL': case 'OPTGROUP': case 'OPTION': case 'PARAM': @@ -1055,7 +1050,6 @@ private function step_in_body() { case 'TITLE': case 'TR': case 'TRACK': - case 'UL': case 'XMP': $this->last_error = self::ERROR_UNSUPPORTED; throw new WP_HTML_Unsupported_Exception( "Cannot process {$tag_name} element." ); @@ -1709,15 +1703,19 @@ public static function is_void( $tag_name ) { return ( 'AREA' === $tag_name || 'BASE' === $tag_name || + 'BASEFONT' === $tag_name || // Obsolete but still treated as void. + 'BGSOUND' === $tag_name || // Obsolete but still treated as void. 'BR' === $tag_name || 'COL' === $tag_name || 'EMBED' === $tag_name || + 'FRAME' === $tag_name || 'HR' === $tag_name || 'IMG' === $tag_name || 'INPUT' === $tag_name || 'LINK' === $tag_name || 'KEYGEN' === $tag_name || // Obsolete but still treated as void. 'META' === $tag_name || + 'PARAM' === $tag_name || // Obsolete but still treated as void. 'SOURCE' === $tag_name || 'TRACK' === $tag_name || 'WBR' === $tag_name diff --git a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php index 4e769ab2ca293..02098f2300d5f 100644 --- a/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php +++ b/tests/phpunit/tests/html-api/wpHtmlProcessorBreadcrumbs.php @@ -40,6 +40,7 @@ public function data_single_tag_of_supported_elements() { 'ABBR', 'ACRONYM', // Neutralized. 'ADDRESS', + 'AREA', 'ARTICLE', 'ASIDE', 'AUDIO', @@ -48,6 +49,7 @@ public function data_single_tag_of_supported_elements() { 'BDO', 'BIG', 'BLINK', // Deprecated. + 'BR', 'BUTTON', 'CANVAS', 'CENTER', // Neutralized. @@ -65,6 +67,7 @@ public function data_single_tag_of_supported_elements() { 'DL', 'DT', 'EM', + 'EMBED', 'FIELDSET', 'FIGCAPTION', 'FIGURE', @@ -78,22 +81,25 @@ public function data_single_tag_of_supported_elements() { 'H6', 'HEADER', 'HGROUP', + 'HR', 'I', 'IMG', 'INS', 'LI', - 'ISINDEX', // Deprecated + 'ISINDEX', // Deprecated. 'KBD', + 'KEYGEN', // Deprecated. 'LABEL', 'LEGEND', + 'LISTING', // Deprecated. 'MAIN', 'MAP', 'MARK', 'MENU', 'METER', - 'MULTICOL', // Deprecated + 'MULTICOL', // Deprecated. 'NAV', - 'NEXTID', // Deprecated + 'NEXTID', // Deprecated. 'OL', 'OUTPUT', 'P', @@ -106,7 +112,7 @@ public function data_single_tag_of_supported_elements() { 'SECTION', 'SLOT', 'SMALL', - 'SPACER', // Deprecated + 'SPACER', // Deprecated. 'SPAN', 'STRIKE', 'STRONG', From 74abf14b3db982f31228f30120ec399be454a956 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 20 Jan 2024 16:06:31 +0000 Subject: [PATCH 017/157] Docs: Correct the placement of `@global` tags in `wp-settings.php`. Props shailu25, mukesh27. Fixes #60146. git-svn-id: https://develop.svn.wordpress.org/trunk@57320 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-settings.php | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/wp-settings.php b/src/wp-settings.php index c8835db31a005..d9da4172ee58b 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -53,8 +53,9 @@ * If not already configured, `$blog_id` will default to 1 in a single site * configuration. In multisite, it will be overridden by default in ms-settings.php. * - * @global int $blog_id * @since 2.0.0 + * + * @global int $blog_id */ global $blog_id; @@ -116,8 +117,9 @@ require ABSPATH . WPINC . '/pomo/mo.php'; /** - * @global wpdb $wpdb WordPress database abstraction object. * @since 0.71 + * + * @global wpdb $wpdb WordPress database abstraction object. */ global $wpdb; // Include the wpdb class and, if present, a db.php database drop-in. @@ -524,8 +526,9 @@ /** * WordPress Query object * - * @global WP_Query $wp_the_query WordPress Query object. * @since 2.0.0 + * + * @global WP_Query $wp_the_query WordPress Query object. */ $GLOBALS['wp_the_query'] = new WP_Query(); @@ -533,40 +536,45 @@ * Holds the reference to {@see $wp_the_query}. * Use this global for WordPress queries * - * @global WP_Query $wp_query WordPress Query object. * @since 1.5.0 + * + * @global WP_Query $wp_query WordPress Query object. */ $GLOBALS['wp_query'] = $GLOBALS['wp_the_query']; /** * Holds the WordPress Rewrite object for creating pretty URLs * - * @global WP_Rewrite $wp_rewrite WordPress rewrite component. * @since 1.5.0 + * + * @global WP_Rewrite $wp_rewrite WordPress rewrite component. */ $GLOBALS['wp_rewrite'] = new WP_Rewrite(); /** * WordPress Object * - * @global WP $wp Current WordPress environment instance. * @since 2.0.0 + * + * @global WP $wp Current WordPress environment instance. */ $GLOBALS['wp'] = new WP(); /** * WordPress Widget Factory Object * - * @global WP_Widget_Factory $wp_widget_factory * @since 2.8.0 + * + * @global WP_Widget_Factory $wp_widget_factory */ $GLOBALS['wp_widget_factory'] = new WP_Widget_Factory(); /** * WordPress User Roles * - * @global WP_Roles $wp_roles WordPress role management object. * @since 2.0.0 + * + * @global WP_Roles $wp_roles WordPress role management object. */ $GLOBALS['wp_roles'] = new WP_Roles(); @@ -593,8 +601,9 @@ /** * WordPress Locale object for loading locale domain date and various strings. * - * @global WP_Locale $wp_locale WordPress date and time locale object. * @since 2.1.0 + * + * @global WP_Locale $wp_locale WordPress date and time locale object. */ $GLOBALS['wp_locale'] = new WP_Locale(); From 4a2eb5c23d824b118785607f43a3305499367daa Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sun, 21 Jan 2024 18:52:45 +0000 Subject: [PATCH 018/157] Plugins: Correct table layout on smaller screens. This ensures that the message about deleting a plugin or having no plugins installed is displayed in full width. Follow-up to [26134], [33016]. Props shailu25, mukesh27, passoniate, JavierCasares, sabernhardt. Fixes #50069. git-svn-id: https://develop.svn.wordpress.org/trunk@57321 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/list-tables.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/wp-admin/css/list-tables.css b/src/wp-admin/css/list-tables.css index 07cbc6229d07a..3c7c2c9656683 100644 --- a/src/wp-admin/css/list-tables.css +++ b/src/wp-admin/css/list-tables.css @@ -2143,6 +2143,11 @@ div.action-links, padding: 10px 9px; /* reset from other list tables that have a label at this width */ } + #wpbody-content .wp-list-table.plugins .plugin-deleted-tr td, + #wpbody-content .wp-list-table.plugins .no-items td { + display: table-cell; + } + /* Plugin description hidden via Screen Options */ #wpbody-content .wp-list-table.plugins .desc.hidden { display: none; From 5cd843e235ba9fa40cf716c7e52abc823a48ba7c Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Mon, 22 Jan 2024 11:41:33 +0000 Subject: [PATCH 019/157] Build/Test Tools: Expand "imagemin" Grunt task to cover default themes. Runs `npm run grunt precommit:image` to minify/compress images in the repository. Props desrosj. Fixes #58996. git-svn-id: https://develop.svn.wordpress.org/trunk@57322 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 1 + src/wp-admin/images/bubble_bg-2x.gif | Bin 424 -> 424 bytes src/wp-admin/images/loading.gif | Bin 1372 -> 1368 bytes src/wp-admin/images/media-button-music.gif | Bin 206 -> 206 bytes src/wp-admin/images/media-button-other.gif | Bin 248 -> 248 bytes src/wp-admin/images/wpspin_light-2x.gif | Bin 8875 -> 8875 bytes src/wp-admin/images/wpspin_light.gif | Bin 2052 -> 2052 bytes src/wp-admin/images/xit.gif | Bin 181 -> 181 bytes .../images/headers/chessboard-thumbnail.jpg | Bin 6420 -> 6488 bytes .../images/headers/chessboard.jpg | Bin 52548 -> 53510 bytes .../images/headers/hanoi-thumbnail.jpg | Bin 4584 -> 4760 bytes .../twentyeleven/images/headers/hanoi.jpg | Bin 39868 -> 40395 bytes .../images/headers/lanterns-thumbnail.jpg | Bin 8195 -> 8245 bytes .../twentyeleven/images/headers/lanterns.jpg | Bin 91152 -> 91361 bytes .../images/headers/pine-cone-thumbnail.jpg | Bin 3770 -> 4002 bytes .../twentyeleven/images/headers/pine-cone.jpg | Bin 38272 -> 38651 bytes .../images/headers/shore-thumbnail.jpg | Bin 6035 -> 6163 bytes .../twentyeleven/images/headers/shore.jpg | Bin 77120 -> 78024 bytes .../images/headers/trolley-thumbnail.jpg | Bin 6385 -> 6534 bytes .../twentyeleven/images/headers/trolley.jpg | Bin 62046 -> 62934 bytes .../images/headers/wheel-thumbnail.jpg | Bin 6460 -> 6583 bytes .../twentyeleven/images/headers/wheel.jpg | Bin 59833 -> 60724 bytes .../images/headers/willow-thumbnail.jpg | Bin 4297 -> 4452 bytes .../twentyeleven/images/headers/willow.jpg | Bin 64681 -> 65328 bytes .../images/patterns/pattern-flower.jpg | Bin 54992 -> 56634 bytes .../images/patterns/pattern-woman.jpg | Bin 134701 -> 139758 bytes .../twentyfifteen/assets/pier-seagull.jpg | Bin 329339 -> 327536 bytes .../twentyfifteen/assets/pier-seagulls.jpg | Bin 262409 -> 253757 bytes .../twentyfifteen/assets/pier-sunset.jpg | Bin 137086 -> 138124 bytes .../themes/twentyfourteen/images/bridge.jpg | Bin 138675 -> 137888 bytes .../themes/twentyfourteen/images/clouds.jpg | Bin 93526 -> 94572 bytes .../themes/twentyfourteen/images/person.jpg | Bin 155463 -> 150887 bytes .../themes/twentyfourteen/images/street.jpg | Bin 177017 -> 174760 bytes .../themes/twentyfourteen/images/sunset.jpg | Bin 114946 -> 112741 bytes .../twentynineteen/images/pattern_01.jpg | Bin 80701 -> 88803 bytes .../twentynineteen/images/pattern_02.jpg | Bin 16547 -> 17573 bytes .../twentynineteen/images/pattern_03.jpg | Bin 70966 -> 71137 bytes .../twentynineteen/images/pattern_04.jpg | Bin 42019 -> 43605 bytes .../themes/twentynineteen/screenshot.png | Bin 175535 -> 175254 bytes .../twentyseventeen/assets/images/coffee.jpg | Bin 117713 -> 120563 bytes .../assets/images/direct-light.jpg | Bin 217862 -> 216865 bytes .../assets/images/espresso.jpg | Bin 93540 -> 96641 bytes .../twentyseventeen/assets/images/header.jpg | Bin 114854 -> 117899 bytes .../assets/images/sandwich.jpg | Bin 171858 -> 173695 bytes .../twentyseventeen/assets/images/stripes.jpg | Bin 349221 -> 332839 bytes .../assets/images/white-border.jpg | Bin 156061 -> 153243 bytes .../themes/twentyseventeen/screenshot.png | Bin 363833 -> 363794 bytes .../images/headers/berries-thumbnail.jpg | Bin 5626 -> 5742 bytes .../twentyten/images/headers/berries.jpg | Bin 60505 -> 60696 bytes .../headers/cherryblossoms-thumbnail.jpg | Bin 6418 -> 6487 bytes .../images/headers/cherryblossoms.jpg | Bin 81579 -> 82037 bytes .../images/headers/concave-thumbnail.jpg | Bin 5692 -> 5802 bytes .../twentyten/images/headers/concave.jpg | Bin 38292 -> 38532 bytes .../images/headers/fern-thumbnail.jpg | Bin 5496 -> 5569 bytes .../themes/twentyten/images/headers/fern.jpg | Bin 24856 -> 25449 bytes .../images/headers/forestfloor-thumbnail.jpg | Bin 6646 -> 6705 bytes .../twentyten/images/headers/forestfloor.jpg | Bin 64595 -> 64870 bytes .../images/headers/inkwell-thumbnail.jpg | Bin 4039 -> 4199 bytes .../twentyten/images/headers/inkwell.jpg | Bin 39133 -> 39300 bytes .../images/headers/path-thumbnail.jpg | Bin 4536 -> 4682 bytes .../themes/twentyten/images/headers/path.jpg | Bin 51488 -> 51727 bytes .../images/headers/sunset-thumbnail.jpg | Bin 2194 -> 2484 bytes .../twentyten/images/headers/sunset.jpg | Bin 22115 -> 22830 bytes .../images/patterns/pattern-barn.jpg | Bin 108997 -> 111896 bytes .../images/patterns/pattern-dock.jpg | Bin 68989 -> 73415 bytes .../images/patterns/pattern-lake.jpg | Bin 40393 -> 45287 bytes .../images/block-patterns/bernal-cutaway.jpg | Bin 102937 -> 103178 bytes .../block-patterns/cylinder-interior.jpg | Bin 117132 -> 117468 bytes .../images/block-patterns/dark-red.jpg | Bin 1105 -> 2833 bytes .../images/block-patterns/orange.jpg | Bin 1105 -> 2065 bytes .../images/block-patterns/toroidal-colony.jpg | Bin 117566 -> 117652 bytes .../images/block-patterns/torus-interior.jpg | Bin 136190 -> 136681 bytes .../twentytwelve/images/pattern-jumble-1.jpg | Bin 104012 -> 106787 bytes .../twentytwelve/images/pattern-jumble-2.jpg | Bin 27392 -> 28277 bytes .../twentytwelve/images/pattern-jumble-3.jpg | Bin 29286 -> 30434 bytes .../twentytwelve/images/pattern-jumble-4.jpg | Bin 29937 -> 30930 bytes .../themes/twentytwentyfour/screenshot.png | Bin 956898 -> 940864 bytes .../assets/images/Daffodils.jpg | Bin 217634 -> 218742 bytes .../twentytwentyone/assets/images/Reading.jpg | Bin 267337 -> 268440 bytes .../assets/images/in-the-bois-de-boulogne.jpg | Bin 276539 -> 277384 bytes .../assets/images/playing-in-the-sand.jpg | Bin 198968 -> 200007 bytes .../roses-tremieres-hollyhocks-1884.jpg | Bin 287158 -> 288072 bytes .../assets/images/self-portrait-1885.jpg | Bin 196681 -> 197120 bytes .../images/the-garden-at-bougival-1884.jpg | Bin 268810 -> 269655 bytes .../images/villa-with-orange-trees-nice.jpg | Bin 258830 -> 259891 bytes .../assets/images/young-woman-in-mauve.jpg | Bin 156480 -> 157467 bytes .../themes/twentytwentythree/screenshot.png | Bin 95166 -> 74030 bytes .../assets/images/bird-on-black.jpg | Bin 28901 -> 31329 bytes .../assets/images/bird-on-gray.jpg | Bin 33742 -> 35687 bytes .../assets/images/bird-on-green.jpg | Bin 46484 -> 50998 bytes .../assets/images/bird-on-salmon.jpg | Bin 84360 -> 88729 bytes .../twentytwentytwo/assets/images/ducks.jpg | Bin 366525 -> 373006 bytes .../assets/images/flight-path-on-gray-a.jpg | Bin 35500 -> 42366 bytes .../assets/images/flight-path-on-gray-b.jpg | Bin 58207 -> 66761 bytes .../assets/images/flight-path-on-gray-c.jpg | Bin 74238 -> 84870 bytes .../assets/images/flight-path-on-salmon.jpg | Bin 32835 -> 35888 bytes .../assets/images/icon-bird.jpg | Bin 4911 -> 5245 bytes .../themes/twentytwentytwo/screenshot.png | Bin 162290 -> 160517 bytes src/wp-includes/images/smilies/icon_cry.gif | Bin 412 -> 412 bytes src/wp-includes/images/smilies/icon_lol.gif | Bin 331 -> 331 bytes .../images/smilies/icon_redface.gif | Bin 645 -> 645 bytes .../images/smilies/icon_rolleyes.gif | Bin 471 -> 471 bytes src/wp-includes/images/wpspin-2x.gif | Bin 8875 -> 8875 bytes src/wp-includes/images/wpspin.gif | Bin 2052 -> 2052 bytes src/wp-includes/images/xit.gif | Bin 181 -> 181 bytes 105 files changed, 1 insertion(+) diff --git a/Gruntfile.js b/Gruntfile.js index 92feec563818a..06a37e67e0991 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1033,6 +1033,7 @@ module.exports = function(grunt) { cwd: SOURCE_DIR, src: [ 'wp-{admin,includes}/images/**/*.{png,jpg,gif,jpeg}', + 'wp-content/themes/**/*.{png,jpg,gif,jpeg}', 'wp-includes/js/tinymce/skins/wordpress/images/*.{png,jpg,gif,jpeg}' ], dest: SOURCE_DIR diff --git a/src/wp-admin/images/bubble_bg-2x.gif b/src/wp-admin/images/bubble_bg-2x.gif index 8e34e01dcd4ea0b9f9c5df54811e8ddf0e499690..21302a34dc133911955009a529cb91171a6138ba 100644 GIT binary patch delta 50 zcmV-20L}lX1E>QKM@dFFIbkFK$N=*X0N7eEkq{&U`QqD=HzouDWN9{$VKD&)k&}@D I0FxyFgP3v;?*IS* delta 50 zcmV-20L}lX1E>QKM@dFFIbkFK$N=*X0QutEkq{&U*jg}=Hzou%WN8ACVKD*Lk&}@D I4U;7SgQ~j_%m4rY diff --git a/src/wp-admin/images/loading.gif b/src/wp-admin/images/loading.gif index fdc589f80979337f9c866cfc416e88826fd311f8..79d140e838ac30fb0b8af0b102338e17489153a3 100644 GIT binary patch literal 1368 zcmb`G{ZCU@7{|}Kz4!Lg(sG4vtA@GLTCgxIFDqD})O-7a6`dAkPMFCGtD}O3YSrMB za9b>I1yZonPPg)+__h$uG9yt*ia=4B#%xNKObu*q=$5I;wzy?Kuq(ru{l4=De9rgz zJl|*KszP0EISpv=hZxMx&PJor{{H@F&z?-G2V-w%aC?d|O~H8mQICJ+c13NVS)lj}CrBU$Y0p1; zJ|;sRiuhcRPPLBp+NQSV1g{)0dUU{ge1vHJMvk>ATry_4{2j4`V~xlDh| z$8wF2XN-7_NdOm@+k_a5DIzE*q=0~G=up+v21V;kgj2LcSi6rDS6C#f-GVJE`+s3)jA@$O!fJaJzh)3$Dl$xfDaEnrOFKbs+hf*(5oAo)# z-)j@cPqQK!)wGctS=a_nN`G^m$y;-0+xRr&urSFpml&Hx@f;XK0s%-Pc%Ya^0@4&2 zj=1PWz82n#jBXp_>^+>eL$Ve2>7)q~!4}F>>kGz@x)!60+js5V-x$1IX+hG#bwfB! zY)#s3!7=c{Xxs}f4FLY$(*ielIemzW*lz6Jc2y-ie9P5h*PCEs;d-srsGG>x6c<-9 zjquE)ApYRgg2O)FE_hiT?1JPudzuj%V~5q0yv@VeU21u&kS+eWr+8u|3?FuC7QEab z32p;l8b^@E(U9_)x7ReF0aw=l)dMWb0@%$NdjiMOxfObJOp(#r?gNGpa6sbDRwrPfm>pN%7*%VX#E=Zh8J%5!+<Rx4WY=?wV|DuFP5P19=|mtiQZ{Urr|X&UggnQIK8N3@oMpQ;1f zja@{F&HCM;*d5`b(sd6$KO()Odq{fUF1%2sXano7-L8FI<_noI9Wr0)evO-0*z=!s zkUtVBzq&kxayk{^RkF_x$jubSJO%7B)-Ajtm*p81Ni literal 1372 zcmb`H`%hD67{}jp?ddsC4_Ir*khQfHbhUIuGm545a!Lz$DX5GQvlXaPB!;>&h8IFl zyAq|KRU1Q;73{`_8lx^Vm;ebm3vxA;G@!vB6quWvyLaziZ*T9=(9p$;7stoPA3uIPJw1K(>eah<@6ON9I~n>79?AV3nW9!EXLH)xyidjq zp4MOHjQn~NiLI!#Auxs)0n~}10uuEdU0L50BDR`OQdPV$NP`O9^snHXrTPVe$XkA`yoTos4Wr&EU=pq`0QVbSITC`ptl9k z3o677Uq$&%)|>M!Xc9Z$sx6InaZaQ<1+G_$j*sAdd&c_LyNDf#FkC1)~^An zzOu8WCGF{-QEu1yicMetJXR%jnDx772P8JLbP>qMIgS$JfE0)1GWJB$ea^PlQaTds z+$GIAEbL;FtT9a*i#X)RpE7iN!nK_~u-UP%DP#{>80nAKrVsJ?k|VXJQen$W8UIDn z0N}O5V>4ucQ<>MR3rCMn!5Ovo z+w&m9o8ht$2aKdukfF#Z!T6P^0>BCd3G;a(LP1b`!f)&>KS+U|bH*aeORK~I%JoX( z3T=qX+DH%apqyZWM<>ptdOd@!z~HPH{Ty>3kP>B4Z}p5zh}Km4NFmd8Q+CF>_lv+y z$*jEB_-sI&#R$N-@o;M37S3WT0}jU+_{Mf2?t|UdK7pt>A$=Wv1Cz3qEYSq9##oPl z&yz7k14t2hq9c;`d<^A=Oqk5qa!^vb$-V7))+Im*aqK0FZ1k-s`E2OqmStoDnV8Kl z%+dMx>AqJBPuRn_m-aOfk>w4k(a4v!F5G*^7X!-E9yA)HY2jgT-e6azQsN!*ow53!ID5xT&f~ zd^2?^%BIlrEp6W#ZD~Z(Do|HZL5J7JUGhCH)I8!tttu5>;8&F1}8_y|@DcV+Dh z=WOjxTsSRQCVnV{Cr$l(QrfA~8^We!+9UQ|5!1{-_Xq6Mik^QoeEwHJ+(Qv?Tg!{f z@b9GIf>R$IDR-b(te0hldyU1D`}btByTwm`aOqNp6R##U!~Cie>+hnq9?5l~^i%9L KNS_RW4SxeY3X=5z diff --git a/src/wp-admin/images/media-button-music.gif b/src/wp-admin/images/media-button-music.gif index 3bcda105c6f50faf92589809799ef7610628b7b9..daa9101833a4febe051587e336fef1cf25c0049e 100644 GIT binary patch delta 59 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 Jl`J6Pe*i}UCyf9A delta 7968 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 hrBSO%7sU-x@%NDDuF6~cp#b$+%2q diff --git a/src/wp-admin/images/wpspin_light.gif b/src/wp-admin/images/wpspin_light.gif index fbf9be46c1094ba61cb73b88fe8fbfbca37dd30a..b9b7ae4875168c5582a2716ecdb71ed783fd3437 100644 GIT binary patch literal 2052 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 delta 6301 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 T+Bu2QOCaqd4m=$+U!r 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%0A& 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∋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
e4-lId`I`~Rh2FCSg?zw1b@FVAP=TbT_KcS zpQjVD{q9uO87O7=qj5#Nzm1yw83&cb*{N?uY&E13b&@SK=6QrPGAsTCAkbE5t?s+P4&6TfRNS*_xTJEQs-0 zz(<-Ji$7;&ORbu*p183Qiij4N^~h}}NB$z-l_4k3IPIfr-EI~Bu->8!b%tdeI4!x$ z-*G{Qp(m4L>67qxc~pb;-CU{cB1?(dkh+D(O9$q}_OD5fkV!E3mLbC5eH}M%N6Gzw z;NELEwt5IeN4eTkt}|7l)MA5=YImi36u5b%4*6bb2H-jIvbqh7CzB*W5ZqNxyTEvU zIWP~JW9g?0X3{Lbcr)Yq*bjQ6FM7w48G{2jU6&M@RV1eaB9%1d1u;3XJPl9X;VMdLCzHn6VDn(<8_v2(v{ zbj6EK#!u>sh*u?=f#+`@sE@1S+CdnR@QqG~*7K1iC$H8X?j0S<(l-(-+Rjc%wsr+z z(xA{qEQ?VSt@A6#@6mH;`RNhTdzv!e>e5hR&Q3d#D{6U3?Fci&l1!z14~JU4X@rrp zsc5P*-TdRRt%AqNWF#YToyhtj1?pZVYRY{znoN?HyfJ90*A-?wm9krWpGCfHb-Wp&4(JNSNNb3Ou|D8G zez>M)F=}IF5-l88Y`3hlkC80Y-j(83FI&3>(PXc>a}B(pB90AdJ6hPEzj~m&(@0Vg z(fA)9|A^7ktgkv`3^n!mFXm{b6&%OaoWDT6O^Y0KZ{!s|M()~1*;`p)$R~<`eS|jm z!9O4NjLVs)h;1!RfYV3ThIzx+XrVeqok(bd#M8Eb3%k)8Z`>DgCvkqYAan}bB$EpG zzT=jO?A@;wJA|`lb$_qUl!pyWL5%tpsqUGxSi4yoK&yavt31}j7Fe#u1A`6 z!W3;N9snv?y3RM)qc#I|;k|G=<7CUW-4Na&^EC{m_o?G01Ajk8wIaJAk zBTMu%nV#@XZgaBHvmJ>3ZG-3}QuOGP9l-g(u6WU?(=2u|d(FJK5x3IcB|&rU5w*a3 zJ69RLF2WuP?gIBdSv_&KMeK^zqq)-0QWZ2gfT|@=Jik&BOUf{aOumq6*VASt*<>(2 zmDcW=2*S!R9v+^F#SwB!6>%1cBsr*a^&$+I>L@IUKZz4;gL#NNT;$V>lc@1@e`taF z2|@r)Px81nYfIdT1FshQ*uLXGGZ$jVO1qKTcab&8W|4~^anDk(n0|}RAN5`6`TH`G e!)97xk}buJxz-C8Z=-sa={xn#UIIG2wEqLq11FUL delta 40919 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

`V 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