diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 76d1e45e3c6ce8..a3a2b1214f7835 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,16 +11,16 @@ updates: labels: - 'GitHub Actions' - '[Type] Build Tooling' + ignore: + - dependency-name: 'actions/setup-java' + versions: ['*'] + - dependency-name: 'gradle/*' + versions: ['*'] + - dependency-name: 'reactivecircus/*' + versions: ['*'] + - dependency-name: 'ruby/setup-ruby' + versions: ['*'] groups: github-actions: patterns: - '*' - exclude-patterns: - - 'actions/setup-java' - - 'gradle/*' - - 'reactivecircus/*' - react-native: - patterns: - - 'actions/setup-java' - - 'gradle/*' - - 'reactivecircus/*' diff --git a/backport-changelog/6.8/8265.md b/backport-changelog/6.8/8265.md new file mode 100644 index 00000000000000..46fa3f01810514 --- /dev/null +++ b/backport-changelog/6.8/8265.md @@ -0,0 +1,3 @@ +https://github.com/WordPress/wordpress-develop/pull/8265 + +* https://github.com/WordPress/gutenberg/pull/69057 diff --git a/lib/compat/wordpress-6.8/blocks.php b/lib/compat/wordpress-6.8/blocks.php index 1d27215762fe42..2b0fcd19e200e1 100644 --- a/lib/compat/wordpress-6.8/blocks.php +++ b/lib/compat/wordpress-6.8/blocks.php @@ -222,15 +222,30 @@ function gutenberg_update_ignored_hooked_blocks_postmeta( $post ) { * Update Query `parents` argument validation for hierarchical post types. * A zero is a valid parent ID for hierarchical post types. Used to display top-level items. * + * Add new handler for `sticky` query argument. + * * @param array $query The query vars. * @param WP_Block $block Block instance. * @return array The filtered query vars. */ -function gutenberg_parents_query_vars_from_query_block( $query, $block ) { +function gutenberg_update_query_vars_from_query_block_6_8( $query, $block ) { if ( ! empty( $block->context['query']['parents'] ) && is_post_type_hierarchical( $query['post_type'] ) ) { $query['post_parent__in'] = array_unique( array_map( 'intval', $block->context['query']['parents'] ) ); } + if ( isset( $block->context['query']['sticky'] ) && ! empty( $block->context['query']['sticky'] ) ) { + if ( 'ignore' === $block->context['query']['sticky'] ) { + $sticky = get_option( 'sticky_posts' ); + + /** + * The core will set `post__not_in` because it asserts that any sticky value other than `only` is `exclude`. + * Let's override that while supporting any `post__not_in` values outside sticky post logic. + */ + $query['post__not_in'] = array_diff( $query['post__not_in'], ! empty( $sticky ) ? $sticky : array() ); + $query['ignore_sticky_posts'] = 1; + } + } + return $query; } -add_filter( 'query_loop_block_query_vars', 'gutenberg_parents_query_vars_from_query_block', 10, 2 ); +add_filter( 'query_loop_block_query_vars', 'gutenberg_update_query_vars_from_query_block_6_8', 10, 2 ); diff --git a/lib/experimental/navigation-theme-opt-in.php b/lib/experimental/navigation-theme-opt-in.php index 547aa8b88ea7d1..27dbabaf234486 100644 --- a/lib/experimental/navigation-theme-opt-in.php +++ b/lib/experimental/navigation-theme-opt-in.php @@ -29,6 +29,8 @@ * * @see https://core.trac.wordpress.org/ticket/50544 * + * @global WP_Customize_Manager $wp_customize + * * @param int $menu_id ID of the updated menu. * @param int $menu_item_db_id ID of the new menu item. * @param array $args An array of arguments used to update/add the menu item. diff --git a/packages/babel-preset-default/polyfill-exclusions.js b/packages/babel-preset-default/polyfill-exclusions.js index ca8c045d124146..9d0d18737540cb 100644 --- a/packages/babel-preset-default/polyfill-exclusions.js +++ b/packages/babel-preset-default/polyfill-exclusions.js @@ -28,4 +28,9 @@ module.exports = [ // // @see https://github.com/WordPress/gutenberg/pull/67230 /^es(next)?\.set\./, + // Remove Iterator feature polyfills. + // For the same reasoning as for Set exlusion above, we're excluding all iterator helper polyfills. + // + // @see https://github.com/WordPress/wordpress-develop/pull/8224#issuecomment-2636390007. + /^es(next)?\.iterator\./, ]; diff --git a/packages/block-editor/src/components/global-styles/filters-panel.js b/packages/block-editor/src/components/global-styles/filters-panel.js index 64322d0fd5d5c9..3aed7255e411b4 100644 --- a/packages/block-editor/src/components/global-styles/filters-panel.js +++ b/packages/block-editor/src/components/global-styles/filters-panel.js @@ -9,8 +9,6 @@ import clsx from 'clsx'; import { __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, - __experimentalItemGroup as ItemGroup, - __experimentalItem as Item, __experimentalHStack as HStack, __experimentalZStack as ZStack, __experimentalDropdownContentWrapper as DropdownContentWrapper, @@ -21,9 +19,11 @@ import { Dropdown, Flex, FlexItem, + Button, } from '@wordpress/components'; import { __, _x } from '@wordpress/i18n'; -import { useCallback, useMemo } from '@wordpress/element'; +import { useCallback, useMemo, useRef } from '@wordpress/element'; +import { reset as resetIcon } from '@wordpress/icons'; /** * Internal dependencies @@ -117,6 +117,50 @@ const LabeledColorIndicator = ( { indicator, label } ) => ( ); +const renderToggle = + ( duotone, resetDuotone ) => + ( { onToggle, isOpen } ) => { + const duotoneButtonRef = useRef( undefined ); + + const toggleProps = { + onClick: onToggle, + className: clsx( { 'is-open': isOpen } ), + 'aria-expanded': isOpen, + ref: duotoneButtonRef, + }; + + const removeButtonProps = { + onClick: () => { + if ( isOpen ) { + onToggle(); + } + resetDuotone(); + // Return focus to parent button. + duotoneButtonRef.current?.focus(); + }, + className: 'block-editor-panel-duotone-settings__reset', + label: __( 'Reset' ), + }; + + return ( + <> + + { duotone && ( + diff --git a/packages/block-editor/src/components/global-styles/style.scss b/packages/block-editor/src/components/global-styles/style.scss index 5684cf9c0d3034..3645586f283115 100644 --- a/packages/block-editor/src/components/global-styles/style.scss +++ b/packages/block-editor/src/components/global-styles/style.scss @@ -58,6 +58,11 @@ } } +.block-editor-global-styles-filters-panel__dropdown { + border: 1px solid $gray-300; + border-radius: $radius-small; +} + // These styles are similar to the color palette. .block-editor-global-styles__shadow-indicator { appearance: none; @@ -100,3 +105,25 @@ /*rtl:ignore*/ direction: ltr; } + +.block-editor-panel-duotone-settings__reset { + position: absolute; + right: 0; + top: $grid-unit; + margin: auto $grid-unit auto; + opacity: 0; + @media not (prefers-reduced-motion) { + transition: opacity 0.1s ease-in-out; + } + + .block-editor-global-styles-filters-panel__dropdown:hover &, + &:focus, + &:hover { + opacity: 1; + } + + @media (hover: none) { + // Show reset button on devices that do not support hover. + opacity: 1; + } +} diff --git a/packages/block-library/src/post-template/edit.js b/packages/block-library/src/post-template/edit.js index c58990233f3615..35d0a95501a1b2 100644 --- a/packages/block-library/src/post-template/edit.js +++ b/packages/block-library/src/post-template/edit.js @@ -177,18 +177,27 @@ export default function PostTemplateEdit( { query.format = format; } - // If sticky is not set, it will return all posts in the results. - // If sticky is set to `only`, it will limit the results to sticky posts only. - // If it is anything else, it will exclude sticky posts from results. For the record the value stored is `exclude`. - if ( sticky ) { + /* + * Handle cases where sticky is set to `exclude` or `only`. + * Which works as a `post__in/post__not_in` query for sticky posts. + */ + if ( sticky && sticky !== 'ignore' ) { query.sticky = sticky === 'only'; } + + if ( sticky === 'ignore' ) { + // Remove any leftover sticky query parameter. + delete query.sticky; + query.ignore_sticky = true; + } + // If `inherit` is truthy, adjust conditionally the query to create a better preview. + let currentPostType = postType; if ( inherit ) { // Change the post-type if needed. if ( templateSlug?.startsWith( 'archive-' ) ) { query.postType = templateSlug.replace( 'archive-', '' ); - postType = query.postType; + currentPostType = query.postType; } else if ( templateCategory ) { query.categories = templateCategory[ 0 ]?.id; } else if ( templateTag ) { @@ -205,7 +214,7 @@ export default function PostTemplateEdit( { } // When we preview Query Loop blocks we should prefer the current // block's postType, which is passed through block context. - const usedPostType = previewPostType || postType; + const usedPostType = previewPostType || currentPostType; return { posts: getEntityRecords( 'postType', usedPostType, { ...query, diff --git a/packages/block-library/src/query/edit/inspector-controls/sticky-control.js b/packages/block-library/src/query/edit/inspector-controls/sticky-control.js index ee7ee31ba977a9..f478337998f388 100644 --- a/packages/block-library/src/query/edit/inspector-controls/sticky-control.js +++ b/packages/block-library/src/query/edit/inspector-controls/sticky-control.js @@ -6,6 +6,7 @@ import { __ } from '@wordpress/i18n'; const stickyOptions = [ { label: __( 'Include' ), value: '' }, + { label: __( 'Ignore' ), value: 'ignore' }, { label: __( 'Exclude' ), value: 'exclude' }, { label: __( 'Only' ), value: 'only' }, ]; diff --git a/packages/editor/src/components/post-author/check.js b/packages/editor/src/components/post-author/check.js index 0ae7a3963e243f..de781038d2dfd5 100644 --- a/packages/editor/src/components/post-author/check.js +++ b/packages/editor/src/components/post-author/check.js @@ -23,11 +23,14 @@ import { AUTHORS_QUERY } from './constants'; export default function PostAuthorCheck( { children } ) { const { hasAssignAuthorAction, hasAuthors } = useSelect( ( select ) => { const post = select( editorStore ).getCurrentPost(); - const authors = select( coreStore ).getUsers( AUTHORS_QUERY ); + const canAssignAuthor = post?._links?.[ 'wp:action-assign-author' ] + ? true + : false; return { - hasAssignAuthorAction: - post._links?.[ 'wp:action-assign-author' ] ?? false, - hasAuthors: authors?.length >= 1, + hasAssignAuthorAction: canAssignAuthor, + hasAuthors: canAssignAuthor + ? select( coreStore ).getUsers( AUTHORS_QUERY )?.length >= 1 + : false, }; }, [] ); diff --git a/packages/editor/src/components/post-publish-panel/maybe-category-panel.js b/packages/editor/src/components/post-publish-panel/maybe-category-panel.js index 66fdf985cc0d55..d3bca4417dbbf8 100644 --- a/packages/editor/src/components/post-publish-panel/maybe-category-panel.js +++ b/packages/editor/src/components/post-publish-panel/maybe-category-panel.js @@ -16,8 +16,12 @@ import { store as editorStore } from '../../store'; function MaybeCategoryPanel() { const hasNoCategory = useSelect( ( select ) => { const postType = select( editorStore ).getCurrentPostType(); - const { canUser, getEntityRecord, getTaxonomy } = select( coreStore ); - const categoriesTaxonomy = getTaxonomy( 'category' ); + const { canUser, getEntityRecord } = select( coreStore ); + const categoriesTaxonomy = getEntityRecord( + 'root', + 'taxonomy', + 'category' + ); const defaultCategoryId = canUser( 'read', { kind: 'root', name: 'site', diff --git a/packages/editor/src/components/post-publish-panel/maybe-tags-panel.js b/packages/editor/src/components/post-publish-panel/maybe-tags-panel.js index 537d62f382805e..4fa761ffbf71fa 100644 --- a/packages/editor/src/components/post-publish-panel/maybe-tags-panel.js +++ b/packages/editor/src/components/post-publish-panel/maybe-tags-panel.js @@ -36,7 +36,11 @@ const TagsPanel = () => { const MaybeTagsPanel = () => { const { hasTags, isPostTypeSupported } = useSelect( ( select ) => { const postType = select( editorStore ).getCurrentPostType(); - const tagsTaxonomy = select( coreStore ).getTaxonomy( 'post_tag' ); + const tagsTaxonomy = select( coreStore ).getEntityRecord( + 'root', + 'taxonomy', + 'post_tag' + ); const _isPostTypeSupported = tagsTaxonomy?.types?.includes( postType ); const areTagsFetched = tagsTaxonomy !== undefined; const tags = diff --git a/packages/editor/src/components/post-taxonomies/check.js b/packages/editor/src/components/post-taxonomies/check.js index b6b4d4f58e4e63..b89a89a54335d5 100644 --- a/packages/editor/src/components/post-taxonomies/check.js +++ b/packages/editor/src/components/post-taxonomies/check.js @@ -20,9 +20,11 @@ import { store as editorStore } from '../../store'; export default function PostTaxonomiesCheck( { children } ) { const hasTaxonomies = useSelect( ( select ) => { const postType = select( editorStore ).getCurrentPostType(); - const taxonomies = select( coreStore ).getTaxonomies( { - per_page: -1, - } ); + const taxonomies = select( coreStore ).getEntityRecords( + 'root', + 'taxonomy', + { per_page: -1 } + ); return taxonomies?.some( ( taxonomy ) => taxonomy.types.includes( postType ) ); diff --git a/packages/editor/src/components/post-taxonomies/flat-term-selector.js b/packages/editor/src/components/post-taxonomies/flat-term-selector.js index 890175534c8b4a..eb424e53c58de9 100644 --- a/packages/editor/src/components/post-taxonomies/flat-term-selector.js +++ b/packages/editor/src/components/post-taxonomies/flat-term-selector.js @@ -100,10 +100,10 @@ export function FlatTermSelector( { slug, __nextHasNoMarginBottom } ) { ( select ) => { const { getCurrentPost, getEditedPostAttribute } = select( editorStore ); - const { getEntityRecords, getTaxonomy, hasFinishedResolution } = + const { getEntityRecords, getEntityRecord, hasFinishedResolution } = select( coreStore ); const post = getCurrentPost(); - const _taxonomy = getTaxonomy( slug ); + const _taxonomy = getEntityRecord( 'root', 'taxonomy', slug ); const _termIds = _taxonomy ? getEditedPostAttribute( _taxonomy.rest_base ) : EMPTY_ARRAY; diff --git a/packages/editor/src/components/post-taxonomies/hierarchical-term-selector.js b/packages/editor/src/components/post-taxonomies/hierarchical-term-selector.js index ef2019ac3f0f44..0bc4b17ba1aa49 100644 --- a/packages/editor/src/components/post-taxonomies/hierarchical-term-selector.js +++ b/packages/editor/src/components/post-taxonomies/hierarchical-term-selector.js @@ -175,9 +175,9 @@ export function HierarchicalTermSelector( { slug } ) { ( select ) => { const { getCurrentPost, getEditedPostAttribute } = select( editorStore ); - const { getTaxonomy, getEntityRecords, isResolving } = + const { getEntityRecord, getEntityRecords, isResolving } = select( coreStore ); - const _taxonomy = getTaxonomy( slug ); + const _taxonomy = getEntityRecord( 'root', 'taxonomy', slug ); const post = getCurrentPost(); return { diff --git a/packages/editor/src/components/post-taxonomies/index.js b/packages/editor/src/components/post-taxonomies/index.js index dc2345fd6197f7..26ef06ee68ab3b 100644 --- a/packages/editor/src/components/post-taxonomies/index.js +++ b/packages/editor/src/components/post-taxonomies/index.js @@ -18,7 +18,11 @@ export function PostTaxonomies( { taxonomyWrapper = identity } ) { const { postType, taxonomies } = useSelect( ( select ) => { return { postType: select( editorStore ).getCurrentPostType(), - taxonomies: select( coreStore ).getTaxonomies( { per_page: -1 } ), + taxonomies: select( coreStore ).getEntityRecords( + 'root', + 'taxonomy', + { per_page: -1 } + ), }; }, [] ); const visibleTaxonomies = ( taxonomies ?? [] ).filter( diff --git a/packages/editor/src/components/post-taxonomies/test/index.js b/packages/editor/src/components/post-taxonomies/test/index.js index 1f386f4c2fab15..60f07c5aa417a6 100644 --- a/packages/editor/src/components/post-taxonomies/test/index.js +++ b/packages/editor/src/components/post-taxonomies/test/index.js @@ -44,6 +44,19 @@ describe( 'PostTaxonomies', () => { }, }; + const allTaxonomies = [ genresTaxonomy, categoriesTaxonomy ]; + + const hidesUI = [ + genresTaxonomy, + { + ...categoriesTaxonomy, + types: [ 'post', 'page', 'book' ], + visibility: { + show_ui: false, + }, + }, + ]; + beforeEach( () => { jest.spyOn( select( editorStore ), 'getCurrentPost' ).mockReturnValue( { _links: { @@ -70,8 +83,8 @@ describe( 'PostTaxonomies', () => { }, } ); - jest.spyOn( select( coreStore ), 'getTaxonomy' ).mockImplementation( - ( slug ) => { + jest.spyOn( select( coreStore ), 'getEntityRecord' ).mockImplementation( + ( kind, name, slug ) => { switch ( slug ) { case 'category': { return categoriesTaxonomy; @@ -91,8 +104,11 @@ describe( 'PostTaxonomies', () => { select( editorStore ), 'getCurrentPostType' ).mockReturnValue( 'page' ); - jest.spyOn( select( coreStore ), 'getTaxonomies' ).mockReturnValue( - taxonomies + jest.spyOn( + select( coreStore ), + 'getEntityRecords' + ).mockImplementation( ( kind, name ) => + kind === 'root' && name === 'taxonomy' ? taxonomies : null ); const { container } = render( ); @@ -105,10 +121,12 @@ describe( 'PostTaxonomies', () => { select( editorStore ), 'getCurrentPostType' ).mockReturnValue( 'book' ); - jest.spyOn( select( coreStore ), 'getTaxonomies' ).mockReturnValue( [ - genresTaxonomy, - categoriesTaxonomy, - ] ); + jest.spyOn( + select( coreStore ), + 'getEntityRecords' + ).mockImplementation( ( kind, name ) => + kind === 'root' && name === 'taxonomy' ? allTaxonomies : null + ); render( ); @@ -129,16 +147,12 @@ describe( 'PostTaxonomies', () => { select( editorStore ), 'getCurrentPostType' ).mockReturnValue( 'book' ); - jest.spyOn( select( coreStore ), 'getTaxonomies' ).mockReturnValue( [ - genresTaxonomy, - { - ...categoriesTaxonomy, - types: [ 'post', 'page', 'book' ], - visibility: { - show_ui: false, - }, - }, - ] ); + jest.spyOn( + select( coreStore ), + 'getEntityRecords' + ).mockImplementation( ( kind, name ) => + kind === 'root' && name === 'taxonomy' ? hidesUI : null + ); render( ); diff --git a/phpunit/script-dependencies-test.php b/phpunit/script-dependencies-test.php new file mode 100644 index 00000000000000..66f5c0a7e3dc57 --- /dev/null +++ b/phpunit/script-dependencies-test.php @@ -0,0 +1,48 @@ +registered; + $dependents = array(); + + // Iterate over all registered scripts, finding dependents of the `wp-polyfill` script. + // Based on private `WP_Scripts::get_dependents` method. + foreach ( $registered_scripts as $registered_handle => $args ) { + // Ignore bundled packages, they don't load separate polyfills. + if ( in_array( $registered_handle, $this->bundled_scripts, true ) ) { + continue; + } + + if ( in_array( 'wp-polyfill', $args->deps, true ) ) { + $dependents[] = $registered_handle; + } + } + + // This list should get smaller over time as we remove `wp-polyfill` dependencies. + // If the list update is intentional, please add a comment explaining why. + $expected = array( + 'react', + 'wp-blob', + 'wp-block-editor', + 'wp-block-library', + 'wp-blocks', + 'wp-edit-site', + 'wp-core-data', + 'wp-editor', + 'wp-router', + 'wp-url', + 'wp-widgets', + ); + + $this->assertEqualSets( $expected, $dependents ); + } +} diff --git a/test/e2e/specs/editor/various/block-editor-keyboard-shortcuts.spec.js b/test/e2e/specs/editor/various/block-editor-keyboard-shortcuts.spec.js index 967baccfcbe4ef..a368d4b7f02516 100644 --- a/test/e2e/specs/editor/various/block-editor-keyboard-shortcuts.spec.js +++ b/test/e2e/specs/editor/various/block-editor-keyboard-shortcuts.spec.js @@ -192,7 +192,7 @@ test.describe( 'Block editor keyboard shortcuts', () => { .getByRole( 'menuitem', { name: 'Create pattern' } ) .click(); await page - .getByRole( 'dialog', { name: 'add new pattern' } ) + .getByRole( 'dialog', { name: 'add pattern' } ) .getByRole( 'textbox', { name: 'Name' } ) .fill( 'hi' ); diff --git a/test/e2e/specs/editor/various/inserting-blocks.spec.js b/test/e2e/specs/editor/various/inserting-blocks.spec.js index 3cc369f75f2237..4de9f736ceafa1 100644 --- a/test/e2e/specs/editor/various/inserting-blocks.spec.js +++ b/test/e2e/specs/editor/various/inserting-blocks.spec.js @@ -269,7 +269,7 @@ test.describe( 'Inserting blocks (@firefox, @webkit)', () => { .click(); await page.getByRole( 'menuitem', { name: 'Create pattern' } ).click(); const createPatternDialog = page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) diff --git a/test/e2e/specs/editor/various/pattern-overrides.spec.js b/test/e2e/specs/editor/various/pattern-overrides.spec.js index 145fa9a93bab13..d3ebf357615950 100644 --- a/test/e2e/specs/editor/various/pattern-overrides.spec.js +++ b/test/e2e/specs/editor/various/pattern-overrides.spec.js @@ -40,16 +40,16 @@ test.describe( 'Pattern Overrides', () => { await page .getByRole( 'region', { name: 'Patterns content' } ) - .getByRole( 'button', { name: 'add new pattern' } ) + .getByRole( 'button', { name: 'add pattern' } ) .click(); await page - .getByRole( 'menu', { name: 'add new pattern' } ) - .getByRole( 'menuitem', { name: 'add new pattern' } ) + .getByRole( 'menu', { name: 'add pattern' } ) + .getByRole( 'menuitem', { name: 'add pattern' } ) .click(); const createPatternDialog = page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) diff --git a/test/e2e/specs/editor/various/patterns.spec.js b/test/e2e/specs/editor/various/patterns.spec.js index a3af79289f2701..f5f73169a0f7f9 100644 --- a/test/e2e/specs/editor/various/patterns.spec.js +++ b/test/e2e/specs/editor/various/patterns.spec.js @@ -37,7 +37,7 @@ test.describe( 'Unsynced pattern', () => { await page.getByRole( 'menuitem', { name: 'Create pattern' } ).click(); const createPatternDialog = page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) @@ -136,7 +136,7 @@ test.describe( 'Synced pattern', () => { await page.getByRole( 'menuitem', { name: 'Create pattern' } ).click(); const createPatternDialog = page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) @@ -376,7 +376,7 @@ test.describe( 'Synced pattern', () => { await editor.clickBlockOptionsMenuItem( 'Create pattern' ); const createPatternDialog = page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) @@ -426,7 +426,7 @@ test.describe( 'Synced pattern', () => { await editor.clickBlockOptionsMenuItem( 'Create pattern' ); const createPatternDialog = editor.page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) @@ -610,7 +610,7 @@ test.describe( 'Synced pattern', () => { await editor.clickBlockOptionsMenuItem( 'Create pattern' ); const createPatternDialog = editor.page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) diff --git a/test/e2e/specs/editor/various/taxonomies.spec.js b/test/e2e/specs/editor/various/taxonomies.spec.js index efd8c9c6ee7fe0..3c8231facd3b70 100644 --- a/test/e2e/specs/editor/various/taxonomies.spec.js +++ b/test/e2e/specs/editor/various/taxonomies.spec.js @@ -79,9 +79,7 @@ test.describe( 'Taxonomies', () => { const tagName = 'tag-' + generateRandomNumber(); const tags = page.locator( '.components-form-token-field__token-text' ); - await page - .getByRole( 'combobox', { name: 'Add New Tag' } ) - .fill( tagName ); + await page.getByRole( 'combobox', { name: 'Add tag' } ).fill( tagName ); await page.keyboard.press( 'Enter' ); await expect( tags ).toHaveCount( 1 ); @@ -116,9 +114,7 @@ test.describe( 'Taxonomies', () => { const tagName = "tag'-" + generateRandomNumber(); const tags = page.locator( '.components-form-token-field__token-text' ); - await page - .getByRole( 'combobox', { name: 'Add New Tag' } ) - .fill( tagName ); + await page.getByRole( 'combobox', { name: 'Add tag' } ).fill( tagName ); await page.keyboard.press( 'Enter' ); await expect( tags ).toHaveCount( 1 ); diff --git a/test/e2e/specs/editor/various/writing-flow.spec.js b/test/e2e/specs/editor/various/writing-flow.spec.js index 4077d6dcc58200..da3e62e35df53c 100644 --- a/test/e2e/specs/editor/various/writing-flow.spec.js +++ b/test/e2e/specs/editor/various/writing-flow.spec.js @@ -1088,7 +1088,7 @@ test.describe( 'Writing Flow (@firefox, @webkit)', () => { await editor.clickBlockOptionsMenuItem( 'Create pattern' ); const createPatternDialog = editor.page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) diff --git a/test/e2e/specs/site-editor/block-style-variations.spec.js b/test/e2e/specs/site-editor/block-style-variations.spec.js index 1fa8972d34d6c8..1aa3c576b72c05 100644 --- a/test/e2e/specs/site-editor/block-style-variations.spec.js +++ b/test/e2e/specs/site-editor/block-style-variations.spec.js @@ -302,7 +302,7 @@ class SiteEditorBlockStyleVariations { async function draftNewPage( page ) { await page.getByRole( 'button', { name: 'Pages' } ).click(); - await page.getByRole( 'button', { name: 'Add new page' } ).click(); + await page.getByRole( 'button', { name: 'Add page' } ).click(); await page .locator( 'role=dialog[name="Draft new: page"i]' ) .locator( 'role=textbox[name="title"i]' ) diff --git a/test/e2e/specs/site-editor/pages.spec.js b/test/e2e/specs/site-editor/pages.spec.js index 54f8a64e067cbf..1a8ab33b9e8843 100644 --- a/test/e2e/specs/site-editor/pages.spec.js +++ b/test/e2e/specs/site-editor/pages.spec.js @@ -5,7 +5,7 @@ const { test, expect } = require( '@wordpress/e2e-test-utils-playwright' ); async function draftNewPage( page ) { await page.getByRole( 'button', { name: 'Pages' } ).click(); - await page.getByRole( 'button', { name: 'Add new page' } ).click(); + await page.getByRole( 'button', { name: 'Add page' } ).click(); await page .locator( 'role=dialog[name="Draft new: page"i]' ) .locator( 'role=textbox[name="title"i]' ) @@ -247,7 +247,7 @@ test.describe( 'Pages', () => { // Create a custom template first. const templateName = 'demo'; await page.getByRole( 'button', { name: 'Templates' } ).click(); - await page.getByRole( 'button', { name: 'Add New Template' } ).click(); + await page.getByRole( 'button', { name: 'Add template' } ).click(); await page .getByRole( 'button', { name: 'A custom template can be manually applied to any post or page.', diff --git a/test/e2e/specs/site-editor/patterns.spec.js b/test/e2e/specs/site-editor/patterns.spec.js index 162ec15146c67e..dcb5d8c413877c 100644 --- a/test/e2e/specs/site-editor/patterns.spec.js +++ b/test/e2e/specs/site-editor/patterns.spec.js @@ -43,21 +43,21 @@ test.describe( 'Patterns', () => { await expect( patterns.content ).toContainText( 'No results' ); await patterns.content - .getByRole( 'button', { name: 'add new pattern' } ) + .getByRole( 'button', { name: 'add pattern' } ) .click(); const addNewMenuItem = page .getByRole( 'menu', { - name: 'add new pattern', + name: 'add pattern', } ) .getByRole( 'menuitem', { - name: 'add new pattern', + name: 'add pattern', } ); await expect( addNewMenuItem ).toBeFocused(); await addNewMenuItem.click(); const createPatternDialog = page.getByRole( 'dialog', { - name: 'add new pattern', + name: 'add pattern', } ); await createPatternDialog .getByRole( 'textbox', { name: 'Name' } ) diff --git a/test/e2e/specs/site-editor/site-editor-url-navigation.spec.js b/test/e2e/specs/site-editor/site-editor-url-navigation.spec.js index a0cc0af5463aed..580b1060227156 100644 --- a/test/e2e/specs/site-editor/site-editor-url-navigation.spec.js +++ b/test/e2e/specs/site-editor/site-editor-url-navigation.spec.js @@ -33,7 +33,7 @@ test.describe( 'Site editor url navigation', () => { await admin.visitSiteEditor(); await page.click( 'role=button[name="Templates"]' ); - await page.click( 'role=button[name="Add New Template"i]' ); + await page.click( 'role=button[name="Add Template"i]' ); await page .getByRole( 'button', { name: 'Single item: Post', @@ -54,10 +54,10 @@ test.describe( 'Site editor url navigation', () => { } ) => { await admin.visitSiteEditor(); await page.click( 'role=button[name="Patterns"i]' ); - await page.click( 'role=button[name="add new pattern"i]' ); + await page.click( 'role=button[name="add pattern"i]' ); await page - .getByRole( 'menu', { name: 'add new pattern' } ) - .getByRole( 'menuitem', { name: 'add new template part' } ) + .getByRole( 'menu', { name: 'add pattern' } ) + .getByRole( 'menuitem', { name: 'add template part' } ) .click(); // Fill in a name in the dialog that pops up. await page.type( 'role=dialog >> role=textbox[name="Name"i]', 'Demo' ); diff --git a/test/e2e/specs/site-editor/template-registration.spec.js b/test/e2e/specs/site-editor/template-registration.spec.js index 9856db97130386..4f35d81737ae29 100644 --- a/test/e2e/specs/site-editor/template-registration.spec.js +++ b/test/e2e/specs/site-editor/template-registration.spec.js @@ -275,7 +275,7 @@ test.describe( 'Block template registration', () => { await admin.visitSiteEditor( { postType: 'wp_template', } ); - await page.getByLabel( 'Add New Template' ).click(); + await page.getByLabel( 'Add template' ).click(); await page.getByRole( 'button', { name: 'Author Archives' } ).click(); await page .getByRole( 'button', { name: 'Author For a specific item' } ) diff --git a/test/e2e/specs/site-editor/templates.spec.js b/test/e2e/specs/site-editor/templates.spec.js index 0c43fa02fc73b8..7eeb61ec05746d 100644 --- a/test/e2e/specs/site-editor/templates.spec.js +++ b/test/e2e/specs/site-editor/templates.spec.js @@ -14,7 +14,7 @@ test.describe( 'Templates', () => { const templateName = 'demo'; await admin.visitSiteEditor(); await page.getByRole( 'button', { name: 'Templates' } ).click(); - await page.getByRole( 'button', { name: 'Add New Template' } ).click(); + await page.getByRole( 'button', { name: 'Add template' } ).click(); await page .getByRole( 'button', { name: 'A custom template can be manually applied to any post or page.',