home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Blogs / wordpress2.6.exe / wordpress2.6 / wp-includes / js / swfupload / handlers.js next >
Encoding:
JavaScript  |  2008-05-01  |  9.0 KB  |  236 lines

  1. function fileDialogStart() {
  2.     jQuery("#media-upload-error").empty();
  3. }
  4.  
  5. // progress and success handlers for media multi uploads
  6. function fileQueued(fileObj) {
  7.     // Get rid of unused form
  8.     jQuery('.media-blank').remove();
  9.     // Collapse a single item
  10.     if ( jQuery('.type-form #media-items>*').length == 1 && jQuery('#media-items .hidden').length > 0 ) {
  11.         jQuery('.toggle').toggle();
  12.         jQuery('.slidetoggle').slideUp(200).siblings().removeClass('hidden');
  13.     }
  14.     // Create a progress bar containing the filename
  15.     jQuery('#media-items').append('<div id="media-item-' + fileObj.id + '" class="media-item child-of-' + post_id + '"><div class="progress"><div class="bar"></div></div><div class="filename original">' + fileObj.name + '</div></div>');
  16.     // Display the progress div
  17.     jQuery('#media-item-' + fileObj.id + ' .progress').show();
  18.  
  19.     // Disable the submit button
  20.     jQuery('#insert-gallery').attr('disabled', 'disabled');
  21. }
  22.  
  23. function uploadStart(fileObj) { return true; }
  24.  
  25. function uploadProgress(fileObj, bytesDone, bytesTotal) {
  26.     // Lengthen the progress bar
  27.     jQuery('#media-item-' + fileObj.id + ' .bar').width(620*bytesDone/bytesTotal);
  28.  
  29.     if ( bytesDone == bytesTotal )
  30.         jQuery('#media-item-' + fileObj.id + ' .bar').html('<strong class="crunching">' + swfuploadL10n.crunching + '</strong>');
  31. }
  32.  
  33. function prepareMediaItem(fileObj, serverData) {
  34.     // Move the progress bar to 100%
  35.     jQuery('#media-item-' + fileObj.id + ' .bar').remove();
  36.     jQuery('#media-item-' + fileObj.id + ' .progress').hide();
  37.  
  38.     // Old style: Append the HTML returned by the server -- thumbnail and form inputs
  39.     if ( isNaN(serverData) || !serverData ) {
  40.         jQuery('#media-item-' + fileObj.id).append(serverData);
  41.         prepareMediaItemInit(fileObj);
  42.     }
  43.     // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server
  44.     else {
  45.         jQuery('#media-item-' + fileObj.id).load('async-upload.php', {attachment_id:serverData, fetch:1}, function(){prepareMediaItemInit(fileObj);updateMediaForm()});
  46.     }
  47. }
  48.         
  49. function prepareMediaItemInit(fileObj) {
  50.  
  51.     // Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename
  52.     jQuery('#media-item-' + fileObj.id + ' .thumbnail').clone().attr('className', 'pinkynail toggle').prependTo('#media-item-' + fileObj.id);
  53.  
  54.     // Replace the original filename with the new (unique) one assigned during upload
  55.     jQuery('#media-item-' + fileObj.id + ' .filename.original').replaceWith(jQuery('#media-item-' + fileObj.id + ' .filename.new'));
  56.  
  57.     // Also bind toggle to the links
  58.     jQuery('#media-item-' + fileObj.id + ' a.toggle').bind('click', function(){jQuery(this).siblings('.slidetoggle').slideToggle(150, function(){window.scrollTo(0,this.parentNode.offsetTop);});jQuery(this).parent().eq(0).children('.toggle').toggle();jQuery(this).siblings('a.toggle').focus();return false;});
  59.  
  60.     // Bind AJAX to the new Delete button
  61.     jQuery('#media-item-' + fileObj.id + ' a.delete').bind('click',function(){
  62.         // Tell the server to delete it. TODO: handle exceptions
  63.         jQuery.ajax({url:'admin-ajax.php',type:'post',success:deleteSuccess,error:deleteError,id:fileObj.id,data:{
  64.             id : this.id.replace(/[^0-9]/g,''),
  65.             action : 'delete-post',
  66.             _ajax_nonce : this.href.replace(/^.*wpnonce=/,'')}
  67.             });
  68.         return false;
  69.     });
  70.  
  71.     // Open this item if it says to start open (e.g. to display an error)
  72.     jQuery('#media-item-' + fileObj.id + '.startopen')
  73.         .removeClass('startopen')
  74.         .slideToggle(500)
  75.         .parent().eq(0).children('.toggle').toggle();
  76. }
  77.  
  78. function itemAjaxError(id, html) {
  79.     var error = jQuery('#media-item-error' + id);
  80.  
  81.     error.html('<div class="file-error"><button type="button" id="dismiss-'+id+'" class="button dismiss">'+swfuploadL10n.dismiss+'</button>'+html+'</div>');
  82.     jQuery('#dismiss-'+id).click(function(){jQuery(this).parents('.file-error').slideUp(200, function(){jQuery(this).empty();})});
  83. }
  84.  
  85. function deleteSuccess(data, textStatus) {
  86.     if ( data == '-1' )
  87.         return itemAjaxError(this.id, 'You do not have permission. Has your session expired?');
  88.     if ( data == '0' )
  89.         return itemAjaxError(this.id, 'Could not be deleted. Has it been deleted already?');
  90.  
  91.     var item = jQuery('#media-item-' + this.id);
  92.  
  93.     // Decrement the counters.
  94.     if ( type = jQuery('#type-of-' + this.id).val() )
  95.         jQuery('#' + type + '-counter').text(jQuery('#' + type + '-counter').text()-1);
  96.     if ( item.hasClass('child-of-'+post_id) )
  97.         jQuery('#attachments-count').text(jQuery('#attachments-count').text()-1);
  98.  
  99.     if ( jQuery('.type-form #media-items>*').length == 1 && jQuery('#media-items .hidden').length > 0 ) {
  100.         jQuery('.toggle').toggle();
  101.         jQuery('.slidetoggle').slideUp(200).siblings().removeClass('hidden');
  102.     }
  103.  
  104.     // Vanish it.
  105.     jQuery('#media-item-' + this.id + ' .filename:empty').remove();
  106.     jQuery('#media-item-' + this.id + ' .filename').append(' <span class="file-error">'+swfuploadL10n.deleted+'</span>').siblings('a.toggle').remove();
  107.     jQuery('#media-item-' + this.id).children('.describe').css({backgroundColor:'#fff'}).end()
  108.             .animate({backgroundColor:'#ffc0c0'}, {queue:false,duration:50})
  109.             .animate({minHeight:0,height:36}, 400, null, function(){jQuery(this).children('.describe').remove()})
  110.             .animate({backgroundColor:'#fff'}, 400)
  111.             .animate({height:0}, 800, null, function(){jQuery(this).remove();updateMediaForm();});
  112.  
  113.     return;
  114. }
  115.  
  116. function deleteError(X, textStatus, errorThrown) {
  117.     // TODO
  118. }
  119.  
  120. function updateMediaForm() {
  121.     // Just one file, no need for collapsible part
  122.     if ( jQuery('.type-form #media-items>*').length == 1 ) {
  123.         jQuery('#media-items .slidetoggle').slideDown(500).parent().eq(0).children('.toggle').toggle();
  124.         jQuery('.type-form .slidetoggle').siblings().addClass('hidden');
  125.     }
  126.  
  127.     // Only show Save buttons when there is at least one file.
  128.     if ( jQuery('#media-items>*').not('.media-blank').length > 0 )
  129.         jQuery('.savebutton').show();
  130.     else
  131.         jQuery('.savebutton').hide();
  132.  
  133.     // Only show Gallery button when there are at least two files.
  134.     if ( jQuery('#media-items>*').length > 1 )
  135.         jQuery('.insert-gallery').show();
  136.     else
  137.         jQuery('.insert-gallery').hide();
  138. }
  139.  
  140. function uploadSuccess(fileObj, serverData) {
  141.     // if async-upload returned an error message, place it in the media item div and return
  142.     if ( serverData.match('media-upload-error') ) {
  143.         jQuery('#media-item-' + fileObj.id).html(serverData);
  144.         return;
  145.     }
  146.  
  147.     prepareMediaItem(fileObj, serverData);
  148.     updateMediaForm();
  149.  
  150.     // Increment the counter.
  151.     if ( jQuery('#media-item-' + fileObj.id).hasClass('child-of-' + post_id) )
  152.         jQuery('#attachments-count').text(1 * jQuery('#attachments-count').text() + 1);
  153. }
  154.  
  155. function uploadComplete(fileObj) {
  156.     // If no more uploads queued, enable the submit button
  157.     if ( swfu.getStats().files_queued == 0 )
  158.         jQuery('#insert-gallery').attr('disabled', '');
  159. }
  160.  
  161.  
  162. // wp-specific error handlers
  163.  
  164. // generic message
  165. function wpQueueError(message) {
  166.     jQuery('#media-upload-error').show().text(message);
  167. }
  168.  
  169. // file-specific message
  170. function wpFileError(fileObj, message) {
  171.     jQuery('#media-item-' + fileObj.id + ' .filename').after('<div class="file-error"><button type="button" id="dismiss-' + fileObj.id + '" class="button dismiss">'+swfuploadL10n.dismiss+'</button>'+message+'</div>').siblings('.toggle').remove();
  172.     jQuery('#dismiss-' + fileObj.id).click(function(){jQuery(this).parents('.media-item').slideUp(200, function(){jQuery(this).remove();})});
  173. }
  174.  
  175. function fileQueueError(fileObj, error_code, message)  {
  176.     // Handle this error separately because we don't want to create a FileProgress element for it.
  177.     if ( error_code == SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED ) {
  178.         wpQueueError(swfuploadL10n.queue_limit_exceeded);
  179.     }
  180.     else if ( error_code == SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT ) {
  181.         fileQueued(fileObj);
  182.         wpFileError(fileObj, swfuploadL10n.file_exceeds_size_limit);
  183.     }
  184.     else if ( error_code == SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE ) {
  185.         fileQueued(fileObj);
  186.         wpFileError(fileObj, swfuploadL10n.zero_byte_file);
  187.     }
  188.     else if ( error_code == SWFUpload.QUEUE_ERROR.INVALID_FILETYPE ) {
  189.         fileQueued(fileObj);
  190.         wpFileError(fileObj, swfuploadL10n.invalid_filetype);
  191.     }
  192.     else {
  193.         wpQueueError(swfuploadL10n.default_error);
  194.     }
  195. }
  196.  
  197. function fileDialogComplete(num_files_queued) {
  198.     try {
  199.         if (num_files_queued > 0) {
  200.             this.startUpload();
  201.         }
  202.     } catch (ex) {
  203.         this.debug(ex);
  204.     }
  205. }
  206.  
  207. function uploadError(fileObj, error_code, message) {
  208.     // first the file specific error
  209.     if ( error_code == SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL ) {
  210.         wpFileError(fileObj, swfuploadL10n.missing_upload_url);
  211.     }
  212.     else if ( error_code == SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED ) {
  213.         wpFileError(fileObj, swfuploadL10n.upload_limit_exceeded);
  214.     }
  215.     else {
  216.         wpFileError(fileObj, swfuploadL10n.default_error);
  217.     }
  218.  
  219.     // now the general upload status
  220.     if ( error_code == SWFUpload.UPLOAD_ERROR.HTTP_ERROR ) {
  221.         wpQueueError(swfuploadL10n.http_error);
  222.     }
  223.     else if ( error_code == SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED ) {
  224.         wpQueueError(swfuploadL10n.upload_failed);
  225.     }
  226.     else if ( error_code == SWFUpload.UPLOAD_ERROR.IO_ERROR ) {
  227.         wpQueueError(swfuploadL10n.io_error);
  228.     }
  229.     else if ( error_code == SWFUpload.UPLOAD_ERROR.SECURITY_ERROR ) {
  230.         wpQueueError(swfuploadL10n.security_error);
  231.     }
  232.     else if ( error_code == SWFUpload.UPLOAD_ERROR.FILE_CANCELLED ) {
  233.         wpQueueError(swfuploadL10n.security_error);
  234.     }
  235. }
  236.