@wordpress/block-library 8.3.2 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/button/edit.js +3 -1
  3. package/build/button/edit.js.map +1 -1
  4. package/build/button/index.js +17 -6
  5. package/build/button/index.js.map +1 -1
  6. package/build/cover/edit/index.js +3 -2
  7. package/build/cover/edit/index.js.map +1 -1
  8. package/build/file/index.js +10 -1
  9. package/build/file/index.js.map +1 -1
  10. package/build/image/image.js +21 -15
  11. package/build/image/image.js.map +1 -1
  12. package/build/latest-comments/edit.js +6 -2
  13. package/build/latest-comments/edit.js.map +1 -1
  14. package/build/latest-comments/index.js +13 -0
  15. package/build/latest-comments/index.js.map +1 -1
  16. package/build/navigation/edit/index.js +2 -28
  17. package/build/navigation/edit/index.js.map +1 -1
  18. package/build/navigation/edit/menu-inspector-controls.js +5 -6
  19. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  20. package/build/navigation/edit/navigation-menu-selector.js +14 -11
  21. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  22. package/build/navigation/edit/unsaved-inner-blocks.js +4 -5
  23. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  24. package/build/navigation/edit/use-create-navigation-menu.js +11 -2
  25. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  26. package/build/navigation/use-navigation-menu.js +1 -1
  27. package/build/navigation/use-navigation-menu.js.map +1 -1
  28. package/build/navigation-link/edit.js +4 -0
  29. package/build/navigation-link/edit.js.map +1 -1
  30. package/build/navigation-link/link-ui.js +1 -0
  31. package/build/navigation-link/link-ui.js.map +1 -1
  32. package/build/navigation-submenu/edit.js +4 -0
  33. package/build/navigation-submenu/edit.js.map +1 -1
  34. package/build/page-list/edit.js +5 -4
  35. package/build/page-list/edit.js.map +1 -1
  36. package/build/page-list/use-convert-to-navigation-links.js +61 -5
  37. package/build/page-list/use-convert-to-navigation-links.js.map +1 -1
  38. package/build/post-excerpt/edit.js +49 -3
  39. package/build/post-excerpt/edit.js.map +1 -1
  40. package/build/post-excerpt/index.js +4 -0
  41. package/build/post-excerpt/index.js.map +1 -1
  42. package/build/post-featured-image/dimension-controls.js +52 -1
  43. package/build/post-featured-image/dimension-controls.js.map +1 -1
  44. package/build/post-featured-image/edit.js +9 -4
  45. package/build/post-featured-image/edit.js.map +1 -1
  46. package/build/post-featured-image/index.js +3 -0
  47. package/build/post-featured-image/index.js.map +1 -1
  48. package/build/{experiments.js → private-apis.js} +3 -3
  49. package/build/private-apis.js.map +1 -0
  50. package/build/site-logo/edit.js +7 -11
  51. package/build/site-logo/edit.js.map +1 -1
  52. package/build/table/edit.js +3 -3
  53. package/build/table/edit.js.map +1 -1
  54. package/build/table-of-contents/utils.js +1 -1
  55. package/build/table-of-contents/utils.js.map +1 -1
  56. package/build/verse/index.js +6 -0
  57. package/build/verse/index.js.map +1 -1
  58. package/build-module/button/edit.js +2 -1
  59. package/build-module/button/edit.js.map +1 -1
  60. package/build-module/button/index.js +17 -6
  61. package/build-module/button/index.js.map +1 -1
  62. package/build-module/cover/edit/index.js +3 -2
  63. package/build-module/cover/edit/index.js.map +1 -1
  64. package/build-module/file/index.js +10 -1
  65. package/build-module/file/index.js.map +1 -1
  66. package/build-module/image/image.js +21 -15
  67. package/build-module/image/image.js.map +1 -1
  68. package/build-module/latest-comments/edit.js +6 -2
  69. package/build-module/latest-comments/edit.js.map +1 -1
  70. package/build-module/latest-comments/index.js +13 -0
  71. package/build-module/latest-comments/index.js.map +1 -1
  72. package/build-module/navigation/edit/index.js +3 -29
  73. package/build-module/navigation/edit/index.js.map +1 -1
  74. package/build-module/navigation/edit/menu-inspector-controls.js +5 -5
  75. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  76. package/build-module/navigation/edit/navigation-menu-selector.js +14 -10
  77. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  78. package/build-module/navigation/edit/unsaved-inner-blocks.js +4 -5
  79. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  80. package/build-module/navigation/edit/use-create-navigation-menu.js +11 -2
  81. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  82. package/build-module/navigation/use-navigation-menu.js +1 -1
  83. package/build-module/navigation/use-navigation-menu.js.map +1 -1
  84. package/build-module/navigation-link/edit.js +4 -0
  85. package/build-module/navigation-link/edit.js.map +1 -1
  86. package/build-module/navigation-link/link-ui.js +1 -0
  87. package/build-module/navigation-link/link-ui.js.map +1 -1
  88. package/build-module/navigation-submenu/edit.js +4 -0
  89. package/build-module/navigation-submenu/edit.js.map +1 -1
  90. package/build-module/page-list/edit.js +5 -4
  91. package/build-module/page-list/edit.js.map +1 -1
  92. package/build-module/page-list/use-convert-to-navigation-links.js +61 -5
  93. package/build-module/page-list/use-convert-to-navigation-links.js.map +1 -1
  94. package/build-module/post-excerpt/edit.js +52 -5
  95. package/build-module/post-excerpt/edit.js.map +1 -1
  96. package/build-module/post-excerpt/index.js +4 -0
  97. package/build-module/post-excerpt/index.js.map +1 -1
  98. package/build-module/post-featured-image/dimension-controls.js +52 -1
  99. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  100. package/build-module/post-featured-image/edit.js +9 -4
  101. package/build-module/post-featured-image/edit.js.map +1 -1
  102. package/build-module/post-featured-image/index.js +3 -0
  103. package/build-module/post-featured-image/index.js.map +1 -1
  104. package/build-module/{experiments.js → private-apis.js} +2 -2
  105. package/build-module/private-apis.js.map +1 -0
  106. package/build-module/site-logo/edit.js +7 -11
  107. package/build-module/site-logo/edit.js.map +1 -1
  108. package/build-module/table/edit.js +3 -3
  109. package/build-module/table/edit.js.map +1 -1
  110. package/build-module/table-of-contents/utils.js +1 -1
  111. package/build-module/table-of-contents/utils.js.map +1 -1
  112. package/build-module/verse/index.js +6 -0
  113. package/build-module/verse/index.js.map +1 -1
  114. package/build-style/avatar/style-rtl.css +3 -0
  115. package/build-style/avatar/style.css +3 -0
  116. package/build-style/button/editor-rtl.css +31 -0
  117. package/build-style/button/editor.css +31 -0
  118. package/build-style/button/style-rtl.css +31 -0
  119. package/build-style/button/style.css +31 -0
  120. package/build-style/classic-rtl.css +5 -0
  121. package/build-style/classic.css +5 -0
  122. package/build-style/editor-rtl.css +36 -1
  123. package/build-style/editor.css +36 -1
  124. package/build-style/file/style-rtl.css +1 -0
  125. package/build-style/file/style.css +1 -0
  126. package/build-style/image/editor-rtl.css +1 -0
  127. package/build-style/image/editor.css +1 -0
  128. package/build-style/image/style-rtl.css +6 -2
  129. package/build-style/image/style.css +6 -0
  130. package/build-style/latest-comments/style-rtl.css +18 -5
  131. package/build-style/latest-comments/style.css +18 -5
  132. package/build-style/quote/style-rtl.css +5 -5
  133. package/build-style/quote/style.css +5 -5
  134. package/build-style/style-rtl.css +64 -12
  135. package/build-style/style.css +64 -10
  136. package/build-types/table-of-contents/utils.d.ts +1 -1
  137. package/package.json +30 -30
  138. package/src/avatar/index.php +67 -63
  139. package/src/avatar/style.scss +3 -0
  140. package/src/button/block.json +17 -6
  141. package/src/button/edit.js +2 -1
  142. package/src/button/editor.scss +36 -0
  143. package/src/button/style.scss +37 -1
  144. package/src/classic.scss +5 -0
  145. package/src/cover/edit/index.js +4 -1
  146. package/src/editor.scss +5 -0
  147. package/src/file/block.json +10 -1
  148. package/src/file/style.scss +1 -0
  149. package/src/image/editor.scss +1 -0
  150. package/src/image/image.js +32 -27
  151. package/src/image/style.scss +13 -0
  152. package/src/latest-comments/block.json +13 -0
  153. package/src/latest-comments/edit.js +9 -2
  154. package/src/latest-comments/style.scss +25 -7
  155. package/src/navigation/edit/index.js +1 -30
  156. package/src/navigation/edit/menu-inspector-controls.js +3 -4
  157. package/src/navigation/edit/navigation-menu-selector.js +12 -26
  158. package/src/navigation/edit/test/navigation-menu-selector.js +638 -0
  159. package/src/navigation/edit/unsaved-inner-blocks.js +29 -36
  160. package/src/navigation/edit/use-create-navigation-menu.js +13 -1
  161. package/src/navigation/index.php +8 -6
  162. package/src/navigation/use-navigation-menu.js +1 -1
  163. package/src/navigation-link/edit.js +3 -0
  164. package/src/navigation-link/link-ui.js +1 -0
  165. package/src/navigation-submenu/edit.js +3 -0
  166. package/src/page-list/edit.js +6 -5
  167. package/src/page-list/index.php +4 -4
  168. package/src/page-list/test/convert-to-links-modal.js +134 -0
  169. package/src/page-list/use-convert-to-navigation-links.js +64 -4
  170. package/src/post-excerpt/block.json +4 -0
  171. package/src/post-excerpt/edit.js +72 -7
  172. package/src/post-excerpt/index.php +29 -5
  173. package/src/post-featured-image/block.json +3 -0
  174. package/src/post-featured-image/dimension-controls.js +64 -2
  175. package/src/post-featured-image/edit.js +18 -6
  176. package/src/post-featured-image/index.php +25 -9
  177. package/src/post-title/index.php +3 -3
  178. package/src/{experiments.js → private-apis.js} +1 -1
  179. package/src/quote/style.scss +2 -2
  180. package/src/site-logo/edit.js +3 -6
  181. package/src/table/edit.js +3 -3
  182. package/src/table-of-contents/utils.ts +1 -1
  183. package/src/template-part/index.php +1 -1
  184. package/src/verse/block.json +6 -0
  185. package/tsconfig.json +24 -1
  186. package/tsconfig.tsbuildinfo +1 -1
  187. package/build/experiments.js.map +0 -1
  188. package/build/navigation/leaf-more-menu.js +0 -95
  189. package/build/navigation/leaf-more-menu.js.map +0 -1
  190. package/build-module/experiments.js.map +0 -1
  191. package/build-module/navigation/leaf-more-menu.js +0 -76
  192. package/build-module/navigation/leaf-more-menu.js.map +0 -1
  193. package/src/navigation/leaf-more-menu.js +0 -93
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/page-list/edit.js"],"names":["classnames","createBlock","InspectorControls","BlockControls","useBlockProps","useInnerBlocksProps","getColorClassName","store","blockEditorStore","Warning","PanelBody","ToolbarButton","Spinner","Notice","ComboboxControl","Button","Modal","__","sprintf","useMemo","useState","useEffect","useEntityRecords","useSelect","useConvertToNavigationLinks","MAX_PAGE_COUNT","NOOP","convertDescription","BlockContent","blockProps","innerBlocksProps","hasResolvedPages","blockList","pages","parentPageID","length","parentPageDetails","find","page","id","title","rendered","ConvertToLinksModal","onClick","disabled","isOpen","setOpen","openModal","closeModal","describedby","PageListEdit","context","clientId","attributes","setAttributes","records","hasResolved","per_page","_fields","orderby","order","allowConvertToLinks","convertToNavigationLinks","pagesByParentId","Map","sortedPages","sort","a","b","menu_order","localeCompare","reduce","accumulator","parent","has","get","push","set","className","textColor","backgroundColor","style","color","getBlockList","parentId","childPages","template","hasChildren","pageProps","label","link","url","item","children","makePagesTree","level","tree","value","repeat","rawName","pagesTree","allowedBlocks","renderAppender","__unstableDisableDropZone","templateLock","onInput","onChange","isNested","select","getBlockParentsByBlockName","blockParents"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport {\n\tInspectorControls,\n\tBlockControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tgetColorClassName,\n\tstore as blockEditorStore,\n\tWarning,\n} from '@wordpress/block-editor';\nimport {\n\tPanelBody,\n\tToolbarButton,\n\tSpinner,\n\tNotice,\n\tComboboxControl,\n\tButton,\n\tModal,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useState, useEffect } from '@wordpress/element';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useConvertToNavigationLinks } from './use-convert-to-navigation-links';\n\n// We only show the edit option when page count is <= MAX_PAGE_COUNT\n// Performance of Navigation Links is not good past this value.\nconst MAX_PAGE_COUNT = 100;\nconst NOOP = () => {};\n\nconst convertDescription = __(\n\t'This menu is automatically kept in sync with pages on your site. You can manage the menu yourself by clicking \"Edit\" below.'\n);\n\nfunction BlockContent( {\n\tblockProps,\n\tinnerBlocksProps,\n\thasResolvedPages,\n\tblockList,\n\tpages,\n\tparentPageID,\n} ) {\n\tif ( ! hasResolvedPages ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Spinner />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages === null ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length === 0 ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'info' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( blockList.length === 0 ) {\n\t\tconst parentPageDetails = pages.find(\n\t\t\t( page ) => page.id === parentPageID\n\t\t);\n\n\t\tif ( parentPageDetails?.title?.rendered ) {\n\t\t\treturn (\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<Warning>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %s: Page title.\n\t\t\t\t\t\t\t__( 'Page List: \"%s\" page has no children.' ),\n\t\t\t\t\t\t\tparentPageDetails.title.rendered\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Warning>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length > 0 ) {\n\t\treturn <ul { ...innerBlocksProps }></ul>;\n\t}\n}\n\nfunction ConvertToLinksModal( { onClick, disabled } ) {\n\tconst [ isOpen, setOpen ] = useState( false );\n\tconst openModal = () => setOpen( true );\n\tconst closeModal = () => setOpen( false );\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<ToolbarButton title={ __( 'Edit' ) } onClick={ openModal }>\n\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</BlockControls>\n\t\t\t{ isOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\tonRequestClose={ closeModal }\n\t\t\t\t\ttitle={ __( 'Edit this menu' ) }\n\t\t\t\t\tclassName={ 'wp-block-page-list-modal' }\n\t\t\t\t\taria={ {\n\t\t\t\t\t\tdescribedby: 'wp-block-page-list-modal__description',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<p id={ 'wp-block-page-list-modal__description' }>\n\t\t\t\t\t\t{ convertDescription }\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"wp-block-page-list-modal-buttons\">\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ closeModal }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default function PageListEdit( {\n\tcontext,\n\tclientId,\n\tattributes,\n\tsetAttributes,\n} ) {\n\tconst { parentPageID } = attributes;\n\n\tconst { records: pages, hasResolved: hasResolvedPages } = useEntityRecords(\n\t\t'postType',\n\t\t'page',\n\t\t{\n\t\t\tper_page: MAX_PAGE_COUNT,\n\t\t\t_fields: [ 'id', 'link', 'menu_order', 'parent', 'title', 'type' ],\n\t\t\t// TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby\n\t\t\t// values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent\n\t\t\t// sort.\n\t\t\torderby: 'menu_order',\n\t\t\torder: 'asc',\n\t\t}\n\t);\n\n\tconst allowConvertToLinks =\n\t\t'showSubmenuIcon' in context &&\n\t\tpages?.length > 0 &&\n\t\tpages?.length <= MAX_PAGE_COUNT;\n\n\tconst convertToNavigationLinks = useConvertToNavigationLinks( {\n\t\tclientId,\n\t\tpages,\n\t} );\n\n\tconst pagesByParentId = useMemo( () => {\n\t\tif ( pages === null ) {\n\t\t\treturn new Map();\n\t\t}\n\n\t\t// TODO: Once the REST API supports passing multiple values to\n\t\t// 'orderby', this can be removed.\n\t\t// https://core.trac.wordpress.org/ticket/39037\n\t\tconst sortedPages = pages.sort( ( a, b ) => {\n\t\t\tif ( a.menu_order === b.menu_order ) {\n\t\t\t\treturn a.title.rendered.localeCompare( b.title.rendered );\n\t\t\t}\n\t\t\treturn a.menu_order - b.menu_order;\n\t\t} );\n\n\t\treturn sortedPages.reduce( ( accumulator, page ) => {\n\t\t\tconst { parent } = page;\n\t\t\tif ( accumulator.has( parent ) ) {\n\t\t\t\taccumulator.get( parent ).push( page );\n\t\t\t} else {\n\t\t\t\taccumulator.set( parent, [ page ] );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, new Map() );\n\t}, [ pages ] );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( 'wp-block-page-list', {\n\t\t\t'has-text-color': !! context.textColor,\n\t\t\t[ getColorClassName( 'color', context.textColor ) ]:\n\t\t\t\t!! context.textColor,\n\t\t\t'has-background': !! context.backgroundColor,\n\t\t\t[ getColorClassName(\n\t\t\t\t'background-color',\n\t\t\t\tcontext.backgroundColor\n\t\t\t) ]: !! context.backgroundColor,\n\t\t} ),\n\t\tstyle: { ...context.style?.color },\n\t} );\n\n\tconst getBlockList = ( parentId = parentPageID ) => {\n\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\tif ( ! childPages?.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn childPages.reduce( ( template, page ) => {\n\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\tconst pageProps = {\n\t\t\t\tid: page.id,\n\t\t\t\tlabel: page.title?.rendered,\n\t\t\t\ttitle: page.title?.rendered,\n\t\t\t\tlink: page.url,\n\t\t\t\thasChildren,\n\t\t\t};\n\t\t\tlet item = null;\n\t\t\tconst children = getBlockList( page.id );\n\t\t\titem = createBlock( 'core/page-list-item', pageProps, children );\n\t\t\ttemplate.push( item );\n\n\t\t\treturn template;\n\t\t}, [] );\n\t};\n\n\tconst makePagesTree = ( parentId = 0, level = 0 ) => {\n\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\tif ( ! childPages?.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn childPages.reduce( ( tree, page ) => {\n\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\tconst item = {\n\t\t\t\tvalue: page.id,\n\t\t\t\tlabel: '— '.repeat( level ) + page.title.rendered,\n\t\t\t\trawName: page.title.rendered,\n\t\t\t};\n\t\t\ttree.push( item );\n\t\t\tif ( hasChildren ) {\n\t\t\t\ttree.push( ...makePagesTree( page.id, level + 1 ) );\n\t\t\t}\n\t\t\treturn tree;\n\t\t}, [] );\n\t};\n\n\tconst pagesTree = useMemo( makePagesTree, [ pagesByParentId ] );\n\n\tconst blockList = useMemo( getBlockList, [\n\t\tpagesByParentId,\n\t\tparentPageID,\n\t] );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/page-list-item' ],\n\t\trenderAppender: false,\n\t\t__unstableDisableDropZone: true,\n\t\ttemplateLock: 'all',\n\t\tonInput: NOOP,\n\t\tonChange: NOOP,\n\t\tvalue: blockList,\n\t} );\n\n\tconst { isNested } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockParentsByBlockName } = select( blockEditorStore );\n\t\t\tconst blockParents = getBlockParentsByBlockName(\n\t\t\t\tclientId,\n\t\t\t\t'core/navigation-submenu',\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tisNested: blockParents.length > 0,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tuseEffect( () => {\n\t\tsetAttributes( { isNested } );\n\t}, [ isNested ] );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t{ pagesTree.length > 0 && (\n\t\t\t\t\t<PanelBody>\n\t\t\t\t\t\t<ComboboxControl\n\t\t\t\t\t\t\tclassName=\"editor-page-attributes__parent\"\n\t\t\t\t\t\t\tlabel={ __( 'Parent page' ) }\n\t\t\t\t\t\t\tvalue={ parentPageID }\n\t\t\t\t\t\t\toptions={ pagesTree }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { parentPageID: value ?? 0 } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Choose a page to show only its subpages.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t\t{ allowConvertToLinks && (\n\t\t\t\t\t<PanelBody title={ __( 'Edit this menu' ) }>\n\t\t\t\t\t\t<p>{ convertDescription }</p>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ allowConvertToLinks && (\n\t\t\t\t<ConvertToLinksModal\n\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t<BlockContent\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tinnerBlocksProps={ innerBlocksProps }\n\t\t\t\thasResolvedPages={ hasResolvedPages }\n\t\t\t\tblockList={ blockList }\n\t\t\t\tpages={ pages }\n\t\t\t\tparentPageID={ parentPageID }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/page-list/edit.js"],"names":["classnames","createBlock","InspectorControls","BlockControls","useBlockProps","useInnerBlocksProps","getColorClassName","store","blockEditorStore","Warning","PanelBody","ToolbarButton","Spinner","Notice","ComboboxControl","Button","Modal","__","sprintf","useMemo","useState","useEffect","useEntityRecords","useSelect","useConvertToNavigationLinks","MAX_PAGE_COUNT","NOOP","convertDescription","BlockContent","blockProps","innerBlocksProps","hasResolvedPages","blockList","pages","parentPageID","length","parentPageDetails","find","page","id","title","rendered","ConvertToLinksModal","onClick","disabled","isOpen","setOpen","openModal","closeModal","describedby","PageListEdit","context","clientId","attributes","setAttributes","records","hasResolved","per_page","_fields","orderby","order","allowConvertToLinks","pagesByParentId","Map","sortedPages","sort","a","b","menu_order","localeCompare","reduce","accumulator","parent","has","get","push","set","convertToNavigationLinks","className","textColor","backgroundColor","style","color","getBlockList","parentId","childPages","template","hasChildren","pageProps","label","link","url","item","children","makePagesTree","level","tree","value","repeat","rawName","pagesTree","allowedBlocks","renderAppender","__unstableDisableDropZone","templateLock","onInput","onChange","isNested","select","getBlockParentsByBlockName","blockParents"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,mBAA5B;AACA,SACCC,iBADD,EAECC,aAFD,EAGCC,aAHD,EAICC,mBAJD,EAKCC,iBALD,EAMCC,KAAK,IAAIC,gBANV,EAOCC,OAPD,QAQO,yBARP;AASA,SACCC,SADD,EAECC,aAFD,EAGCC,OAHD,EAICC,MAJD,EAKCC,eALD,EAMCC,MAND,EAOCC,KAPD,QAQO,uBARP;AASA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,OAAT,EAAkBC,QAAlB,EAA4BC,SAA5B,QAA6C,oBAA7C;AACA,SAASC,gBAAT,QAAiC,sBAAjC;AACA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SAASC,2BAAT,QAA4C,mCAA5C,C,CAEA;AACA;;AACA,MAAMC,cAAc,GAAG,GAAvB;;AACA,MAAMC,IAAI,GAAG,MAAM,CAAE,CAArB;;AAEA,MAAMC,kBAAkB,GAAGV,EAAE,CAC5B,6HAD4B,CAA7B;;AAIA,SAASW,YAAT,OAOI;AAAA,MAPmB;AACtBC,IAAAA,UADsB;AAEtBC,IAAAA,gBAFsB;AAGtBC,IAAAA,gBAHsB;AAItBC,IAAAA,SAJsB;AAKtBC,IAAAA,KALsB;AAMtBC,IAAAA;AANsB,GAOnB;;AACH,MAAK,CAAEH,gBAAP,EAA0B;AACzB,WACC,qBAAUF,UAAV,EACC,cAAC,OAAD,OADD,CADD;AAKA;;AAED,MAAKI,KAAK,KAAK,IAAf,EAAsB;AACrB,WACC,qBAAUJ,UAAV,EACC,cAAC,MAAD;AAAQ,MAAA,MAAM,EAAG,SAAjB;AAA6B,MAAA,aAAa,EAAG;AAA7C,OACGZ,EAAE,CAAE,mCAAF,CADL,CADD,CADD;AAOA;;AAED,MAAKgB,KAAK,CAACE,MAAN,KAAiB,CAAtB,EAA0B;AACzB,WACC,qBAAUN,UAAV,EACC,cAAC,MAAD;AAAQ,MAAA,MAAM,EAAG,MAAjB;AAA0B,MAAA,aAAa,EAAG;AAA1C,OACGZ,EAAE,CAAE,mCAAF,CADL,CADD,CADD;AAOA;;AAED,MAAKe,SAAS,CAACG,MAAV,KAAqB,CAA1B,EAA8B;AAAA;;AAC7B,UAAMC,iBAAiB,GAAGH,KAAK,CAACI,IAAN,CACvBC,IAAF,IAAYA,IAAI,CAACC,EAAL,KAAYL,YADC,CAA1B;;AAIA,QAAKE,iBAAL,aAAKA,iBAAL,wCAAKA,iBAAiB,CAAEI,KAAxB,kDAAK,sBAA0BC,QAA/B,EAA0C;AACzC,aACC,qBAAUZ,UAAV,EACC,cAAC,OAAD,QACGX,OAAO,EACR;AACAD,MAAAA,EAAE,CAAE,uCAAF,CAFM,EAGRmB,iBAAiB,CAACI,KAAlB,CAAwBC,QAHhB,CADV,CADD,CADD;AAWA;;AAED,WACC,qBAAUZ,UAAV,EACC,cAAC,MAAD;AAAQ,MAAA,MAAM,EAAG,SAAjB;AAA6B,MAAA,aAAa,EAAG;AAA7C,OACGZ,EAAE,CAAE,mCAAF,CADL,CADD,CADD;AAOA;;AAED,MAAKgB,KAAK,CAACE,MAAN,GAAe,CAApB,EAAwB;AACvB,WAAO,oBAASL,gBAAT,CAAP;AACA;AACD;;AAED,SAASY,mBAAT,QAAsD;AAAA,MAAxB;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,GAAwB;AACrD,QAAM,CAAEC,MAAF,EAAUC,OAAV,IAAsB1B,QAAQ,CAAE,KAAF,CAApC;;AACA,QAAM2B,SAAS,GAAG,MAAMD,OAAO,CAAE,IAAF,CAA/B;;AACA,QAAME,UAAU,GAAG,MAAMF,OAAO,CAAE,KAAF,CAAhC;;AAEA,SACC,8BACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC;AAArB,KACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAG7B,EAAE,CAAE,MAAF,CAAzB;AAAsC,IAAA,OAAO,EAAG8B;AAAhD,KACG9B,EAAE,CAAE,MAAF,CADL,CADD,CADD,EAMG4B,MAAM,IACP,cAAC,KAAD;AACC,IAAA,cAAc,EAAGG,UADlB;AAEC,IAAA,KAAK,EAAG/B,EAAE,CAAE,gBAAF,CAFX;AAGC,IAAA,SAAS,EAAG,0BAHb;AAIC,IAAA,IAAI,EAAG;AACNgC,MAAAA,WAAW,EAAE;AADP;AAJR,KAQC;AAAG,IAAA,EAAE,EAAG;AAAR,KACGtB,kBADH,CARD,EAWC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,UAAhB;AAA2B,IAAA,OAAO,EAAGqB;AAArC,KACG/B,EAAE,CAAE,QAAF,CADL,CADD,EAIC,cAAC,MAAD;AACC,IAAA,OAAO,EAAC,SADT;AAEC,IAAA,QAAQ,EAAG2B,QAFZ;AAGC,IAAA,OAAO,EAAGD;AAHX,KAKG1B,EAAE,CAAE,MAAF,CALL,CAJD,CAXD,CAPF,CADD;AAmCA;;AAED,eAAe,SAASiC,YAAT,QAKX;AAAA;;AAAA,MALkC;AACrCC,IAAAA,OADqC;AAErCC,IAAAA,QAFqC;AAGrCC,IAAAA,UAHqC;AAIrCC,IAAAA;AAJqC,GAKlC;AACH,QAAM;AAAEpB,IAAAA;AAAF,MAAmBmB,UAAzB;AAEA,QAAM;AAAEE,IAAAA,OAAO,EAAEtB,KAAX;AAAkBuB,IAAAA,WAAW,EAAEzB;AAA/B,MAAoDT,gBAAgB,CACzE,UADyE,EAEzE,MAFyE,EAGzE;AACCmC,IAAAA,QAAQ,EAAEhC,cADX;AAECiC,IAAAA,OAAO,EAAE,CAAE,IAAF,EAAQ,MAAR,EAAgB,YAAhB,EAA8B,QAA9B,EAAwC,OAAxC,EAAiD,MAAjD,CAFV;AAGC;AACA;AACA;AACAC,IAAAA,OAAO,EAAE,YANV;AAOCC,IAAAA,KAAK,EAAE;AAPR,GAHyE,CAA1E;AAcA,QAAMC,mBAAmB,GACxB,qBAAqBV,OAArB,IACA,CAAAlB,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEE,MAAP,IAAgB,CADhB,IAEA,CAAAF,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEE,MAAP,KAAiBV,cAHlB;AAKA,QAAMqC,eAAe,GAAG3C,OAAO,CAAE,MAAM;AACtC,QAAKc,KAAK,KAAK,IAAf,EAAsB;AACrB,aAAO,IAAI8B,GAAJ,EAAP;AACA,KAHqC,CAKtC;AACA;AACA;;;AACA,UAAMC,WAAW,GAAG/B,KAAK,CAACgC,IAAN,CAAY,CAAEC,CAAF,EAAKC,CAAL,KAAY;AAC3C,UAAKD,CAAC,CAACE,UAAF,KAAiBD,CAAC,CAACC,UAAxB,EAAqC;AACpC,eAAOF,CAAC,CAAC1B,KAAF,CAAQC,QAAR,CAAiB4B,aAAjB,CAAgCF,CAAC,CAAC3B,KAAF,CAAQC,QAAxC,CAAP;AACA;;AACD,aAAOyB,CAAC,CAACE,UAAF,GAAeD,CAAC,CAACC,UAAxB;AACA,KALmB,CAApB;AAOA,WAAOJ,WAAW,CAACM,MAAZ,CAAoB,CAAEC,WAAF,EAAejC,IAAf,KAAyB;AACnD,YAAM;AAAEkC,QAAAA;AAAF,UAAalC,IAAnB;;AACA,UAAKiC,WAAW,CAACE,GAAZ,CAAiBD,MAAjB,CAAL,EAAiC;AAChCD,QAAAA,WAAW,CAACG,GAAZ,CAAiBF,MAAjB,EAA0BG,IAA1B,CAAgCrC,IAAhC;AACA,OAFD,MAEO;AACNiC,QAAAA,WAAW,CAACK,GAAZ,CAAiBJ,MAAjB,EAAyB,CAAElC,IAAF,CAAzB;AACA;;AACD,aAAOiC,WAAP;AACA,KARM,EAQJ,IAAIR,GAAJ,EARI,CAAP;AASA,GAxB8B,EAwB5B,CAAE9B,KAAF,CAxB4B,CAA/B;AA0BA,QAAM4C,wBAAwB,GAAGrD,2BAA2B,CAAE;AAC7D4B,IAAAA,QAD6D;AAE7DnB,IAAAA,KAF6D;AAG7DC,IAAAA;AAH6D,GAAF,CAA5D;AAMA,QAAML,UAAU,GAAGzB,aAAa,CAAE;AACjC0E,IAAAA,SAAS,EAAE9E,UAAU,CAAE,oBAAF,EAAwB;AAC5C,wBAAkB,CAAC,CAAEmD,OAAO,CAAC4B,SADe;AAE5C,OAAEzE,iBAAiB,CAAE,OAAF,EAAW6C,OAAO,CAAC4B,SAAnB,CAAnB,GACC,CAAC,CAAE5B,OAAO,CAAC4B,SAHgC;AAI5C,wBAAkB,CAAC,CAAE5B,OAAO,CAAC6B,eAJe;AAK5C,OAAE1E,iBAAiB,CAClB,kBADkB,EAElB6C,OAAO,CAAC6B,eAFU,CAAnB,GAGK,CAAC,CAAE7B,OAAO,CAAC6B;AAR4B,KAAxB,CADY;AAWjCC,IAAAA,KAAK,EAAE,EAAE,sBAAG9B,OAAO,CAAC8B,KAAX,mDAAG,eAAeC,KAAlB;AAAF;AAX0B,GAAF,CAAhC;;AAcA,QAAMC,YAAY,GAAG,YAA+B;AAAA,QAA7BC,QAA6B,uEAAlBlD,YAAkB;AACnD,UAAMmD,UAAU,GAAGvB,eAAe,CAACY,GAAhB,CAAqBU,QAArB,CAAnB;;AAEA,QAAK,EAAEC,UAAF,aAAEA,UAAF,eAAEA,UAAU,CAAElD,MAAd,CAAL,EAA4B;AAC3B,aAAO,EAAP;AACA;;AAED,WAAOkD,UAAU,CAACf,MAAX,CAAmB,CAAEgB,QAAF,EAAYhD,IAAZ,KAAsB;AAAA;;AAC/C,YAAMiD,WAAW,GAAGzB,eAAe,CAACW,GAAhB,CAAqBnC,IAAI,CAACC,EAA1B,CAApB;AACA,YAAMiD,SAAS,GAAG;AACjBjD,QAAAA,EAAE,EAAED,IAAI,CAACC,EADQ;AAEjBkD,QAAAA,KAAK,iBAAEnD,IAAI,CAACE,KAAP,gDAAE,YAAYC,QAFF;AAGjBD,QAAAA,KAAK,kBAAEF,IAAI,CAACE,KAAP,iDAAE,aAAYC,QAHF;AAIjBiD,QAAAA,IAAI,EAAEpD,IAAI,CAACqD,GAJM;AAKjBJ,QAAAA;AALiB,OAAlB;AAOA,UAAIK,IAAI,GAAG,IAAX;AACA,YAAMC,QAAQ,GAAGV,YAAY,CAAE7C,IAAI,CAACC,EAAP,CAA7B;AACAqD,MAAAA,IAAI,GAAG3F,WAAW,CAAE,qBAAF,EAAyBuF,SAAzB,EAAoCK,QAApC,CAAlB;AACAP,MAAAA,QAAQ,CAACX,IAAT,CAAeiB,IAAf;AAEA,aAAON,QAAP;AACA,KAfM,EAeJ,EAfI,CAAP;AAgBA,GAvBD;;AAyBA,QAAMQ,aAAa,GAAG,YAA+B;AAAA,QAA7BV,QAA6B,uEAAlB,CAAkB;AAAA,QAAfW,KAAe,uEAAP,CAAO;AACpD,UAAMV,UAAU,GAAGvB,eAAe,CAACY,GAAhB,CAAqBU,QAArB,CAAnB;;AAEA,QAAK,EAAEC,UAAF,aAAEA,UAAF,eAAEA,UAAU,CAAElD,MAAd,CAAL,EAA4B;AAC3B,aAAO,EAAP;AACA;;AAED,WAAOkD,UAAU,CAACf,MAAX,CAAmB,CAAE0B,IAAF,EAAQ1D,IAAR,KAAkB;AAC3C,YAAMiD,WAAW,GAAGzB,eAAe,CAACW,GAAhB,CAAqBnC,IAAI,CAACC,EAA1B,CAApB;AACA,YAAMqD,IAAI,GAAG;AACZK,QAAAA,KAAK,EAAE3D,IAAI,CAACC,EADA;AAEZkD,QAAAA,KAAK,EAAE,KAAKS,MAAL,CAAaH,KAAb,IAAuBzD,IAAI,CAACE,KAAL,CAAWC,QAF7B;AAGZ0D,QAAAA,OAAO,EAAE7D,IAAI,CAACE,KAAL,CAAWC;AAHR,OAAb;AAKAuD,MAAAA,IAAI,CAACrB,IAAL,CAAWiB,IAAX;;AACA,UAAKL,WAAL,EAAmB;AAClBS,QAAAA,IAAI,CAACrB,IAAL,CAAW,GAAGmB,aAAa,CAAExD,IAAI,CAACC,EAAP,EAAWwD,KAAK,GAAG,CAAnB,CAA3B;AACA;;AACD,aAAOC,IAAP;AACA,KAZM,EAYJ,EAZI,CAAP;AAaA,GApBD;;AAsBA,QAAMI,SAAS,GAAGjF,OAAO,CAAE2E,aAAF,EAAiB,CAAEhC,eAAF,CAAjB,CAAzB;AAEA,QAAM9B,SAAS,GAAGb,OAAO,CAAEgE,YAAF,EAAgB,CACxCrB,eADwC,EAExC5B,YAFwC,CAAhB,CAAzB;AAKA,QAAMJ,gBAAgB,GAAGzB,mBAAmB,CAAEwB,UAAF,EAAc;AACzDwE,IAAAA,aAAa,EAAE,CAAE,qBAAF,CAD0C;AAEzDC,IAAAA,cAAc,EAAE,KAFyC;AAGzDC,IAAAA,yBAAyB,EAAE,IAH8B;AAIzDC,IAAAA,YAAY,EAAE,KAJ2C;AAKzDC,IAAAA,OAAO,EAAE/E,IALgD;AAMzDgF,IAAAA,QAAQ,EAAEhF,IAN+C;AAOzDuE,IAAAA,KAAK,EAAEjE;AAPkD,GAAd,CAA5C;AAUA,QAAM;AAAE2E,IAAAA;AAAF,MAAepF,SAAS,CAC3BqF,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAiCD,MAAM,CAAEpG,gBAAF,CAA7C;AACA,UAAMsG,YAAY,GAAGD,0BAA0B,CAC9CzD,QAD8C,EAE9C,yBAF8C,EAG9C,IAH8C,CAA/C;AAKA,WAAO;AACNuD,MAAAA,QAAQ,EAAEG,YAAY,CAAC3E,MAAb,GAAsB;AAD1B,KAAP;AAGA,GAX4B,EAY7B,CAAEiB,QAAF,CAZ6B,CAA9B;AAeA/B,EAAAA,SAAS,CAAE,MAAM;AAChBiC,IAAAA,aAAa,CAAE;AAAEqD,MAAAA;AAAF,KAAF,CAAb;AACA,GAFQ,EAEN,CAAEA,QAAF,CAFM,CAAT;AAIA,SACC,8BACC,cAAC,iBAAD,QACGP,SAAS,CAACjE,MAAV,GAAmB,CAAnB,IACD,cAAC,SAAD,QACC,cAAC,eAAD;AACC,IAAA,SAAS,EAAC,gCADX;AAEC,IAAA,KAAK,EAAGlB,EAAE,CAAE,aAAF,CAFX;AAGC,IAAA,KAAK,EAAGiB,YAHT;AAIC,IAAA,OAAO,EAAGkE,SAJX;AAKC,IAAA,QAAQ,EAAKH,KAAF,IACV3C,aAAa,CAAE;AAAEpB,MAAAA,YAAY,EAAE+D,KAAF,aAAEA,KAAF,cAAEA,KAAF,GAAW;AAAzB,KAAF,CANf;AAQC,IAAA,IAAI,EAAGhF,EAAE,CACR,0CADQ;AARV,IADD,CAFF,EAiBG4C,mBAAmB,IACpB,cAAC,SAAD;AAAW,IAAA,KAAK,EAAG5C,EAAE,CAAE,gBAAF;AAArB,KACC,yBAAKU,kBAAL,CADD,EAEC,cAAC,MAAD;AACC,IAAA,OAAO,EAAC,SADT;AAEC,IAAA,QAAQ,EAAG,CAAEI,gBAFd;AAGC,IAAA,OAAO,EAAG8C;AAHX,KAKG5D,EAAE,CAAE,MAAF,CALL,CAFD,CAlBF,CADD,EA+BG4C,mBAAmB,IACpB,cAAC,mBAAD;AACC,IAAA,QAAQ,EAAG,CAAE9B,gBADd;AAEC,IAAA,OAAO,EAAG8C;AAFX,IAhCF,EAqCC,cAAC,YAAD;AACC,IAAA,UAAU,EAAGhD,UADd;AAEC,IAAA,gBAAgB,EAAGC,gBAFpB;AAGC,IAAA,gBAAgB,EAAGC,gBAHpB;AAIC,IAAA,SAAS,EAAGC,SAJb;AAKC,IAAA,KAAK,EAAGC,KALT;AAMC,IAAA,YAAY,EAAGC;AANhB,IArCD,CADD;AAgDA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport {\n\tInspectorControls,\n\tBlockControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tgetColorClassName,\n\tstore as blockEditorStore,\n\tWarning,\n} from '@wordpress/block-editor';\nimport {\n\tPanelBody,\n\tToolbarButton,\n\tSpinner,\n\tNotice,\n\tComboboxControl,\n\tButton,\n\tModal,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useState, useEffect } from '@wordpress/element';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useConvertToNavigationLinks } from './use-convert-to-navigation-links';\n\n// We only show the edit option when page count is <= MAX_PAGE_COUNT\n// Performance of Navigation Links is not good past this value.\nconst MAX_PAGE_COUNT = 100;\nconst NOOP = () => {};\n\nconst convertDescription = __(\n\t'This menu is automatically kept in sync with pages on your site. You can manage the menu yourself by clicking \"Edit\" below.'\n);\n\nfunction BlockContent( {\n\tblockProps,\n\tinnerBlocksProps,\n\thasResolvedPages,\n\tblockList,\n\tpages,\n\tparentPageID,\n} ) {\n\tif ( ! hasResolvedPages ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Spinner />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages === null ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length === 0 ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'info' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( blockList.length === 0 ) {\n\t\tconst parentPageDetails = pages.find(\n\t\t\t( page ) => page.id === parentPageID\n\t\t);\n\n\t\tif ( parentPageDetails?.title?.rendered ) {\n\t\t\treturn (\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<Warning>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %s: Page title.\n\t\t\t\t\t\t\t__( 'Page List: \"%s\" page has no children.' ),\n\t\t\t\t\t\t\tparentPageDetails.title.rendered\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Warning>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length > 0 ) {\n\t\treturn <ul { ...innerBlocksProps }></ul>;\n\t}\n}\n\nfunction ConvertToLinksModal( { onClick, disabled } ) {\n\tconst [ isOpen, setOpen ] = useState( false );\n\tconst openModal = () => setOpen( true );\n\tconst closeModal = () => setOpen( false );\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<ToolbarButton title={ __( 'Edit' ) } onClick={ openModal }>\n\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</BlockControls>\n\t\t\t{ isOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\tonRequestClose={ closeModal }\n\t\t\t\t\ttitle={ __( 'Edit this menu' ) }\n\t\t\t\t\tclassName={ 'wp-block-page-list-modal' }\n\t\t\t\t\taria={ {\n\t\t\t\t\t\tdescribedby: 'wp-block-page-list-modal__description',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<p id={ 'wp-block-page-list-modal__description' }>\n\t\t\t\t\t\t{ convertDescription }\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"wp-block-page-list-modal-buttons\">\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ closeModal }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default function PageListEdit( {\n\tcontext,\n\tclientId,\n\tattributes,\n\tsetAttributes,\n} ) {\n\tconst { parentPageID } = attributes;\n\n\tconst { records: pages, hasResolved: hasResolvedPages } = useEntityRecords(\n\t\t'postType',\n\t\t'page',\n\t\t{\n\t\t\tper_page: MAX_PAGE_COUNT,\n\t\t\t_fields: [ 'id', 'link', 'menu_order', 'parent', 'title', 'type' ],\n\t\t\t// TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby\n\t\t\t// values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent\n\t\t\t// sort.\n\t\t\torderby: 'menu_order',\n\t\t\torder: 'asc',\n\t\t}\n\t);\n\n\tconst allowConvertToLinks =\n\t\t'showSubmenuIcon' in context &&\n\t\tpages?.length > 0 &&\n\t\tpages?.length <= MAX_PAGE_COUNT;\n\n\tconst pagesByParentId = useMemo( () => {\n\t\tif ( pages === null ) {\n\t\t\treturn new Map();\n\t\t}\n\n\t\t// TODO: Once the REST API supports passing multiple values to\n\t\t// 'orderby', this can be removed.\n\t\t// https://core.trac.wordpress.org/ticket/39037\n\t\tconst sortedPages = pages.sort( ( a, b ) => {\n\t\t\tif ( a.menu_order === b.menu_order ) {\n\t\t\t\treturn a.title.rendered.localeCompare( b.title.rendered );\n\t\t\t}\n\t\t\treturn a.menu_order - b.menu_order;\n\t\t} );\n\n\t\treturn sortedPages.reduce( ( accumulator, page ) => {\n\t\t\tconst { parent } = page;\n\t\t\tif ( accumulator.has( parent ) ) {\n\t\t\t\taccumulator.get( parent ).push( page );\n\t\t\t} else {\n\t\t\t\taccumulator.set( parent, [ page ] );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, new Map() );\n\t}, [ pages ] );\n\n\tconst convertToNavigationLinks = useConvertToNavigationLinks( {\n\t\tclientId,\n\t\tpages,\n\t\tparentPageID,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( 'wp-block-page-list', {\n\t\t\t'has-text-color': !! context.textColor,\n\t\t\t[ getColorClassName( 'color', context.textColor ) ]:\n\t\t\t\t!! context.textColor,\n\t\t\t'has-background': !! context.backgroundColor,\n\t\t\t[ getColorClassName(\n\t\t\t\t'background-color',\n\t\t\t\tcontext.backgroundColor\n\t\t\t) ]: !! context.backgroundColor,\n\t\t} ),\n\t\tstyle: { ...context.style?.color },\n\t} );\n\n\tconst getBlockList = ( parentId = parentPageID ) => {\n\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\tif ( ! childPages?.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn childPages.reduce( ( template, page ) => {\n\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\tconst pageProps = {\n\t\t\t\tid: page.id,\n\t\t\t\tlabel: page.title?.rendered,\n\t\t\t\ttitle: page.title?.rendered,\n\t\t\t\tlink: page.url,\n\t\t\t\thasChildren,\n\t\t\t};\n\t\t\tlet item = null;\n\t\t\tconst children = getBlockList( page.id );\n\t\t\titem = createBlock( 'core/page-list-item', pageProps, children );\n\t\t\ttemplate.push( item );\n\n\t\t\treturn template;\n\t\t}, [] );\n\t};\n\n\tconst makePagesTree = ( parentId = 0, level = 0 ) => {\n\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\tif ( ! childPages?.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn childPages.reduce( ( tree, page ) => {\n\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\tconst item = {\n\t\t\t\tvalue: page.id,\n\t\t\t\tlabel: '— '.repeat( level ) + page.title.rendered,\n\t\t\t\trawName: page.title.rendered,\n\t\t\t};\n\t\t\ttree.push( item );\n\t\t\tif ( hasChildren ) {\n\t\t\t\ttree.push( ...makePagesTree( page.id, level + 1 ) );\n\t\t\t}\n\t\t\treturn tree;\n\t\t}, [] );\n\t};\n\n\tconst pagesTree = useMemo( makePagesTree, [ pagesByParentId ] );\n\n\tconst blockList = useMemo( getBlockList, [\n\t\tpagesByParentId,\n\t\tparentPageID,\n\t] );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/page-list-item' ],\n\t\trenderAppender: false,\n\t\t__unstableDisableDropZone: true,\n\t\ttemplateLock: 'all',\n\t\tonInput: NOOP,\n\t\tonChange: NOOP,\n\t\tvalue: blockList,\n\t} );\n\n\tconst { isNested } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockParentsByBlockName } = select( blockEditorStore );\n\t\t\tconst blockParents = getBlockParentsByBlockName(\n\t\t\t\tclientId,\n\t\t\t\t'core/navigation-submenu',\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tisNested: blockParents.length > 0,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tuseEffect( () => {\n\t\tsetAttributes( { isNested } );\n\t}, [ isNested ] );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t{ pagesTree.length > 0 && (\n\t\t\t\t\t<PanelBody>\n\t\t\t\t\t\t<ComboboxControl\n\t\t\t\t\t\t\tclassName=\"editor-page-attributes__parent\"\n\t\t\t\t\t\t\tlabel={ __( 'Parent page' ) }\n\t\t\t\t\t\t\tvalue={ parentPageID }\n\t\t\t\t\t\t\toptions={ pagesTree }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { parentPageID: value ?? 0 } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Choose a page to show only its subpages.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t\t{ allowConvertToLinks && (\n\t\t\t\t\t<PanelBody title={ __( 'Edit this menu' ) }>\n\t\t\t\t\t\t<p>{ convertDescription }</p>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ allowConvertToLinks && (\n\t\t\t\t<ConvertToLinksModal\n\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t<BlockContent\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tinnerBlocksProps={ innerBlocksProps }\n\t\t\t\thasResolvedPages={ hasResolvedPages }\n\t\t\t\tblockList={ blockList }\n\t\t\t\tpages={ pages }\n\t\t\t\tparentPageID={ parentPageID }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
@@ -4,7 +4,15 @@
4
4
  import { createBlock } from '@wordpress/blocks';
5
5
  import { useSelect, useDispatch } from '@wordpress/data';
6
6
  import { store as blockEditorStore } from '@wordpress/block-editor';
7
- export function convertToNavigationLinks() {
7
+ /**
8
+ * Converts an array of pages into a nested array of navigation link blocks.
9
+ *
10
+ * @param {Array} pages An array of pages.
11
+ *
12
+ * @return {Array} A nested array of navigation link blocks.
13
+ */
14
+
15
+ function createNavigationLinks() {
8
16
  let pages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
9
17
  const linkMap = {};
10
18
  const navigationLinks = [];
@@ -36,14 +44,61 @@ export function convertToNavigationLinks() {
36
44
  linkMap[parent] = {
37
45
  innerBlocks: []
38
46
  };
39
- }
47
+ } // Although these variables are not referenced, they are needed to store the innerBlocks in memory.
48
+
40
49
 
41
50
  const parentLinkInnerBlocks = linkMap[parent].innerBlocks;
42
51
  parentLinkInnerBlocks.push(linkMap[id]);
43
52
  }
44
- }); // Transform all links with innerBlocks into Submenus. This can't be done
53
+ });
54
+ return navigationLinks;
55
+ }
56
+ /**
57
+ * Finds a navigation link block by id, recursively.
58
+ * It might be possible to make this a more generic helper function.
59
+ *
60
+ * @param {Array} navigationLinks An array of navigation link blocks.
61
+ * @param {number} id The id of the navigation link to find.
62
+ *
63
+ * @return {Object|null} The navigation link block with the given id.
64
+ */
65
+
66
+
67
+ function findNavigationLinkById(navigationLinks, id) {
68
+ for (const navigationLink of navigationLinks) {
69
+ // Is this the link we're looking for?
70
+ if (navigationLink.attributes.id === id) {
71
+ return navigationLink;
72
+ } // If not does it have innerBlocks?
73
+
74
+
75
+ if (navigationLink.innerBlocks && navigationLink.innerBlocks.length) {
76
+ const foundNavigationLink = findNavigationLinkById(navigationLink.innerBlocks, id);
77
+
78
+ if (foundNavigationLink) {
79
+ return foundNavigationLink;
80
+ }
81
+ }
82
+ }
83
+
84
+ return null;
85
+ }
86
+
87
+ export function convertToNavigationLinks() {
88
+ let pages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
89
+ let parentPageID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
90
+ let navigationLinks = createNavigationLinks(pages); // If a parent page ID is provided, only return the children of that page.
91
+
92
+ if (parentPageID) {
93
+ const parentPage = findNavigationLinkById(navigationLinks, parentPageID);
94
+
95
+ if (parentPage && parentPage.innerBlocks) {
96
+ navigationLinks = parentPage.innerBlocks;
97
+ }
98
+ } // Transform all links with innerBlocks into Submenus. This can't be done
45
99
  // sooner because page objects have no information on their children.
46
100
 
101
+
47
102
  const transformSubmenus = listOfLinks => {
48
103
  listOfLinks.forEach((block, index, listOfLinksArray) => {
49
104
  const {
@@ -65,7 +120,8 @@ export function convertToNavigationLinks() {
65
120
  export function useConvertToNavigationLinks(_ref2) {
66
121
  let {
67
122
  clientId,
68
- pages
123
+ pages,
124
+ parentPageID
69
125
  } = _ref2;
70
126
  const {
71
127
  replaceBlock,
@@ -86,7 +142,7 @@ export function useConvertToNavigationLinks(_ref2) {
86
142
  };
87
143
  }, [clientId]);
88
144
  return () => {
89
- const navigationLinks = convertToNavigationLinks(pages); // Replace the Page List block with the Navigation Links.
145
+ const navigationLinks = convertToNavigationLinks(pages, parentPageID); // Replace the Page List block with the Navigation Links.
90
146
 
91
147
  replaceBlock(clientId, navigationLinks); // Select the Navigation block to reveal the changes.
92
148
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/page-list/use-convert-to-navigation-links.js"],"names":["createBlock","useSelect","useDispatch","store","blockEditorStore","convertToNavigationLinks","pages","linkMap","navigationLinks","forEach","id","title","link","url","type","parent","innerBlocks","label","rendered","kind","push","parentLinkInnerBlocks","transformSubmenus","listOfLinks","block","index","listOfLinksArray","attributes","length","transformedBlock","useConvertToNavigationLinks","clientId","replaceBlock","selectBlock","parentNavBlockClientId","select","getSelectedBlockClientId","getBlockParentsByBlockName","_selectedBlockClientId"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\nexport function convertToNavigationLinks( pages = [] ) {\n\tconst linkMap = {};\n\tconst navigationLinks = [];\n\tpages.forEach( ( { id, title, link: url, type, parent } ) => {\n\t\t// See if a placeholder exists. This is created if children appear before parents in list.\n\t\tconst innerBlocks = linkMap[ id ]?.innerBlocks ?? [];\n\t\tlinkMap[ id ] = createBlock(\n\t\t\t'core/navigation-link',\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tlabel: title.rendered,\n\t\t\t\turl,\n\t\t\t\ttype,\n\t\t\t\tkind: 'post-type',\n\t\t\t},\n\t\t\tinnerBlocks\n\t\t);\n\n\t\tif ( ! parent ) {\n\t\t\tnavigationLinks.push( linkMap[ id ] );\n\t\t} else {\n\t\t\tif ( ! linkMap[ parent ] ) {\n\t\t\t\t// Use a placeholder if the child appears before parent in list.\n\t\t\t\tlinkMap[ parent ] = { innerBlocks: [] };\n\t\t\t}\n\t\t\tconst parentLinkInnerBlocks = linkMap[ parent ].innerBlocks;\n\t\t\tparentLinkInnerBlocks.push( linkMap[ id ] );\n\t\t}\n\t} );\n\n\t// Transform all links with innerBlocks into Submenus. This can't be done\n\t// sooner because page objects have no information on their children.\n\tconst transformSubmenus = ( listOfLinks ) => {\n\t\tlistOfLinks.forEach( ( block, index, listOfLinksArray ) => {\n\t\t\tconst { attributes, innerBlocks } = block;\n\t\t\tif ( innerBlocks.length !== 0 ) {\n\t\t\t\ttransformSubmenus( innerBlocks );\n\t\t\t\tconst transformedBlock = createBlock(\n\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\tattributes,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t\tlistOfLinksArray[ index ] = transformedBlock;\n\t\t\t}\n\t\t} );\n\t};\n\n\ttransformSubmenus( navigationLinks );\n\n\treturn navigationLinks;\n}\n\nexport function useConvertToNavigationLinks( { clientId, pages } ) {\n\tconst { replaceBlock, selectBlock } = useDispatch( blockEditorStore );\n\n\tconst { parentNavBlockClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\n\t\t\treturn {\n\t\t\t\tparentNavBlockClientId: getBlockParentsByBlockName(\n\t\t\t\t\t_selectedBlockClientId,\n\t\t\t\t\t'core/navigation',\n\t\t\t\t\ttrue\n\t\t\t\t)[ 0 ],\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn () => {\n\t\tconst navigationLinks = convertToNavigationLinks( pages );\n\n\t\t// Replace the Page List block with the Navigation Links.\n\t\treplaceBlock( clientId, navigationLinks );\n\n\t\t// Select the Navigation block to reveal the changes.\n\t\tselectBlock( parentNavBlockClientId );\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/page-list/use-convert-to-navigation-links.js"],"names":["createBlock","useSelect","useDispatch","store","blockEditorStore","createNavigationLinks","pages","linkMap","navigationLinks","forEach","id","title","link","url","type","parent","innerBlocks","label","rendered","kind","push","parentLinkInnerBlocks","findNavigationLinkById","navigationLink","attributes","length","foundNavigationLink","convertToNavigationLinks","parentPageID","parentPage","transformSubmenus","listOfLinks","block","index","listOfLinksArray","transformedBlock","useConvertToNavigationLinks","clientId","replaceBlock","selectBlock","parentNavBlockClientId","select","getSelectedBlockClientId","getBlockParentsByBlockName","_selectedBlockClientId"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Converts an array of pages into a nested array of navigation link blocks.\n *\n * @param {Array} pages An array of pages.\n *\n * @return {Array} A nested array of navigation link blocks.\n */\nfunction createNavigationLinks( pages = [] ) {\n\tconst linkMap = {};\n\tconst navigationLinks = [];\n\tpages.forEach( ( { id, title, link: url, type, parent } ) => {\n\t\t// See if a placeholder exists. This is created if children appear before parents in list.\n\t\tconst innerBlocks = linkMap[ id ]?.innerBlocks ?? [];\n\t\tlinkMap[ id ] = createBlock(\n\t\t\t'core/navigation-link',\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tlabel: title.rendered,\n\t\t\t\turl,\n\t\t\t\ttype,\n\t\t\t\tkind: 'post-type',\n\t\t\t},\n\t\t\tinnerBlocks\n\t\t);\n\n\t\tif ( ! parent ) {\n\t\t\tnavigationLinks.push( linkMap[ id ] );\n\t\t} else {\n\t\t\tif ( ! linkMap[ parent ] ) {\n\t\t\t\t// Use a placeholder if the child appears before parent in list.\n\t\t\t\tlinkMap[ parent ] = { innerBlocks: [] };\n\t\t\t}\n\t\t\t// Although these variables are not referenced, they are needed to store the innerBlocks in memory.\n\t\t\tconst parentLinkInnerBlocks = linkMap[ parent ].innerBlocks;\n\t\t\tparentLinkInnerBlocks.push( linkMap[ id ] );\n\t\t}\n\t} );\n\n\treturn navigationLinks;\n}\n\n/**\n * Finds a navigation link block by id, recursively.\n * It might be possible to make this a more generic helper function.\n *\n * @param {Array} navigationLinks An array of navigation link blocks.\n * @param {number} id The id of the navigation link to find.\n *\n * @return {Object|null} The navigation link block with the given id.\n */\nfunction findNavigationLinkById( navigationLinks, id ) {\n\tfor ( const navigationLink of navigationLinks ) {\n\t\t// Is this the link we're looking for?\n\t\tif ( navigationLink.attributes.id === id ) {\n\t\t\treturn navigationLink;\n\t\t}\n\n\t\t// If not does it have innerBlocks?\n\t\tif ( navigationLink.innerBlocks && navigationLink.innerBlocks.length ) {\n\t\t\tconst foundNavigationLink = findNavigationLinkById(\n\t\t\t\tnavigationLink.innerBlocks,\n\t\t\t\tid\n\t\t\t);\n\n\t\t\tif ( foundNavigationLink ) {\n\t\t\t\treturn foundNavigationLink;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function convertToNavigationLinks( pages = [], parentPageID = null ) {\n\tlet navigationLinks = createNavigationLinks( pages );\n\n\t// If a parent page ID is provided, only return the children of that page.\n\tif ( parentPageID ) {\n\t\tconst parentPage = findNavigationLinkById(\n\t\t\tnavigationLinks,\n\t\t\tparentPageID\n\t\t);\n\t\tif ( parentPage && parentPage.innerBlocks ) {\n\t\t\tnavigationLinks = parentPage.innerBlocks;\n\t\t}\n\t}\n\n\t// Transform all links with innerBlocks into Submenus. This can't be done\n\t// sooner because page objects have no information on their children.\n\tconst transformSubmenus = ( listOfLinks ) => {\n\t\tlistOfLinks.forEach( ( block, index, listOfLinksArray ) => {\n\t\t\tconst { attributes, innerBlocks } = block;\n\t\t\tif ( innerBlocks.length !== 0 ) {\n\t\t\t\ttransformSubmenus( innerBlocks );\n\t\t\t\tconst transformedBlock = createBlock(\n\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\tattributes,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t\tlistOfLinksArray[ index ] = transformedBlock;\n\t\t\t}\n\t\t} );\n\t};\n\n\ttransformSubmenus( navigationLinks );\n\treturn navigationLinks;\n}\n\nexport function useConvertToNavigationLinks( {\n\tclientId,\n\tpages,\n\tparentPageID,\n} ) {\n\tconst { replaceBlock, selectBlock } = useDispatch( blockEditorStore );\n\n\tconst { parentNavBlockClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\n\t\t\treturn {\n\t\t\t\tparentNavBlockClientId: getBlockParentsByBlockName(\n\t\t\t\t\t_selectedBlockClientId,\n\t\t\t\t\t'core/navigation',\n\t\t\t\t\ttrue\n\t\t\t\t)[ 0 ],\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn () => {\n\t\tconst navigationLinks = convertToNavigationLinks( pages, parentPageID );\n\n\t\t// Replace the Page List block with the Navigation Links.\n\t\treplaceBlock( clientId, navigationLinks );\n\n\t\t// Select the Navigation block to reveal the changes.\n\t\tselectBlock( parentNavBlockClientId );\n\t};\n}\n"]}
@@ -11,8 +11,8 @@ import classnames from 'classnames';
11
11
  import { useEntityProp } from '@wordpress/core-data';
12
12
  import { useMemo } from '@wordpress/element';
13
13
  import { AlignmentToolbar, BlockControls, InspectorControls, RichText, Warning, useBlockProps } from '@wordpress/block-editor';
14
- import { PanelBody, ToggleControl } from '@wordpress/components';
15
- import { __ } from '@wordpress/i18n';
14
+ import { PanelBody, ToggleControl, RangeControl } from '@wordpress/components';
15
+ import { __, _x } from '@wordpress/i18n';
16
16
  /**
17
17
  * Internal dependencies
18
18
  */
@@ -23,7 +23,8 @@ export default function PostExcerptEditor(_ref) {
23
23
  attributes: {
24
24
  textAlign,
25
25
  moreText,
26
- showMoreOnNewLine
26
+ showMoreOnNewLine,
27
+ excerptLength
27
28
  },
28
29
  setAttributes,
29
30
  isSelected,
@@ -45,12 +46,20 @@ export default function PostExcerptEditor(_ref) {
45
46
  [`has-text-align-${textAlign}`]: textAlign
46
47
  })
47
48
  });
49
+ /**
50
+ * translators: If your word count is based on single characters (e.g. East Asian characters),
51
+ * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
52
+ * Do not translate into your own language.
53
+ */
54
+
55
+ const wordCountType = _x('words', 'Word count type. Do not translate!');
48
56
  /**
49
57
  * When excerpt is editable, strip the html tags from
50
58
  * rendered excerpt. This will be used if the entity's
51
59
  * excerpt has been produced from the content.
52
60
  */
53
61
 
62
+
54
63
  const strippedRenderedExcerpt = useMemo(() => {
55
64
  if (!renderedExcerpt) return '';
56
65
  const document = new window.DOMParser().parseFromString(renderedExcerpt, 'text/html');
@@ -84,15 +93,42 @@ export default function PostExcerptEditor(_ref) {
84
93
  const excerptClassName = classnames('wp-block-post-excerpt__excerpt', {
85
94
  'is-inline': !showMoreOnNewLine
86
95
  });
96
+ /**
97
+ * The excerpt length setting needs to be applied to both
98
+ * the raw and the rendered excerpt depending on which is being used.
99
+ */
100
+
101
+ const rawOrRenderedExcerpt = !!renderedExcerpt ? strippedRenderedExcerpt : rawExcerpt;
102
+ let trimmedExcerpt = '';
103
+
104
+ if (wordCountType === 'words') {
105
+ trimmedExcerpt = rawOrRenderedExcerpt.trim().split(' ', excerptLength).join(' ');
106
+ } else if (wordCountType === 'characters_excluding_spaces') {
107
+ /*
108
+ * 1. Split the excerpt at the character limit,
109
+ * then join the substrings back into one string.
110
+ * 2. Count the number of spaces in the excerpt
111
+ * by comparing the lengths of the string with and without spaces.
112
+ * 3. Add the number to the length of the visible excerpt,
113
+ * so that the spaces are excluded from the word count.
114
+ */
115
+ const excerptWithSpaces = rawOrRenderedExcerpt.trim().split('', excerptLength).join('');
116
+ const numberOfSpaces = excerptWithSpaces.length - excerptWithSpaces.replaceAll(' ', '').length;
117
+ trimmedExcerpt = rawOrRenderedExcerpt.trim().split('', excerptLength + numberOfSpaces).join('');
118
+ } else if (wordCountType === 'characters_including_spaces') {
119
+ trimmedExcerpt = rawOrRenderedExcerpt.trim().split('', excerptLength);
120
+ }
121
+
122
+ trimmedExcerpt = trimmedExcerpt + '...';
87
123
  const excerptContent = isEditable ? createElement(RichText, {
88
124
  className: excerptClassName,
89
125
  "aria-label": __('Post excerpt text'),
90
- value: rawExcerpt || strippedRenderedExcerpt || (isSelected ? '' : __('No post excerpt found')),
126
+ value: isSelected ? rawOrRenderedExcerpt : (trimmedExcerpt !== '...' ? trimmedExcerpt : '') || __('No post excerpt found'),
91
127
  onChange: setExcerpt,
92
128
  tagName: "p"
93
129
  }) : createElement("p", {
94
130
  className: excerptClassName
95
- }, strippedRenderedExcerpt || __('No post excerpt found'));
131
+ }, trimmedExcerpt !== '...' ? trimmedExcerpt : __('No post excerpt found'));
96
132
  return createElement(Fragment, null, createElement(BlockControls, null, createElement(AlignmentToolbar, {
97
133
  value: textAlign,
98
134
  onChange: newAlign => setAttributes({
@@ -106,6 +142,17 @@ export default function PostExcerptEditor(_ref) {
106
142
  onChange: newShowMoreOnNewLine => setAttributes({
107
143
  showMoreOnNewLine: newShowMoreOnNewLine
108
144
  })
145
+ }), createElement(RangeControl, {
146
+ label: __('Max number of words'),
147
+ value: excerptLength,
148
+ onChange: value => {
149
+ setAttributes({
150
+ excerptLength: value
151
+ });
152
+ setExcerpt();
153
+ },
154
+ min: "10",
155
+ max: "100"
109
156
  }))), createElement("div", blockProps, excerptContent, !showMoreOnNewLine && ' ', showMoreOnNewLine ? createElement("p", {
110
157
  className: "wp-block-post-excerpt__more-text"
111
158
  }, readMoreLink) : readMoreLink));
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/post-excerpt/edit.js"],"names":["classnames","useEntityProp","useMemo","AlignmentToolbar","BlockControls","InspectorControls","RichText","Warning","useBlockProps","PanelBody","ToggleControl","__","useCanEditEntity","PostExcerptEditor","attributes","textAlign","moreText","showMoreOnNewLine","setAttributes","isSelected","context","postId","postType","queryId","isDescendentOfQueryLoop","Number","isFinite","userCanEdit","isEditable","rawExcerpt","setExcerpt","rendered","renderedExcerpt","protected","isProtected","blockProps","className","strippedRenderedExcerpt","document","window","DOMParser","parseFromString","body","textContent","innerText","newAlign","readMoreLink","newMoreText","excerptClassName","excerptContent","newShowMoreOnNewLine"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useEntityProp } from '@wordpress/core-data';\nimport { useMemo } from '@wordpress/element';\nimport {\n\tAlignmentToolbar,\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tWarning,\n\tuseBlockProps,\n} from '@wordpress/block-editor';\nimport { PanelBody, ToggleControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useCanEditEntity } from '../utils/hooks';\n\nexport default function PostExcerptEditor( {\n\tattributes: { textAlign, moreText, showMoreOnNewLine },\n\tsetAttributes,\n\tisSelected,\n\tcontext: { postId, postType, queryId },\n} ) {\n\tconst isDescendentOfQueryLoop = Number.isFinite( queryId );\n\tconst userCanEdit = useCanEditEntity( 'postType', postType, postId );\n\tconst isEditable = userCanEdit && ! isDescendentOfQueryLoop;\n\tconst [\n\t\trawExcerpt,\n\t\tsetExcerpt,\n\t\t{ rendered: renderedExcerpt, protected: isProtected } = {},\n\t] = useEntityProp( 'postType', postType, 'excerpt', postId );\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t} );\n\t/**\n\t * When excerpt is editable, strip the html tags from\n\t * rendered excerpt. This will be used if the entity's\n\t * excerpt has been produced from the content.\n\t */\n\tconst strippedRenderedExcerpt = useMemo( () => {\n\t\tif ( ! renderedExcerpt ) return '';\n\t\tconst document = new window.DOMParser().parseFromString(\n\t\t\trenderedExcerpt,\n\t\t\t'text/html'\n\t\t);\n\t\treturn document.body.textContent || document.body.innerText || '';\n\t}, [ renderedExcerpt ] );\n\tif ( ! postType || ! postId ) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<AlignmentToolbar\n\t\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\t\tonChange={ ( newAlign ) =>\n\t\t\t\t\t\t\tsetAttributes( { textAlign: newAlign } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'This is the Post Excerpt block, it will display the excerpt from single posts.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'If there are any Custom Post Types with support for excerpts, the Post Excerpt block can display the excerpts of those entries as well.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\n\t}\n\tif ( isProtected && ! userCanEdit ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'There is no excerpt because this is a protected post.'\n\t\t\t\t\t) }\n\t\t\t\t</Warning>\n\t\t\t</div>\n\t\t);\n\t}\n\tconst readMoreLink = (\n\t\t<RichText\n\t\t\tclassName=\"wp-block-post-excerpt__more-link\"\n\t\t\ttagName=\"a\"\n\t\t\taria-label={ __( '“Read more” link text' ) }\n\t\t\tplaceholder={ __( 'Add \"read more\" link text' ) }\n\t\t\tvalue={ moreText }\n\t\t\tonChange={ ( newMoreText ) =>\n\t\t\t\tsetAttributes( { moreText: newMoreText } )\n\t\t\t}\n\t\t\twithoutInteractiveFormatting={ true }\n\t\t/>\n\t);\n\tconst excerptClassName = classnames( 'wp-block-post-excerpt__excerpt', {\n\t\t'is-inline': ! showMoreOnNewLine,\n\t} );\n\tconst excerptContent = isEditable ? (\n\t\t<RichText\n\t\t\tclassName={ excerptClassName }\n\t\t\taria-label={ __( 'Post excerpt text' ) }\n\t\t\tvalue={\n\t\t\t\trawExcerpt ||\n\t\t\t\tstrippedRenderedExcerpt ||\n\t\t\t\t( isSelected ? '' : __( 'No post excerpt found' ) )\n\t\t\t}\n\t\t\tonChange={ setExcerpt }\n\t\t\ttagName=\"p\"\n\t\t/>\n\t) : (\n\t\t<p className={ excerptClassName }>\n\t\t\t{ strippedRenderedExcerpt || __( 'No post excerpt found' ) }\n\t\t</p>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<AlignmentToolbar\n\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\tonChange={ ( newAlign ) =>\n\t\t\t\t\t\tsetAttributes( { textAlign: newAlign } )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Show link on new line' ) }\n\t\t\t\t\t\tchecked={ showMoreOnNewLine }\n\t\t\t\t\t\tonChange={ ( newShowMoreOnNewLine ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tshowMoreOnNewLine: newShowMoreOnNewLine,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ excerptContent }\n\t\t\t\t{ ! showMoreOnNewLine && ' ' }\n\t\t\t\t{ showMoreOnNewLine ? (\n\t\t\t\t\t<p className=\"wp-block-post-excerpt__more-text\">\n\t\t\t\t\t\t{ readMoreLink }\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\treadMoreLink\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/post-excerpt/edit.js"],"names":["classnames","useEntityProp","useMemo","AlignmentToolbar","BlockControls","InspectorControls","RichText","Warning","useBlockProps","PanelBody","ToggleControl","RangeControl","__","_x","useCanEditEntity","PostExcerptEditor","attributes","textAlign","moreText","showMoreOnNewLine","excerptLength","setAttributes","isSelected","context","postId","postType","queryId","isDescendentOfQueryLoop","Number","isFinite","userCanEdit","isEditable","rawExcerpt","setExcerpt","rendered","renderedExcerpt","protected","isProtected","blockProps","className","wordCountType","strippedRenderedExcerpt","document","window","DOMParser","parseFromString","body","textContent","innerText","newAlign","readMoreLink","newMoreText","excerptClassName","rawOrRenderedExcerpt","trimmedExcerpt","trim","split","join","excerptWithSpaces","numberOfSpaces","length","replaceAll","excerptContent","newShowMoreOnNewLine","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useEntityProp } from '@wordpress/core-data';\nimport { useMemo } from '@wordpress/element';\nimport {\n\tAlignmentToolbar,\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tWarning,\n\tuseBlockProps,\n} from '@wordpress/block-editor';\nimport { PanelBody, ToggleControl, RangeControl } from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useCanEditEntity } from '../utils/hooks';\n\nexport default function PostExcerptEditor( {\n\tattributes: { textAlign, moreText, showMoreOnNewLine, excerptLength },\n\tsetAttributes,\n\tisSelected,\n\tcontext: { postId, postType, queryId },\n} ) {\n\tconst isDescendentOfQueryLoop = Number.isFinite( queryId );\n\tconst userCanEdit = useCanEditEntity( 'postType', postType, postId );\n\tconst isEditable = userCanEdit && ! isDescendentOfQueryLoop;\n\n\tconst [\n\t\trawExcerpt,\n\t\tsetExcerpt,\n\t\t{ rendered: renderedExcerpt, protected: isProtected } = {},\n\t] = useEntityProp( 'postType', postType, 'excerpt', postId );\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t} );\n\n\t/**\n\t * translators: If your word count is based on single characters (e.g. East Asian characters),\n\t * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.\n\t * Do not translate into your own language.\n\t */\n\tconst wordCountType = _x( 'words', 'Word count type. Do not translate!' );\n\n\t/**\n\t * When excerpt is editable, strip the html tags from\n\t * rendered excerpt. This will be used if the entity's\n\t * excerpt has been produced from the content.\n\t */\n\tconst strippedRenderedExcerpt = useMemo( () => {\n\t\tif ( ! renderedExcerpt ) return '';\n\t\tconst document = new window.DOMParser().parseFromString(\n\t\t\trenderedExcerpt,\n\t\t\t'text/html'\n\t\t);\n\t\treturn document.body.textContent || document.body.innerText || '';\n\t}, [ renderedExcerpt ] );\n\tif ( ! postType || ! postId ) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<AlignmentToolbar\n\t\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\t\tonChange={ ( newAlign ) =>\n\t\t\t\t\t\t\tsetAttributes( { textAlign: newAlign } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'This is the Post Excerpt block, it will display the excerpt from single posts.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'If there are any Custom Post Types with support for excerpts, the Post Excerpt block can display the excerpts of those entries as well.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\n\t}\n\tif ( isProtected && ! userCanEdit ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'There is no excerpt because this is a protected post.'\n\t\t\t\t\t) }\n\t\t\t\t</Warning>\n\t\t\t</div>\n\t\t);\n\t}\n\tconst readMoreLink = (\n\t\t<RichText\n\t\t\tclassName=\"wp-block-post-excerpt__more-link\"\n\t\t\ttagName=\"a\"\n\t\t\taria-label={ __( '“Read more” link text' ) }\n\t\t\tplaceholder={ __( 'Add \"read more\" link text' ) }\n\t\t\tvalue={ moreText }\n\t\t\tonChange={ ( newMoreText ) =>\n\t\t\t\tsetAttributes( { moreText: newMoreText } )\n\t\t\t}\n\t\t\twithoutInteractiveFormatting={ true }\n\t\t/>\n\t);\n\tconst excerptClassName = classnames( 'wp-block-post-excerpt__excerpt', {\n\t\t'is-inline': ! showMoreOnNewLine,\n\t} );\n\n\t/**\n\t * The excerpt length setting needs to be applied to both\n\t * the raw and the rendered excerpt depending on which is being used.\n\t */\n\tconst rawOrRenderedExcerpt = !! renderedExcerpt\n\t\t? strippedRenderedExcerpt\n\t\t: rawExcerpt;\n\n\tlet trimmedExcerpt = '';\n\tif ( wordCountType === 'words' ) {\n\t\ttrimmedExcerpt = rawOrRenderedExcerpt\n\t\t\t.trim()\n\t\t\t.split( ' ', excerptLength )\n\t\t\t.join( ' ' );\n\t} else if ( wordCountType === 'characters_excluding_spaces' ) {\n\t\t/*\n\t\t * 1. Split the excerpt at the character limit,\n\t\t * then join the substrings back into one string.\n\t\t * 2. Count the number of spaces in the excerpt\n\t\t * by comparing the lengths of the string with and without spaces.\n\t\t * 3. Add the number to the length of the visible excerpt,\n\t\t * so that the spaces are excluded from the word count.\n\t\t */\n\t\tconst excerptWithSpaces = rawOrRenderedExcerpt\n\t\t\t.trim()\n\t\t\t.split( '', excerptLength )\n\t\t\t.join( '' );\n\n\t\tconst numberOfSpaces =\n\t\t\texcerptWithSpaces.length -\n\t\t\texcerptWithSpaces.replaceAll( ' ', '' ).length;\n\n\t\ttrimmedExcerpt = rawOrRenderedExcerpt\n\t\t\t.trim()\n\t\t\t.split( '', excerptLength + numberOfSpaces )\n\t\t\t.join( '' );\n\t} else if ( wordCountType === 'characters_including_spaces' ) {\n\t\ttrimmedExcerpt = rawOrRenderedExcerpt.trim().split( '', excerptLength );\n\t}\n\n\ttrimmedExcerpt = trimmedExcerpt + '...';\n\n\tconst excerptContent = isEditable ? (\n\t\t<RichText\n\t\t\tclassName={ excerptClassName }\n\t\t\taria-label={ __( 'Post excerpt text' ) }\n\t\t\tvalue={\n\t\t\t\tisSelected\n\t\t\t\t\t? rawOrRenderedExcerpt\n\t\t\t\t\t: ( trimmedExcerpt !== '...' ? trimmedExcerpt : '' ) ||\n\t\t\t\t\t __( 'No post excerpt found' )\n\t\t\t}\n\t\t\tonChange={ setExcerpt }\n\t\t\ttagName=\"p\"\n\t\t/>\n\t) : (\n\t\t<p className={ excerptClassName }>\n\t\t\t{ trimmedExcerpt !== '...'\n\t\t\t\t? trimmedExcerpt\n\t\t\t\t: __( 'No post excerpt found' ) }\n\t\t</p>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<AlignmentToolbar\n\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\tonChange={ ( newAlign ) =>\n\t\t\t\t\t\tsetAttributes( { textAlign: newAlign } )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Show link on new line' ) }\n\t\t\t\t\t\tchecked={ showMoreOnNewLine }\n\t\t\t\t\t\tonChange={ ( newShowMoreOnNewLine ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tshowMoreOnNewLine: newShowMoreOnNewLine,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\tlabel={ __( 'Max number of words' ) }\n\t\t\t\t\t\tvalue={ excerptLength }\n\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\tsetAttributes( { excerptLength: value } );\n\t\t\t\t\t\t\tsetExcerpt();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tmin=\"10\"\n\t\t\t\t\t\tmax=\"100\"\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ excerptContent }\n\t\t\t\t{ ! showMoreOnNewLine && ' ' }\n\t\t\t\t{ showMoreOnNewLine ? (\n\t\t\t\t\t<p className=\"wp-block-post-excerpt__more-text\">\n\t\t\t\t\t\t{ readMoreLink }\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\treadMoreLink\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"]}
@@ -25,6 +25,10 @@ const metadata = {
25
25
  showMoreOnNewLine: {
26
26
  type: "boolean",
27
27
  "default": true
28
+ },
29
+ excerptLength: {
30
+ type: "number",
31
+ "default": 55
28
32
  }
29
33
  },
30
34
  usesContext: ["postId", "postType", "queryId"],
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/post-excerpt/index.js"],"names":["postExcerpt","icon","initBlock","edit","transforms","name","metadata","settings","init"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,IAAIC,IAAxB,QAAoC,kBAApC;AAEA;AACA;AACA;;AACA,OAAOC,SAAP,MAAsB,qBAAtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAOC,IAAP,MAAiB,QAAjB;AACA,OAAOC,UAAP,MAAuB,cAAvB;AAEA,MAAM;AAAEC,EAAAA;AAAF,IAAWC,QAAjB;AACA,SAASA,QAAT,EAAmBD,IAAnB;AAEA,OAAO,MAAME,QAAQ,GAAG;AACvBN,EAAAA,IADuB;AAEvBG,EAAAA,UAFuB;AAGvBD,EAAAA;AAHuB,CAAjB;AAMP,OAAO,MAAMK,IAAI,GAAG,MAAMN,SAAS,CAAE;AAAEG,EAAAA,IAAF;AAAQC,EAAAA,QAAR;AAAkBC,EAAAA;AAAlB,CAAF,CAA5B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { postExcerpt as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport transforms from './transforms';\n\nconst { name } = metadata;\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\ttransforms,\n\tedit,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/post-excerpt/index.js"],"names":["postExcerpt","icon","initBlock","edit","transforms","name","metadata","settings","init"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,IAAIC,IAAxB,QAAoC,kBAApC;AAEA;AACA;AACA;;AACA,OAAOC,SAAP,MAAsB,qBAAtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAOC,IAAP,MAAiB,QAAjB;AACA,OAAOC,UAAP,MAAuB,cAAvB;AAEA,MAAM;AAAEC,EAAAA;AAAF,IAAWC,QAAjB;AACA,SAASA,QAAT,EAAmBD,IAAnB;AAEA,OAAO,MAAME,QAAQ,GAAG;AACvBN,EAAAA,IADuB;AAEvBG,EAAAA,UAFuB;AAGvBD,EAAAA;AAHuB,CAAjB;AAMP,OAAO,MAAMK,IAAI,GAAG,MAAMN,SAAS,CAAE;AAAEG,EAAAA,IAAF;AAAQC,EAAAA,QAAR;AAAkBC,EAAAA;AAAlB,CAAF,CAA5B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { postExcerpt as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport transforms from './transforms';\n\nconst { name } = metadata;\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\ttransforms,\n\tedit,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"]}
@@ -28,6 +28,7 @@ const DimensionControls = _ref => {
28
28
  let {
29
29
  clientId,
30
30
  attributes: {
31
+ aspectRatio,
31
32
  width,
32
33
  height,
33
34
  scale,
@@ -60,6 +61,56 @@ const DimensionControls = _ref => {
60
61
  return createElement(InspectorControls, {
61
62
  group: "dimensions"
62
63
  }, createElement(ToolsPanelItem, {
64
+ hasValue: () => !!aspectRatio,
65
+ label: __('Aspect ratio'),
66
+ onDeselect: () => setAttributes({
67
+ aspectRatio: undefined
68
+ }),
69
+ resetAllFilter: () => ({
70
+ aspectRatio: undefined
71
+ }),
72
+ isShownByDefault: true,
73
+ panelId: clientId
74
+ }, createElement(SelectControl, {
75
+ __nextHasNoMarginBottom: true,
76
+ label: __('Aspect ratio'),
77
+ value: aspectRatio,
78
+ options: [// These should use the same values as AspectRatioDropdown in @wordpress/block-editor
79
+ {
80
+ label: __('Original'),
81
+ value: 'auto'
82
+ }, {
83
+ label: __('Square'),
84
+ value: '1'
85
+ }, {
86
+ label: __('16:10'),
87
+ value: '16/10'
88
+ }, {
89
+ label: __('16:9'),
90
+ value: '16/9'
91
+ }, {
92
+ label: __('4:3'),
93
+ value: '4/3'
94
+ }, {
95
+ label: __('3:2'),
96
+ value: '3/2'
97
+ }, {
98
+ label: __('10:16'),
99
+ value: '10/16'
100
+ }, {
101
+ label: __('9:16'),
102
+ value: '9/16'
103
+ }, {
104
+ label: __('3:4'),
105
+ value: '3/4'
106
+ }, {
107
+ label: __('2:3'),
108
+ value: '2/3'
109
+ }],
110
+ onChange: nextAspectRatio => setAttributes({
111
+ aspectRatio: nextAspectRatio
112
+ })
113
+ })), createElement(ToolsPanelItem, {
63
114
  className: "single-column",
64
115
  hasValue: () => !!height,
65
116
  label: __('Height'),
@@ -97,7 +148,7 @@ const DimensionControls = _ref => {
97
148
  min: 0,
98
149
  onChange: nextWidth => onDimensionChange('width', nextWidth),
99
150
  units: units
100
- })), !!height && createElement(ToolsPanelItem, {
151
+ })), (height || aspectRatio) && createElement(ToolsPanelItem, {
101
152
  hasValue: () => !!scale && scale !== DEFAULT_SCALE,
102
153
  label: scaleLabel,
103
154
  onDeselect: () => setAttributes({
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/post-featured-image/dimension-controls.js"],"names":["__","_x","SelectControl","__experimentalUnitControl","UnitControl","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","__experimentalUseCustomUnits","useCustomUnits","__experimentalToolsPanelItem","ToolsPanelItem","InspectorControls","useSetting","SCALE_OPTIONS","DEFAULT_SCALE","DEFAULT_SIZE","scaleHelp","cover","contain","fill","DimensionControls","clientId","attributes","width","height","scale","sizeSlug","setAttributes","imageSizeOptions","defaultUnits","units","availableUnits","onDimensionChange","dimension","nextValue","parsedValue","parseFloat","isNaN","scaleLabel","undefined","nextHeight","nextWidth","value","length","nextSizeSlug"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport {\n\tSelectControl,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { InspectorControls, useSetting } from '@wordpress/block-editor';\n\nconst SCALE_OPTIONS = (\n\t<>\n\t\t<ToggleGroupControlOption\n\t\t\tvalue=\"cover\"\n\t\t\tlabel={ _x( 'Cover', 'Scale option for Image dimension control' ) }\n\t\t/>\n\t\t<ToggleGroupControlOption\n\t\t\tvalue=\"contain\"\n\t\t\tlabel={ _x(\n\t\t\t\t'Contain',\n\t\t\t\t'Scale option for Image dimension control'\n\t\t\t) }\n\t\t/>\n\t\t<ToggleGroupControlOption\n\t\t\tvalue=\"fill\"\n\t\t\tlabel={ _x( 'Fill', 'Scale option for Image dimension control' ) }\n\t\t/>\n\t</>\n);\n\nconst DEFAULT_SCALE = 'cover';\nconst DEFAULT_SIZE = 'full';\n\nconst scaleHelp = {\n\tcover: __(\n\t\t'Image is scaled and cropped to fill the entire space without being distorted.'\n\t),\n\tcontain: __(\n\t\t'Image is scaled to fill the space without clipping nor distorting.'\n\t),\n\tfill: __(\n\t\t'Image will be stretched and distorted to completely fill the space.'\n\t),\n};\n\nconst DimensionControls = ( {\n\tclientId,\n\tattributes: { width, height, scale, sizeSlug },\n\tsetAttributes,\n\timageSizeOptions = [],\n} ) => {\n\tconst defaultUnits = [ 'px', '%', 'vw', 'em', 'rem' ];\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || defaultUnits,\n\t} );\n\tconst onDimensionChange = ( dimension, nextValue ) => {\n\t\tconst parsedValue = parseFloat( nextValue );\n\t\t/**\n\t\t * If we have no value set and we change the unit,\n\t\t * we don't want to set the attribute, as it would\n\t\t * end up having the unit as value without any number.\n\t\t */\n\t\tif ( isNaN( parsedValue ) && nextValue ) return;\n\t\tsetAttributes( {\n\t\t\t[ dimension ]: parsedValue < 0 ? '0' : nextValue,\n\t\t} );\n\t};\n\tconst scaleLabel = _x( 'Scale', 'Image scaling options' );\n\treturn (\n\t\t<InspectorControls group=\"dimensions\">\n\t\t\t<ToolsPanelItem\n\t\t\t\tclassName=\"single-column\"\n\t\t\t\thasValue={ () => !! height }\n\t\t\t\tlabel={ __( 'Height' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { height: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\theight: undefined,\n\t\t\t\t} ) }\n\t\t\t\tisShownByDefault={ true }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<UnitControl\n\t\t\t\t\tlabel={ __( 'Height' ) }\n\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\tvalue={ height || '' }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tonChange={ ( nextHeight ) =>\n\t\t\t\t\t\tonDimensionChange( 'height', nextHeight )\n\t\t\t\t\t}\n\t\t\t\t\tunits={ units }\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t\t<ToolsPanelItem\n\t\t\t\tclassName=\"single-column\"\n\t\t\t\thasValue={ () => !! width }\n\t\t\t\tlabel={ __( 'Width' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { width: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\twidth: undefined,\n\t\t\t\t} ) }\n\t\t\t\tisShownByDefault={ true }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<UnitControl\n\t\t\t\t\tlabel={ __( 'Width' ) }\n\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\tvalue={ width || '' }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tonChange={ ( nextWidth ) =>\n\t\t\t\t\t\tonDimensionChange( 'width', nextWidth )\n\t\t\t\t\t}\n\t\t\t\t\tunits={ units }\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t\t{ !! height && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => !! scale && scale !== DEFAULT_SCALE }\n\t\t\t\t\tlabel={ scaleLabel }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tscale: DEFAULT_SCALE,\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\t\tscale: DEFAULT_SCALE,\n\t\t\t\t\t} ) }\n\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\tpanelId={ clientId }\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ scaleLabel }\n\t\t\t\t\t\tvalue={ scale }\n\t\t\t\t\t\thelp={ scaleHelp[ scale ] }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tscale: value,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisBlock\n\t\t\t\t\t>\n\t\t\t\t\t\t{ SCALE_OPTIONS }\n\t\t\t\t\t</ToggleGroupControl>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t\t{ !! imageSizeOptions.length && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => !! sizeSlug }\n\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( { sizeSlug: undefined } )\n\t\t\t\t\t}\n\t\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\t\tsizeSlug: undefined,\n\t\t\t\t\t} ) }\n\t\t\t\t\tisShownByDefault={ false }\n\t\t\t\t\tpanelId={ clientId }\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\t\tvalue={ sizeSlug || DEFAULT_SIZE }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t\tonChange={ ( nextSizeSlug ) =>\n\t\t\t\t\t\t\tsetAttributes( { sizeSlug: nextSizeSlug } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\thelp={ __( 'Select the size of the source image.' ) }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t</InspectorControls>\n\t);\n};\n\nexport default DimensionControls;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/post-featured-image/dimension-controls.js"],"names":["__","_x","SelectControl","__experimentalUnitControl","UnitControl","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","__experimentalUseCustomUnits","useCustomUnits","__experimentalToolsPanelItem","ToolsPanelItem","InspectorControls","useSetting","SCALE_OPTIONS","DEFAULT_SCALE","DEFAULT_SIZE","scaleHelp","cover","contain","fill","DimensionControls","clientId","attributes","aspectRatio","width","height","scale","sizeSlug","setAttributes","imageSizeOptions","defaultUnits","units","availableUnits","onDimensionChange","dimension","nextValue","parsedValue","parseFloat","isNaN","scaleLabel","undefined","label","value","nextAspectRatio","nextHeight","nextWidth","length","nextSizeSlug"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,EAAb,QAAuB,iBAAvB;AACA,SACCC,aADD,EAECC,yBAAyB,IAAIC,WAF9B,EAGCC,gCAAgC,IAAIC,kBAHrC,EAICC,sCAAsC,IAAIC,wBAJ3C,EAKCC,4BAA4B,IAAIC,cALjC,EAMCC,4BAA4B,IAAIC,cANjC,QAOO,uBAPP;AAQA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,yBAA9C;AAEA,MAAMC,aAAa,GAClB,8BACC,cAAC,wBAAD;AACC,EAAA,KAAK,EAAC,OADP;AAEC,EAAA,KAAK,EAAGd,EAAE,CAAE,OAAF,EAAW,0CAAX;AAFX,EADD,EAKC,cAAC,wBAAD;AACC,EAAA,KAAK,EAAC,SADP;AAEC,EAAA,KAAK,EAAGA,EAAE,CACT,SADS,EAET,0CAFS;AAFX,EALD,EAYC,cAAC,wBAAD;AACC,EAAA,KAAK,EAAC,MADP;AAEC,EAAA,KAAK,EAAGA,EAAE,CAAE,MAAF,EAAU,0CAAV;AAFX,EAZD,CADD;AAoBA,MAAMe,aAAa,GAAG,OAAtB;AACA,MAAMC,YAAY,GAAG,MAArB;AAEA,MAAMC,SAAS,GAAG;AACjBC,EAAAA,KAAK,EAAEnB,EAAE,CACR,+EADQ,CADQ;AAIjBoB,EAAAA,OAAO,EAAEpB,EAAE,CACV,oEADU,CAJM;AAOjBqB,EAAAA,IAAI,EAAErB,EAAE,CACP,qEADO;AAPS,CAAlB;;AAYA,MAAMsB,iBAAiB,GAAG,QAKnB;AAAA,MALqB;AAC3BC,IAAAA,QAD2B;AAE3BC,IAAAA,UAAU,EAAE;AAAEC,MAAAA,WAAF;AAAeC,MAAAA,KAAf;AAAsBC,MAAAA,MAAtB;AAA8BC,MAAAA,KAA9B;AAAqCC,MAAAA;AAArC,KAFe;AAG3BC,IAAAA,aAH2B;AAI3BC,IAAAA,gBAAgB,GAAG;AAJQ,GAKrB;AACN,QAAMC,YAAY,GAAG,CAAE,IAAF,EAAQ,GAAR,EAAa,IAAb,EAAmB,IAAnB,EAAyB,KAAzB,CAArB;AACA,QAAMC,KAAK,GAAGvB,cAAc,CAAE;AAC7BwB,IAAAA,cAAc,EAAEpB,UAAU,CAAE,eAAF,CAAV,IAAiCkB;AADpB,GAAF,CAA5B;;AAGA,QAAMG,iBAAiB,GAAG,CAAEC,SAAF,EAAaC,SAAb,KAA4B;AACrD,UAAMC,WAAW,GAAGC,UAAU,CAAEF,SAAF,CAA9B;AACA;AACF;AACA;AACA;AACA;;AACE,QAAKG,KAAK,CAAEF,WAAF,CAAL,IAAwBD,SAA7B,EAAyC;AACzCP,IAAAA,aAAa,CAAE;AACd,OAAEM,SAAF,GAAeE,WAAW,GAAG,CAAd,GAAkB,GAAlB,GAAwBD;AADzB,KAAF,CAAb;AAGA,GAXD;;AAYA,QAAMI,UAAU,GAAGxC,EAAE,CAAE,OAAF,EAAW,uBAAX,CAArB;;AACA,SACC,cAAC,iBAAD;AAAmB,IAAA,KAAK,EAAC;AAAzB,KACC,cAAC,cAAD;AACC,IAAA,QAAQ,EAAG,MAAM,CAAC,CAAEwB,WADrB;AAEC,IAAA,KAAK,EAAGzB,EAAE,CAAE,cAAF,CAFX;AAGC,IAAA,UAAU,EAAG,MAAM8B,aAAa,CAAE;AAAEL,MAAAA,WAAW,EAAEiB;AAAf,KAAF,CAHjC;AAIC,IAAA,cAAc,EAAG,OAAQ;AACxBjB,MAAAA,WAAW,EAAEiB;AADW,KAAR,CAJlB;AAOC,IAAA,gBAAgB,EAAG,IAPpB;AAQC,IAAA,OAAO,EAAGnB;AARX,KAUC,cAAC,aAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAGvB,EAAE,CAAE,cAAF,CAFX;AAGC,IAAA,KAAK,EAAGyB,WAHT;AAIC,IAAA,OAAO,EAAG,CACT;AACA;AACCkB,MAAAA,KAAK,EAAE3C,EAAE,CAAE,UAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAFS,EAMT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,QAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KANS,EAUT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,OAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAVS,EAcT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,MAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAdS,EAkBT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,KAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAlBS,EAsBT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,KAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAtBS,EA0BT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,OAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KA1BS,EA8BT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,MAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KA9BS,EAkCT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,KAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAlCS,EAsCT;AACCD,MAAAA,KAAK,EAAE3C,EAAE,CAAE,KAAF,CADV;AAEC4C,MAAAA,KAAK,EAAE;AAFR,KAtCS,CAJX;AA+CC,IAAA,QAAQ,EAAKC,eAAF,IACVf,aAAa,CAAE;AAAEL,MAAAA,WAAW,EAAEoB;AAAf,KAAF;AAhDf,IAVD,CADD,EA+DC,cAAC,cAAD;AACC,IAAA,SAAS,EAAC,eADX;AAEC,IAAA,QAAQ,EAAG,MAAM,CAAC,CAAElB,MAFrB;AAGC,IAAA,KAAK,EAAG3B,EAAE,CAAE,QAAF,CAHX;AAIC,IAAA,UAAU,EAAG,MAAM8B,aAAa,CAAE;AAAEH,MAAAA,MAAM,EAAEe;AAAV,KAAF,CAJjC;AAKC,IAAA,cAAc,EAAG,OAAQ;AACxBf,MAAAA,MAAM,EAAEe;AADgB,KAAR,CALlB;AAQC,IAAA,gBAAgB,EAAG,IARpB;AASC,IAAA,OAAO,EAAGnB;AATX,KAWC,cAAC,WAAD;AACC,IAAA,KAAK,EAAGvB,EAAE,CAAE,QAAF,CADX;AAEC,IAAA,aAAa,EAAC,KAFf;AAGC,IAAA,KAAK,EAAG2B,MAAM,IAAI,EAHnB;AAIC,IAAA,GAAG,EAAG,CAJP;AAKC,IAAA,QAAQ,EAAKmB,UAAF,IACVX,iBAAiB,CAAE,QAAF,EAAYW,UAAZ,CANnB;AAQC,IAAA,KAAK,EAAGb;AART,IAXD,CA/DD,EAqFC,cAAC,cAAD;AACC,IAAA,SAAS,EAAC,eADX;AAEC,IAAA,QAAQ,EAAG,MAAM,CAAC,CAAEP,KAFrB;AAGC,IAAA,KAAK,EAAG1B,EAAE,CAAE,OAAF,CAHX;AAIC,IAAA,UAAU,EAAG,MAAM8B,aAAa,CAAE;AAAEJ,MAAAA,KAAK,EAAEgB;AAAT,KAAF,CAJjC;AAKC,IAAA,cAAc,EAAG,OAAQ;AACxBhB,MAAAA,KAAK,EAAEgB;AADiB,KAAR,CALlB;AAQC,IAAA,gBAAgB,EAAG,IARpB;AASC,IAAA,OAAO,EAAGnB;AATX,KAWC,cAAC,WAAD;AACC,IAAA,KAAK,EAAGvB,EAAE,CAAE,OAAF,CADX;AAEC,IAAA,aAAa,EAAC,KAFf;AAGC,IAAA,KAAK,EAAG0B,KAAK,IAAI,EAHlB;AAIC,IAAA,GAAG,EAAG,CAJP;AAKC,IAAA,QAAQ,EAAKqB,SAAF,IACVZ,iBAAiB,CAAE,OAAF,EAAWY,SAAX,CANnB;AAQC,IAAA,KAAK,EAAGd;AART,IAXD,CArFD,EA2GG,CAAEN,MAAM,IAAIF,WAAZ,KACD,cAAC,cAAD;AACC,IAAA,QAAQ,EAAG,MAAM,CAAC,CAAEG,KAAH,IAAYA,KAAK,KAAKZ,aADxC;AAEC,IAAA,KAAK,EAAGyB,UAFT;AAGC,IAAA,UAAU,EAAG,MACZX,aAAa,CAAE;AACdF,MAAAA,KAAK,EAAEZ;AADO,KAAF,CAJf;AAQC,IAAA,cAAc,EAAG,OAAQ;AACxBY,MAAAA,KAAK,EAAEZ;AADiB,KAAR,CARlB;AAWC,IAAA,gBAAgB,EAAG,IAXpB;AAYC,IAAA,OAAO,EAAGO;AAZX,KAcC,cAAC,kBAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAGkB,UAFT;AAGC,IAAA,KAAK,EAAGb,KAHT;AAIC,IAAA,IAAI,EAAGV,SAAS,CAAEU,KAAF,CAJjB;AAKC,IAAA,QAAQ,EAAKgB,KAAF,IACVd,aAAa,CAAE;AACdF,MAAAA,KAAK,EAAEgB;AADO,KAAF,CANf;AAUC,IAAA,OAAO;AAVR,KAYG7B,aAZH,CAdD,CA5GF,EA0IG,CAAC,CAAEgB,gBAAgB,CAACiB,MAApB,IACD,cAAC,cAAD;AACC,IAAA,QAAQ,EAAG,MAAM,CAAC,CAAEnB,QADrB;AAEC,IAAA,KAAK,EAAG7B,EAAE,CAAE,YAAF,CAFX;AAGC,IAAA,UAAU,EAAG,MACZ8B,aAAa,CAAE;AAAED,MAAAA,QAAQ,EAAEa;AAAZ,KAAF,CAJf;AAMC,IAAA,cAAc,EAAG,OAAQ;AACxBb,MAAAA,QAAQ,EAAEa;AADc,KAAR,CANlB;AASC,IAAA,gBAAgB,EAAG,KATpB;AAUC,IAAA,OAAO,EAAGnB;AAVX,KAYC,cAAC,aAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAGvB,EAAE,CAAE,YAAF,CAFX;AAGC,IAAA,KAAK,EAAG6B,QAAQ,IAAIZ,YAHrB;AAIC,IAAA,OAAO,EAAGc,gBAJX;AAKC,IAAA,QAAQ,EAAKkB,YAAF,IACVnB,aAAa,CAAE;AAAED,MAAAA,QAAQ,EAAEoB;AAAZ,KAAF,CANf;AAQC,IAAA,IAAI,EAAGjD,EAAE,CAAE,sCAAF;AARV,IAZD,CA3IF,CADD;AAsKA,CA7LD;;AA+LA,eAAesB,iBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport {\n\tSelectControl,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { InspectorControls, useSetting } from '@wordpress/block-editor';\n\nconst SCALE_OPTIONS = (\n\t<>\n\t\t<ToggleGroupControlOption\n\t\t\tvalue=\"cover\"\n\t\t\tlabel={ _x( 'Cover', 'Scale option for Image dimension control' ) }\n\t\t/>\n\t\t<ToggleGroupControlOption\n\t\t\tvalue=\"contain\"\n\t\t\tlabel={ _x(\n\t\t\t\t'Contain',\n\t\t\t\t'Scale option for Image dimension control'\n\t\t\t) }\n\t\t/>\n\t\t<ToggleGroupControlOption\n\t\t\tvalue=\"fill\"\n\t\t\tlabel={ _x( 'Fill', 'Scale option for Image dimension control' ) }\n\t\t/>\n\t</>\n);\n\nconst DEFAULT_SCALE = 'cover';\nconst DEFAULT_SIZE = 'full';\n\nconst scaleHelp = {\n\tcover: __(\n\t\t'Image is scaled and cropped to fill the entire space without being distorted.'\n\t),\n\tcontain: __(\n\t\t'Image is scaled to fill the space without clipping nor distorting.'\n\t),\n\tfill: __(\n\t\t'Image will be stretched and distorted to completely fill the space.'\n\t),\n};\n\nconst DimensionControls = ( {\n\tclientId,\n\tattributes: { aspectRatio, width, height, scale, sizeSlug },\n\tsetAttributes,\n\timageSizeOptions = [],\n} ) => {\n\tconst defaultUnits = [ 'px', '%', 'vw', 'em', 'rem' ];\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || defaultUnits,\n\t} );\n\tconst onDimensionChange = ( dimension, nextValue ) => {\n\t\tconst parsedValue = parseFloat( nextValue );\n\t\t/**\n\t\t * If we have no value set and we change the unit,\n\t\t * we don't want to set the attribute, as it would\n\t\t * end up having the unit as value without any number.\n\t\t */\n\t\tif ( isNaN( parsedValue ) && nextValue ) return;\n\t\tsetAttributes( {\n\t\t\t[ dimension ]: parsedValue < 0 ? '0' : nextValue,\n\t\t} );\n\t};\n\tconst scaleLabel = _x( 'Scale', 'Image scaling options' );\n\treturn (\n\t\t<InspectorControls group=\"dimensions\">\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ () => !! aspectRatio }\n\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { aspectRatio: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t} ) }\n\t\t\t\tisShownByDefault={ true }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<SelectControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Aspect ratio' ) }\n\t\t\t\t\tvalue={ aspectRatio }\n\t\t\t\t\toptions={ [\n\t\t\t\t\t\t// These should use the same values as AspectRatioDropdown in @wordpress/block-editor\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( 'Original' ),\n\t\t\t\t\t\t\tvalue: 'auto',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( 'Square' ),\n\t\t\t\t\t\t\tvalue: '1',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '16:10' ),\n\t\t\t\t\t\t\tvalue: '16/10',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '16:9' ),\n\t\t\t\t\t\t\tvalue: '16/9',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '4:3' ),\n\t\t\t\t\t\t\tvalue: '4/3',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '3:2' ),\n\t\t\t\t\t\t\tvalue: '3/2',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '10:16' ),\n\t\t\t\t\t\t\tvalue: '10/16',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '9:16' ),\n\t\t\t\t\t\t\tvalue: '9/16',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '3:4' ),\n\t\t\t\t\t\t\tvalue: '3/4',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( '2:3' ),\n\t\t\t\t\t\t\tvalue: '2/3',\n\t\t\t\t\t\t},\n\t\t\t\t\t] }\n\t\t\t\t\tonChange={ ( nextAspectRatio ) =>\n\t\t\t\t\t\tsetAttributes( { aspectRatio: nextAspectRatio } )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t\t<ToolsPanelItem\n\t\t\t\tclassName=\"single-column\"\n\t\t\t\thasValue={ () => !! height }\n\t\t\t\tlabel={ __( 'Height' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { height: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\theight: undefined,\n\t\t\t\t} ) }\n\t\t\t\tisShownByDefault={ true }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<UnitControl\n\t\t\t\t\tlabel={ __( 'Height' ) }\n\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\tvalue={ height || '' }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tonChange={ ( nextHeight ) =>\n\t\t\t\t\t\tonDimensionChange( 'height', nextHeight )\n\t\t\t\t\t}\n\t\t\t\t\tunits={ units }\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t\t<ToolsPanelItem\n\t\t\t\tclassName=\"single-column\"\n\t\t\t\thasValue={ () => !! width }\n\t\t\t\tlabel={ __( 'Width' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { width: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\twidth: undefined,\n\t\t\t\t} ) }\n\t\t\t\tisShownByDefault={ true }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<UnitControl\n\t\t\t\t\tlabel={ __( 'Width' ) }\n\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\tvalue={ width || '' }\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tonChange={ ( nextWidth ) =>\n\t\t\t\t\t\tonDimensionChange( 'width', nextWidth )\n\t\t\t\t\t}\n\t\t\t\t\tunits={ units }\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t\t{ ( height || aspectRatio ) && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => !! scale && scale !== DEFAULT_SCALE }\n\t\t\t\t\tlabel={ scaleLabel }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tscale: DEFAULT_SCALE,\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\t\tscale: DEFAULT_SCALE,\n\t\t\t\t\t} ) }\n\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\tpanelId={ clientId }\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ scaleLabel }\n\t\t\t\t\t\tvalue={ scale }\n\t\t\t\t\t\thelp={ scaleHelp[ scale ] }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tscale: value,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisBlock\n\t\t\t\t\t>\n\t\t\t\t\t\t{ SCALE_OPTIONS }\n\t\t\t\t\t</ToggleGroupControl>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t\t{ !! imageSizeOptions.length && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => !! sizeSlug }\n\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( { sizeSlug: undefined } )\n\t\t\t\t\t}\n\t\t\t\t\tresetAllFilter={ () => ( {\n\t\t\t\t\t\tsizeSlug: undefined,\n\t\t\t\t\t} ) }\n\t\t\t\t\tisShownByDefault={ false }\n\t\t\t\t\tpanelId={ clientId }\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Image size' ) }\n\t\t\t\t\t\tvalue={ sizeSlug || DEFAULT_SIZE }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t\tonChange={ ( nextSizeSlug ) =>\n\t\t\t\t\t\t\tsetAttributes( { sizeSlug: nextSizeSlug } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\thelp={ __( 'Select the size of the source image.' ) }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t</InspectorControls>\n\t);\n};\n\nexport default DimensionControls;\n"]}
@@ -43,6 +43,7 @@ export default function PostFeaturedImageEdit(_ref) {
43
43
  const isDescendentOfQueryLoop = Number.isFinite(queryId);
44
44
  const {
45
45
  isLink,
46
+ aspectRatio,
46
47
  height,
47
48
  width,
48
49
  scale,
@@ -88,7 +89,8 @@ export default function PostFeaturedImageEdit(_ref) {
88
89
  const blockProps = useBlockProps({
89
90
  style: {
90
91
  width,
91
- height
92
+ height,
93
+ aspectRatio
92
94
  }
93
95
  });
94
96
  const borderProps = useBorderProps(attributes);
@@ -97,7 +99,9 @@ export default function PostFeaturedImageEdit(_ref) {
97
99
  return createElement(Placeholder, {
98
100
  className: classnames('block-editor-media-placeholder', borderProps.className),
99
101
  withIllustration: true,
100
- style: borderProps.style
102
+ style: { ...blockProps.style,
103
+ ...borderProps.style
104
+ }
101
105
  }, content);
102
106
  };
103
107
 
@@ -181,8 +185,9 @@ export default function PostFeaturedImageEdit(_ref) {
181
185
  const label = __('Add a featured image');
182
186
 
183
187
  const imageStyles = { ...borderProps.style,
184
- height,
185
- objectFit: height && scale
188
+ height: !!aspectRatio && '100%' || height,
189
+ width: !!aspectRatio && '100%',
190
+ objectFit: !!(height || aspectRatio) && scale
186
191
  };
187
192
  /**
188
193
  * When the post featured image block is placed in a context where: