' ).attr( 'id', 'msupload-dropzone' ).hide();
// Add them to the DOM
bottomDiv.append( startButton, cleanAll, galleryInsert, filesInsert, linksInsert );
uploadDiv.append( statusDiv, uploadDrop, uploadList, bottomDiv );
$( '#wikiEditor-ui-toolbar' ).after( uploadDiv );
uploadContainer.append( uploadButton );
$( '#wikiEditor-ui-toolbar .group-insert' ).append( uploadContainer );
// Create the Uploader object
MsUpload.uploader = new plupload.Uploader( {
runtimes: 'html5,flash,silverlight,html4',
browse_button: 'msupload-select',
container: 'msupload-container',
max_file_size: msuVars.uploadsize,
drop_element: 'msupload-dropzone',
url: msuVars.scriptPath + '/api.php',
flash_swf_url: msuVars.flash_swf_url,
silverlight_xap_url: msuVars.silverlight_xap_url
} );
// Bind events
MsUpload.uploader.bind( 'PostInit', MsUpload.onPostInit );
MsUpload.uploader.bind( 'FilesAdded', MsUpload.onFilesAdded );
MsUpload.uploader.bind( 'QueueChanged', MsUpload.onQueueChanged );
MsUpload.uploader.bind( 'StateChanged', MsUpload.onStateChanged );
MsUpload.uploader.bind( 'FilesRemoved', MsUpload.onFilesRemoved );
MsUpload.uploader.bind( 'BeforeUpload', MsUpload.onBeforeUpload );
MsUpload.uploader.bind( 'UploadProgress', MsUpload.onUploadProgress );
MsUpload.uploader.bind( 'Error', MsUpload.onError );
MsUpload.uploader.bind( 'FileUploaded', MsUpload.onFileUploaded );
MsUpload.uploader.bind( 'CheckFiles', MsUpload.onCheckFiles );
MsUpload.uploader.bind( 'UploadComplete', MsUpload.onCheckFiles );
startButton.click( function ( event ) {
MsUpload.uploader.start();
event.preventDefault();
} );
// Initialise
MsUpload.uploader.init();
},
onPostInit: function ( uploader ) {
mw.log( 'MsUpload DEBUG: runtime: ' + uploader.runtime + ' features: ' + JSON.stringify( uploader.features ) );
$( '#msupload-container' ).removeClass( 'start-loading' );
if ( uploader.features.dragdrop && msuVars.useDragDrop ) {
$( '#msupload-dropzone' ).text( mw.msg( 'msu-dropzone' ) ).show();
$( '#msupload-dropzone' ).bind( 'dragover', function () {
$( this ).addClass( 'drop-over' ).css( 'padding', 20 );
} ).bind( 'dragleave', function () {
$( this ).removeClass( 'drop-over' ).css( 'padding', 0 );
} ).bind( 'drop', function () {
$( this ).removeClass( 'drop-over' ).css( 'padding', 0 );
} );
} else {
$( '#msupload-div' ).addClass( 'nodragdrop' );
}
},
onFilesAdded: function ( uploader, files ) {
$.each( files, function ( i, file ) {
// iOS6 by SLBoat
if ( ( navigator.platform === 'iPad' || navigator.platform === 'iPhone' ) ) {
if ( file.name.indexOf( 'image' ) !== -1 && file.name.length < 11 ) {
var heute = new Date(),
fileNameApple = navigator.platform + '_image_' + heute.getFullYear() + '-' + heute.getMonth() + '-' + heute.getDate() + '-' + heute.getTime(); // Because each image is named 'image.jpg' in iOS6
file.name = fileNameApple + '_' + i + '.' + file.name.split( '.' ).pop(); // image_Y-M-D_0.jpg
}
}
file.li = $( '
' ).attr( 'id', file.id ).addClass( 'file' ).appendTo( $( '#msupload-list' ) );
file.li.type = $( '' ).addClass( 'file-type' ).appendTo( file.li );
file.li.title = $( '' ).addClass( 'file-name' ).text( file.name ).appendTo( file.li );
file.li.size = $( '' ).addClass( 'file-size' ).text( plupload.formatSize( file.size ) ).appendTo( file.li );
file.li.loading = $( '' ).addClass( 'file-loading' ).appendTo( file.li );
file.li.warning = $( '' ).addClass( 'file-warning' ).appendTo( file.li );
MsUpload.checkExtension( file, uploader );
} );
uploader.refresh(); // Reposition Flash/Silverlight
uploader.trigger( 'CheckFiles' );
},
onQueueChanged: function ( uploader ) {
uploader.trigger( 'CheckFiles' );
},
onStateChanged: function ( uploader ) {
mw.log( uploader.state );
if ( uploader.files.length === ( uploader.total.uploaded + uploader.total.failed ) ) {
// mw.log( 'State: ' + uploader.files.length ) // All files uploaded
}
},
onFilesRemoved: function ( /* uploader, files */ ) {
mw.log( 'Files removed' );
// uploader.trigger( 'CheckFiles' );
},
onBeforeUpload: function ( uploader, file ) {
file.li.title.text( file.name ).show(); // Show title
$( '#' + file.id + ' .file-name-input' ).hide(); // Hide the file name input
$( '#' + file.id + ' .file-extension' ).hide(); // Hide the file extension
uploader.settings.multipart_params = {
filename: file.name,
token: mw.user.tokens.get( 'editToken' ),
action: 'upload',
ignorewarnings: true,
comment: mw.message( 'msu-comment' ).plain(),
format: 'json'
}; // Set multipart_params
$( '#' + file.id + ' .file-progress-state' ).text( '0%' );
},
onUploadProgress: function ( uploader, file ) {
$( '#' + file.id + ' .file-progress-state' ).text( file.percent + '%' );
},
onError: function ( uploader, error ) {
mw.log( error );
$( '#' + error.file.id + ' .file-warning' ).html(
'Error ' + error.code + ', ' + error.message + ( error.file ? ', File: ' + error.file.name : '' )
);
$( '#msupload-status' ).append( error.message );
uploader.refresh(); // Reposition Flash/Silverlight
},
onFileUploaded: function ( uploader, file, success ) {
mw.log( success );
file.li.title.unbind( 'click' );
file.li.title.unbind( 'mouseover' );
$( '#' + file.id + ' .file-cancel' ).fadeOut( 'fast' );
$( '#' + file.id + ' .file-progress-state' ).fadeOut( 'fast' );
try {
var result = $.parseJSON( success.response );
if ( result.error ) {
MsUpload.fileError( uploader, file, result.error.info );
} else {
file.li.type.addClass( 'ok' );
file.li.addClass( 'green' );
file.li.warning.fadeOut( 'fast' );
if ( file.cat && mw.config.get( 'wgNamespaceNumber' ) === 14 ) { // Should the categroy be set?
$.get( mw.util.wikiScript(), {
action: 'ajax',
rs: 'MsUpload::saveCat',
rsargs: [ file.name, mw.config.get( 'wgPageName' ) ]
}, 'json' );
}
$( '' ).text( mw.msg( 'msu-insert-link' ) ).click( function () {
if ( msuVars.useMsLinks === true ) {
MsUpload.insertText( '{{#l:' + file.name + '}}' ); // Insert link
} else {
MsUpload.insertText( '[[:File:' + file.name + ']]' ); // Insert link
}
} ).appendTo( file.li );
if ( file.group === 'image' ) {
MsUpload.galleryArray.push( file.name );
if ( MsUpload.galleryArray.length === 2 ) { // Bind click function only the first time
$( '#msupload-insert-gallery' ).click( MsUpload.insertGallery ).text( mw.msg( 'msu-insert-gallery' ) ).show();
}
$( '' ).text( ' | ' ).appendTo( file.li );
$( '' ).text( mw.msg( 'msu-insert-image' ) ).click( function () {
MsUpload.insertText( '[[File:' + file.name + msuVars.imgParams + ']]' );
} ).appendTo( file.li );
} else if ( file.group === 'video' ) {
$( '' ).text( ' | ' ).appendTo( file.li );
$( '' ).text( mw.msg( 'msu-insert-video' ) ).click( function () {
MsUpload.insertText( '[[File:' + file.name + ']]' );
} ).appendTo( file.li );
}
MsUpload.filesArray.push( file.name );
if ( MsUpload.filesArray.length === 2 ) { // Bind click function only the first time
$( '#msupload-insert-files' ).click( MsUpload.insertFiles ).text( mw.msg( 'msu-insert-files' ) ).show();
$( '#msupload-insert-links' ).click( MsUpload.insertLinks ).text( mw.msg( 'msu-insert-links' ) ).show();
}
}
} catch ( error ) {
MsUpload.fileError( uploader, file, 'Error: ' + success.response.replace( /(<([^>]+)>)/ig, '' ) ); // Remove html tags
}
uploader.removeFile( file ); // For preventing a second upload afterwards
},
onCheckFiles: function ( uploader ) {
var filesLength = uploader.files.length,
listLength = $( '#msupload-list li' ).length;
mw.log( 'files: ' + filesLength + ', gallery: ' + MsUpload.galleryArray.length + ', list: ' + listLength );
if ( filesLength ) {
$( '#msupload-bottom' ).show();
if ( filesLength === 1 ) {
$( '#msupload-files' ).text( mw.msg( 'msu-upload-this' ) ).show();
} else {
$( '#msupload-files' ).text( mw.msg( 'msu-upload-all' ) ).show();
}
} else {
$( '#msupload-files' ).hide();
}
if ( MsUpload.unconfirmedReplacements ) {
$( '#msupload-files' ).hide();
}
if ( MsUpload.filesArray.length > 1 ) {
$( '#msupload-insert-files' ).show();
$( '#msupload-insert-links' ).show();
} else {
$( '#msupload-insert-files' ).hide();
$( '#msupload-insert-links' ).hide();
}
if ( MsUpload.galleryArray.length > 1 ) {
$( '#msupload-insert-gallery' ).show();
$( '#msupload-bottom' ).show();
} else {
$( '#msupload-insert-gallery' ).hide();
}
if ( listLength ) {
$( '#msupload-bottom' ).show();
$( '#msupload-clean-all' ).text( mw.msg( 'msu-clean-all' ) ).click( MsUpload.cleanAll ).show();
} else {
$( '#msupload-bottom' ).hide();
}
uploader.refresh(); // Reposition Flash/Silverlight
},
init: function () {
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 ) {
mw.loader.using( 'user.options', function () {
if ( mw.user.options.get( 'usebetatoolbar' ) ) {
$.when( mw.loader.using( 'ext.wikiEditor' ), $.ready )
.then( MsUpload.createUploader );
}
} );
}
}
};
$( MsUpload.init );
}( jQuery, mediaWiki ) );