UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 15.3 kB
{ "version": 3, "sources": ["../../src/file/edit.js"], "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\t__unstableGetAnimateClassName as getAnimateClassName,\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__experimentalGetElementClassName,\n} from '@wordpress/block-editor';\nimport { useEffect, useState } 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';\nimport { getFilename } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport FileBlockInspector from './inspector';\nimport { browserSupportsPdfs } from './utils';\nimport removeAnchorTag from '../utils/remove-anchor-tag';\nimport { useUploadMediaFromBlobURL } from '../utils/hooks';\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( { attributes, isSelected, setAttributes, clientId } ) {\n\tconst {\n\t\tid,\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 [ temporaryURL, setTemporaryURL ] = useState( attributes.blob );\n\tconst { media } = 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 ).getEntityRecord(\n\t\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t\t'attachment',\n\t\t\t\t\t\t\tid\n\t\t\t\t\t ),\n\t\t} ),\n\t\t[ id ]\n\t);\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst { toggleSelection, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseUploadMediaFromBlobURL( {\n\t\turl: temporaryURL,\n\t\tonChange: onSelectFile,\n\t\tonError: onUploadError,\n\t} );\n\n\t// Note: Handle setting a default value for `downloadButtonText` via HTML API\n\t// when it supports replacing text content for HTML tags.\n\tuseEffect( () => {\n\t\tif ( RichText.isEmpty( downloadButtonText ) ) {\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\tsetAttributes( {\n\t\t\t\tdownloadButtonText: _x( 'Download', 'button label' ),\n\t\t\t} );\n\t\t}\n\t\t// This effect should only run on mount.\n\t}, [] );\n\n\tfunction onSelectFile( newMedia ) {\n\t\tif ( ! newMedia || ! newMedia.url ) {\n\t\t\t// Reset attributes.\n\t\t\tsetAttributes( {\n\t\t\t\thref: undefined,\n\t\t\t\tfileName: undefined,\n\t\t\t\ttextLinkHref: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\tfileId: undefined,\n\t\t\t\tdisplayPreview: undefined,\n\t\t\t\tpreviewHeight: undefined,\n\t\t\t} );\n\t\t\tsetTemporaryURL();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( newMedia.url ) ) {\n\t\t\tsetTemporaryURL( newMedia.url );\n\t\t\treturn;\n\t\t}\n\n\t\tconst isPdf =\n\t\t\t// Media Library and REST API use different properties for mime type.\n\t\t\t( newMedia.mime || newMedia.mime_type ) === 'application/pdf' ||\n\t\t\tgetFilename( newMedia.url ).toLowerCase().endsWith( '.pdf' );\n\t\tconst pdfAttributes = {\n\t\t\tdisplayPreview: isPdf\n\t\t\t\t? attributes.displayPreview ?? true\n\t\t\t\t: undefined,\n\t\t\tpreviewHeight: isPdf ? attributes.previewHeight ?? 600 : undefined,\n\t\t};\n\n\t\tsetAttributes( {\n\t\t\thref: newMedia.url,\n\t\t\tfileName: newMedia.title,\n\t\t\ttextLinkHref: newMedia.url,\n\t\t\tid: newMedia.id,\n\t\t\tfileId: `wp-block-file--media-${ clientId }`,\n\t\t\tblob: undefined,\n\t\t\t...pdfAttributes,\n\t\t} );\n\t\tsetTemporaryURL();\n\t}\n\n\tfunction onUploadError( message ) {\n\t\tsetAttributes( { href: undefined } );\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\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 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: clsx(\n\t\t\t!! temporaryURL && getAnimateClassName( { type: 'loading' } ),\n\t\t\t{\n\t\t\t\t'is-transient': !! temporaryURL,\n\t\t\t}\n\t\t),\n\t} );\n\n\tconst displayPreviewInEditor = browserSupportsPdfs() && displayPreview;\n\n\tif ( ! href && ! temporaryURL ) {\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'Drag and drop a file, upload, or choose from your 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\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={ {\n\t\t\t\t\thref: href || temporaryURL,\n\t\t\t\t\ttextLinkHref,\n\t\t\t\t\tattachmentPage,\n\t\t\t\t} }\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\tonReset={ () => onSelectFile( undefined ) }\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, width: '100%' } }\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\t// The horizontal grid value must be 1 or else the width may snap during a\n\t\t\t\t\t\t// resize even though only vertical resizing is enabled.\n\t\t\t\t\t\tgrid={ [ 1, 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\tidentifier=\"fileName\"\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\u2026' ) }\n\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\tonChange={ ( text ) =>\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\tfileName: removeAnchorTag( text ),\n\t\t\t\t\t\t\t} )\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 className=\"wp-block-file__button-richtext-wrapper\">\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\tidentifier=\"downloadButtonText\"\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={ clsx(\n\t\t\t\t\t\t\t\t\t'wp-block-file__button',\n\t\t\t\t\t\t\t\t\t__experimentalGetElementClassName(\n\t\t\t\t\t\t\t\t\t\t'button'\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\tvalue={ downloadButtonText }\n\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Add text\u2026' ) }\n\t\t\t\t\t\t\t\tonChange={ ( text ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tdownloadButtonText:\n\t\t\t\t\t\t\t\t\t\t\tremoveAnchorTag( text ),\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</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 FileEdit;\n"], "mappings": "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", "names": [] }