User:PiRSquared17/friendlywelcome.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
// <nowiki>
// If FriendlyConfig aint exist.
if( typeof( FriendlyConfig ) == 'undefined' ) {
	FriendlyConfig = {};
}
 
/**
 FriendlyConfig.summaryAd ( string )
 If ad should be added or not to summary, default [[WP:FRIENDLY|Friendly]]
 */
if( typeof( FriendlyConfig.summaryAd ) == 'undefined' ) {
	FriendlyConfig.summaryAd = " ([[WP:TW|TW]])";
}
 
/**
 FriendlyConfig.topWelcomes ( boolean )
 */
if( typeof( FriendlyConfig.topWelcomes ) == 'undefined' ) {
	FriendlyConfig.topWelcomes = false;
}
 
/**
 FriendlyConfig.watchWelcomes ( boolean )
 */
if( typeof( FriendlyConfig.watchWelcomes ) == 'undefined' ) {
	FriendlyConfig.watchWelcomes = true;
}
 
/**
 FriendlyConfig.insertHeadings ( boolean )
 */
if( typeof( FriendlyConfig.insertHeadings ) == 'undefined' ) {
	FriendlyConfig.insertHeadings = true;
}
 
/**
 FriendlyConfig.welcomeHeading ( string )
 */
if( typeof( FriendlyConfig.welcomeHeading ) == 'undefined' ) {
	FriendlyConfig.welcomeHeading = "== Welcome ==";
}
 
/**
 FriendlyConfig.insertUsername ( boolean )
 */
if( typeof( FriendlyConfig.insertUsername ) == 'undefined' ) {
	FriendlyConfig.insertUsername = true;
}
 
/**
 FriendlyConfig.insertSignature ( boolean )
 */
if( typeof( FriendlyConfig.insertSignature ) == 'undefined' ) {
	FriendlyConfig.insertSignature = true;
}
 
/**
 FriendlyConfig.markWelcomesAsMinor ( boolean )
 */
if( typeof( FriendlyConfig.markWelcomesAsMinor ) == 'undefined' ) {
	FriendlyConfig.markWelcomesAsMinor = true;
}
 
/**
 FriendlyConfig.quickWelcomeMode ( String )
 */
if( typeof( FriendlyConfig.quickWelcomeMode ) == 'undefined' ) {
	FriendlyConfig.quickWelcomeMode = "auto";
}
 
/**
 FriendlyConfig.quickWelcomeTemplate ( String )
 */
if( typeof( FriendlyConfig.quickWelcomeTemplate ) == 'undefined' ) {
	FriendlyConfig.quickWelcomeTemplate = "Welcome";
}
 
/**
 FriendlyConfig.maskTemplateInSummary ( boolean )
 */
if( typeof( FriendlyConfig.maskTemplateInSummary ) == 'undefined' ) {
	FriendlyConfig.maskTemplateInSummary = true;
}
 
friendlywelcome = {
	auto: function() {
		if( QueryString.get( 'action' ) != 'edit' ) {
			// userpage not empty, aborting auto-welcome
			return;
		}
 
		return friendlywelcome.welcome();
	},
	semiauto: function()  {
		friendlywelcome.callback( wgTitle.split( '/' )[0].replace( /\"/, "\\\"") );
	},
	normal: function() {
		if( QueryString.exists( 'diff' ) ) {
			var oXPath = '//div[@id="mw-diff-otitle2"]/span[@class="mw-usertoollinks"]/a[1][@class="new"]';
			var nXPath = '//div[@id="mw-diff-ntitle2"]/span[@class="mw-usertoollinks"]/a[1][@class="new"]';
			var oList = document.evaluate( oXPath, document, null,  XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
			var nList = document.evaluate( nXPath, document, null,  XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
 
			if( oList.snapshotLength > 0 || nList.snapshotLength > 0 ) {
				var spanTag = function( color, content ) {
					var span = document.createElement( 'span' );
					span.style.color = color;
					span.appendChild( document.createTextNode( content ) );
					return span;
				}
 
				var welcomeNode = document.createElement('strong');
				var welcomeLink = document.createElement('a');
				welcomeLink.appendChild( spanTag( 'Black', '[' ) );
				welcomeLink.appendChild( spanTag( 'Goldenrod', 'welcome' ) );
				welcomeLink.appendChild( spanTag( 'Black', ']' ) );
				welcomeNode.appendChild(welcomeLink);
 
				if( oList.snapshotLength > 0 ) {
					var oTalkNode = oList.snapshotItem(0);
 
					var oHref = document.evaluate( '@href', oTalkNode, null, XPathResult.STRING_TYPE, null ).stringValue;
 
					var oWelcomeNode = welcomeNode.cloneNode( true );
					oWelcomeNode.firstChild.setAttribute( 'href', oHref + '&' + QueryString.create( { 'friendlywelcome': 'norm' } ) + '&' + QueryString.create( { 'vanarticle': wgPageName.replace(/_/g, ' ') } ) );
					oTalkNode.parentNode.parentNode.appendChild( document.createTextNode( ' ' ) );
					oTalkNode.parentNode.parentNode.appendChild( oWelcomeNode );
				}
 
				if( nList.snapshotLength > 0 ) {
					var nTalkNode = nList.snapshotItem(0);
 
					var nHref = document.evaluate( '@href', nTalkNode, null, XPathResult.STRING_TYPE, null ).stringValue;
 
					var nWelcomeNode = welcomeNode.cloneNode( true );
					nWelcomeNode.firstChild.setAttribute( 'href', nHref + '&' + QueryString.create( { 'friendlywelcome': 'norm' } ) + '&' + QueryString.create( { 'vanarticle': wgPageName.replace(/_/g, ' ') } ) );
					nTalkNode.parentNode.parentNode.appendChild( document.createTextNode( ' ' ) );
					nTalkNode.parentNode.parentNode.appendChild( nWelcomeNode );
				}
			}
		}
		if( wgNamespaceNumber == 3 ) {
			var username = wgTitle.split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
 
			mw.util.addPortletLink( 'p-cactions', "javascript:friendlywelcome.callback(\"" + username + "\")", "Wel", "friendly-welcome", "Welcome user", "");
		}
	}
}
 
friendlywelcome.welcome = function welcomeUser() {
	Status.init( document.getElementById('bodyContent') );
 
	var params = {
		value: FriendlyConfig.quickWelcomeTemplate,
		article: QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : '',
		mode: 'auto'
	};
 
	var query = { 
		'title': wgPageName, 
		'action': 'submit'
	};
	Wikipedia.actionCompleted.redirect = wgPageName;
	Wikipedia.actionCompleted.notice = "Welcoming complete, reloading talk page in some seconds";
	var wikipedia_wiki = new Wikipedia.wiki( 'User talk page modification', query, friendlywelcome.callbacks.main );
	wikipedia_wiki.followRedirect = true;
	wikipedia_wiki.params = params;
	wikipedia_wiki.get();
}
 
friendlywelcome.callback = function friendlywelcomeCallback( uid ) {
	var Window = new SimpleWindow( 600, 400 );
	Window.setTitle( "Choose a welcome template" ); 
	var form = new QuickForm( friendlywelcome.callback.evaluate, 'change' );
 
	form.append( {
			type: 'input',
			name: 'article',
			label: 'Linked article (if supported by template)',
			value:( QueryString.exists( 'vanarticle' ) ? QueryString.get( 'vanarticle' ) : '' ),
			tooltip: 'An article might be linked to the welcome if the template supports it. Leave empty for no artice to be linked.  Templates that support a linked article are marked with an asterisk.  Ignored for templates that do not support a linked article.',
			event: function( event ) {
				event.stopPropagation();
			}
		}
	);
 
	form.append( { type:'header', label:'Simple templates' } );
	form.append( { type: 'radio', name: 'simple', list: friendlywelcome.standardList } );

 
	var result = form.render();
	Window.setContent( result );
	Window.display();
}
 
friendlywelcome.standardList = [
		{ 
			label:"{{anon}}: Welcomes and suggests getting username", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"anon"
		},
		{ 
			label:"{{Welcomeanon2}}: Welcomes and suggests getting username with border", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"Welcomeanon2"
		},

		{ 
			label:"{{welcome}}: Plain text welcome", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcome"
		},
		{ 
			label:"{{welcome2}}: Welcome with graphic and orange background", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcome2"
		},
		{ 
			label:"{{welcomeg}}: Welcome with blue background", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcomeg"
		},
		{ 
			label:"{{welcomeq}}: Like welcomeg but shorter", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcomeq"
		},
		{ 
			label:"{{welcome-en}}: Welcome from English Wikipedia", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcome-en"
		},
		{ 
			label:"{{welcome-iw}}: Welcome from another Wikipedia", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcome-iw"
		},
		{ 
			label:"{{welcomevandal}}: Welcome with information about vandalism", 
			summary:"Welcome to the Simple English Wikipedia" ,
			value:"welcomevandal"
		}];
 
// Set to true if template does not already have heading
friendlywelcome.headingHash = {
	'Welcome': true,
	'Welcomeshort': false,
	'WelcomeSimple': false,
	'Welcom': false,
	'Welcome-personal': false,
	'WelcomeMenu': true,
	'Welcomeg': true,
	'Welcomeh': false,
	'Wel': false,
	'W-basic': true,
	'W-shout': true,
	'W-short': true,
	'W-link': true,
	'W-graphical': true,
	'W-screen': true,
	'Welcomelaws': true,
	'Firstarticle': true,
	'Welcomevandal': false,
	'Welcomenpov': true,
	'Welcomespam': true,
	'Welcomeunsourced': true,
	'Welcomeauto': false,
	'Welcome-COI': true,
	'Welcome-anon': true,
	'Welcomeanon2': false,
	'Welc-anon': false,
	'Welcome-anon-vandalism-fighter': false,
	'Welcome-anon-vandal': false
}
 
// Set to true if template already has signature
friendlywelcome.signatureHash = {
	'Welcome': false,
        'Welcome2': true,
	'Welcomeshort': false,
	'WelcomeSimple': false,
	'Welcom': true,
	'Welcome-personal': false,
	'WelcomeMenu': true,
	'Welcomeg': true,
	'Welcomeh': true,
	'Wel': false,
	'W-basic': true,
	'W-shout': true,
	'W-short': true,
	'W-link': true,
	'W-graphical': true,
	'W-screen': true,
	'Welcomelaws': false,
	'Firstarticle': true,
	'Welcomevandal': true,
	'Welcomenpov': false,
	'Welcomespam': false,
	'Welcomeunsourced': false,
	'Welcomeunsourced': false,
	'Welcome-COI': false,
	'Welcome-anon': false,
	'Welcomeanon2': true,
	'Welc-anon': false,
	'Welcome-anon-vandalism-fighter': false,
	'Welcome-anon-vandal': true
}
 
/* Set to true if template supports article
 * name from art template parameter 
 */
friendlywelcome.artHash = {
	'Welcome': true,
	'Welcomeshort': false,
	'WelcomeSimple': false,
	'Welcom': false,
	'Welcome-personal': false,
	'WelcomeMenu': false,
	'Welcomeg': false,
	'Welcomeh': false,
	'Wel': true,
	'W-basic': false,
	'W-shout': false,
	'W-short': false,
	'W-link': false,
	'W-graphical': false,
	'W-screen': false,
	'Welcomelaws': false,
	'Firstarticle': false,
	'welcomevandal': false,
	'Welcomenpov': false,
	'Welcomespam': false,
	'Welcomeunsourced': false,
	'Welcomeauto': true,
	'Welcome-COI': false,
	'Welcome-anon': true,
	'Welcomeanon2': false,
	'Welc-anon': false,
	'Welcome-anon-vandalism-fighter': true,
	'Welcome-anon-vandal': false
}
 
/* Set to true if template supports article
 * name from vanarticle template parameter 
 */
friendlywelcome.vandalHash = {
	'Welcome': false,
	'Welcomeshort': false,
	'WelcomeSimple': false,
	'Welcom': false,
	'Welcome-personal': false,
	'WelcomeMenu': false,
	'Welcomeg': false,
	'Welcomeh': false,
	'Wel': false,
	'W-basic': false,
	'W-shout': false,
	'W-short': false,
	'W-link': false,
	'W-graphical': false,
	'W-screen': false,
	'Welcomelaws': false,
	'Firstarticle': true,
	'welcomevandal': true,
	'Welcomenpov': true,
	'Welcomespam': true,
	'Welcomeunsourced': true,
	'Welcomeauto': false,
	'Welcome-COI': false,
	'Welcome-anon': false,
	'Welcomeanon2': false,
	'Welc-anon': false,
	'Welcome-anon-vandalism-fighter': false,
	'Welcome-anon-vandal': true
}
 
friendlywelcome.callbacks = {
	main: function( self ) {
		var form = self.responseXML.getElementById( 'editform' );
 
		// abort if mode is auto and form is not empty
		if( form.wpTextbox1.value != '\n' && self.params.mode == 'auto' ) {
			Status.info( 'Warning', 'User talk page not empty; aborting automatic welcome' );
			Wikipedia.actionCompleted.event();
			return;
		}
 
		var text = '';
		Status.info( 'Info', 'Will add the welcome template to the '
				+ ( FriendlyConfig.topWelcomes ? 'top' : 'bottom' )
				+ ' of the user\'s talk page.' );
		if( !FriendlyConfig.topWelcomes ) {
			text += form.wpTextbox1.value + '\n';
		}
 
		if( friendlywelcome.headingHash[ self.params.value ] && FriendlyConfig.insertHeadings ) {
			Status.info( 'Info', 'Will create a new heading for the welcome' );
			text += FriendlyConfig.welcomeHeading + "\n";
		}
 
		Status.info( 'Info', 'Will substitute the {{' + self.params.value + '}} welcome template' );
		text += '\{\{subst:' + self.params.value;
 
		if( friendlywelcome.artHash[ self.params.value ] ) {
			if( FriendlyConfig.insertUsername && self.params.value.substring(2,0) != 'W-' ) {
				Status.info( 'Info', 'Will add your username to the template' );
				text += '|' + wgUserName;
			}
 
			if( self.params.article != '' ) {
				Status.info( 'Info', 'Will add article link to the template' );
				text += '|art=' + self.params.article;
			}
		} else if( friendlywelcome.vandalHash[ self.params.value ] ) {
			if( self.params.article != '' ) {
				Status.info( 'Info', 'Will add article link to the template' );
			}
			text += '|' + self.params.article;
 
			if( FriendlyConfig.insertUsername ) {
				Status.info( 'Info', 'Will add your username to the template' );
				text += '|' + wgUserName;
			}
		} else if( FriendlyConfig.insertUsername ) {
			Status.info( 'Info', 'Will add your username to the template' );
			text += '|' + wgUserName;
		} 
 
		text += '\}\}';
 
		if( !friendlywelcome.signatureHash[ self.params.value ] && FriendlyConfig.insertSignature ) {
			Status.info( 'Info', 'Will add your signature after the welcome' );
			text += ' \n\~\~\~\~';
		}
 
		if( FriendlyConfig.topWelcomes ) {
			text += '\n\n' + form.wpTextbox1.value;
		}
 
		var postData = {
			'wpMinoredit': FriendlyConfig.markWelcomesAsMinor ? 1 : undefined,
			'wpWatchthis': form.wpWatchthis.checked ? 1 : (FriendlyConfig.watchWelcomes ? 1 : undefined),
			'wpStarttime': form.wpStarttime.value,
			'wpEdittime': form.wpEdittime.value,
			'wpAutoSummary': form.wpAutoSummary.value,
			'wpEditToken': form.wpEditToken.value,
			'wpSummary': 'Added ' + ( FriendlyConfig.maskTemplateInSummary ? 'welcome' : ( '\{\{[[Template:' + self.params.value + '|' + self.params.value + ']]\}\}' ) )
					+ ' template to user talk page' + FriendlyConfig.summaryAd,
			'wpTextbox1': text
		};
 
		self.post( postData );
	}
}
 
friendlywelcome.callback.evaluate = function friendlywelcomeCallbackEvaluate(e) {
	// Ignore if a change to the text field triggered this event
	if( e.target.name == 'article' ) {
		return;
	}
 
	var params = {
		value: e.target.value,
		article: e.target.form.article.value,
		mode: 'manual'
	};
 
	Status.init( e.target.form );
 
	var query = { 
		'title': wgPageName, 
		'action': 'submit'
	};
	Wikipedia.actionCompleted.redirect = wgPageName;
	Wikipedia.actionCompleted.notice = "Welcoming complete, reloading talk page in some seconds";
	var wikipedia_wiki = new Wikipedia.wiki( 'User talk page modification', query, friendlywelcome.callbacks.main );
	wikipedia_wiki.followRedirect = true;
	wikipedia_wiki.params = params;
	wikipedia_wiki.get();
}
 
$( function() {
		if( QueryString.exists( 'friendlywelcome' ) ) {
			if( QueryString.get( 'friendlywelcome' == 'auto' ) ) {
				friendlywelcome.auto();
			} else {
				friendlywelcome.semiauto();
			}
		} else {
			friendlywelcome.normal();
		}
	}
);
// </nowiki>