From 70d0e6b411afc284a4f427b5694ac10ed5691108 Mon Sep 17 00:00:00 2001 From: tellthemachines Date: Mon, 18 Jan 2021 17:55:30 +1100 Subject: [PATCH 01/16] Add basic pages block --- lib/blocks.php | 1 + packages/block-library/src/index.js | 2 + packages/block-library/src/navigation/edit.js | 1 + packages/block-library/src/pages/block.json | 20 +++++++++ packages/block-library/src/pages/edit.js | 34 ++++++++++++++ packages/block-library/src/pages/index.js | 23 ++++++++++ packages/block-library/src/pages/index.php | 45 +++++++++++++++++++ 7 files changed, 126 insertions(+) create mode 100644 packages/block-library/src/pages/block.json create mode 100644 packages/block-library/src/pages/edit.js create mode 100644 packages/block-library/src/pages/index.js create mode 100644 packages/block-library/src/pages/index.php diff --git a/lib/blocks.php b/lib/blocks.php index d1428770e3540..cf6eed7ff6253 100644 --- a/lib/blocks.php +++ b/lib/blocks.php @@ -63,6 +63,7 @@ function gutenberg_reregister_core_block_types() { 'shortcode.php' => 'core/shortcode', 'social-link.php' => 'core/social-link', 'tag-cloud.php' => 'core/tag-cloud', + 'pages.php' => 'core/pages', 'post-author.php' => 'core/post-author', 'post-comment.php' => 'core/post-comment', 'post-comment-author.php' => 'core/post-comment-author', diff --git a/packages/block-library/src/index.js b/packages/block-library/src/index.js index 376757f2bfb87..b9b77dea9247f 100644 --- a/packages/block-library/src/index.js +++ b/packages/block-library/src/index.js @@ -42,6 +42,7 @@ import * as list from './list'; import * as missing from './missing'; import * as more from './more'; import * as nextpage from './nextpage'; +import * as pages from './pages'; import * as preformatted from './preformatted'; import * as pullquote from './pullquote'; import * as reusableBlock from './block'; @@ -148,6 +149,7 @@ export const __experimentalGetCoreBlocks = () => [ missing, more, nextpage, + pages, preformatted, pullquote, rss, diff --git a/packages/block-library/src/navigation/edit.js b/packages/block-library/src/navigation/edit.js index c22be04525c8c..91bc44e020791 100644 --- a/packages/block-library/src/navigation/edit.js +++ b/packages/block-library/src/navigation/edit.js @@ -79,6 +79,7 @@ function Navigation( { 'core/navigation-link', 'core/search', 'core/social-links', + 'core/pages', ], orientation: attributes.orientation || 'horizontal', renderAppender: diff --git a/packages/block-library/src/pages/block.json b/packages/block-library/src/pages/block.json new file mode 100644 index 0000000000000..060b3bd7014d4 --- /dev/null +++ b/packages/block-library/src/pages/block.json @@ -0,0 +1,20 @@ +{ + "apiVersion": 2, + "name": "core/pages", + "category": "widgets", + "attributes": { + "orientation": { + "type": "string" + }, + "showSubmenuIcon": { + "type": "boolean", + "default": true + } + }, + "supports": { + "align": true, + "html": false + }, + "editorStyle": "wp-block-pages-editor", + "style": "wp-block-pages" +} \ No newline at end of file diff --git a/packages/block-library/src/pages/edit.js b/packages/block-library/src/pages/edit.js new file mode 100644 index 0000000000000..331b26fba0fd5 --- /dev/null +++ b/packages/block-library/src/pages/edit.js @@ -0,0 +1,34 @@ +/** + * WordPress dependencies + */ +import { PanelBody, ToggleControl } from '@wordpress/components'; +import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; +import { __ } from '@wordpress/i18n'; +import ServerSideRender from '@wordpress/server-side-render'; + +export default function PagesEdit( { + attributes, + setAttributes, + hasSubmenuIndicatorSetting = true, +} ) { + return ( +
+ + { hasSubmenuIndicatorSetting && ( + + { + setAttributes( { + showSubmenuIcon: value, + } ); + } } + label={ __( 'Show submenu indicator icons' ) } + /> + + ) } + + +
+ ); +} diff --git a/packages/block-library/src/pages/index.js b/packages/block-library/src/pages/index.js new file mode 100644 index 0000000000000..30d9dd0a7cde8 --- /dev/null +++ b/packages/block-library/src/pages/index.js @@ -0,0 +1,23 @@ +/** + * WordPress dependencies + */ +import { page as icon } from '@wordpress/icons'; +import { __, _x } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import metadata from './block.json'; +import edit from './edit.js'; + +const { name } = metadata; + +export { metadata, name }; + +export const settings = { + title: _x( 'Pages', 'block title' ), + description: __( 'Display a list of all pages.' ), + icon, + example: {}, + edit, +}; diff --git a/packages/block-library/src/pages/index.php b/packages/block-library/src/pages/index.php new file mode 100644 index 0000000000000..45e26caae608e --- /dev/null +++ b/packages/block-library/src/pages/index.php @@ -0,0 +1,45 @@ + false, + 'title_li' => '', + ); + + $wrapper_markup = ''; + $items_markup = wp_list_pages( $args ); + + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => 'wp-block-page-list' ) ); + + return sprintf( + $wrapper_markup, + $wrapper_attributes, + $items_markup + ); +} + +/** + * Registers the `core/pages` block on server. + */ +function register_block_core_pages() { + register_block_type_from_metadata( + __DIR__ . '/pages', + array( + 'render_callback' => 'render_block_core_pages', + ) + ); +} +add_action( 'init', 'register_block_core_pages' ); From d6e8af62639ea3fa07f89bd80642eb25543c8f11 Mon Sep 17 00:00:00 2001 From: tellthemachines Date: Tue, 19 Jan 2021 17:52:23 +1100 Subject: [PATCH 02/16] Add dropdowns and indicators --- lib/class-walker-pages-block.php | 35 +++++++++ lib/load.php | 3 + packages/block-library/src/pages/index.php | 15 +++- packages/block-library/src/pages/style.scss | 87 +++++++++++++++++++++ packages/block-library/src/style.scss | 1 + 5 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 lib/class-walker-pages-block.php create mode 100644 packages/block-library/src/pages/style.scss diff --git a/lib/class-walker-pages-block.php b/lib/class-walker-pages-block.php new file mode 100644 index 0000000000000..06b0b4eab96d3 --- /dev/null +++ b/lib/class-walker-pages-block.php @@ -0,0 +1,35 @@ +{$n}{$indent}