:User:Dycedarg/sandbox.js

//

//This is my sandbox for script testing.

// If AssessConfig aint exist.

if( typeof( AssessConfig ) == 'undefined' ) {

AssessConfig = function() {};

}

/**

AssessConfig.summaryAd (string)

If ad should be added or not to summary, default Quick Assessment

*/

if( typeof( AssessConfig.summaryAd ) == 'undefined' ) {

AssessConfig.summaryAd = " using Quick Assessment";

}

/**

AssessConfig.wikiprojectName (string)

This defaults the WikiProject name parameter to the string, default [blank]

*/

if( typeof( AssessConfig.wikiprojectName ) == 'undefined' ) {

AssessConfig.wikiprojectName = " using Quick Assessment";

}

function quickassessment() {

if( wgNamespaceNumber < 0 || wgCanonicalNamespace == "User" || wgCanonicalNamespace == "User_talk") {

return;

}

if( userIsInGroup( 'sysop' ) ) {

mw.util.addPortletLink( 'p-cactions', "javascript:quickassessment.callback()", "assess", "q-assess", "Assess article", "");

} else if (twinkleConfigExists) {

mw.util.addPortletLink( 'p-cactions', "javascript:quickassessment.callback()", "assess", "q-assess", "Assess article", "");

}

else

{

mw.util.addPortletLink('p-cactions', 'javascript:alert("Your account is too new to use Quick Assessment.");', 'x', 'q-assess', 'Assess article', '');

}

}

$(quickassessment);

quickassessment.callback = function quickassessmentCallback() {

var Window = new SimpleWindow( 600, 400 );

Window.setTitle( "WikiProject Assessment" );

var form = new QuickForm( quickassessment.callback.evaluate );

form.append( {

type: 'select',

name: 'category',

label: 'Select class: ',

event: quickassessment.callback.disabledefaults,

list: [

{

label: 'Class',

list: [

{ label: 'Template-Class', value: 'pp-protected' },

{ label: 'List-Class', selected: wgCurRevisionId != false, value: 'pp-dispute' },

{ label: 'NA-Class', value: 'pp-vandalism' },

{ label: 'Stub-Class', value: 'pp-template' },

{ label: 'Start-Class', value: 'pp-usertalk' },

{ label: 'B-Class', value: 'pp-semi-protected' },

{ label: 'GA-Class', value: 'pp-semi-vandalism' },

{ label: 'A-Class', value: 'pp-semi-template' },

{ label: 'FA-Class', value: 'pp-semi-usertalk' },

{ label: 'FL-Class', value: 'pp-semi-spambot' },

{ label: , selected: true, value: }

]

}

]

} );

var flags = form.append( {

type: 'field',

label: 'Options'

} );

flags.append( {

type: 'checkbox',

list: [

{

name: 'bannershell',

label: 'Wrap {{WikiProjectBannerShell}} around the tag',

tooltip: 'Will wrap the template in tags, so that it won\'t transclude',

checked:(wgNamespaceNumber==10),

adminonly: true

},

{

name: 'small',

label: 'Iconify',

tooltip: 'Will use the |small=yes feature of the template, and only render it as a keylock',

adminonly: true

},

{

name: 'cascade',

label: 'Cascade protection',

tooltip: 'Cascade protection will protect all pages that is transcluded into said page'

}

]

} );

if( userIsInGroup( 'sysop' ) ) {

form.append( {

type: 'select',

name: 'expiry',

label: 'Expiration: ',

event: function(event) {

var value = event.target.value;

event.target.form.small.disabled = value != 'indefinite';

},

list: [

{ label: '1 hour', value: '1 hour' },

{ label: '2 hours', value: '2 hours' },

{ label: '3 hours', value: '3 hours' },

{ label: '6 hours', value: '6 hours' },

{ label: '12 hours', value: '12 hours' },

{ label: '1 day', value: '1 day' },

{ label: '2 days', value: '2 days' },

{ label: '3 days', value: '3 days' },

{ label: '4 days', value: '4 days' },

{ label: '5 days', value: '5 days' },

{ label: '6 days', value: '6 days' },

{ label: '1 week', value: '1 week' },

{ label: '2 weeks', value: '2 weeks' },

{ label: '1 month', value: '1 month' },

{ label: '2 months', value: '2 months' },

{ label: '3 months', value: '3 months' },

{ label: '6 months', value: '6 months' },

{ label: '1 year', value: '1 year' },

{ label: 'indefinite', selected: true, value:'indefinite' }

]

} );

} else {

form.append( {

type: 'select',

name: 'expiry',

label: 'Expiration: ',

event: function(event) {

var value = event.target.value;

event.target.form.small.disabled = value != 'indefinite';

},

list: [

{ label: 'temporary', value: 'temporary' },

{ label: 'indefinite', value: 'indefinite' },

{ label: , selected: true, value: }

]

} );

}

form.append( {

type: 'textarea',

name: 'reason',

label: 'Reason: '

} );

form.append( { type:'submit' } );

var result = form.render();

Window.setContent( result );

Window.display();

}

quickassessment.callback.disabledefaults = function twinkleprotectCallbackDisableDefaults(e) {

var root = e.target.form;

if( e.target.value == 'unprotect' ) {

root.noinclude.disabled = true;

root.cascade.disabled = true;

root.expiry.disabled = true;

root.small.disabled = true;

} else {

root.noinclude.disabled = false;

root.cascade.disabled = false;

root.expiry.disabled = false;

root.small.disabled = false;

if( userIsInGroup( 'sysop' ) && root.request_only.checked ){

root.small.disabled = true;

root.noinclude.disabled = true;

}

}

if( /template/.test( e.target.value ) ) {

root.noinclude.checked = true;

root.expiry.disabled = true;

} else {

root.noinclude.checked = false;

}

}

quickassessment.callback.evaluate = function twinkleprotectCallbackEvaluate(e) {

var form = e.target;

var params = {

noinclude: form.noinclude.checked,

cascade: form.cascade.checked,

small: form.small.checked,

reason: form.reason.value,

expiry: form.expiry.value,

type: form.category.value

}

if( userIsInGroup( 'sysop') ) {

var request_only = form.request_only.checked;

if( request_only && params.expiry != 'indefinite' ) {

params.expiry = 'temporary';

}

}

Status.init( form );

if( userIsInGroup( 'sysop' ) && ! request_only ) {

var edit, move, tag = params.type, reason, create = '';

switch( tag ) {

case 'pp-dispute':

edit = 'sysop';

move = 'sysop';

reason = 'Full protection: Dispute';

break;

case 'pp-vandalism':

edit = 'sysop';

move = 'sysop';

reason = 'Full protection: Vandalism';

break;

case 'pp-template':

edit = 'sysop';

move = 'sysop';

reason = 'Full protection: High-visible template';

break;

case 'pp-usertalk':

edit = 'sysop';

move = 'sysop';

reason = 'Full protection: User talk of blocked user';

break;

case 'pp-protected':

edit = 'sysop';

move = 'sysop';

if( params.reason ) {

tag += '|reason=' + params.reason;

params.reason = undefined;

}

reason = 'Full protection';

break;

case 'pp-semi-vandalism':

edit = 'autoconfirmed';

move = 'autoconfirmed';

reason = 'Semi-protection: Vandalism';

break;

case 'pp-semi-usertalk':

edit = 'autoconfirmed';

move = 'autoconfirmed';

reason = 'Semi-protection: User talk of blocked user';

break;

case 'pp-semi-template':

edit = 'autoconfirmed';

move = 'autoconfirmed';

reason = 'Semi-protection: High-visible template';

break;

case 'pp-semi-spambot':

edit = 'autoconfirmed';

move = 'autoconfirmed';

reason = 'Semi-protection: Spambot target';

break;

case 'pp-semi-protected':

edit = 'autoconfirmed';

move = 'autoconfirmed';

if( params.reason ) {

tag += '|reason=' + params.reason;

params.reason = undefined;

}

reason = 'Semi-protection';

break;

case 'pp-move':

edit = '';

move = 'sysop';

reason = 'Move-protection';

break;

case 'pp-create':

edit = '';

move = '';

create = 'sysop';

reason = 'Create-protection: \{\{pp-create\}\}';

break;

case 'unprotect':

default:

edit = '';

move = '';

reason = 'Unprotection';

break;

}

if( params.reason ) {

reason += ', ' + params.reason;

}

reason += '.';

params.reason = reason;

params.tag = tag;

params.edit = edit;

params.move = move;

params.create = create;

var query = {

'title': wgPageName,

'action': 'submit'

};

// Updating data for the action completed event

Wikipedia.actionCompleted.redirect = query['title'];

Wikipedia.actionCompleted.notice = "Done...";

if( create == '' ) {

var wikipedia_wiki = new Wikipedia.wiki( 'Tagging page', query, twinkleprotect.callbacks.sysop.taggingPage );

wikipedia_wiki.params = params;

wikipedia_wiki.get();

}

var query = {

'title': wgPageName,

'action': 'protect'

};

var wikipedia_wiki = new Wikipedia.wiki( 'Protecting page', query, twinkleprotect.callbacks.sysop.protectingPage );

wikipedia_wiki.params = params;

wikipedia_wiki.get();

} else {

var typename, reason;

switch( params.type ) {

case 'pp-dispute':

case 'pp-vandalism':

case 'pp-template':

case 'pp-usertalk':

case 'pp-protected':

typename = 'full protection';

break;

case 'pp-semi-vandalism':

case 'pp-semi-usertalk':

case 'pp-semi-template':

case 'pp-semi-spambot':

case 'pp-semi-protected':

typename = 'semi-protection';

break;

case 'pp-move':

typename = 'move-protection';

break;

case 'pp-create':

typename = 'create-protection';

break;

case 'unprotect':

default:

typename = 'unprotection';

break;

}

switch( params.type ) {

case 'pp-dispute':

reason = 'Dispute';

break;

case 'pp-vandalism':

reason = 'Vandalism';

break;

case 'pp-template':

reason = 'High-visible template';

break;

case 'pp-usertalk':

reason = 'User talk of blocked user';

break;

case 'pp-protected':

reason = '';

break;

case 'pp-semi-vandalism':

reason = 'Vandalism';

break;

case 'pp-semi-usertalk':

reason = 'User talk of blocked user';

break;

case 'pp-semi-template':

reason = 'High-visible template';

break;

case 'pp-semi-spambot':

reason = 'Spambot target';

break;

case 'pp-semi-protected':

reason = '';

break;

case 'pp-move':

reason = '';

break;

case 'pp-create':

reason = '';

break;

case 'unprotect':

default:

reason = '';

break;

}

if( reason != '' ) {

reason = "" + reason + "";

}

if( params.reason ) {

reason += ', ' + params.reason;

}

if( reason != '' ) {

reason += '.';

}

params.reason = reason;

params.typename = typename;

var query = {

'title': 'Wikipedia:Requests for page protection',

'action': 'submit'

};

// Updating data for the action completed event

Wikipedia.actionCompleted.redirect = query['title'];

Wikipedia.actionCompleted.notice = "Nomination completed, redirecting now to the discussion page";

var wikipedia_wiki = new Wikipedia.wiki( 'Requesting protection of page', query, twinkleprotect.callbacks.user );

wikipedia_wiki.params = params;

wikipedia_wiki.get();

}

}

quickassessment.callbacks = {

sysop: {

taggingPage: function( self ) {

var form = self.responseXML.getElementById( 'editform' );

var oldtag_re = /\s*(?:)?\s*\{\{\s*(pp-[^{}]*?|protected|(?:t|v|s|p-|usertalk-v|usertalk-s|sb|move)protected(?:2)?|protected template|privacy protection)\s*?\}\}\s*(?:<\/noinclude>)?\s*/gi;

var text = form.wpTextbox1.value;

text = text.replace( oldtag_re, '' );

if( self.params.type != 'unprotect' && self.params.expiry != 'indefinite' ) {

self.params.tag += '|expiry={{' + 'subst:#time:F j, Y|+' + self.params.expiry +'}}';

if( this.params.small ) {

self.params.tag += '|small=yes';

}

}

var summary;

if( self.params.type == 'unprotect' ) {

summary = 'removing protection template' + TwinkleConfig.summaryAd;

} else {

if( self.params.noinclude ) {

text = "\{\{" + self.params.tag + "\}\}" + text;

} else {

text = "\{\{" + self.params.tag + "\}\}\n" + text;

}

summary = "adding \{\{" + self.params.tag + "\}\}" + TwinkleConfig.summaryAd;

}

var postData = {

'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,

'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,

'wpStarttime': form.wpStarttime.value,

'wpEdittime': form.wpEdittime.value,

'wpAutoSummary': form.wpAutoSummary.value,

'wpEditToken': form.wpEditToken.value,

'wpSummary': summary,

'wpTextbox1': text

};

self.post( postData );

},

protectingPage: function( self ){

var form = self.responseXML.getElementById( 'mw-Protect-Form' );

var postData = {

'wpEditToken': form.wpEditToken.value,

'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined,

'mwProtectCascade': self.params.cascade ? '' : undefined,

'mwProtect-expiry': self.params.expiry != 'indefinite' ? self.params.expiry : undefined,

'mwProtect-level-edit': self.params.edit,

'mwProtect-level-move': self.params.move,

'mwProtect-level-create': self.params.create,

'mwProtect-reason': self.params.reason + TwinkleConfig.protectionSummaryAd

};

self.post( postData );

}

},

user: function( self ) {

var form = self.responseXML.getElementById( 'editform' );

var text = form.wpTextbox1.value;

var rppRe = new RegExp( '====.*?' + RegExp.escape( wgPageName, true ) + '.*?====', 'm' );

var tag = rppRe.exec( text );

if( tag ) {

self.statelem.warn( [ htmlNode( 'strong', tag[0] ) , " is alread placed on the page." ] )

return false;

}

var ns2tag = {

'0' : 'la',

'1' : 'lat',

'2' : 'lu',

'3' : 'lut',

'4' : 'lw',

'5' : 'lwt',

'6' : 'li',

'7' : 'lit',

'8' : 'lm',

'9' : 'lmt',

'10': 'lt',

'11': 'ltt',

'12': 'lh',

'13': 'lht',

'14': 'lc',

'15': 'lct',

'100': 'lp',

'101': 'lpt'

};

var newtag = '==== \{\{' + ns2tag[ wgNamespaceNumber ] + '|' + wgTitle + '\}\} ====' + "\n";

if( ( new RegExp( '^' + RegExp.escape( newtag ).replace( /\s+/g, '\\s*' ), 'm' ) ).test( text ) ) {

self.statelem.error( 'There are already a request available for this page, aborting.' );

return;

}

var words = [];

switch( self.params.expiry ) {

case 'temporary':

words.push( "temporary" );

break;

case 'indefinite':

words.push( "indefinite" );

break;

}

if( self.params.cascade ) {

words.push( "cascading" );

}

words.push( self.params.typename );

newtag += "" + words.join( ' ' ) + "" + ( self.params.reason != ? ' ' + self.params.reason : ) + "\~\~\~\~";

if( self.params.type == 'unprotect' ) {

var str = "==Current requests for unprotection==\n{{Wikipedia:Requests for page protection/URheading}}";

} else {

var str = "==Current requests for protection==\n{{Wikipedia:Requests for page protection/PRheading}}";

}

text = text.replace( str, str + "\n" + newtag + "\n" );

var postData = {

'wpMinoredit': undefined,

'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,

'wpStarttime': form.wpStarttime.value,

'wpEdittime': form.wpEdittime.value,

'wpAutoSummary': form.wpAutoSummary.value,

'wpEditToken': form.wpEditToken.value,

'wpSummary': "Requesting " + self.params.typename + ' of ' + wgPageName.replace('_', ' ') + '.' + TwinkleConfig.summaryAd,

'wpTextbox1': text

};

self.post( postData );

}

}

//