Wikipédia:Scripts/Twinkle/twinklearv.js

Origem: Wikipédia, a enciclopédia livre.

// If TwinkleConfig aint exist. if( typeof( TwinkleConfig ) == 'undefined' ) { TwinkleConfig = {}; }

/**

TwinkleConfig.summaryAd (string)
If ad should be added or not to summary, default TWINKLE
*/

if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) { TwinkleConfig.summaryAd = " using TW"; }

/**

TwinkleConfig.markAIVReportAsMinor (boolean)
Defines if a reports to AIV should be marked as minor, if false, default is applied as per preference.
*/

if( typeof( TwinkleConfig.markAIVReportAsMinor ) == 'undefined' ) { TwinkleConfig.markAIVReportAsMinor = true; }

/**

TwinkleConfig.confirmUsernameToAIV (boolean)
Defines if a username reports to AIV should be confirmed before sent.
*/

if( typeof( TwinkleConfig.confirmUsernameToAIV ) == 'undefined' ) { TwinkleConfig.confirmUsernameToAIV = true; }

/**

TwinkleConfig.toolboxButtons (string)
If id defined in this array, the button of the action is located inthe toolbox instead of in
the actions bar.
*/

if( typeof( TwinkleConfig.toolboxButtons ) == 'undefined' ) { TwinkleConfig.toolboxButtons = []; }

function getChecked( nodelist ) { if( !( nodelist instanceof NodeList ) ) { throw nodelist + " not instance of NodeList"; } var result = []; for(var i in nodelist ) { if( nodelist[i].checked ) { result.push( nodelist[i].value ); } } return result; } function createOption( data ) { var option = document.createElement( 'option' ); option.setAttribute( 'value', data.value ); if( data.selected ) { option.setAttribute( 'selected', 'selected' ); } option.setAttribute( 'label', data.label ); option.appendChild( document.createTextNode( data.label ) );

return option; }

function createInput( data ) { var div = document.createElement( data.elem || 'span' ); var input = document.createElement( 'input' ); input.setAttribute( 'value', data.value ); input.setAttribute( 'name', data.name ); input.setAttribute( 'id', data.id ); input.setAttribute( 'type', data.type ); if( data.size ) { input.setAttribute( 'size', data.size ); } if( data.checked ) { input.setAttribute( 'checked', 'checked' ); } if( data.disabled ) { input.setAttribute( 'disabled', 'disabled' ); } if( data.event && data.type == 'button' ){ input.addEventListener( 'click', data.event, true ); } else if( data.event ) { input.addEventListener( 'keyup', data.event, true ); } if( data.type == 'button' || data.type == 'submit' || data.type == 'reset' ) { div.appendChild( input ); } else { var label = document.createElement( 'label' ); label.setAttribute( 'for', data.id ); label.appendChild( document.createTextNode( data.text ) ); if( [ 'radio', 'checkbox' ].indexOf( data.type ) != -1 ) { div.appendChild( input ); div.appendChild( label ); } else { div.appendChild( label ); div.appendChild( input ); } }

return div; }

function createSimpleCheckbox( label, name, id ) { return createInput( { id:id, name:name, value:label, text:label + ' ', type:'checkbox', elem:'div'

} ); }

function createOptGroup( label ) { var optgroup = document.createElement( 'optgroup' ); optgroup.setAttribute( 'label', label ); return optgroup; } $( twinkleARVBase ); function twinkleARVBase(){ var username;


if ( wgNamespaceNumber == 3 || wgNamespaceNumber == 2 || ( wgNamespaceNumber == -1 && wgTitle == "Contributions" )){

// If we are on the contributions page, need to parse some then if( wgNamespaceNumber == -1 && wgTitle == "Contributions" ) { username = document.getElementById( 'contentSub' ).getElementsByTagName( 'a' )[0].getAttribute('title').split(':')[1]; } else { username = wgTitle.split( '/' )[0]; // only first part before any slashes }

if( !username ) { // Something is fishy, there was no user? lets about everything throw "given username was " + username + " and thus makes no sense."; }

var name = isIPAddress( username ) ? 'Report IP' : 'Report'; var title = isIPAddress( username ) ? 'Report IP to Administators' : 'Report user to Administrators';

mw.util.addPortletLink( chooseBox( 'tw-arv', TwinkleConfig.toolboxButtons ), "javascript:twinklearv(\"" + username + "\")", "arv", "tw-arv", name, title ); /* mw.util.addPortletLink( 'ca-report', 'javascript:twinklearv( "' + username + '", "sock" )' , 'sock puppet' , 'ca-report-sock', title + ' (Account is a sock puppet account)', ); if( !isIPAddress( username ) ) { mw.util.addPortletLink( 'ca-report', 'javascript:twinklearv( "' + username + '", "username" )' , 'username' , 'ca-report-username', title + ' (inflammatory username)', ); } */ } }

function twinklearv( uid ) { if( uid == wgUserName ){ alert( 'You don\'t want to report yourself , do you?' ); return; } twinklearv.uid = uid;

twinklearv.Window = new SimpleWindow( 600, 300 ); twinklearv.Window.setTitle( "Advance Reporting and Vetting" ); //Backronym twinklearv.form = document.createElement( 'form' ); twinklearv.form.setAttribute( 'action', 'javascript:void(0);'); twinklearv.form.addEventListener( 'submit',twinklearv.evaluate , true );

var main_choices = document.createElement( 'select' ); main_choices.addEventListener( 'change',twinklearv.choose , true ); main_choices.setAttribute('name', 'main_choices'); main_choices.setAttribute('id', 'twArvMainChoices');

label = document.createElement( 'label' ); label.setAttribute( 'for', 'main_choices' ); label.appendChild( document.createTextNode( 'Type of Report ' ) );

main_choices.appendChild( createOption( { label:'Vandalism', value:'aiv' } ) ); if( !isIPAddress( uid ) ) { main_choices.appendChild( createOption( { label:'Username', value:'username' } ) ); } main_choices.appendChild( createOption( { label:'Sockpuppet', value:'sock' } ) );

twinklearv.form.appendChild( label ); twinklearv.form.appendChild( main_choices ); twinklearv.form.appendChild( document.createElement( 'br' ) );

twinklearv.choices = document.createElement( 'fieldset' ); twinklearv.form.appendChild( twinklearv.choices );

twinklearv.Window.setContent( twinklearv.form ); twinklearv.choose(); twinklearv.Window.display(); }

twinklearv.choose = function(e) { while( twinklearv.choices.hasChildNodes() ){ twinklearv.choices.removeChild( twinklearv.choices.firstChild ); } switch( twinklearv.form.main_choices.value ) { default: case 'aiv': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Report user for vandalism' ) ); twinklearv.choices.appendChild( legend ); twinklearv.choices.appendChild( createInput( { id:'twArvAivPage', value: QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : , text:'Page (leave empty for no page) ', type:'text', name:'page', size:40, elem:'div', event: function(e) { if( e.target.value == ) { twinklearv.form.badid.disabled = twinklearv.form.goodid.disabled = true; } else { twinklearv.form.badid.disabled = false; twinklearv.form.goodid.disabled = twinklearv.form.badid.value == ; } } } ) ); twinklearv.choices.appendChild( createInput( { id:'twArvAivBadId', value: QueryString.exists( 'vanarticlerevid' ) ? QueryString.get( 'vanarticlerevid' ) : , text:'Vandal revision id ', disabled: !QueryString.exists( 'vanarticle' ), type:'text', name:'badid', size:20, elem:'div', event: function(e) { twinklearv.form.goodid.disabled = e.target.value == ; } } ) ); twinklearv.choices.appendChild( createInput( { id:'twArvAivGoodId', value: QueryString.exists( 'vanarticlegoodrevid' ) ? QueryString.get( 'vanarticlegoodrevid' ) : 'prev', text:'Last good revision id ', disabled: !QueryString.exists( 'vanarticle' ) || QueryString.exists( 'vanarticlerevid' ), type:'text', name:'goodid', size:20, elem:'div' } ) );


types = document.createElement( 'div' ); types.appendChild( createInput( { id:'twArvAivFinal', name:'aivtype', value:'final', text:'Vandalism after final warning given ', type:'checkbox', elem:'div' } ) );

types.appendChild( createInput( { id:'twArvAivPostBlock', name:'aivtype', value:'postblock', text:'Vandalism after recent release of block ', type:'checkbox', elem:'div' } ) );

types.appendChild( createInput( { id:'twArvAivVandalonly', name:'aivtype', value:'vandalonly', text:'Evidently vandalism only account ', type:'checkbox', elem:'div' } ) );

types.appendChild( createInput( { id:'twArvAivSpambot', name:'aivtype', value:'spambot', text:'Account is evidently a spambot or a compromized account ', type:'checkbox', elem:'div' } ) );

twinklearv.choices.appendChild( types );

twinklearv.choices.appendChild( createInput( { id:'twArvReason', value:, text:'Comment ', type:'text', name:'reason', size:80, elem:'div' } ) );

twinklearv.choices.appendChild( createInput( { id:'twArvSubmit', value: 'Submit', name:'submit', type:'submit', elem:'div' } ) );

break; case 'username': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Report username violation' ) ); twinklearv.choices.appendChild( legend );

var types = document.createElement( 'div' ); types.appendChild( document.createElement( 'h5' ) ).appendChild( document.createTextNode( 'Missleading username' ) ); types.appendChild( createSimpleCheckbox( 'Implies the user is an admin or other official figure on Wikipedia, or of the Wikimedia Foundation', 'arvtype', 'uname1' ) ); types.appendChild( createSimpleCheckbox( 'Closely resembles the name of another Wikipedia user', 'arvtype', 'uname2' ) ); types.appendChild( createSimpleCheckbox( 'Matches the name of a well-known living or recently deceased person', 'arvtype', 'uname3' ) ); types.appendChild( createSimpleCheckbox( 'Matches the name of a well-known company or group', 'arvtype', 'uname4' ) ); types.appendChild( createSimpleCheckbox( 'Resembles an IP address, e-mail address or web page address,', 'arvtype', 'uname5' ) ); types.appendChild( createSimpleCheckbox( 'Confusingly refers to a Wikipedia process, namespace, or toolbar item', 'arvtype', 'uname6' ) ); types.appendChild( createSimpleCheckbox( 'Implies an automated account, such as names containing "robot", "bot", or a variation thereof', 'arvtype', 'uname7' ) ); types.appendChild( createSimpleCheckbox( 'Consists of a lengthy repetition, or apparently random sequence, of characters, e.g. "aaaaaaaaaaaa" or "ghfjkghdfjgkdhfjkg"', 'arvtype', 'uname8' ) ); types.appendChild( createSimpleCheckbox( 'Is extremely lengthy', 'arvtype', 'uname9' ) );

types.appendChild( document.createElement( 'h5' ) ).appendChild( document.createTextNode( 'Harrasing username' ) ); types.appendChild( createSimpleCheckbox( 'Is defamatory or insulting to other people, groups, articles or processes', 'arvtype', 'uname10' ) ); types.appendChild( createSimpleCheckbox( 'Contains personal information about people, such as a telephone number or street address', 'arvtype', 'uname11' ) ); types.appendChild( createSimpleCheckbox( 'Gives the impression of intent to cause trouble here, such as by alluding to hacking, spamming, trolling, vandalism, legal threats or computer viruses', 'arvtype', 'uname12' ) ); types.appendChild( createSimpleCheckbox( 'Is similar to those used by known vandals', 'arvtype', 'uname13' ) );

types.appendChild( document.createElement( 'h5' ) ).appendChild( document.createTextNode( 'Offensive username' ) ); types.appendChild( createSimpleCheckbox( 'Is a name of religions or religious figures', 'arvtype', 'uname14' ) ); types.appendChild( createSimpleCheckbox( 'Describes performing or endorsing violent real-world actions', 'arvtype', 'uname15' ) ); types.appendChild( createSimpleCheckbox( 'Promotions of a controversial or potentially inflammatory point of view', 'arvtype', 'uname16' ) ); types.appendChild( createSimpleCheckbox( 'Describes racism, sexism, or sexual orientation', 'arvtype', 'uname17' ) ); types.appendChild( createSimpleCheckbox( 'Describes illnesses, disabilities, or medical or psychological conditions', 'arvtype', 'uname18' ) ); types.appendChild( createSimpleCheckbox( 'Describes reproductive or excretory body functions, including genitalia and sexual slang', 'arvtype', 'uname19' ) ); types.appendChild( createSimpleCheckbox( 'Contains slurs, profanity and obscenities', 'arvtype', 'uname20' ) );

twinklearv.choices.appendChild( types ); twinklearv.choices.appendChild( createInput( { id:'twArvReason', value:, text:'Comment ', type:'text', name:'reason', size:80, elem:'div' } ) );

twinklearv.choices.appendChild( createInput( { id:'twArvSubmit', value: 'Submit', name:'submit', type:'submit', elem:'div' } ) ); break;

case 'sock': var legend = document.createElement( 'legend' ); legend.appendChild( document.createTextNode( 'Not implemented' ) );

var div = document.createElement( 'legend' ); div.style.color = 'red'; div.style.fontSize = 'large'; div.style.fontWeight = 'bold'; div.appendChild( document.createTextNode( 'This function is not yet implemented' ) );

twinklearv.choices.appendChild( legend ); twinklearv.choices.appendChild( div );

break; }

}

twinklearv.evaluate = function(e) { twinklearv.reason = ""; var comment = twinklearv.form.reason.value; switch( twinklearv.form.main_choices.value ) { default: case 'aiv': var types = getChecked( twinklearv.form.aivtype ); if( types.length == 0 && comment == ) { alert( 'You must specify some reason' ); return; }

types = types.map( function(v) { switch(v) { case 'final': return 'vandalism after final warning'; break; case 'postblock': return 'vandalism directly after release of block'; break; case 'spambot': return 'account is evidently a spambot or a compromized account'; break; case 'vandalonly': return 'actions evidently indicate a vandalism only account'; break; } } ).join( ', ' );


if( twinklearv.form.page.value != ) { twinklearv.reason += 'On Category):/i, ':$1:' ) + '';

if( twinklearv.form.badid.value != ) { var query = { 'title': twinklearv.form.page.value, 'diff': twinklearv.form.badid.value, 'oldid': twinklearv.form.goodid.value }; twinklearv.reason += ' ([' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( query ) + ' diff])'; } twinklearv.reason += ';'; }

if( types ) { twinklearv.reason += " " + types; } if (comment != ) { twinklearv.reason += ". " + comment + '.'; } Status.init( twinklearv.form );

twinklearv.query = { 'title': 'Wikipedia:Administrator intervention against vandalism', 'action': 'submit', 'section': 1 };

Status.status( "Grabbing AIV page" ); twinklearv.xmlhttp = sajax_init_object(); twinklearv.xmlhttp.overrideMimeType('text/xml'); twinklearv.xmlhttp.open( 'GET' , mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( twinklearv.query ), true); twinklearv.xmlhttp.onload = function() { uid = twinklearv.uid; reason = twinklearv.reason; var form = twinklearv.xmlhttp.responseXML.getElementById('editform');

if( !form ) { Status.error( 'Failed to retrieve edit form.' ); return; } var text = form.wpTextbox1.value;

var re = new RegExp( "\\{\\{\\s*(?:(?:[Ii][Pp])?[Vv]andal|[Uu]serlinks)\\s*\\|\\s*(?:1=)?\\s*" + RegExp.escape( uid, true ) + "\\s*\\}\\}" );

var myArr; if( ( myArr = re.exec( text ) ) ) { Status.info( 'Report already present, will not add a new one' ); return; } Status.status( 'Adding new report...' ); var postData = { 'wpMinoredit': TwinkleConfig.markAIVReportAsMinor ? true : form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': 'Reporting ' + uid + '.'+ TwinkleConfig.summaryAd, 'wpTextbox1': text + '*Predefinição:' + ( isIPAddress( uid ) ? 'IPvandal' : 'vandal' ) + ' - ' + reason + ' ~~' + '~~' }; twinklearv.xmlhttp = sajax_init_object(); twinklearv.xmlhttp.overrideMimeType('text/xml'); twinklearv.xmlhttp.open( 'POST' , mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( twinklearv.query ), true); twinklearv.xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); twinklearv.xmlhttp.onload = function() { window.location = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace( '$1', 'Wikipedia:Administrator intervention against vandalism' ); } twinklearv.xmlhttp.send( QueryString.create( postData ) );

} twinklearv.xmlhttp.send( null );

break;

case 'username': var types = getChecked( twinklearv.form.arvtype ); if( types.length == 0 ) { alert( 'You must specify at least one breached violation' ); return; }

types = types.map( function(v) { return '*' + v + '.' } ).join( "\n" ); var uid = twinklearv.uid; twinklearv.reason = "===" + uid + "===\n:\{\{userlinks|" + uid +"\}\}\n;Violation of username policy because:\n" + types + "\n:"; if (comment != ) { twinklearv.reason += "" + comment + ". "; } twinklearv.reason += "\~\~\~\~"; Status.init( twinklearv.form );

twinklearv.query = { 'title': 'Wikipedia:Requests for comment/User names', 'action': 'submit', 'section': 1 };

Status.status( "Grabbing RFCU page" ); twinklearv.xmlhttp = sajax_init_object(); twinklearv.xmlhttp.overrideMimeType('text/xml'); twinklearv.xmlhttp.open( 'GET' , mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( twinklearv.query ), true); twinklearv.xmlhttp.onload = function() { uid = twinklearv.uid; reason = twinklearv.reason; var form = twinklearv.xmlhttp.responseXML.getElementById('editform');

if( !form ) { Status.error( 'Failed to retrieve edit form.' ); return; } var text = form.wpTextbox1.value;

Status.status( 'Adding new report...' ); var postData = { 'wpMinoredit': form.wpMinoredit.checked, 'wpWatchthis': form.wpWatchthis.checked, 'wpStarttime': form.wpStarttime.value, 'wpEdittime': form.wpEdittime.value, 'wpAutoSummary': form.wpAutoSummary.value, 'wpEditToken': form.wpEditToken.value, 'wpSummary': 'Reporting ' + uid + '.'+ TwinkleConfig.summaryAd, 'wpTextbox1': text.replace( /-->/, "-->\n" + reason ) }; twinklearv.xmlhttp = sajax_init_object(); twinklearv.xmlhttp.overrideMimeType('text/xml'); twinklearv.xmlhttp.open( 'POST' , mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?' + QueryString.create( twinklearv.query ), true); twinklearv.xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); twinklearv.xmlhttp.onload = function() { window.location = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace( '$1', 'Wikipedia:Requests for comment/User names' ); } twinklearv.xmlhttp.send( QueryString.create( postData ) );

} twinklearv.xmlhttp.send( null );


break; } }