From ba7684417ae86fafde7907fdb78ddb49e89309da Mon Sep 17 00:00:00 2001 From: Anthony Burchell Date: Wed, 26 May 2021 01:39:47 +0000 Subject: [PATCH] Media: Add button in media upload page for copying the media url. Adds a button to the media upload page to make copying the url possible on the same page when a media item upload is successful. Props anotia, ryokuhi, Mista-Flo, lukecarbis, antpb, claytoncollie, shaunandrews, joedolson. Fixes #51754. git-svn-id: https://develop.svn.wordpress.org/trunk@51023 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/_enqueues/vendor/plupload/handlers.js | 32 ++++++++++++ src/wp-admin/async-upload.php | 31 ++++++++---- src/wp-admin/css/media.css | 52 +++++++++++++++++--- src/wp-includes/script-loader.php | 3 +- 4 files changed, 102 insertions(+), 16 deletions(-) diff --git a/src/js/_enqueues/vendor/plupload/handlers.js b/src/js/_enqueues/vendor/plupload/handlers.js index 884d8596fc..aaf1519aff 100644 --- a/src/js/_enqueues/vendor/plupload/handlers.js +++ b/src/js/_enqueues/vendor/plupload/handlers.js @@ -361,7 +361,39 @@ function wpFileExtensionError( up, file, message ) { up.removeFile( file ); } +/** + * Copies the attachment URL to the clipboard. + * + * @since 5.8.0 + * + * @param {MouseEvent} event A click event. + * + * @return {void} + */ +function copyAttachmentUploadURLClipboard() { + var clipboard = new ClipboardJS( '.copy-attachment-url' ), + successTimeout; + clipboard.on( 'success', function( event ) { + var triggerElement = jQuery( event.trigger ), + successElement = jQuery( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) ); + // Clear the selection and move focus back to the trigger. + event.clearSelection(); + // Handle ClipboardJS focus bug, see https://github.com/zenorocha/clipboard.js/issues/680 + triggerElement.trigger( 'focus' ); + // Show success visual feedback. + clearTimeout( successTimeout ); + successElement.removeClass( 'hidden' ); + // Hide success visual feedback after 3 seconds since last success. + successTimeout = setTimeout( function() { + successElement.addClass( 'hidden' ); + }, 3000 ); + // Handle success audible feedback. + wp.a11y.speak( pluploadL10n.file_url_copied ); + } ); +} + jQuery( document ).ready( function( $ ) { + copyAttachmentUploadURLClipboard(); var tryAgainCount = {}; var tryAgain; diff --git a/src/wp-admin/async-upload.php b/src/wp-admin/async-upload.php index 89362aa8f4..9c0190a198 100644 --- a/src/wp-admin/async-upload.php +++ b/src/wp-admin/async-upload.php @@ -48,20 +48,33 @@ if ( isset( $_REQUEST['attachment_id'] ) && (int) $_REQUEST['attachment_id'] && switch ( $_REQUEST['fetch'] ) { case 3: + echo '
'; $thumb_url = wp_get_attachment_image_src( $id, 'thumbnail', true ); if ( $thumb_url ) { echo ''; } - if ( current_user_can( 'edit_post', $id ) ) { - echo '' . _x( 'Edit', 'media item' ) . ''; - } else { - echo '' . _x( 'Success', 'media item' ) . ''; - } - // Title shouldn't ever be empty, but use filename just in case. - $file = get_attached_file( $post->ID ); - $title = $post->post_title ? $post->post_title : wp_basename( $file ); - echo '
' . esc_html( wp_html_excerpt( $title, 60, '…' ) ) . '
'; + $file = get_attached_file( $post->ID ); + $fileurl = wp_get_attachment_url( $post->ID ); + $title = $post->post_title ? $post->post_title : wp_basename( $file ); + + echo '
' . esc_html( wp_html_excerpt( $title, 60, '…' ) ) . ' ' . basename( $file ) . '
'; + echo '
'; + ?> +
+ + + + + ' . _x( 'Edit', 'media item' ) . ''; + } else { + echo '' . _x( 'Success', 'media item' ) . ''; + } + ?> +
+ __( '“%s” has failed to upload.' ), 'unsupported_image' => __( 'This image cannot be displayed in a web browser. For best results convert it to JPEG before uploading.' ), + 'file_url_copied' => __( 'The file URL has been copied to your clipboard' ), ); $scripts->add( 'moxiejs', "/wp-includes/js/plupload/moxie$suffix.js", array(), '1.3.5' ); @@ -892,7 +893,7 @@ function wp_default_scripts( $scripts ) { $scripts->add( "plupload-$handle", false, array( 'plupload' ), '2.1.1' ); } - $scripts->add( 'plupload-handlers', "/wp-includes/js/plupload/handlers$suffix.js", array( 'plupload', 'jquery' ) ); + $scripts->add( 'plupload-handlers', "/wp-includes/js/plupload/handlers$suffix.js", array( 'clipboard', 'jquery', 'plupload', 'underscore', 'wp-a11y', 'wp-i18n' ) ); did_action( 'init' ) && $scripts->localize( 'plupload-handlers', 'pluploadL10n', $uploader_l10n ); $scripts->add( 'wp-plupload', "/wp-includes/js/plupload/wp-plupload$suffix.js", array( 'plupload', 'jquery', 'json2', 'media-models' ), false, 1 );