@wordpress/block-library 7.6.0 → 7.7.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/button/deprecated.js +175 -35
- package/build/button/deprecated.js.map +1 -1
- package/build/button/edit.js +1 -1
- package/build/button/edit.js.map +1 -1
- package/build/button/save.js +1 -1
- package/build/button/save.js.map +1 -1
- package/build/columns/index.js +3 -1
- package/build/columns/index.js.map +1 -1
- package/build/cover/deprecated.js +212 -207
- package/build/cover/deprecated.js.map +1 -1
- package/build/cover/edit/index.js +13 -3
- package/build/cover/edit/index.js.map +1 -1
- package/build/cover/save.js +18 -5
- package/build/cover/save.js.map +1 -1
- package/build/cover/shared.js +14 -17
- package/build/cover/shared.js.map +1 -1
- package/build/file/edit.js +1 -1
- package/build/file/edit.js.map +1 -1
- package/build/file/save.js +9 -1
- package/build/file/save.js.map +1 -1
- package/build/gallery/gap-styles.js +14 -4
- package/build/gallery/gap-styles.js.map +1 -1
- package/build/gallery/index.js +1 -1
- package/build/image/edit.js +5 -59
- package/build/image/edit.js.map +1 -1
- package/build/image/edit.native.js +56 -3
- package/build/image/edit.native.js.map +1 -1
- package/build/image/image.js +3 -13
- package/build/image/image.js.map +1 -1
- package/build/list-item/hooks/use-split.js +17 -3
- package/build/list-item/hooks/use-split.js.map +1 -1
- package/build/navigation-link/edit.js +31 -5
- package/build/navigation-link/edit.js.map +1 -1
- package/build/post-author-name/index.js +3 -0
- package/build/post-author-name/index.js.map +1 -1
- package/build/post-author-name/transforms.js +41 -0
- package/build/post-author-name/transforms.js.map +1 -0
- package/build/post-comments-form/form.js +11 -1
- package/build/post-comments-form/form.js.map +1 -1
- package/build/post-date/edit.js +13 -7
- package/build/post-date/edit.js.map +1 -1
- package/build/search/edit.js +1 -1
- package/build/search/edit.js.map +1 -1
- package/build/search/index.js +4 -0
- package/build/search/index.js.map +1 -1
- package/build/shortcode/edit.native.js +16 -13
- package/build/shortcode/edit.native.js.map +1 -1
- package/build/social-links/edit.js +2 -2
- package/build/social-links/edit.js.map +1 -1
- package/build/table-of-contents/edit.js +11 -3
- package/build/table-of-contents/edit.js.map +1 -1
- package/build-module/button/deprecated.js +175 -35
- package/build-module/button/deprecated.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/save.js +2 -2
- package/build-module/button/save.js.map +1 -1
- package/build-module/columns/index.js +3 -1
- package/build-module/columns/index.js.map +1 -1
- package/build-module/cover/deprecated.js +206 -198
- package/build-module/cover/deprecated.js.map +1 -1
- package/build-module/cover/edit/index.js +14 -4
- package/build-module/cover/edit/index.js.map +1 -1
- package/build-module/cover/save.js +19 -6
- package/build-module/cover/save.js.map +1 -1
- package/build-module/cover/shared.js +11 -12
- package/build-module/cover/shared.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 +7 -2
- package/build-module/file/save.js.map +1 -1
- package/build-module/gallery/gap-styles.js +14 -4
- package/build-module/gallery/gap-styles.js.map +1 -1
- package/build-module/gallery/index.js +1 -1
- package/build-module/image/edit.js +5 -56
- package/build-module/image/edit.js.map +1 -1
- package/build-module/image/edit.native.js +57 -5
- package/build-module/image/edit.native.js.map +1 -1
- package/build-module/image/image.js +4 -14
- package/build-module/image/image.js.map +1 -1
- package/build-module/list-item/hooks/use-split.js +19 -5
- package/build-module/list-item/hooks/use-split.js.map +1 -1
- package/build-module/navigation-link/edit.js +31 -6
- package/build-module/navigation-link/edit.js.map +1 -1
- package/build-module/post-author-name/index.js +2 -0
- package/build-module/post-author-name/index.js.map +1 -1
- package/build-module/post-author-name/transforms.js +32 -0
- package/build-module/post-author-name/transforms.js.map +1 -0
- package/build-module/post-comments-form/form.js +7 -1
- package/build-module/post-comments-form/form.js.map +1 -1
- package/build-module/post-date/edit.js +15 -9
- package/build-module/post-date/edit.js.map +1 -1
- package/build-module/search/edit.js +2 -2
- package/build-module/search/edit.js.map +1 -1
- package/build-module/search/index.js +4 -0
- package/build-module/search/index.js.map +1 -1
- package/build-module/shortcode/edit.native.js +17 -13
- package/build-module/shortcode/edit.native.js.map +1 -1
- package/build-module/social-links/edit.js +2 -2
- package/build-module/social-links/edit.js.map +1 -1
- package/build-module/table-of-contents/edit.js +12 -4
- package/build-module/table-of-contents/edit.js.map +1 -1
- package/build-style/cover/style-rtl.css +32 -23
- package/build-style/cover/style.css +32 -23
- package/build-style/site-logo/style-rtl.css +4 -0
- package/build-style/site-logo/style.css +4 -0
- package/build-style/style-rtl.css +36 -23
- package/build-style/style.css +36 -23
- package/package.json +28 -28
- package/src/button/deprecated.js +145 -0
- package/src/button/edit.js +3 -1
- package/src/button/save.js +3 -1
- package/src/buttons/test/__snapshots__/edit.native.js.snap +1 -1
- package/src/buttons/test/edit.native.js +1 -1
- package/src/columns/block.json +3 -1
- package/src/cover/deprecated.js +230 -183
- package/src/cover/edit/index.js +25 -13
- package/src/cover/save.js +26 -13
- package/src/cover/shared.js +5 -7
- package/src/cover/style.scss +27 -22
- package/src/file/edit.js +5 -1
- package/src/file/save.js +14 -2
- package/src/gallery/block.json +1 -1
- package/src/gallery/gap-styles.js +21 -6
- package/src/gallery/index.php +23 -12
- package/src/image/edit.js +1 -53
- package/src/image/edit.native.js +65 -3
- package/src/image/image.js +2 -11
- package/src/image/styles.native.scss +11 -0
- package/src/list-item/hooks/use-split.js +18 -9
- package/src/navigation-link/edit.js +35 -5
- package/src/navigation-link/test/edit.js +0 -20
- package/src/post-author/index.php +3 -2
- package/src/post-author-name/index.js +2 -0
- package/src/post-author-name/index.php +1 -1
- package/src/post-author-name/transforms.js +25 -0
- package/src/post-comments/index.php +1 -1
- package/src/post-comments-form/form.js +11 -1
- package/src/post-comments-form/index.php +1 -1
- package/src/post-date/edit.js +4 -3
- package/src/query-pagination/index.php +0 -1
- package/src/search/block.json +4 -0
- package/src/search/edit.js +3 -1
- package/src/search/index.php +28 -15
- package/src/shortcode/edit.native.js +29 -15
- package/src/shortcode/style.native.scss +11 -4
- package/src/shortcode/test/__snapshots__/edit.native.js.snap +9 -0
- package/src/shortcode/test/edit.native.js +58 -40
- package/src/site-logo/style.scss +6 -0
- package/src/social-links/edit.js +11 -10
- package/src/table-of-contents/edit.js +19 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/cover/shared.js"],"names":["getBlobTypeByURL","isBlobURL","POSITION_CLASSNAMES","center","IMAGE_BACKGROUND_TYPE","VIDEO_BACKGROUND_TYPE","COVER_MIN_HEIGHT","COVER_MAX_HEIGHT","COVER_DEFAULT_HEIGHT","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/cover/shared.js"],"names":["getBlobTypeByURL","isBlobURL","POSITION_CLASSNAMES","center","IMAGE_BACKGROUND_TYPE","VIDEO_BACKGROUND_TYPE","COVER_MIN_HEIGHT","COVER_MAX_HEIGHT","COVER_DEFAULT_HEIGHT","DEFAULT_FOCAL_POINT","x","y","ALLOWED_MEDIA_TYPES","mediaPosition","Math","round","dimRatioToClass","ratio","undefined","attributesFromMedia","setAttributes","dimRatio","media","url","id","type","mediaType","media_type","alt","backgroundType","focalPoint","hasParallax","isContentPositionCenter","contentPosition","getPositionClassName"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlobTypeByURL, isBlobURL } from '@wordpress/blob';\n\nconst POSITION_CLASSNAMES = {\n\t'top left': 'is-position-top-left',\n\t'top center': 'is-position-top-center',\n\t'top right': 'is-position-top-right',\n\t'center left': 'is-position-center-left',\n\t'center center': 'is-position-center-center',\n\tcenter: 'is-position-center-center',\n\t'center right': 'is-position-center-right',\n\t'bottom left': 'is-position-bottom-left',\n\t'bottom center': 'is-position-bottom-center',\n\t'bottom right': 'is-position-bottom-right',\n};\n\nexport const IMAGE_BACKGROUND_TYPE = 'image';\nexport const VIDEO_BACKGROUND_TYPE = 'video';\nexport const COVER_MIN_HEIGHT = 50;\nexport const COVER_MAX_HEIGHT = 1000;\nexport const COVER_DEFAULT_HEIGHT = 300;\nexport const DEFAULT_FOCAL_POINT = { x: 0.5, y: 0.5 };\nexport const ALLOWED_MEDIA_TYPES = [ 'image', 'video' ];\n\nexport function mediaPosition( { x, y } = DEFAULT_FOCAL_POINT ) {\n\treturn `${ Math.round( x * 100 ) }% ${ Math.round( y * 100 ) }%`;\n}\n\nexport function dimRatioToClass( ratio ) {\n\treturn ratio === 50 || ! ratio === undefined\n\t\t? null\n\t\t: 'has-background-dim-' + 10 * Math.round( ratio / 10 );\n}\n\nexport function attributesFromMedia( setAttributes, dimRatio ) {\n\treturn ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( { url: undefined, id: undefined } );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tmedia.type = getBlobTypeByURL( media.url );\n\t\t}\n\n\t\tlet mediaType;\n\t\t// For media selections originated from a file upload.\n\t\tif ( media.media_type ) {\n\t\t\tif ( media.media_type === IMAGE_BACKGROUND_TYPE ) {\n\t\t\t\tmediaType = IMAGE_BACKGROUND_TYPE;\n\t\t\t} else {\n\t\t\t\t// only images and videos are accepted so if the media_type is not an image we can assume it is a video.\n\t\t\t\t// Videos contain the media type of 'file' in the object returned from the rest api.\n\t\t\t\tmediaType = VIDEO_BACKGROUND_TYPE;\n\t\t\t}\n\t\t} else {\n\t\t\t// For media selections originated from existing files in the media library.\n\t\t\tif (\n\t\t\t\tmedia.type !== IMAGE_BACKGROUND_TYPE &&\n\t\t\t\tmedia.type !== VIDEO_BACKGROUND_TYPE\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmediaType = media.type;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\tdimRatio: dimRatio === 100 ? 50 : dimRatio,\n\t\t\turl: media.url,\n\t\t\tid: media.id,\n\t\t\talt: media?.alt,\n\t\t\tbackgroundType: mediaType,\n\t\t\t...( mediaType === VIDEO_BACKGROUND_TYPE\n\t\t\t\t? { focalPoint: undefined, hasParallax: undefined }\n\t\t\t\t: {} ),\n\t\t} );\n\t};\n}\n\n/**\n * Checks of the contentPosition is the center (default) position.\n *\n * @param {string} contentPosition The current content position.\n * @return {boolean} Whether the contentPosition is center.\n */\nexport function isContentPositionCenter( contentPosition ) {\n\treturn (\n\t\t! contentPosition ||\n\t\tcontentPosition === 'center center' ||\n\t\tcontentPosition === 'center'\n\t);\n}\n\n/**\n * Retrieves the className for the current contentPosition.\n * The default position (center) will not have a className.\n *\n * @param {string} contentPosition The current content position.\n * @return {string} The className assigned to the contentPosition.\n */\nexport function getPositionClassName( contentPosition ) {\n\t/*\n\t * Only render a className if the contentPosition is not center (the default).\n\t */\n\tif ( isContentPositionCenter( contentPosition ) ) return '';\n\n\treturn POSITION_CLASSNAMES[ contentPosition ];\n}\n"]}
|
|
@@ -11,7 +11,7 @@ import classnames from 'classnames';
|
|
|
11
11
|
import { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';
|
|
12
12
|
import { __unstableGetAnimateClassName as getAnimateClassName, withNotices, ResizableBox, ToolbarButton } from '@wordpress/components';
|
|
13
13
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
14
|
-
import { BlockControls, BlockIcon, MediaPlaceholder, MediaReplaceFlow, RichText, useBlockProps, store as blockEditorStore } from '@wordpress/block-editor';
|
|
14
|
+
import { BlockControls, BlockIcon, MediaPlaceholder, MediaReplaceFlow, RichText, useBlockProps, store as blockEditorStore, __experimentalElementButtonClassName } from '@wordpress/block-editor';
|
|
15
15
|
import { useEffect } from '@wordpress/element';
|
|
16
16
|
import { useCopyToClipboard } from '@wordpress/compose';
|
|
17
17
|
import { __, _x } from '@wordpress/i18n';
|
|
@@ -276,7 +276,7 @@ function FileEdit(_ref2) {
|
|
|
276
276
|
tagName: "div" // Must be block-level or else cursor disappears.
|
|
277
277
|
,
|
|
278
278
|
"aria-label": __('Download button text'),
|
|
279
|
-
className: 'wp-block-file__button',
|
|
279
|
+
className: classnames('wp-block-file__button', __experimentalElementButtonClassName),
|
|
280
280
|
value: downloadButtonText,
|
|
281
281
|
withoutInteractiveFormatting: true,
|
|
282
282
|
placeholder: __('Add text…'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/file/edit.js"],"names":["classnames","getBlobByURL","isBlobURL","revokeBlobURL","__unstableGetAnimateClassName","getAnimateClassName","withNotices","ResizableBox","ToolbarButton","useSelect","useDispatch","BlockControls","BlockIcon","MediaPlaceholder","MediaReplaceFlow","RichText","useBlockProps","store","blockEditorStore","useEffect","useCopyToClipboard","__","_x","file","icon","coreStore","noticesStore","FileBlockInspector","browserSupportsPdfs","MIN_PREVIEW_HEIGHT","MAX_PREVIEW_HEIGHT","ClipboardToolbarButton","text","disabled","createNotice","ref","isDismissible","type","FileEdit","attributes","isSelected","setAttributes","noticeUI","noticeOperations","clientId","id","fileId","fileName","href","textLinkHref","textLinkTarget","showDownloadButton","downloadButtonText","displayPreview","previewHeight","media","mediaUpload","select","undefined","getMedia","getSettings","toggleSelection","__unstableMarkNextChangeAsNotPersistent","filesList","onFileChange","newMedia","onSelectFile","onError","onUploadError","changeDownloadButtonText","url","isPdf","endsWith","title","message","removeAllNotices","createErrorNotice","changeLinkDestinationOption","newHref","changeOpenInNewWindow","newValue","changeShowDownloadButton","replace","changeDisplayPreview","handleOnResizeStop","event","direction","elt","delta","newHeight","parseInt","height","changePreviewHeight","Math","max","attachmentPage","link","blockProps","className","displayPreviewInEditor","instructions","openInNewWindow","top","right","bottom","left","topRight","bottomRight","bottomLeft","topLeft"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport {\n\t__unstableGetAnimateClassName as getAnimateClassName,\n\twithNotices,\n\tResizableBox,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tBlockIcon,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useEffect } from '@wordpress/element';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { __, _x } from '@wordpress/i18n';\nimport { file as icon } from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport FileBlockInspector from './inspector';\nimport { browserSupportsPdfs } from './utils';\n\nexport const MIN_PREVIEW_HEIGHT = 200;\nexport const MAX_PREVIEW_HEIGHT = 2000;\n\nfunction ClipboardToolbarButton( { text, disabled } ) {\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst ref = useCopyToClipboard( text, () => {\n\t\tcreateNotice( 'info', __( 'Copied URL to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\treturn (\n\t\t<ToolbarButton\n\t\t\tclassName=\"components-clipboard-toolbar-button\"\n\t\t\tref={ ref }\n\t\t\tdisabled={ disabled }\n\t\t>\n\t\t\t{ __( 'Copy URL' ) }\n\t\t</ToolbarButton>\n\t);\n}\n\nfunction FileEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tnoticeUI,\n\tnoticeOperations,\n\tclientId,\n} ) {\n\tconst {\n\t\tid,\n\t\tfileId,\n\t\tfileName,\n\t\thref,\n\t\ttextLinkHref,\n\t\ttextLinkTarget,\n\t\tshowDownloadButton,\n\t\tdownloadButtonText,\n\t\tdisplayPreview,\n\t\tpreviewHeight,\n\t} = attributes;\n\tconst { media, mediaUpload } = useSelect(\n\t\t( select ) => ( {\n\t\t\tmedia:\n\t\t\t\tid === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: select( coreStore ).getMedia( id ),\n\t\t\tmediaUpload: select( blockEditorStore ).getSettings().mediaUpload,\n\t\t} ),\n\t\t[ id ]\n\t);\n\n\tconst {\n\t\ttoggleSelection,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\t// Upload a file drag-and-dropped into the editor.\n\t\tif ( isBlobURL( href ) ) {\n\t\t\tconst file = getBlobByURL( href );\n\n\t\t\tmediaUpload( {\n\t\t\t\tfilesList: [ file ],\n\t\t\t\tonFileChange: ( [ newMedia ] ) => onSelectFile( newMedia ),\n\t\t\t\tonError: onUploadError,\n\t\t\t} );\n\n\t\t\trevokeBlobURL( href );\n\t\t}\n\n\t\tif ( downloadButtonText === undefined ) {\n\t\t\tchangeDownloadButtonText( _x( 'Download', 'button label' ) );\n\t\t}\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( ! fileId && href ) {\n\t\t\t// Add a unique fileId to each file block.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { fileId: `wp-block-file--media-${ clientId }` } );\n\t\t}\n\t}, [ href, fileId, clientId ] );\n\n\tfunction onSelectFile( newMedia ) {\n\t\tif ( newMedia && newMedia.url ) {\n\t\t\tconst isPdf = newMedia.url.endsWith( '.pdf' );\n\t\t\tsetAttributes( {\n\t\t\t\thref: newMedia.url,\n\t\t\t\tfileName: newMedia.title,\n\t\t\t\ttextLinkHref: newMedia.url,\n\t\t\t\tid: newMedia.id,\n\t\t\t\tdisplayPreview: isPdf ? true : undefined,\n\t\t\t\tpreviewHeight: isPdf ? 600 : undefined,\n\t\t\t} );\n\t\t}\n\t}\n\n\tfunction onUploadError( message ) {\n\t\tsetAttributes( { href: undefined } );\n\t\tnoticeOperations.removeAllNotices();\n\t\tnoticeOperations.createErrorNotice( message );\n\t}\n\n\tfunction changeLinkDestinationOption( newHref ) {\n\t\t// Choose Media File or Attachment Page (when file is in Media Library).\n\t\tsetAttributes( { textLinkHref: newHref } );\n\t}\n\n\tfunction changeOpenInNewWindow( newValue ) {\n\t\tsetAttributes( {\n\t\t\ttextLinkTarget: newValue ? '_blank' : false,\n\t\t} );\n\t}\n\n\tfunction changeShowDownloadButton( newValue ) {\n\t\tsetAttributes( { showDownloadButton: newValue } );\n\t}\n\n\tfunction changeDownloadButtonText( newValue ) {\n\t\t// Remove anchor tags from button text content.\n\t\tsetAttributes( {\n\t\t\tdownloadButtonText: newValue.replace( /<\\/?a[^>]*>/g, '' ),\n\t\t} );\n\t}\n\n\tfunction changeDisplayPreview( newValue ) {\n\t\tsetAttributes( { displayPreview: newValue } );\n\t}\n\n\tfunction handleOnResizeStop( event, direction, elt, delta ) {\n\t\ttoggleSelection( true );\n\n\t\tconst newHeight = parseInt( previewHeight + delta.height, 10 );\n\t\tsetAttributes( { previewHeight: newHeight } );\n\t}\n\n\tfunction changePreviewHeight( newValue ) {\n\t\tconst newHeight = Math.max(\n\t\t\tparseInt( newValue, 10 ),\n\t\t\tMIN_PREVIEW_HEIGHT\n\t\t);\n\t\tsetAttributes( { previewHeight: newHeight } );\n\t}\n\n\tconst attachmentPage = media && media.link;\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames(\n\t\t\tisBlobURL( href ) && getAnimateClassName( { type: 'loading' } ),\n\t\t\t{\n\t\t\t\t'is-transient': isBlobURL( href ),\n\t\t\t}\n\t\t),\n\t} );\n\n\tconst displayPreviewInEditor = browserSupportsPdfs() && displayPreview;\n\n\tif ( ! href ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tlabels={ {\n\t\t\t\t\t\ttitle: __( 'File' ),\n\t\t\t\t\t\tinstructions: __(\n\t\t\t\t\t\t\t'Upload a file or pick one from your media library.'\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t\tonSelect={ onSelectFile }\n\t\t\t\t\tnotices={ noticeUI }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\taccept=\"*\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<FileBlockInspector\n\t\t\t\threfs={ { href, textLinkHref, attachmentPage } }\n\t\t\t\t{ ...{\n\t\t\t\t\topenInNewWindow: !! textLinkTarget,\n\t\t\t\t\tshowDownloadButton,\n\t\t\t\t\tchangeLinkDestinationOption,\n\t\t\t\t\tchangeOpenInNewWindow,\n\t\t\t\t\tchangeShowDownloadButton,\n\t\t\t\t\tdisplayPreview,\n\t\t\t\t\tchangeDisplayPreview,\n\t\t\t\t\tpreviewHeight,\n\t\t\t\t\tchangePreviewHeight,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ href }\n\t\t\t\t\taccept=\"*\"\n\t\t\t\t\tonSelect={ onSelectFile }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t\t<ClipboardToolbarButton\n\t\t\t\t\ttext={ href }\n\t\t\t\t\tdisabled={ isBlobURL( href ) }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ displayPreviewInEditor && (\n\t\t\t\t\t<ResizableBox\n\t\t\t\t\t\tsize={ { height: previewHeight } }\n\t\t\t\t\t\tminHeight={ MIN_PREVIEW_HEIGHT }\n\t\t\t\t\t\tmaxHeight={ MAX_PREVIEW_HEIGHT }\n\t\t\t\t\t\tminWidth=\"100%\"\n\t\t\t\t\t\tgrid={ [ 10, 10 ] }\n\t\t\t\t\t\tenable={ {\n\t\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\t\tright: false,\n\t\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\t\tleft: false,\n\t\t\t\t\t\t\ttopRight: false,\n\t\t\t\t\t\t\tbottomRight: false,\n\t\t\t\t\t\t\tbottomLeft: false,\n\t\t\t\t\t\t\ttopLeft: false,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonResizeStart={ () => toggleSelection( false ) }\n\t\t\t\t\t\tonResizeStop={ handleOnResizeStop }\n\t\t\t\t\t\tshowHandle={ isSelected }\n\t\t\t\t\t>\n\t\t\t\t\t\t<object\n\t\t\t\t\t\t\tclassName=\"wp-block-file__preview\"\n\t\t\t\t\t\t\tdata={ href }\n\t\t\t\t\t\t\ttype=\"application/pdf\"\n\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t'Embed of the selected PDF file.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ ! isSelected && (\n\t\t\t\t\t\t\t<div className=\"wp-block-file__preview-overlay\" />\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ResizableBox>\n\t\t\t\t) }\n\t\t\t\t<div className={ 'wp-block-file__content-wrapper' }>\n\t\t\t\t\t<RichText\n\t\t\t\t\t\ttagName=\"a\"\n\t\t\t\t\t\tvalue={ fileName }\n\t\t\t\t\t\tplaceholder={ __( 'Write file name…' ) }\n\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\tonChange={ ( text ) =>\n\t\t\t\t\t\t\tsetAttributes( { fileName: text } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\thref={ textLinkHref }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showDownloadButton && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t'wp-block-file__button-richtext-wrapper'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ /* Using RichText here instead of PlainText so that it can be styled like a button. */ }\n\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\ttagName=\"div\" // Must be block-level or else cursor disappears.\n\t\t\t\t\t\t\t\taria-label={ __( 'Download button text' ) }\n\t\t\t\t\t\t\t\tclassName={ 'wp-block-file__button' }\n\t\t\t\t\t\t\t\tvalue={ downloadButtonText }\n\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Add text…' ) }\n\t\t\t\t\t\t\t\tonChange={ ( text ) =>\n\t\t\t\t\t\t\t\t\tchangeDownloadButtonText( text )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default withNotices( FileEdit );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/file/edit.js"],"names":["classnames","getBlobByURL","isBlobURL","revokeBlobURL","__unstableGetAnimateClassName","getAnimateClassName","withNotices","ResizableBox","ToolbarButton","useSelect","useDispatch","BlockControls","BlockIcon","MediaPlaceholder","MediaReplaceFlow","RichText","useBlockProps","store","blockEditorStore","__experimentalElementButtonClassName","useEffect","useCopyToClipboard","__","_x","file","icon","coreStore","noticesStore","FileBlockInspector","browserSupportsPdfs","MIN_PREVIEW_HEIGHT","MAX_PREVIEW_HEIGHT","ClipboardToolbarButton","text","disabled","createNotice","ref","isDismissible","type","FileEdit","attributes","isSelected","setAttributes","noticeUI","noticeOperations","clientId","id","fileId","fileName","href","textLinkHref","textLinkTarget","showDownloadButton","downloadButtonText","displayPreview","previewHeight","media","mediaUpload","select","undefined","getMedia","getSettings","toggleSelection","__unstableMarkNextChangeAsNotPersistent","filesList","onFileChange","newMedia","onSelectFile","onError","onUploadError","changeDownloadButtonText","url","isPdf","endsWith","title","message","removeAllNotices","createErrorNotice","changeLinkDestinationOption","newHref","changeOpenInNewWindow","newValue","changeShowDownloadButton","replace","changeDisplayPreview","handleOnResizeStop","event","direction","elt","delta","newHeight","parseInt","height","changePreviewHeight","Math","max","attachmentPage","link","blockProps","className","displayPreviewInEditor","instructions","openInNewWindow","top","right","bottom","left","topRight","bottomRight","bottomLeft","topLeft"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport {\n\t__unstableGetAnimateClassName as getAnimateClassName,\n\twithNotices,\n\tResizableBox,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tBlockIcon,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalElementButtonClassName,\n} from '@wordpress/block-editor';\nimport { useEffect } from '@wordpress/element';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { __, _x } from '@wordpress/i18n';\nimport { file as icon } from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport FileBlockInspector from './inspector';\nimport { browserSupportsPdfs } from './utils';\n\nexport const MIN_PREVIEW_HEIGHT = 200;\nexport const MAX_PREVIEW_HEIGHT = 2000;\n\nfunction ClipboardToolbarButton( { text, disabled } ) {\n\tconst { createNotice } = useDispatch( noticesStore );\n\tconst ref = useCopyToClipboard( text, () => {\n\t\tcreateNotice( 'info', __( 'Copied URL to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\treturn (\n\t\t<ToolbarButton\n\t\t\tclassName=\"components-clipboard-toolbar-button\"\n\t\t\tref={ ref }\n\t\t\tdisabled={ disabled }\n\t\t>\n\t\t\t{ __( 'Copy URL' ) }\n\t\t</ToolbarButton>\n\t);\n}\n\nfunction FileEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tnoticeUI,\n\tnoticeOperations,\n\tclientId,\n} ) {\n\tconst {\n\t\tid,\n\t\tfileId,\n\t\tfileName,\n\t\thref,\n\t\ttextLinkHref,\n\t\ttextLinkTarget,\n\t\tshowDownloadButton,\n\t\tdownloadButtonText,\n\t\tdisplayPreview,\n\t\tpreviewHeight,\n\t} = attributes;\n\tconst { media, mediaUpload } = useSelect(\n\t\t( select ) => ( {\n\t\t\tmedia:\n\t\t\t\tid === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: select( coreStore ).getMedia( id ),\n\t\t\tmediaUpload: select( blockEditorStore ).getSettings().mediaUpload,\n\t\t} ),\n\t\t[ id ]\n\t);\n\n\tconst {\n\t\ttoggleSelection,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t} = useDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\t// Upload a file drag-and-dropped into the editor.\n\t\tif ( isBlobURL( href ) ) {\n\t\t\tconst file = getBlobByURL( href );\n\n\t\t\tmediaUpload( {\n\t\t\t\tfilesList: [ file ],\n\t\t\t\tonFileChange: ( [ newMedia ] ) => onSelectFile( newMedia ),\n\t\t\t\tonError: onUploadError,\n\t\t\t} );\n\n\t\t\trevokeBlobURL( href );\n\t\t}\n\n\t\tif ( downloadButtonText === undefined ) {\n\t\t\tchangeDownloadButtonText( _x( 'Download', 'button label' ) );\n\t\t}\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( ! fileId && href ) {\n\t\t\t// Add a unique fileId to each file block.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( { fileId: `wp-block-file--media-${ clientId }` } );\n\t\t}\n\t}, [ href, fileId, clientId ] );\n\n\tfunction onSelectFile( newMedia ) {\n\t\tif ( newMedia && newMedia.url ) {\n\t\t\tconst isPdf = newMedia.url.endsWith( '.pdf' );\n\t\t\tsetAttributes( {\n\t\t\t\thref: newMedia.url,\n\t\t\t\tfileName: newMedia.title,\n\t\t\t\ttextLinkHref: newMedia.url,\n\t\t\t\tid: newMedia.id,\n\t\t\t\tdisplayPreview: isPdf ? true : undefined,\n\t\t\t\tpreviewHeight: isPdf ? 600 : undefined,\n\t\t\t} );\n\t\t}\n\t}\n\n\tfunction onUploadError( message ) {\n\t\tsetAttributes( { href: undefined } );\n\t\tnoticeOperations.removeAllNotices();\n\t\tnoticeOperations.createErrorNotice( message );\n\t}\n\n\tfunction changeLinkDestinationOption( newHref ) {\n\t\t// Choose Media File or Attachment Page (when file is in Media Library).\n\t\tsetAttributes( { textLinkHref: newHref } );\n\t}\n\n\tfunction changeOpenInNewWindow( newValue ) {\n\t\tsetAttributes( {\n\t\t\ttextLinkTarget: newValue ? '_blank' : false,\n\t\t} );\n\t}\n\n\tfunction changeShowDownloadButton( newValue ) {\n\t\tsetAttributes( { showDownloadButton: newValue } );\n\t}\n\n\tfunction changeDownloadButtonText( newValue ) {\n\t\t// Remove anchor tags from button text content.\n\t\tsetAttributes( {\n\t\t\tdownloadButtonText: newValue.replace( /<\\/?a[^>]*>/g, '' ),\n\t\t} );\n\t}\n\n\tfunction changeDisplayPreview( newValue ) {\n\t\tsetAttributes( { displayPreview: newValue } );\n\t}\n\n\tfunction handleOnResizeStop( event, direction, elt, delta ) {\n\t\ttoggleSelection( true );\n\n\t\tconst newHeight = parseInt( previewHeight + delta.height, 10 );\n\t\tsetAttributes( { previewHeight: newHeight } );\n\t}\n\n\tfunction changePreviewHeight( newValue ) {\n\t\tconst newHeight = Math.max(\n\t\t\tparseInt( newValue, 10 ),\n\t\t\tMIN_PREVIEW_HEIGHT\n\t\t);\n\t\tsetAttributes( { previewHeight: newHeight } );\n\t}\n\n\tconst attachmentPage = media && media.link;\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames(\n\t\t\tisBlobURL( href ) && getAnimateClassName( { type: 'loading' } ),\n\t\t\t{\n\t\t\t\t'is-transient': isBlobURL( href ),\n\t\t\t}\n\t\t),\n\t} );\n\n\tconst displayPreviewInEditor = browserSupportsPdfs() && displayPreview;\n\n\tif ( ! href ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\t\tlabels={ {\n\t\t\t\t\t\ttitle: __( 'File' ),\n\t\t\t\t\t\tinstructions: __(\n\t\t\t\t\t\t\t'Upload a file or pick one from your media library.'\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t\tonSelect={ onSelectFile }\n\t\t\t\t\tnotices={ noticeUI }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\taccept=\"*\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<FileBlockInspector\n\t\t\t\threfs={ { href, textLinkHref, attachmentPage } }\n\t\t\t\t{ ...{\n\t\t\t\t\topenInNewWindow: !! textLinkTarget,\n\t\t\t\t\tshowDownloadButton,\n\t\t\t\t\tchangeLinkDestinationOption,\n\t\t\t\t\tchangeOpenInNewWindow,\n\t\t\t\t\tchangeShowDownloadButton,\n\t\t\t\t\tdisplayPreview,\n\t\t\t\t\tchangeDisplayPreview,\n\t\t\t\t\tpreviewHeight,\n\t\t\t\t\tchangePreviewHeight,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<BlockControls group=\"other\">\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ href }\n\t\t\t\t\taccept=\"*\"\n\t\t\t\t\tonSelect={ onSelectFile }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t/>\n\t\t\t\t<ClipboardToolbarButton\n\t\t\t\t\ttext={ href }\n\t\t\t\t\tdisabled={ isBlobURL( href ) }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ displayPreviewInEditor && (\n\t\t\t\t\t<ResizableBox\n\t\t\t\t\t\tsize={ { height: previewHeight } }\n\t\t\t\t\t\tminHeight={ MIN_PREVIEW_HEIGHT }\n\t\t\t\t\t\tmaxHeight={ MAX_PREVIEW_HEIGHT }\n\t\t\t\t\t\tminWidth=\"100%\"\n\t\t\t\t\t\tgrid={ [ 10, 10 ] }\n\t\t\t\t\t\tenable={ {\n\t\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\t\tright: false,\n\t\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\t\tleft: false,\n\t\t\t\t\t\t\ttopRight: false,\n\t\t\t\t\t\t\tbottomRight: false,\n\t\t\t\t\t\t\tbottomLeft: false,\n\t\t\t\t\t\t\ttopLeft: false,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonResizeStart={ () => toggleSelection( false ) }\n\t\t\t\t\t\tonResizeStop={ handleOnResizeStop }\n\t\t\t\t\t\tshowHandle={ isSelected }\n\t\t\t\t\t>\n\t\t\t\t\t\t<object\n\t\t\t\t\t\t\tclassName=\"wp-block-file__preview\"\n\t\t\t\t\t\t\tdata={ href }\n\t\t\t\t\t\t\ttype=\"application/pdf\"\n\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t'Embed of the selected PDF file.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ ! isSelected && (\n\t\t\t\t\t\t\t<div className=\"wp-block-file__preview-overlay\" />\n\t\t\t\t\t\t) }\n\t\t\t\t\t</ResizableBox>\n\t\t\t\t) }\n\t\t\t\t<div className={ 'wp-block-file__content-wrapper' }>\n\t\t\t\t\t<RichText\n\t\t\t\t\t\ttagName=\"a\"\n\t\t\t\t\t\tvalue={ fileName }\n\t\t\t\t\t\tplaceholder={ __( 'Write file name…' ) }\n\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\tonChange={ ( text ) =>\n\t\t\t\t\t\t\tsetAttributes( { fileName: text } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\thref={ textLinkHref }\n\t\t\t\t\t/>\n\t\t\t\t\t{ showDownloadButton && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t'wp-block-file__button-richtext-wrapper'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ /* Using RichText here instead of PlainText so that it can be styled like a button. */ }\n\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\ttagName=\"div\" // Must be block-level or else cursor disappears.\n\t\t\t\t\t\t\t\taria-label={ __( 'Download button text' ) }\n\t\t\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t\t\t'wp-block-file__button',\n\t\t\t\t\t\t\t\t\t__experimentalElementButtonClassName\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tvalue={ downloadButtonText }\n\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Add text…' ) }\n\t\t\t\t\t\t\t\tonChange={ ( text ) =>\n\t\t\t\t\t\t\t\t\tchangeDownloadButtonText( text )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default withNotices( FileEdit );\n"]}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { createElement, Fragment } from "@wordpress/element";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* External dependencies
|
|
5
|
+
*/
|
|
6
|
+
import classnames from 'classnames';
|
|
3
7
|
/**
|
|
4
8
|
* WordPress dependencies
|
|
5
9
|
*/
|
|
6
|
-
|
|
10
|
+
|
|
11
|
+
import { RichText, useBlockProps, __experimentalElementButtonClassName } from '@wordpress/block-editor';
|
|
7
12
|
import { __, sprintf } from '@wordpress/i18n';
|
|
8
13
|
export default function save(_ref) {
|
|
9
14
|
let {
|
|
@@ -45,7 +50,7 @@ export default function save(_ref) {
|
|
|
45
50
|
value: fileName
|
|
46
51
|
})), showDownloadButton && createElement("a", {
|
|
47
52
|
href: href,
|
|
48
|
-
className:
|
|
53
|
+
className: classnames('wp-block-file__button', __experimentalElementButtonClassName),
|
|
49
54
|
download: true,
|
|
50
55
|
"aria-describedby": describedById
|
|
51
56
|
}, createElement(RichText.Content, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/file/save.js"],"names":["RichText","useBlockProps","__","sprintf","save","attributes","href","fileId","fileName","textLinkHref","textLinkTarget","showDownloadButton","downloadButtonText","displayPreview","previewHeight","pdfEmbedLabel","isEmpty","hasFilename","describedById","undefined","width","height"],"mappings":";;AAAA;AACA;AACA;AACA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/file/save.js"],"names":["classnames","RichText","useBlockProps","__experimentalElementButtonClassName","__","sprintf","save","attributes","href","fileId","fileName","textLinkHref","textLinkTarget","showDownloadButton","downloadButtonText","displayPreview","previewHeight","pdfEmbedLabel","isEmpty","hasFilename","describedById","undefined","width","height"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SACCC,QADD,EAECC,aAFD,EAGCC,oCAHD,QAIO,yBAJP;AAKA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AAEA,eAAe,SAASC,IAAT,OAAgC;AAAA,MAAjB;AAAEC,IAAAA;AAAF,GAAiB;AAC9C,QAAM;AACLC,IAAAA,IADK;AAELC,IAAAA,MAFK;AAGLC,IAAAA,QAHK;AAILC,IAAAA,YAJK;AAKLC,IAAAA,cALK;AAMLC,IAAAA,kBANK;AAOLC,IAAAA,kBAPK;AAQLC,IAAAA,cARK;AASLC,IAAAA;AATK,MAUFT,UAVJ;AAYA,QAAMU,aAAa,GAAGhB,QAAQ,CAACiB,OAAT,CAAkBR,QAAlB,IACnBN,EAAE,CAAE,WAAF,CADiB,GAEnBC,OAAO;AACP;AACAD,EAAAA,EAAE,CAAE,cAAF,CAFK,EAGPM,QAHO,CAFV;AAQA,QAAMS,WAAW,GAAG,CAAElB,QAAQ,CAACiB,OAAT,CAAkBR,QAAlB,CAAtB,CArB8C,CAuB9C;AACA;;AACA,QAAMU,aAAa,GAAGD,WAAW,GAAGV,MAAH,GAAYY,SAA7C;AAEA,SACCb,IAAI,IACH,qBAAUN,aAAa,CAACI,IAAd,EAAV,EACGS,cAAc,IACf,8BACC;AACC,IAAA,SAAS,EAAC,sBADX;AAEC,IAAA,IAAI,EAAGP,IAFR;AAGC,IAAA,IAAI,EAAC,iBAHN;AAIC,IAAA,KAAK,EAAG;AACPc,MAAAA,KAAK,EAAE,MADA;AAEPC,MAAAA,MAAM,EAAG,GAAGP,aAAe;AAFpB,KAJT;AAQC,kBAAaC;AARd,IADD,CAFF,EAeGE,WAAW,IACZ;AACC,IAAA,EAAE,EAAGC,aADN;AAEC,IAAA,IAAI,EAAGT,YAFR;AAGC,IAAA,MAAM,EAAGC,cAHV;AAIC,IAAA,GAAG,EACFA,cAAc,GAAG,qBAAH,GAA2BS;AAL3C,KAQC,cAAC,QAAD,CAAU,OAAV;AAAkB,IAAA,KAAK,EAAGX;AAA1B,IARD,CAhBF,EA2BGG,kBAAkB,IACnB;AACC,IAAA,IAAI,EAAGL,IADR;AAEC,IAAA,SAAS,EAAGR,UAAU,CACrB,uBADqB,EAErBG,oCAFqB,CAFvB;AAMC,IAAA,QAAQ,EAAG,IANZ;AAOC,wBAAmBiB;AAPpB,KASC,cAAC,QAAD,CAAU,OAAV;AAAkB,IAAA,KAAK,EAAGN;AAA1B,IATD,CA5BF,CAFF;AA6CA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalElementButtonClassName,\n} from '@wordpress/block-editor';\nimport { __, sprintf } from '@wordpress/i18n';\n\nexport default function save( { attributes } ) {\n\tconst {\n\t\thref,\n\t\tfileId,\n\t\tfileName,\n\t\ttextLinkHref,\n\t\ttextLinkTarget,\n\t\tshowDownloadButton,\n\t\tdownloadButtonText,\n\t\tdisplayPreview,\n\t\tpreviewHeight,\n\t} = attributes;\n\n\tconst pdfEmbedLabel = RichText.isEmpty( fileName )\n\t\t? __( 'PDF embed' )\n\t\t: sprintf(\n\t\t\t\t/* translators: %s: filename. */\n\t\t\t\t__( 'Embed of %s.' ),\n\t\t\t\tfileName\n\t\t );\n\n\tconst hasFilename = ! RichText.isEmpty( fileName );\n\n\t// Only output an `aria-describedby` when the element it's referring to is\n\t// actually rendered.\n\tconst describedById = hasFilename ? fileId : undefined;\n\n\treturn (\n\t\thref && (\n\t\t\t<div { ...useBlockProps.save() }>\n\t\t\t\t{ displayPreview && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<object\n\t\t\t\t\t\t\tclassName=\"wp-block-file__embed\"\n\t\t\t\t\t\t\tdata={ href }\n\t\t\t\t\t\t\ttype=\"application/pdf\"\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: `${ previewHeight }px`,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\taria-label={ pdfEmbedLabel }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t{ hasFilename && (\n\t\t\t\t\t<a\n\t\t\t\t\t\tid={ describedById }\n\t\t\t\t\t\thref={ textLinkHref }\n\t\t\t\t\t\ttarget={ textLinkTarget }\n\t\t\t\t\t\trel={\n\t\t\t\t\t\t\ttextLinkTarget ? 'noreferrer noopener' : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RichText.Content value={ fileName } />\n\t\t\t\t\t</a>\n\t\t\t\t) }\n\t\t\t\t{ showDownloadButton && (\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={ href }\n\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t'wp-block-file__button',\n\t\t\t\t\t\t\t__experimentalElementButtonClassName\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tdownload={ true }\n\t\t\t\t\t\taria-describedby={ describedById }\n\t\t\t\t\t>\n\t\t\t\t\t\t<RichText.Content value={ downloadButtonText } />\n\t\t\t\t\t</a>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t)\n\t);\n}\n"]}
|
|
@@ -13,10 +13,20 @@ export default function GapStyles(_ref) {
|
|
|
13
13
|
const styleElement = useContext(BlockList.__unstableElementContext); // --gallery-block--gutter-size is deprecated. --wp--style--gallery-gap-default should be used by themes that want to set a default
|
|
14
14
|
// gap on the gallery.
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
const fallbackValue = `var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) )`;
|
|
17
|
+
let gapValue = fallbackValue;
|
|
18
|
+
let column = fallbackValue;
|
|
19
|
+
let row; // Check for the possibility of split block gap values. See: https://github.com/WordPress/gutenberg/pull/37736
|
|
20
|
+
|
|
21
|
+
if (!!blockGap) {
|
|
22
|
+
row = typeof blockGap === 'string' ? blockGap : (blockGap === null || blockGap === void 0 ? void 0 : blockGap.top) || fallbackValue;
|
|
23
|
+
column = typeof blockGap === 'string' ? blockGap : (blockGap === null || blockGap === void 0 ? void 0 : blockGap.left) || fallbackValue;
|
|
24
|
+
gapValue = row === column ? row : `${row} ${column}`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const gap = `#block-${clientId} {
|
|
28
|
+
--wp--style--unstable-gallery-gap: ${column};
|
|
29
|
+
gap: ${gapValue}
|
|
20
30
|
}`;
|
|
21
31
|
|
|
22
32
|
const GapStyle = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/gallery/gap-styles.js"],"names":["BlockList","useContext","createPortal","GapStyles","blockGap","clientId","styleElement","__unstableElementContext","gapValue","gap","GapStyle"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,yBAA1B;AACA,SAASC,UAAT,EAAqBC,YAArB,QAAyC,oBAAzC;AAEA,eAAe,SAASC,SAAT,OAA6C;AAAA,MAAzB;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAyB;AAC3D,QAAMC,YAAY,GAAGL,UAAU,CAAED,SAAS,CAACO,wBAAZ,CAA/B,CAD2D,CAE3D;AACA;;AACA,QAAMC,QAAQ,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/gallery/gap-styles.js"],"names":["BlockList","useContext","createPortal","GapStyles","blockGap","clientId","styleElement","__unstableElementContext","fallbackValue","gapValue","column","row","top","left","gap","GapStyle"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,yBAA1B;AACA,SAASC,UAAT,EAAqBC,YAArB,QAAyC,oBAAzC;AAEA,eAAe,SAASC,SAAT,OAA6C;AAAA,MAAzB;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAyB;AAC3D,QAAMC,YAAY,GAAGL,UAAU,CAAED,SAAS,CAACO,wBAAZ,CAA/B,CAD2D,CAE3D;AACA;;AACA,QAAMC,aAAa,GAAI,oHAAvB;AACA,MAAIC,QAAQ,GAAGD,aAAf;AACA,MAAIE,MAAM,GAAGF,aAAb;AACA,MAAIG,GAAJ,CAP2D,CAS3D;;AACA,MAAK,CAAC,CAAEP,QAAR,EAAmB;AAClBO,IAAAA,GAAG,GACF,OAAOP,QAAP,KAAoB,QAApB,GACGA,QADH,GAEG,CAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEQ,GAAV,KAAiBJ,aAHrB;AAIAE,IAAAA,MAAM,GACL,OAAON,QAAP,KAAoB,QAApB,GACGA,QADH,GAEG,CAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAES,IAAV,KAAkBL,aAHtB;AAIAC,IAAAA,QAAQ,GAAGE,GAAG,KAAKD,MAAR,GAAiBC,GAAjB,GAAwB,GAAGA,GAAK,IAAID,MAAQ,EAAvD;AACA;;AAED,QAAMI,GAAG,GAAI,UAAUT,QAAU;AAClC,uCAAwCK,MAAQ;AAChD,SAAUD,QAAU;AACpB,GAHC;;AAKA,QAAMM,QAAQ,GAAG,MAAM;AACtB,WAAO,6BAASD,GAAT,CAAP;AACA,GAFD;;AAIA,SAAOA,GAAG,IAAIR,YAAP,GACJJ,YAAY,CAAE,cAAC,QAAD,OAAF,EAAgBI,YAAhB,CADR,GAEJ,IAFH;AAGA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { BlockList } from '@wordpress/block-editor';\nimport { useContext, createPortal } from '@wordpress/element';\n\nexport default function GapStyles( { blockGap, clientId } ) {\n\tconst styleElement = useContext( BlockList.__unstableElementContext );\n\t// --gallery-block--gutter-size is deprecated. --wp--style--gallery-gap-default should be used by themes that want to set a default\n\t// gap on the gallery.\n\tconst fallbackValue = `var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) )`;\n\tlet gapValue = fallbackValue;\n\tlet column = fallbackValue;\n\tlet row;\n\n\t// Check for the possibility of split block gap values. See: https://github.com/WordPress/gutenberg/pull/37736\n\tif ( !! blockGap ) {\n\t\trow =\n\t\t\ttypeof blockGap === 'string'\n\t\t\t\t? blockGap\n\t\t\t\t: blockGap?.top || fallbackValue;\n\t\tcolumn =\n\t\t\ttypeof blockGap === 'string'\n\t\t\t\t? blockGap\n\t\t\t\t: blockGap?.left || fallbackValue;\n\t\tgapValue = row === column ? row : `${ row } ${ column }`;\n\t}\n\n\tconst gap = `#block-${ clientId } {\n\t\t--wp--style--unstable-gallery-gap: ${ column };\n\t\tgap: ${ gapValue }\n\t}`;\n\n\tconst GapStyle = () => {\n\t\treturn <style>{ gap }</style>;\n\t};\n\n\treturn gap && styleElement\n\t\t? createPortal( <GapStyle />, styleElement )\n\t\t: null;\n}\n"]}
|
|
@@ -120,7 +120,7 @@ const metadata = {
|
|
|
120
120
|
html: false,
|
|
121
121
|
units: ["px", "em", "rem", "vh", "vw"],
|
|
122
122
|
spacing: {
|
|
123
|
-
blockGap:
|
|
123
|
+
blockGap: ["horizontal", "vertical"],
|
|
124
124
|
__experimentalSkipSerialization: ["blockGap"],
|
|
125
125
|
__experimentalDefaultControls: {
|
|
126
126
|
blockGap: true
|
|
@@ -14,7 +14,7 @@ import { withNotices } from '@wordpress/components';
|
|
|
14
14
|
import { useSelect } from '@wordpress/data';
|
|
15
15
|
import { BlockAlignmentControl, BlockControls, BlockIcon, MediaPlaceholder, useBlockProps, store as blockEditorStore } from '@wordpress/block-editor';
|
|
16
16
|
import { useEffect, useRef, useState } from '@wordpress/element';
|
|
17
|
-
import { __
|
|
17
|
+
import { __ } from '@wordpress/i18n';
|
|
18
18
|
import { image as icon } from '@wordpress/icons';
|
|
19
19
|
/**
|
|
20
20
|
* Internal dependencies
|
|
@@ -67,23 +67,7 @@ export const isExternalImage = (id, url) => url && !id && !isBlobURL(url);
|
|
|
67
67
|
function hasDefaultSize(image, defaultSize) {
|
|
68
68
|
return has(image, ['sizes', defaultSize, 'url']) || has(image, ['media_details', 'sizes', defaultSize, 'source_url']);
|
|
69
69
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Checks if a media attachment object has been "destroyed",
|
|
72
|
-
* that is, removed from the media library. The core Media Library
|
|
73
|
-
* adds a `destroyed` property to a deleted attachment object in the media collection.
|
|
74
|
-
*
|
|
75
|
-
* @param {number} id The attachment id.
|
|
76
|
-
*
|
|
77
|
-
* @return {boolean} Whether the image has been destroyed.
|
|
78
|
-
*/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
export function isMediaDestroyed(id) {
|
|
82
|
-
var _window, _window$wp, _window$wp$media;
|
|
83
70
|
|
|
84
|
-
const attachment = ((_window = window) === null || _window === void 0 ? void 0 : (_window$wp = _window.wp) === null || _window$wp === void 0 ? void 0 : (_window$wp$media = _window$wp.media) === null || _window$wp$media === void 0 ? void 0 : _window$wp$media.attachment(id)) || {};
|
|
85
|
-
return attachment.destroyed;
|
|
86
|
-
}
|
|
87
71
|
export function ImageEdit(_ref) {
|
|
88
72
|
let {
|
|
89
73
|
attributes,
|
|
@@ -125,39 +109,7 @@ export function ImageEdit(_ref) {
|
|
|
125
109
|
getSettings
|
|
126
110
|
} = select(blockEditorStore);
|
|
127
111
|
return pick(getSettings(), ['imageDefaultSize', 'mediaUpload']);
|
|
128
|
-
}, []);
|
|
129
|
-
// fired when the media modal closes.
|
|
130
|
-
|
|
131
|
-
function onCloseModal() {
|
|
132
|
-
if (isMediaDestroyed(attributes === null || attributes === void 0 ? void 0 : attributes.id)) {
|
|
133
|
-
setAttributes({
|
|
134
|
-
url: undefined,
|
|
135
|
-
id: undefined
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/*
|
|
140
|
-
Runs an error callback if the image does not load.
|
|
141
|
-
If the error callback is triggered, we infer that that image
|
|
142
|
-
has been deleted.
|
|
143
|
-
*/
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
function onImageError() {
|
|
147
|
-
let isReplaced = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
148
|
-
noticeOperations.removeAllNotices();
|
|
149
|
-
noticeOperations.createErrorNotice(sprintf(
|
|
150
|
-
/* translators: %s url or missing image */
|
|
151
|
-
__('Error loading image: %s'), url)); // If the image block was not replaced with an embed,
|
|
152
|
-
// clear the attributes and trigger the placeholder.
|
|
153
|
-
|
|
154
|
-
if (!isReplaced) {
|
|
155
|
-
setAttributes({
|
|
156
|
-
url: undefined,
|
|
157
|
-
id: undefined
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
112
|
+
}, []);
|
|
161
113
|
|
|
162
114
|
function onUploadError(message) {
|
|
163
115
|
noticeOperations.removeAllNotices();
|
|
@@ -171,7 +123,7 @@ export function ImageEdit(_ref) {
|
|
|
171
123
|
}
|
|
172
124
|
|
|
173
125
|
function onSelectImage(media) {
|
|
174
|
-
var
|
|
126
|
+
var _window, _window$wp, _window$wp$media, _window$wp$media$view, _window$wp$media$view2, _window$wp$media$view3;
|
|
175
127
|
|
|
176
128
|
if (!media || !media.url) {
|
|
177
129
|
setAttributes({
|
|
@@ -222,7 +174,7 @@ export function ImageEdit(_ref) {
|
|
|
222
174
|
// Use the WordPress option to determine the proper default.
|
|
223
175
|
// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.
|
|
224
176
|
// TODO: fix this in a follow up PR, requires updating media-text and ui component.
|
|
225
|
-
switch (((
|
|
177
|
+
switch (((_window = window) === null || _window === void 0 ? void 0 : (_window$wp = _window.wp) === null || _window$wp === void 0 ? void 0 : (_window$wp$media = _window$wp.media) === null || _window$wp$media === void 0 ? void 0 : (_window$wp$media$view = _window$wp$media.view) === null || _window$wp$media$view === void 0 ? void 0 : (_window$wp$media$view2 = _window$wp$media$view.settings) === null || _window$wp$media$view2 === void 0 ? void 0 : (_window$wp$media$view3 = _window$wp$media$view2.defaultProps) === null || _window$wp$media$view3 === void 0 ? void 0 : _window$wp$media$view3.link) || LINK_DESTINATION_NONE) {
|
|
226
178
|
case 'file':
|
|
227
179
|
case LINK_DESTINATION_MEDIA:
|
|
228
180
|
linkDestination = LINK_DESTINATION_MEDIA;
|
|
@@ -348,9 +300,7 @@ export function ImageEdit(_ref) {
|
|
|
348
300
|
onUploadError: onUploadError,
|
|
349
301
|
containerRef: ref,
|
|
350
302
|
context: context,
|
|
351
|
-
clientId: clientId
|
|
352
|
-
onCloseModal: onCloseModal,
|
|
353
|
-
onImageLoadError: onImageError
|
|
303
|
+
clientId: clientId
|
|
354
304
|
}), !url && createElement(BlockControls, {
|
|
355
305
|
group: "block"
|
|
356
306
|
}, createElement(BlockAlignmentControl, {
|
|
@@ -364,7 +314,6 @@ export function ImageEdit(_ref) {
|
|
|
364
314
|
onSelectURL: onSelectURL,
|
|
365
315
|
notices: noticeUI,
|
|
366
316
|
onError: onUploadError,
|
|
367
|
-
onClose: onCloseModal,
|
|
368
317
|
accept: "image/*",
|
|
369
318
|
allowedTypes: ALLOWED_MEDIA_TYPES,
|
|
370
319
|
value: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/edit.js"],"names":["classnames","get","has","omit","pick","getBlobByURL","isBlobURL","revokeBlobURL","withNotices","useSelect","BlockAlignmentControl","BlockControls","BlockIcon","MediaPlaceholder","useBlockProps","store","blockEditorStore","useEffect","useRef","useState","__","sprintf","image","icon","Image","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","pickRelevantMediaFiles","size","imageProps","url","isTemporaryImage","id","isExternalImage","hasDefaultSize","defaultSize","isMediaDestroyed","attachment","window","wp","media","destroyed","ImageEdit","attributes","setAttributes","isSelected","className","noticeUI","insertBlocksAfter","noticeOperations","onReplace","context","clientId","alt","caption","align","width","height","sizeSlug","temporaryURL","setTemporaryURL","altRef","current","captionRef","ref","imageDefaultSize","mediaUpload","select","getSettings","onCloseModal","undefined","onImageError","isReplaced","removeAllNotices","createErrorNotice","onUploadError","message","src","onSelectImage","title","mediaAttributes","additionalAttributes","linkDestination","view","settings","defaultProps","link","href","onSelectURL","newURL","updateAlignment","nextAlign","extraUpdatedAttributes","includes","isTemp","file","filesList","onFileChange","img","allowedTypes","onError","isExternal","mediaPreview","classes","blockProps"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { get, has, omit, pick } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { withNotices } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tBlockAlignmentControl,\n\tBlockControls,\n\tBlockIcon,\n\tMediaPlaceholder,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { image as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport Image from './image';\n\n/**\n * Module constants\n */\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tALLOWED_MEDIA_TYPES,\n} from './constants';\n\nexport const pickRelevantMediaFiles = ( image, size ) => {\n\tconst imageProps = pick( image, [ 'alt', 'id', 'link', 'caption' ] );\n\timageProps.url =\n\t\tget( image, [ 'sizes', size, 'url' ] ) ||\n\t\tget( image, [ 'media_details', 'sizes', size, 'source_url' ] ) ||\n\t\timage.url;\n\treturn imageProps;\n};\n\n/**\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\n * while the image is being uploaded and will not have an id yet allocated.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the URL a Blob URL\n */\nconst isTemporaryImage = ( id, url ) => ! id && isBlobURL( url );\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no\n * id and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nexport const isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\n/**\n * Checks if WP generated default image size. Size generation is skipped\n * when the image is smaller than the said size.\n *\n * @param {Object} image\n * @param {string} defaultSize\n *\n * @return {boolean} Whether or not it has default image size.\n */\nfunction hasDefaultSize( image, defaultSize ) {\n\treturn (\n\t\thas( image, [ 'sizes', defaultSize, 'url' ] ) ||\n\t\thas( image, [ 'media_details', 'sizes', defaultSize, 'source_url' ] )\n\t);\n}\n\n/**\n * Checks if a media attachment object has been \"destroyed\",\n * that is, removed from the media library. The core Media Library\n * adds a `destroyed` property to a deleted attachment object in the media collection.\n *\n * @param {number} id The attachment id.\n *\n * @return {boolean} Whether the image has been destroyed.\n */\nexport function isMediaDestroyed( id ) {\n\tconst attachment = window?.wp?.media?.attachment( id ) || {};\n\treturn attachment.destroyed;\n}\n\nexport function ImageEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tclassName,\n\tnoticeUI,\n\tinsertBlocksAfter,\n\tnoticeOperations,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tsizeSlug,\n\t} = attributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState();\n\n\tconst altRef = useRef();\n\tuseEffect( () => {\n\t\taltRef.current = alt;\n\t}, [ alt ] );\n\n\tconst captionRef = useRef();\n\tuseEffect( () => {\n\t\tcaptionRef.current = caption;\n\t}, [ caption ] );\n\n\tconst ref = useRef();\n\tconst { imageDefaultSize, mediaUpload } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn pick( getSettings(), [ 'imageDefaultSize', 'mediaUpload' ] );\n\t}, [] );\n\n\t// A callback passed to MediaUpload,\n\t// fired when the media modal closes.\n\tfunction onCloseModal() {\n\t\tif ( isMediaDestroyed( attributes?.id ) ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\tid: undefined,\n\t\t\t} );\n\t\t}\n\t}\n\n\t/*\n\t\t Runs an error callback if the image does not load.\n\t\t If the error callback is triggered, we infer that that image\n\t\t has been deleted.\n\t*/\n\tfunction onImageError( isReplaced = false ) {\n\t\tnoticeOperations.removeAllNotices();\n\t\tnoticeOperations.createErrorNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s url or missing image */\n\t\t\t\t__( 'Error loading image: %s' ),\n\t\t\t\turl\n\t\t\t)\n\t\t);\n\t\t// If the image block was not replaced with an embed,\n\t\t// clear the attributes and trigger the placeholder.\n\t\tif ( ! isReplaced ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\tid: undefined,\n\t\t\t} );\n\t\t}\n\t}\n\n\tfunction onUploadError( message ) {\n\t\tnoticeOperations.removeAllNotices();\n\t\tnoticeOperations.createErrorNotice( message );\n\t\tsetAttributes( {\n\t\t\tsrc: undefined,\n\t\t\tid: undefined,\n\t\t\turl: undefined,\n\t\t} );\n\t\tsetTemporaryURL( undefined );\n\t}\n\n\tfunction onSelectImage( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tsetTemporaryURL();\n\n\t\tlet mediaAttributes = pickRelevantMediaFiles( media, imageDefaultSize );\n\n\t\t// If a caption text was meanwhile written by the user,\n\t\t// make sure the text is not overwritten by empty captions.\n\t\tif ( captionRef.current && ! get( mediaAttributes, [ 'caption' ] ) ) {\n\t\t\tmediaAttributes = omit( mediaAttributes, [ 'caption' ] );\n\t\t}\n\n\t\tlet additionalAttributes;\n\t\t// Reset the dimension attributes if changing to a different image.\n\t\tif ( ! media.id || media.id !== id ) {\n\t\t\tadditionalAttributes = {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\t// Fallback to size \"full\" if there's no default image size.\n\t\t\t\t// It means the image is smaller, and the block will use a full-size URL.\n\t\t\t\tsizeSlug: hasDefaultSize( media, imageDefaultSize )\n\t\t\t\t\t? imageDefaultSize\n\t\t\t\t\t: 'full',\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Image Size\"\n\t\t\t// option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\t// Check if default link setting should be used.\n\t\tlet linkDestination = attributes.linkDestination;\n\t\tif ( ! linkDestination ) {\n\t\t\t// Use the WordPress option to determine the proper default.\n\t\t\t// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.\n\t\t\t// TODO: fix this in a follow up PR, requires updating media-text and ui component.\n\t\t\tswitch (\n\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\tLINK_DESTINATION_NONE\n\t\t\t) {\n\t\t\t\tcase 'file':\n\t\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'post':\n\t\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_NONE:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check if the image is linked to it's media.\n\t\tlet href;\n\t\tswitch ( linkDestination ) {\n\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\thref = media.url;\n\t\t\t\tbreak;\n\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\thref = media.link;\n\t\t\t\tbreak;\n\t\t}\n\t\tmediaAttributes.href = href;\n\n\t\tsetAttributes( {\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t\tlinkDestination,\n\t\t} );\n\t}\n\n\tfunction onSelectURL( newURL ) {\n\t\tif ( newURL !== url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: newURL,\n\t\t\t\tid: undefined,\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\tsizeSlug: imageDefaultSize,\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\tlet isTemp = isTemporaryImage( id, url );\n\n\t// Upload a temporary image on mount.\n\tuseEffect( () => {\n\t\tif ( ! isTemp ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = getBlobByURL( url );\n\n\t\tif ( file ) {\n\t\t\tmediaUpload( {\n\t\t\t\tfilesList: [ file ],\n\t\t\t\tonFileChange: ( [ img ] ) => {\n\t\t\t\t\tonSelectImage( img );\n\t\t\t\t},\n\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\tonError: ( message ) => {\n\t\t\t\t\tisTemp = false;\n\t\t\t\t\tonUploadError( message );\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\t// If an image is temporary, revoke the Blob url when it is uploaded (and is\n\t// no longer temporary).\n\tuseEffect( () => {\n\t\tif ( isTemp ) {\n\t\t\tsetTemporaryURL( url );\n\t\t\treturn;\n\t\t}\n\t\trevokeBlobURL( temporaryURL );\n\t}, [ isTemp, url ] );\n\n\tconst isExternal = isExternalImage( id, url );\n\tconst src = isExternal ? url : undefined;\n\tconst mediaPreview = !! url && (\n\t\t<img\n\t\t\talt={ __( 'Edit image' ) }\n\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\tclassName={ 'edit-image-preview' }\n\t\t\tsrc={ url }\n\t\t/>\n\t);\n\n\tconst classes = classnames( className, {\n\t\t'is-transient': temporaryURL,\n\t\t'is-resized': !! width || !! height,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref,\n\t\tclassName: classes,\n\t} );\n\n\treturn (\n\t\t<figure { ...blockProps }>\n\t\t\t{ ( temporaryURL || url ) && (\n\t\t\t\t<Image\n\t\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\t\tcontainerRef={ ref }\n\t\t\t\t\tcontext={ context }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\tonCloseModal={ onCloseModal }\n\t\t\t\t\tonImageLoadError={ onImageError }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! url && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<MediaPlaceholder\n\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tnotices={ noticeUI }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tonClose={ onCloseModal }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvalue={ { id, src } }\n\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t/>\n\t\t</figure>\n\t);\n}\n\nexport default withNotices( ImageEdit );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/edit.js"],"names":["classnames","get","has","omit","pick","getBlobByURL","isBlobURL","revokeBlobURL","withNotices","useSelect","BlockAlignmentControl","BlockControls","BlockIcon","MediaPlaceholder","useBlockProps","store","blockEditorStore","useEffect","useRef","useState","__","image","icon","Image","LINK_DESTINATION_ATTACHMENT","LINK_DESTINATION_CUSTOM","LINK_DESTINATION_MEDIA","LINK_DESTINATION_NONE","ALLOWED_MEDIA_TYPES","pickRelevantMediaFiles","size","imageProps","url","isTemporaryImage","id","isExternalImage","hasDefaultSize","defaultSize","ImageEdit","attributes","setAttributes","isSelected","className","noticeUI","insertBlocksAfter","noticeOperations","onReplace","context","clientId","alt","caption","align","width","height","sizeSlug","temporaryURL","setTemporaryURL","altRef","current","captionRef","ref","imageDefaultSize","mediaUpload","select","getSettings","onUploadError","message","removeAllNotices","createErrorNotice","src","undefined","onSelectImage","media","title","mediaAttributes","additionalAttributes","linkDestination","window","wp","view","settings","defaultProps","link","href","onSelectURL","newURL","updateAlignment","nextAlign","extraUpdatedAttributes","includes","isTemp","file","filesList","onFileChange","img","allowedTypes","onError","isExternal","mediaPreview","classes","blockProps"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,GAAT,EAAcC,GAAd,EAAmBC,IAAnB,EAAyBC,IAAzB,QAAqC,QAArC;AAEA;AACA;AACA;;AACA,SAASC,YAAT,EAAuBC,SAAvB,EAAkCC,aAAlC,QAAuD,iBAAvD;AACA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SACCC,qBADD,EAECC,aAFD,EAGCC,SAHD,EAICC,gBAJD,EAKCC,aALD,EAMCC,KAAK,IAAIC,gBANV,QAOO,yBAPP;AAQA,SAASC,SAAT,EAAoBC,MAApB,EAA4BC,QAA5B,QAA4C,oBAA5C;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,KAAK,IAAIC,IAAlB,QAA8B,kBAA9B;AAEA;AACA;AACA;;AACA,OAAOC,KAAP,MAAkB,SAAlB;AAEA;AACA;AACA;;AACA,SACCC,2BADD,EAECC,uBAFD,EAGCC,sBAHD,EAICC,qBAJD,EAKCC,mBALD,QAMO,aANP;AAQA,OAAO,MAAMC,sBAAsB,GAAG,CAAER,KAAF,EAASS,IAAT,KAAmB;AACxD,QAAMC,UAAU,GAAG3B,IAAI,CAAEiB,KAAF,EAAS,CAAE,KAAF,EAAS,IAAT,EAAe,MAAf,EAAuB,SAAvB,CAAT,CAAvB;AACAU,EAAAA,UAAU,CAACC,GAAX,GACC/B,GAAG,CAAEoB,KAAF,EAAS,CAAE,OAAF,EAAWS,IAAX,EAAiB,KAAjB,CAAT,CAAH,IACA7B,GAAG,CAAEoB,KAAF,EAAS,CAAE,eAAF,EAAmB,OAAnB,EAA4BS,IAA5B,EAAkC,YAAlC,CAAT,CADH,IAEAT,KAAK,CAACW,GAHP;AAIA,SAAOD,UAAP;AACA,CAPM;AASP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAME,gBAAgB,GAAG,CAAEC,EAAF,EAAMF,GAAN,KAAe,CAAEE,EAAF,IAAQ5B,SAAS,CAAE0B,GAAF,CAAzD;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,MAAMG,eAAe,GAAG,CAAED,EAAF,EAAMF,GAAN,KAAeA,GAAG,IAAI,CAAEE,EAAT,IAAe,CAAE5B,SAAS,CAAE0B,GAAF,CAAjE;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASI,cAAT,CAAyBf,KAAzB,EAAgCgB,WAAhC,EAA8C;AAC7C,SACCnC,GAAG,CAAEmB,KAAF,EAAS,CAAE,OAAF,EAAWgB,WAAX,EAAwB,KAAxB,CAAT,CAAH,IACAnC,GAAG,CAAEmB,KAAF,EAAS,CAAE,eAAF,EAAmB,OAAnB,EAA4BgB,WAA5B,EAAyC,YAAzC,CAAT,CAFJ;AAIA;;AAED,OAAO,SAASC,SAAT,OAWH;AAAA,MAXuB;AAC1BC,IAAAA,UAD0B;AAE1BC,IAAAA,aAF0B;AAG1BC,IAAAA,UAH0B;AAI1BC,IAAAA,SAJ0B;AAK1BC,IAAAA,QAL0B;AAM1BC,IAAAA,iBAN0B;AAO1BC,IAAAA,gBAP0B;AAQ1BC,IAAAA,SAR0B;AAS1BC,IAAAA,OAT0B;AAU1BC,IAAAA;AAV0B,GAWvB;AACH,QAAM;AACLhB,IAAAA,GAAG,GAAG,EADD;AAELiB,IAAAA,GAFK;AAGLC,IAAAA,OAHK;AAILC,IAAAA,KAJK;AAKLjB,IAAAA,EALK;AAMLkB,IAAAA,KANK;AAOLC,IAAAA,MAPK;AAQLC,IAAAA;AARK,MASFf,UATJ;AAUA,QAAM,CAAEgB,YAAF,EAAgBC,eAAhB,IAAoCrC,QAAQ,EAAlD;AAEA,QAAMsC,MAAM,GAAGvC,MAAM,EAArB;AACAD,EAAAA,SAAS,CAAE,MAAM;AAChBwC,IAAAA,MAAM,CAACC,OAAP,GAAiBT,GAAjB;AACA,GAFQ,EAEN,CAAEA,GAAF,CAFM,CAAT;AAIA,QAAMU,UAAU,GAAGzC,MAAM,EAAzB;AACAD,EAAAA,SAAS,CAAE,MAAM;AAChB0C,IAAAA,UAAU,CAACD,OAAX,GAAqBR,OAArB;AACA,GAFQ,EAEN,CAAEA,OAAF,CAFM,CAAT;AAIA,QAAMU,GAAG,GAAG1C,MAAM,EAAlB;AACA,QAAM;AAAE2C,IAAAA,gBAAF;AAAoBC,IAAAA;AAApB,MAAoCrD,SAAS,CAAIsD,MAAF,IAAc;AAClE,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAM,CAAE/C,gBAAF,CAA9B;AACA,WAAOZ,IAAI,CAAE4D,WAAW,EAAb,EAAiB,CAAE,kBAAF,EAAsB,aAAtB,CAAjB,CAAX;AACA,GAHkD,EAGhD,EAHgD,CAAnD;;AAKA,WAASC,aAAT,CAAwBC,OAAxB,EAAkC;AACjCrB,IAAAA,gBAAgB,CAACsB,gBAAjB;AACAtB,IAAAA,gBAAgB,CAACuB,iBAAjB,CAAoCF,OAApC;AACA1B,IAAAA,aAAa,CAAE;AACd6B,MAAAA,GAAG,EAAEC,SADS;AAEdpC,MAAAA,EAAE,EAAEoC,SAFU;AAGdtC,MAAAA,GAAG,EAAEsC;AAHS,KAAF,CAAb;AAKAd,IAAAA,eAAe,CAAEc,SAAF,CAAf;AACA;;AAED,WAASC,aAAT,CAAwBC,KAAxB,EAAgC;AAAA;;AAC/B,QAAK,CAAEA,KAAF,IAAW,CAAEA,KAAK,CAACxC,GAAxB,EAA8B;AAC7BQ,MAAAA,aAAa,CAAE;AACdR,QAAAA,GAAG,EAAEsC,SADS;AAEdrB,QAAAA,GAAG,EAAEqB,SAFS;AAGdpC,QAAAA,EAAE,EAAEoC,SAHU;AAIdG,QAAAA,KAAK,EAAEH,SAJO;AAKdpB,QAAAA,OAAO,EAAEoB;AALK,OAAF,CAAb;AAQA;AACA;;AAED,QAAKhE,SAAS,CAAEkE,KAAK,CAACxC,GAAR,CAAd,EAA8B;AAC7BwB,MAAAA,eAAe,CAAEgB,KAAK,CAACxC,GAAR,CAAf;AACA;AACA;;AAEDwB,IAAAA,eAAe;AAEf,QAAIkB,eAAe,GAAG7C,sBAAsB,CAAE2C,KAAF,EAASX,gBAAT,CAA5C,CApB+B,CAsB/B;AACA;;AACA,QAAKF,UAAU,CAACD,OAAX,IAAsB,CAAEzD,GAAG,CAAEyE,eAAF,EAAmB,CAAE,SAAF,CAAnB,CAAhC,EAAqE;AACpEA,MAAAA,eAAe,GAAGvE,IAAI,CAAEuE,eAAF,EAAmB,CAAE,SAAF,CAAnB,CAAtB;AACA;;AAED,QAAIC,oBAAJ,CA5B+B,CA6B/B;;AACA,QAAK,CAAEH,KAAK,CAACtC,EAAR,IAAcsC,KAAK,CAACtC,EAAN,KAAaA,EAAhC,EAAqC;AACpCyC,MAAAA,oBAAoB,GAAG;AACtBvB,QAAAA,KAAK,EAAEkB,SADe;AAEtBjB,QAAAA,MAAM,EAAEiB,SAFc;AAGtB;AACA;AACAhB,QAAAA,QAAQ,EAAElB,cAAc,CAAEoC,KAAF,EAASX,gBAAT,CAAd,GACPA,gBADO,GAEP;AAPmB,OAAvB;AASA,KAVD,MAUO;AACN;AACA;AACAc,MAAAA,oBAAoB,GAAG;AAAE3C,QAAAA;AAAF,OAAvB;AACA,KA5C8B,CA8C/B;;;AACA,QAAI4C,eAAe,GAAGrC,UAAU,CAACqC,eAAjC;;AACA,QAAK,CAAEA,eAAP,EAAyB;AACxB;AACA;AACA;AACA,cACC,YAAAC,MAAM,UAAN,wDAAQC,EAAR,8EAAYN,KAAZ,+FAAmBO,IAAnB,0GAAyBC,QAAzB,4GAAmCC,YAAnC,kFAAiDC,IAAjD,KACAvD,qBAFD;AAIC,aAAK,MAAL;AACA,aAAKD,sBAAL;AACCkD,UAAAA,eAAe,GAAGlD,sBAAlB;AACA;;AACD,aAAK,MAAL;AACA,aAAKF,2BAAL;AACCoD,UAAAA,eAAe,GAAGpD,2BAAlB;AACA;;AACD,aAAKC,uBAAL;AACCmD,UAAAA,eAAe,GAAGnD,uBAAlB;AACA;;AACD,aAAKE,qBAAL;AACCiD,UAAAA,eAAe,GAAGjD,qBAAlB;AACA;AAjBF;AAmBA,KAvE8B,CAyE/B;;;AACA,QAAIwD,IAAJ;;AACA,YAASP,eAAT;AACC,WAAKlD,sBAAL;AACCyD,QAAAA,IAAI,GAAGX,KAAK,CAACxC,GAAb;AACA;;AACD,WAAKR,2BAAL;AACC2D,QAAAA,IAAI,GAAGX,KAAK,CAACU,IAAb;AACA;AANF;;AAQAR,IAAAA,eAAe,CAACS,IAAhB,GAAuBA,IAAvB;AAEA3C,IAAAA,aAAa,CAAE,EACd,GAAGkC,eADW;AAEd,SAAGC,oBAFW;AAGdC,MAAAA;AAHc,KAAF,CAAb;AAKA;;AAED,WAASQ,WAAT,CAAsBC,MAAtB,EAA+B;AAC9B,QAAKA,MAAM,KAAKrD,GAAhB,EAAsB;AACrBQ,MAAAA,aAAa,CAAE;AACdR,QAAAA,GAAG,EAAEqD,MADS;AAEdnD,QAAAA,EAAE,EAAEoC,SAFU;AAGdlB,QAAAA,KAAK,EAAEkB,SAHO;AAIdjB,QAAAA,MAAM,EAAEiB,SAJM;AAKdhB,QAAAA,QAAQ,EAAEO;AALI,OAAF,CAAb;AAOA;AACD;;AAED,WAASyB,eAAT,CAA0BC,SAA1B,EAAsC;AACrC,UAAMC,sBAAsB,GAAG,CAAE,MAAF,EAAU,MAAV,EAAmBC,QAAnB,CAA6BF,SAA7B,IAC5B;AAAEnC,MAAAA,KAAK,EAAEkB,SAAT;AAAoBjB,MAAAA,MAAM,EAAEiB;AAA5B,KAD4B,GAE5B,EAFH;AAGA9B,IAAAA,aAAa,CAAE,EACd,GAAGgD,sBADW;AAEdrC,MAAAA,KAAK,EAAEoC;AAFO,KAAF,CAAb;AAIA;;AAED,MAAIG,MAAM,GAAGzD,gBAAgB,CAAEC,EAAF,EAAMF,GAAN,CAA7B,CA1JG,CA4JH;;AACAf,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAK,CAAEyE,MAAP,EAAgB;AACf;AACA;;AAED,UAAMC,IAAI,GAAGtF,YAAY,CAAE2B,GAAF,CAAzB;;AAEA,QAAK2D,IAAL,EAAY;AACX7B,MAAAA,WAAW,CAAE;AACZ8B,QAAAA,SAAS,EAAE,CAAED,IAAF,CADC;AAEZE,QAAAA,YAAY,EAAE,SAAe;AAAA,cAAb,CAAEC,GAAF,CAAa;AAC5BvB,UAAAA,aAAa,CAAEuB,GAAF,CAAb;AACA,SAJW;AAKZC,QAAAA,YAAY,EAAEnE,mBALF;AAMZoE,QAAAA,OAAO,EAAI9B,OAAF,IAAe;AACvBwB,UAAAA,MAAM,GAAG,KAAT;AACAzB,UAAAA,aAAa,CAAEC,OAAF,CAAb;AACA;AATW,OAAF,CAAX;AAWA;AACD,GApBQ,EAoBN,EApBM,CAAT,CA7JG,CAmLH;AACA;;AACAjD,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAKyE,MAAL,EAAc;AACblC,MAAAA,eAAe,CAAExB,GAAF,CAAf;AACA;AACA;;AACDzB,IAAAA,aAAa,CAAEgD,YAAF,CAAb;AACA,GANQ,EAMN,CAAEmC,MAAF,EAAU1D,GAAV,CANM,CAAT;AAQA,QAAMiE,UAAU,GAAG9D,eAAe,CAAED,EAAF,EAAMF,GAAN,CAAlC;AACA,QAAMqC,GAAG,GAAG4B,UAAU,GAAGjE,GAAH,GAASsC,SAA/B;AACA,QAAM4B,YAAY,GAAG,CAAC,CAAElE,GAAH,IACpB;AACC,IAAA,GAAG,EAAGZ,EAAE,CAAE,YAAF,CADT;AAEC,IAAA,KAAK,EAAGA,EAAE,CAAE,YAAF,CAFX;AAGC,IAAA,SAAS,EAAG,oBAHb;AAIC,IAAA,GAAG,EAAGY;AAJP,IADD;AASA,QAAMmE,OAAO,GAAGnG,UAAU,CAAE0C,SAAF,EAAa;AACtC,oBAAgBa,YADsB;AAEtC,kBAAc,CAAC,CAAEH,KAAH,IAAY,CAAC,CAAEC,MAFS;AAGtC,KAAG,QAAQC,QAAU,EAArB,GAA0BA;AAHY,GAAb,CAA1B;AAMA,QAAM8C,UAAU,GAAGtF,aAAa,CAAE;AACjC8C,IAAAA,GADiC;AAEjClB,IAAAA,SAAS,EAAEyD;AAFsB,GAAF,CAAhC;AAKA,SACC,wBAAaC,UAAb,EACG,CAAE7C,YAAY,IAAIvB,GAAlB,KACD,cAAC,KAAD;AACC,IAAA,YAAY,EAAGuB,YADhB;AAEC,IAAA,UAAU,EAAGhB,UAFd;AAGC,IAAA,aAAa,EAAGC,aAHjB;AAIC,IAAA,UAAU,EAAGC,UAJd;AAKC,IAAA,iBAAiB,EAAGG,iBALrB;AAMC,IAAA,SAAS,EAAGE,SANb;AAOC,IAAA,aAAa,EAAGyB,aAPjB;AAQC,IAAA,WAAW,EAAGa,WARf;AASC,IAAA,aAAa,EAAGnB,aATjB;AAUC,IAAA,YAAY,EAAGL,GAVhB;AAWC,IAAA,OAAO,EAAGb,OAXX;AAYC,IAAA,QAAQ,EAAGC;AAZZ,IAFF,EAiBG,CAAEhB,GAAF,IACD,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC;AAArB,KACC,cAAC,qBAAD;AACC,IAAA,KAAK,EAAGmB,KADT;AAEC,IAAA,QAAQ,EAAGmC;AAFZ,IADD,CAlBF,EAyBC,cAAC,gBAAD;AACC,IAAA,IAAI,EAAG,cAAC,SAAD;AAAW,MAAA,IAAI,EAAGhE;AAAlB,MADR;AAEC,IAAA,QAAQ,EAAGiD,aAFZ;AAGC,IAAA,WAAW,EAAGa,WAHf;AAIC,IAAA,OAAO,EAAGzC,QAJX;AAKC,IAAA,OAAO,EAAGsB,aALX;AAMC,IAAA,MAAM,EAAC,SANR;AAOC,IAAA,YAAY,EAAGrC,mBAPhB;AAQC,IAAA,KAAK,EAAG;AAAEM,MAAAA,EAAF;AAAMmC,MAAAA;AAAN,KART;AASC,IAAA,YAAY,EAAG6B,YAThB;AAUC,IAAA,mBAAmB,EAAG3C,YAAY,IAAIvB;AAVvC,IAzBD,CADD;AAwCA;AAED,eAAexB,WAAW,CAAE8B,SAAF,CAA1B","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { get, has, omit, pick } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { withNotices } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tBlockAlignmentControl,\n\tBlockControls,\n\tBlockIcon,\n\tMediaPlaceholder,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useEffect, useRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { image as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport Image from './image';\n\n/**\n * Module constants\n */\nimport {\n\tLINK_DESTINATION_ATTACHMENT,\n\tLINK_DESTINATION_CUSTOM,\n\tLINK_DESTINATION_MEDIA,\n\tLINK_DESTINATION_NONE,\n\tALLOWED_MEDIA_TYPES,\n} from './constants';\n\nexport const pickRelevantMediaFiles = ( image, size ) => {\n\tconst imageProps = pick( image, [ 'alt', 'id', 'link', 'caption' ] );\n\timageProps.url =\n\t\tget( image, [ 'sizes', size, 'url' ] ) ||\n\t\tget( image, [ 'media_details', 'sizes', size, 'source_url' ] ) ||\n\t\timage.url;\n\treturn imageProps;\n};\n\n/**\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\n * while the image is being uploaded and will not have an id yet allocated.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the URL a Blob URL\n */\nconst isTemporaryImage = ( id, url ) => ! id && isBlobURL( url );\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no\n * id and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nexport const isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\n/**\n * Checks if WP generated default image size. Size generation is skipped\n * when the image is smaller than the said size.\n *\n * @param {Object} image\n * @param {string} defaultSize\n *\n * @return {boolean} Whether or not it has default image size.\n */\nfunction hasDefaultSize( image, defaultSize ) {\n\treturn (\n\t\thas( image, [ 'sizes', defaultSize, 'url' ] ) ||\n\t\thas( image, [ 'media_details', 'sizes', defaultSize, 'source_url' ] )\n\t);\n}\n\nexport function ImageEdit( {\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tclassName,\n\tnoticeUI,\n\tinsertBlocksAfter,\n\tnoticeOperations,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tsizeSlug,\n\t} = attributes;\n\tconst [ temporaryURL, setTemporaryURL ] = useState();\n\n\tconst altRef = useRef();\n\tuseEffect( () => {\n\t\taltRef.current = alt;\n\t}, [ alt ] );\n\n\tconst captionRef = useRef();\n\tuseEffect( () => {\n\t\tcaptionRef.current = caption;\n\t}, [ caption ] );\n\n\tconst ref = useRef();\n\tconst { imageDefaultSize, mediaUpload } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn pick( getSettings(), [ 'imageDefaultSize', 'mediaUpload' ] );\n\t}, [] );\n\n\tfunction onUploadError( message ) {\n\t\tnoticeOperations.removeAllNotices();\n\t\tnoticeOperations.createErrorNotice( message );\n\t\tsetAttributes( {\n\t\t\tsrc: undefined,\n\t\t\tid: undefined,\n\t\t\turl: undefined,\n\t\t} );\n\t\tsetTemporaryURL( undefined );\n\t}\n\n\tfunction onSelectImage( media ) {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\ttitle: undefined,\n\t\t\t\tcaption: undefined,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetTemporaryURL( media.url );\n\t\t\treturn;\n\t\t}\n\n\t\tsetTemporaryURL();\n\n\t\tlet mediaAttributes = pickRelevantMediaFiles( media, imageDefaultSize );\n\n\t\t// If a caption text was meanwhile written by the user,\n\t\t// make sure the text is not overwritten by empty captions.\n\t\tif ( captionRef.current && ! get( mediaAttributes, [ 'caption' ] ) ) {\n\t\t\tmediaAttributes = omit( mediaAttributes, [ 'caption' ] );\n\t\t}\n\n\t\tlet additionalAttributes;\n\t\t// Reset the dimension attributes if changing to a different image.\n\t\tif ( ! media.id || media.id !== id ) {\n\t\t\tadditionalAttributes = {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\t// Fallback to size \"full\" if there's no default image size.\n\t\t\t\t// It means the image is smaller, and the block will use a full-size URL.\n\t\t\t\tsizeSlug: hasDefaultSize( media, imageDefaultSize )\n\t\t\t\t\t? imageDefaultSize\n\t\t\t\t\t: 'full',\n\t\t\t};\n\t\t} else {\n\t\t\t// Keep the same url when selecting the same file, so \"Image Size\"\n\t\t\t// option is not changed.\n\t\t\tadditionalAttributes = { url };\n\t\t}\n\n\t\t// Check if default link setting should be used.\n\t\tlet linkDestination = attributes.linkDestination;\n\t\tif ( ! linkDestination ) {\n\t\t\t// Use the WordPress option to determine the proper default.\n\t\t\t// The constants used in Gutenberg do not match WP options so a little more complicated than ideal.\n\t\t\t// TODO: fix this in a follow up PR, requires updating media-text and ui component.\n\t\t\tswitch (\n\t\t\t\twindow?.wp?.media?.view?.settings?.defaultProps?.link ||\n\t\t\t\tLINK_DESTINATION_NONE\n\t\t\t) {\n\t\t\t\tcase 'file':\n\t\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_MEDIA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'post':\n\t\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_ATTACHMENT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_CUSTOM:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_CUSTOM;\n\t\t\t\t\tbreak;\n\t\t\t\tcase LINK_DESTINATION_NONE:\n\t\t\t\t\tlinkDestination = LINK_DESTINATION_NONE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check if the image is linked to it's media.\n\t\tlet href;\n\t\tswitch ( linkDestination ) {\n\t\t\tcase LINK_DESTINATION_MEDIA:\n\t\t\t\thref = media.url;\n\t\t\t\tbreak;\n\t\t\tcase LINK_DESTINATION_ATTACHMENT:\n\t\t\t\thref = media.link;\n\t\t\t\tbreak;\n\t\t}\n\t\tmediaAttributes.href = href;\n\n\t\tsetAttributes( {\n\t\t\t...mediaAttributes,\n\t\t\t...additionalAttributes,\n\t\t\tlinkDestination,\n\t\t} );\n\t}\n\n\tfunction onSelectURL( newURL ) {\n\t\tif ( newURL !== url ) {\n\t\t\tsetAttributes( {\n\t\t\t\turl: newURL,\n\t\t\t\tid: undefined,\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t\tsizeSlug: imageDefaultSize,\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\tlet isTemp = isTemporaryImage( id, url );\n\n\t// Upload a temporary image on mount.\n\tuseEffect( () => {\n\t\tif ( ! isTemp ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = getBlobByURL( url );\n\n\t\tif ( file ) {\n\t\t\tmediaUpload( {\n\t\t\t\tfilesList: [ file ],\n\t\t\t\tonFileChange: ( [ img ] ) => {\n\t\t\t\t\tonSelectImage( img );\n\t\t\t\t},\n\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\tonError: ( message ) => {\n\t\t\t\t\tisTemp = false;\n\t\t\t\t\tonUploadError( message );\n\t\t\t\t},\n\t\t\t} );\n\t\t}\n\t}, [] );\n\n\t// If an image is temporary, revoke the Blob url when it is uploaded (and is\n\t// no longer temporary).\n\tuseEffect( () => {\n\t\tif ( isTemp ) {\n\t\t\tsetTemporaryURL( url );\n\t\t\treturn;\n\t\t}\n\t\trevokeBlobURL( temporaryURL );\n\t}, [ isTemp, url ] );\n\n\tconst isExternal = isExternalImage( id, url );\n\tconst src = isExternal ? url : undefined;\n\tconst mediaPreview = !! url && (\n\t\t<img\n\t\t\talt={ __( 'Edit image' ) }\n\t\t\ttitle={ __( 'Edit image' ) }\n\t\t\tclassName={ 'edit-image-preview' }\n\t\t\tsrc={ url }\n\t\t/>\n\t);\n\n\tconst classes = classnames( className, {\n\t\t'is-transient': temporaryURL,\n\t\t'is-resized': !! width || !! height,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref,\n\t\tclassName: classes,\n\t} );\n\n\treturn (\n\t\t<figure { ...blockProps }>\n\t\t\t{ ( temporaryURL || url ) && (\n\t\t\t\t<Image\n\t\t\t\t\ttemporaryURL={ temporaryURL }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tinsertBlocksAfter={ insertBlocksAfter }\n\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\tonSelectImage={ onSelectImage }\n\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\tonUploadError={ onUploadError }\n\t\t\t\t\tcontainerRef={ ref }\n\t\t\t\t\tcontext={ context }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! url && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<MediaPlaceholder\n\t\t\t\ticon={ <BlockIcon icon={ icon } /> }\n\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\tnotices={ noticeUI }\n\t\t\t\tonError={ onUploadError }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvalue={ { id, src } }\n\t\t\t\tmediaPreview={ mediaPreview }\n\t\t\t\tdisableMediaButtons={ temporaryURL || url }\n\t\t\t/>\n\t\t</figure>\n\t);\n}\n\nexport default withNotices( ImageEdit );\n"]}
|
|
@@ -4,7 +4,7 @@ import { createElement, Fragment } from "@wordpress/element";
|
|
|
4
4
|
/**
|
|
5
5
|
* External dependencies
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { ActivityIndicator, Image as RNImage, TouchableWithoutFeedback, View } from 'react-native';
|
|
8
8
|
import { useRoute } from '@react-navigation/native';
|
|
9
9
|
/**
|
|
10
10
|
* WordPress dependencies
|
|
@@ -15,13 +15,14 @@ import { requestMediaImport, mediaUploadSync, requestImageFailedRetryDialog, req
|
|
|
15
15
|
import { Icon, PanelBody, ToolbarButton, ToolbarGroup, Image, WIDE_ALIGNMENTS, LinkSettingsNavigation, BottomSheet, BottomSheetTextControl, BottomSheetSelectControl, FooterMessageControl, FooterMessageLink, Badge } from '@wordpress/components';
|
|
16
16
|
import { BlockCaption, MediaPlaceholder, MediaUpload, MediaUploadProgress, MEDIA_TYPE_IMAGE, BlockControls, InspectorControls, BlockAlignmentToolbar, BlockStyles, store as blockEditorStore, blockSettingsScreens } from '@wordpress/block-editor';
|
|
17
17
|
import { __, _x, sprintf } from '@wordpress/i18n';
|
|
18
|
-
import { getProtocol, hasQueryArg } from '@wordpress/url';
|
|
18
|
+
import { getProtocol, hasQueryArg, isURL } from '@wordpress/url';
|
|
19
19
|
import { doAction, hasAction } from '@wordpress/hooks';
|
|
20
20
|
import { compose, withPreferredColorScheme } from '@wordpress/compose';
|
|
21
21
|
import { withSelect, withDispatch } from '@wordpress/data';
|
|
22
22
|
import { image as placeholderIcon, replace, fullscreen, textColor } from '@wordpress/icons';
|
|
23
23
|
import { store as coreStore } from '@wordpress/core-data';
|
|
24
24
|
import { store as editPostStore } from '@wordpress/edit-post';
|
|
25
|
+
import { store as noticesStore } from '@wordpress/notices';
|
|
25
26
|
/**
|
|
26
27
|
* Internal dependencies
|
|
27
28
|
*/
|
|
@@ -171,6 +172,7 @@ export class ImageEdit extends Component {
|
|
|
171
172
|
this.onImagePressed = this.onImagePressed.bind(this);
|
|
172
173
|
this.onSetFeatured = this.onSetFeatured.bind(this);
|
|
173
174
|
this.onFocusCaption = this.onFocusCaption.bind(this);
|
|
175
|
+
this.onSelectURL = this.onSelectURL.bind(this);
|
|
174
176
|
this.updateAlignment = this.updateAlignment.bind(this);
|
|
175
177
|
this.accessibilityLabelCreator = this.accessibilityLabelCreator.bind(this);
|
|
176
178
|
this.setMappedAttributes = this.setMappedAttributes.bind(this);
|
|
@@ -433,6 +435,40 @@ export class ImageEdit extends Component {
|
|
|
433
435
|
});
|
|
434
436
|
}
|
|
435
437
|
|
|
438
|
+
onSelectURL(newURL) {
|
|
439
|
+
const {
|
|
440
|
+
createErrorNotice,
|
|
441
|
+
imageDefaultSize,
|
|
442
|
+
setAttributes
|
|
443
|
+
} = this.props;
|
|
444
|
+
|
|
445
|
+
if (isURL(newURL)) {
|
|
446
|
+
this.setState({
|
|
447
|
+
isFetchingImage: true
|
|
448
|
+
}); // Use RN's Image.getSize to determine if URL is a valid image
|
|
449
|
+
|
|
450
|
+
RNImage.getSize(newURL, () => {
|
|
451
|
+
setAttributes({
|
|
452
|
+
url: newURL,
|
|
453
|
+
id: undefined,
|
|
454
|
+
width: undefined,
|
|
455
|
+
height: undefined,
|
|
456
|
+
sizeSlug: imageDefaultSize
|
|
457
|
+
});
|
|
458
|
+
this.setState({
|
|
459
|
+
isFetchingImage: false
|
|
460
|
+
});
|
|
461
|
+
}, () => {
|
|
462
|
+
createErrorNotice(__('Image file not found.'));
|
|
463
|
+
this.setState({
|
|
464
|
+
isFetchingImage: false
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
} else {
|
|
468
|
+
createErrorNotice(__('Invalid URL.'));
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
436
472
|
onFocusCaption() {
|
|
437
473
|
if (this.props.onFocus) {
|
|
438
474
|
this.props.onFocus();
|
|
@@ -451,6 +487,14 @@ export class ImageEdit extends Component {
|
|
|
451
487
|
}, this.props.getStylesFromColorScheme(styles.iconPlaceholder, styles.iconPlaceholderDark)));
|
|
452
488
|
}
|
|
453
489
|
|
|
490
|
+
showLoadingIndicator() {
|
|
491
|
+
return createElement(View, {
|
|
492
|
+
style: styles.image__loading
|
|
493
|
+
}, createElement(ActivityIndicator, {
|
|
494
|
+
animating: true
|
|
495
|
+
}));
|
|
496
|
+
}
|
|
497
|
+
|
|
454
498
|
getWidth() {
|
|
455
499
|
const {
|
|
456
500
|
attributes
|
|
@@ -570,7 +614,8 @@ export class ImageEdit extends Component {
|
|
|
570
614
|
|
|
571
615
|
render() {
|
|
572
616
|
const {
|
|
573
|
-
isCaptionSelected
|
|
617
|
+
isCaptionSelected,
|
|
618
|
+
isFetchingImage
|
|
574
619
|
} = this.state;
|
|
575
620
|
const {
|
|
576
621
|
attributes,
|
|
@@ -658,9 +703,10 @@ export class ImageEdit extends Component {
|
|
|
658
703
|
if (!url) {
|
|
659
704
|
return createElement(View, {
|
|
660
705
|
style: styles.content
|
|
661
|
-
}, createElement(MediaPlaceholder, {
|
|
706
|
+
}, isFetchingImage && this.showLoadingIndicator(), createElement(MediaPlaceholder, {
|
|
662
707
|
allowedTypes: [MEDIA_TYPE_IMAGE],
|
|
663
708
|
onSelect: this.onSelectMediaUploadOption,
|
|
709
|
+
onSelectURL: this.onSelectURL,
|
|
664
710
|
icon: this.getPlaceholderIcon(),
|
|
665
711
|
onFocus: this.props.onFocus,
|
|
666
712
|
autoOpenMediaUpload: isSelected && wasBlockJustInserted
|
|
@@ -713,7 +759,7 @@ export class ImageEdit extends Component {
|
|
|
713
759
|
} = _ref6;
|
|
714
760
|
return createElement(View, {
|
|
715
761
|
style: imageContainerStyles
|
|
716
|
-
}, createElement(Image, _extends({
|
|
762
|
+
}, isFetchingImage && this.showLoadingIndicator(), createElement(Image, _extends({
|
|
717
763
|
align: align && alignToFlex[align],
|
|
718
764
|
alt: alt,
|
|
719
765
|
isSelected: isSelected && !isCaptionSelected,
|
|
@@ -742,6 +788,7 @@ export class ImageEdit extends Component {
|
|
|
742
788
|
allowedTypes: [MEDIA_TYPE_IMAGE],
|
|
743
789
|
isReplacingMedia: true,
|
|
744
790
|
onSelect: this.onSelectMediaUploadOption,
|
|
791
|
+
onSelectURL: this.onSelectURL,
|
|
745
792
|
render: _ref7 => {
|
|
746
793
|
let {
|
|
747
794
|
open,
|
|
@@ -789,7 +836,12 @@ export default compose([withSelect((select, props) => {
|
|
|
789
836
|
wasBlockJustInserted: wasBlockJustInserted(clientId, 'inserter_menu')
|
|
790
837
|
};
|
|
791
838
|
}), withDispatch(dispatch => {
|
|
839
|
+
const {
|
|
840
|
+
createErrorNotice
|
|
841
|
+
} = dispatch(noticesStore);
|
|
792
842
|
return {
|
|
843
|
+
createErrorNotice,
|
|
844
|
+
|
|
793
845
|
closeSettingsBottomSheet() {
|
|
794
846
|
dispatch(editPostStore).closeGeneralSidebar();
|
|
795
847
|
}
|