From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// This script is meant to help with [[Wikipedia:Articles for creation/Redirects]]. The GUI

// was put together pretty messily and some of the code isn't too pretty either, but it works.

// To use it, add a new line with

// importScript( 'User:PhantomTech/scripts/AFCRHS.js' );

// to your common.js and add yourself to the Articles for Creation

// checkpage at [[Wikipedia:WikiProject Articles for creation/Participants]]

//

// For help using the script, to report issues or to request changes use [[User Talk:PhantomTech]].



importScript( "MediaWiki:Gadget-morebits.js" );

importStylesheet( "MediaWiki:Gadget-morebits.css" );



( function ( $, mw ) {

	'use strict';

	$( document ).ready( function () {



		function replyButton( sectionID ) {

			var window = new Morebits.simpleWindow( 750, 400 );

			window.setTitle( 'Response Interface' );

			window.setScriptName( 'AFC/R HS' );

			window.addFooterLink( 'Source', 'User:PhantomTech/scripts/AFCRHS.js' );



			var form = new Morebits.quickForm( submitForm );

			form.append( {

				type: 'hidden',

				name: 'sectionID',

				value: sectionID

			} );

			form.append( {

				type: 'radio',

				name: 'acceptRadio',

				list: 

					{ name: 'accept', label: 'Accept', value: true },

					{ name: 'accept', label: 'Decline', value: false, checked: true }

				],

				event: function ( event ) {

					updateDynamicArea( event.target.form );

				}

			} );

			form.append( {

				type: 'div',

				name: 'dynamic_area',

				label: 'Something broke...'

			} );

			form.append( {

				type: 'submit',

				label: 'Submit'

			} );

			var renderedForm = form.render();



			window.setContent( renderedForm );

			window.display();

			updateDynamicArea( renderedForm );

		}



		function updateDynamicArea( form ) {

			var accept = Morebits.quickForm.getElements( form, "accept" )[ 0 ].checked;



			var dynamic_area = new Morebits.quickForm.element( {

				type: 'div',

				name: 'dynamic_area'

			} );



			if ( !accept ) {

				dynamic_area.append( {

					type: 'header',

					label: 'Decline request'

				} );

				dynamic_area.append( {

					type: 'select',

					name: 'declineOptions',

					label: 'Decline reason: ',

					list: 

						{ type: 'option', name: 'declineOptions', value: 'unlikely', label: 'Unlikely title' },

						{ type: 'option', name: 'declineOptions', value: 'exists', label: 'Suggested title exists' },

						{ type: 'option', name: 'declineOptions', value: 'empty', label: 'Submission is empty' },

						{ type: 'option', name: 'declineOptions', value: 'notarget', label: 'Target does not exist' },

						{

							type: 'option',

							name: 'declineOptions',

							value: 'externallink',

							label: 'Target is external link'

						},

						{

							type: 'option',

							name: 'declineOptions',

							value: 'notredirect',

							label: 'Request is not for a redirect'

						},

						{

							type: 'option',

							name: 'declineOptions',

							value: 'editrequest',

							label: 'Request is an edit request'

						},

						{

							type: 'option',

							name: 'declineOptions',

							value: 'notenglish',

							label: 'Request not in english'

						},

						{ type: 'option', name: 'declineOptions', value: 'decline', label: 'Custom reason' }

					

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'comment',

					label: 'Provide custom reason if it is selected: '

				} );

			} else {

				dynamic_area.append( {

					type: 'header',

					label: 'Accept request'

				} );

				dynamic_area.append( {

					type: 'div',

					name: 'redirectTypeInstructions',

					label: 'Enter "none" for none, "to acronym" for {' + '{R' + ' to acronym}}, etc.'

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'redirectTypes',

					label: 'Redirect type: ',

					value: 'none'

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'redirTarget',

					label: 'Redirect target: '

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'comment',

					label: 'Comments: ',

					value: 'All of the redirects you requested were created. Thank you for your contribution to Wikipedia!'

				} );

				dynamic_area.append( {

					type: 'dyninput',

					name: 'redirectList',

					label: 'List of redirects to be created',

					min: 1,

					max: 30,

					sublabel: 'Name: '

				} );

			}



			form.replaceChild( dynamic_area.render(), Morebits.quickForm.getElements( form, "dynamic_area" )[ 0  );

		}



		function submitForm( e ) {

			// Check if we're still on the current version of the page

			var redirectPage = new Morebits.wiki.page( mw.config.get( 'wgPageName' ) );

			redirectPage.load( function () {

				if ( parseInt( redirectPage.getCurrentID() ) !== mw.config.get( 'wgRevisionId' ) ) {

					alert( 'Changes have been made to this page since the version you\'re viewing' );

					return;

				}



				// If version check passes, start making changes

				Morebits.simpleWindow.setButtonsEnabled( false );



				var redirectType, target, redirects;

				var form = e.target;

				var sectionID = parseInt( form.sectionID.value );

				var accept = form.accept 0 ].checked;

				var comment = form.comment.value;

				var redirectTemplateCode = 'accept';

				var page = new Morebits.wiki.page( mw.config.get( 'wgPageName' ) );

				if ( accept ) {

					redirectType = form.redirectTypes.value;

					if ( redirectType !== 'none' ) {

						redirectType = '\n{' + '{R ' + redirectType + '}}';

					} else {

						redirectType = '';

					}

					target = form.redirTarget.value;

					redirects = [];

					for ( var i = 0; i < form.redirectList.length; i++ ) {

						if ( form.redirectList i ].value.length > 0 ) {

							redirects.push( form.redirectList i ].value );

						}

					}

					if (redirects.length === 0) {

						redirects.push(form.redirectList.value);

					}

				} else {

					redirectTemplateCode = form.declineOptions.value;

				}



				Morebits.status.init( form );

				var requestStatus = new Morebits.status( 'Marking request on page as ' + (accept ? 'accepted' : 'denied' ) );



				page.setPageSection( sectionID );

				requestStatus.info( 'Loading request page...' );



				if ( accept ) {

					// Get WikiProjects from target's talk page

					var targetPageTalkPage = new Morebits.wiki.page( 'Talk:' + target );

					targetPageTalkPage.load( function () {

						var talkPageText = '{' + '{sub' + 'st:WPAFC/redirect}}';

						if ( targetPageTalkPage.getPageText().indexOf("{" + "{Disambig" + "Project}}") > -1 || targetPageTalkPage.getPageText().indexOf("{" + "{ Disambig" + "Project }}") > -1 ) {

							talkPageText += '\n{' + '{WikiProject ' + 'Disambiguation|class=redirect}}';

						}

						var match = targetPageTalkPage.getPageText().match( /\{\{ ?((W|w)ikiProject |(W|w)P)(?!Articles for creation)(.*?)(?=\n|\||}})/g );

						if ( match !== null ) {

							for ( var t = 0; t < match.length; t++ ) {

								talkPageText += '\n' + match t  + '|class=redirect}}';

							}

						}



						// Get ready to do some crazy recursion to get around making functions

						// in loops without really solving the problem...

						var index = -1;

						var createRedirectFunction = function () {

							index++;

							var redirectPage = new Morebits.wiki.page( redirects index  );

							redirectPage.load( function () { // Load redirect

								// Create redirect page

								redirectPage.setPageText( '#REDIRECT [[' + target + ']]' + redirectType );

								redirectPage.setEditSummary( 'Creating redirect per request - Using [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

								redirectPage.setCreateOption( 'createonly' );

								redirectPage.setMaxRetries(5);

								redirectPage.save( function () { // Save redirect

									// When that's done...

									var redirectTalkPage = new Morebits.wiki.page( 'Talk:' + redirects index  );

									redirectTalkPage.load( function () { // Load redirect talk

										// Create redirect talk page

										redirectTalkPage.setPageText( talkPageText );

										redirectTalkPage.setEditSummary( 'Creating redirect talk page per request - Using [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

										redirectPage.setMaxRetries(5);

										redirectTalkPage.save( function () { // Save redirect talk

											// When that's done... Do it all over again!

											if ( index + 1 < redirects.length ) {

												createRedirectFunction();

												//setTimeout(createRedirectFunction, 1000);

											} else {

												page.load( function () { // Edit Request

													var text = page.getPageText();

													var match = text.match( /(==.*?==\n)((.|\n)*)/ );



													text = match 1  + '{' + '{afc-c|' + ( accept ? 'a' : 'd' ) + '}}\n' + match 2  + '\n:{' + '{su' + 'bst:afc redirect|' + redirectTemplateCode + '|' + comment + '}} ~~' + '~~\n{' + '{afc' + '-c|b}}';



													page.setPageSection( sectionID );

													page.setPageText( text );

													page.setMaxConflictRetries( 0 );

													page.setEditSummary( 'Responding to redirect request with [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

													page.save();

												} );

											}

										} );

									} );

								} );

							} );

						};



						createRedirectFunction();

						//setTimeout(createRedirectFunction, 1000);

					} );

				} else {

					page.load( function () { // Edit request

						var text = page.getPageText();

						var match = text.match( /(==.*?==\n)((.|\n)*)/ );



						text = match 1  + '{' + '{afc-c|' + ( accept ? 'a' : 'd' ) + '}}\n' + match 2  + '\n:{' + '{su' + 'bst:afc redirect|' + redirectTemplateCode + '|' + comment + '}} ~~' + '~~\n{' + '{afc' + '-c|b}}';



						page.setPageSection( sectionID );

						page.setPageText( text );

						page.setMaxConflictRetries( 0 );

						page.setEditSummary( 'Responding to redirect request with [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

						page.save();

					} );

				}

			} );

		}



		// Only start on the right page and if we're working with the current version

		if ( mw.config.get( 'wgPageName' ) === 'Wikipedia:Articles_for_creation/Redirects' && mw.config.get( 'wgRevisionId' ) === mw.config.get( 'wgCurRevisionId' ) ) {

			mw.loader.using( 'jquery.ui' );

			mw.loader.using( 'jquery.tipsy' );



			// Check if user is approved

			var checkPage = new Morebits.wiki.page( 'Wikipedia:WikiProject Articles for creation/Participants' );

			checkPage.setPageSection( 1 );

			checkPage.load( function () {

				var approvedUsers = checkPage.getPageText().match( /(?:\n\* ?\{\{user2\|(.*?)}})/g );

				if ( approvedUsers === null ) {

					alert( 'Failed to load checkpage' );

				} else if ( $.inArray( mw.user.getName(), approvedUsers ) ) {

					// Add links next to section headings

					$( 'h2:has(.mw-headline:contains("Redirect request"))' ).each( function () {

						var id = $( this ).children().last().find( 'a' ).attr( "href" ).match( /&section=(\d+)/i )[ 1 ];

						var $replyLink = $( '<span class="mw-editsection">[<a href="#null">Respond</a>]</span>' );

						$replyLink.click( function () {

							replyButton( id );

						} );



						$( this ).append( $replyLink );

					} );

				} else {

					alert( 'You aren\'t on the checkpage at [[Wikipedia:WikiProject Articles for creation/Participants]]' );

				}

			} );

		}

	} );

}( jQuery, mediaWiki ) );
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// This script is meant to help with [[Wikipedia:Articles for creation/Redirects]]. The GUI

// was put together pretty messily and some of the code isn't too pretty either, but it works.

// To use it, add a new line with

// importScript( 'User:PhantomTech/scripts/AFCRHS.js' );

// to your common.js and add yourself to the Articles for Creation

// checkpage at [[Wikipedia:WikiProject Articles for creation/Participants]]

//

// For help using the script, to report issues or to request changes use [[User Talk:PhantomTech]].



importScript( "MediaWiki:Gadget-morebits.js" );

importStylesheet( "MediaWiki:Gadget-morebits.css" );



( function ( $, mw ) {

	'use strict';

	$( document ).ready( function () {



		function replyButton( sectionID ) {

			var window = new Morebits.simpleWindow( 750, 400 );

			window.setTitle( 'Response Interface' );

			window.setScriptName( 'AFC/R HS' );

			window.addFooterLink( 'Source', 'User:PhantomTech/scripts/AFCRHS.js' );



			var form = new Morebits.quickForm( submitForm );

			form.append( {

				type: 'hidden',

				name: 'sectionID',

				value: sectionID

			} );

			form.append( {

				type: 'radio',

				name: 'acceptRadio',

				list: 

					{ name: 'accept', label: 'Accept', value: true },

					{ name: 'accept', label: 'Decline', value: false, checked: true }

				],

				event: function ( event ) {

					updateDynamicArea( event.target.form );

				}

			} );

			form.append( {

				type: 'div',

				name: 'dynamic_area',

				label: 'Something broke...'

			} );

			form.append( {

				type: 'submit',

				label: 'Submit'

			} );

			var renderedForm = form.render();



			window.setContent( renderedForm );

			window.display();

			updateDynamicArea( renderedForm );

		}



		function updateDynamicArea( form ) {

			var accept = Morebits.quickForm.getElements( form, "accept" )[ 0 ].checked;



			var dynamic_area = new Morebits.quickForm.element( {

				type: 'div',

				name: 'dynamic_area'

			} );



			if ( !accept ) {

				dynamic_area.append( {

					type: 'header',

					label: 'Decline request'

				} );

				dynamic_area.append( {

					type: 'select',

					name: 'declineOptions',

					label: 'Decline reason: ',

					list: 

						{ type: 'option', name: 'declineOptions', value: 'unlikely', label: 'Unlikely title' },

						{ type: 'option', name: 'declineOptions', value: 'exists', label: 'Suggested title exists' },

						{ type: 'option', name: 'declineOptions', value: 'empty', label: 'Submission is empty' },

						{ type: 'option', name: 'declineOptions', value: 'notarget', label: 'Target does not exist' },

						{

							type: 'option',

							name: 'declineOptions',

							value: 'externallink',

							label: 'Target is external link'

						},

						{

							type: 'option',

							name: 'declineOptions',

							value: 'notredirect',

							label: 'Request is not for a redirect'

						},

						{

							type: 'option',

							name: 'declineOptions',

							value: 'editrequest',

							label: 'Request is an edit request'

						},

						{

							type: 'option',

							name: 'declineOptions',

							value: 'notenglish',

							label: 'Request not in english'

						},

						{ type: 'option', name: 'declineOptions', value: 'decline', label: 'Custom reason' }

					

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'comment',

					label: 'Provide custom reason if it is selected: '

				} );

			} else {

				dynamic_area.append( {

					type: 'header',

					label: 'Accept request'

				} );

				dynamic_area.append( {

					type: 'div',

					name: 'redirectTypeInstructions',

					label: 'Enter "none" for none, "to acronym" for {' + '{R' + ' to acronym}}, etc.'

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'redirectTypes',

					label: 'Redirect type: ',

					value: 'none'

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'redirTarget',

					label: 'Redirect target: '

				} );

				dynamic_area.append( {

					type: 'input',

					name: 'comment',

					label: 'Comments: ',

					value: 'All of the redirects you requested were created. Thank you for your contribution to Wikipedia!'

				} );

				dynamic_area.append( {

					type: 'dyninput',

					name: 'redirectList',

					label: 'List of redirects to be created',

					min: 1,

					max: 30,

					sublabel: 'Name: '

				} );

			}



			form.replaceChild( dynamic_area.render(), Morebits.quickForm.getElements( form, "dynamic_area" )[ 0  );

		}



		function submitForm( e ) {

			// Check if we're still on the current version of the page

			var redirectPage = new Morebits.wiki.page( mw.config.get( 'wgPageName' ) );

			redirectPage.load( function () {

				if ( parseInt( redirectPage.getCurrentID() ) !== mw.config.get( 'wgRevisionId' ) ) {

					alert( 'Changes have been made to this page since the version you\'re viewing' );

					return;

				}



				// If version check passes, start making changes

				Morebits.simpleWindow.setButtonsEnabled( false );



				var redirectType, target, redirects;

				var form = e.target;

				var sectionID = parseInt( form.sectionID.value );

				var accept = form.accept 0 ].checked;

				var comment = form.comment.value;

				var redirectTemplateCode = 'accept';

				var page = new Morebits.wiki.page( mw.config.get( 'wgPageName' ) );

				if ( accept ) {

					redirectType = form.redirectTypes.value;

					if ( redirectType !== 'none' ) {

						redirectType = '\n{' + '{R ' + redirectType + '}}';

					} else {

						redirectType = '';

					}

					target = form.redirTarget.value;

					redirects = [];

					for ( var i = 0; i < form.redirectList.length; i++ ) {

						if ( form.redirectList i ].value.length > 0 ) {

							redirects.push( form.redirectList i ].value );

						}

					}

					if (redirects.length === 0) {

						redirects.push(form.redirectList.value);

					}

				} else {

					redirectTemplateCode = form.declineOptions.value;

				}



				Morebits.status.init( form );

				var requestStatus = new Morebits.status( 'Marking request on page as ' + (accept ? 'accepted' : 'denied' ) );



				page.setPageSection( sectionID );

				requestStatus.info( 'Loading request page...' );



				if ( accept ) {

					// Get WikiProjects from target's talk page

					var targetPageTalkPage = new Morebits.wiki.page( 'Talk:' + target );

					targetPageTalkPage.load( function () {

						var talkPageText = '{' + '{sub' + 'st:WPAFC/redirect}}';

						if ( targetPageTalkPage.getPageText().indexOf("{" + "{Disambig" + "Project}}") > -1 || targetPageTalkPage.getPageText().indexOf("{" + "{ Disambig" + "Project }}") > -1 ) {

							talkPageText += '\n{' + '{WikiProject ' + 'Disambiguation|class=redirect}}';

						}

						var match = targetPageTalkPage.getPageText().match( /\{\{ ?((W|w)ikiProject |(W|w)P)(?!Articles for creation)(.*?)(?=\n|\||}})/g );

						if ( match !== null ) {

							for ( var t = 0; t < match.length; t++ ) {

								talkPageText += '\n' + match t  + '|class=redirect}}';

							}

						}



						// Get ready to do some crazy recursion to get around making functions

						// in loops without really solving the problem...

						var index = -1;

						var createRedirectFunction = function () {

							index++;

							var redirectPage = new Morebits.wiki.page( redirects index  );

							redirectPage.load( function () { // Load redirect

								// Create redirect page

								redirectPage.setPageText( '#REDIRECT [[' + target + ']]' + redirectType );

								redirectPage.setEditSummary( 'Creating redirect per request - Using [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

								redirectPage.setCreateOption( 'createonly' );

								redirectPage.setMaxRetries(5);

								redirectPage.save( function () { // Save redirect

									// When that's done...

									var redirectTalkPage = new Morebits.wiki.page( 'Talk:' + redirects index  );

									redirectTalkPage.load( function () { // Load redirect talk

										// Create redirect talk page

										redirectTalkPage.setPageText( talkPageText );

										redirectTalkPage.setEditSummary( 'Creating redirect talk page per request - Using [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

										redirectPage.setMaxRetries(5);

										redirectTalkPage.save( function () { // Save redirect talk

											// When that's done... Do it all over again!

											if ( index + 1 < redirects.length ) {

												createRedirectFunction();

												//setTimeout(createRedirectFunction, 1000);

											} else {

												page.load( function () { // Edit Request

													var text = page.getPageText();

													var match = text.match( /(==.*?==\n)((.|\n)*)/ );



													text = match 1  + '{' + '{afc-c|' + ( accept ? 'a' : 'd' ) + '}}\n' + match 2  + '\n:{' + '{su' + 'bst:afc redirect|' + redirectTemplateCode + '|' + comment + '}} ~~' + '~~\n{' + '{afc' + '-c|b}}';



													page.setPageSection( sectionID );

													page.setPageText( text );

													page.setMaxConflictRetries( 0 );

													page.setEditSummary( 'Responding to redirect request with [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

													page.save();

												} );

											}

										} );

									} );

								} );

							} );

						};



						createRedirectFunction();

						//setTimeout(createRedirectFunction, 1000);

					} );

				} else {

					page.load( function () { // Edit request

						var text = page.getPageText();

						var match = text.match( /(==.*?==\n)((.|\n)*)/ );



						text = match 1  + '{' + '{afc-c|' + ( accept ? 'a' : 'd' ) + '}}\n' + match 2  + '\n:{' + '{su' + 'bst:afc redirect|' + redirectTemplateCode + '|' + comment + '}} ~~' + '~~\n{' + '{afc' + '-c|b}}';



						page.setPageSection( sectionID );

						page.setPageText( text );

						page.setMaxConflictRetries( 0 );

						page.setEditSummary( 'Responding to redirect request with [[User:PhantomTech/scripts/AFCRHS.js|AFC/R HS]]' );

						page.save();

					} );

				}

			} );

		}



		// Only start on the right page and if we're working with the current version

		if ( mw.config.get( 'wgPageName' ) === 'Wikipedia:Articles_for_creation/Redirects' && mw.config.get( 'wgRevisionId' ) === mw.config.get( 'wgCurRevisionId' ) ) {

			mw.loader.using( 'jquery.ui' );

			mw.loader.using( 'jquery.tipsy' );



			// Check if user is approved

			var checkPage = new Morebits.wiki.page( 'Wikipedia:WikiProject Articles for creation/Participants' );

			checkPage.setPageSection( 1 );

			checkPage.load( function () {

				var approvedUsers = checkPage.getPageText().match( /(?:\n\* ?\{\{user2\|(.*?)}})/g );

				if ( approvedUsers === null ) {

					alert( 'Failed to load checkpage' );

				} else if ( $.inArray( mw.user.getName(), approvedUsers ) ) {

					// Add links next to section headings

					$( 'h2:has(.mw-headline:contains("Redirect request"))' ).each( function () {

						var id = $( this ).children().last().find( 'a' ).attr( "href" ).match( /&section=(\d+)/i )[ 1 ];

						var $replyLink = $( '<span class="mw-editsection">[<a href="#null">Respond</a>]</span>' );

						$replyLink.click( function () {

							replyButton( id );

						} );



						$( this ).append( $replyLink );

					} );

				} else {

					alert( 'You aren\'t on the checkpage at [[Wikipedia:WikiProject Articles for creation/Participants]]' );

				}

			} );

		}

	} );

}( jQuery, mediaWiki ) );

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook