diff --git a/wp-admin/async-upload.php b/wp-admin/async-upload.php
index c6350aa085..1a37dceb96 100644
--- a/wp-admin/async-upload.php
+++ b/wp-admin/async-upload.php
@@ -20,13 +20,26 @@ header('Content-Type: text/plain');
if ( !current_user_can('upload_files') )
wp_die(__('You do not have permission to upload files.'));
+// just fetch the detail form for that attachment
+if ( ($id = intval($_REQUEST['attachment_id'])) && $_REQUEST['fetch'] ) {
+ echo get_media_item($id);
+ exit;
+}
+
$id = media_handle_upload('async-upload', $_REQUEST['post_id']);
if (is_wp_error($id)) {
echo '
'.wp_specialchars($id->get_error_message()).'
';
exit;
}
-$type = $_REQUEST['type'];
-echo apply_filters("async_upload_{$type}", $id);
+if ( $_REQUEST['short'] ) {
+ // short form response - attachment ID only
+ echo $id;
+}
+else {
+ // long form response - big chunk o html
+ $type = $_REQUEST['type'];
+ echo apply_filters("async_upload_{$type}", $id);
+}
?>
diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php
index 7feceaae12..44e8dbcc5c 100644
--- a/wp-admin/includes/media.php
+++ b/wp-admin/includes/media.php
@@ -804,7 +804,8 @@ jQuery(function($){
"post_id" : "",
"auth_cookie" : "",
"type" : "",
- "tab" : ""
+ "tab" : "",
+ "short" : "1"
},
file_size_limit : "b",
swfupload_element_id : "flash-upload-ui", // id of the element displayed when swfupload is available
diff --git a/wp-includes/js/swfupload/handlers.js b/wp-includes/js/swfupload/handlers.js
index 2c39d72919..92eb8ac88c 100644
--- a/wp-includes/js/swfupload/handlers.js
+++ b/wp-includes/js/swfupload/handlers.js
@@ -35,8 +35,18 @@ function prepareMediaItem(fileObj, serverData) {
jQuery('#media-item-' + fileObj.id + ' .bar').remove();
jQuery('#media-item-' + fileObj.id + ' .progress').hide();
- // Append the HTML returned by the server -- thumbnail and form inputs
- jQuery('#media-item-' + fileObj.id).append(serverData);
+ // Old style: Append the HTML returned by the server -- thumbnail and form inputs
+ if ( isNaN(serverData) || !serverData ) {
+ jQuery('#media-item-' + fileObj.id).append(serverData);
+ prepareMediaItemInit(fileObj);
+ }
+ // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server
+ else {
+ jQuery('#media-item-' + fileObj.id).load('async-upload.php', {attachment_id:serverData, fetch:1}, function(){prepareMediaItemInit(fileObj);updateMediaForm()});
+ }
+}
+
+function prepareMediaItemInit(fileObj) {
// Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename
jQuery('#media-item-' + fileObj.id + ' .thumbnail').clone().attr('className', 'pinkynail toggle').prependTo('#media-item-' + fileObj.id);
diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php
index c0dab27583..eadbb2c433 100644
--- a/wp-includes/script-loader.php
+++ b/wp-includes/script-loader.php
@@ -87,7 +87,7 @@ class WP_Scripts {
'is_lighttpd_before_150' => is_lighttpd_before_150(),
) );
$this->add( 'swfupload-queue', '/wp-includes/js/swfupload/plugins/swfupload.queue.js', array('swfupload'), '2.0.2');
- $this->add( 'swfupload-handlers', '/wp-includes/js/swfupload/handlers.js', array('swfupload'), '2.0.2-20080331');
+ $this->add( 'swfupload-handlers', '/wp-includes/js/swfupload/handlers.js', array('swfupload'), '2.0.2-20080407');
// these error messages came from the sample swfupload js, they might need changing.
$this->localize( 'swfupload-handlers', 'swfuploadL10n', array(
'queue_limit_exceeded' => __('You have attempted to queue too many files.'),