@wordpress/block-library 7.8.0 → 7.9.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.
- package/CHANGELOG.md +2 -0
- package/build/audio/edit.js +1 -0
- package/build/audio/edit.js.map +1 -1
- package/build/audio/save.js +2 -1
- package/build/audio/save.js.map +1 -1
- package/build/avatar/hooks.js +2 -2
- package/build/avatar/hooks.js.map +1 -1
- package/build/button/edit.js +1 -1
- package/build/button/edit.js.map +1 -1
- package/build/button/index.js +1 -24
- package/build/button/index.js.map +1 -1
- package/build/button/save.js +1 -1
- package/build/button/save.js.map +1 -1
- package/build/columns/variations.js +2 -2
- package/build/columns/variations.js.map +1 -1
- package/build/comment-author-name/edit.js +3 -5
- package/build/comment-author-name/edit.js.map +1 -1
- package/build/comment-author-name/index.js +0 -4
- package/build/comment-author-name/index.js.map +1 -1
- package/build/comment-date/edit.js +4 -4
- package/build/comment-date/edit.js.map +1 -1
- package/build/comment-date/index.js +0 -4
- package/build/comment-date/index.js.map +1 -1
- package/build/comment-edit-link/index.js +0 -4
- package/build/comment-edit-link/index.js.map +1 -1
- package/build/comment-reply-link/index.js +0 -4
- package/build/comment-reply-link/index.js.map +1 -1
- package/build/comments/edit.js +10 -2
- package/build/comments/edit.js.map +1 -1
- package/build/comments-title/deprecated.js +0 -3
- package/build/comments-title/deprecated.js.map +1 -1
- package/build/cover/index.js +1 -0
- package/build/cover/index.js.map +1 -1
- package/build/embed/embed-preview.js +1 -0
- package/build/embed/embed-preview.js.map +1 -1
- package/build/embed/icons.js +21 -1
- package/build/embed/icons.js.map +1 -1
- package/build/embed/save.js +1 -0
- package/build/embed/save.js.map +1 -1
- package/build/embed/variations.js +11 -0
- package/build/embed/variations.js.map +1 -1
- package/build/file/edit.js +1 -1
- package/build/file/edit.js.map +1 -1
- package/build/file/save.js +1 -1
- package/build/file/save.js.map +1 -1
- package/build/gallery/gallery.js +1 -1
- package/build/gallery/gallery.js.map +1 -1
- package/build/gallery/save.js +1 -1
- package/build/gallery/save.js.map +1 -1
- package/build/gallery/transforms.js +2 -2
- package/build/gallery/transforms.js.map +1 -1
- package/build/gallery/v1/edit.js +3 -3
- package/build/gallery/v1/edit.js.map +1 -1
- package/build/gallery/v1/gallery-image.js +1 -0
- package/build/gallery/v1/gallery-image.js.map +1 -1
- package/build/gallery/v1/gallery.js +1 -1
- package/build/gallery/v1/gallery.js.map +1 -1
- package/build/gallery/v1/save.js +10 -2
- package/build/gallery/v1/save.js.map +1 -1
- package/build/group/index.js +1 -0
- package/build/group/index.js.map +1 -1
- package/build/html/edit.js +11 -20
- package/build/html/edit.js.map +1 -1
- package/build/html/preview.js +48 -0
- package/build/html/preview.js.map +1 -0
- package/build/image/edit.native.js +2 -1
- package/build/image/edit.native.js.map +1 -1
- package/build/image/image.js +1 -0
- package/build/image/image.js.map +1 -1
- package/build/image/save.js +1 -0
- package/build/image/save.js.map +1 -1
- package/build/list/v2/transforms.js +33 -17
- package/build/list/v2/transforms.js.map +1 -1
- package/build/list-item/hooks/use-enter.js +7 -4
- package/build/list-item/hooks/use-enter.js.map +1 -1
- package/build/list-item/hooks/use-outdent-list-item.js +36 -15
- package/build/list-item/hooks/use-outdent-list-item.js.map +1 -1
- package/build/navigation/edit/index.js +1 -1
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/index.js +9 -0
- package/build/navigation/index.js.map +1 -1
- package/build/navigation/use-navigation-menu.js +16 -74
- package/build/navigation/use-navigation-menu.js.map +1 -1
- package/build/navigation/view.js +5 -3
- package/build/navigation/view.js.map +1 -1
- package/build/navigation-submenu/view.js +5 -3
- package/build/navigation-submenu/view.js.map +1 -1
- package/build/post-comments-form/edit.js +12 -2
- package/build/post-comments-form/edit.js.map +1 -1
- package/build/post-comments-form/form.js +1 -1
- package/build/post-comments-form/form.js.map +1 -1
- package/build/search/edit.js +1 -1
- package/build/search/edit.js.map +1 -1
- package/build/table/edit.js +1 -0
- package/build/table/edit.js.map +1 -1
- package/build/table/save.js +2 -1
- package/build/table/save.js.map +1 -1
- package/build/video/edit.js +1 -0
- package/build/video/edit.js.map +1 -1
- package/build/video/save.js +1 -0
- package/build/video/save.js.map +1 -1
- package/build-module/audio/edit.js +2 -1
- package/build-module/audio/edit.js.map +1 -1
- package/build-module/audio/save.js +3 -2
- package/build-module/audio/save.js.map +1 -1
- package/build-module/avatar/hooks.js +2 -2
- package/build-module/avatar/hooks.js.map +1 -1
- package/build-module/button/edit.js +2 -2
- package/build-module/button/edit.js.map +1 -1
- package/build-module/button/index.js +1 -24
- package/build-module/button/index.js.map +1 -1
- package/build-module/button/save.js +2 -2
- package/build-module/button/save.js.map +1 -1
- package/build-module/columns/variations.js +2 -2
- package/build-module/columns/variations.js.map +1 -1
- package/build-module/comment-author-name/edit.js +3 -5
- package/build-module/comment-author-name/edit.js.map +1 -1
- package/build-module/comment-author-name/index.js +0 -4
- package/build-module/comment-author-name/index.js.map +1 -1
- package/build-module/comment-date/edit.js +4 -4
- package/build-module/comment-date/edit.js.map +1 -1
- package/build-module/comment-date/index.js +0 -4
- package/build-module/comment-date/index.js.map +1 -1
- package/build-module/comment-edit-link/index.js +0 -4
- package/build-module/comment-edit-link/index.js.map +1 -1
- package/build-module/comment-reply-link/index.js +0 -4
- package/build-module/comment-reply-link/index.js.map +1 -1
- package/build-module/comments/edit.js +10 -2
- package/build-module/comments/edit.js.map +1 -1
- package/build-module/comments-title/deprecated.js +0 -3
- package/build-module/comments-title/deprecated.js.map +1 -1
- package/build-module/cover/index.js +1 -0
- package/build-module/cover/index.js.map +1 -1
- package/build-module/embed/embed-preview.js +2 -1
- package/build-module/embed/embed-preview.js.map +1 -1
- package/build-module/embed/icons.js +19 -0
- package/build-module/embed/icons.js.map +1 -1
- package/build-module/embed/save.js +2 -1
- package/build-module/embed/save.js.map +1 -1
- package/build-module/embed/variations.js +12 -1
- package/build-module/embed/variations.js.map +1 -1
- package/build-module/file/edit.js +2 -2
- package/build-module/file/edit.js.map +1 -1
- package/build-module/file/save.js +2 -2
- package/build-module/file/save.js.map +1 -1
- package/build-module/gallery/gallery.js +2 -2
- package/build-module/gallery/gallery.js.map +1 -1
- package/build-module/gallery/save.js +2 -2
- package/build-module/gallery/save.js.map +1 -1
- package/build-module/gallery/transforms.js +3 -3
- package/build-module/gallery/transforms.js.map +1 -1
- package/build-module/gallery/v1/edit.js +4 -4
- package/build-module/gallery/v1/edit.js.map +1 -1
- package/build-module/gallery/v1/gallery-image.js +2 -1
- package/build-module/gallery/v1/gallery-image.js.map +1 -1
- package/build-module/gallery/v1/gallery.js +2 -2
- package/build-module/gallery/v1/gallery.js.map +1 -1
- package/build-module/gallery/v1/save.js +8 -3
- package/build-module/gallery/v1/save.js.map +1 -1
- package/build-module/group/index.js +1 -0
- package/build-module/group/index.js.map +1 -1
- package/build-module/html/edit.js +12 -23
- package/build-module/html/edit.js.map +1 -1
- package/build-module/html/preview.js +38 -0
- package/build-module/html/preview.js.map +1 -0
- package/build-module/image/edit.native.js +2 -1
- package/build-module/image/edit.native.js.map +1 -1
- package/build-module/image/image.js +2 -1
- package/build-module/image/image.js.map +1 -1
- package/build-module/image/save.js +2 -1
- package/build-module/image/save.js.map +1 -1
- package/build-module/list/v2/transforms.js +32 -17
- package/build-module/list/v2/transforms.js.map +1 -1
- package/build-module/list-item/hooks/use-enter.js +7 -4
- package/build-module/list-item/hooks/use-enter.js.map +1 -1
- package/build-module/list-item/hooks/use-outdent-list-item.js +34 -15
- package/build-module/list-item/hooks/use-outdent-list-item.js.map +1 -1
- package/build-module/navigation/edit/index.js +1 -1
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/index.js +9 -0
- package/build-module/navigation/index.js.map +1 -1
- package/build-module/navigation/use-navigation-menu.js +17 -75
- package/build-module/navigation/use-navigation-menu.js.map +1 -1
- package/build-module/navigation/view.js +5 -3
- package/build-module/navigation/view.js.map +1 -1
- package/build-module/navigation-submenu/view.js +5 -3
- package/build-module/navigation-submenu/view.js.map +1 -1
- package/build-module/post-comments-form/edit.js +12 -3
- package/build-module/post-comments-form/edit.js.map +1 -1
- package/build-module/post-comments-form/form.js +2 -2
- package/build-module/post-comments-form/form.js.map +1 -1
- package/build-module/search/edit.js +2 -2
- package/build-module/search/edit.js.map +1 -1
- package/build-module/table/edit.js +2 -1
- package/build-module/table/edit.js.map +1 -1
- package/build-module/table/save.js +3 -2
- package/build-module/table/save.js.map +1 -1
- package/build-module/video/edit.js +2 -1
- package/build-module/video/edit.js.map +1 -1
- package/build-module/video/save.js +2 -1
- package/build-module/video/save.js.map +1 -1
- package/build-style/button/style-rtl.css +5 -0
- package/build-style/button/style.css +5 -0
- package/build-style/editor-rtl.css +3 -0
- package/build-style/editor.css +3 -0
- package/build-style/file/style-rtl.css +5 -8
- package/build-style/file/style.css +5 -8
- package/build-style/navigation/style-rtl.css +9 -1
- package/build-style/navigation/style.css +9 -1
- package/build-style/post-comments/style-rtl.css +2 -1
- package/build-style/post-comments/style.css +2 -1
- package/build-style/post-comments-form/editor-rtl.css +3 -0
- package/build-style/post-comments-form/editor.css +3 -0
- package/build-style/post-template/style-rtl.css +9 -18
- package/build-style/post-template/style.css +9 -18
- package/build-style/search/style-rtl.css +6 -8
- package/build-style/search/style.css +6 -8
- package/build-style/style-rtl.css +36 -36
- package/build-style/style.css +36 -36
- package/package.json +28 -28
- package/src/audio/edit.js +4 -0
- package/src/audio/save.js +12 -2
- package/src/avatar/hooks.js +6 -9
- package/src/button/block.json +1 -24
- package/src/button/edit.js +2 -2
- package/src/button/save.js +2 -2
- package/src/button/style.scss +10 -0
- package/src/columns/variations.js +2 -2
- package/src/comment-author-name/block.json +0 -4
- package/src/comment-author-name/edit.js +3 -12
- package/src/comment-date/block.json +0 -4
- package/src/comment-date/edit.js +10 -14
- package/src/comment-date/index.php +0 -3
- package/src/comment-edit-link/block.json +0 -4
- package/src/comment-reply-link/block.json +0 -4
- package/src/comments/edit.js +24 -4
- package/src/comments-title/deprecated.js +0 -2
- package/src/cover/block.json +1 -0
- package/src/cover/index.php +21 -8
- package/src/embed/embed-preview.js +8 -1
- package/src/embed/icons.js +25 -0
- package/src/embed/save.js +10 -2
- package/src/embed/test/__snapshots__/index.native.js.snap +1 -1
- package/src/embed/variations.js +10 -0
- package/src/file/edit.js +4 -2
- package/src/file/save.js +2 -2
- package/src/file/style.scss +5 -5
- package/src/freeform/editor.scss +0 -2
- package/src/gallery/gallery.js +9 -2
- package/src/gallery/index.php +4 -0
- package/src/gallery/save.js +5 -1
- package/src/gallery/test/__snapshots__/index.native.js.snap +2 -2
- package/src/gallery/test/helpers.native.js +11 -198
- package/src/gallery/test/index.native.js +19 -29
- package/src/gallery/transforms.js +3 -3
- package/src/gallery/v1/edit.js +3 -4
- package/src/gallery/v1/gallery-image.js +4 -0
- package/src/gallery/v1/gallery.js +8 -2
- package/src/gallery/v1/save.js +20 -3
- package/src/group/block.json +1 -0
- package/src/html/edit.js +10 -40
- package/src/html/preview.js +46 -0
- package/src/image/edit.native.js +1 -0
- package/src/image/image.js +2 -0
- package/src/image/save.js +10 -2
- package/src/image/test/edit.native.js +51 -19
- package/src/list/v2/transforms.js +22 -7
- package/src/list-item/hooks/use-enter.js +9 -6
- package/src/list-item/hooks/use-outdent-list-item.js +48 -21
- package/src/navigation/block.json +9 -0
- package/src/navigation/edit/index.js +1 -0
- package/src/navigation/style.scss +10 -1
- package/src/navigation/test/use-navigation-menu.js +16 -11
- package/src/navigation/use-navigation-menu.js +26 -83
- package/src/navigation/view.js +7 -2
- package/src/navigation-submenu/view.js +7 -2
- package/src/post-comments/index.php +1 -1
- package/src/post-comments/style.scss +7 -3
- package/src/post-comments-form/edit.js +20 -3
- package/src/post-comments-form/editor.scss +4 -0
- package/src/post-comments-form/form.js +2 -2
- package/src/post-comments-form/index.php +1 -1
- package/src/post-featured-image/index.php +4 -2
- package/src/post-template/index.php +15 -3
- package/src/post-template/style.scss +1 -7
- package/src/search/edit.js +2 -2
- package/src/search/index.php +12 -10
- package/src/search/style.scss +9 -8
- package/src/table/edit.js +2 -0
- package/src/table/save.js +6 -1
- package/src/video/edit.js +4 -0
- package/src/video/save.js +10 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["get","filter","map","pick","includes","isBlobURL","ExternalLink","PanelBody","ResizableBox","Spinner","TextareaControl","TextControl","ToolbarButton","useViewportMatch","usePrevious","useSelect","useDispatch","BlockControls","InspectorControls","RichText","__experimentalImageSizeControl","ImageSizeControl","__experimentalImageURLInputUI","ImageURLInputUI","MediaReplaceFlow","store","blockEditorStore","BlockAlignmentControl","__experimentalImageEditor","ImageEditor","__experimentalImageEditingProvider","ImageEditingProvider","useEffect","useMemo","useState","useRef","__","sprintf","isRTL","getFilename","createBlock","getDefaultBlockName","switchToBlockType","crop","overlayText","upload","noticesStore","coreStore","createUpgradedEmbedBlock","useClientWidth","isExternalImage","MIN_SIZE","ALLOWED_MEDIA_TYPES","Image","temporaryURL","attributes","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","linkTarget","sizeSlug","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","imageRef","captionRef","prevUrl","allowResize","getBlock","image","multiImageSelection","select","getMedia","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","isLargeViewport","isWideAligned","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","isResizable","imageSizeOptions","slug","name","value","label","window","fetch","then","response","blob","catch","current","focus","naturalWidth","naturalHeight","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","controls","source_url","link","filename","defaultedAlt","event","target","imageWidthWithinContainer","imageHeightWithinContainer","exceedMaxWidth","ratio","currentWidth","currentHeight","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","top","right","bottom","left","direction","elt","delta","parseInt","imageAttributes","isEmpty"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, filter, map, pick, includes } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tPanelBody,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageSizeControl as ImageSizeControl,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalImageEditingProvider as ImageEditingProvider,\n} from '@wordpress/block-editor';\nimport { useEffect, useMemo, useState, useRef } from '@wordpress/element';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { crop, overlayText, upload } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes: {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t},\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n} ) {\n\tconst imageRef = useRef();\n\tconst captionRef = useRef();\n\tconst prevUrl = usePrevious( url );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = pick( getSettings(), [\n\t\t\t\t\t'imageEditing',\n\t\t\t\t\t'imageSizes',\n\t\t\t\t\t'maxWidth',\n\t\t\t\t\t'mediaUpload',\n\t\t\t\t] );\n\n\t\t\t\treturn {\n\t\t\t\t\t...settings,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = includes( [ 'wide', 'full' ], align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst isResizable = allowResize && ! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = map(\n\t\tfilter( imageSizes, ( { slug } ) =>\n\t\t\tget( image, [ 'media_details', 'sizes', slug, 'source_url' ] )\n\t\t),\n\t\t( { name, slug } ) => ( { value: slug, label: name } )\n\t);\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif ( ! isExternalImage( id, url ) || ! isSelected || externalBlob ) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow\n\t\t\t.fetch( url )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob ] );\n\n\t// Focus the caption after inserting an image from the placeholder. This is\n\t// done to preserve the behaviour of focussing the first tabbable element\n\t// when a block is mounted. Previously, the image block would remount when\n\t// the placeholder is removed. Maybe this behaviour could be removed.\n\tuseEffect( () => {\n\t\tif ( url && ! prevUrl && isSelected ) {\n\t\t\tcaptionRef.current.focus();\n\t\t}\n\t}, [ url, prevUrl ] );\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// witdth and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = get( image, [\n\t\t\t'media_details',\n\t\t\t'sizes',\n\t\t\tnewSizeSlug,\n\t\t\t'source_url',\n\t\t] );\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t/>\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ externalBlob && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Alt text (alternative text)' ) }\n\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Leave empty if the image is purely decorative.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</>\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<ImageSizeControl\n\t\t\t\t\t\tonChangeImage={ updateImage }\n\t\t\t\t\t\tonChange={ ( value ) => setAttributes( value ) }\n\t\t\t\t\t\tslug={ sizeSlug }\n\t\t\t\t\t\twidth={ width }\n\t\t\t\t\t\theight={ height }\n\t\t\t\t\t\timageSizeOptions={ imageSizeOptions }\n\t\t\t\t\t\tisResizable={ isResizable }\n\t\t\t\t\t\timageWidth={ naturalWidth }\n\t\t\t\t\t\timageHeight={ naturalHeight }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls __experimentalGroup=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\tlet imageWidthWithinContainer;\n\tlet imageHeightWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\tconst ratio = naturalHeight / naturalWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t\timageHeightWithinContainer = exceedMaxWidth\n\t\t\t? clientWidth * ratio\n\t\t\t: naturalHeight;\n\t}\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ clientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\timg = <div style={ { width, height } }>{ img }</div>;\n\t} else {\n\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\tconst ratio = naturalWidth / naturalHeight;\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: width ?? 'auto',\n\t\t\t\t\theight: height ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ImageEditingProvider\n\t\t\tid={ id }\n\t\t\turl={ url }\n\t\t\tnaturalWidth={ naturalWidth }\n\t\t\tnaturalHeight={ naturalHeight }\n\t\t\tclientWidth={ clientWidth }\n\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t}\n\t\t\tisEditing={ isEditingImage }\n\t\t\tonFinishEditing={ () => setIsEditingImage( false ) }\n\t\t>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ ( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t<RichText\n\t\t\t\t\tref={ captionRef }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t}\n\t\t\t\t\tinlineToolbar\n\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t) }\n\t\t</ImageEditingProvider>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["get","filter","map","pick","includes","isBlobURL","ExternalLink","PanelBody","ResizableBox","Spinner","TextareaControl","TextControl","ToolbarButton","useViewportMatch","usePrevious","useSelect","useDispatch","BlockControls","InspectorControls","RichText","__experimentalImageSizeControl","ImageSizeControl","__experimentalImageURLInputUI","ImageURLInputUI","MediaReplaceFlow","store","blockEditorStore","BlockAlignmentControl","__experimentalImageEditor","ImageEditor","__experimentalImageEditingProvider","ImageEditingProvider","__experimentalGetElementClassName","useEffect","useMemo","useState","useRef","__","sprintf","isRTL","getFilename","createBlock","getDefaultBlockName","switchToBlockType","crop","overlayText","upload","noticesStore","coreStore","createUpgradedEmbedBlock","useClientWidth","isExternalImage","MIN_SIZE","ALLOWED_MEDIA_TYPES","Image","temporaryURL","attributes","url","alt","caption","align","id","href","rel","linkClass","linkDestination","title","width","height","linkTarget","sizeSlug","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","imageRef","captionRef","prevUrl","allowResize","getBlock","image","multiImageSelection","select","getMedia","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","isLargeViewport","isWideAligned","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","isResizable","imageSizeOptions","slug","name","value","label","window","fetch","then","response","blob","catch","current","focus","naturalWidth","naturalHeight","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","controls","source_url","link","filename","defaultedAlt","event","target","imageWidthWithinContainer","imageHeightWithinContainer","exceedMaxWidth","ratio","currentWidth","currentHeight","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","top","right","bottom","left","direction","elt","delta","parseInt","imageAttributes","isEmpty"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, filter, map, pick, includes } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tPanelBody,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageSizeControl as ImageSizeControl,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalImageEditingProvider as ImageEditingProvider,\n\t__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\nimport { useEffect, useMemo, useState, useRef } from '@wordpress/element';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { crop, overlayText, upload } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes: {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t},\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n} ) {\n\tconst imageRef = useRef();\n\tconst captionRef = useRef();\n\tconst prevUrl = usePrevious( url );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = pick( getSettings(), [\n\t\t\t\t\t'imageEditing',\n\t\t\t\t\t'imageSizes',\n\t\t\t\t\t'maxWidth',\n\t\t\t\t\t'mediaUpload',\n\t\t\t\t] );\n\n\t\t\t\treturn {\n\t\t\t\t\t...settings,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = includes( [ 'wide', 'full' ], align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst isResizable = allowResize && ! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = map(\n\t\tfilter( imageSizes, ( { slug } ) =>\n\t\t\tget( image, [ 'media_details', 'sizes', slug, 'source_url' ] )\n\t\t),\n\t\t( { name, slug } ) => ( { value: slug, label: name } )\n\t);\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif ( ! isExternalImage( id, url ) || ! isSelected || externalBlob ) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow\n\t\t\t.fetch( url )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob ] );\n\n\t// Focus the caption after inserting an image from the placeholder. This is\n\t// done to preserve the behaviour of focussing the first tabbable element\n\t// when a block is mounted. Previously, the image block would remount when\n\t// the placeholder is removed. Maybe this behaviour could be removed.\n\tuseEffect( () => {\n\t\tif ( url && ! prevUrl && isSelected ) {\n\t\t\tcaptionRef.current.focus();\n\t\t}\n\t}, [ url, prevUrl ] );\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// witdth and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = get( image, [\n\t\t\t'media_details',\n\t\t\t'sizes',\n\t\t\tnewSizeSlug,\n\t\t\t'source_url',\n\t\t] );\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t/>\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ externalBlob && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\tlabel={ __( 'Alt text (alternative text)' ) }\n\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t'Leave empty if the image is purely decorative.'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</>\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<ImageSizeControl\n\t\t\t\t\t\tonChangeImage={ updateImage }\n\t\t\t\t\t\tonChange={ ( value ) => setAttributes( value ) }\n\t\t\t\t\t\tslug={ sizeSlug }\n\t\t\t\t\t\twidth={ width }\n\t\t\t\t\t\theight={ height }\n\t\t\t\t\t\timageSizeOptions={ imageSizeOptions }\n\t\t\t\t\t\tisResizable={ isResizable }\n\t\t\t\t\t\timageWidth={ naturalWidth }\n\t\t\t\t\t\timageHeight={ naturalHeight }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls __experimentalGroup=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\tlet imageWidthWithinContainer;\n\tlet imageHeightWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\tconst ratio = naturalHeight / naturalWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t\timageHeightWithinContainer = exceedMaxWidth\n\t\t\t? clientWidth * ratio\n\t\t\t: naturalHeight;\n\t}\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ clientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\timg = <div style={ { width, height } }>{ img }</div>;\n\t} else {\n\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\tconst ratio = naturalWidth / naturalHeight;\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: width ?? 'auto',\n\t\t\t\t\theight: height ?? 'auto',\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ImageEditingProvider\n\t\t\tid={ id }\n\t\t\turl={ url }\n\t\t\tnaturalWidth={ naturalWidth }\n\t\t\tnaturalHeight={ naturalHeight }\n\t\t\tclientWidth={ clientWidth }\n\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\tsetAttributes( imageAttributes )\n\t\t\t}\n\t\t\tisEditing={ isEditingImage }\n\t\t\tonFinishEditing={ () => setIsEditingImage( false ) }\n\t\t>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ ( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t<RichText\n\t\t\t\t\tclassName={ __experimentalGetElementClassName( 'caption' ) }\n\t\t\t\t\tref={ captionRef }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t}\n\t\t\t\t\tinlineToolbar\n\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t) }\n\t\t</ImageEditingProvider>\n\t);\n}\n"]}
|
|
@@ -9,7 +9,7 @@ import { isEmpty } from 'lodash';
|
|
|
9
9
|
* WordPress dependencies
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { RichText, useBlockProps } from '@wordpress/block-editor';
|
|
12
|
+
import { RichText, useBlockProps, __experimentalGetElementClassName } from '@wordpress/block-editor';
|
|
13
13
|
export default function save(_ref) {
|
|
14
14
|
let {
|
|
15
15
|
attributes
|
|
@@ -49,6 +49,7 @@ export default function save(_ref) {
|
|
|
49
49
|
target: linkTarget,
|
|
50
50
|
rel: newRel
|
|
51
51
|
}, image) : image, !RichText.isEmpty(caption) && createElement(RichText.Content, {
|
|
52
|
+
className: __experimentalGetElementClassName('caption'),
|
|
52
53
|
tagName: "figcaption",
|
|
53
54
|
value: caption
|
|
54
55
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/save.js"],"names":["classnames","isEmpty","RichText","useBlockProps","save","attributes","url","alt","caption","align","href","rel","linkClass","width","height","id","linkTarget","sizeSlug","title","newRel","undefined","classes","image","figure","className"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,OAAT,QAAwB,QAAxB;AAEA;AACA;AACA;;AACA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/save.js"],"names":["classnames","isEmpty","RichText","useBlockProps","__experimentalGetElementClassName","save","attributes","url","alt","caption","align","href","rel","linkClass","width","height","id","linkTarget","sizeSlug","title","newRel","undefined","classes","image","figure","className"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,OAAT,QAAwB,QAAxB;AAEA;AACA;AACA;;AACA,SACCC,QADD,EAECC,aAFD,EAGCC,iCAHD,QAIO,yBAJP;AAMA,eAAe,SAASC,IAAT,OAAgC;AAAA,MAAjB;AAAEC,IAAAA;AAAF,GAAiB;AAC9C,QAAM;AACLC,IAAAA,GADK;AAELC,IAAAA,GAFK;AAGLC,IAAAA,OAHK;AAILC,IAAAA,KAJK;AAKLC,IAAAA,IALK;AAMLC,IAAAA,GANK;AAOLC,IAAAA,SAPK;AAQLC,IAAAA,KARK;AASLC,IAAAA,MATK;AAULC,IAAAA,EAVK;AAWLC,IAAAA,UAXK;AAYLC,IAAAA,QAZK;AAaLC,IAAAA;AAbK,MAcFb,UAdJ;AAgBA,QAAMc,MAAM,GAAGnB,OAAO,CAAEW,GAAF,CAAP,GAAiBS,SAAjB,GAA6BT,GAA5C;AAEA,QAAMU,OAAO,GAAGtB,UAAU,CAAE;AAC3B,KAAG,QAAQU,KAAO,EAAlB,GAAuBA,KADI;AAE3B,KAAG,QAAQQ,QAAU,EAArB,GAA0BA,QAFC;AAG3B,kBAAcJ,KAAK,IAAIC;AAHI,GAAF,CAA1B;AAMA,QAAMQ,KAAK,GACV;AACC,IAAA,GAAG,EAAGhB,GADP;AAEC,IAAA,GAAG,EAAGC,GAFP;AAGC,IAAA,SAAS,EAAGQ,EAAE,GAAI,YAAYA,EAAI,EAApB,GAAwB,IAHvC;AAIC,IAAA,KAAK,EAAGF,KAJT;AAKC,IAAA,MAAM,EAAGC,MALV;AAMC,IAAA,KAAK,EAAGI;AANT,IADD;AAWA,QAAMK,MAAM,GACX,8BACGb,IAAI,GACL;AACC,IAAA,SAAS,EAAGE,SADb;AAEC,IAAA,IAAI,EAAGF,IAFR;AAGC,IAAA,MAAM,EAAGM,UAHV;AAIC,IAAA,GAAG,EAAGG;AAJP,KAMGG,KANH,CADK,GAULA,KAXF,EAaG,CAAErB,QAAQ,CAACD,OAAT,CAAkBQ,OAAlB,CAAF,IACD,cAAC,QAAD,CAAU,OAAV;AACC,IAAA,SAAS,EAAGL,iCAAiC,CAAE,SAAF,CAD9C;AAEC,IAAA,OAAO,EAAC,YAFT;AAGC,IAAA,KAAK,EAAGK;AAHT,IAdF,CADD;AAwBA,SACC,wBAAaN,aAAa,CAACE,IAAd,CAAoB;AAAEoB,IAAAA,SAAS,EAAEH;AAAb,GAApB,CAAb,EACGE,MADH,CADD;AAKA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { isEmpty } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\n\nexport default function save( { attributes } ) {\n\tconst {\n\t\turl,\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\twidth,\n\t\theight,\n\t\tid,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\ttitle,\n\t} = attributes;\n\n\tconst newRel = isEmpty( rel ) ? undefined : rel;\n\n\tconst classes = classnames( {\n\t\t[ `align${ align }` ]: align,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'is-resized': width || height,\n\t} );\n\n\tconst image = (\n\t\t<img\n\t\t\tsrc={ url }\n\t\t\talt={ alt }\n\t\t\tclassName={ id ? `wp-image-${ id }` : null }\n\t\t\twidth={ width }\n\t\t\theight={ height }\n\t\t\ttitle={ title }\n\t\t/>\n\t);\n\n\tconst figure = (\n\t\t<>\n\t\t\t{ href ? (\n\t\t\t\t<a\n\t\t\t\t\tclassName={ linkClass }\n\t\t\t\t\thref={ href }\n\t\t\t\t\ttarget={ linkTarget }\n\t\t\t\t\trel={ newRel }\n\t\t\t\t>\n\t\t\t\t\t{ image }\n\t\t\t\t</a>\n\t\t\t) : (\n\t\t\t\timage\n\t\t\t) }\n\t\t\t{ ! RichText.isEmpty( caption ) && (\n\t\t\t\t<RichText.Content\n\t\t\t\t\tclassName={ __experimentalGetElementClassName( 'caption' ) }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n\n\treturn (\n\t\t<figure { ...useBlockProps.save( { className: classes } ) }>\n\t\t\t{ figure }\n\t\t</figure>\n\t);\n}\n"]}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* External dependencies
|
|
7
|
+
*/
|
|
8
|
+
import { flatMap } from 'lodash';
|
|
9
|
+
/**
|
|
10
|
+
* WordPress dependencies
|
|
11
|
+
*/
|
|
12
|
+
|
|
4
13
|
import { createBlock, switchToBlockType } from '@wordpress/blocks';
|
|
5
14
|
import { __UNSTABLE_LINE_SEPARATOR, create, split, toHTMLString } from '@wordpress/rich-text';
|
|
6
15
|
/**
|
|
@@ -32,6 +41,22 @@ function getListContentSchema(_ref) {
|
|
|
32
41
|
return listContentSchema;
|
|
33
42
|
}
|
|
34
43
|
|
|
44
|
+
function getListContentFlat(blocks) {
|
|
45
|
+
return flatMap(blocks, _ref2 => {
|
|
46
|
+
let {
|
|
47
|
+
name,
|
|
48
|
+
attributes,
|
|
49
|
+
innerBlocks = []
|
|
50
|
+
} = _ref2;
|
|
51
|
+
|
|
52
|
+
if (name === 'core/list-item') {
|
|
53
|
+
return [attributes.content, ...getListContentFlat(innerBlocks)];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return getListContentFlat(innerBlocks);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
35
60
|
const transforms = {
|
|
36
61
|
from: [{
|
|
37
62
|
type: 'block',
|
|
@@ -41,10 +66,10 @@ const transforms = {
|
|
|
41
66
|
let childBlocks = [];
|
|
42
67
|
|
|
43
68
|
if (blockAttributes.length > 1) {
|
|
44
|
-
childBlocks = blockAttributes.map(
|
|
69
|
+
childBlocks = blockAttributes.map(_ref3 => {
|
|
45
70
|
let {
|
|
46
71
|
content
|
|
47
|
-
} =
|
|
72
|
+
} = _ref3;
|
|
48
73
|
return createBlock('core/list-item', {
|
|
49
74
|
content
|
|
50
75
|
});
|
|
@@ -69,11 +94,11 @@ const transforms = {
|
|
|
69
94
|
}, {
|
|
70
95
|
type: 'block',
|
|
71
96
|
blocks: ['core/quote', 'core/pullquote'],
|
|
72
|
-
transform:
|
|
97
|
+
transform: _ref4 => {
|
|
73
98
|
let {
|
|
74
99
|
value,
|
|
75
100
|
anchor
|
|
76
|
-
} =
|
|
101
|
+
} = _ref4;
|
|
77
102
|
return createBlock('core/list', {
|
|
78
103
|
anchor
|
|
79
104
|
}, split(create({
|
|
@@ -122,19 +147,9 @@ const transforms = {
|
|
|
122
147
|
type: 'block',
|
|
123
148
|
blocks: [block],
|
|
124
149
|
transform: (_attributes, childBlocks) => {
|
|
125
|
-
return childBlocks.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
} = _ref4;
|
|
129
|
-
return name === 'core/list-item';
|
|
130
|
-
}).map(_ref5 => {
|
|
131
|
-
let {
|
|
132
|
-
attributes
|
|
133
|
-
} = _ref5;
|
|
134
|
-
return createBlock(block, {
|
|
135
|
-
content: attributes.content
|
|
136
|
-
});
|
|
137
|
-
});
|
|
150
|
+
return getListContentFlat(childBlocks).map(content => createBlock(block, {
|
|
151
|
+
content
|
|
152
|
+
}));
|
|
138
153
|
}
|
|
139
154
|
})), ...['core/quote', 'core/pullquote'].map(block => ({
|
|
140
155
|
type: 'block',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/list/v2/transforms.js"],"names":["createBlock","switchToBlockType","__UNSTABLE_LINE_SEPARATOR","create","split","toHTMLString","createListBlockFromDOMElement","getListContentSchema","phrasingContentSchema","listContentSchema","ul","ol","attributes","forEach","tag","children","li","transforms","from","type","isMultiBlock","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/list/v2/transforms.js"],"names":["flatMap","createBlock","switchToBlockType","__UNSTABLE_LINE_SEPARATOR","create","split","toHTMLString","createListBlockFromDOMElement","getListContentSchema","phrasingContentSchema","listContentSchema","ul","ol","attributes","forEach","tag","children","li","getListContentFlat","blocks","name","innerBlocks","content","transforms","from","type","isMultiBlock","transform","blockAttributes","childBlocks","length","map","value","html","result","anchor","multilineTag","prefix","ordered","selector","schema","args","to","block","_attributes"],"mappings":"AAAA;AACA;AACA;;AACA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,QAAxB;AAEA;AACA;AACA;;AACA,SAASC,WAAT,EAAsBC,iBAAtB,QAA+C,mBAA/C;AACA,SACCC,yBADD,EAECC,MAFD,EAGCC,KAHD,EAICC,YAJD,QAKO,sBALP;AAOA;AACA;AACA;;AACA,SAASC,6BAAT,QAA8C,WAA9C;;AAEA,SAASC,oBAAT,OAA2D;AAAA,MAA5B;AAAEC,IAAAA;AAAF,GAA4B;AAC1D,QAAMC,iBAAiB,GAAG,EACzB,GAAGD,qBADsB;AAEzBE,IAAAA,EAAE,EAAE,EAFqB;AAGzBC,IAAAA,EAAE,EAAE;AAAEC,MAAAA,UAAU,EAAE,CAAE,MAAF,EAAU,OAAV,EAAmB,UAAnB;AAAd;AAHqB,GAA1B,CAD0D,CAO1D;AACA;AACA;;AACA,GAAE,IAAF,EAAQ,IAAR,EAAeC,OAAf,CAA0BC,GAAF,IAAW;AAClCL,IAAAA,iBAAiB,CAAEK,GAAF,CAAjB,CAAyBC,QAAzB,GAAoC;AACnCC,MAAAA,EAAE,EAAE;AACHD,QAAAA,QAAQ,EAAEN;AADP;AAD+B,KAApC;AAKA,GAND;AAQA,SAAOA,iBAAP;AACA;;AAED,SAASQ,kBAAT,CAA6BC,MAA7B,EAAsC;AACrC,SAAOnB,OAAO,CAAEmB,MAAF,EAAU,SAA8C;AAAA,QAA5C;AAAEC,MAAAA,IAAF;AAAQP,MAAAA,UAAR;AAAoBQ,MAAAA,WAAW,GAAG;AAAlC,KAA4C;;AACrE,QAAKD,IAAI,KAAK,gBAAd,EAAiC;AAChC,aAAO,CAAEP,UAAU,CAACS,OAAb,EAAsB,GAAGJ,kBAAkB,CAAEG,WAAF,CAA3C,CAAP;AACA;;AACD,WAAOH,kBAAkB,CAAEG,WAAF,CAAzB;AACA,GALa,CAAd;AAMA;;AAED,MAAME,UAAU,GAAG;AAClBC,EAAAA,IAAI,EAAE,CACL;AACCC,IAAAA,IAAI,EAAE,OADP;AAECC,IAAAA,YAAY,EAAE,IAFf;AAGCP,IAAAA,MAAM,EAAE,CAAE,gBAAF,EAAoB,cAApB,CAHT;AAICQ,IAAAA,SAAS,EAAIC,eAAF,IAAuB;AACjC,UAAIC,WAAW,GAAG,EAAlB;;AACA,UAAKD,eAAe,CAACE,MAAhB,GAAyB,CAA9B,EAAkC;AACjCD,QAAAA,WAAW,GAAGD,eAAe,CAACG,GAAhB,CAAqB,SAAmB;AAAA,cAAjB;AAAET,YAAAA;AAAF,WAAiB;AACrD,iBAAOrB,WAAW,CAAE,gBAAF,EAAoB;AAAEqB,YAAAA;AAAF,WAApB,CAAlB;AACA,SAFa,CAAd;AAGA,OAJD,MAIO,IAAKM,eAAe,CAACE,MAAhB,KAA2B,CAAhC,EAAoC;AAC1C,cAAME,KAAK,GAAG5B,MAAM,CAAE;AACrB6B,UAAAA,IAAI,EAAEL,eAAe,CAAE,CAAF,CAAf,CAAqBN;AADN,SAAF,CAApB;AAGAO,QAAAA,WAAW,GAAGxB,KAAK,CAAE2B,KAAF,EAAS,IAAT,CAAL,CAAqBD,GAArB,CAA4BG,MAAF,IAAc;AACrD,iBAAOjC,WAAW,CAAE,gBAAF,EAAoB;AACrCqB,YAAAA,OAAO,EAAEhB,YAAY,CAAE;AAAE0B,cAAAA,KAAK,EAAEE;AAAT,aAAF;AADgB,WAApB,CAAlB;AAGA,SAJa,CAAd;AAKA;;AACD,aAAOjC,WAAW,CACjB,WADiB,EAEjB;AACCkC,QAAAA,MAAM,EAAEP,eAAe,CAACO;AADzB,OAFiB,EAKjBN,WALiB,CAAlB;AAOA;AA3BF,GADK,EA8BL;AACCJ,IAAAA,IAAI,EAAE,OADP;AAECN,IAAAA,MAAM,EAAE,CAAE,YAAF,EAAgB,gBAAhB,CAFT;AAGCQ,IAAAA,SAAS,EAAE,SAAyB;AAAA,UAAvB;AAAEK,QAAAA,KAAF;AAASG,QAAAA;AAAT,OAAuB;AACnC,aAAOlC,WAAW,CACjB,WADiB,EAEjB;AACCkC,QAAAA;AADD,OAFiB,EAKjB9B,KAAK,CACJD,MAAM,CAAE;AAAE6B,QAAAA,IAAI,EAAED,KAAR;AAAeI,QAAAA,YAAY,EAAE;AAA7B,OAAF,CADF,EAEJjC,yBAFI,CAAL,CAGE4B,GAHF,CAGSG,MAAF,IAAc;AACpB,eAAOjC,WAAW,CAAE,gBAAF,EAAoB;AACrCqB,UAAAA,OAAO,EAAEhB,YAAY,CAAE;AAAE0B,YAAAA,KAAK,EAAEE;AAAT,WAAF;AADgB,SAApB,CAAlB;AAGA,OAPD,CALiB,CAAlB;AAcA;AAlBF,GA9BK,EAkDL,GAAG,CAAE,GAAF,EAAO,GAAP,EAAaH,GAAb,CAAoBM,MAAF,KAAgB;AACpCZ,IAAAA,IAAI,EAAE,QAD8B;AAEpCY,IAAAA,MAFoC;;AAGpCV,IAAAA,SAAS,CAAEL,OAAF,EAAY;AACpB,aAAOrB,WAAW,CAAE,WAAF,EAAe,EAAf,EAAmB,CACpCA,WAAW,CAAE,gBAAF,EAAoB;AAAEqB,QAAAA;AAAF,OAApB,CADyB,CAAnB,CAAlB;AAGA;;AAPmC,GAAhB,CAAlB,CAlDE,EA2DL,GAAG,CAAE,IAAF,EAAQ,IAAR,EAAeS,GAAf,CAAsBM,MAAF,KAAgB;AACtCZ,IAAAA,IAAI,EAAE,QADgC;AAEtCY,IAAAA,MAFsC;;AAGtCV,IAAAA,SAAS,CAAEL,OAAF,EAAY;AACpB,aAAOrB,WAAW,CACjB,WADiB,EAEjB;AACCqC,QAAAA,OAAO,EAAE;AADV,OAFiB,EAKjB,CAAErC,WAAW,CAAE,gBAAF,EAAoB;AAAEqB,QAAAA;AAAF,OAApB,CAAb,CALiB,CAAlB;AAOA;;AAXqC,GAAhB,CAApB,CA3DE,EAwEL;AACCG,IAAAA,IAAI,EAAE,KADP;AAECc,IAAAA,QAAQ,EAAE,OAFX;AAGCC,IAAAA,MAAM,EAAIC,IAAF,KAAc;AACrB7B,MAAAA,EAAE,EAAEJ,oBAAoB,CAAEiC,IAAF,CAApB,CAA6B7B,EADZ;AAErBD,MAAAA,EAAE,EAAEH,oBAAoB,CAAEiC,IAAF,CAApB,CAA6B9B;AAFZ,KAAd,CAHT;AAOCgB,IAAAA,SAAS,EAAEpB;AAPZ,GAxEK,CADY;AAmFlBmC,EAAAA,EAAE,EAAE,CACH,GAAG,CAAE,gBAAF,EAAoB,cAApB,EAAqCX,GAArC,CAA4CY,KAAF,KAAe;AAC3DlB,IAAAA,IAAI,EAAE,OADqD;AAE3DN,IAAAA,MAAM,EAAE,CAAEwB,KAAF,CAFmD;AAG3DhB,IAAAA,SAAS,EAAE,CAAEiB,WAAF,EAAef,WAAf,KAAgC;AAC1C,aAAOX,kBAAkB,CAAEW,WAAF,CAAlB,CAAkCE,GAAlC,CAAyCT,OAAF,IAC7CrB,WAAW,CAAE0C,KAAF,EAAS;AACnBrB,QAAAA;AADmB,OAAT,CADL,CAAP;AAKA;AAT0D,GAAf,CAA1C,CADA,EAYH,GAAG,CAAE,YAAF,EAAgB,gBAAhB,EAAmCS,GAAnC,CAA0CY,KAAF,KAAe;AACzDlB,IAAAA,IAAI,EAAE,OADmD;AAEzDN,IAAAA,MAAM,EAAE,CAAEwB,KAAF,CAFiD;AAGzDhB,IAAAA,SAAS,EAAE,CAAEd,UAAF,EAAcQ,WAAd,KAA+B;AACzC,aAAOnB,iBAAiB,CACvBA,iBAAiB,CAChBD,WAAW,CAAE,WAAF,EAAeY,UAAf,EAA2BQ,WAA3B,CADK,EAEhB,gBAFgB,CADM,EAKvBsB,KALuB,CAAxB;AAOA;AAXwD,GAAf,CAAxC,CAZA;AAnFc,CAAnB;AA+GA,eAAepB,UAAf","sourcesContent":["/**\n * WordPress dependencies\n */\n/**\n * External dependencies\n */\nimport { flatMap } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock, switchToBlockType } from '@wordpress/blocks';\nimport {\n\t__UNSTABLE_LINE_SEPARATOR,\n\tcreate,\n\tsplit,\n\ttoHTMLString,\n} from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { createListBlockFromDOMElement } from './migrate';\n\nfunction getListContentSchema( { phrasingContentSchema } ) {\n\tconst listContentSchema = {\n\t\t...phrasingContentSchema,\n\t\tul: {},\n\t\tol: { attributes: [ 'type', 'start', 'reversed' ] },\n\t};\n\n\t// Recursion is needed.\n\t// Possible: ul > li > ul.\n\t// Impossible: ul > ul.\n\t[ 'ul', 'ol' ].forEach( ( tag ) => {\n\t\tlistContentSchema[ tag ].children = {\n\t\t\tli: {\n\t\t\t\tchildren: listContentSchema,\n\t\t\t},\n\t\t};\n\t} );\n\n\treturn listContentSchema;\n}\n\nfunction getListContentFlat( blocks ) {\n\treturn flatMap( blocks, ( { name, attributes, innerBlocks = [] } ) => {\n\t\tif ( name === 'core/list-item' ) {\n\t\t\treturn [ attributes.content, ...getListContentFlat( innerBlocks ) ];\n\t\t}\n\t\treturn getListContentFlat( innerBlocks );\n\t} );\n}\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tisMultiBlock: true,\n\t\t\tblocks: [ 'core/paragraph', 'core/heading' ],\n\t\t\ttransform: ( blockAttributes ) => {\n\t\t\t\tlet childBlocks = [];\n\t\t\t\tif ( blockAttributes.length > 1 ) {\n\t\t\t\t\tchildBlocks = blockAttributes.map( ( { content } ) => {\n\t\t\t\t\t\treturn createBlock( 'core/list-item', { content } );\n\t\t\t\t\t} );\n\t\t\t\t} else if ( blockAttributes.length === 1 ) {\n\t\t\t\t\tconst value = create( {\n\t\t\t\t\t\thtml: blockAttributes[ 0 ].content,\n\t\t\t\t\t} );\n\t\t\t\t\tchildBlocks = split( value, '\\n' ).map( ( result ) => {\n\t\t\t\t\t\treturn createBlock( 'core/list-item', {\n\t\t\t\t\t\t\tcontent: toHTMLString( { value: result } ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/list',\n\t\t\t\t\t{\n\t\t\t\t\t\tanchor: blockAttributes.anchor,\n\t\t\t\t\t},\n\t\t\t\t\tchildBlocks\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/quote', 'core/pullquote' ],\n\t\t\ttransform: ( { value, anchor } ) => {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/list',\n\t\t\t\t\t{\n\t\t\t\t\t\tanchor,\n\t\t\t\t\t},\n\t\t\t\t\tsplit(\n\t\t\t\t\t\tcreate( { html: value, multilineTag: 'p' } ),\n\t\t\t\t\t\t__UNSTABLE_LINE_SEPARATOR\n\t\t\t\t\t).map( ( result ) => {\n\t\t\t\t\t\treturn createBlock( 'core/list-item', {\n\t\t\t\t\t\t\tcontent: toHTMLString( { value: result } ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t...[ '*', '-' ].map( ( prefix ) => ( {\n\t\t\ttype: 'prefix',\n\t\t\tprefix,\n\t\t\ttransform( content ) {\n\t\t\t\treturn createBlock( 'core/list', {}, [\n\t\t\t\t\tcreateBlock( 'core/list-item', { content } ),\n\t\t\t\t] );\n\t\t\t},\n\t\t} ) ),\n\t\t...[ '1.', '1)' ].map( ( prefix ) => ( {\n\t\t\ttype: 'prefix',\n\t\t\tprefix,\n\t\t\ttransform( content ) {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/list',\n\t\t\t\t\t{\n\t\t\t\t\t\tordered: true,\n\t\t\t\t\t},\n\t\t\t\t\t[ createBlock( 'core/list-item', { content } ) ]\n\t\t\t\t);\n\t\t\t},\n\t\t} ) ),\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tselector: 'ol,ul',\n\t\t\tschema: ( args ) => ( {\n\t\t\t\tol: getListContentSchema( args ).ol,\n\t\t\t\tul: getListContentSchema( args ).ul,\n\t\t\t} ),\n\t\t\ttransform: createListBlockFromDOMElement,\n\t\t},\n\t],\n\tto: [\n\t\t...[ 'core/paragraph', 'core/heading' ].map( ( block ) => ( {\n\t\t\ttype: 'block',\n\t\t\tblocks: [ block ],\n\t\t\ttransform: ( _attributes, childBlocks ) => {\n\t\t\t\treturn getListContentFlat( childBlocks ).map( ( content ) =>\n\t\t\t\t\tcreateBlock( block, {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t},\n\t\t} ) ),\n\t\t...[ 'core/quote', 'core/pullquote' ].map( ( block ) => ( {\n\t\t\ttype: 'block',\n\t\t\tblocks: [ block ],\n\t\t\ttransform: ( attributes, innerBlocks ) => {\n\t\t\t\treturn switchToBlockType(\n\t\t\t\t\tswitchToBlockType(\n\t\t\t\t\t\tcreateBlock( 'core/list', attributes, innerBlocks ),\n\t\t\t\t\t\t'core/paragraph'\n\t\t\t\t\t),\n\t\t\t\t\tblock\n\t\t\t\t);\n\t\t\t},\n\t\t} ) ),\n\t],\n};\n\nexport default transforms;\n"]}
|
|
@@ -14,7 +14,8 @@ import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
|
14
14
|
import useOutdentListItem from './use-outdent-list-item';
|
|
15
15
|
export default function useEnter(props) {
|
|
16
16
|
const {
|
|
17
|
-
replaceBlocks
|
|
17
|
+
replaceBlocks,
|
|
18
|
+
selectionChange
|
|
18
19
|
} = useDispatch(blockEditorStore);
|
|
19
20
|
const {
|
|
20
21
|
getBlock,
|
|
@@ -49,8 +50,7 @@ export default function useEnter(props) {
|
|
|
49
50
|
} // Here we are in top level list so we need to split.
|
|
50
51
|
|
|
51
52
|
|
|
52
|
-
const
|
|
53
|
-
const topParentListBlock = getBlock(blockRootClientId);
|
|
53
|
+
const topParentListBlock = getBlock(getBlockRootClientId(clientId));
|
|
54
54
|
const blockIndex = getBlockIndex(clientId);
|
|
55
55
|
const head = cloneBlock({ ...topParentListBlock,
|
|
56
56
|
innerBlocks: topParentListBlock.innerBlocks.slice(0, blockIndex)
|
|
@@ -62,7 +62,10 @@ export default function useEnter(props) {
|
|
|
62
62
|
const tail = after.length ? [cloneBlock({ ...topParentListBlock,
|
|
63
63
|
innerBlocks: after
|
|
64
64
|
})] : [];
|
|
65
|
-
replaceBlocks(
|
|
65
|
+
replaceBlocks(topParentListBlock.clientId, [head, middle, ...tail], 1); // We manually change the selection here because we are replacing
|
|
66
|
+
// a different block than the selected one.
|
|
67
|
+
|
|
68
|
+
selectionChange(middle.clientId);
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
element.addEventListener('keydown', onKeyDown);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/list-item/hooks/use-enter.js"],"names":["createBlock","getDefaultBlockName","cloneBlock","useRef","useRefEffect","ENTER","useSelect","useDispatch","store","blockEditorStore","useOutdentListItem","useEnter","props","replaceBlocks","getBlock","getBlockRootClientId","getBlockIndex","propsRef","current","canOutdent","outdentListItem","clientId","element","onKeyDown","event","defaultPrevented","keyCode","content","length","preventDefault","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/list-item/hooks/use-enter.js"],"names":["createBlock","getDefaultBlockName","cloneBlock","useRef","useRefEffect","ENTER","useSelect","useDispatch","store","blockEditorStore","useOutdentListItem","useEnter","props","replaceBlocks","selectionChange","getBlock","getBlockRootClientId","getBlockIndex","propsRef","current","canOutdent","outdentListItem","clientId","element","onKeyDown","event","defaultPrevented","keyCode","content","length","preventDefault","topParentListBlock","blockIndex","head","innerBlocks","slice","middle","after","tail","addEventListener","removeEventListener"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tcloneBlock,\n} from '@wordpress/blocks';\nimport { useRef } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\nimport { ENTER } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport useOutdentListItem from './use-outdent-list-item';\n\nexport default function useEnter( props ) {\n\tconst { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );\n\tconst { getBlock, getBlockRootClientId, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst propsRef = useRef( props );\n\tpropsRef.current = props;\n\tconst [ canOutdent, outdentListItem ] = useOutdentListItem(\n\t\tpropsRef.current.clientId\n\t);\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tif ( event.defaultPrevented || event.keyCode !== ENTER ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst { content, clientId } = propsRef.current;\n\t\t\t\tif ( content.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( canOutdent ) {\n\t\t\t\t\toutdentListItem();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Here we are in top level list so we need to split.\n\t\t\t\tconst topParentListBlock = getBlock(\n\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t);\n\t\t\t\tconst blockIndex = getBlockIndex( clientId );\n\t\t\t\tconst head = cloneBlock( {\n\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\tinnerBlocks: topParentListBlock.innerBlocks.slice(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tblockIndex\n\t\t\t\t\t),\n\t\t\t\t} );\n\t\t\t\tconst middle = createBlock( getDefaultBlockName() );\n\t\t\t\t// Last list item might contain a `list` block innerBlock\n\t\t\t\t// In that case append remaining innerBlocks blocks.\n\t\t\t\tconst after = [\n\t\t\t\t\t...( topParentListBlock.innerBlocks[ blockIndex ]\n\t\t\t\t\t\t.innerBlocks[ 0 ]?.innerBlocks || [] ),\n\t\t\t\t\t...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),\n\t\t\t\t];\n\t\t\t\tconst tail = after.length\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tcloneBlock( {\n\t\t\t\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\t\t\t\tinnerBlocks: after,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ]\n\t\t\t\t\t: [];\n\t\t\t\treplaceBlocks(\n\t\t\t\t\ttopParentListBlock.clientId,\n\t\t\t\t\t[ head, middle, ...tail ],\n\t\t\t\t\t1\n\t\t\t\t);\n\t\t\t\t// We manually change the selection here because we are replacing\n\t\t\t\t// a different block than the selected one.\n\t\t\t\tselectionChange( middle.clientId );\n\t\t\t}\n\n\t\t\telement.addEventListener( 'keydown', onKeyDown );\n\t\t\treturn () => {\n\t\t\t\telement.removeEventListener( 'keydown', onKeyDown );\n\t\t\t};\n\t\t},\n\t\t[ canOutdent ]\n\t);\n}\n"]}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { first, last } from 'lodash';
|
|
1
5
|
/**
|
|
2
6
|
* WordPress dependencies
|
|
3
7
|
*/
|
|
8
|
+
|
|
4
9
|
import { useCallback } from '@wordpress/element';
|
|
5
10
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
6
11
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
12
|
+
import { cloneBlock } from '@wordpress/blocks';
|
|
7
13
|
/**
|
|
8
14
|
* Internal dependencies
|
|
9
15
|
*/
|
|
@@ -23,7 +29,8 @@ export default function useOutdentListItem(clientId) {
|
|
|
23
29
|
}, [clientId]);
|
|
24
30
|
const {
|
|
25
31
|
replaceBlocks,
|
|
26
|
-
selectionChange
|
|
32
|
+
selectionChange,
|
|
33
|
+
multiSelect
|
|
27
34
|
} = useDispatch(blockEditorStore);
|
|
28
35
|
const {
|
|
29
36
|
getBlockRootClientId,
|
|
@@ -31,36 +38,48 @@ export default function useOutdentListItem(clientId) {
|
|
|
31
38
|
getBlock,
|
|
32
39
|
getBlockIndex,
|
|
33
40
|
getSelectionStart,
|
|
34
|
-
getSelectionEnd
|
|
41
|
+
getSelectionEnd,
|
|
42
|
+
hasMultiSelection,
|
|
43
|
+
getMultiSelectedBlockClientIds
|
|
35
44
|
} = useSelect(blockEditorStore);
|
|
36
45
|
return [canOutdent, useCallback(() => {
|
|
46
|
+
const _hasMultiSelection = hasMultiSelection();
|
|
47
|
+
|
|
48
|
+
const clientIds = _hasMultiSelection ? getMultiSelectedBlockClientIds() : [clientId];
|
|
37
49
|
const selectionStart = getSelectionStart();
|
|
38
50
|
const selectionEnd = getSelectionEnd();
|
|
39
51
|
const listParentId = getBlockRootClientId(clientId);
|
|
40
52
|
const listAttributes = getBlockAttributes(listParentId);
|
|
41
53
|
const listItemParentId = getBlockRootClientId(listParentId);
|
|
42
54
|
const listItemParentAttributes = getBlockAttributes(listItemParentId);
|
|
43
|
-
const
|
|
55
|
+
const firstIndex = getBlockIndex(first(clientIds));
|
|
56
|
+
const lastIndex = getBlockIndex(last(clientIds));
|
|
44
57
|
const siblingBlocks = getBlock(listParentId).innerBlocks;
|
|
45
|
-
const previousSiblings = siblingBlocks.slice(0,
|
|
46
|
-
const afterSiblings = siblingBlocks.slice(
|
|
47
|
-
// that existed before the child item being outdent.
|
|
58
|
+
const previousSiblings = siblingBlocks.slice(0, firstIndex);
|
|
59
|
+
const afterSiblings = siblingBlocks.slice(lastIndex + 1); // Create a new parent list item block with just the siblings
|
|
60
|
+
// that existed before the first child item being outdent.
|
|
48
61
|
|
|
49
62
|
const newListItemParent = createListItem(listItemParentAttributes, listAttributes, previousSiblings);
|
|
50
|
-
const
|
|
51
|
-
const childList =
|
|
63
|
+
const lastBlock = getBlock(last(clientIds));
|
|
64
|
+
const childList = lastBlock.innerBlocks[0];
|
|
52
65
|
const childItems = (childList === null || childList === void 0 ? void 0 : childList.innerBlocks) || [];
|
|
53
|
-
const hasChildItems = !!childItems.length;
|
|
54
|
-
|
|
66
|
+
const hasChildItems = !!childItems.length;
|
|
67
|
+
const newBlocksExcludingLast = clientIds.slice(0, -1).map(_clientId => cloneBlock(getBlock(_clientId))); // Create a new list item block whose attributes are equal to the
|
|
68
|
+
// last block being outdent and whose children are the children that it had (if any)
|
|
55
69
|
// followed by the siblings that existed after it.
|
|
56
70
|
|
|
57
|
-
const
|
|
58
|
-
// the previous siblings
|
|
59
|
-
//
|
|
71
|
+
const newLastItem = createListItem(lastBlock.attributes, hasChildItems ? childList.attributes : listAttributes, [...childItems, ...afterSiblings]); // Replace the parent list item block, with a new block containing
|
|
72
|
+
// the previous siblings before the first block being outdent,
|
|
73
|
+
// followed by the blocks being outdent with the after siblings added
|
|
74
|
+
// as children of the last block.
|
|
60
75
|
|
|
61
|
-
replaceBlocks([listItemParentId], [newListItemParent,
|
|
76
|
+
replaceBlocks([listItemParentId], [newListItemParent, ...newBlocksExcludingLast, newLastItem]); // Restore the selection state.
|
|
62
77
|
|
|
63
|
-
|
|
78
|
+
if (!_hasMultiSelection) {
|
|
79
|
+
selectionChange(newLastItem.clientId, selectionEnd.attributeKey, selectionEnd.clientId === selectionStart.clientId ? selectionStart.offset : selectionEnd.offset, selectionEnd.offset);
|
|
80
|
+
} else {
|
|
81
|
+
multiSelect(first(newBlocksExcludingLast).clientId, newLastItem.clientId);
|
|
82
|
+
}
|
|
64
83
|
}, [clientId])];
|
|
65
84
|
}
|
|
66
85
|
//# sourceMappingURL=use-outdent-list-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/list-item/hooks/use-outdent-list-item.js"],"names":["useCallback","useSelect","useDispatch","store","blockEditorStore","createListItem","useOutdentListItem","clientId","canOutdent","innerSelect","getBlockRootClientId","grandParentId","replaceBlocks","selectionChange","getBlockAttributes","getBlock","getBlockIndex","getSelectionStart","getSelectionEnd","selectionStart","selectionEnd","listParentId","listAttributes","listItemParentId","listItemParentAttributes","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/list-item/hooks/use-outdent-list-item.js"],"names":["first","last","useCallback","useSelect","useDispatch","store","blockEditorStore","cloneBlock","createListItem","useOutdentListItem","clientId","canOutdent","innerSelect","getBlockRootClientId","grandParentId","replaceBlocks","selectionChange","multiSelect","getBlockAttributes","getBlock","getBlockIndex","getSelectionStart","getSelectionEnd","hasMultiSelection","getMultiSelectedBlockClientIds","_hasMultiSelection","clientIds","selectionStart","selectionEnd","listParentId","listAttributes","listItemParentId","listItemParentAttributes","firstIndex","lastIndex","siblingBlocks","innerBlocks","previousSiblings","slice","afterSiblings","newListItemParent","lastBlock","childList","childItems","hasChildItems","length","newBlocksExcludingLast","map","_clientId","newLastItem","attributes","attributeKey","offset"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAT,EAAgBC,IAAhB,QAA4B,QAA5B;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,oBAA5B;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,yBAA1C;AACA,SAASC,UAAT,QAA2B,mBAA3B;AAEA;AACA;AACA;;AACA,SAASC,cAAT,QAA+B,UAA/B;AAEA,eAAe,SAASC,kBAAT,CAA6BC,QAA7B,EAAwC;AACtD,QAAM;AAAEC,IAAAA;AAAF,MAAiBR,SAAS,CAC7BS,WAAF,IAAmB;AAClB,UAAM;AAAEC,MAAAA;AAAF,QAA2BD,WAAW,CAAEN,gBAAF,CAA5C;AACA,UAAMQ,aAAa,GAAGD,oBAAoB,CACzCA,oBAAoB,CAAEH,QAAF,CADqB,CAA1C;AAGA,WAAO;AACNC,MAAAA,UAAU,EAAE,CAAC,CAAEG;AADT,KAAP;AAGA,GAT8B,EAU/B,CAAEJ,QAAF,CAV+B,CAAhC;AAYA,QAAM;AAAEK,IAAAA,aAAF;AAAiBC,IAAAA,eAAjB;AAAkCC,IAAAA;AAAlC,MACLb,WAAW,CAAEE,gBAAF,CADZ;AAEA,QAAM;AACLO,IAAAA,oBADK;AAELK,IAAAA,kBAFK;AAGLC,IAAAA,QAHK;AAILC,IAAAA,aAJK;AAKLC,IAAAA,iBALK;AAMLC,IAAAA,eANK;AAOLC,IAAAA,iBAPK;AAQLC,IAAAA;AARK,MASFrB,SAAS,CAAEG,gBAAF,CATb;AAWA,SAAO,CACNK,UADM,EAENT,WAAW,CAAE,MAAM;AAClB,UAAMuB,kBAAkB,GAAGF,iBAAiB,EAA5C;;AACA,UAAMG,SAAS,GAAGD,kBAAkB,GACjCD,8BAA8B,EADG,GAEjC,CAAEd,QAAF,CAFH;AAIA,UAAMiB,cAAc,GAAGN,iBAAiB,EAAxC;AACA,UAAMO,YAAY,GAAGN,eAAe,EAApC;AAEA,UAAMO,YAAY,GAAGhB,oBAAoB,CAAEH,QAAF,CAAzC;AACA,UAAMoB,cAAc,GAAGZ,kBAAkB,CAAEW,YAAF,CAAzC;AACA,UAAME,gBAAgB,GAAGlB,oBAAoB,CAAEgB,YAAF,CAA7C;AACA,UAAMG,wBAAwB,GAC7Bd,kBAAkB,CAAEa,gBAAF,CADnB;AAGA,UAAME,UAAU,GAAGb,aAAa,CAAEpB,KAAK,CAAE0B,SAAF,CAAP,CAAhC;AACA,UAAMQ,SAAS,GAAGd,aAAa,CAAEnB,IAAI,CAAEyB,SAAF,CAAN,CAA/B;AACA,UAAMS,aAAa,GAAGhB,QAAQ,CAAEU,YAAF,CAAR,CAAyBO,WAA/C;AACA,UAAMC,gBAAgB,GAAGF,aAAa,CAACG,KAAd,CAAqB,CAArB,EAAwBL,UAAxB,CAAzB;AACA,UAAMM,aAAa,GAAGJ,aAAa,CAACG,KAAd,CAAqBJ,SAAS,GAAG,CAAjC,CAAtB,CAnBkB,CAqBlB;AACA;;AACA,UAAMM,iBAAiB,GAAGhC,cAAc,CACvCwB,wBADuC,EAEvCF,cAFuC,EAGvCO,gBAHuC,CAAxC;AAMA,UAAMI,SAAS,GAAGtB,QAAQ,CAAElB,IAAI,CAAEyB,SAAF,CAAN,CAA1B;AACA,UAAMgB,SAAS,GAAGD,SAAS,CAACL,WAAV,CAAuB,CAAvB,CAAlB;AACA,UAAMO,UAAU,GAAG,CAAAD,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAEN,WAAX,KAA0B,EAA7C;AACA,UAAMQ,aAAa,GAAG,CAAC,CAAED,UAAU,CAACE,MAApC;AAEA,UAAMC,sBAAsB,GAAGpB,SAAS,CACtCY,KAD6B,CACtB,CADsB,EACnB,CAAC,CADkB,EAE7BS,GAF6B,CAEtBC,SAAF,IAAiBzC,UAAU,CAAEY,QAAQ,CAAE6B,SAAF,CAAV,CAFH,CAA/B,CAlCkB,CAsClB;AACA;AACA;;AACA,UAAMC,WAAW,GAAGzC,cAAc,CACjCiC,SAAS,CAACS,UADuB,EAEjCN,aAAa,GAAGF,SAAS,CAACQ,UAAb,GAA0BpB,cAFN,EAGjC,CAAE,GAAGa,UAAL,EAAiB,GAAGJ,aAApB,CAHiC,CAAlC,CAzCkB,CA+ClB;AACA;AACA;AACA;;AACAxB,IAAAA,aAAa,CACZ,CAAEgB,gBAAF,CADY,EAEZ,CAAES,iBAAF,EAAqB,GAAGM,sBAAxB,EAAgDG,WAAhD,CAFY,CAAb,CAnDkB,CAwDlB;;AACA,QAAK,CAAExB,kBAAP,EAA4B;AAC3BT,MAAAA,eAAe,CACdiC,WAAW,CAACvC,QADE,EAEdkB,YAAY,CAACuB,YAFC,EAGdvB,YAAY,CAAClB,QAAb,KAA0BiB,cAAc,CAACjB,QAAzC,GACGiB,cAAc,CAACyB,MADlB,GAEGxB,YAAY,CAACwB,MALF,EAMdxB,YAAY,CAACwB,MANC,CAAf;AAQA,KATD,MASO;AACNnC,MAAAA,WAAW,CACVjB,KAAK,CAAE8C,sBAAF,CAAL,CAAgCpC,QADtB,EAEVuC,WAAW,CAACvC,QAFF,CAAX;AAIA;AACD,GAxEU,EAwER,CAAEA,QAAF,CAxEQ,CAFL,CAAP;AA4EA","sourcesContent":["/**\n * External dependencies\n */\nimport { first, last } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { cloneBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { createListItem } from '../utils';\n\nexport default function useOutdentListItem( clientId ) {\n\tconst { canOutdent } = useSelect(\n\t\t( innerSelect ) => {\n\t\t\tconst { getBlockRootClientId } = innerSelect( blockEditorStore );\n\t\t\tconst grandParentId = getBlockRootClientId(\n\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcanOutdent: !! grandParentId,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks, selectionChange, multiSelect } =\n\t\tuseDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockRootClientId,\n\t\tgetBlockAttributes,\n\t\tgetBlock,\n\t\tgetBlockIndex,\n\t\tgetSelectionStart,\n\t\tgetSelectionEnd,\n\t\thasMultiSelection,\n\t\tgetMultiSelectedBlockClientIds,\n\t} = useSelect( blockEditorStore );\n\n\treturn [\n\t\tcanOutdent,\n\t\tuseCallback( () => {\n\t\t\tconst _hasMultiSelection = hasMultiSelection();\n\t\t\tconst clientIds = _hasMultiSelection\n\t\t\t\t? getMultiSelectedBlockClientIds()\n\t\t\t\t: [ clientId ];\n\n\t\t\tconst selectionStart = getSelectionStart();\n\t\t\tconst selectionEnd = getSelectionEnd();\n\n\t\t\tconst listParentId = getBlockRootClientId( clientId );\n\t\t\tconst listAttributes = getBlockAttributes( listParentId );\n\t\t\tconst listItemParentId = getBlockRootClientId( listParentId );\n\t\t\tconst listItemParentAttributes =\n\t\t\t\tgetBlockAttributes( listItemParentId );\n\n\t\t\tconst firstIndex = getBlockIndex( first( clientIds ) );\n\t\t\tconst lastIndex = getBlockIndex( last( clientIds ) );\n\t\t\tconst siblingBlocks = getBlock( listParentId ).innerBlocks;\n\t\t\tconst previousSiblings = siblingBlocks.slice( 0, firstIndex );\n\t\t\tconst afterSiblings = siblingBlocks.slice( lastIndex + 1 );\n\n\t\t\t// Create a new parent list item block with just the siblings\n\t\t\t// that existed before the first child item being outdent.\n\t\t\tconst newListItemParent = createListItem(\n\t\t\t\tlistItemParentAttributes,\n\t\t\t\tlistAttributes,\n\t\t\t\tpreviousSiblings\n\t\t\t);\n\n\t\t\tconst lastBlock = getBlock( last( clientIds ) );\n\t\t\tconst childList = lastBlock.innerBlocks[ 0 ];\n\t\t\tconst childItems = childList?.innerBlocks || [];\n\t\t\tconst hasChildItems = !! childItems.length;\n\n\t\t\tconst newBlocksExcludingLast = clientIds\n\t\t\t\t.slice( 0, -1 )\n\t\t\t\t.map( ( _clientId ) => cloneBlock( getBlock( _clientId ) ) );\n\n\t\t\t// Create a new list item block whose attributes are equal to the\n\t\t\t// last block being outdent and whose children are the children that it had (if any)\n\t\t\t// followed by the siblings that existed after it.\n\t\t\tconst newLastItem = createListItem(\n\t\t\t\tlastBlock.attributes,\n\t\t\t\thasChildItems ? childList.attributes : listAttributes,\n\t\t\t\t[ ...childItems, ...afterSiblings ]\n\t\t\t);\n\n\t\t\t// Replace the parent list item block, with a new block containing\n\t\t\t// the previous siblings before the first block being outdent,\n\t\t\t// followed by the blocks being outdent with the after siblings added\n\t\t\t// as children of the last block.\n\t\t\treplaceBlocks(\n\t\t\t\t[ listItemParentId ],\n\t\t\t\t[ newListItemParent, ...newBlocksExcludingLast, newLastItem ]\n\t\t\t);\n\n\t\t\t// Restore the selection state.\n\t\t\tif ( ! _hasMultiSelection ) {\n\t\t\t\tselectionChange(\n\t\t\t\t\tnewLastItem.clientId,\n\t\t\t\t\tselectionEnd.attributeKey,\n\t\t\t\t\tselectionEnd.clientId === selectionStart.clientId\n\t\t\t\t\t\t? selectionStart.offset\n\t\t\t\t\t\t: selectionEnd.offset,\n\t\t\t\t\tselectionEnd.offset\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmultiSelect(\n\t\t\t\t\tfirst( newBlocksExcludingLast ).clientId,\n\t\t\t\t\tnewLastItem.clientId\n\t\t\t\t);\n\t\t\t}\n\t\t}, [ clientId ] ),\n\t];\n}\n"]}
|
|
@@ -325,7 +325,7 @@ function Navigation(_ref) {
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
if (isSelected || isInnerBlockSelected) {
|
|
328
|
-
if (hasResolvedCanUserUpdateNavigationMenu && !canUserUpdateNavigationMenu) {
|
|
328
|
+
if (ref && hasResolvedCanUserUpdateNavigationMenu && !canUserUpdateNavigationMenu) {
|
|
329
329
|
showCantEditNotice();
|
|
330
330
|
}
|
|
331
331
|
|