initial
This commit is contained in:
commit
9883323161
17470 files changed
+4470592
No files matched your search
@@ -0,0 +1,663 @@
|
||||
/* global plupload, pluploadL10n, ajaxurl, post_id, wpUploaderInit, deleteUserSetting, setUserSetting, getUserSetting, shortform */
|
||||
var topWin = window.dialogArguments || opener || parent || top, uploader, uploader_init;
|
||||
|
||||
// Progress and success handlers for media multi uploads.
|
||||
function fileQueued( fileObj ) {
|
||||
// Get rid of unused form.
|
||||
jQuery( '.media-blank' ).remove();
|
||||
|
||||
var items = jQuery( '#media-items' ).children(), postid = post_id || 0;
|
||||
|
||||
// Collapse a single item.
|
||||
if ( items.length == 1 ) {
|
||||
items.removeClass( 'open' ).find( '.slidetoggle' ).slideUp( 200 );
|
||||
}
|
||||
// Create a progress bar containing the filename.
|
||||
jQuery( '<div class="media-item">' )
|
||||
.attr( 'id', 'media-item-' + fileObj.id )
|
||||
.addClass( 'child-of-' + postid )
|
||||
.append( jQuery( '<div class="filename original">' ).text( ' ' + fileObj.name ),
|
||||
'<div class="progress"><div class="percent">0%</div><div class="bar"></div></div>' )
|
||||
.appendTo( jQuery( '#media-items' ) );
|
||||
|
||||
// Disable submit.
|
||||
jQuery( '#insert-gallery' ).prop( 'disabled', true );
|
||||
}
|
||||
|
||||
function uploadStart() {
|
||||
try {
|
||||
if ( typeof topWin.tb_remove != 'undefined' )
|
||||
topWin.jQuery( '#TB_overlay' ).unbind( 'click', topWin.tb_remove );
|
||||
} catch( e ){}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function uploadProgress( up, file ) {
|
||||
var item = jQuery( '#media-item-' + file.id );
|
||||
|
||||
jQuery( '.bar', item ).width( ( 200 * file.loaded ) / file.size );
|
||||
jQuery( '.percent', item ).html( file.percent + '%' );
|
||||
}
|
||||
|
||||
// Check to see if a large file failed to upload.
|
||||
function fileUploading( up, file ) {
|
||||
var hundredmb = 100 * 1024 * 1024,
|
||||
max = parseInt( up.settings.max_file_size, 10 );
|
||||
|
||||
if ( max > hundredmb && file.size > hundredmb ) {
|
||||
setTimeout( function() {
|
||||
if ( file.status < 3 && file.loaded === 0 ) { // Not uploading.
|
||||
wpFileError( file, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) );
|
||||
up.stop(); // Stop the whole queue.
|
||||
up.removeFile( file );
|
||||
up.start(); // Restart the queue.
|
||||
}
|
||||
}, 10000 ); // Wait for 10 seconds for the file to start uploading.
|
||||
}
|
||||
}
|
||||
|
||||
function updateMediaForm() {
|
||||
var items = jQuery( '#media-items' ).children();
|
||||
|
||||
// Just one file, no need for collapsible part.
|
||||
if ( items.length == 1 ) {
|
||||
items.addClass( 'open' ).find( '.slidetoggle' ).show();
|
||||
jQuery( '.insert-gallery' ).hide();
|
||||
} else if ( items.length > 1 ) {
|
||||
items.removeClass( 'open' );
|
||||
// Only show Gallery/Playlist buttons when there are at least two files.
|
||||
jQuery( '.insert-gallery' ).show();
|
||||
}
|
||||
|
||||
// Only show Save buttons when there is at least one file.
|
||||
if ( items.not( '.media-blank' ).length > 0 )
|
||||
jQuery( '.savebutton' ).show();
|
||||
else
|
||||
jQuery( '.savebutton' ).hide();
|
||||
}
|
||||
|
||||
function uploadSuccess( fileObj, serverData ) {
|
||||
var item = jQuery( '#media-item-' + fileObj.id );
|
||||
|
||||
// On success serverData should be numeric,
|
||||
// fix bug in html4 runtime returning the serverData wrapped in a <pre> tag.
|
||||
if ( typeof serverData === 'string' ) {
|
||||
serverData = serverData.replace( /^<pre>(\d+)<\/pre>$/, '$1' );
|
||||
|
||||
// If async-upload returned an error message, place it in the media item div and return.
|
||||
if ( /media-upload-error|error-div/.test( serverData ) ) {
|
||||
item.html( serverData );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
item.find( '.percent' ).html( pluploadL10n.crunching );
|
||||
|
||||
prepareMediaItem( fileObj, serverData );
|
||||
updateMediaForm();
|
||||
|
||||
// Increment the counter.
|
||||
if ( post_id && item.hasClass( 'child-of-' + post_id ) ) {
|
||||
jQuery( '#attachments-count' ).text( 1 * jQuery( '#attachments-count' ).text() + 1 );
|
||||
}
|
||||
}
|
||||
|
||||
function setResize( arg ) {
|
||||
if ( arg ) {
|
||||
if ( window.resize_width && window.resize_height ) {
|
||||
uploader.settings.resize = {
|
||||
enabled: true,
|
||||
width: window.resize_width,
|
||||
height: window.resize_height,
|
||||
quality: 100
|
||||
};
|
||||
} else {
|
||||
uploader.settings.multipart_params.image_resize = true;
|
||||
}
|
||||
} else {
|
||||
delete( uploader.settings.multipart_params.image_resize );
|
||||
}
|
||||
}
|
||||
|
||||
function prepareMediaItem( fileObj, serverData ) {
|
||||
var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery( '#media-item-' + fileObj.id );
|
||||
if ( f == 2 && shortform > 2 )
|
||||
f = shortform;
|
||||
|
||||
try {
|
||||
if ( typeof topWin.tb_remove != 'undefined' )
|
||||
topWin.jQuery( '#TB_overlay' ).click( topWin.tb_remove );
|
||||
} catch( e ){}
|
||||
|
||||
if ( isNaN( serverData ) || !serverData ) {
|
||||
// Old style: Append the HTML returned by the server -- thumbnail and form inputs.
|
||||
item.append( serverData );
|
||||
prepareMediaItemInit( fileObj );
|
||||
} else {
|
||||
// New style: server data is just the attachment ID, fetch the thumbnail and form html from the server.
|
||||
item.load( 'async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit( fileObj );updateMediaForm();});
|
||||
}
|
||||
}
|
||||
|
||||
function prepareMediaItemInit( fileObj ) {
|
||||
var item = jQuery( '#media-item-' + fileObj.id );
|
||||
// Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename.
|
||||
jQuery( '.thumbnail', item ).clone().attr( 'class', 'pinkynail toggle' ).prependTo( item );
|
||||
|
||||
// Replace the original filename with the new (unique) one assigned during upload.
|
||||
jQuery( '.filename.original', item ).replaceWith( jQuery( '.filename.new', item ) );
|
||||
|
||||
// Bind Ajax to the new Delete button.
|
||||
jQuery( 'a.delete', item ).on( 'click', function(){
|
||||
// Tell the server to delete it. TODO: Handle exceptions.
|
||||
jQuery.ajax({
|
||||
url: ajaxurl,
|
||||
type: 'post',
|
||||
success: deleteSuccess,
|
||||
error: deleteError,
|
||||
id: fileObj.id,
|
||||
data: {
|
||||
id : this.id.replace(/[^0-9]/g, '' ),
|
||||
action : 'trash-post',
|
||||
_ajax_nonce : this.href.replace(/^.*wpnonce=/,'' )
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
// Bind Ajax to the new Undo button.
|
||||
jQuery( 'a.undo', item ).on( 'click', function(){
|
||||
// Tell the server to untrash it. TODO: Handle exceptions.
|
||||
jQuery.ajax({
|
||||
url: ajaxurl,
|
||||
type: 'post',
|
||||
id: fileObj.id,
|
||||
data: {
|
||||
id : this.id.replace(/[^0-9]/g,'' ),
|
||||
action: 'untrash-post',
|
||||
_ajax_nonce: this.href.replace(/^.*wpnonce=/,'' )
|
||||
},
|
||||
success: function( ){
|
||||
var type,
|
||||
item = jQuery( '#media-item-' + fileObj.id );
|
||||
|
||||
if ( type = jQuery( '#type-of-' + fileObj.id ).val() )
|
||||
jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text()-0+1 );
|
||||
|
||||
if ( post_id && item.hasClass( 'child-of-'+post_id ) )
|
||||
jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text()-0+1 );
|
||||
|
||||
jQuery( '.filename .trashnotice', item ).remove();
|
||||
jQuery( '.filename .title', item ).css( 'font-weight','normal' );
|
||||
jQuery( 'a.undo', item ).addClass( 'hidden' );
|
||||
jQuery( '.menu_order_input', item ).show();
|
||||
item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery( this ).css({backgroundColor:''}); } }).removeClass( 'undo' );
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
// Open this item if it says to start open (e.g. to display an error).
|
||||
jQuery( '#media-item-' + fileObj.id + '.startopen' ).removeClass( 'startopen' ).addClass( 'open' ).find( 'slidetoggle' ).fadeIn();
|
||||
}
|
||||
|
||||
// Generic error message.
|
||||
function wpQueueError( message ) {
|
||||
jQuery( '#media-upload-error' ).show().html( '<div class="notice notice-error"><p>' + message + '</p></div>' );
|
||||
}
|
||||
|
||||
// File-specific error messages.
|
||||
function wpFileError( fileObj, message ) {
|
||||
itemAjaxError( fileObj.id, message );
|
||||
}
|
||||
|
||||
function itemAjaxError( id, message ) {
|
||||
var item = jQuery( '#media-item-' + id ), filename = item.find( '.filename' ).text(), last_err = item.data( 'last-err' );
|
||||
|
||||
if ( last_err == id ) // Prevent firing an error for the same file twice.
|
||||
return;
|
||||
|
||||
item.html( '<div class="error-div">' +
|
||||
'<a class="dismiss" href="#">' + pluploadL10n.dismiss + '</a>' +
|
||||
'<strong>' + pluploadL10n.error_uploading.replace( '%s', jQuery.trim( filename )) + '</strong> ' +
|
||||
message +
|
||||
'</div>' ).data( 'last-err', id );
|
||||
}
|
||||
|
||||
function deleteSuccess( data ) {
|
||||
var type, id, item;
|
||||
if ( data == '-1' )
|
||||
return itemAjaxError( this.id, 'You do not have permission. Has your session expired?' );
|
||||
|
||||
if ( data == '0' )
|
||||
return itemAjaxError( this.id, 'Could not be deleted. Has it been deleted already?' );
|
||||
|
||||
id = this.id;
|
||||
item = jQuery( '#media-item-' + id );
|
||||
|
||||
// Decrement the counters.
|
||||
if ( type = jQuery( '#type-of-' + id ).val() )
|
||||
jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text() - 1 );
|
||||
|
||||
if ( post_id && item.hasClass( 'child-of-'+post_id ) )
|
||||
jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text() - 1 );
|
||||
|
||||
if ( jQuery( 'form.type-form #media-items' ).children().length == 1 && jQuery( '.hidden', '#media-items' ).length > 0 ) {
|
||||
jQuery( '.toggle' ).toggle();
|
||||
jQuery( '.slidetoggle' ).slideUp( 200 ).siblings().removeClass( 'hidden' );
|
||||
}
|
||||
|
||||
// Vanish it.
|
||||
jQuery( '.toggle', item ).toggle();
|
||||
jQuery( '.slidetoggle', item ).slideUp( 200 ).siblings().removeClass( 'hidden' );
|
||||
item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass( 'undo' );
|
||||
|
||||
jQuery( '.filename:empty', item ).remove();
|
||||
jQuery( '.filename .title', item ).css( 'font-weight','bold' );
|
||||
jQuery( '.filename', item ).append( '<span class="trashnotice"> ' + pluploadL10n.deleted + ' </span>' ).siblings( 'a.toggle' ).hide();
|
||||
jQuery( '.filename', item ).append( jQuery( 'a.undo', item ).removeClass( 'hidden' ) );
|
||||
jQuery( '.menu_order_input', item ).hide();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
function deleteError() {
|
||||
}
|
||||
|
||||
function uploadComplete() {
|
||||
jQuery( '#insert-gallery' ).prop( 'disabled', false );
|
||||
}
|
||||
|
||||
function switchUploader( s ) {
|
||||
if ( s ) {
|
||||
deleteUserSetting( 'uploader' );
|
||||
jQuery( '.media-upload-form' ).removeClass( 'html-uploader' );
|
||||
|
||||
if ( typeof( uploader ) == 'object' )
|
||||
uploader.refresh();
|
||||
|
||||
jQuery( '#plupload-browse-button' ).trigger( 'focus' );
|
||||
} else {
|
||||
setUserSetting( 'uploader', '1' ); // 1 == html uploader.
|
||||
jQuery( '.media-upload-form' ).addClass( 'html-uploader' );
|
||||
jQuery( '#async-upload' ).trigger( 'focus' );
|
||||
}
|
||||
}
|
||||
|
||||
function uploadError( fileObj, errorCode, message, up ) {
|
||||
var hundredmb = 100 * 1024 * 1024, max;
|
||||
|
||||
switch ( errorCode ) {
|
||||
case plupload.FAILED:
|
||||
wpFileError( fileObj, pluploadL10n.upload_failed );
|
||||
break;
|
||||
case plupload.FILE_EXTENSION_ERROR:
|
||||
wpFileExtensionError( up, fileObj, pluploadL10n.invalid_filetype );
|
||||
break;
|
||||
case plupload.FILE_SIZE_ERROR:
|
||||
uploadSizeError( up, fileObj );
|
||||
break;
|
||||
case plupload.IMAGE_FORMAT_ERROR:
|
||||
wpFileError( fileObj, pluploadL10n.not_an_image );
|
||||
break;
|
||||
case plupload.IMAGE_MEMORY_ERROR:
|
||||
wpFileError( fileObj, pluploadL10n.image_memory_exceeded );
|
||||
break;
|
||||
case plupload.IMAGE_DIMENSIONS_ERROR:
|
||||
wpFileError( fileObj, pluploadL10n.image_dimensions_exceeded );
|
||||
break;
|
||||
case plupload.GENERIC_ERROR:
|
||||
wpQueueError( pluploadL10n.upload_failed );
|
||||
break;
|
||||
case plupload.IO_ERROR:
|
||||
max = parseInt( up.settings.filters.max_file_size, 10 );
|
||||
|
||||
if ( max > hundredmb && fileObj.size > hundredmb ) {
|
||||
wpFileError( fileObj, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) );
|
||||
} else {
|
||||
wpQueueError( pluploadL10n.io_error );
|
||||
}
|
||||
|
||||
break;
|
||||
case plupload.HTTP_ERROR:
|
||||
wpQueueError( pluploadL10n.http_error );
|
||||
break;
|
||||
case plupload.INIT_ERROR:
|
||||
jQuery( '.media-upload-form' ).addClass( 'html-uploader' );
|
||||
break;
|
||||
case plupload.SECURITY_ERROR:
|
||||
wpQueueError( pluploadL10n.security_error );
|
||||
break;
|
||||
/* case plupload.UPLOAD_ERROR.UPLOAD_STOPPED:
|
||||
case plupload.UPLOAD_ERROR.FILE_CANCELLED:
|
||||
jQuery( '#media-item-' + fileObj.id ).remove();
|
||||
break;*/
|
||||
default:
|
||||
wpFileError( fileObj, pluploadL10n.default_error );
|
||||
}
|
||||
}
|
||||
|
||||
function uploadSizeError( up, file ) {
|
||||
var message, errorDiv;
|
||||
|
||||
message = pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name );
|
||||
|
||||
// Construct the error div.
|
||||
errorDiv = jQuery( '<div />' )
|
||||
.attr( {
|
||||
'id': 'media-item-' + file.id,
|
||||
'class': 'media-item error'
|
||||
} )
|
||||
.append(
|
||||
jQuery( '<p />' )
|
||||
.text( message )
|
||||
);
|
||||
|
||||
// Append the error.
|
||||
jQuery( '#media-items' ).append( errorDiv );
|
||||
up.removeFile( file );
|
||||
}
|
||||
|
||||
function wpFileExtensionError( up, file, message ) {
|
||||
jQuery( '#media-items' ).append( '<div id="media-item-' + file.id + '" class="media-item error"><p>' + message + '</p></div>' );
|
||||
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();
|
||||
// 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;
|
||||
|
||||
$( '.media-upload-form' ).on( 'click.uploader', function( e ) {
|
||||
var target = $( e.target ), tr, c;
|
||||
|
||||
if ( target.is( 'input[type="radio"]' ) ) { // Remember the last used image size and alignment.
|
||||
tr = target.closest( 'tr' );
|
||||
|
||||
if ( tr.hasClass( 'align' ) )
|
||||
setUserSetting( 'align', target.val() );
|
||||
else if ( tr.hasClass( 'image-size' ) )
|
||||
setUserSetting( 'imgsize', target.val() );
|
||||
|
||||
} else if ( target.is( 'button.button' ) ) { // Remember the last used image link url.
|
||||
c = e.target.className || '';
|
||||
c = c.match( /url([^ '"]+)/ );
|
||||
|
||||
if ( c && c[1] ) {
|
||||
setUserSetting( 'urlbutton', c[1] );
|
||||
target.siblings( '.urlfield' ).val( target.data( 'link-url' ) );
|
||||
}
|
||||
} else if ( target.is( 'a.dismiss' ) ) {
|
||||
target.parents( '.media-item' ).fadeOut( 200, function() {
|
||||
$( this ).remove();
|
||||
} );
|
||||
} else if ( target.is( '.upload-flash-bypass button' ) || target.is( 'a.uploader-html' ) ) { // Switch uploader to html4.
|
||||
$( '#media-items, p.submit, span.big-file-warning' ).css( 'display', 'none' );
|
||||
switchUploader( 0 );
|
||||
e.preventDefault();
|
||||
} else if ( target.is( '.upload-html-bypass button' ) ) { // Switch uploader to multi-file.
|
||||
$( '#media-items, p.submit, span.big-file-warning' ).css( 'display', '' );
|
||||
switchUploader( 1 );
|
||||
e.preventDefault();
|
||||
} else if ( target.is( 'a.describe-toggle-on' ) ) { // Show.
|
||||
target.parent().addClass( 'open' );
|
||||
target.siblings( '.slidetoggle' ).fadeIn( 250, function() {
|
||||
var S = $( window ).scrollTop(),
|
||||
H = $( window ).height(),
|
||||
top = $( this ).offset().top,
|
||||
h = $( this ).height(),
|
||||
b,
|
||||
B;
|
||||
|
||||
if ( H && top && h ) {
|
||||
b = top + h;
|
||||
B = S + H;
|
||||
|
||||
if ( b > B ) {
|
||||
if ( b - B < top - S )
|
||||
window.scrollBy( 0, ( b - B ) + 10 );
|
||||
else
|
||||
window.scrollBy( 0, top - S - 40 );
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
e.preventDefault();
|
||||
} else if ( target.is( 'a.describe-toggle-off' ) ) { // Hide.
|
||||
target.siblings( '.slidetoggle' ).fadeOut( 250, function() {
|
||||
target.parent().removeClass( 'open' );
|
||||
} );
|
||||
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// Attempt to create image sub-sizes when an image was uploaded successfully
|
||||
// but the server responded with an HTTP 5xx error.
|
||||
tryAgain = function( up, error ) {
|
||||
var file = error.file;
|
||||
var times;
|
||||
var id;
|
||||
|
||||
if ( ! error || ! error.responseHeaders ) {
|
||||
wpQueueError( pluploadL10n.http_error_image );
|
||||
return;
|
||||
}
|
||||
|
||||
id = error.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i );
|
||||
|
||||
if ( id && id[1] ) {
|
||||
id = id[1];
|
||||
} else {
|
||||
wpQueueError( pluploadL10n.http_error_image );
|
||||
return;
|
||||
}
|
||||
|
||||
times = tryAgainCount[ file.id ];
|
||||
|
||||
if ( times && times > 4 ) {
|
||||
/*
|
||||
* The file may have been uploaded and attachment post created,
|
||||
* but post-processing and resizing failed...
|
||||
* Do a cleanup then tell the user to scale down the image and upload it again.
|
||||
*/
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ajaxurl,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
action: 'media-create-image-subsizes',
|
||||
_wpnonce: wpUploaderInit.multipart_params._wpnonce,
|
||||
attachment_id: id,
|
||||
_wp_upload_failed_cleanup: true,
|
||||
}
|
||||
});
|
||||
|
||||
if ( error.message && ( error.status < 500 || error.status >= 600 ) ) {
|
||||
wpQueueError( error.message );
|
||||
} else {
|
||||
wpQueueError( pluploadL10n.http_error_image );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! times ) {
|
||||
tryAgainCount[ file.id ] = 1;
|
||||
} else {
|
||||
tryAgainCount[ file.id ] = ++times;
|
||||
}
|
||||
|
||||
// Try to create the missing image sizes.
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ajaxurl,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
action: 'media-create-image-subsizes',
|
||||
_wpnonce: wpUploaderInit.multipart_params._wpnonce,
|
||||
attachment_id: id,
|
||||
_legacy_support: 'true',
|
||||
}
|
||||
}).done( function( response ) {
|
||||
var message;
|
||||
|
||||
if ( response.success ) {
|
||||
uploadSuccess( file, response.data.id );
|
||||
} else {
|
||||
if ( response.data && response.data.message ) {
|
||||
message = response.data.message;
|
||||
}
|
||||
|
||||
wpQueueError( message || pluploadL10n.http_error_image );
|
||||
}
|
||||
}).fail( function( jqXHR ) {
|
||||
// If another HTTP 5xx error, try try again...
|
||||
if ( jqXHR.status >= 500 && jqXHR.status < 600 ) {
|
||||
tryAgain( up, error );
|
||||
return;
|
||||
}
|
||||
|
||||
wpQueueError( pluploadL10n.http_error_image );
|
||||
});
|
||||
}
|
||||
|
||||
// Init and set the uploader.
|
||||
uploader_init = function() {
|
||||
uploader = new plupload.Uploader( wpUploaderInit );
|
||||
|
||||
$( '#image_resize' ).on( 'change', function() {
|
||||
var arg = $( this ).prop( 'checked' );
|
||||
|
||||
setResize( arg );
|
||||
|
||||
if ( arg )
|
||||
setUserSetting( 'upload_resize', '1' );
|
||||
else
|
||||
deleteUserSetting( 'upload_resize' );
|
||||
});
|
||||
|
||||
uploader.bind( 'Init', function( up ) {
|
||||
var uploaddiv = $( '#plupload-upload-ui' );
|
||||
|
||||
setResize( getUserSetting( 'upload_resize', false ) );
|
||||
|
||||
if ( up.features.dragdrop && ! $( document.body ).hasClass( 'mobile' ) ) {
|
||||
uploaddiv.addClass( 'drag-drop' );
|
||||
|
||||
$( '#drag-drop-area' ).on( 'dragover.wp-uploader', function() { // dragenter doesn't fire right :(
|
||||
uploaddiv.addClass( 'drag-over' );
|
||||
}).on( 'dragleave.wp-uploader, drop.wp-uploader', function() {
|
||||
uploaddiv.removeClass( 'drag-over' );
|
||||
});
|
||||
} else {
|
||||
uploaddiv.removeClass( 'drag-drop' );
|
||||
$( '#drag-drop-area' ).off( '.wp-uploader' );
|
||||
}
|
||||
|
||||
if ( up.runtime === 'html4' ) {
|
||||
$( '.upload-flash-bypass' ).hide();
|
||||
}
|
||||
});
|
||||
|
||||
uploader.bind( 'postinit', function( up ) {
|
||||
up.refresh();
|
||||
});
|
||||
|
||||
uploader.init();
|
||||
|
||||
uploader.bind( 'FilesAdded', function( up, files ) {
|
||||
$( '#media-upload-error' ).empty();
|
||||
uploadStart();
|
||||
|
||||
plupload.each( files, function( file ) {
|
||||
if ( file.type === 'image/heic' && up.settings.heic_upload_error ) {
|
||||
// Show error but do not block uploading.
|
||||
wpQueueError( pluploadL10n.unsupported_image );
|
||||
} else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) {
|
||||
// Disallow uploading of WebP images if the server cannot edit them.
|
||||
wpQueueError( pluploadL10n.noneditable_image );
|
||||
up.removeFile( file );
|
||||
return;
|
||||
} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
|
||||
// Disallow uploading of AVIF images if the server cannot edit them.
|
||||
wpQueueError( pluploadL10n.noneditable_image );
|
||||
up.removeFile( file );
|
||||
return;
|
||||
}
|
||||
|
||||
fileQueued( file );
|
||||
});
|
||||
|
||||
up.refresh();
|
||||
up.start();
|
||||
});
|
||||
|
||||
uploader.bind( 'UploadFile', function( up, file ) {
|
||||
fileUploading( up, file );
|
||||
});
|
||||
|
||||
uploader.bind( 'UploadProgress', function( up, file ) {
|
||||
uploadProgress( up, file );
|
||||
});
|
||||
|
||||
uploader.bind( 'Error', function( up, error ) {
|
||||
var isImage = error.file && error.file.type && error.file.type.indexOf( 'image/' ) === 0;
|
||||
var status = error && error.status;
|
||||
|
||||
// If the file is an image and the error is HTTP 5xx try to create sub-sizes again.
|
||||
if ( isImage && status >= 500 && status < 600 ) {
|
||||
tryAgain( up, error );
|
||||
return;
|
||||
}
|
||||
|
||||
uploadError( error.file, error.code, error.message, up );
|
||||
up.refresh();
|
||||
});
|
||||
|
||||
uploader.bind( 'FileUploaded', function( up, file, response ) {
|
||||
uploadSuccess( file, response.response );
|
||||
});
|
||||
|
||||
uploader.bind( 'UploadComplete', function() {
|
||||
uploadComplete();
|
||||
});
|
||||
};
|
||||
|
||||
if ( typeof( wpUploaderInit ) == 'object' ) {
|
||||
uploader_init();
|
||||
}
|
||||
|
||||
});
|
||||
+1
@@ -0,0 +1 @@
|
||||
var uploader,uploader_init,topWin=window.dialogArguments||opener||parent||top;function fileQueued(e){jQuery(".media-blank").remove();var a=jQuery("#media-items").children(),r=post_id||0;1==a.length&&a.removeClass("open").find(".slidetoggle").slideUp(200),jQuery('<div class="media-item">').attr("id","media-item-"+e.id).addClass("child-of-"+r).append(jQuery('<div class="filename original">').text(" "+e.name),'<div class="progress"><div class="percent">0%</div><div class="bar"></div></div>').appendTo(jQuery("#media-items")),jQuery("#insert-gallery").prop("disabled",!0)}function uploadStart(){try{void 0!==topWin.tb_remove&&topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}catch(e){}return!0}function uploadProgress(e,a){var r=jQuery("#media-item-"+a.id);jQuery(".bar",r).width(200*a.loaded/a.size),jQuery(".percent",r).html(a.percent+"%")}function fileUploading(e,a){var r=104857600;r<parseInt(e.settings.max_file_size,10)&&a.size>r&&setTimeout(function(){a.status<3&&0===a.loaded&&(wpFileError(a,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>")),e.stop(),e.removeFile(a),e.start())},1e4)}function updateMediaForm(){var e=jQuery("#media-items").children();1==e.length?(e.addClass("open").find(".slidetoggle").show(),jQuery(".insert-gallery").hide()):1<e.length&&(e.removeClass("open"),jQuery(".insert-gallery").show()),0<e.not(".media-blank").length?jQuery(".savebutton").show():jQuery(".savebutton").hide()}function uploadSuccess(e,a){var r=jQuery("#media-item-"+e.id);"string"==typeof a&&(a=a.replace(/^<pre>(\d+)<\/pre>$/,"$1"),/media-upload-error|error-div/.test(a))?r.html(a):(r.find(".percent").html(pluploadL10n.crunching),prepareMediaItem(e,a),updateMediaForm(),post_id&&r.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(+jQuery("#attachments-count").text()+1))}function setResize(e){e?window.resize_width&&window.resize_height?uploader.settings.resize={enabled:!0,width:window.resize_width,height:window.resize_height,quality:100}:uploader.settings.multipart_params.image_resize=!0:delete uploader.settings.multipart_params.image_resize}function prepareMediaItem(e,a){var r="undefined"==typeof shortform?1:2,t=jQuery("#media-item-"+e.id);2==r&&2<shortform&&(r=shortform);try{void 0!==topWin.tb_remove&&topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}catch(e){}isNaN(a)||!a?(t.append(a),prepareMediaItemInit(e)):t.load("async-upload.php",{attachment_id:a,fetch:r},function(){prepareMediaItemInit(e),updateMediaForm()})}function prepareMediaItemInit(r){var e=jQuery("#media-item-"+r.id);jQuery(".thumbnail",e).clone().attr("class","pinkynail toggle").prependTo(e),jQuery(".filename.original",e).replaceWith(jQuery(".filename.new",e)),jQuery("a.delete",e).on("click",function(){return jQuery.ajax({url:ajaxurl,type:"post",success:deleteSuccess,error:deleteError,id:r.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}}),!1}),jQuery("a.undo",e).on("click",function(){return jQuery.ajax({url:ajaxurl,type:"post",id:r.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(){var e,a=jQuery("#media-item-"+r.id);(e=jQuery("#type-of-"+r.id).val())&&jQuery("#"+e+"-counter").text(+jQuery("#"+e+"-counter").text()+1),post_id&&a.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(+jQuery("#attachments-count").text()+1),jQuery(".filename .trashnotice",a).remove(),jQuery(".filename .title",a).css("font-weight","normal"),jQuery("a.undo",a).addClass("hidden"),jQuery(".menu_order_input",a).show(),a.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:!1,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}}),!1}),jQuery("#media-item-"+r.id+".startopen").removeClass("startopen").addClass("open").find("slidetoggle").fadeIn()}function wpQueueError(e){jQuery("#media-upload-error").show().html('<div class="notice notice-error"><p>'+e+"</p></div>")}function wpFileError(e,a){itemAjaxError(e.id,a)}function itemAjaxError(e,a){var r=jQuery("#media-item-"+e),t=r.find(".filename").text();r.data("last-err")!=e&&r.html('<div class="error-div"><a class="dismiss" href="#">'+pluploadL10n.dismiss+"</a><strong>"+pluploadL10n.error_uploading.replace("%s",jQuery.trim(t))+"</strong> "+a+"</div>").data("last-err",e)}function deleteSuccess(e){var a;return"-1"==e?itemAjaxError(this.id,"You do not have permission. Has your session expired?"):"0"==e?itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?"):(e=this.id,a=jQuery("#media-item-"+e),(e=jQuery("#type-of-"+e).val())&&jQuery("#"+e+"-counter").text(jQuery("#"+e+"-counter").text()-1),post_id&&a.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1),1==jQuery("form.type-form #media-items").children().length&&0<jQuery(".hidden","#media-items").length&&(jQuery(".toggle").toggle()Line truncated
|
||||
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
File diff suppressed because it is too large.
Load diff
Vendored
+1
@@ -0,0 +1 @@
|
||||
var MXI_DEBUG=!1;!function(o,x){"use strict";var s={};function n(e,t){for(var i,n=[],r=0;r<e.length;++r){if(!(i=s[e[r]]||function(e){for(var t=o,i=e.split(/[.\/]/),n=0;n<i.length;++n){if(!t[i[n]])return;t=t[i[n]]}return t}(e[r])))throw"module definition dependecy not found: "+e[r];n.push(i)}t.apply(null,n)}function e(e,t,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(t===x)throw"invalid module definition, dependencies must be specified";if(i===x)throw"invalid module definition, definition function must be specified";n(t,function(){s[e]=i.apply(null,arguments)})}e("moxie/core/utils/Basic",[],function(){function n(i){return s(arguments,function(e,t){0<t&&s(e,function(e,t){void 0!==e&&(o(i[t])===o(e)&&~r(o(e),["array","object"])?n(i[t],e):i[t]=e)})}),i}function s(e,t){var i,n,r;if(e)if("number"===o(e.length)){for(r=0,i=e.length;r<i;r++)if(!1===t(e[r],r))return}else if("object"===o(e))for(n in e)if(e.hasOwnProperty(n)&&!1===t(e[n],n))return}function r(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}var o=function(e){return void 0===e?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()};a=0;var a;return{guid:function(e){for(var t=(new Date).getTime().toString(32),i=0;i<5;i++)t+=Math.floor(65535*Math.random()).toString(32);return(e||"o_")+t+(a++).toString(32)},typeOf:o,extend:n,each:s,isEmptyObj:function(e){if(e&&"object"===o(e))for(var t in e)return!1;return!0},inSeries:function(e,n){var r=e.length;"function"!==o(n)&&(n=function(){}),e&&e.length||n(),function t(i){"function"===o(e[i])&&e[i](function(e){++i<r&&!e?t(i):n(e)})}(0)},inParallel:function(e,i){var n=0,r=e.length,o=new Array(r);s(e,function(e,t){e(function(e){if(e)return i(e);e=[].slice.call(arguments);e.shift(),o[t]=e,++n===r&&(o.unshift(null),i.apply(this,o))})})},inArray:r,arrayDiff:function(e,t){var i,n=[];for(i in"array"!==o(e)&&(e=[e]),"array"!==o(t)&&(t=[t]),e)-1===r(e[i],t)&&n.push(e[i]);return!!n.length&&n},arrayIntersect:function(e,t){var i=[];return s(e,function(e){-1!==r(e,t)&&i.push(e)}),i.length?i:null},toArray:function(e){for(var t=[],i=0;i<e.length;i++)t[i]=e[i];return t},trim:function(e){return e&&(String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""))},sprintf:function(e){var t=[].slice.call(arguments,1);return e.replace(/%[a-z]/g,function(){var e=t.shift();return"undefined"!==o(e)?e:""})},parseSizeStr:function(e){var t,i;return"string"!=typeof e?e:(t={t:1099511627776,g:1073741824,m:1048576,k:1024},i=(e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")))[2],e=+e[1],t.hasOwnProperty(i)&&(e*=t[i]),Math.floor(e))}}}),e("moxie/core/utils/Env",["moxie/core/utils/Basic"],function(n){m="function",h="object",r=function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},o={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[a="name",c="version"],[/\s(opr)\/([\w\.]+)/i],[[a,"Opera"],c],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i],[a,c],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[a,"IE"],c],[/(edge)\/((\d+)?[\w\.]+)/i],[a,c],[/(yabrowser)\/([\w\.]+)/i],[[a,"Yandex"],c],[/(comodo_dragon)\/([\w\.]+)/i],[[a,/_/g," "],c],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,/(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i],[a,c],[/(dolfin)\/([\w\.]+)/i],[[a,"Dolphin"],c],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[a,"Chrome"],c],[/XiaoMi\/MiuiBrowser\/([\w\.]+)/i],[c,[a,"MIUI Browser"]],[/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i],[c,[a,"Android Browser"]],[/FBAV\/([\w\.]+);/i],[c,[a,"Facebook"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[c,[a,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[c,a],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[a,[c,(i={rgx:function(){for(var e,t,i,n,r,o,s,a=0,u=arguments;a<u.length;a+=2){var c=u[a],l=u[a+1];if(void 0===e)for(n in e={},l)typeof(r=l[n])==h?e[r[0]]=d:e[r]=d;for(t=i=0;t<c.length;t++)if(o=c[t].exec(this.getUA())){for(n=0;n<l.length;n++)s=o[++i],typeof(r=l[n])==h&&0<r.length?2==r.length?typeof r[1]==m?e[r[0]]=r[1].call(this,s):e[r[0]]=r[1]:3==r.length?typeof r[1]!=m||r[1].exec&&r[1].test?e[r[0]]=s?s.replace(r[1],r[2]):d:e[r[0]]=s?r[1].call(this,s,r[2]):d:4==r.length&&(e[r[0]]=s?r[3].call(this,s.replace(r[1],r[2])):d):e[r]=s||d;break}if(o)break}return e},str:function(e,t){for(var i in t)if(typeof t[i]==h&&0<t[i].length){for(var n=0;n<t[i].length;n++)if(r(t[i][n],e))return"?"===i?d:i}else if(r(t[i],e))return"?"===i?d:i;return e}}).sLine truncated
|
||||
File diff suppressed because it is too large.
Load diff
+1
@@ -0,0 +1 @@
|
||||
!function(e,I,S){var T=e.setTimeout,D={};function w(e){var t=e.required_features,r={};function i(e,t,i){var n={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};n[e]?r[n[e]]=t:i||(r[e]=t)}return"string"==typeof t?F.each(t.split(/\s*,\s*/),function(e){i(e,!0)}):"object"==typeof t?F.each(t,function(e,t){i(t,e)}):!0===t&&(0<e.chunk_size&&(r.slice_blob=!0),!e.resize.enabled&&e.multipart||(r.send_binary_string=!0),F.each(e,function(e,t){i(t,!!e,!0)})),e.runtimes="html5,html4",r}var t,F={VERSION:"2.1.9",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:I.mimes,ua:I.ua,typeOf:I.typeOf,extend:I.extend,guid:I.guid,getAll:function(e){for(var t,i=[],n=(e="array"!==F.typeOf(e)?[e]:e).length;n--;)(t=F.get(e[n]))&&i.push(t);return i.length?i:null},get:I.get,each:I.each,getPos:I.getPos,getSize:I.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"};return e&&(""+e).replace(/[<>&\"\']/g,function(e){return t[e]?"&"+t[e]+";":e})},toArray:I.toArray,inArray:I.inArray,addI18n:I.addI18n,translate:I.translate,isEmptyObj:I.isEmptyObj,hasClass:I.hasClass,addClass:I.addClass,removeClass:I.removeClass,getStyle:I.getStyle,addEvent:I.addEvent,removeEvent:I.removeEvent,removeAllEvents:I.removeAllEvents,cleanName:function(e){for(var t=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"],i=0;i<t.length;i+=2)e=e.replace(t[i],t[i+1]);return e=(e=e.replace(/\s+/g,"_")).replace(/[^a-z0-9_\-\.]+/gi,"")},buildUrl:function(e,t){var i="";return F.each(t,function(e,t){i+=(i?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),i&&(e+=(0<e.indexOf("?")?"&":"?")+i),e},formatSize:function(e){var t;return e===S||/\D/.test(e)?F.translate("N/A"):(t=Math.pow(1024,4))<e?i(e/t,1)+" "+F.translate("tb"):e>(t/=1024)?i(e/t,1)+" "+F.translate("gb"):e>(t/=1024)?i(e/t,1)+" "+F.translate("mb"):1024<e?Math.round(e/1024)+" "+F.translate("kb"):e+" "+F.translate("b");function i(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}},parseSize:I.parseSizeStr,predictRuntime:function(e,t){var i=new F.Uploader(e),t=I.Runtime.thatCan(i.getOption().required_features,t||e.runtimes);return i.destroy(),t},addFileFilter:function(e,t){D[e]=t}};F.addFileFilter("mime_types",function(e,t,i){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:F.FILE_EXTENSION_ERROR,message:F.translate("File extension error."),file:t}),i(!1)):i(!0)}),F.addFileFilter("max_file_size",function(e,t,i){e=F.parseSize(e),void 0!==t.size&&e&&t.size>e?(this.trigger("Error",{code:F.FILE_SIZE_ERROR,message:F.translate("File size error."),file:t}),i(!1)):i(!0)}),F.addFileFilter("prevent_duplicates",function(e,t,i){if(e)for(var n=this.files.length;n--;)if(t.name===this.files[n].name&&t.size===this.files[n].size)return this.trigger("Error",{code:F.FILE_DUPLICATE_ERROR,message:F.translate("Duplicate file error."),file:t}),void i(!1);i(!0)}),F.Uploader=function(e){var u,i,n,p,t=F.guid(),l=[],h={},o=[],d=[],c=!1;function r(){var e,t,i=0;if(this.state==F.STARTED){for(t=0;t<l.length;t++)e||l[t].status!=F.QUEUED?i++:(e=l[t],this.trigger("BeforeUpload",e)&&(e.status=F.UPLOADING,this.trigger("UploadFile",e)));i==l.length&&(this.state!==F.STOPPED&&(this.state=F.STOPPED,this.trigger("StateChanged")),this.trigger("UploadComplete",l))}}function s(e){e.percent=0<e.size?Math.ceil(e.loaded/e.size*100):100,a()}function a(){var e,t;for(n.reset(),e=0;e<l.length;e++)(t=l[e]).size!==S?(n.size+=t.origSize,n.loaded+=t.loaded*t.origSize/t.size):n.size=S,t.status==F.DONE?n.uploaded++:t.status==F.FAILED?n.failed++:n.queued++;n.size===S?n.percent=0<l.length?Math.ceil(n.uploaded/l.length*100):0:(n.bytesPerSec=Math.ceil(n.loaded/((+new Date-i||1)/1e3)),n.percent=0<n.size?Math.ceil(n.loaded/n.size*100):0)}function f(){var e=o[0]||d[0];return!!e&&e.getRuntime().uid}function g(n,e){var r=this,s=0,t=[],a={runtime_order:n.runtimes,required_caps:n.required_features,preferred_caps:h};F.each(n.runtimes.split(/\s*,\s*/),function(e){n[e]&&(a[e]=n[e])}),n.browse_button&&F.each(n.browse_button,function(i){t.push(function(t){var e=new I.FileInput(F.extend({},a,{accept:n.filters.mime_types,name:n.file_data_name,multiple:n.multi_selection,container:n.container,browse_button:i}));e.onready=function(){var e=I.Runtime.getInfo(this.ruid);I.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_mLine truncated
|
||||
@@ -0,0 +1,581 @@
|
||||
/* global pluploadL10n, plupload, _wpPluploadSettings */
|
||||
|
||||
/**
|
||||
* @namespace wp
|
||||
*/
|
||||
window.wp = window.wp || {};
|
||||
|
||||
( function( exports, $ ) {
|
||||
var Uploader;
|
||||
|
||||
if ( typeof _wpPluploadSettings === 'undefined' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* A WordPress uploader.
|
||||
*
|
||||
* The Plupload library provides cross-browser uploader UI integration.
|
||||
* This object bridges the Plupload API to integrate uploads into the
|
||||
* WordPress back end and the WordPress media experience.
|
||||
*
|
||||
* @class
|
||||
* @memberOf wp
|
||||
* @alias wp.Uploader
|
||||
*
|
||||
* @param {object} options The options passed to the new plupload instance.
|
||||
* @param {object} options.container The id of uploader container.
|
||||
* @param {object} options.browser The id of button to trigger the file select.
|
||||
* @param {object} options.dropzone The id of file drop target.
|
||||
* @param {object} options.plupload An object of parameters to pass to the plupload instance.
|
||||
* @param {object} options.params An object of parameters to pass to $_POST when uploading the file.
|
||||
* Extends this.plupload.multipart_params under the hood.
|
||||
*/
|
||||
Uploader = function( options ) {
|
||||
var self = this,
|
||||
isIE, // Not used, back-compat.
|
||||
elements = {
|
||||
container: 'container',
|
||||
browser: 'browse_button',
|
||||
dropzone: 'drop_element'
|
||||
},
|
||||
tryAgainCount = {},
|
||||
tryAgain,
|
||||
key,
|
||||
error,
|
||||
fileUploaded;
|
||||
|
||||
this.supports = {
|
||||
upload: Uploader.browser.supported
|
||||
};
|
||||
|
||||
this.supported = this.supports.upload;
|
||||
|
||||
if ( ! this.supported ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Arguments to send to pluplad.Uploader().
|
||||
// Use deep extend to ensure that multipart_params and other objects are cloned.
|
||||
this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults );
|
||||
this.container = document.body; // Set default container.
|
||||
|
||||
/*
|
||||
* Extend the instance with options.
|
||||
*
|
||||
* Use deep extend to allow options.plupload to override individual
|
||||
* default plupload keys.
|
||||
*/
|
||||
$.extend( true, this, options );
|
||||
|
||||
// Proxy all methods so this always refers to the current instance.
|
||||
for ( key in this ) {
|
||||
if ( typeof this[ key ] === 'function' ) {
|
||||
this[ key ] = $.proxy( this[ key ], this );
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure all elements are jQuery elements and have id attributes,
|
||||
// then set the proper plupload arguments to the ids.
|
||||
for ( key in elements ) {
|
||||
if ( ! this[ key ] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
this[ key ] = $( this[ key ] ).first();
|
||||
|
||||
if ( ! this[ key ].length ) {
|
||||
delete this[ key ];
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ! this[ key ].prop('id') ) {
|
||||
this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ );
|
||||
}
|
||||
|
||||
this.plupload[ elements[ key ] ] = this[ key ].prop('id');
|
||||
}
|
||||
|
||||
// If the uploader has neither a browse button nor a dropzone, bail.
|
||||
if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize the plupload instance.
|
||||
this.uploader = new plupload.Uploader( this.plupload );
|
||||
delete this.plupload;
|
||||
|
||||
// Set default params and remove this.params alias.
|
||||
this.param( this.params || {} );
|
||||
delete this.params;
|
||||
|
||||
/**
|
||||
* Attempt to create image sub-sizes when an image was uploaded successfully
|
||||
* but the server responded with HTTP 5xx error.
|
||||
*
|
||||
* @since 5.3.0
|
||||
*
|
||||
* @param {string} message Error message.
|
||||
* @param {object} data Error data from Plupload.
|
||||
* @param {plupload.File} file File that was uploaded.
|
||||
*/
|
||||
tryAgain = function( message, data, file ) {
|
||||
var times, id;
|
||||
|
||||
if ( ! data || ! data.responseHeaders ) {
|
||||
error( pluploadL10n.http_error_image, data, file, 'no-retry' );
|
||||
return;
|
||||
}
|
||||
|
||||
id = data.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i );
|
||||
|
||||
if ( id && id[1] ) {
|
||||
id = id[1];
|
||||
} else {
|
||||
error( pluploadL10n.http_error_image, data, file, 'no-retry' );
|
||||
return;
|
||||
}
|
||||
|
||||
times = tryAgainCount[ file.id ];
|
||||
|
||||
if ( times && times > 4 ) {
|
||||
/*
|
||||
* The file may have been uploaded and attachment post created,
|
||||
* but post-processing and resizing failed...
|
||||
* Do a cleanup then tell the user to scale down the image and upload it again.
|
||||
*/
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ajaxurl,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
action: 'media-create-image-subsizes',
|
||||
_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
|
||||
attachment_id: id,
|
||||
_wp_upload_failed_cleanup: true,
|
||||
}
|
||||
});
|
||||
|
||||
error( message, data, file, 'no-retry' );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! times ) {
|
||||
tryAgainCount[ file.id ] = 1;
|
||||
} else {
|
||||
tryAgainCount[ file.id ] = ++times;
|
||||
}
|
||||
|
||||
// Another request to try to create the missing image sub-sizes.
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ajaxurl,
|
||||
dataType: 'json',
|
||||
data: {
|
||||
action: 'media-create-image-subsizes',
|
||||
_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
|
||||
attachment_id: id,
|
||||
}
|
||||
}).done( function( response ) {
|
||||
if ( response.success ) {
|
||||
fileUploaded( self.uploader, file, response );
|
||||
} else {
|
||||
if ( response.data && response.data.message ) {
|
||||
message = response.data.message;
|
||||
}
|
||||
|
||||
error( message, data, file, 'no-retry' );
|
||||
}
|
||||
}).fail( function( jqXHR ) {
|
||||
// If another HTTP 5xx error, try try again...
|
||||
if ( jqXHR.status >= 500 && jqXHR.status < 600 ) {
|
||||
tryAgain( message, data, file );
|
||||
return;
|
||||
}
|
||||
|
||||
error( message, data, file, 'no-retry' );
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom error callback.
|
||||
*
|
||||
* Add a new error to the errors collection, so other modules can track
|
||||
* and display errors. @see wp.Uploader.errors.
|
||||
*
|
||||
* @param {string} message Error message.
|
||||
* @param {object} data Error data from Plupload.
|
||||
* @param {plupload.File} file File that was uploaded.
|
||||
* @param {string} retry Whether to try again to create image sub-sizes. Passing 'no-retry' will prevent it.
|
||||
*/
|
||||
error = function( message, data, file, retry ) {
|
||||
var isImage = file.type && file.type.indexOf( 'image/' ) === 0,
|
||||
status = data && data.status;
|
||||
|
||||
// If the file is an image and the error is HTTP 5xx try to create sub-sizes again.
|
||||
if ( retry !== 'no-retry' && isImage && status >= 500 && status < 600 ) {
|
||||
tryAgain( message, data, file );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( file.attachment ) {
|
||||
file.attachment.destroy();
|
||||
}
|
||||
|
||||
Uploader.errors.unshift({
|
||||
message: message || pluploadL10n.default_error,
|
||||
data: data,
|
||||
file: file
|
||||
});
|
||||
|
||||
self.error( message, data, file );
|
||||
};
|
||||
|
||||
/**
|
||||
* After a file is successfully uploaded, update its model.
|
||||
*
|
||||
* @param {plupload.Uploader} up Uploader instance.
|
||||
* @param {plupload.File} file File that was uploaded.
|
||||
* @param {Object} response Object with response properties.
|
||||
*/
|
||||
fileUploaded = function( up, file, response ) {
|
||||
var complete;
|
||||
|
||||
// Remove the "uploading" UI elements.
|
||||
_.each( ['file','loaded','size','percent'], function( key ) {
|
||||
file.attachment.unset( key );
|
||||
} );
|
||||
|
||||
file.attachment.set( _.extend( response.data, { uploading: false } ) );
|
||||
|
||||
wp.media.model.Attachment.get( response.data.id, file.attachment );
|
||||
|
||||
complete = Uploader.queue.all( function( attachment ) {
|
||||
return ! attachment.get( 'uploading' );
|
||||
});
|
||||
|
||||
if ( complete ) {
|
||||
Uploader.queue.reset();
|
||||
}
|
||||
|
||||
self.success( file.attachment );
|
||||
}
|
||||
|
||||
/**
|
||||
* After the Uploader has been initialized, initialize some behaviors for the dropzone.
|
||||
*
|
||||
* @param {plupload.Uploader} uploader Uploader instance.
|
||||
*/
|
||||
this.uploader.bind( 'init', function( uploader ) {
|
||||
var timer, active, dragdrop,
|
||||
dropzone = self.dropzone;
|
||||
|
||||
dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile;
|
||||
|
||||
// Generate drag/drop helper classes.
|
||||
if ( ! dropzone ) {
|
||||
return;
|
||||
}
|
||||
|
||||
dropzone.toggleClass( 'supports-drag-drop', !! dragdrop );
|
||||
|
||||
if ( ! dragdrop ) {
|
||||
return dropzone.unbind('.wp-uploader');
|
||||
}
|
||||
|
||||
// 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'.
|
||||
dropzone.on( 'dragover.wp-uploader', function() {
|
||||
if ( timer ) {
|
||||
clearTimeout( timer );
|
||||
}
|
||||
|
||||
if ( active ) {
|
||||
return;
|
||||
}
|
||||
|
||||
dropzone.trigger('dropzone:enter').addClass('drag-over');
|
||||
active = true;
|
||||
});
|
||||
|
||||
dropzone.on('dragleave.wp-uploader, drop.wp-uploader', function() {
|
||||
/*
|
||||
* Using an instant timer prevents the drag-over class
|
||||
* from being quickly removed and re-added when elements
|
||||
* inside the dropzone are repositioned.
|
||||
*
|
||||
* @see https://core.trac.wordpress.org/ticket/21705
|
||||
*/
|
||||
timer = setTimeout( function() {
|
||||
active = false;
|
||||
dropzone.trigger('dropzone:leave').removeClass('drag-over');
|
||||
}, 0 );
|
||||
});
|
||||
|
||||
self.ready = true;
|
||||
$(self).trigger( 'uploader:ready' );
|
||||
});
|
||||
|
||||
this.uploader.bind( 'postinit', function( up ) {
|
||||
up.refresh();
|
||||
self.init();
|
||||
});
|
||||
|
||||
this.uploader.init();
|
||||
|
||||
if ( this.browser ) {
|
||||
this.browser.on( 'mouseenter', this.refresh );
|
||||
} else {
|
||||
this.uploader.disableBrowse( true );
|
||||
}
|
||||
|
||||
$( self ).on( 'uploader:ready', function() {
|
||||
$( '.moxie-shim-html5 input[type="file"]' )
|
||||
.attr( {
|
||||
tabIndex: '-1',
|
||||
'aria-hidden': 'true'
|
||||
} );
|
||||
} );
|
||||
|
||||
/**
|
||||
* After files were filtered and added to the queue, create a model for each.
|
||||
*
|
||||
* @param {plupload.Uploader} up Uploader instance.
|
||||
* @param {Array} files Array of file objects that were added to queue by the user.
|
||||
*/
|
||||
this.uploader.bind( 'FilesAdded', function( up, files ) {
|
||||
_.each( files, function( file ) {
|
||||
var attributes, image;
|
||||
|
||||
// Ignore failed uploads.
|
||||
if ( plupload.FAILED === file.status ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( file.type === 'image/heic' && up.settings.heic_upload_error ) {
|
||||
// Show error but do not block uploading.
|
||||
Uploader.errors.unshift({
|
||||
message: pluploadL10n.unsupported_image,
|
||||
data: {},
|
||||
file: file
|
||||
});
|
||||
} else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) {
|
||||
// Disallow uploading of WebP images if the server cannot edit them.
|
||||
error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
|
||||
up.removeFile( file );
|
||||
return;
|
||||
} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
|
||||
// Disallow uploading of AVIF images if the server cannot edit them.
|
||||
error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
|
||||
up.removeFile( file );
|
||||
return;
|
||||
}
|
||||
|
||||
// Generate attributes for a new `Attachment` model.
|
||||
attributes = _.extend({
|
||||
file: file,
|
||||
uploading: true,
|
||||
date: new Date(),
|
||||
filename: file.name,
|
||||
menuOrder: 0,
|
||||
uploadedTo: wp.media.model.settings.post.id
|
||||
}, _.pick( file, 'loaded', 'size', 'percent' ) );
|
||||
|
||||
// Handle early mime type scanning for images.
|
||||
image = /(?:jpe?g|png|gif)$/i.exec( file.name );
|
||||
|
||||
// For images set the model's type and subtype attributes.
|
||||
if ( image ) {
|
||||
attributes.type = 'image';
|
||||
|
||||
// `jpeg`, `png` and `gif` are valid subtypes.
|
||||
// `jpg` is not, so map it to `jpeg`.
|
||||
attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0];
|
||||
}
|
||||
|
||||
// Create a model for the attachment, and add it to the Upload queue collection
|
||||
// so listeners to the upload queue can track and display upload progress.
|
||||
file.attachment = wp.media.model.Attachment.create( attributes );
|
||||
Uploader.queue.add( file.attachment );
|
||||
|
||||
self.added( file.attachment );
|
||||
});
|
||||
|
||||
up.refresh();
|
||||
up.start();
|
||||
});
|
||||
|
||||
this.uploader.bind( 'UploadProgress', function( up, file ) {
|
||||
file.attachment.set( _.pick( file, 'loaded', 'percent' ) );
|
||||
self.progress( file.attachment );
|
||||
});
|
||||
|
||||
/**
|
||||
* After a file is successfully uploaded, update its model.
|
||||
*
|
||||
* @param {plupload.Uploader} up Uploader instance.
|
||||
* @param {plupload.File} file File that was uploaded.
|
||||
* @param {Object} response Object with response properties.
|
||||
* @return {mixed}
|
||||
*/
|
||||
this.uploader.bind( 'FileUploaded', function( up, file, response ) {
|
||||
|
||||
try {
|
||||
response = JSON.parse( response.response );
|
||||
} catch ( e ) {
|
||||
return error( pluploadL10n.default_error, e, file );
|
||||
}
|
||||
|
||||
if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) {
|
||||
return error( pluploadL10n.default_error, null, file );
|
||||
} else if ( ! response.success ) {
|
||||
return error( response.data && response.data.message, response.data, file );
|
||||
}
|
||||
|
||||
// Success. Update the UI with the new attachment.
|
||||
fileUploaded( up, file, response );
|
||||
});
|
||||
|
||||
/**
|
||||
* When plupload surfaces an error, send it to the error handler.
|
||||
*
|
||||
* @param {plupload.Uploader} up Uploader instance.
|
||||
* @param {Object} pluploadError Contains code, message and sometimes file and other details.
|
||||
*/
|
||||
this.uploader.bind( 'Error', function( up, pluploadError ) {
|
||||
var message = pluploadL10n.default_error,
|
||||
key;
|
||||
|
||||
// Check for plupload errors.
|
||||
for ( key in Uploader.errorMap ) {
|
||||
if ( pluploadError.code === plupload[ key ] ) {
|
||||
message = Uploader.errorMap[ key ];
|
||||
|
||||
if ( typeof message === 'function' ) {
|
||||
message = message( pluploadError.file, pluploadError );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
error( message, pluploadError, pluploadError.file );
|
||||
up.refresh();
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// Adds the 'defaults' and 'browser' properties.
|
||||
$.extend( Uploader, _wpPluploadSettings );
|
||||
|
||||
Uploader.uuid = 0;
|
||||
|
||||
// Map Plupload error codes to user friendly error messages.
|
||||
Uploader.errorMap = {
|
||||
'FAILED': pluploadL10n.upload_failed,
|
||||
'FILE_EXTENSION_ERROR': pluploadL10n.invalid_filetype,
|
||||
'IMAGE_FORMAT_ERROR': pluploadL10n.not_an_image,
|
||||
'IMAGE_MEMORY_ERROR': pluploadL10n.image_memory_exceeded,
|
||||
'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded,
|
||||
'GENERIC_ERROR': pluploadL10n.upload_failed,
|
||||
'IO_ERROR': pluploadL10n.io_error,
|
||||
'SECURITY_ERROR': pluploadL10n.security_error,
|
||||
|
||||
'FILE_SIZE_ERROR': function( file ) {
|
||||
return pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name );
|
||||
},
|
||||
|
||||
'HTTP_ERROR': function( file ) {
|
||||
if ( file.type && file.type.indexOf( 'image/' ) === 0 ) {
|
||||
return pluploadL10n.http_error_image;
|
||||
}
|
||||
|
||||
return pluploadL10n.http_error;
|
||||
},
|
||||
};
|
||||
|
||||
$.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{
|
||||
/**
|
||||
* Acts as a shortcut to extending the uploader's multipart_params object.
|
||||
*
|
||||
* param( key )
|
||||
* Returns the value of the key.
|
||||
*
|
||||
* param( key, value )
|
||||
* Sets the value of a key.
|
||||
*
|
||||
* param( map )
|
||||
* Sets values for a map of data.
|
||||
*/
|
||||
param: function( key, value ) {
|
||||
if ( arguments.length === 1 && typeof key === 'string' ) {
|
||||
return this.uploader.settings.multipart_params[ key ];
|
||||
}
|
||||
|
||||
if ( arguments.length > 1 ) {
|
||||
this.uploader.settings.multipart_params[ key ] = value;
|
||||
} else {
|
||||
$.extend( this.uploader.settings.multipart_params, key );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Make a few internal event callbacks available on the wp.Uploader object
|
||||
* to change the Uploader internals if absolutely necessary.
|
||||
*/
|
||||
init: function() {},
|
||||
error: function() {},
|
||||
success: function() {},
|
||||
added: function() {},
|
||||
progress: function() {},
|
||||
complete: function() {},
|
||||
refresh: function() {
|
||||
var node, attached, container, id;
|
||||
|
||||
if ( this.browser ) {
|
||||
node = this.browser[0];
|
||||
|
||||
// Check if the browser node is in the DOM.
|
||||
while ( node ) {
|
||||
if ( node === document.body ) {
|
||||
attached = true;
|
||||
break;
|
||||
}
|
||||
node = node.parentNode;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the browser node is not attached to the DOM,
|
||||
* use a temporary container to house it, as the browser button shims
|
||||
* require the button to exist in the DOM at all times.
|
||||
*/
|
||||
if ( ! attached ) {
|
||||
id = 'wp-uploader-browser-' + this.uploader.id;
|
||||
|
||||
container = $( '#' + id );
|
||||
if ( ! container.length ) {
|
||||
container = $('<div class="wp-uploader-browser" />').css({
|
||||
position: 'fixed',
|
||||
top: '-1000px',
|
||||
left: '-1000px',
|
||||
height: 0,
|
||||
width: 0
|
||||
}).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body');
|
||||
}
|
||||
|
||||
container.append( this.browser );
|
||||
}
|
||||
}
|
||||
|
||||
this.uploader.refresh();
|
||||
}
|
||||
});
|
||||
|
||||
// Create a collection of attachments in the upload queue,
|
||||
// so that other modules can track and display upload progress.
|
||||
Uploader.queue = new wp.media.model.Attachments( [], { query: false });
|
||||
|
||||
// Create a collection to collect errors incurred while attempting upload.
|
||||
Uploader.errors = new Backbone.Collection();
|
||||
|
||||
exports.Uploader = Uploader;
|
||||
})( wp, jQuery );
|
||||
+1
@@ -0,0 +1 @@
|
||||
window.wp=window.wp||{},function(e,l){var u;"undefined"!=typeof _wpPluploadSettings&&(l.extend(u=function(e){var n,t,i,p,d=this,a={container:"container",browser:"browse_button",dropzone:"drop_element"},s={};if(this.supports={upload:u.browser.supported},this.supported=this.supports.upload,this.supported){for(t in this.plupload=l.extend(!0,{multipart_params:{}},u.defaults),this.container=document.body,l.extend(!0,this,e),this)"function"==typeof this[t]&&(this[t]=l.proxy(this[t],this));for(t in a)this[t]&&(this[t]=l(this[t]).first(),this[t].length?(this[t].prop("id")||this[t].prop("id","__wp-uploader-id-"+u.uuid++),this.plupload[a[t]]=this[t].prop("id")):delete this[t]);(this.browser&&this.browser.length||this.dropzone&&this.dropzone.length)&&(this.uploader=new plupload.Uploader(this.plupload),delete this.plupload,this.param(this.params||{}),delete this.params,n=function(t,a,r){var e,o;a&&a.responseHeaders&&(o=a.responseHeaders.match(/x-wp-upload-attachment-id:\s*(\d+)/i))&&o[1]?(o=o[1],(e=s[r.id])&&4<e?(l.ajax({type:"post",url:ajaxurl,dataType:"json",data:{action:"media-create-image-subsizes",_wpnonce:_wpPluploadSettings.defaults.multipart_params._wpnonce,attachment_id:o,_wp_upload_failed_cleanup:!0}}),i(t,a,r,"no-retry")):(s[r.id]=e?++e:1,l.ajax({type:"post",url:ajaxurl,dataType:"json",data:{action:"media-create-image-subsizes",_wpnonce:_wpPluploadSettings.defaults.multipart_params._wpnonce,attachment_id:o}}).done(function(e){e.success?p(d.uploader,r,e):(e.data&&e.data.message&&(t=e.data.message),i(t,a,r,"no-retry"))}).fail(function(e){500<=e.status&&e.status<600?n(t,a,r):i(t,a,r,"no-retry")}))):i(pluploadL10n.http_error_image,a,r,"no-retry")},i=function(e,t,a,r){var o=a.type&&0===a.type.indexOf("image/"),i=t&&t.status;"no-retry"!==r&&o&&500<=i&&i<600?n(e,t,a):(a.attachment&&a.attachment.destroy(),u.errors.unshift({message:e||pluploadL10n.default_error,data:t,file:a}),d.error(e,t,a))},p=function(e,t,a){_.each(["file","loaded","size","percent"],function(e){t.attachment.unset(e)}),t.attachment.set(_.extend(a.data,{uploading:!1})),wp.media.model.Attachment.get(a.data.id,t.attachment),u.queue.all(function(e){return!e.get("uploading")})&&u.queue.reset(),d.success(t.attachment)},this.uploader.bind("init",function(e){var t,a,r=d.dropzone,e=d.supports.dragdrop=e.features.dragdrop&&!u.browser.mobile;if(r){if(r.toggleClass("supports-drag-drop",!!e),!e)return r.unbind(".wp-uploader");r.on("dragover.wp-uploader",function(){t&&clearTimeout(t),a||(r.trigger("dropzone:enter").addClass("drag-over"),a=!0)}),r.on("dragleave.wp-uploader, drop.wp-uploader",function(){t=setTimeout(function(){a=!1,r.trigger("dropzone:leave").removeClass("drag-over")},0)}),d.ready=!0,l(d).trigger("uploader:ready")}}),this.uploader.bind("postinit",function(e){e.refresh(),d.init()}),this.uploader.init(),this.browser?this.browser.on("mouseenter",this.refresh):this.uploader.disableBrowse(!0),l(d).on("uploader:ready",function(){l('.moxie-shim-html5 input[type="file"]').attr({tabIndex:"-1","aria-hidden":"true"})}),this.uploader.bind("FilesAdded",function(r,e){_.each(e,function(e){var t,a;if(plupload.FAILED!==e.status){if("image/heic"===e.type&&r.settings.heic_upload_error)u.errors.unshift({message:pluploadL10n.unsupported_image,data:{},file:e});else{if("image/webp"===e.type&&r.settings.webp_upload_error)return i(pluploadL10n.noneditable_image,{},e,"no-retry"),void r.removeFile(e);if("image/avif"===e.type&&r.settings.avif_upload_error)return i(pluploadL10n.noneditable_image,{},e,"no-retry"),void r.removeFile(e)}t=_.extend({file:e,uploading:!0,date:new Date,filename:e.name,menuOrder:0,uploadedTo:wp.media.model.settings.post.id},_.pick(e,"loaded","size","percent")),(a=/(?:jpe?g|png|gif)$/i.exec(e.name))&&(t.type="image",t.subtype="jpg"===a[0]?"jpeg":a[0]),e.attachment=wp.media.model.Attachment.create(t),u.queue.add(e.attachment),d.added(e.attachment)}}),r.refresh(),r.start()}),this.uploader.bind("UploadProgress",function(e,t){t.attachment.set(_.pick(t,"loaded","percent")),d.progress(t.attachment)}),this.uploader.bind("FileUploaded",function(e,t,a){try{a=JSON.parse(a.response)}catch(e){return i(pluploadL10n.default_error,e,t)}return!_.isObject(a)||_.isUndefined(a.success)?i(pluploadL10n.default_error,null,t):a.success?void p(e,t,a):i(a.data&&a.data.message,a.data,t)}),this.uploader.bind("Error",function(e,t){var a,r=pluploadL10n.default_error;for(a in u.errorMap)if(t.code===plupload[a]){"function"==typeof(r=u.errorMap[a])&&(r=r(t.file,t));break}i(r,t,t.file),e.refresh()}))}},_wpPluploadSettings),u.uuid=0,u.errorMap={FAILED:pluploadL10n.upload_failed,FILE_EXTENSION_ERROR:pluploadL10n.invalid_filetype,IMAGE_FORMAT_ERROR:pluploadL10n.not_an_image,IMAGE_MEMORY_ERROR:pluploadL10n.image_memory_exceeded,IMAGE_DIMENSIONS_ERROR:pluploadL10n.image_dimensions_exceeded,GENERIC_ERROR:pluploadL10n.upload_failed,IO_ERROR:pluploadL10n.io_error,SECURITY_ERROR:pluploadL10n.security_error,FILE_SIZE_ERROR:function(e){return pluploadL10n.file_exceeds_size_limit.replace("%s",e.Line truncated
|
||||
Reference in new issue
Block a user