X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.special%2Fmediawiki.special.upload.js;h=57578a647ebae05c0e56ea7adb6b700ff5177193;hb=ea5c2f5d2d36af57ff793e5c3db186642c584a0e;hp=59342783303e5629f6cb178d3dce099c724ed9ff;hpb=38ab0b0c4cb041d9c4ff0ca4b62656d2768df79a;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.special/mediawiki.special.upload.js b/resources/src/mediawiki.special/mediawiki.special.upload.js index 5934278330..57578a647e 100644 --- a/resources/src/mediawiki.special/mediawiki.special.upload.js +++ b/resources/src/mediawiki.special/mediawiki.special.upload.js @@ -6,7 +6,6 @@ * @singleton */ -/* eslint-disable no-use-before-define */ /* global Uint8Array */ ( function ( mw, $ ) { @@ -61,7 +60,7 @@ timeout: function () { var $spinnerDestCheck, title; - if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) { + if ( !ajaxUploadDestCheck || this.nameToCheck.trim() === '' ) { return; } $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' ); @@ -71,9 +70,11 @@ formatversion: 2, action: 'query', // If title is empty, user input is invalid, the API call will produce details about why - titles: title ? title.getPrefixedText() : this.nameToCheck, + titles: [ title ? title.getPrefixedText() : this.nameToCheck ], prop: 'imageinfo', - iiprop: 'uploadwarning' + iiprop: 'uploadwarning', + errorformat: 'html', + errorlang: mw.config.get( 'wgUserLanguage' ) } ).done( function ( result ) { var resultOut = '', @@ -81,7 +82,7 @@ if ( page.imageinfo ) { resultOut = page.imageinfo[ 0 ].html; } else if ( page.invalidreason ) { - resultOut = mw.html.escape( page.invalidreason ); + resultOut = page.invalidreason.html; } uploadWarning.processResult( resultOut, uploadWarning.nameToCheck ); } ).always( function () { @@ -132,10 +133,7 @@ $spinner = $.createSpinner().insertAfter( $element ); - ( new mw.Api() ).get( { - formatversion: 2, - action: 'parse', - text: '{{' + template + '}}', + ( new mw.Api() ).parse( '{{' + template + '}}', { title: $( '#wpDestFile' ).val() || 'File:Sample.jpg', prop: 'text', pst: true, @@ -148,7 +146,7 @@ }, processResult: function ( result, template, $previewContainer ) { - this.responseCache[ template ] = result.parse.text; + this.responseCache[ template ] = result; this.showPreview( this.responseCache[ template ], $previewContainer ); }, @@ -194,7 +192,7 @@ } // fillDestFile setup - $.each( mw.config.get( 'wgUploadSourceIds' ), function ( index, sourceId ) { + mw.config.get( 'wgUploadSourceIds' ).forEach( function ( sourceId ) { $( '#' + sourceId ).change( function () { var path, slash, backslash, fname; if ( !mw.config.get( 'wgUploadAutoFill' ) ) { @@ -311,6 +309,73 @@ return mw.msg( sizeMsgs[ 0 ], Math.round( s ) ); } + /** + * Start loading a file into memory; when complete, pass it as a + * data URL to the callback function. If the callbackBinary is set it will + * first be read as binary and afterwards as data URL. Useful if you want + * to do preprocessing on the binary data first. + * + * @param {File} file + * @param {Function} callback + * @param {Function} callbackBinary + */ + function fetchPreview( file, callback, callbackBinary ) { + var reader = new FileReader(); + if ( callbackBinary && 'readAsBinaryString' in reader ) { + // To fetch JPEG metadata we need a binary string; start there. + // TODO + reader.onload = function () { + callbackBinary( reader.result ); + + // Now run back through the regular code path. + fetchPreview( file, callback ); + }; + reader.readAsBinaryString( file ); + } else if ( callbackBinary && 'readAsArrayBuffer' in reader ) { + // readAsArrayBuffer replaces readAsBinaryString + // However, our JPEG metadata library wants a string. + // So, this is going to be an ugly conversion. + reader.onload = function () { + var i, + buffer = new Uint8Array( reader.result ), + string = ''; + for ( i = 0; i < buffer.byteLength; i++ ) { + string += String.fromCharCode( buffer[ i ] ); + } + callbackBinary( string ); + + // Now run back through the regular code path. + fetchPreview( file, callback ); + }; + reader.readAsArrayBuffer( file ); + } else if ( 'URL' in window && 'createObjectURL' in window.URL ) { + // Supported in Firefox 4.0 and above + // WebKit has it in a namespace for now but that's ok. ;) + // + // Lifetime of this URL is until document close, which is fine + // for Special:Upload -- if this code gets used on longer-running + // pages, add a revokeObjectURL() when it's no longer needed. + // + // Prefer this over readAsDataURL for Firefox 7 due to bug reading + // some SVG files from data URIs + callback( window.URL.createObjectURL( file ) ); + } else { + // This ends up decoding the file to base-64 and back again, which + // feels horribly inefficient. + reader.onload = function () { + callback( reader.result ); + }; + reader.readAsDataURL( file ); + } + } + + /** + * Clear the file upload preview area. + */ + function clearPreview() { + $( '#mw-upload-thumbnail' ).remove(); + } + /** * Show a thumbnail preview of PNG, JPEG, GIF, and SVG files prior to upload * in browsers supporting HTML5 FileAPI. @@ -435,73 +500,6 @@ } : null ); } - /** - * Start loading a file into memory; when complete, pass it as a - * data URL to the callback function. If the callbackBinary is set it will - * first be read as binary and afterwards as data URL. Useful if you want - * to do preprocessing on the binary data first. - * - * @param {File} file - * @param {Function} callback - * @param {Function} callbackBinary - */ - function fetchPreview( file, callback, callbackBinary ) { - var reader = new FileReader(); - if ( callbackBinary && 'readAsBinaryString' in reader ) { - // To fetch JPEG metadata we need a binary string; start there. - // TODO - reader.onload = function () { - callbackBinary( reader.result ); - - // Now run back through the regular code path. - fetchPreview( file, callback ); - }; - reader.readAsBinaryString( file ); - } else if ( callbackBinary && 'readAsArrayBuffer' in reader ) { - // readAsArrayBuffer replaces readAsBinaryString - // However, our JPEG metadata library wants a string. - // So, this is going to be an ugly conversion. - reader.onload = function () { - var i, - buffer = new Uint8Array( reader.result ), - string = ''; - for ( i = 0; i < buffer.byteLength; i++ ) { - string += String.fromCharCode( buffer[ i ] ); - } - callbackBinary( string ); - - // Now run back through the regular code path. - fetchPreview( file, callback ); - }; - reader.readAsArrayBuffer( file ); - } else if ( 'URL' in window && 'createObjectURL' in window.URL ) { - // Supported in Firefox 4.0 and above - // WebKit has it in a namespace for now but that's ok. ;) - // - // Lifetime of this URL is until document close, which is fine - // for Special:Upload -- if this code gets used on longer-running - // pages, add a revokeObjectURL() when it's no longer needed. - // - // Prefer this over readAsDataURL for Firefox 7 due to bug reading - // some SVG files from data URIs - callback( window.URL.createObjectURL( file ) ); - } else { - // This ends up decoding the file to base-64 and back again, which - // feels horribly inefficient. - reader.onload = function () { - callback( reader.result ); - }; - reader.readAsDataURL( file ); - } - } - - /** - * Clear the file upload preview area. - */ - function clearPreview() { - $( '#mw-upload-thumbnail' ).remove(); - } - /** * Check if the file does not exceed the maximum size *