[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 /* global plupload, pluploadL10n, ajaxurl, post_id, wpUploaderInit, deleteUserSetting, setUserSetting, getUserSetting, shortform */ 2 var topWin = window.dialogArguments || opener || parent || top, uploader, uploader_init; 3 4 // Progress and success handlers for media multi uploads. 5 function fileQueued( fileObj ) { 6 // Get rid of unused form. 7 jQuery( '.media-blank' ).remove(); 8 9 var items = jQuery( '#media-items' ).children(), postid = post_id || 0; 10 11 // Collapse a single item. 12 if ( items.length == 1 ) { 13 items.removeClass( 'open' ).find( '.slidetoggle' ).slideUp( 200 ); 14 } 15 // Create a progress bar containing the filename. 16 jQuery( '<div class="media-item">' ) 17 .attr( 'id', 'media-item-' + fileObj.id ) 18 .addClass( 'child-of-' + postid ) 19 .append( jQuery( '<div class="filename original">' ).text( ' ' + fileObj.name ), 20 '<div class="progress"><div class="percent">0%</div><div class="bar"></div></div>' ) 21 .appendTo( jQuery( '#media-items' ) ); 22 23 // Disable submit. 24 jQuery( '#insert-gallery' ).prop( 'disabled', true ); 25 } 26 27 function uploadStart() { 28 try { 29 if ( typeof topWin.tb_remove != 'undefined' ) 30 topWin.jQuery( '#TB_overlay' ).unbind( 'click', topWin.tb_remove ); 31 } catch( e ){} 32 33 return true; 34 } 35 36 function uploadProgress( up, file ) { 37 var item = jQuery( '#media-item-' + file.id ); 38 39 jQuery( '.bar', item ).width( ( 200 * file.loaded ) / file.size ); 40 jQuery( '.percent', item ).html( file.percent + '%' ); 41 } 42 43 // Check to see if a large file failed to upload. 44 function fileUploading( up, file ) { 45 var hundredmb = 100 * 1024 * 1024, 46 max = parseInt( up.settings.max_file_size, 10 ); 47 48 if ( max > hundredmb && file.size > hundredmb ) { 49 setTimeout( function() { 50 if ( file.status < 3 && file.loaded === 0 ) { // Not uploading. 51 wpFileError( file, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) ); 52 up.stop(); // Stop the whole queue. 53 up.removeFile( file ); 54 up.start(); // Restart the queue. 55 } 56 }, 10000 ); // Wait for 10 seconds for the file to start uploading. 57 } 58 } 59 60 function updateMediaForm() { 61 var items = jQuery( '#media-items' ).children(); 62 63 // Just one file, no need for collapsible part. 64 if ( items.length == 1 ) { 65 items.addClass( 'open' ).find( '.slidetoggle' ).show(); 66 jQuery( '.insert-gallery' ).hide(); 67 } else if ( items.length > 1 ) { 68 items.removeClass( 'open' ); 69 // Only show Gallery/Playlist buttons when there are at least two files. 70 jQuery( '.insert-gallery' ).show(); 71 } 72 73 // Only show Save buttons when there is at least one file. 74 if ( items.not( '.media-blank' ).length > 0 ) 75 jQuery( '.savebutton' ).show(); 76 else 77 jQuery( '.savebutton' ).hide(); 78 } 79 80 function uploadSuccess( fileObj, serverData ) { 81 var item = jQuery( '#media-item-' + fileObj.id ); 82 83 // On success serverData should be numeric, 84 // fix bug in html4 runtime returning the serverData wrapped in a <pre> tag. 85 if ( typeof serverData === 'string' ) { 86 serverData = serverData.replace( /^<pre>(\d+)<\/pre>$/, '$1' ); 87 88 // If async-upload returned an error message, place it in the media item div and return. 89 if ( /media-upload-error|error-div/.test( serverData ) ) { 90 item.html( serverData ); 91 return; 92 } 93 } 94 95 item.find( '.percent' ).html( pluploadL10n.crunching ); 96 97 prepareMediaItem( fileObj, serverData ); 98 updateMediaForm(); 99 100 // Increment the counter. 101 if ( post_id && item.hasClass( 'child-of-' + post_id ) ) { 102 jQuery( '#attachments-count' ).text( 1 * jQuery( '#attachments-count' ).text() + 1 ); 103 } 104 } 105 106 function setResize( arg ) { 107 if ( arg ) { 108 if ( window.resize_width && window.resize_height ) { 109 uploader.settings.resize = { 110 enabled: true, 111 width: window.resize_width, 112 height: window.resize_height, 113 quality: 100 114 }; 115 } else { 116 uploader.settings.multipart_params.image_resize = true; 117 } 118 } else { 119 delete( uploader.settings.multipart_params.image_resize ); 120 } 121 } 122 123 function prepareMediaItem( fileObj, serverData ) { 124 var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery( '#media-item-' + fileObj.id ); 125 if ( f == 2 && shortform > 2 ) 126 f = shortform; 127 128 try { 129 if ( typeof topWin.tb_remove != 'undefined' ) 130 topWin.jQuery( '#TB_overlay' ).click( topWin.tb_remove ); 131 } catch( e ){} 132 133 if ( isNaN( serverData ) || !serverData ) { 134 // Old style: Append the HTML returned by the server -- thumbnail and form inputs. 135 item.append( serverData ); 136 prepareMediaItemInit( fileObj ); 137 } else { 138 // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server. 139 item.load( 'async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit( fileObj );updateMediaForm();}); 140 } 141 } 142 143 function prepareMediaItemInit( fileObj ) { 144 var item = jQuery( '#media-item-' + fileObj.id ); 145 // Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename. 146 jQuery( '.thumbnail', item ).clone().attr( 'class', 'pinkynail toggle' ).prependTo( item ); 147 148 // Replace the original filename with the new (unique) one assigned during upload. 149 jQuery( '.filename.original', item ).replaceWith( jQuery( '.filename.new', item ) ); 150 151 // Bind Ajax to the new Delete button. 152 jQuery( 'a.delete', item ).on( 'click', function(){ 153 // Tell the server to delete it. TODO: Handle exceptions. 154 jQuery.ajax({ 155 url: ajaxurl, 156 type: 'post', 157 success: deleteSuccess, 158 error: deleteError, 159 id: fileObj.id, 160 data: { 161 id : this.id.replace(/[^0-9]/g, '' ), 162 action : 'trash-post', 163 _ajax_nonce : this.href.replace(/^.*wpnonce=/,'' ) 164 } 165 }); 166 return false; 167 }); 168 169 // Bind Ajax to the new Undo button. 170 jQuery( 'a.undo', item ).on( 'click', function(){ 171 // Tell the server to untrash it. TODO: Handle exceptions. 172 jQuery.ajax({ 173 url: ajaxurl, 174 type: 'post', 175 id: fileObj.id, 176 data: { 177 id : this.id.replace(/[^0-9]/g,'' ), 178 action: 'untrash-post', 179 _ajax_nonce: this.href.replace(/^.*wpnonce=/,'' ) 180 }, 181 success: function( ){ 182 var type, 183 item = jQuery( '#media-item-' + fileObj.id ); 184 185 if ( type = jQuery( '#type-of-' + fileObj.id ).val() ) 186 jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text()-0+1 ); 187 188 if ( post_id && item.hasClass( 'child-of-'+post_id ) ) 189 jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text()-0+1 ); 190 191 jQuery( '.filename .trashnotice', item ).remove(); 192 jQuery( '.filename .title', item ).css( 'font-weight','normal' ); 193 jQuery( 'a.undo', item ).addClass( 'hidden' ); 194 jQuery( '.menu_order_input', item ).show(); 195 item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery( this ).css({backgroundColor:''}); } }).removeClass( 'undo' ); 196 } 197 }); 198 return false; 199 }); 200 201 // Open this item if it says to start open (e.g. to display an error). 202 jQuery( '#media-item-' + fileObj.id + '.startopen' ).removeClass( 'startopen' ).addClass( 'open' ).find( 'slidetoggle' ).fadeIn(); 203 } 204 205 // Generic error message. 206 function wpQueueError( message ) { 207 jQuery( '#media-upload-error' ).show().html( '<div class="error"><p>' + message + '</p></div>' ); 208 } 209 210 // File-specific error messages. 211 function wpFileError( fileObj, message ) { 212 itemAjaxError( fileObj.id, message ); 213 } 214 215 function itemAjaxError( id, message ) { 216 var item = jQuery( '#media-item-' + id ), filename = item.find( '.filename' ).text(), last_err = item.data( 'last-err' ); 217 218 if ( last_err == id ) // Prevent firing an error for the same file twice. 219 return; 220 221 item.html( '<div class="error-div">' + 222 '<a class="dismiss" href="#">' + pluploadL10n.dismiss + '</a>' + 223 '<strong>' + pluploadL10n.error_uploading.replace( '%s', jQuery.trim( filename )) + '</strong> ' + 224 message + 225 '</div>' ).data( 'last-err', id ); 226 } 227 228 function deleteSuccess( data ) { 229 var type, id, item; 230 if ( data == '-1' ) 231 return itemAjaxError( this.id, 'You do not have permission. Has your session expired?' ); 232 233 if ( data == '0' ) 234 return itemAjaxError( this.id, 'Could not be deleted. Has it been deleted already?' ); 235 236 id = this.id; 237 item = jQuery( '#media-item-' + id ); 238 239 // Decrement the counters. 240 if ( type = jQuery( '#type-of-' + id ).val() ) 241 jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text() - 1 ); 242 243 if ( post_id && item.hasClass( 'child-of-'+post_id ) ) 244 jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text() - 1 ); 245 246 if ( jQuery( 'form.type-form #media-items' ).children().length == 1 && jQuery( '.hidden', '#media-items' ).length > 0 ) { 247 jQuery( '.toggle' ).toggle(); 248 jQuery( '.slidetoggle' ).slideUp( 200 ).siblings().removeClass( 'hidden' ); 249 } 250 251 // Vanish it. 252 jQuery( '.toggle', item ).toggle(); 253 jQuery( '.slidetoggle', item ).slideUp( 200 ).siblings().removeClass( 'hidden' ); 254 item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass( 'undo' ); 255 256 jQuery( '.filename:empty', item ).remove(); 257 jQuery( '.filename .title', item ).css( 'font-weight','bold' ); 258 jQuery( '.filename', item ).append( '<span class="trashnotice"> ' + pluploadL10n.deleted + ' </span>' ).siblings( 'a.toggle' ).hide(); 259 jQuery( '.filename', item ).append( jQuery( 'a.undo', item ).removeClass( 'hidden' ) ); 260 jQuery( '.menu_order_input', item ).hide(); 261 262 return; 263 } 264 265 function deleteError() { 266 } 267 268 function uploadComplete() { 269 jQuery( '#insert-gallery' ).prop( 'disabled', false ); 270 } 271 272 function switchUploader( s ) { 273 if ( s ) { 274 deleteUserSetting( 'uploader' ); 275 jQuery( '.media-upload-form' ).removeClass( 'html-uploader' ); 276 277 if ( typeof( uploader ) == 'object' ) 278 uploader.refresh(); 279 } else { 280 setUserSetting( 'uploader', '1' ); // 1 == html uploader. 281 jQuery( '.media-upload-form' ).addClass( 'html-uploader' ); 282 } 283 } 284 285 function uploadError( fileObj, errorCode, message, up ) { 286 var hundredmb = 100 * 1024 * 1024, max; 287 288 switch ( errorCode ) { 289 case plupload.FAILED: 290 wpFileError( fileObj, pluploadL10n.upload_failed ); 291 break; 292 case plupload.FILE_EXTENSION_ERROR: 293 wpFileExtensionError( up, fileObj, pluploadL10n.invalid_filetype ); 294 break; 295 case plupload.FILE_SIZE_ERROR: 296 uploadSizeError( up, fileObj ); 297 break; 298 case plupload.IMAGE_FORMAT_ERROR: 299 wpFileError( fileObj, pluploadL10n.not_an_image ); 300 break; 301 case plupload.IMAGE_MEMORY_ERROR: 302 wpFileError( fileObj, pluploadL10n.image_memory_exceeded ); 303 break; 304 case plupload.IMAGE_DIMENSIONS_ERROR: 305 wpFileError( fileObj, pluploadL10n.image_dimensions_exceeded ); 306 break; 307 case plupload.GENERIC_ERROR: 308 wpQueueError( pluploadL10n.upload_failed ); 309 break; 310 case plupload.IO_ERROR: 311 max = parseInt( up.settings.filters.max_file_size, 10 ); 312 313 if ( max > hundredmb && fileObj.size > hundredmb ) { 314 wpFileError( fileObj, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) ); 315 } else { 316 wpQueueError( pluploadL10n.io_error ); 317 } 318 319 break; 320 case plupload.HTTP_ERROR: 321 wpQueueError( pluploadL10n.http_error ); 322 break; 323 case plupload.INIT_ERROR: 324 jQuery( '.media-upload-form' ).addClass( 'html-uploader' ); 325 break; 326 case plupload.SECURITY_ERROR: 327 wpQueueError( pluploadL10n.security_error ); 328 break; 329 /* case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: 330 case plupload.UPLOAD_ERROR.FILE_CANCELLED: 331 jQuery( '#media-item-' + fileObj.id ).remove(); 332 break;*/ 333 default: 334 wpFileError( fileObj, pluploadL10n.default_error ); 335 } 336 } 337 338 function uploadSizeError( up, file ) { 339 var message, errorDiv; 340 341 message = pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name ); 342 343 // Construct the error div. 344 errorDiv = jQuery( '<div />' ) 345 .attr( { 346 'id': 'media-item-' + file.id, 347 'class': 'media-item error' 348 } ) 349 .append( 350 jQuery( '<p />' ) 351 .text( message ) 352 ); 353 354 // Append the error. 355 jQuery( '#media-items' ).append( errorDiv ); 356 up.removeFile( file ); 357 } 358 359 function wpFileExtensionError( up, file, message ) { 360 jQuery( '#media-items' ).append( '<div id="media-item-' + file.id + '" class="media-item error"><p>' + message + '</p></div>' ); 361 up.removeFile( file ); 362 } 363 364 /** 365 * Copies the attachment URL to the clipboard. 366 * 367 * @since 5.8.0 368 * 369 * @param {MouseEvent} event A click event. 370 * 371 * @return {void} 372 */ 373 function copyAttachmentUploadURLClipboard() { 374 var clipboard = new ClipboardJS( '.copy-attachment-url' ), 375 successTimeout; 376 377 clipboard.on( 'success', function( event ) { 378 var triggerElement = jQuery( event.trigger ), 379 successElement = jQuery( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) ); 380 381 // Clear the selection and move focus back to the trigger. 382 event.clearSelection(); 383 // Show success visual feedback. 384 clearTimeout( successTimeout ); 385 successElement.removeClass( 'hidden' ); 386 // Hide success visual feedback after 3 seconds since last success. 387 successTimeout = setTimeout( function() { 388 successElement.addClass( 'hidden' ); 389 }, 3000 ); 390 // Handle success audible feedback. 391 wp.a11y.speak( pluploadL10n.file_url_copied ); 392 } ); 393 } 394 395 jQuery( document ).ready( function( $ ) { 396 copyAttachmentUploadURLClipboard(); 397 var tryAgainCount = {}; 398 var tryAgain; 399 400 $( '.media-upload-form' ).on( 'click.uploader', function( e ) { 401 var target = $( e.target ), tr, c; 402 403 if ( target.is( 'input[type="radio"]' ) ) { // Remember the last used image size and alignment. 404 tr = target.closest( 'tr' ); 405 406 if ( tr.hasClass( 'align' ) ) 407 setUserSetting( 'align', target.val() ); 408 else if ( tr.hasClass( 'image-size' ) ) 409 setUserSetting( 'imgsize', target.val() ); 410 411 } else if ( target.is( 'button.button' ) ) { // Remember the last used image link url. 412 c = e.target.className || ''; 413 c = c.match( /url([^ '"]+)/ ); 414 415 if ( c && c[1] ) { 416 setUserSetting( 'urlbutton', c[1] ); 417 target.siblings( '.urlfield' ).val( target.data( 'link-url' ) ); 418 } 419 } else if ( target.is( 'a.dismiss' ) ) { 420 target.parents( '.media-item' ).fadeOut( 200, function() { 421 $( this ).remove(); 422 } ); 423 } else if ( target.is( '.upload-flash-bypass a' ) || target.is( 'a.uploader-html' ) ) { // Switch uploader to html4. 424 $( '#media-items, p.submit, span.big-file-warning' ).css( 'display', 'none' ); 425 switchUploader( 0 ); 426 e.preventDefault(); 427 } else if ( target.is( '.upload-html-bypass a' ) ) { // Switch uploader to multi-file. 428 $( '#media-items, p.submit, span.big-file-warning' ).css( 'display', '' ); 429 switchUploader( 1 ); 430 e.preventDefault(); 431 } else if ( target.is( 'a.describe-toggle-on' ) ) { // Show. 432 target.parent().addClass( 'open' ); 433 target.siblings( '.slidetoggle' ).fadeIn( 250, function() { 434 var S = $( window ).scrollTop(), 435 H = $( window ).height(), 436 top = $( this ).offset().top, 437 h = $( this ).height(), 438 b, 439 B; 440 441 if ( H && top && h ) { 442 b = top + h; 443 B = S + H; 444 445 if ( b > B ) { 446 if ( b - B < top - S ) 447 window.scrollBy( 0, ( b - B ) + 10 ); 448 else 449 window.scrollBy( 0, top - S - 40 ); 450 } 451 } 452 } ); 453 454 e.preventDefault(); 455 } else if ( target.is( 'a.describe-toggle-off' ) ) { // Hide. 456 target.siblings( '.slidetoggle' ).fadeOut( 250, function() { 457 target.parent().removeClass( 'open' ); 458 } ); 459 460 e.preventDefault(); 461 } 462 }); 463 464 // Attempt to create image sub-sizes when an image was uploaded successfully 465 // but the server responded with an HTTP 5xx error. 466 tryAgain = function( up, error ) { 467 var file = error.file; 468 var times; 469 var id; 470 471 if ( ! error || ! error.responseHeaders ) { 472 wpQueueError( pluploadL10n.http_error_image ); 473 return; 474 } 475 476 id = error.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i ); 477 478 if ( id && id[1] ) { 479 id = id[1]; 480 } else { 481 wpQueueError( pluploadL10n.http_error_image ); 482 return; 483 } 484 485 times = tryAgainCount[ file.id ]; 486 487 if ( times && times > 4 ) { 488 /* 489 * The file may have been uploaded and attachment post created, 490 * but post-processing and resizing failed... 491 * Do a cleanup then tell the user to scale down the image and upload it again. 492 */ 493 $.ajax({ 494 type: 'post', 495 url: ajaxurl, 496 dataType: 'json', 497 data: { 498 action: 'media-create-image-subsizes', 499 _wpnonce: wpUploaderInit.multipart_params._wpnonce, 500 attachment_id: id, 501 _wp_upload_failed_cleanup: true, 502 } 503 }); 504 505 if ( error.message && ( error.status < 500 || error.status >= 600 ) ) { 506 wpQueueError( error.message ); 507 } else { 508 wpQueueError( pluploadL10n.http_error_image ); 509 } 510 511 return; 512 } 513 514 if ( ! times ) { 515 tryAgainCount[ file.id ] = 1; 516 } else { 517 tryAgainCount[ file.id ] = ++times; 518 } 519 520 // Try to create the missing image sizes. 521 $.ajax({ 522 type: 'post', 523 url: ajaxurl, 524 dataType: 'json', 525 data: { 526 action: 'media-create-image-subsizes', 527 _wpnonce: wpUploaderInit.multipart_params._wpnonce, 528 attachment_id: id, 529 _legacy_support: 'true', 530 } 531 }).done( function( response ) { 532 var message; 533 534 if ( response.success ) { 535 uploadSuccess( file, response.data.id ); 536 } else { 537 if ( response.data && response.data.message ) { 538 message = response.data.message; 539 } 540 541 wpQueueError( message || pluploadL10n.http_error_image ); 542 } 543 }).fail( function( jqXHR ) { 544 // If another HTTP 5xx error, try try again... 545 if ( jqXHR.status >= 500 && jqXHR.status < 600 ) { 546 tryAgain( up, error ); 547 return; 548 } 549 550 wpQueueError( pluploadL10n.http_error_image ); 551 }); 552 } 553 554 // Init and set the uploader. 555 uploader_init = function() { 556 uploader = new plupload.Uploader( wpUploaderInit ); 557 558 $( '#image_resize' ).on( 'change', function() { 559 var arg = $( this ).prop( 'checked' ); 560 561 setResize( arg ); 562 563 if ( arg ) 564 setUserSetting( 'upload_resize', '1' ); 565 else 566 deleteUserSetting( 'upload_resize' ); 567 }); 568 569 uploader.bind( 'Init', function( up ) { 570 var uploaddiv = $( '#plupload-upload-ui' ); 571 572 setResize( getUserSetting( 'upload_resize', false ) ); 573 574 if ( up.features.dragdrop && ! $( document.body ).hasClass( 'mobile' ) ) { 575 uploaddiv.addClass( 'drag-drop' ); 576 577 $( '#drag-drop-area' ).on( 'dragover.wp-uploader', function() { // dragenter doesn't fire right :( 578 uploaddiv.addClass( 'drag-over' ); 579 }).on( 'dragleave.wp-uploader, drop.wp-uploader', function() { 580 uploaddiv.removeClass( 'drag-over' ); 581 }); 582 } else { 583 uploaddiv.removeClass( 'drag-drop' ); 584 $( '#drag-drop-area' ).off( '.wp-uploader' ); 585 } 586 587 if ( up.runtime === 'html4' ) { 588 $( '.upload-flash-bypass' ).hide(); 589 } 590 }); 591 592 uploader.bind( 'postinit', function( up ) { 593 up.refresh(); 594 }); 595 596 uploader.init(); 597 598 uploader.bind( 'FilesAdded', function( up, files ) { 599 $( '#media-upload-error' ).empty(); 600 uploadStart(); 601 602 plupload.each( files, function( file ) { 603 if ( file.type === 'image/heic' && up.settings.heic_upload_error ) { 604 // Show error but do not block uploading. 605 wpQueueError( pluploadL10n.unsupported_image ); 606 } else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) { 607 // Disallow uploading of WebP images if the server cannot edit them. 608 wpQueueError( pluploadL10n.noneditable_image ); 609 up.removeFile( file ); 610 return; 611 } else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) { 612 // Disallow uploading of AVIF images if the server cannot edit them. 613 wpQueueError( pluploadL10n.noneditable_image ); 614 up.removeFile( file ); 615 return; 616 } 617 618 fileQueued( file ); 619 }); 620 621 up.refresh(); 622 up.start(); 623 }); 624 625 uploader.bind( 'UploadFile', function( up, file ) { 626 fileUploading( up, file ); 627 }); 628 629 uploader.bind( 'UploadProgress', function( up, file ) { 630 uploadProgress( up, file ); 631 }); 632 633 uploader.bind( 'Error', function( up, error ) { 634 var isImage = error.file && error.file.type && error.file.type.indexOf( 'image/' ) === 0; 635 var status = error && error.status; 636 637 // If the file is an image and the error is HTTP 5xx try to create sub-sizes again. 638 if ( isImage && status >= 500 && status < 600 ) { 639 tryAgain( up, error ); 640 return; 641 } 642 643 uploadError( error.file, error.code, error.message, up ); 644 up.refresh(); 645 }); 646 647 uploader.bind( 'FileUploaded', function( up, file, response ) { 648 uploadSuccess( file, response.response ); 649 }); 650 651 uploader.bind( 'UploadComplete', function() { 652 uploadComplete(); 653 }); 654 }; 655 656 if ( typeof( wpUploaderInit ) == 'object' ) { 657 uploader_init(); 658 } 659 660 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Sat Dec 21 08:20:01 2024 | Cross-referenced by PHPXref |