From 213aa20befc2ac0c8d781bda74193fcfad67e4a4 Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Fri, 3 Mar 2023 14:57:34 +0100 Subject: [PATCH 1/9] Try to improve when the ellipsis shows --- .../block-library/src/post-excerpt/edit.js | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index 378aa34cd00baa..216e803b351944 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -123,14 +123,15 @@ export default function PostExcerptEditor( { * The excerpt length setting needs to be applied to both * the raw and the rendered excerpt depending on which is being used. */ - const rawOrRenderedExcerpt = !! renderedExcerpt + let rawOrRenderedExcerpt = !! renderedExcerpt ? strippedRenderedExcerpt : rawExcerpt; + rawOrRenderedExcerpt = rawOrRenderedExcerpt.trim(); + let trimmedExcerpt = ''; if ( wordCountType === 'words' ) { trimmedExcerpt = rawOrRenderedExcerpt - .trim() .split( ' ', excerptLength ) .join( ' ' ); } else if ( wordCountType === 'characters_excluding_spaces' ) { @@ -143,7 +144,6 @@ export default function PostExcerptEditor( { * so that the spaces are excluded from the word count. */ const excerptWithSpaces = rawOrRenderedExcerpt - .trim() .split( '', excerptLength ) .join( '' ); @@ -152,14 +152,13 @@ export default function PostExcerptEditor( { excerptWithSpaces.replaceAll( ' ', '' ).length; trimmedExcerpt = rawOrRenderedExcerpt - .trim() .split( '', excerptLength + numberOfSpaces ) .join( '' ); } else if ( wordCountType === 'characters_including_spaces' ) { - trimmedExcerpt = rawOrRenderedExcerpt.trim().split( '', excerptLength ); + trimmedExcerpt = rawOrRenderedExcerpt.split( '', excerptLength ); } - trimmedExcerpt = trimmedExcerpt + '...'; + const isTrimmed = trimmedExcerpt !== rawOrRenderedExcerpt ? true : false; const excerptContent = isEditable ? ( ) : (

- { trimmedExcerpt !== '...' - ? trimmedExcerpt - : __( 'No post excerpt found' ) } + { ! isTrimmed + ? rawOrRenderedExcerpt || __( 'No post excerpt found' ) + : trimmedExcerpt + '…' }

); return ( From 6034547546e83e4a599b0c80925e9995884ee528 Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Wed, 8 Mar 2023 12:13:41 +0100 Subject: [PATCH 2/9] Prevent editing excerpts when it is not supported --- .../block-library/src/post-excerpt/edit.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index 216e803b351944..430f37249ab79f 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -32,13 +32,24 @@ export default function PostExcerptEditor( { } ) { const isDescendentOfQueryLoop = Number.isFinite( queryId ); const userCanEdit = useCanEditEntity( 'postType', postType, postId ); - const isEditable = userCanEdit && ! isDescendentOfQueryLoop; - const [ rawExcerpt, setExcerpt, { rendered: renderedExcerpt, protected: isProtected } = {}, ] = useEntityProp( 'postType', postType, 'excerpt', postId ); + + /** + * The excerpt is editable if: + * - The user can edit the post + * - It is not a descendent of a Query Loop block + * - The post type supports excerpts + */ + const isEditable = + userCanEdit && + ! isDescendentOfQueryLoop && + renderedExcerpt && + rawExcerpt; + const blockProps = useBlockProps( { className: classnames( { [ `has-text-align-${ textAlign }` ]: textAlign, @@ -122,10 +133,11 @@ export default function PostExcerptEditor( { /** * The excerpt length setting needs to be applied to both * the raw and the rendered excerpt depending on which is being used. + * If there is no excerpt the value is set to '' to make sure it is not undefined. */ let rawOrRenderedExcerpt = !! renderedExcerpt ? strippedRenderedExcerpt - : rawExcerpt; + : rawExcerpt || ''; rawOrRenderedExcerpt = rawOrRenderedExcerpt.trim(); From 2ef5354bbb0829e9811548a38e5caf1683ee854c Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Thu, 9 Mar 2023 08:08:34 +0100 Subject: [PATCH 3/9] Update edit.js --- .../block-library/src/post-excerpt/edit.js | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index 430f37249ab79f..dd4520fb2237f1 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -6,7 +6,7 @@ import classnames from 'classnames'; /** * WordPress dependencies */ -import { useEntityProp } from '@wordpress/core-data'; +import { useEntityProp, store as coreStore } from '@wordpress/core-data'; import { useMemo } from '@wordpress/element'; import { AlignmentToolbar, @@ -18,6 +18,7 @@ import { } from '@wordpress/block-editor'; import { PanelBody, ToggleControl, RangeControl } from '@wordpress/components'; import { __, _x } from '@wordpress/i18n'; +import { useSelect } from '@wordpress/data'; /** * Internal dependencies @@ -38,6 +39,25 @@ export default function PostExcerptEditor( { { rendered: renderedExcerpt, protected: isProtected } = {}, ] = useEntityProp( 'postType', postType, 'excerpt', postId ); + // Check if the post type supports excerpts. + let postTypeSupportsExcerpts = useSelect( ( select ) => + postType + ? !! select( coreStore ).getPostType( postType )?.supports.excerpt + : false + ); + + /** + * Add an exception for the page post type, + * which is registered without support for the excerpt UI, + * but supports saving the excerpt to the database. + * See: https://core.trac.wordpress.org/browser/branches/6.1/src/wp-includes/post.php#L65 + * Without this exception, users that have excerpts saved to the database will + * not be able to edit the excerpts. + */ + if ( postType === 'page' ) { + postTypeSupportsExcerpts = true; + } + /** * The excerpt is editable if: * - The user can edit the post @@ -45,10 +65,7 @@ export default function PostExcerptEditor( { * - The post type supports excerpts */ const isEditable = - userCanEdit && - ! isDescendentOfQueryLoop && - renderedExcerpt && - rawExcerpt; + userCanEdit && ! isDescendentOfQueryLoop && postTypeSupportsExcerpts; const blockProps = useBlockProps( { className: classnames( { From afc2adde43db9a670a9d45427967f8c7f6133952 Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Thu, 9 Mar 2023 09:14:30 +0100 Subject: [PATCH 4/9] Remove unnecessary setExcerpt --- packages/block-library/src/post-excerpt/edit.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index dd4520fb2237f1..5348f2a05f8a96 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -238,7 +238,6 @@ export default function PostExcerptEditor( { value={ excerptLength } onChange={ ( value ) => { setAttributes( { excerptLength: value } ); - setExcerpt(); } } min="10" max="100" From 8890e7680a8266c52a88075f7c26b4e3e4499d27 Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Thu, 9 Mar 2023 10:09:50 +0100 Subject: [PATCH 5/9] Update edit.js --- packages/block-library/src/post-excerpt/edit.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index 5348f2a05f8a96..e4b9eea31089bf 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -150,12 +150,9 @@ export default function PostExcerptEditor( { /** * The excerpt length setting needs to be applied to both * the raw and the rendered excerpt depending on which is being used. - * If there is no excerpt the value is set to '' to make sure it is not undefined. + * If there is no excerpt the value is set to '' to make sure it is not undefined (See line 89). */ - let rawOrRenderedExcerpt = !! renderedExcerpt - ? strippedRenderedExcerpt - : rawExcerpt || ''; - + let rawOrRenderedExcerpt = rawExcerpt.trim || strippedRenderedExcerpt; rawOrRenderedExcerpt = rawOrRenderedExcerpt.trim(); let trimmedExcerpt = ''; From 36bebd68f73145cf23232d675b2e9d473420a6f1 Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Thu, 9 Mar 2023 10:10:32 +0100 Subject: [PATCH 6/9] Update edit.js --- packages/block-library/src/post-excerpt/edit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index e4b9eea31089bf..0c347e71aedc3b 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -152,7 +152,7 @@ export default function PostExcerptEditor( { * the raw and the rendered excerpt depending on which is being used. * If there is no excerpt the value is set to '' to make sure it is not undefined (See line 89). */ - let rawOrRenderedExcerpt = rawExcerpt.trim || strippedRenderedExcerpt; + let rawOrRenderedExcerpt = rawExcerpt || strippedRenderedExcerpt; rawOrRenderedExcerpt = rawOrRenderedExcerpt.trim(); let trimmedExcerpt = ''; From 564abcc69beb37df74c7882801b4cce39ee43f9b Mon Sep 17 00:00:00 2001 From: Ari Stathopoulos Date: Wed, 22 Mar 2023 12:29:06 +0200 Subject: [PATCH 7/9] Update packages/block-library/src/post-excerpt/edit.js Co-authored-by: Aki Hamano <54422211+t-hamano@users.noreply.github.com> --- packages/block-library/src/post-excerpt/edit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index 0c347e71aedc3b..52996b88240bb9 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -184,7 +184,7 @@ export default function PostExcerptEditor( { trimmedExcerpt = rawOrRenderedExcerpt.split( '', excerptLength ); } - const isTrimmed = trimmedExcerpt !== rawOrRenderedExcerpt ? true : false; + const isTrimmed = trimmedExcerpt !== rawOrRenderedExcerpt; const excerptContent = isEditable ? ( Date: Thu, 23 Mar 2023 08:39:20 +0100 Subject: [PATCH 8/9] Add a constant for the ellipsis. --- packages/block-library/src/post-excerpt/edit.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index c2cafa63c38405..9d1c942d8a3a4a 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -25,6 +25,8 @@ import { useSelect } from '@wordpress/data'; */ import { useCanEditEntity } from '../utils/hooks'; +const ELLIPSIS = '…'; + export default function PostExcerptEditor( { attributes: { textAlign, moreText, showMoreOnNewLine, excerptLength }, setAttributes, @@ -182,7 +184,6 @@ export default function PostExcerptEditor( { .join( '' ); } else if ( wordCountType === 'characters_including_spaces' ) { trimmedExcerpt = rawOrRenderedExcerpt - .trim() .split( '', excerptLength ) .join( '' ); } @@ -198,7 +199,7 @@ export default function PostExcerptEditor( { ? rawOrRenderedExcerpt : ( ! isTrimmed ? rawOrRenderedExcerpt - : trimmedExcerpt + '…' ) || + : trimmedExcerpt + ELLIPSIS ) || __( 'No post excerpt found' ) } onChange={ setExcerpt } @@ -208,7 +209,7 @@ export default function PostExcerptEditor( {

{ ! isTrimmed ? rawOrRenderedExcerpt || __( 'No post excerpt found' ) - : trimmedExcerpt + '…' } + : trimmedExcerpt + ELLIPSIS }

); return ( From 1bf58318a5c9ee213a4ab6e4057c4cfe9ba6571b Mon Sep 17 00:00:00 2001 From: Carolina Nymark Date: Thu, 23 Mar 2023 12:20:14 +0100 Subject: [PATCH 9/9] Update postTypeSupportsExcerpts to use an early return, simplify rawOrRenderedExcerpt --- .../block-library/src/post-excerpt/edit.js | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/block-library/src/post-excerpt/edit.js b/packages/block-library/src/post-excerpt/edit.js index 9d1c942d8a3a4a..c88a4ab9368829 100644 --- a/packages/block-library/src/post-excerpt/edit.js +++ b/packages/block-library/src/post-excerpt/edit.js @@ -41,24 +41,25 @@ export default function PostExcerptEditor( { { rendered: renderedExcerpt, protected: isProtected } = {}, ] = useEntityProp( 'postType', postType, 'excerpt', postId ); - // Check if the post type supports excerpts. - let postTypeSupportsExcerpts = useSelect( ( select ) => - postType - ? !! select( coreStore ).getPostType( postType )?.supports.excerpt - : false - ); - /** - * Add an exception for the page post type, + * Check if the post type supports excerpts. + * Add an exception and return early for the "page" post type, * which is registered without support for the excerpt UI, * but supports saving the excerpt to the database. * See: https://core.trac.wordpress.org/browser/branches/6.1/src/wp-includes/post.php#L65 * Without this exception, users that have excerpts saved to the database will * not be able to edit the excerpts. */ - if ( postType === 'page' ) { - postTypeSupportsExcerpts = true; - } + const postTypeSupportsExcerpts = useSelect( + ( select ) => { + if ( postType === 'page' ) { + return true; + } + return !! select( coreStore ).getPostType( postType )?.supports + .excerpt; + }, + [ postType ] + ); /** * The excerpt is editable if: @@ -95,6 +96,7 @@ export default function PostExcerptEditor( { ); return document.body.textContent || document.body.innerText || ''; }, [ renderedExcerpt ] ); + if ( ! postType || ! postId ) { return ( <> @@ -152,10 +154,10 @@ export default function PostExcerptEditor( { /** * The excerpt length setting needs to be applied to both * the raw and the rendered excerpt depending on which is being used. - * If there is no excerpt the value is set to '' to make sure it is not undefined (See line 89). */ - let rawOrRenderedExcerpt = rawExcerpt || strippedRenderedExcerpt; - rawOrRenderedExcerpt = rawOrRenderedExcerpt.trim(); + const rawOrRenderedExcerpt = ( + rawExcerpt || strippedRenderedExcerpt + ).trim(); let trimmedExcerpt = ''; if ( wordCountType === 'words' ) {