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 '
'; + ?> + + __( '“%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 );