User:Primefac/revdel/beta.js

/* revdel.js version 2.3 - tweaking the cancellation process // Attribution See history for all changes ver. 1 originally copied from / based on User:Doug/closetfd.js ver. 2 improved with some major help from User:Evad37 // This template takes a number of inputs

* URLs - input all URLs that the page is copied from * ranges - the template can handle up to four ranges * start1 - mandatory - the revision ID of the oldest revision * end1 - optional - the revision ID of the newest revision - if left out, will only show "start1" (not a range) * start(2-4) - as above, but optional * end(2-4) - as above, but optional

mw.loader.using( ['mediawiki.util', 'oojs-ui', 'mediawiki.api'], function {	var API = new mw.Api( { ajax: { headers: { 'Api-User-Agent': 'revdel/3.1 ( https://en.wikipedia.org/wiki/User:Primefac/revdel.js )'	} }	} );

//Put portlet in menu var link = mw.util.addPortletLink('p-cactions', 'javascript:revdel_request', "Request revdel B"); $( link ).click( function revdel_request	{		Dialog = function(config) {			Dialog.super.call(this, config);		};		OO.inheritClass(Dialog, OO.ui.ProcessDialog);		Dialog.static.name = 'revdel_request';		Dialog.static.title = 'Request revision deletion';		Dialog.static.actions = [			{ action: 'submit', label: 'Submit', flags: ['primary', 'constructive'] },			{ label: 'Cancel', flags: 'safe' }		];		Dialog.prototype.getApiManager = function {			return this.apiManager;		};		Dialog.prototype.getBodyHeight = function {			return 208;		};		Dialog.prototype.initialize = function {			Dialog.super.prototype.initialize.call( this );			this.editFieldset = new OO.ui.FieldsetLayout( { classes: ['container'] });			this.editPanel = new OO.ui.PanelLayout({ expanded: false });			this.editPanel.$element.append( this.editFieldset.$element );			this.urlInput = new OO.ui.TextInputWidget({ value: 'insert URL(s) here, separated by a space' });			this.start1Input = new OO.ui.TextInputWidget({ value: '' });			this.end1Input = new OO.ui.TextInputWidget({ value: '' });			this.start2Input = new OO.ui.TextInputWidget({ value: '' });			this.end2Input = new OO.ui.TextInputWidget({ value: '' });			this.start3Input = new OO.ui.TextInputWidget({ value: '' });			this.end3Input = new OO.ui.TextInputWidget({ value: '' });			this.start4Input = new OO.ui.TextInputWidget({ value: '' });			this.end4Input = new OO.ui.TextInputWidget({ value: '' });			this.copyPatrolInput = new OO.ui.TextInputWidget({ value: '' });			this.watchPageCheckbox = new OO.ui.CheckboxInputWidget({ selected: false });			var formElements = [				new OO.ui.FieldLayout(this.urlInput, { label: 'URL(s)' }),				//new OO.ui.FieldLayout(this.expiryInput, { //	label: 'Expiry (optional)' //}),				new OO.ui.FieldLayout(this.start1Input, { label: 'start1' }),				new OO.ui.FieldLayout(this.end1Input, { label: 'end1 (opt.)' }),				new OO.ui.FieldLayout(this.start2Input, { label: 'start2 (opt.)' }),				new OO.ui.FieldLayout(this.end2Input, { label: 'end2 (opt.)' }),				new OO.ui.FieldLayout(this.start3Input, { label: 'start3 (opt.)' }),				new OO.ui.FieldLayout(this.end3Input, { label: 'end3 (opt.)' }),				new OO.ui.FieldLayout(this.start4Input, { label: 'start4 (opt.)' }),				new OO.ui.FieldLayout(this.end4Input, { label: 'end4 (opt.)' }),				new OO.ui.FieldLayout(this.copyPatrolInput, { label: 'CopyPatrol (opt.)' }),			];			if (!!templates[permission]) {				formElements.push( new OO.ui.FieldLayout(this.watchPageCheckbox, {					label: 'Watch page'					}) );			}			this.editFieldset.addItems(formElements);			this.submitPanel = new OO.ui.PanelLayout( { $: this.$, expanded: false } );			this.submitFieldset = new OO.ui.FieldsetLayout( { classes: ['container'] } );			this.submitPanel.$element.append( this.submitFieldset.$element );			this.changeRightsProgressLabel = new OO.ui.LabelWidget;			this.changeRightsProgressField = new OO.ui.FieldLayout( this.changeRightsProgressLabel );			this.markAsDoneProgressLabel = new OO.ui.LabelWidget;			this.markAsDoneProgressField = new OO.ui.FieldLayout( this.markAsDoneProgressLabel );			this.issueTemplateProgressLabel = new OO.ui.LabelWidget;			this.issueTemplateProgressField = new OO.ui.FieldLayout( this.issueTemplateProgressLabel );			this.stackLayout = new OO.ui.StackLayout( { items: [this.editPanel, this.submitPanel], padded: true } );			this.$body.append( this.stackLayout.$element );			$( '.mw-widget-dateInputWidget' ).css( 'width', '100%' );		};

Dialog.prototype.onSubmit = function { var self = this, promiseCount = !!templates[permission] ? 3 : 2;

self.actions.setAbilities( { submit: false } );

addPromise = function( field, promise ) { self.pushPending; promise.done(function {					field.$field.append( $( ' ' ) .text( 'Complete!' ) .prop('style', 'position:relative; top:0.5em; color: #009000; font-weight: bold') );				}).fail(function(obj) {					if ( obj && obj.error && obj.error.info ) {						field.$field.append( $( ' ' ) .text('Error: ' + obj.error.info) .prop('style', 'position:relative; top:0.5em; color: #cc0000; font-weight: bold') );					} else {						field.$field.append( $( ' ' ) .text('An unknown error occurred.') .prop('style', 'position:relative; top:0.5em; color: #cc0000; font-weight: bold') );					}				}).always( function {					promiseCount--; // FIXME: maybe we could use a self.isPending or something					self.popPending;

if (promiseCount === 0) { setTimeout(function {							location.reload(true);						}, 1000); }				});

return promise; };

self.markAsDoneProgressField.setLabel( 'Marking request as done...' ); self.submitFieldset.addItems( [self.markAsDoneProgressField] ); self.changeRightsProgressField.setLabel( 'Assigning rights...' ); self.submitFieldset.addItems( [self.changeRightsProgressField] ); if (!!templates[permission]) { self.issueTemplateProgressField.setLabel( 'Issuing template...' ); self.submitFieldset.addItems( [self.issueTemplateProgressField] ); }

// Set up output text var outputText = '{' + '{copyvio-revdel' + '|url=' + this.urlInput.getValue + '|start1=' + this.start1Input.getValue; if(this.end1Input.getValue!==''){ outputText += '|end1=' + this.end1Input.getValue; }			if(this.start2Input.getValue!==''){ outputText += '|start2=' + this.start2Input.getValue; if(this.end2Input.getValue!==''){ outputText += '|end2=' + this.end2Input.getValue; }			}			if(this.start3Input.getValue!==''){ outputText += '|start3=' + this.start3Input.getValue; if(this.end3Input.getValue!==''){ outputText += '|end3=' + this.end3Input.getValue; }			}			if(this.start4Input.getValue!==''){ outputText += '|start4=' + this.start4Input.getValue; if(this.end4Input.getValue!==''){ outputText += '|end4=' + this.end4Input.getValue; }			}			if(this.copyPatrolInput.getValue!==''){ outputText += '|CopyPatrol=' + this.copyPatrolInput.getValue; }			outputText += "}}\n"; addPromise(				self.markAsDoneProgressField,				markAsDone(outputText)			);/*.then(function(data) {				addPromise( self.changeRightsProgressField, assignPermission(						this.urlInput.getValue,						data.edit.newrevid,						this.expiryInput.getValue					) ).then(function { // silently add user to MMS list if (permission === 'New page reviewer') addToMMSList;

if (!!templates[permission]) { addPromise(							self.issueTemplateProgressField,							issueTemplate(this.watchPageCheckbox.isSelected, this.expiryInput.getValue)						); }				}.bind(this));			}.bind(this));*/

self.stackLayout.setItem( self.submitPanel ); };

Dialog.prototype.getActionProcess = function( action ) { return Dialog.super.prototype.getActionProcess.call( this, action ).next( function {				if ( action === 'submit' ) {					return this.onSubmit;				} else {					return Dialog.super.prototype.getActionProcess.call( this, action );				}			}, this ); };

dialog = new Dialog({			size: 'medium'		});

var windowManager = new OO.ui.WindowManager; $('body').append(windowManager.$element); windowManager.addWindows([dialog]); windowManager.openWindow(dialog); /*		// Input ranges var numRanges = prompt("How many ranges to revdel? (max 4)"); if(numRanges===null || numRanges==="") return 0; // Input URL(s) var urls = prompt("URL(s)"); if(urls===null || urls==="") if(numRanges===null || numRanges==="") return 0; // Dummy check to ensure correct number of inputs while(numRanges < 1 || numRanges > 4){ numRanges = prompt("ERROR: number is not between 1 and 4. How many ranges?"); }		// Input start/end values for the range(s) var startX = ""; var endX = ""; var ct=1; var idOutput = ""; // Input IDs while(ct <= numRanges){ startX = prompt("The ID of the first (oldest) revision to be deleted in range " + ct); endX = prompt("(optional) The ID of the last (newest) revision to be deleted in range" + ct); idOutput += "|start" + ct + "= " + startX; // Checks to ensure the endX value is greater than the startX, then appends endX value if(startX < endX){ idOutput += "|end" + ct + "= " + endX; }			ct++; }		*/		/*		// Edit and modify the page API.postWithToken( "edit", {			action: "edit",			title: mw.config.get( "wgPageName"),			prependtext:"{" + "{copyvio-revdel" + "|url=" + urls + idOutput + "}}\n",			summary:"Requesting revision deletion (using User:Primefac/revdel)"		}).done( function {			// Code to execute if saved successfully			// Maybe reload the page:			location.reload;		}).fail( function( code, jqxhr ) {			// Edit failed. The reason will be in the code and/or jqxhr parameters...			if ( code === "http" && jqxhr.textStatus === "error" ) {				console.log( "HTTP error " + jqxhr.xhr.status );			} else if ( code === "http" ) {				console.log( "HTTP error: " + jqxhr.textStatus );			} else if ( code === "ok-but-empty" ) {				console.log( "Error: Got an empty response from the server" );			} else {				console.log( "API error: " + code );			}		}); */	} ) ;

function markAsDone(closingRemarks) { return api.postWithToken( 'edit', {			format: 'json',			action: 'edit',			title: mw.config.get('wgPageName'),			summary: 'Requesting revision deletion (using User:Primefac/revdel)',			prependtext: closingRemarks		}); } } );