From 16ac572f0f85a9ef14f9d5f4ea962e34b32c3154 Mon Sep 17 00:00:00 2001 From: epiqueras Date: Fri, 10 Jan 2020 20:22:31 -0500 Subject: [PATCH 1/6] Block Library: Add a Post Author block. --- lib/blocks.php | 1 + packages/block-library/src/index.js | 10 +++++- .../block-library/src/post-author/block.json | 4 +++ .../block-library/src/post-author/edit.js | 17 ++++++++++ .../block-library/src/post-author/index.js | 18 +++++++++++ .../block-library/src/post-author/index.php | 32 +++++++++++++++++++ 6 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 packages/block-library/src/post-author/block.json create mode 100644 packages/block-library/src/post-author/edit.js create mode 100644 packages/block-library/src/post-author/index.js create mode 100644 packages/block-library/src/post-author/index.php diff --git a/lib/blocks.php b/lib/blocks.php index 4b5ac97a8cdc7..fd6945f23db0a 100644 --- a/lib/blocks.php +++ b/lib/blocks.php @@ -56,6 +56,7 @@ function gutenberg_reregister_core_block_types() { 'template-part.php' => 'core/template-part', 'post-title.php' => 'core/post-title', 'post-content.php' => 'core/post-content', + 'post-author.php' => 'core/post-author', 'post-excerpt.php' => 'core/post-excerpt', ); diff --git a/packages/block-library/src/index.js b/packages/block-library/src/index.js index d82868000de10..d7846790d30a8 100644 --- a/packages/block-library/src/index.js +++ b/packages/block-library/src/index.js @@ -68,6 +68,7 @@ import * as siteTitle from './site-title'; import * as templatePart from './template-part'; import * as postTitle from './post-title'; import * as postContent from './post-content'; +import * as postAuthor from './post-author'; import * as postExcerpt from './post-excerpt'; /** @@ -188,7 +189,14 @@ export const __experimentalRegisterExperimentalCoreBlocks = // Register Full Site Editing Blocks. ...( __experimentalEnableFullSiteEditing ? - [ siteTitle, templatePart, postTitle, postContent, postExcerpt ] : + [ + siteTitle, + templatePart, + postTitle, + postContent, + postAuthor, + postExcerpt, + ] : [] ), ].forEach( registerBlock ); } : diff --git a/packages/block-library/src/post-author/block.json b/packages/block-library/src/post-author/block.json new file mode 100644 index 0000000000000..a3da72b6d8651 --- /dev/null +++ b/packages/block-library/src/post-author/block.json @@ -0,0 +1,4 @@ +{ + "name": "core/post-author", + "category": "layout" +} diff --git a/packages/block-library/src/post-author/edit.js b/packages/block-library/src/post-author/edit.js new file mode 100644 index 0000000000000..0eb23113fa49e --- /dev/null +++ b/packages/block-library/src/post-author/edit.js @@ -0,0 +1,17 @@ +/** + * WordPress dependencies + */ +import { useEntityProp, useEntityId } from '@wordpress/core-data'; +import { RichText } from '@wordpress/block-editor'; + +function PostAuthorDisplay() { + const [ author ] = useEntityProp( 'postType', 'post', 'author' ); + return ; +} + +export default function PostAuthorEdit() { + if ( ! useEntityId( 'postType', 'post' ) ) { + return 'Post Author Placeholder'; + } + return ; +} diff --git a/packages/block-library/src/post-author/index.js b/packages/block-library/src/post-author/index.js new file mode 100644 index 0000000000000..ed560130a26e1 --- /dev/null +++ b/packages/block-library/src/post-author/index.js @@ -0,0 +1,18 @@ +/** + * WordPress dependencies + */ +import { __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import edit from './edit'; + +const { name } = metadata; +export { metadata, name }; + +export const settings = { + title: __( 'Post Author' ), + edit, +}; diff --git a/packages/block-library/src/post-author/index.php b/packages/block-library/src/post-author/index.php new file mode 100644 index 0000000000000..5069b90127c6d --- /dev/null +++ b/packages/block-library/src/post-author/index.php @@ -0,0 +1,32 @@ + By ' . get_the_author( $post ) . ''; +} + +/** + * Registers the `core/post-author` block on the server. + */ +function register_block_core_post_author() { + register_block_type( + 'core/post-author', + array( + 'render_callback' => 'render_block_core_post_author', + ) + ); +} +add_action( 'init', 'register_block_core_post_author' ); From 49eab59969a7f50652dd571d747dfb8110ad838a Mon Sep 17 00:00:00 2001 From: epiqueras Date: Sat, 11 Jan 2020 03:52:41 -0500 Subject: [PATCH 2/6] Block Library: Localize Post Author block "By " text fragment. --- packages/block-library/src/post-author/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/block-library/src/post-author/index.php b/packages/block-library/src/post-author/index.php index 5069b90127c6d..4265620fb157a 100644 --- a/packages/block-library/src/post-author/index.php +++ b/packages/block-library/src/post-author/index.php @@ -15,7 +15,7 @@ function render_block_core_post_author() { if ( ! $post ) { return ''; } - return '
By ' . get_the_author( $post ) . '
'; + return '
' . __( 'By ' ) . get_the_author( $post ) . '
'; } /** From 225b79dcf9c1c2948d8bc9e87919d1ee4a06c9c3 Mon Sep 17 00:00:00 2001 From: epiqueras Date: Sat, 11 Jan 2020 04:08:30 -0500 Subject: [PATCH 3/6] Block Library: Use address tag in Post Author block. --- packages/block-library/src/post-author/edit.js | 3 +-- packages/block-library/src/post-author/index.php | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/block-library/src/post-author/edit.js b/packages/block-library/src/post-author/edit.js index 0eb23113fa49e..ad0f4e99cd2c1 100644 --- a/packages/block-library/src/post-author/edit.js +++ b/packages/block-library/src/post-author/edit.js @@ -2,11 +2,10 @@ * WordPress dependencies */ import { useEntityProp, useEntityId } from '@wordpress/core-data'; -import { RichText } from '@wordpress/block-editor'; function PostAuthorDisplay() { const [ author ] = useEntityProp( 'postType', 'post', 'author' ); - return ; + return
{ author }
; } export default function PostAuthorEdit() { diff --git a/packages/block-library/src/post-author/index.php b/packages/block-library/src/post-author/index.php index 4265620fb157a..8fe7154464c48 100644 --- a/packages/block-library/src/post-author/index.php +++ b/packages/block-library/src/post-author/index.php @@ -15,7 +15,7 @@ function render_block_core_post_author() { if ( ! $post ) { return ''; } - return '
' . __( 'By ' ) . get_the_author( $post ) . '
'; + return '
' . __( 'By ' ) . get_the_author() . '
'; } /** From ae1861d4378ff69f1c202d2c1efc6057c88159b3 Mon Sep 17 00:00:00 2001 From: epiqueras Date: Mon, 13 Jan 2020 11:39:49 -0500 Subject: [PATCH 4/6] Block Library: Use `sprintf` in Post Author block. --- packages/block-library/src/post-author/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/block-library/src/post-author/index.php b/packages/block-library/src/post-author/index.php index 8fe7154464c48..a2367c7180134 100644 --- a/packages/block-library/src/post-author/index.php +++ b/packages/block-library/src/post-author/index.php @@ -15,7 +15,8 @@ function render_block_core_post_author() { if ( ! $post ) { return ''; } - return '
' . __( 'By ' ) . get_the_author() . '
'; + // translators: %s: The author. + return sprintf( __( '
By %s
' ), get_the_author() ); } /** From 5ec16de25c9adf9b2cda378f0c6f87228cb69539 Mon Sep 17 00:00:00 2001 From: epiqueras Date: Mon, 13 Jan 2020 11:42:47 -0500 Subject: [PATCH 5/6] E2E Tests: Generate Post Author block fixtures. --- .../fixtures/blocks/core__post-author.html | 1 + .../fixtures/blocks/core__post-author.json | 10 ++++++++++ .../blocks/core__post-author.parsed.json | 18 ++++++++++++++++++ .../blocks/core__post-author.serialized.html | 1 + 4 files changed, 30 insertions(+) create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-author.html create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-author.json create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-author.parsed.json create mode 100644 packages/e2e-tests/fixtures/blocks/core__post-author.serialized.html diff --git a/packages/e2e-tests/fixtures/blocks/core__post-author.html b/packages/e2e-tests/fixtures/blocks/core__post-author.html new file mode 100644 index 0000000000000..7cf982dae7196 --- /dev/null +++ b/packages/e2e-tests/fixtures/blocks/core__post-author.html @@ -0,0 +1 @@ + diff --git a/packages/e2e-tests/fixtures/blocks/core__post-author.json b/packages/e2e-tests/fixtures/blocks/core__post-author.json new file mode 100644 index 0000000000000..f780184a547e9 --- /dev/null +++ b/packages/e2e-tests/fixtures/blocks/core__post-author.json @@ -0,0 +1,10 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/post-author", + "isValid": true, + "attributes": {}, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/packages/e2e-tests/fixtures/blocks/core__post-author.parsed.json b/packages/e2e-tests/fixtures/blocks/core__post-author.parsed.json new file mode 100644 index 0000000000000..82333c4d5a5ff --- /dev/null +++ b/packages/e2e-tests/fixtures/blocks/core__post-author.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/post-author", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "", + "innerContent": [] + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n", + "innerContent": [ + "\n" + ] + } +] diff --git a/packages/e2e-tests/fixtures/blocks/core__post-author.serialized.html b/packages/e2e-tests/fixtures/blocks/core__post-author.serialized.html new file mode 100644 index 0000000000000..7cf982dae7196 --- /dev/null +++ b/packages/e2e-tests/fixtures/blocks/core__post-author.serialized.html @@ -0,0 +1 @@ + From 4fb15c7fe3580bda245df260725103bd4ba7cdab Mon Sep 17 00:00:00 2001 From: epiqueras Date: Tue, 14 Jan 2020 11:32:09 -0500 Subject: [PATCH 6/6] Block Library: Render actual author name in Post Author block instead of their ID. --- packages/block-library/src/post-author/edit.js | 10 ++++++++-- packages/core-data/src/entities.js | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/block-library/src/post-author/edit.js b/packages/block-library/src/post-author/edit.js index ad0f4e99cd2c1..f1f7044bfbf0f 100644 --- a/packages/block-library/src/post-author/edit.js +++ b/packages/block-library/src/post-author/edit.js @@ -2,10 +2,16 @@ * WordPress dependencies */ import { useEntityProp, useEntityId } from '@wordpress/core-data'; +import { useSelect } from '@wordpress/data'; +import { sprintf, __ } from '@wordpress/i18n'; function PostAuthorDisplay() { - const [ author ] = useEntityProp( 'postType', 'post', 'author' ); - return
{ author }
; + const [ authorId ] = useEntityProp( 'postType', 'post', 'author' ); + const author = useSelect( + ( select ) => select( 'core' ).getEntityRecord( 'root', 'user', authorId ), + [ authorId ] + ); + return author ?
{ sprintf( __( 'By %s' ), author.name ) }
: null; } export default function PostAuthorEdit() { diff --git a/packages/core-data/src/entities.js b/packages/core-data/src/entities.js index ec4c3712da6d1..00cfff80b4de9 100644 --- a/packages/core-data/src/entities.js +++ b/packages/core-data/src/entities.js @@ -17,6 +17,7 @@ export const defaultEntities = [ { name: 'media', kind: 'root', baseURL: '/wp/v2/media', plural: 'mediaItems' }, { name: 'taxonomy', kind: 'root', key: 'slug', baseURL: '/wp/v2/taxonomies', plural: 'taxonomies' }, { name: 'widgetArea', kind: 'root', baseURL: '/__experimental/widget-areas', plural: 'widgetAreas', transientEdits: { blocks: true } }, + { name: 'user', kind: 'root', baseURL: '/wp/v2/users', plural: 'users' }, ]; export const kinds = [