MediaWiki:UploadForm.js

/* */ /**** class UploadForm.js * (c) 2008 by Patrick Westerhoff [poke] and Johan Sköld [Galil] */

function UploadForm { /** setting start **/ var settingRows = { 'Image use' : [ { id:   'uploadGeneralImage', name: 'uploadImageUse', type: 'radio', label: 'General use', value: 'general', def:  true }, { id:   'uploadUserImage', name: 'uploadImageUse', type: 'radio', label: 'User space', value: 'user' }, { id:   'uploadGuildImage', name: 'uploadImageUse', type: 'radio', label: 'Guild space', value: 'guild' } ],   'Licensing settings': [ { id:   'uploadGFDL', name: 'uploadLicensing', type: 'radio', label: 'Normal image', value: 'gfdl', def:  true }, { id:   'uploadArenanetImg', name: 'uploadLicensing', type: 'radio', label: 'ArenaNet owned image', value: 'arenanetimage' }, { id:   'uploadScreenshot', name: 'uploadLicensing', type: 'radio', label: 'Guild Wars screenshot', value: 'screenshot' } ] }  var rulesNaming = { 'uploadUserImage': { expr:   new RegExp( '^[Uu]ser[-_ ]([^-_ ]+)[-_ ](.+?)' ), replace: 'User_' + ( wgUserName ? wgUserName.replace( ' ', '_' ) : '' ) + '_$1', message: 'Invalid user image filename. It has been modified to conform with our image use policy. Please click "Upload file" again to upload.' },   'uploadGuildImage': { expr:   new RegExp( '^[Gg]uild[-_ ]([^-_ ]+)[-_ ](.+?)' ), message: 'Invalid guild image filename. Please name it according to our image use policy, such as: .' } }  var rulesContent = { 'uploadGeneralImage': { expr:   new RegExp( '' ), tag:    '' },   'uploadUserImage': { expr:   new RegExp( '(\\{\\{\\s*?(Template:)?[Uu]ser image\\s*?(\|.*?)?\\}\\}\\s*)', 'g' ), tag:    '\n' },   'uploadGuildImage': { expr:   new RegExp( '(\\{\\{\\s*?(Template:)?[Gg]uild image\\s*?(\|.*?)?\\}\\}\\s*)', 'g' ), tag:    '\n' },   'uploadGFDL': { expr:   new RegExp( '' ), tag:    '' },   'uploadArenanetImg': { expr:   new RegExp( '(\\{\\{\\s*?(Template:)?[Aa]renanet image\\s*?\\}\\}\\s*)', 'g' ), tag:    '\n' },   'uploadScreenshot': { expr:   new RegExp( '(\\{\\{\\s*?(Template:)?[Ss]creenshot\\s*?\\}\\}\\s*)', 'g' ), tag:    '\n' } }  /** settings end **/ var uploadForm; var uploadDesc; var uploadFilename; var uploadMessage = document.createElement( 'div' ); var reTrim       = new RegExp( '^(\\s*)(.*?)(\\s*)$' ); uploadMessage.id = 'uploadMessage'; uploadMessage.style.color    = '#CC0000'; uploadMessage.style.fontStyle = 'italic'; uploadMessage.style.marginTop = '0.3em'; initialize; /** private void initialize **/ function initialize {   if ( wgPageName != 'Special:Upload' || document.getElementById( 'mw-upload-form' ) == null ) return; uploadForm    = document.getElementById( 'mw-upload-form' ); uploadDesc    = document.getElementById( 'wpUploadDescription' ); uploadFilename = document.getElementById( 'wpDestFile' ); for ( var row in settingRows ) {     var tRow  = document.createElement( 'tr' ); var tCel1 = document.createElement( 'td' ); var tCel2 = document.createElement( 'td' ); for ( var key in settingRows[row] ) {       configElement = settingRows[row][key]; var input    = null; try {         input = document.createElement( '' ); }       catch ( e ) {}       if ( !input ) {         input      = document.createElement( 'input' ); input.name = configElement.name; }       input.type    = configElement.type; input.value  = configElement.value; input.id     = configElement.id; input.checked = configElement.def; var label    = document.createElement( 'label' ); label.htmlFor = configElement.id; label.appendChild( document.createTextNode( configElement.label ) ); if ( rulesContent[ configElement.id ] != null || configElement.type == 'radio' ) input.onclick = applyInput; tCel2.appendChild( input ); tCel2.appendChild( label ); tCel2.appendChild( document.createTextNode( ' ' ) ); }     tCel1.style.textAlign = 'right'; tCel1.appendChild( document.createTextNode( row + ':' ) ); tRow.appendChild( tCel1 ); tRow.appendChild( tCel2 ); var position = uploadDesc.parentNode.parentNode; position.parentNode.insertBefore( tRow, position ); }   uploadDesc.onkeyup  = redrawInput; uploadForm.onsubmit = checkInput; if ( uploadFilename.value != '' ) {     for ( var inputId in rulesNaming ) {       if ( rulesContent[inputId] == null || uploadFilename.value.search( rulesNaming[ inputId ].expr ) < 0 ) continue; uploadDesc.value = rulesContent[ inputId ].tag + uploadDesc.value; break; }     redrawInput; } }  /** private void applyInput  **/ function applyInput {   var inputGroup = document.getElementsByName( this.name ); for ( var i = 0; i < inputGroup.length; i++ ) {     if ( inputGroup[i].nodeName.toLowerCase != 'input' || rulesContent[ inputGroup[i].id ] == null ) continue; var inputId  = inputGroup[i].id; var ruleMatch = uploadDesc.value.search( rulesContent[ inputId ].expr ); if ( !inputGroup[i].checked ) uploadDesc.value = uploadDesc.value.replace( rulesContent[ inputId ].expr, '' ); else if ( ruleMatch < 0 ) uploadDesc.value = rulesContent[ inputId ].tag + uploadDesc.value; } }  /** private void redrawInput  **/ function redrawInput {   for ( var id in rulesContent ) {     var input = document.getElementById( id ); if ( input.nodeName.toLowerCase != 'input' ) continue; input.checked = !( uploadDesc.value.search( rulesContent[id].expr ) < 0 ); } }  /** private void checkInput ( event ) **/ function checkInput ( e ) {   if ( !e ) var e = window.event; if ( document.getElementById( 'uploadMessage' ) == null ) uploadFilename.parentNode.appendChild( uploadMessage ); else uploadMessage.innerHTML = ''; var messages = new Array; for ( var inputId in rulesNaming ) {     var input = document.getElementById( inputId ); if ( input == null || input.nodeName.toLowerCase != 'input' || !input.checked ) continue; if ( uploadFilename.value.search( rulesNaming[ inputId ].expr ) < 0 ) {       messages.push( uploadFilename.value.replace( /^(.*?)$/, rulesNaming[ inputId ].message ) ); if ( rulesNaming[ inputId ].replace != null ) uploadFilename.value = uploadFilename.value.replace( /^(.*?)$/, rulesNaming[ inputId ].replace ); }   }    for ( var inputId in rulesContent ) {     var input = document.getElementById( inputId ); if ( input == null || input.nodeName.toLowerCase != 'input' ) continue; var ruleMatch = uploadDesc.value.search( rulesContent[ inputId ].expr ); if ( !input.checked ) uploadDesc.value = uploadDesc.value.replace( rulesContent[ inputId ].expr, '' ); else if ( ruleMatch < 0 ) uploadDesc.value = rulesContent[ inputId ].tag + uploadDesc.value; else {       ruleMatch = uploadDesc.value.match( rulesContent[ inputId ].expr ); if ( ruleMatch.length > 1 ) {         uploadDesc.value = rulesContent[ inputId ].tag + uploadDesc.value.replace( rulesContent[ inputId ].expr, '' ); }     }    }    if ( messages.length > 0 ) {     uploadMessage.innerHTML = messages.join( ' ' ); if ( e.preventDefault ) e.preventDefault; e.returnValue = false; } } } /* */